[PowerPC] fix up in redundant compare elimination

This patch fixes a potential problem in my previous commit (https://reviews.llvm.org/rL312514) by introducing an additional check.

llvm-svn: 318266
This commit is contained in:
Hiroshi Inoue 2017-11-15 04:23:26 +00:00
parent fe7c045753
commit 72a1f98a67
1 changed files with 6 additions and 2 deletions

View File

@ -814,8 +814,12 @@ static bool eligibleForCompareElimination(MachineBasicBlock &MBB,
!MRI->hasOneNonDBGUse(CndReg))
return false;
// We skip this BB if a physical register is used in comparison.
MachineInstr *CMPI = MRI->getVRegDef(CndReg);
// We assume compare and branch are in the same BB for ease of analysis.
if (CMPI->getParent() != &BB)
return false;
// We skip this BB if a physical register is used in comparison.
for (MachineOperand &MO : CMPI->operands())
if (MO.isReg() && !TargetRegisterInfo::isVirtualRegister(MO.getReg()))
return false;
@ -921,7 +925,7 @@ bool PPCMIPeephole::eliminateRedundantCompare(void) {
//
// As partially redundant case, we additionally handle if MBB2 has one
// additional predecessor, which has only one successor (MBB2).
// In this case, we move the compre instruction originally in MBB2 into
// In this case, we move the compare instruction originally in MBB2 into
// MBBtoMoveCmp. This partially redundant case is typically appear by
// compiling a while loop; here, MBBtoMoveCmp is the loop preheader.
//