[llvm-commits] [llvm] r121330 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/tlv-2.ll

Eric Christopher echristo at apple.com
Wed Dec 8 16:27:58 PST 2010


Author: echristo
Date: Wed Dec  8 18:27:58 2010
New Revision: 121330

URL: http://llvm.org/viewvc/llvm-project?rev=121330&view=rev
Log:
Remove extraneous copy from DAG conversion for darwin tls. This was
popping up at O0 when it wasn't folded and the fast allocator would
complain.

Added:
    llvm/trunk/test/CodeGen/X86/tlv-2.ll
Modified:
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=121330&r1=121329&r2=121330&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Dec  8 18:27:58 2010
@@ -6200,11 +6200,10 @@
     // TLSCALL will be codegen'ed as call. Inform MFI that function has calls.
     MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
     MFI->setAdjustsStack(true);
-
+    
     // And our return value (tls address) is in the standard call return value
     // location.
-    unsigned Reg = Subtarget->is64Bit() ? X86::RAX : X86::EAX;
-    return DAG.getCopyFromReg(Chain, DL, Reg, getPointerTy());
+    return Chain;
   }
 
   assert(false &&

Added: llvm/trunk/test/CodeGen/X86/tlv-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tlv-2.ll?rev=121330&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/tlv-2.ll (added)
+++ llvm/trunk/test/CodeGen/X86/tlv-2.ll Wed Dec  8 18:27:58 2010
@@ -0,0 +1,32 @@
+; RUN: llc < %s -mtriple x86_64-apple-darwin -O0 | FileCheck %s
+
+ at b = thread_local global i32 5, align 4
+ at a = thread_local global i32 0, align 4
+ at c = internal thread_local global i32 0, align 4
+ at d = internal thread_local global i32 5, align 4
+
+define void @foo() nounwind ssp {
+entry:
+  store i32 1, i32* @a, align 4
+  ; CHECK: movq    _a at TLVP(%rip), %rdi
+  ; CHECK: callq   *(%rdi)
+  ; CHECK: movl    $1, (%rax)
+  
+  store i32 2, i32* @b, align 4
+  ; CHECK: movq    _b at TLVP(%rip), %rdi
+  ; CHECK: callq   *(%rdi)
+  ; CHECK: movl    $2, (%rax)
+
+  store i32 3, i32* @c, align 4
+  ; CHECK: movq    _c at TLVP(%rip), %rdi
+  ; CHECK: callq   *(%rdi)
+  ; CHECK: movl    $3, (%rax)
+  
+  store i32 4, i32* @d, align 4
+  ; CHECK: movq    _d at TLVP(%rip), %rdi
+  ; CHECK: callq   *(%rdi)
+  ; CHECK: movl    $4, (%rax)
+  ; CHECK: addq    $8, %rsp
+  
+  ret void
+}





More information about the llvm-commits mailing list