summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/X86/pr27071.ll29
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)
OpenPOWER on IntegriCloud