mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-28 22:42:52 +01:00
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). llvm-svn: 18084
This commit is contained in:
parent
ed19f4fe7d
commit
7ec36ad70f
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user