diff options
author | Michael Zolotukhin <mzolotukhin@apple.com> | 2018-04-17 07:31:27 +0000 |
---|---|---|
committer | Michael Zolotukhin <mzolotukhin@apple.com> | 2018-04-17 07:31:27 +0000 |
commit | 21458fdc551d08908f20ecd54f73f24e6c62323a (patch) | |
tree | 68c8063aa4e600a73707c0d8adf3e80072268e4b /llvm/lib/Transforms | |
parent | 86e3c2692403e31299cece3a6445575b775b1a2d (diff) | |
download | bcm5719-llvm-21458fdc551d08908f20ecd54f73f24e6c62323a.tar.gz bcm5719-llvm-21458fdc551d08908f20ecd54f73f24e6c62323a.zip |
Revert "Reapply "[PR16756] Use SSAUpdaterBulk in JumpThreading." again."
This reverts r330175. There are still stage3/stage4 miscompares.
llvm-svn: 330180
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/JumpThreading.cpp | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index 85d2c323fa1..29c707799bd 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 <algorithm> #include <cassert> @@ -1990,21 +1989,15 @@ 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<Use*, 16> 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. Also, skip phi operands - // from PredBB - we'll remove them anyway. + // block, and if so, record them in UsesToRename. for (Use &U : I.uses()) { Instruction *User = cast<Instruction>(U.getUser()); if (PHINode *UserPN = dyn_cast<PHINode>(User)) { - if (UserPN->getIncomingBlock(U) == BB || - UserPN->getIncomingBlock(U) == PredBB) + if (UserPN->getIncomingBlock(U) == BB) continue; } else if (User->getParent() == BB) continue; @@ -2015,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 @@ -2040,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. |