Support the tls_model attribute (PR9788)
This adds support for the tls_model attribute. This allows the user to
choose a TLS model that is better than what LLVM would select by
default. For example, a variable might be declared as:
__thread int x __attribute__((tls_model("initial-exec")));
if it will not be used in a shared library that is dlopen'ed.
This depends on LLVM r159077.
llvm-svn: 159078
This commit is contained in:
@@ -1187,7 +1187,7 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
|
||||
new llvm::GlobalVariable(getModule(), Ty->getElementType(), false,
|
||||
llvm::GlobalValue::ExternalLinkage,
|
||||
0, MangledName, 0,
|
||||
false, AddrSpace);
|
||||
llvm::GlobalVariable::NotThreadLocal, AddrSpace);
|
||||
|
||||
// Handle things which are present even on external declarations.
|
||||
if (D) {
|
||||
@@ -1211,6 +1211,12 @@ CodeGenModule::GetOrCreateLLVMGlobal(StringRef MangledName,
|
||||
}
|
||||
|
||||
GV->setThreadLocal(D->isThreadSpecified());
|
||||
|
||||
// Set the TLS model if it it's explicitly specified.
|
||||
if (D->hasAttr<TLSModelAttr>()) {
|
||||
const TLSModelAttr *Attr = D->getAttr<TLSModelAttr>();
|
||||
GV->setThreadLocalMode(GetLLVMTLSModel(Attr->getModel()));
|
||||
}
|
||||
}
|
||||
|
||||
if (AddrSpace != Ty->getAddressSpace())
|
||||
|
||||
Reference in New Issue
Block a user