diff options
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/pr27071.ll | 29 |
2 files changed, 30 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index a0752b62400..bb6415d5e3c 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -22987,7 +22987,7 @@ X86TargetLowering::EmitLoweredTLSAddr(MachineInstr *MI, // Emit CALLSEQ_START right before the instruction. unsigned AdjStackDown = TII.getCallFrameSetupOpcode(); MachineInstrBuilder CallseqStart = - BuildMI(MF, DL, TII.get(AdjStackDown)).addImm(0); + BuildMI(MF, DL, TII.get(AdjStackDown)).addImm(0).addImm(0); BB->insert(MachineBasicBlock::iterator(MI), CallseqStart); // Emit CALLSEQ_END right after the instruction. diff --git a/llvm/test/CodeGen/X86/pr27071.ll b/llvm/test/CodeGen/X86/pr27071.ll new file mode 100644 index 00000000000..13608d51077 --- /dev/null +++ b/llvm/test/CodeGen/X86/pr27071.ll @@ -0,0 +1,29 @@ +; RUN: llc -relocation-model pic < %s | FileCheck %s +target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" +target triple = "i386-unknown-freebsd" + +@x1 = external thread_local global i32, align 4 + +define void @x3() #0 { +entry: + %0 = load i32, i32* @x1, align 4 + %cond = icmp eq i32 %0, 92 + br i1 %cond, label %sw.bb, label %sw.epilog + +sw.bb: ; preds = %entry + call void @x2(i8* null) + unreachable + +sw.epilog: ; preds = %entry + ret void +} + +declare void @x2(i8*) + +attributes #0 = { optsize } + +; CHECK-LABEL: x3: +; CHECK: addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.L0$pb), %[[REG:.*]] +; CHECK-NEXT: leal x1@TLSGD(,%[[REG]]), %eax +; CHECK-NEXT: calll ___tls_get_addr@PLT +; CHECK-NEXT: cmpl $92, (%eax) |