diff options
| author | David Goodwin <david_goodwin@apple.com> | 2009-07-20 15:55:39 +0000 |
|---|---|---|
| committer | David Goodwin <david_goodwin@apple.com> | 2009-07-20 15:55:39 +0000 |
| commit | 802a0b576f9dc217d6be4acb354a12f181ccb6dc (patch) | |
| tree | d958bb8e1d54fb03e04527e7d3a1701c394940e6 /llvm/lib | |
| parent | 40ed0ae8eff02bb0421432820df8c2c6358bb8d9 (diff) | |
| download | bcm5719-llvm-802a0b576f9dc217d6be4acb354a12f181ccb6dc.tar.gz bcm5719-llvm-802a0b576f9dc217d6be4acb354a12f181ccb6dc.zip | |
Use t2LDRri12 for frame index loads.
llvm-svn: 76424
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp index bb8629a74d5..95ed887ef6d 100644 --- a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp +++ b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp @@ -596,8 +596,17 @@ bool ARMDAGToDAGISel::SelectT2ShifterOperandReg(SDValue Op, SDValue N, bool ARMDAGToDAGISel::SelectT2AddrModeImm12(SDValue Op, SDValue N, SDValue &Base, SDValue &OffImm) { // Match simple R + imm12 operands. - if (N.getOpcode() != ISD::ADD) + + // Match frame index... + if (N.getOpcode() != ISD::ADD) { + if (N.getOpcode() == ISD::FrameIndex) { + int FI = cast<FrameIndexSDNode>(N)->getIndex(); + Base = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy()); + OffImm = CurDAG->getTargetConstant(0, MVT::i32); + return true; + } return false; + } if (ConstantSDNode *RHS = dyn_cast<ConstantSDNode>(N.getOperand(1))) { int RHSC = (int)RHS->getZExtValue(); @@ -686,8 +695,7 @@ bool ARMDAGToDAGISel::SelectT2AddrModeSoReg(SDValue Op, SDValue N, if (N.getOpcode() != ISD::ADD && N.getOpcode() != ISD::SUB) { Base = N; if (N.getOpcode() == ISD::FrameIndex) { - int FI = cast<FrameIndexSDNode>(N)->getIndex(); - Base = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy()); + return false; // we want to select t2LDRri12 instead } else if (N.getOpcode() == ARMISD::Wrapper) { Base = N.getOperand(0); if (Base.getOpcode() == ISD::TargetConstantPool) |

