diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-08-01 21:31:24 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-08-01 21:31:24 +0000 |
commit | 4a7130a8fb77e45f3e597a132a539ac323ac6a34 (patch) | |
tree | 9cc95945cbad8a80fd4cadd24186c4be442892b5 | |
parent | 9f4dc98e96c69b3f298b0492a7ebb608c4d75ebd (diff) | |
download | bcm5719-llvm-4a7130a8fb77e45f3e597a132a539ac323ac6a34.tar.gz bcm5719-llvm-4a7130a8fb77e45f3e597a132a539ac323ac6a34.zip |
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
-rw-r--r-- | clang/lib/CodeGen/ItaniumCXXABI.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGen/windows-on-arm-itanium-thread-local.c | 11 |
2 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 36eb40ef09c..2492c82f862 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -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()) diff --git a/clang/test/CodeGen/windows-on-arm-itanium-thread-local.c b/clang/test/CodeGen/windows-on-arm-itanium-thread-local.c new file mode 100644 index 00000000000..7f12c367d91 --- /dev/null +++ b/clang/test/CodeGen/windows-on-arm-itanium-thread-local.c @@ -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() + |