CodeGen: simplify the CC handling for TLS wrappers

Use the calling convention of the wrapper directly to set the calling convention
to ensure that the calling convention matches.  Incorrectly setting the calling
convention results in the code path being entirely nullified as InstCombine +
SimplifyCFG will prune the mismatched CC calls.

llvm-svn: 277390
This commit is contained in:
Saleem Abdulrasool 2016-08-01 21:31:24 +00:00
parent 9f4dc98e96
commit 4a7130a8fb
2 changed files with 12 additions and 2 deletions

View File

@ -2346,8 +2346,7 @@ LValue ItaniumCXXABI::EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF,
llvm::Function *Wrapper = getOrCreateThreadLocalWrapper(VD, Val);
llvm::CallInst *CallVal = CGF.Builder.CreateCall(Wrapper);
if (isThreadWrapperReplaceable(VD, CGF.CGM))
CallVal->setCallingConv(llvm::CallingConv::CXX_FAST_TLS);
CallVal->setCallingConv(Wrapper->getCallingConv());
LValue LV;
if (VD->getType()->isReferenceType())

View File

@ -0,0 +1,11 @@
// RUN: %clang_cc1 -triple thumbv7--windows-itanium -fdeclspec -fms-compatibility -fms-compatibility-version=19.0 -S -emit-llvm -o - %s | FileCheck %s
__declspec(thread) static void *c;
void f(void *p) {
c = p;
}
// CHECK-LABEL: @f(i8* %p)
// CHECK-NOT: call i8** @_ZTWL1c()
// CHECK: call arm_aapcs_vfpcc i8** @_ZTWL1c()