1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

TailDuplicator: Use range loops

llvm-svn: 278847
This commit is contained in:
Matt Arsenault 2016-08-16 20:38:05 +00:00
parent 2b06955f54
commit 5fb34bcd94

View File

@ -78,10 +78,7 @@ static void VerifyPHIs(MachineFunction &MF, bool CheckExtra) {
while (MI != MBB->end()) {
if (!MI->isPHI())
break;
for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
PE = Preds.end();
PI != PE; ++PI) {
MachineBasicBlock *PredBB = *PI;
for (MachineBasicBlock *PredBB : Preds) {
bool Found = false;
for (unsigned i = 1, e = MI->getNumOperands(); i != e; i += 2) {
MachineBasicBlock *PHIBB = MI->getOperand(i + 1).getMBB();
@ -421,18 +418,14 @@ void TailDuplicator::updateSuccessorsPHIs(
MachineBasicBlock *FromBB, bool isDead,
SmallVectorImpl<MachineBasicBlock *> &TDBBs,
SmallSetVector<MachineBasicBlock *, 8> &Succs) {
for (SmallSetVector<MachineBasicBlock *, 8>::iterator SI = Succs.begin(),
SE = Succs.end();
SI != SE; ++SI) {
MachineBasicBlock *SuccBB = *SI;
for (MachineBasicBlock::iterator II = SuccBB->begin(), EE = SuccBB->end();
II != EE; ++II) {
if (!II->isPHI())
for (MachineBasicBlock *SuccBB : Succs) {
for (MachineInstr &MI : *SuccBB) {
if (!MI.isPHI())
break;
MachineInstrBuilder MIB(*FromBB->getParent(), II);
MachineInstrBuilder MIB(*FromBB->getParent(), MI);
unsigned Idx = 0;
for (unsigned i = 1, e = II->getNumOperands(); i != e; i += 2) {
MachineOperand &MO = II->getOperand(i + 1);
for (unsigned i = 1, e = MI.getNumOperands(); i != e; i += 2) {
MachineOperand &MO = MI.getOperand(i + 1);
if (MO.getMBB() == FromBB) {
Idx = i;
break;
@ -440,17 +433,17 @@ void TailDuplicator::updateSuccessorsPHIs(
}
assert(Idx != 0);
MachineOperand &MO0 = II->getOperand(Idx);
MachineOperand &MO0 = MI.getOperand(Idx);
unsigned Reg = MO0.getReg();
if (isDead) {
// Folded into the previous BB.
// There could be duplicate phi source entries. FIXME: Should sdisel
// or earlier pass fixed this?
for (unsigned i = II->getNumOperands() - 2; i != Idx; i -= 2) {
MachineOperand &MO = II->getOperand(i + 1);
for (unsigned i = MI.getNumOperands() - 2; i != Idx; i -= 2) {
MachineOperand &MO = MI.getOperand(i + 1);
if (MO.getMBB() == FromBB) {
II->RemoveOperand(i + 1);
II->RemoveOperand(i);
MI.RemoveOperand(i + 1);
MI.RemoveOperand(i);
}
}
} else
@ -474,8 +467,8 @@ void TailDuplicator::updateSuccessorsPHIs(
unsigned SrcReg = LI->second[j].second;
if (Idx != 0) {
II->getOperand(Idx).setReg(SrcReg);
II->getOperand(Idx + 1).setMBB(SrcBB);
MI.getOperand(Idx).setReg(SrcReg);
MI.getOperand(Idx + 1).setMBB(SrcBB);
Idx = 0;
} else {
MIB.addReg(SrcReg).addMBB(SrcBB);
@ -486,8 +479,8 @@ void TailDuplicator::updateSuccessorsPHIs(
for (unsigned j = 0, ee = TDBBs.size(); j != ee; ++j) {
MachineBasicBlock *SrcBB = TDBBs[j];
if (Idx != 0) {
II->getOperand(Idx).setReg(Reg);
II->getOperand(Idx + 1).setMBB(SrcBB);
MI.getOperand(Idx).setReg(Reg);
MI.getOperand(Idx + 1).setMBB(SrcBB);
Idx = 0;
} else {
MIB.addReg(Reg).addMBB(SrcBB);
@ -495,8 +488,8 @@ void TailDuplicator::updateSuccessorsPHIs(
}
}
if (Idx != 0) {
II->RemoveOperand(Idx + 1);
II->RemoveOperand(Idx);
MI.RemoveOperand(Idx + 1);
MI.RemoveOperand(Idx);
}
}
}
@ -649,11 +642,7 @@ bool TailDuplicator::duplicateSimpleBB(
SmallVector<MachineBasicBlock *, 8> Preds(TailBB->pred_begin(),
TailBB->pred_end());
bool Changed = false;
for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
PE = Preds.end();
PI != PE; ++PI) {
MachineBasicBlock *PredBB = *PI;
for (MachineBasicBlock *PredBB : Preds) {
if (PredBB->hasEHPadSuccessor())
continue;
@ -752,10 +741,7 @@ bool TailDuplicator::tailDuplicate(MachineFunction &MF, bool IsSimple,
bool Changed = false;
SmallSetVector<MachineBasicBlock *, 8> Preds(TailBB->pred_begin(),
TailBB->pred_end());
for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
PE = Preds.end();
PI != PE; ++PI) {
MachineBasicBlock *PredBB = *PI;
for (MachineBasicBlock *PredBB : Preds) {
assert(TailBB != PredBB &&
"Single-block loop should have been rejected earlier!");
@ -806,10 +792,8 @@ bool TailDuplicator::tailDuplicate(MachineFunction &MF, bool IsSimple,
PredBB->removeSuccessor(PredBB->succ_begin());
assert(PredBB->succ_empty() &&
"TailDuplicate called on block with multiple successors!");
for (MachineBasicBlock::succ_iterator I = TailBB->succ_begin(),
E = TailBB->succ_end();
I != E; ++I)
PredBB->addSuccessor(*I, MBPI->getEdgeProbability(TailBB, I));
for (MachineBasicBlock *Succ : TailBB->successors())
PredBB->addSuccessor(Succ, MBPI->getEdgeProbability(TailBB, Succ));
Changed = true;
++NumTailDups;
@ -886,10 +870,7 @@ bool TailDuplicator::tailDuplicate(MachineFunction &MF, bool IsSimple,
// What we do here is introduce a copy in 3 of the register defined by the
// phi, just like when we are duplicating 2 into 3, but we don't copy any
// real instructions or remove the 3 -> 2 edge from the phi in 2.
for (SmallSetVector<MachineBasicBlock *, 8>::iterator PI = Preds.begin(),
PE = Preds.end();
PI != PE; ++PI) {
MachineBasicBlock *PredBB = *PI;
for (MachineBasicBlock *PredBB : Preds) {
if (is_contained(TDBBs, PredBB))
continue;