diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp index b475432bcfb..a0ad2fb0c0b 100644 --- a/lib/CodeGen/StrongPHIElimination.cpp +++ b/lib/CodeGen/StrongPHIElimination.cpp @@ -189,20 +189,18 @@ void StrongPHIElimination::InsertCopiesForPHI(MachineInstr* PHI, SmallPtrSet MBBsInsertedInto; for (unsigned i = 1; i < PHI->getNumOperands(); i += 2) { MachineOperand& SrcMO = PHI->getOperand(i); + + // If a source is defined by an implicit def, there is no need to insert a + // copy in the predecessor. + if (SrcMO.isUndef()) + continue; + unsigned SrcReg = SrcMO.getReg(); unsigned SrcSubReg = SrcMO.getSubReg(); assert(TargetRegisterInfo::isVirtualRegister(SrcReg) && "Machine PHI Operands must all be virtual registers!"); - // If source is defined by an implicit def, there is no need to insert a - // copy. - // FIXME: For some reason, if LiveIntervals is run prior to PHI elimination - // implcit defs have no defining instruction. Is this expected? - MachineInstr* DefMI = MRI->getVRegDef(SrcReg); - if (!DefMI) - continue; - MachineBasicBlock* PredBB = PHI->getOperand(i + 1).getMBB(); // A copy may have already been inserted in the predecessor in the case of a