@@ -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