PPC::DBG_VALUE must use Reg+Imm frame-index elimination even for large offsets. Fixes...
authorHal Finkel <hfinkel@anl.gov>
Thu, 22 Mar 2012 05:28:19 +0000 (05:28 +0000)
committerHal Finkel <hfinkel@anl.gov>
Thu, 22 Mar 2012 05:28:19 +0000 (05:28 +0000)
I don't have a small test case yet, but I'll try to construct one.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153240 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCRegisterInfo.cpp

index 2976f010f6abe12ff1bd7a868fda00691b73e899..ef1357137def76942ef92d538ad9a850aa45adca 100644 (file)
@@ -554,7 +554,8 @@ PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
   // clear can be encoded.  This is extremely uncommon, because normally you
   // only "std" to a stack slot that is at least 4-byte aligned, but it can
   // happen in invalid code.
-  if (isInt<16>(Offset) && (!isIXAddr || (Offset & 3) == 0)) {
+  if (OpC == PPC::DBG_VALUE || // DBG_VALUE is always Reg+Imm
+      (isInt<16>(Offset) && (!isIXAddr || (Offset & 3) == 0))) {
     if (isIXAddr)
       Offset >>= 2;    // The actual encoded value has the low two bits zero.
     MI.getOperand(OffsetOperandNo).ChangeToImmediate(Offset);