From: Evan Cheng Date: Tue, 6 Feb 2007 09:11:20 +0000 (+0000) Subject: Select add FI, c correctly. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=8c1a73ad3ffbc121a251b93b0fb4e64187f90645;p=oota-llvm.git Select add FI, c correctly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33960 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMISelDAGToDAG.cpp b/lib/Target/ARM/ARMISelDAGToDAG.cpp index a67ff4fa560..5af9c7368cf 100644 --- a/lib/Target/ARM/ARMISelDAGToDAG.cpp +++ b/lib/Target/ARM/ARMISelDAGToDAG.cpp @@ -454,7 +454,8 @@ bool ARMDAGToDAGISel::SelectThumbAddrModeSP(SDOperand Op, SDOperand N, return false; RegisterSDNode *LHSR = dyn_cast(N.getOperand(0)); - if (LHSR && LHSR->getReg() == ARM::SP) { + if (N.getOperand(0).getOpcode() == ISD::FrameIndex || + (LHSR && LHSR->getReg() == ARM::SP)) { // If the RHS is + imm8 * scale, fold into addr mode. if (ConstantSDNode *RHS = dyn_cast(N.getOperand(1))) { int RHSC = (int)RHS->getValue(); @@ -462,6 +463,10 @@ bool ARMDAGToDAGISel::SelectThumbAddrModeSP(SDOperand Op, SDOperand N, RHSC >>= 2; if (RHSC >= 0 && RHSC < 256) { Base = N.getOperand(0); + if (Base.getOpcode() == ISD::FrameIndex) { + int FI = cast(Base)->getIndex(); + Base = CurDAG->getTargetFrameIndex(FI, TLI.getPointerTy()); + } OffImm = CurDAG->getTargetConstant(RHSC, MVT::i32); return true; }