mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-19 08:24:12 +00:00
Add four new functions and one new enum to the C API:
LLVMGetThreadLocalMode - exposes GlobalVariable::getThreadLocalMode LLVMSetThreadLocalMode - exposes GlobalVariable::setThreadLocalMode LLVMIsExternallyInitialized - exposes GlobalVariable::isExternallyInitialized LLVMSetExternallyInitialized - exposes GlobalVariable::setExternallyInitialized LLVMThreadLocalMode - maps to GlobalVariable::ThreadLocalMode Patch by Moritz Maxeiner! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179588 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a121e24c54
commit
6334e1351f
@ -352,6 +352,14 @@ typedef enum {
|
||||
LLVMLandingPadFilter /**< A filter clause */
|
||||
} LLVMLandingPadClauseTy;
|
||||
|
||||
typedef enum {
|
||||
LLVMNotThreadLocal = 0,
|
||||
LLVMGeneralDynamicTLSModel,
|
||||
LLVMLocalDynamicTLSModel,
|
||||
LLVMInitialExecTLSModel,
|
||||
LLVMLocalExecTLSModel
|
||||
} LLVMThreadLocalMode;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
@ -1606,6 +1614,10 @@ LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
|
||||
void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
|
||||
LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
|
||||
void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
|
||||
LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
|
||||
void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
|
||||
LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
|
||||
void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
@ -1301,6 +1301,53 @@ void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) {
|
||||
unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
|
||||
}
|
||||
|
||||
LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar) {
|
||||
switch (unwrap<GlobalVariable>(GlobalVar)->getThreadLocalMode()) {
|
||||
case GlobalVariable::NotThreadLocal:
|
||||
return LLVMNotThreadLocal;
|
||||
case GlobalVariable::GeneralDynamicTLSModel:
|
||||
return LLVMGeneralDynamicTLSModel;
|
||||
case GlobalVariable::LocalDynamicTLSModel:
|
||||
return LLVMLocalDynamicTLSModel;
|
||||
case GlobalVariable::InitialExecTLSModel:
|
||||
return LLVMInitialExecTLSModel;
|
||||
case GlobalVariable::LocalExecTLSModel:
|
||||
return LLVMLocalExecTLSModel;
|
||||
}
|
||||
|
||||
llvm_unreachable("Invalid GlobalVariable thread local mode");
|
||||
}
|
||||
|
||||
void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode) {
|
||||
GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
|
||||
|
||||
switch (Mode) {
|
||||
case LLVMNotThreadLocal:
|
||||
GV->setThreadLocalMode(GlobalVariable::NotThreadLocal);
|
||||
break;
|
||||
case LLVMGeneralDynamicTLSModel:
|
||||
GV->setThreadLocalMode(GlobalVariable::GeneralDynamicTLSModel);
|
||||
break;
|
||||
case LLVMLocalDynamicTLSModel:
|
||||
GV->setThreadLocalMode(GlobalVariable::LocalDynamicTLSModel);
|
||||
break;
|
||||
case LLVMInitialExecTLSModel:
|
||||
GV->setThreadLocalMode(GlobalVariable::InitialExecTLSModel);
|
||||
break;
|
||||
case LLVMLocalExecTLSModel:
|
||||
GV->setThreadLocalMode(GlobalVariable::LocalExecTLSModel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar) {
|
||||
return unwrap<GlobalVariable>(GlobalVar)->isExternallyInitialized();
|
||||
}
|
||||
|
||||
void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit) {
|
||||
unwrap<GlobalVariable>(GlobalVar)->setExternallyInitialized(IsExtInit);
|
||||
}
|
||||
|
||||
/*--.. Operations on aliases ......................................--*/
|
||||
|
||||
LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
|
||||
|
Loading…
x
Reference in New Issue
Block a user