Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
Merging r142550:
Browse files Browse the repository at this point in the history
------------------------------------------------------------------------
r142550 | evancheng | 2011-10-19 15:22:54 -0700 (Wed, 19 Oct 2011) | 1 line

Fix TLS lowering bug. The CopyFromReg must be glued to the TLSCALL. rdar://10291355
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_30@142555 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
isanbard committed Oct 19, 2011
1 parent 3b89f11 commit bab4120
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lib/Target/X86/X86ISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7526,7 +7526,8 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
// 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 DAG.getCopyFromReg(Chain, DL, Reg, getPointerTy(),
Chain.getValue(1));
}

assert(false &&
Expand Down
17 changes: 17 additions & 0 deletions test/CodeGen/X86/tlv-1.ll
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
@c = external thread_local global %struct.A, align 4

define void @main() nounwind ssp {
; CHECK: main:
entry:
call void @llvm.memset.p0i8.i64(i8* getelementptr inbounds (%struct.A* @c, i32 0, i32 0, i32 0), i8 0, i64 60, i32 1, i1 false)
unreachable
Expand All @@ -14,6 +15,22 @@ entry:
; CHECK-NEXT: movq $0, 48(%rax)
}

; rdar://10291355
define i32 @test() nounwind readonly ssp {
entry:
; CHECK: test:
; CHECK: movq _a@TLVP(%rip),
; CHECK: callq *
; CHECK: movl (%rax), [[REGISTER:%[a-z]+]]
; CHECK: movq _b@TLVP(%rip),
; CHECK: callq *
; CHECK: subl (%rax), [[REGISTER]]
%0 = load i32* @a, align 4
%1 = load i32* @b, align 4
%sub = sub nsw i32 %0, %1
ret i32 %sub
}

declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind

@a = thread_local global i32 0 ; <i32*> [#uses=0]
Expand Down

0 comments on commit bab4120

Please sign in to comment.