- if (SplitEdges && PHIUses.count(PHI)) {
- if (NumSplit == SplitLimit)
- return false;
-
- // A PHI use is in the destination successor so we can't sink the
- // instruction here. Break the critical edge first!
- for (unsigned i = 1, e = PHI->getNumOperands(); i != e; i += 2) {
- unsigned SrcReg = PHI->getOperand(i).getReg();
- if (Defs.count(SrcReg)) {
- MachineBasicBlock *SrcMBB = PHI->getOperand(i+1).getMBB();
- MachineBasicBlock *NewSucc =
- SplitCriticalEdge(MI, SrcMBB, SuccToSinkTo, HasNonPHIUse);
- if (!NewSucc) {
- DEBUG(dbgs() << " *** PUNTING: Not legal or profitable to "
- "break critical edge\n");
- return false;
- }
-
- DEBUG(dbgs() << " *** Splitting critical edge:"
- " BB#" << SrcMBB->getNumber()
- << " -- BB#" << NewSucc->getNumber()
- << " -- BB#" << SuccToSinkTo->getNumber() << '\n');
- SuccToSinkTo = NewSucc;
- InsertPos = NewSucc->begin();
- ++NumSplit;
- break;
- }
- }
- }
- }
+ // collect matching debug values.
+ SmallVector<MachineInstr *, 2> DbgValuesToSink;
+ collectDebugValues(MI, DbgValuesToSink);