diff options
| author | Lauro Ramos Venancio <lauro.venancio@gmail.com> | 2007-03-27 16:19:21 +0000 |
|---|---|---|
| committer | Lauro Ramos Venancio <lauro.venancio@gmail.com> | 2007-03-27 16:19:21 +0000 |
| commit | 143b0dff319c23324f60a3536ef37c536c0a6c65 (patch) | |
| tree | 93ea08948a49463f73e694dcd1593a613c381a33 /llvm/lib/Target/ARM/ARMISelLowering.cpp | |
| parent | 37a0bfe1288f3a27111468df0a5d3b5af94aed8c (diff) | |
| download | bcm5719-llvm-143b0dff319c23324f60a3536ef37c536c0a6c65.tar.gz bcm5719-llvm-143b0dff319c23324f60a3536ef37c536c0a6c65.zip | |
bugfix: sometimes the spiller puts a load between the "mov lr, pc" and "bx" of a CALL_NOLINK.
llvm-svn: 35381
Diffstat (limited to 'llvm/lib/Target/ARM/ARMISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index cb3d923351f..50ac5e9c69d 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -555,10 +555,10 @@ SDOperand ARMTargetLowering::LowerCALL(SDOperand Op, SelectionDAG &DAG) { CallOpc = (isDirect || Subtarget->hasV5TOps()) ? ARMISD::CALL : ARMISD::CALL_NOLINK; } - if (CallOpc == ARMISD::CALL_NOLINK) { - // On CALL_NOLINK we must move PC to LR + if (CallOpc == ARMISD::CALL_NOLINK && !Subtarget->isThumb()) { + // implicit def LR - LR mustn't be allocated as GRP:$dst of CALL_NOLINK Chain = DAG.getCopyToReg(Chain, ARM::LR, - DAG.getRegister(ARM::PC, MVT::i32), InFlag); + DAG.getNode(ISD::UNDEF, MVT::i32), InFlag); InFlag = Chain.getValue(1); } |

