mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Extend the IL for selecting TLS models (PR9788)
This allows the user/front-end to specify a model that is better than what LLVM would choose by default. For example, a variable might be declared as @x = thread_local(initialexec) global i32 42 if it will not be used in a shared library that is dlopen'ed. If the specified model isn't supported by the target, or if LLVM can make a better choice, a different model may be used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159077 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -130,6 +130,7 @@ namespace {
|
||||
private:
|
||||
void printLinkageType(GlobalValue::LinkageTypes LT);
|
||||
void printVisibilityType(GlobalValue::VisibilityTypes VisTypes);
|
||||
void printThreadLocalMode(GlobalVariable::ThreadLocalMode TLM);
|
||||
void printCallingConv(CallingConv::ID cc);
|
||||
void printEscapedString(const std::string& str);
|
||||
void printCFP(const ConstantFP* CFP);
|
||||
@@ -325,6 +326,26 @@ void CppWriter::printVisibilityType(GlobalValue::VisibilityTypes VisType) {
|
||||
}
|
||||
}
|
||||
|
||||
void CppWriter::printThreadLocalMode(GlobalVariable::ThreadLocalMode TLM) {
|
||||
switch (TLM) {
|
||||
case GlobalVariable::NotThreadLocal:
|
||||
Out << "GlobalVariable::NotThreadLocal";
|
||||
break;
|
||||
case GlobalVariable::GeneralDynamicTLSModel:
|
||||
Out << "GlobalVariable::GeneralDynamicTLSModel";
|
||||
break;
|
||||
case GlobalVariable::LocalDynamicTLSModel:
|
||||
Out << "GlobalVariable::LocalDynamicTLSModel";
|
||||
break;
|
||||
case GlobalVariable::InitialExecTLSModel:
|
||||
Out << "GlobalVariable::InitialExecTLSModel";
|
||||
break;
|
||||
case GlobalVariable::LocalExecTLSModel:
|
||||
Out << "GlobalVariable::LocalExecTLSModel";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// printEscapedString - Print each character of the specified string, escaping
|
||||
// it if it is not printable or if it is an escape char.
|
||||
void CppWriter::printEscapedString(const std::string &Str) {
|
||||
@@ -996,7 +1017,9 @@ void CppWriter::printVariableHead(const GlobalVariable *GV) {
|
||||
}
|
||||
if (GV->isThreadLocal()) {
|
||||
printCppName(GV);
|
||||
Out << "->setThreadLocal(true);";
|
||||
Out << "->setThreadLocalMode(";
|
||||
printThreadLocalMode(GV->getThreadLocalMode());
|
||||
Out << ");";
|
||||
nl(Out);
|
||||
}
|
||||
if (is_inline) {
|
||||
|
||||
Reference in New Issue
Block a user