@@ -1195,19 +1195,18 @@ struct TransformDFA {
11951195 // value for the new predecessor ClonedBB. The value will either be the same
11961196 // value from BB or a cloned value.
11971197 for (BasicBlock *Succ : BlocksToUpdate) {
1198- for (auto II = Succ->begin (); PHINode *Phi = dyn_cast<PHINode>(II);
1199- ++II) {
1200- Value *Incoming = Phi->getIncomingValueForBlock (BB);
1198+ for (PHINode &Phi : Succ->phis ()) {
1199+ Value *Incoming = Phi.getIncomingValueForBlock (BB);
12011200 if (Incoming) {
12021201 if (isa<Constant>(Incoming)) {
1203- Phi-> addIncoming (Incoming, ClonedBB);
1202+ Phi. addIncoming (Incoming, ClonedBB);
12041203 continue ;
12051204 }
12061205 Value *ClonedVal = VMap[Incoming];
12071206 if (ClonedVal)
1208- Phi-> addIncoming (ClonedVal, ClonedBB);
1207+ Phi. addIncoming (ClonedVal, ClonedBB);
12091208 else
1210- Phi-> addIncoming (Incoming, ClonedBB);
1209+ Phi. addIncoming (Incoming, ClonedBB);
12111210 }
12121211 }
12131212 }
@@ -1302,27 +1301,19 @@ struct TransformDFA {
13021301 void cleanPhiNodes (BasicBlock *BB) {
13031302 // If BB is no longer reachable, remove any remaining phi nodes
13041303 if (pred_empty (BB)) {
1305- std::vector<PHINode *> PhiToRemove;
1306- for (auto II = BB->begin (); PHINode *Phi = dyn_cast<PHINode>(II); ++II) {
1307- PhiToRemove.push_back (Phi);
1308- }
1309- for (PHINode *PN : PhiToRemove) {
1310- PN->replaceAllUsesWith (PoisonValue::get (PN->getType ()));
1311- PN->eraseFromParent ();
1304+ for (PHINode &PN : make_early_inc_range (BB->phis ())) {
1305+ PN.replaceAllUsesWith (PoisonValue::get (PN.getType ()));
1306+ PN.eraseFromParent ();
13121307 }
13131308 return ;
13141309 }
13151310
13161311 // Remove any incoming values that come from an invalid predecessor
1317- for (auto II = BB->begin (); PHINode *Phi = dyn_cast<PHINode>(II); ++II) {
1318- std::vector<BasicBlock *> BlocksToRemove;
1319- for (BasicBlock *IncomingBB : Phi->blocks ()) {
1320- if (!isPredecessor (BB, IncomingBB))
1321- BlocksToRemove.push_back (IncomingBB);
1322- }
1323- for (BasicBlock *BB : BlocksToRemove)
1324- Phi->removeIncomingValue (BB);
1325- }
1312+ for (PHINode &Phi : BB->phis ())
1313+ Phi.removeIncomingValueIf ([&](uint Index) {
1314+ BasicBlock *IncomingBB = Phi.getIncomingBlock (Index);
1315+ return !isPredecessor (BB, IncomingBB);
1316+ });
13261317 }
13271318
13281319 // / Checks if BB was already cloned for a particular next state value. If it
0 commit comments