[cfe-commits] r69545 - in /cfe/trunk: lib/CodeGen/CGDecl.cpp lib/CodeGen/CodeGenModule.cpp test/CodeGen/thread-specifier.c

Chris Lattner clattner at apple.com
Sun Apr 19 14:07:23 PDT 2009


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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list