diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-03-25 21:49:11 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-03-25 21:49:11 +0000 |
| commit | 020e890a19c90b4efd426ca23a092adcc37c3741 (patch) | |
| tree | 55c7a59c77045e2c5a2029beb6b4b5f421f7265c | |
| parent | 26b8f78f445e83d5b99e34051a2936fcfcd237ec (diff) | |
| download | bcm5719-llvm-020e890a19c90b4efd426ca23a092adcc37c3741.tar.gz bcm5719-llvm-020e890a19c90b4efd426ca23a092adcc37c3741.zip | |
[X86] Emit a proper ADJCALLSTACKDOWN in EmitLoweredTLSAddr
We forgot to add the second machine operand to our ADJCALLSTACKDOWN,
resulting in crashes in PEI.
This fixes PR27071.
llvm-svn: 264465
| -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) |

