From 3bd3419e86867ba88e7ece12c9184a01759ed917 Mon Sep 17 00:00:00 2001 From: Venkatraman Govindaraju Date: Tue, 8 Oct 2013 02:50:29 +0000 Subject: [PATCH] [Sparc] Do not hardcode nop in the delay slot of TLS_CALL. Use DelaySlotFiller to fill the delay slot instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192160 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Sparc/DelaySlotFiller.cpp | 3 ++- lib/Target/Sparc/SparcInstrInfo.td | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Target/Sparc/DelaySlotFiller.cpp b/lib/Target/Sparc/DelaySlotFiller.cpp index 4ae6407b1f4..9a0466aa692 100644 --- a/lib/Target/Sparc/DelaySlotFiller.cpp +++ b/lib/Target/Sparc/DelaySlotFiller.cpp @@ -169,7 +169,7 @@ Filler::findDelayInstr(MachineBasicBlock &MBB, if (slot == MBB.begin()) return MBB.end(); - if (slot->getOpcode() == SP::RET) + if (slot->getOpcode() == SP::RET || slot->getOpcode() == SP::TLS_CALL) return MBB.end(); if (slot->getOpcode() == SP::RETL) { @@ -355,6 +355,7 @@ bool Filler::needsUnimp(MachineBasicBlock::iterator I, unsigned &StructSize) case SP::CALL: structSizeOpNum = 1; break; case SP::JMPLrr: case SP::JMPLri: structSizeOpNum = 2; break; + case SP::TLS_CALL: return false; } const MachineOperand &MO = I->getOperand(structSizeOpNum); diff --git a/lib/Target/Sparc/SparcInstrInfo.td b/lib/Target/Sparc/SparcInstrInfo.td index e6a9cf53d18..9b74147d3e2 100644 --- a/lib/Target/Sparc/SparcInstrInfo.td +++ b/lib/Target/Sparc/SparcInstrInfo.td @@ -845,10 +845,10 @@ let mayLoad = 1 in [(set i32:$dst, (tlsld ADDRrr:$addr, tglobaltlsaddr:$sym))]>; -let Uses = [O6], isCall = 1 in +let Uses = [O6], isCall = 1, hasDelaySlot = 1 in def TLS_CALL : InstSP<(outs), (ins calltarget:$disp, TLSSym:$sym, variable_ops), - "call $disp, $sym\n\tnop", + "call $disp, $sym", [(tlscall texternalsym:$disp, tglobaltlsaddr:$sym)]> { bits<30> disp; let op = 1; -- 2.34.1