Use t2LDRri12 for frame index loads.
authorDavid Goodwin <david_goodwin@apple.com>
Mon, 20 Jul 2009 15:55:39 +0000 (15:55 +0000)
committerDavid Goodwin <david_goodwin@apple.com>
Mon, 20 Jul 2009 15:55:39 +0000 (15:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76424 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelDAGToDAG.cpp

index bb8629a74d53e820dfc107bd7b7420adc5a2c438..95ed887ef6d82aadbce1e1d6a32ed4d90dab2618 100644 (file)
@@ -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)