From 0274632ee6eede14d2eb7efeb488c1775611a9dd Mon Sep 17 00:00:00 2001 From: Michael Zolotukhin Date: Tue, 10 Apr 2018 00:42:43 +0000 Subject: [PATCH] Revert "[PR16756] Use SSAUpdaterBulk in JumpThreading." This reverts commit r329644. llvm-svn: 329650 --- llvm/lib/Transforms/Scalar/JumpThreading.cpp | 31 ++++++++++++---------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index 2caf6b7..29c7077 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -66,7 +66,6 @@ #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Transforms/Utils/Cloning.h" #include "llvm/Transforms/Utils/SSAUpdater.h" -#include "llvm/Transforms/Utils/SSAUpdaterBulk.h" #include "llvm/Transforms/Utils/ValueMapper.h" #include #include @@ -1990,13 +1989,9 @@ bool JumpThreadingPass::ThreadEdge(BasicBlock *BB, // now have to update all uses of the value to use either the original value, // the cloned value, or some PHI derived value. This can require arbitrary // PHI insertion, of which we are prepared to do, clean these up now. - SSAUpdaterBulk SSAUpdate; + SSAUpdater SSAUpdate; SmallVector UsesToRename; - - unsigned VarNum = 0; for (Instruction &I : *BB) { - UsesToRename.clear(); - // Scan all uses of this instruction to see if it is used outside of its // block, and if so, record them in UsesToRename. for (Use &U : I.uses()) { @@ -2013,15 +2008,19 @@ bool JumpThreadingPass::ThreadEdge(BasicBlock *BB, // If there are no uses outside the block, we're done with this instruction. if (UsesToRename.empty()) continue; - SSAUpdate.AddVariable(VarNum, I.getName(), I.getType()); - // We found a use of I outside of BB - we need to rename all uses of I that - // are outside its block to be uses of the appropriate PHI node etc. - SSAUpdate.AddAvailableValue(VarNum, BB, &I); - SSAUpdate.AddAvailableValue(VarNum, NewBB, ValueMapping[&I]); - for (auto U : UsesToRename) - SSAUpdate.AddUse(VarNum, U); - VarNum++; + DEBUG(dbgs() << "JT: Renaming non-local uses of: " << I << "\n"); + + // We found a use of I outside of BB. Rename all uses of I that are outside + // its block to be uses of the appropriate PHI node etc. See ValuesInBlocks + // with the two values we know. + SSAUpdate.Initialize(I.getType(), I.getName()); + SSAUpdate.AddAvailableValue(BB, &I); + SSAUpdate.AddAvailableValue(NewBB, ValueMapping[&I]); + + while (!UsesToRename.empty()) + SSAUpdate.RewriteUse(*UsesToRename.pop_back_val()); + DEBUG(dbgs() << "\n"); } // Ok, NewBB is good to go. Update the terminator of PredBB to jump to @@ -2038,10 +2037,6 @@ bool JumpThreadingPass::ThreadEdge(BasicBlock *BB, {DominatorTree::Insert, PredBB, NewBB}, {DominatorTree::Delete, PredBB, BB}}); - // Apply all updates we queued with DDT and get the updated Dominator Tree. - DominatorTree *DT = &DDT->flush(); - SSAUpdate.RewriteAllUses(DT); - // At this point, the IR is fully up to date and consistent. Do a quick scan // over the new instructions and zap any that are constants or dead. This // frequently happens because of phi translation. -- 2.7.4