aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/PowerPC/PPC32ISelSimple.cpp
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2004-11-21 05:14:06 +0000
committerNate Begeman <natebegeman@mac.com>2004-11-21 05:14:06 +0000
commit486ebfd7049a42682762cc25c368d1a9ce3aed7b (patch)
tree5b8f0ac42b86e4a4b8295b359727d0207f3d81bc /lib/Target/PowerPC/PPC32ISelSimple.cpp
parentb0f72a17d9a852d5fd2e67f36636d8536cd60cc5 (diff)
Fix Shootout-C++/wc, which was broken by my recent changes to emit fewer
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
Diffstat (limited to 'lib/Target/PowerPC/PPC32ISelSimple.cpp')
-rw-r--r--lib/Target/PowerPC/PPC32ISelSimple.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/Target/PowerPC/PPC32ISelSimple.cpp b/lib/Target/PowerPC/PPC32ISelSimple.cpp
index c4babe0614..83ace16393 100644
--- a/lib/Target/PowerPC/PPC32ISelSimple.cpp
+++ b/lib/Target/PowerPC/PPC32ISelSimple.cpp
@@ -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