@@ -1206,19 +1206,18 @@ struct TransformDFA {
1206
1206
// value for the new predecessor ClonedBB. The value will either be the same
1207
1207
// value from BB or a cloned value.
1208
1208
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);
1212
1211
if (Incoming) {
1213
1212
if (isa<Constant>(Incoming)) {
1214
- Phi-> addIncoming (Incoming, ClonedBB);
1213
+ Phi. addIncoming (Incoming, ClonedBB);
1215
1214
continue ;
1216
1215
}
1217
1216
Value *ClonedVal = VMap[Incoming];
1218
1217
if (ClonedVal)
1219
- Phi-> addIncoming (ClonedVal, ClonedBB);
1218
+ Phi. addIncoming (ClonedVal, ClonedBB);
1220
1219
else
1221
- Phi-> addIncoming (Incoming, ClonedBB);
1220
+ Phi. addIncoming (Incoming, ClonedBB);
1222
1221
}
1223
1222
}
1224
1223
}
@@ -1313,27 +1312,19 @@ struct TransformDFA {
1313
1312
void cleanPhiNodes (BasicBlock *BB) {
1314
1313
// If BB is no longer reachable, remove any remaining phi nodes
1315
1314
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 ();
1323
1318
}
1324
1319
return ;
1325
1320
}
1326
1321
1327
1322
// 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
+ });
1337
1328
}
1338
1329
1339
1330
// / Checks if BB was already cloned for a particular next state value. If it
0 commit comments