Eliminate another common source of moves that the register allocator
authorNate Begeman <natebegeman@mac.com>
Thu, 18 Nov 2004 07:22:46 +0000 (07:22 +0000)
committerNate Begeman <natebegeman@mac.com>
Thu, 18 Nov 2004 07:22:46 +0000 (07:22 +0000)
shouldn't be forced to coalesce for us: folded GEP operations.  This too
fires thousands of times across the testsuite.

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

lib/Target/PowerPC/PPC32ISelSimple.cpp

index 345bccb245c551fde77b89f78c4c781e300da1a5..dfd2ea4fffb320672a484f95959ffd5b14dbe43b 100644 (file)
@@ -3834,8 +3834,6 @@ void PPC32ISel::emitGEPOperation(MachineBasicBlock *MBB,
   // We now have a base register, an index register, and possibly a constant
   // remainder.  If the GEP is going to be folded, we try to generate the
   // optimal addressing mode.
-  unsigned TargetReg = getReg(GEPI, MBB, IP);
-  unsigned basePtrReg = getReg(Src, MBB, IP);
   ConstantSInt *remainder = ConstantSInt::get(Type::IntTy, constValue);
   
   // If we are emitting this during a fold, copy the current base register to
@@ -3853,14 +3851,15 @@ void PPC32ISel::emitGEPOperation(MachineBasicBlock *MBB,
       indexReg = TmpReg;
       remainder = 0;
     }
-    BuildMI (*MBB, IP, PPC::OR, 2, TargetReg).addReg(basePtrReg)
-      .addReg(basePtrReg);
-    GEPMap[GEPI] = FoldedGEP(TargetReg, indexReg, remainder);
+    unsigned basePtrReg = getReg(Src, MBB, IP);
+    GEPMap[GEPI] = FoldedGEP(basePtrReg, indexReg, remainder);
     return;
   }
 
   // We're not folding, so collapse the base, index, and any remainder into the
   // destination register.
+  unsigned TargetReg = getReg(GEPI, MBB, IP);
+  unsigned basePtrReg = getReg(Src, MBB, IP);
   if (indexReg != 0) { 
     unsigned TmpReg = makeAnotherReg(Type::IntTy);
     BuildMI(*MBB, IP, PPC::ADD, 2, TmpReg).addReg(indexReg).addReg(basePtrReg);