summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDavid Goodwin <david_goodwin@apple.com>2009-07-20 15:55:39 +0000
committerDavid Goodwin <david_goodwin@apple.com>2009-07-20 15:55:39 +0000
commit802a0b576f9dc217d6be4acb354a12f181ccb6dc (patch)
treed958bb8e1d54fb03e04527e7d3a1701c394940e6 /llvm/lib
parent40ed0ae8eff02bb0421432820df8c2c6358bb8d9 (diff)
downloadbcm5719-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.cpp14
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)
OpenPOWER on IntegriCloud