diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2016-06-16 16:25:53 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2016-06-16 16:25:53 +0000 |
commit | 87f0d0e185c79d214c3b6bf2950ff4c8e8faf07b (patch) | |
tree | 1ca1ecbf3f78c1c95b3a0027d7971013dde85f65 /llvm/lib/Transforms | |
parent | 0166a713863134a16f0983a540eab070390b33e9 (diff) | |
download | bcm5719-llvm-87f0d0e185c79d214c3b6bf2950ff4c8e8faf07b.tar.gz bcm5719-llvm-87f0d0e185c79d214c3b6bf2950ff4c8e8faf07b.zip |
Revert r272891 "[JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo"
It was causing failures in Profile-i386 and Profile-x86_64 tests.
llvm-svn: 272912
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/JumpThreading.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 6 |
2 files changed, 5 insertions, 17 deletions
diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index db083498c3a..1d8d2a5e469 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -182,7 +182,7 @@ bool JumpThreadingPass::runImpl(Function &F, TargetLibraryInfo *TLI_, // back edges. This works for normal cases but not for unreachable blocks as // they may have cycle with no back edge. bool EverChanged = false; - EverChanged |= removeUnreachableBlocks(F, LVI, BPI.get()); + EverChanged |= removeUnreachableBlocks(F, LVI); FindLoopHeaders(F); @@ -204,7 +204,7 @@ bool JumpThreadingPass::runImpl(Function &F, TargetLibraryInfo *TLI_, DEBUG(dbgs() << " JT: Deleting dead block '" << BB->getName() << "' with terminator: " << *BB->getTerminator() << '\n'); LoopHeaders.erase(BB); - dropBlockAnalysisResults(BB); + LVI->eraseBlock(BB); DeleteDeadBlock(BB); Changed = true; continue; @@ -232,7 +232,7 @@ bool JumpThreadingPass::runImpl(Function &F, TargetLibraryInfo *TLI_, // for a block even if it doesn't get erased. This isn't totally // awesome, but it allows us to use AssertingVH to prevent nasty // dangling pointer issues within LazyValueInfo. - dropBlockAnalysisResults(BB); + LVI->eraseBlock(BB); if (TryToSimplifyUncondBranchFromEmptyBlock(BB)) { Changed = true; // If we deleted BB and BB was the header of a loop, then the @@ -715,7 +715,7 @@ bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) { if (LoopHeaders.erase(SinglePred)) LoopHeaders.insert(BB); - dropBlockAnalysisResults(SinglePred); + LVI->eraseBlock(SinglePred); MergeBasicBlockIntoOnlyPred(BB); return true; @@ -1949,11 +1949,3 @@ bool JumpThreadingPass::TryToUnfoldSelectInCurrBB(BasicBlock *BB) { return false; } - -/// dropBlockAnalysisResults - Inform relevant analyzes that BB is going to -/// be removed. This is important in order to prevent dangling pointer problems. -void JumpThreadingPass::dropBlockAnalysisResults(BasicBlock *BB) { - LVI->eraseBlock(BB); - if (BPI) - BPI->eraseBlock(BB); -} diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 13f983231bd..edde166b1ed 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -20,7 +20,6 @@ #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/Statistic.h" -#include "llvm/Analysis/BranchProbabilityInfo.h" #include "llvm/Analysis/EHPersonalities.h" #include "llvm/Analysis/InstructionSimplify.h" #include "llvm/Analysis/MemoryBuiltins.h" @@ -1487,8 +1486,7 @@ void llvm::removeUnwindEdge(BasicBlock *BB) { /// removeUnreachableBlocksFromFn - Remove blocks that are not reachable, even /// if they are in a dead cycle. Return true if a change was made, false /// otherwise. -bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI, - BranchProbabilityInfo *BPI) { +bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI) { SmallPtrSet<BasicBlock*, 16> Reachable; bool Changed = markAliveBlocks(F, Reachable); @@ -1511,8 +1509,6 @@ bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI, (*SI)->removePredecessor(&*BB); if (LVI) LVI->eraseBlock(&*BB); - if (BPI) - BPI->eraseBlock(&*BB); BB->dropAllReferences(); } |