forked from OSchip/llvm-project
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! llvm-svn: 179588
This commit is contained in:
parent
c9e1d99279
commit
5ff71205ee
|
@ -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…
Reference in New Issue