diff options
| author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-10-08 02:50:29 +0000 |
|---|---|---|
| committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-10-08 02:50:29 +0000 |
| commit | 8223c553cfd93280e80925ea4479e0bd317b884d (patch) | |
| tree | 8ba651a4d04eefc9660d0a8a241a5b2533fc7a0b /llvm/lib | |
| parent | 9e4a006ec2d600abe83942a106e0ed99d9c18033 (diff) | |
| download | bcm5719-llvm-8223c553cfd93280e80925ea4479e0bd317b884d.tar.gz bcm5719-llvm-8223c553cfd93280e80925ea4479e0bd317b884d.zip | |
[Sparc] Do not hardcode nop in the delay slot of TLS_CALL. Use DelaySlotFiller to fill the delay slot instead.
llvm-svn: 192160
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Sparc/DelaySlotFiller.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcInstrInfo.td | 4 |
2 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/Sparc/DelaySlotFiller.cpp b/llvm/lib/Target/Sparc/DelaySlotFiller.cpp index 4ae6407b1f4..9a0466aa692 100644 --- a/llvm/lib/Target/Sparc/DelaySlotFiller.cpp +++ b/llvm/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/llvm/lib/Target/Sparc/SparcInstrInfo.td b/llvm/lib/Target/Sparc/SparcInstrInfo.td index e6a9cf53d18..9b74147d3e2 100644 --- a/llvm/lib/Target/Sparc/SparcInstrInfo.td +++ b/llvm/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; |

