Fix Shootout-C++/wc, which was broken by my recent changes to emit fewer
authorNate Begeman <natebegeman@mac.com>
Sun, 21 Nov 2004 05:14:06 +0000 (05:14 +0000)
committerNate Begeman <natebegeman@mac.com>
Sun, 21 Nov 2004 05:14:06 +0000 (05:14 +0000)
reg-reg copies.  The necessary conditions for this bug are a GEP that is
used outside the basic block in which it is defined, whose components
other than the pointer are all constant zero, and where the use is
selected before the definition (backwards branch to successsor block).

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

lib/Target/PowerPC/PPC32ISelSimple.cpp

index c4babe06147d35dad78cef4b325ba9aeae24c2e1..83ace163939fa208fa99b36bbfc477907526e291 100644 (file)
@@ -3835,18 +3835,19 @@ void PPC32ISel::emitGEPOperation(MachineBasicBlock *MBB,
   unsigned TargetReg = getReg(GEPI, MBB, IP);
   unsigned basePtrReg = getReg(Src, MBB, IP);
 
-  if ((indexReg == 0) && remainder->isNullValue())
-    RegMap[GEPI] = basePtrReg;
-
+  if ((indexReg == 0) && remainder->isNullValue()) {
+    BuildMI(*MBB, IP, PPC::OR, 2, TargetReg).addReg(basePtrReg)
+      .addReg(basePtrReg);
+    return;
+  }
   if (!remainder->isNullValue()) {
     unsigned TmpReg = (indexReg == 0) ? TargetReg : makeAnotherReg(Type::IntTy);
     emitBinaryConstOperation(MBB, IP, basePtrReg, remainder, 0, TmpReg);
     basePtrReg = TmpReg;
   }
-  if (indexReg != 0) { 
+  if (indexReg != 0)
     BuildMI(*MBB, IP, PPC::ADD, 2, TargetReg).addReg(indexReg)
       .addReg(basePtrReg);
-  }
 }
 
 /// visitAllocaInst - If this is a fixed size alloca, allocate space from the