On Apr 19, 2009, at 2:05 PM, Eli Friedman wrote: > Author: efriedma > Date: Sun Apr 19 16:05:03 2009 > New Revision: 69545 > > URL: http://llvm.org/viewvc/llvm-project?rev=69545&view=rev > Log: > PR3853: Add CodeGen support for __thread.
Hi Eli, Can you add a targetinfo property for "supports TLS"? Darwin doesn't support this and we don't want an explosion in the code generator. Thanks for implementing this! -Chirs > > > > Added: > cfe/trunk/test/CodeGen/thread-specifier.c > Modified: > cfe/trunk/lib/CodeGen/CGDecl.cpp > cfe/trunk/lib/CodeGen/CodeGenModule.cpp > > Modified: cfe/trunk/lib/CodeGen/CGDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDecl.cpp?rev=69545&r1=69544&r2=69545&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CGDecl.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGDecl.cpp Sun Apr 19 16:05:03 2009 > @@ -63,10 +63,6 @@ > if (D.hasAttr<AsmLabelAttr>()) > CGM.ErrorUnsupported(&D, "__asm__"); > > - // We don't support __thread yet. > - if (D.isThreadSpecified()) > - CGM.ErrorUnsupported(&D, "thread local ('__thread') variable", > true); > - > switch (D.getStorageClass()) { > case VarDecl::None: > case VarDecl::Auto: > @@ -110,7 +106,8 @@ > const llvm::Type *LTy = CGM.getTypes().ConvertTypeForMem(Ty); > return new llvm::GlobalVariable(LTy, Ty.isConstant(getContext()), > Linkage, > llvm::Constant::getNullValue(LTy), > Name, > - &CGM.getModule(), 0, > Ty.getAddressSpace()); > + &CGM.getModule(), > D.isThreadSpecified(), > + Ty.getAddressSpace()); > } > > void CodeGenFunction::EmitStaticBlockVarDecl(const VarDecl &D) { > @@ -145,7 +142,7 @@ > > GV = new llvm::GlobalVariable(Init->getType(), OldGV- > >isConstant(), > OldGV->getLinkage(), Init, "", > - &CGM.getModule(), 0, > + &CGM.getModule(), > D.isThreadSpecified(), > D.getType().getAddressSpace()); > > // Steal the name of the old global > > Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=69545&r1=69544&r2=69545&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) > +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sun Apr 19 16:05:03 2009 > @@ -656,10 +656,6 @@ > return llvm::ConstantExpr::getBitCast(Entry, Ty); > } > > - // We don't support __thread yet. > - if (D && D->isThreadSpecified()) > - ErrorUnsupported(D, "thread local ('__thread') variable", true); > - > // This is the first use or definition of a mangled name. If > there is a > // deferred decl with this name, remember that we need to emit it > at the end > // of the file. > @@ -676,7 +672,7 @@ > new llvm::GlobalVariable(Ty->getElementType(), false, > llvm::GlobalValue::ExternalLinkage, > 0, "", &getModule(), > - 0, Ty->getAddressSpace()); > + false, Ty->getAddressSpace()); > GV->setName(MangledName); > > // Handle things which are present even on external declarations. > @@ -691,6 +687,8 @@ > > if (D->hasAttr<WeakAttr>() || D->hasAttr<WeakImportAttr>()) > GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage); > + > + GV->setThreadLocal(D->isThreadSpecified()); > } > > return Entry = GV; > > Added: cfe/trunk/test/CodeGen/thread-specifier.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/thread-specifier.c?rev=69545&view=auto > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/test/CodeGen/thread-specifier.c (added) > +++ cfe/trunk/test/CodeGen/thread-specifier.c Sun Apr 19 16:05:03 2009 > @@ -0,0 +1,10 @@ > +// RUN: clang-cc -emit-llvm -o - %s | grep thread_local | count 4 > + > +__thread int a; > +extern __thread int b; > +int c() { return &b; } > +int d() { > + __thread static int e; > + __thread static union {float a; int b;} f = {.b = 1}; > +} > + > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
