r277390 - CodeGen: simplify the CC handling for TLS wrappers

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 1 14:31:25 PDT 2016


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()
+




More information about the cfe-commits mailing list