Read/write the offset value for stack-relative loads via correct instr operand.
authorMisha Brukman <brukman+llvm@gmail.com>
Fri, 9 Jul 2004 15:37:16 +0000 (15:37 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Fri, 9 Jul 2004 15:37:16 +0000 (15:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14722 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PowerPCRegisterInfo.cpp

index 67759ef48bb6d54673cfbbf3bb7c399e0b9449bb..148196e8db23a3d0396bf58c6653a0a758324ee3 100644 (file)
@@ -153,21 +153,19 @@ PowerPCRegisterInfo::eliminateFrameIndex(MachineFunction &MF,
 
   int FrameIndex = MI.getOperand(i).getFrameIndex();
 
-  // This must be part of a four operand memory reference.  Replace the
-  // FrameIndex with base register with GPR1.
+  // Replace the FrameIndex with base register with GPR1.
   MI.SetMachineOperandReg(i, PPC32::R1);
 
-  // Take into account whether its an add or mem instruction
-  if (i == 2) i--;
-
+  // Take into account whether it's an add or mem instruction
+  unsigned OffIdx = (i == 2) ? 1 : 2;
   // Now add the frame object offset to the offset from r1.
   int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) +
-               MI.getOperand(i).getImmedValue()+4;
+               MI.getOperand(OffIdx).getImmedValue()+4;
 
   if (!hasFP(MF))
     Offset += MF.getFrameInfo()->getStackSize();
 
-  MI.SetMachineOperandConst(i, MachineOperand::MO_SignExtendedImmed, Offset);
+  MI.SetMachineOperandConst(OffIdx, MachineOperand::MO_SignExtendedImmed, Offset);
   DEBUG(std::cerr << "offset = " << Offset << std::endl);
 }