Author: compnerd Date: Mon Aug 1 16:31:24 2016 New Revision: 277390 URL: http://llvm.org/viewvc/llvm-project?rev=277390&view=rev Log: 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. Added: cfe/trunk/test/CodeGen/windows-on-arm-itanium-thread-local.c Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=277390&r1=277389&r2=277390&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original) +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Mon Aug 1 16:31:24 2016 @@ -2346,8 +2346,7 @@ LValue ItaniumCXXABI::EmitThreadLocalVar 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()) Added: cfe/trunk/test/CodeGen/windows-on-arm-itanium-thread-local.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/windows-on-arm-itanium-thread-local.c?rev=277390&view=auto ============================================================================== --- cfe/trunk/test/CodeGen/windows-on-arm-itanium-thread-local.c (added) +++ cfe/trunk/test/CodeGen/windows-on-arm-itanium-thread-local.c Mon Aug 1 16:31:24 2016 @@ -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() + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits