diff options
-rw-r--r-- | lib/Target/Sparc/DelaySlotFiller.cpp | 3 | ||||
-rw-r--r-- | 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 4ae6407..9a0466a 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 e6a9cf5..9b74147 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; |