Skip to content

Commit ad00610

Browse files
authored
[DFAJumpThreading][NFC] Clear cleanPhiNodes and phi-related code (#162423)
1 parent a5e6b07 commit ad00610

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,19 +1206,18 @@ struct TransformDFA {
12061206
// value for the new predecessor ClonedBB. The value will either be the same
12071207
// value from BB or a cloned value.
12081208
for (BasicBlock *Succ : BlocksToUpdate) {
1209-
for (auto II = Succ->begin(); PHINode *Phi = dyn_cast<PHINode>(II);
1210-
++II) {
1211-
Value *Incoming = Phi->getIncomingValueForBlock(BB);
1209+
for (PHINode &Phi : Succ->phis()) {
1210+
Value *Incoming = Phi.getIncomingValueForBlock(BB);
12121211
if (Incoming) {
12131212
if (isa<Constant>(Incoming)) {
1214-
Phi->addIncoming(Incoming, ClonedBB);
1213+
Phi.addIncoming(Incoming, ClonedBB);
12151214
continue;
12161215
}
12171216
Value *ClonedVal = VMap[Incoming];
12181217
if (ClonedVal)
1219-
Phi->addIncoming(ClonedVal, ClonedBB);
1218+
Phi.addIncoming(ClonedVal, ClonedBB);
12201219
else
1221-
Phi->addIncoming(Incoming, ClonedBB);
1220+
Phi.addIncoming(Incoming, ClonedBB);
12221221
}
12231222
}
12241223
}
@@ -1313,27 +1312,19 @@ struct TransformDFA {
13131312
void cleanPhiNodes(BasicBlock *BB) {
13141313
// If BB is no longer reachable, remove any remaining phi nodes
13151314
if (pred_empty(BB)) {
1316-
std::vector<PHINode *> PhiToRemove;
1317-
for (auto II = BB->begin(); PHINode *Phi = dyn_cast<PHINode>(II); ++II) {
1318-
PhiToRemove.push_back(Phi);
1319-
}
1320-
for (PHINode *PN : PhiToRemove) {
1321-
PN->replaceAllUsesWith(PoisonValue::get(PN->getType()));
1322-
PN->eraseFromParent();
1315+
for (PHINode &PN : make_early_inc_range(BB->phis())) {
1316+
PN.replaceAllUsesWith(PoisonValue::get(PN.getType()));
1317+
PN.eraseFromParent();
13231318
}
13241319
return;
13251320
}
13261321

13271322
// Remove any incoming values that come from an invalid predecessor
1328-
for (auto II = BB->begin(); PHINode *Phi = dyn_cast<PHINode>(II); ++II) {
1329-
std::vector<BasicBlock *> BlocksToRemove;
1330-
for (BasicBlock *IncomingBB : Phi->blocks()) {
1331-
if (!isPredecessor(BB, IncomingBB))
1332-
BlocksToRemove.push_back(IncomingBB);
1333-
}
1334-
for (BasicBlock *BB : BlocksToRemove)
1335-
Phi->removeIncomingValue(BB);
1336-
}
1323+
for (PHINode &Phi : BB->phis())
1324+
Phi.removeIncomingValueIf([&](unsigned Index) {
1325+
BasicBlock *IncomingBB = Phi.getIncomingBlock(Index);
1326+
return !isPredecessor(BB, IncomingBB);
1327+
});
13371328
}
13381329

13391330
/// Checks if BB was already cloned for a particular next state value. If it

0 commit comments

Comments
 (0)