[llvm] 50f8eb0 - Revert "[JT] Preserve exisiting BPI/BFI during JumpThreading"
Evgeniy Brevnov via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 17 02:17:08 PST 2022
Author: Evgeniy Brevnov
Date: 2022-11-17T17:11:47+07:00
New Revision: 50f8eb05af50904e740088385ec54aae017467e8
URL: https://github.com/llvm/llvm-project/commit/50f8eb05af50904e740088385ec54aae017467e8
DIFF: https://github.com/llvm/llvm-project/commit/50f8eb05af50904e740088385ec54aae017467e8.diff
LOG: Revert "[JT] Preserve exisiting BPI/BFI during JumpThreading"
This reverts commit 52a4018506e39f50d0c06ac5a1c987eb83b900c7.
Added:
Modified:
llvm/include/llvm/Transforms/Scalar/JumpThreading.h
llvm/lib/Transforms/Scalar/JumpThreading.cpp
llvm/test/Transforms/JumpThreading/thread-prob-2.ll
llvm/test/Transforms/JumpThreading/thread-prob-3.ll
llvm/test/Transforms/JumpThreading/thread-prob-4.ll
llvm/test/Transforms/JumpThreading/thread-prob-5.ll
llvm/test/Transforms/JumpThreading/thread-prob-6.ll
llvm/test/Transforms/JumpThreading/threading_prof1.ll
llvm/test/Transforms/JumpThreading/threading_prof2.ll
llvm/test/Transforms/JumpThreading/threading_prof3.ll
Removed:
################################################################################
diff --git a/llvm/include/llvm/Transforms/Scalar/JumpThreading.h b/llvm/include/llvm/Transforms/Scalar/JumpThreading.h
index c76458485ecf7..09d08bf423a6a 100644
--- a/llvm/include/llvm/Transforms/Scalar/JumpThreading.h
+++ b/llvm/include/llvm/Transforms/Scalar/JumpThreading.h
@@ -75,17 +75,15 @@ enum ConstantPreference { WantInteger, WantBlockAddress };
/// In this case, the unconditional branch at the end of the first if can be
/// revectored to the false side of the second if.
class JumpThreadingPass : public PassInfoMixin<JumpThreadingPass> {
- Function *F = nullptr;
- FunctionAnalysisManager *FAM = nullptr;
- TargetLibraryInfo *TLI = nullptr;
- TargetTransformInfo *TTI = nullptr;
- LazyValueInfo *LVI = nullptr;
- AAResults *AA = nullptr;
- DomTreeUpdater *DTU = nullptr;
- Optional<BlockFrequencyInfo *> BFI = None;
- Optional<BranchProbabilityInfo *> BPI = None;
+ TargetLibraryInfo *TLI;
+ TargetTransformInfo *TTI;
+ LazyValueInfo *LVI;
+ AAResults *AA;
+ DomTreeUpdater *DTU;
+ std::unique_ptr<BlockFrequencyInfo> BFI;
+ std::unique_ptr<BranchProbabilityInfo> BPI;
+ bool HasProfileData = false;
bool HasGuards = false;
- bool HasProfile = false;
#ifndef LLVM_ENABLE_ABI_BREAKING_CHECKS
SmallPtrSet<const BasicBlock *, 16> LoopHeaders;
#else
@@ -99,14 +97,18 @@ class JumpThreadingPass : public PassInfoMixin<JumpThreadingPass> {
JumpThreadingPass(int T = -1);
// Glue for old PM.
- bool runImpl(Function &F, FunctionAnalysisManager *FAM,
- TargetLibraryInfo *TLI, TargetTransformInfo *TTI,
+ bool runImpl(Function &F, TargetLibraryInfo *TLI, TargetTransformInfo *TTI,
LazyValueInfo *LVI, AAResults *AA, DomTreeUpdater *DTU,
- Optional<BlockFrequencyInfo *> BFI,
- Optional<BranchProbabilityInfo *> BPI);
+ bool HasProfileData, std::unique_ptr<BlockFrequencyInfo> BFI,
+ std::unique_ptr<BranchProbabilityInfo> BPI);
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+ void releaseMemory() {
+ BFI.reset();
+ BPI.reset();
+ }
+
void findLoopHeaders(Function &F);
bool processBlock(BasicBlock *BB);
bool maybeMergeBasicBlockIntoOnlyPred(BasicBlock *BB);
@@ -169,26 +171,6 @@ class JumpThreadingPass : public PassInfoMixin<JumpThreadingPass> {
BasicBlock *NewBB, BasicBlock *SuccBB);
/// Check if the block has profile metadata for its outgoing edges.
bool doesBlockHaveProfileData(BasicBlock *BB);
-
- /// Returns an existing instance of BPI if any, otherwise nullptr. By
- /// "existing" we mean either cached result provided by FunctionAnalysisManger
- /// or created by preceding call to 'getOrCreateBPI'.
- BranchProbabilityInfo *getBPI();
-
- /// Returns an existing instance of BFI if any, otherwise nullptr. By
- /// "existing" we mean either cached result provided by FunctionAnalysisManger
- /// or created by preceding call to 'getOrCreateBFI'.
- BlockFrequencyInfo *getBFI();
-
- /// Returns an existing instance of BPI if any, otherwise:
- /// if 'HasProfile' is true creates new instance through
- /// FunctionAnalysisManager, otherwise nullptr.
- BranchProbabilityInfo *getOrCreateBPI();
-
- /// Returns an existing instance of BFI if any, otherwise:
- /// if 'HasProfile' is true creates new instance through
- /// FunctionAnalysisManager, otherwise nullptr.
- BlockFrequencyInfo *getOrCreateBFI();
};
} // end namespace llvm
diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp
index 091097a358ec3..75bc4bb762604 100644
--- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp
+++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp
@@ -155,6 +155,8 @@ namespace {
AU.addRequired<TargetLibraryInfoWrapperPass>();
AU.addRequired<TargetTransformInfoWrapperPass>();
}
+
+ void releaseMemory() override { Impl.releaseMemory(); }
};
} // end anonymous namespace
@@ -326,8 +328,8 @@ bool JumpThreading::runOnFunction(Function &F) {
BFI.reset(new BlockFrequencyInfo(F, *BPI, LI));
}
- bool Changed =
- Impl.runImpl(F, nullptr, TLI, TTI, LVI, AA, &DTU, BFI.get(), BPI.get());
+ bool Changed = Impl.runImpl(F, TLI, TTI, LVI, AA, &DTU, F.hasProfileData(),
+ std::move(BFI), std::move(BPI));
if (PrintLVIAfterJumpThreading) {
dbgs() << "LVI for function '" << F.getName() << "':\n";
LVI->printLVI(F, DTU.getDomTree(), dbgs());
@@ -347,8 +349,16 @@ PreservedAnalyses JumpThreadingPass::run(Function &F,
auto &AA = AM.getResult<AAManager>(F);
DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
- bool Changed =
- runImpl(F, &AM, &TLI, &TTI, &LVI, &AA, &DTU, None, None);
+ std::unique_ptr<BlockFrequencyInfo> BFI;
+ std::unique_ptr<BranchProbabilityInfo> BPI;
+ if (F.hasProfileData()) {
+ LoopInfo LI{DT};
+ BPI.reset(new BranchProbabilityInfo(F, LI, &TLI));
+ BFI.reset(new BlockFrequencyInfo(F, *BPI, LI));
+ }
+
+ bool Changed = runImpl(F, &TLI, &TTI, &LVI, &AA, &DTU, F.hasProfileData(),
+ std::move(BFI), std::move(BPI));
if (PrintLVIAfterJumpThreading) {
dbgs() << "LVI for function '" << F.getName() << "':\n";
@@ -357,53 +367,42 @@ PreservedAnalyses JumpThreadingPass::run(Function &F,
if (!Changed)
return PreservedAnalyses::all();
-
-#ifndef NDEBUG
- DTU.flush();
-#if defined(EXPENSIVE_CHECKS)
- assert(DT.verify(DominatorTree::VerificationLevel::Full) &&
- "DT broken after JumpThreading");
-#else
- assert(
- DT.verify(DominatorTree::VerificationLevel::Fast)
- && "DT broken after JumpThreading");
-#endif
-#endif
-
PreservedAnalyses PA;
PA.preserve<DominatorTreeAnalysis>();
PA.preserve<LazyValueAnalysis>();
-
- // TODO: We would like to preserve BPI/BFI. Enable once all paths update them.
- // TODO: Would be nice to verify BPI/BFI consistency as well.
-
return PA;
}
-bool JumpThreadingPass::runImpl(Function &F_, FunctionAnalysisManager *FAM_, TargetLibraryInfo *TLI_,
+bool JumpThreadingPass::runImpl(Function &F, TargetLibraryInfo *TLI_,
TargetTransformInfo *TTI_, LazyValueInfo *LVI_,
AliasAnalysis *AA_, DomTreeUpdater *DTU_,
- Optional<BlockFrequencyInfo *> BFI_,
- Optional<BranchProbabilityInfo *> BPI_) {
- LLVM_DEBUG(dbgs() << "Jump threading on function '" << F_.getName() << "'\n");
- F = &F_;
- FAM = FAM_;
+ bool HasProfileData_,
+ std::unique_ptr<BlockFrequencyInfo> BFI_,
+ std::unique_ptr<BranchProbabilityInfo> BPI_) {
+ LLVM_DEBUG(dbgs() << "Jump threading on function '" << F.getName() << "'\n");
TLI = TLI_;
TTI = TTI_;
LVI = LVI_;
AA = AA_;
DTU = DTU_;
- BFI = BFI_;
- BPI = BPI_;
- auto *GuardDecl = F->getParent()->getFunction(
+ BFI.reset();
+ BPI.reset();
+ // When profile data is available, we need to update edge weights after
+ // successful jump threading, which requires both BPI and BFI being available.
+ HasProfileData = HasProfileData_;
+ auto *GuardDecl = F.getParent()->getFunction(
Intrinsic::getName(Intrinsic::experimental_guard));
HasGuards = GuardDecl && !GuardDecl->use_empty();
+ if (HasProfileData) {
+ BPI = std::move(BPI_);
+ BFI = std::move(BFI_);
+ }
// Reduce the number of instructions duplicated when optimizing strictly for
// size.
if (BBDuplicateThreshold.getNumOccurrences())
BBDupThreshold = BBDuplicateThreshold;
- else if (F->hasFnAttribute(Attribute::MinSize))
+ else if (F.hasFnAttribute(Attribute::MinSize))
BBDupThreshold = 3;
else
BBDupThreshold = DefaultBBDupThreshold;
@@ -414,23 +413,18 @@ bool JumpThreadingPass::runImpl(Function &F_, FunctionAnalysisManager *FAM_, Tar
assert(DTU && "DTU isn't passed into JumpThreading before using it.");
assert(DTU->hasDomTree() && "JumpThreading relies on DomTree to proceed.");
DominatorTree &DT = DTU->getDomTree();
- for (auto &BB : *F) {
+ for (auto &BB : F)
if (!DT.isReachableFromEntry(&BB))
Unreachable.insert(&BB);
- }
if (!ThreadAcrossLoopHeaders)
- findLoopHeaders(*F);
-
- HasProfile = llvm::any_of(*F, [&](BasicBlock &BB) {
- return this->doesBlockHaveProfileData(&BB);
- });
+ findLoopHeaders(F);
bool EverChanged = false;
bool Changed;
do {
Changed = false;
- for (auto &BB : *F) {
+ for (auto &BB : F) {
if (Unreachable.count(&BB))
continue;
while (processBlock(&BB)) // Thread all of the branches we can over BB.
@@ -444,7 +438,7 @@ bool JumpThreadingPass::runImpl(Function &F_, FunctionAnalysisManager *FAM_, Tar
// Stop processing BB if it's the entry or is now deleted. The following
// routines attempt to eliminate BB and locating a suitable replacement
// for the entry is non-trivial.
- if (&BB == &F->getEntryBlock() || DTU->isBBPendingDeletion(&BB))
+ if (&BB == &F.getEntryBlock() || DTU->isBBPendingDeletion(&BB))
continue;
if (pred_empty(&BB)) {
@@ -1148,7 +1142,7 @@ bool JumpThreadingPass::processBlock(BasicBlock *BB) {
<< '\n');
++NumFolds;
ConstantFoldTerminator(BB, true, nullptr, DTU);
- if (auto *BPI = getBPI())
+ if (HasProfileData)
BPI->eraseBlock(BB);
return true;
}
@@ -1303,7 +1297,7 @@ bool JumpThreadingPass::processImpliedCondition(BasicBlock *BB) {
FICond->eraseFromParent();
DTU->applyUpdatesPermissive({{DominatorTree::Delete, BB, RemoveSucc}});
- if (auto *BPI = getBPI())
+ if (HasProfileData)
BPI->eraseBlock(BB);
return true;
}
@@ -1747,7 +1741,7 @@ bool JumpThreadingPass::processThreadableEdges(Value *Cond, BasicBlock *BB,
++NumFolds;
Term->eraseFromParent();
DTU->applyUpdatesPermissive(Updates);
- if (auto *BPI = getBPI())
+ if (HasProfileData)
BPI->eraseBlock(BB);
// If the condition is now dead due to the removal of the old terminator,
@@ -2278,10 +2272,6 @@ void JumpThreadingPass::threadThroughTwoBasicBlocks(BasicBlock *PredPredBB,
LLVM_DEBUG(dbgs() << " Threading through '" << PredBB->getName() << "' and '"
<< BB->getName() << "'\n");
- // Build BPI/BFI before any changes are made to IR.
- auto *BPI = getOrCreateBPI();
- auto *BFI = getOrCreateBFI();
-
BranchInst *CondBr = cast<BranchInst>(BB->getTerminator());
BranchInst *PredBBBranch = cast<BranchInst>(PredBB->getTerminator());
@@ -2291,8 +2281,7 @@ void JumpThreadingPass::threadThroughTwoBasicBlocks(BasicBlock *PredPredBB,
NewBB->moveAfter(PredBB);
// Set the block frequency of NewBB.
- if (BFI) {
- assert(BPI && "It's expected BPI to exist along with BFI");
+ if (HasProfileData) {
auto NewBBFreq = BFI->getBlockFreq(PredPredBB) *
BPI->getEdgeProbability(PredPredBB, PredBB);
BFI->setBlockFreq(NewBB, NewBBFreq.getFrequency());
@@ -2305,7 +2294,7 @@ void JumpThreadingPass::threadThroughTwoBasicBlocks(BasicBlock *PredPredBB,
cloneInstructions(PredBB->begin(), PredBB->end(), NewBB, PredPredBB);
// Copy the edge probabilities from PredBB to NewBB.
- if (BPI)
+ if (HasProfileData)
BPI->copyEdgeProbabilities(PredBB, NewBB);
// Update the terminator of PredPredBB to jump to NewBB instead of PredBB.
@@ -2389,10 +2378,6 @@ void JumpThreadingPass::threadEdge(BasicBlock *BB,
assert(!LoopHeaders.count(BB) && !LoopHeaders.count(SuccBB) &&
"Don't thread across loop headers");
- // Build BPI/BFI before any changes are made to IR.
- auto *BPI = getOrCreateBPI();
- auto *BFI = getOrCreateBFI();
-
// And finally, do it! Start by factoring the predecessors if needed.
BasicBlock *PredBB;
if (PredBBs.size() == 1)
@@ -2416,8 +2401,7 @@ void JumpThreadingPass::threadEdge(BasicBlock *BB,
NewBB->moveAfter(PredBB);
// Set the block frequency of NewBB.
- if (BFI) {
- assert(BPI && "It's expected BPI to exist along with BFI");
+ if (HasProfileData) {
auto NewBBFreq =
BFI->getBlockFreq(PredBB) * BPI->getEdgeProbability(PredBB, BB);
BFI->setBlockFreq(NewBB, NewBBFreq.getFrequency());
@@ -2476,9 +2460,7 @@ BasicBlock *JumpThreadingPass::splitBlockPreds(BasicBlock *BB,
// Collect the frequencies of all predecessors of BB, which will be used to
// update the edge weight of the result of splitting predecessors.
DenseMap<BasicBlock *, BlockFrequency> FreqMap;
- auto *BFI = getBFI();
- auto *BPI = getBPI();
- if (BFI)
+ if (HasProfileData)
for (auto *Pred : Preds)
FreqMap.insert(std::make_pair(
Pred, BFI->getBlockFreq(Pred) * BPI->getEdgeProbability(Pred, BB)));
@@ -2500,10 +2482,10 @@ BasicBlock *JumpThreadingPass::splitBlockPreds(BasicBlock *BB,
for (auto *Pred : predecessors(NewBB)) {
Updates.push_back({DominatorTree::Delete, Pred, BB});
Updates.push_back({DominatorTree::Insert, Pred, NewBB});
- if (BFI) // Update frequencies between Pred -> NewBB.
+ if (HasProfileData) // Update frequencies between Pred -> NewBB.
NewBBFreq += FreqMap.lookup(Pred);
}
- if (BFI) // Apply the summed frequency to NewBB.
+ if (HasProfileData) // Apply the summed frequency to NewBB.
BFI->setBlockFreq(NewBB, NewBBFreq.getFrequency());
}
@@ -2513,8 +2495,7 @@ BasicBlock *JumpThreadingPass::splitBlockPreds(BasicBlock *BB,
bool JumpThreadingPass::doesBlockHaveProfileData(BasicBlock *BB) {
const Instruction *TI = BB->getTerminator();
- if (!TI || TI->getNumSuccessors() < 2)
- return false;
+ assert(TI->getNumSuccessors() > 1 && "not a split");
MDNode *WeightsNode = TI->getMetadata(LLVMContext::MD_prof);
if (!WeightsNode)
@@ -2536,19 +2517,11 @@ void JumpThreadingPass::updateBlockFreqAndEdgeWeight(BasicBlock *PredBB,
BasicBlock *BB,
BasicBlock *NewBB,
BasicBlock *SuccBB) {
- bool DoesBlockHaveProfile = doesBlockHaveProfileData(BB);
- auto *BFI = getBFI();
- auto *BPI = getBPI();
- assert(
- (!DoesBlockHaveProfile || (BFI && BPI))
- && "BFI & BPI should have already been created");
- assert(
- ((BFI && BPI) || (!BFI && !BFI))
- && "It's not expected to have only either BPI or BFI");
-
- if (!BFI)
+ if (!HasProfileData)
return;
+ assert(BFI && BPI && "BFI & BPI should have been created here");
+
// As the edge from PredBB to BB is deleted, we have to update the block
// frequency of BB.
auto BBOrigFreq = BFI->getBlockFreq(BB);
@@ -2561,27 +2534,26 @@ void JumpThreadingPass::updateBlockFreqAndEdgeWeight(BasicBlock *PredBB,
// edge probabilities.
SmallVector<uint64_t, 4> BBSuccFreq;
for (BasicBlock *Succ : successors(BB)) {
- auto SuccFreq =
- (Succ == SuccBB) ?
- BB2SuccBBFreq - NewBBFreq :
- BBOrigFreq * BPI->getEdgeProbability(BB, Succ);
+ auto SuccFreq = (Succ == SuccBB)
+ ? BB2SuccBBFreq - NewBBFreq
+ : BBOrigFreq * BPI->getEdgeProbability(BB, Succ);
BBSuccFreq.push_back(SuccFreq.getFrequency());
}
- uint64_t MaxBBSuccFreq = *std::max_element(BBSuccFreq.begin(),
- BBSuccFreq.end());
+ uint64_t MaxBBSuccFreq =
+ *std::max_element(BBSuccFreq.begin(), BBSuccFreq.end());
SmallVector<BranchProbability, 4> BBSuccProbs;
if (MaxBBSuccFreq == 0)
BBSuccProbs.assign(BBSuccFreq.size(),
- { 1, static_cast<unsigned>(BBSuccFreq.size()) });
+ {1, static_cast<unsigned>(BBSuccFreq.size())});
else {
for (uint64_t Freq : BBSuccFreq)
BBSuccProbs.push_back(
BranchProbability::getBranchProbability(Freq, MaxBBSuccFreq));
// Normalize edge probabilities so that they sum up to one.
BranchProbability::normalizeProbabilities(BBSuccProbs.begin(),
- BBSuccProbs.end());
+ BBSuccProbs.end());
}
// Update edge probabilities in BPI.
@@ -2621,7 +2593,7 @@ void JumpThreadingPass::updateBlockFreqAndEdgeWeight(BasicBlock *PredBB,
// FIXME this locally as well so that BPI and BFI are consistent as well. We
// shouldn't make edges extremely likely or unlikely based solely on static
// estimation.
- if (BBSuccProbs.size() >= 2 && DoesBlockHaveProfile) {
+ if (BBSuccProbs.size() >= 2 && doesBlockHaveProfileData(BB)) {
SmallVector<uint32_t, 4> Weights;
for (auto Prob : BBSuccProbs)
Weights.push_back(Prob.getNumerator());
@@ -2753,7 +2725,7 @@ bool JumpThreadingPass::duplicateCondBranchOnPHIIntoPred(
// Remove the unconditional branch at the end of the PredBB block.
OldPredBranch->eraseFromParent();
- if (auto *BPI = getBPI())
+ if (HasProfileData)
BPI->copyEdgeProbabilities(BB, PredBB);
DTU->applyUpdatesPermissive(Updates);
@@ -3107,50 +3079,3 @@ bool JumpThreadingPass::threadGuard(BasicBlock *BB, IntrinsicInst *Guard,
}
return true;
}
-
-BranchProbabilityInfo *JumpThreadingPass::getBPI() {
- if (!BPI) {
- assert(FAM && "Can't create BPI without FunctionAnalysisManager");
- BPI = FAM->getCachedResult<BranchProbabilityAnalysis>(*F);
- }
- return *BPI;
-}
-
-BlockFrequencyInfo *JumpThreadingPass::getBFI() {
- if (!BFI) {
- assert(FAM && "Can't create BFI without FunctionAnalysisManager");
- BFI = FAM->getCachedResult<BlockFrequencyAnalysis>(*F);
- }
- return *BFI;
-}
-
-// Important note on validity of BPI/BFI. JumpThreading tries to preserve
-// BPI/BFI as it goes. Thus if cached instance exists it will be updated.
-// Otherwise, new instance of BPI/BFI is created wich is up to date by
-// definition.
-BranchProbabilityInfo *JumpThreadingPass::getOrCreateBPI() {
- if (HasProfile && (!BPI || *BPI == nullptr)) {
- assert(FAM && "Can't create BPI without FunctionAnalysisManager");
- // BranchProbabilityAnalysis depends on DT. Make sure DT is consistent.
- if (DTU->hasPendingUpdates()) {
- DTU->flush();
- assert(DTU->getDomTree().verify(DominatorTree::VerificationLevel::Fast));
- }
- BPI = &FAM->getResult<BranchProbabilityAnalysis>(*F);
- }
- return getBPI();
-}
-
-BlockFrequencyInfo *JumpThreadingPass::getOrCreateBFI() {
- if (HasProfile && (!BFI || *BFI == nullptr)) {
- assert(FAM && "Can't create BFI without FunctionAnalysisManager");
- // BlockFrequencyAnalysis depends on DT. Make sure DT is consistent.
- if (DTU->hasPendingUpdates()) {
- DTU->flush();
- assert(DTU->getDomTree().verify(DominatorTree::VerificationLevel::Fast));
- }
- BFI = &FAM->getResult<BlockFrequencyAnalysis>(*F);
- }
- return getBFI();
-}
-
diff --git a/llvm/test/Transforms/JumpThreading/thread-prob-2.ll b/llvm/test/Transforms/JumpThreading/thread-prob-2.ll
index fe466337c8d3e..0cd721639498e 100644
--- a/llvm/test/Transforms/JumpThreading/thread-prob-2.ll
+++ b/llvm/test/Transforms/JumpThreading/thread-prob-2.ll
@@ -1,13 +1,10 @@
-; RUN: opt -debug-only=branch-prob -enable-new-pm=false -jump-threading -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes="require<branch-prob>,jump-threading" -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes=jump-threading -S %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOBPI
+; RUN: opt -debug-only=branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
; REQUIRES: asserts
; Make sure that we clear edge probabilities for bb.cond as we fold
; the conditional branch in it.
; CHECK: eraseBlock bb.cond
-; CHECK-NOBPI-NOT: eraseBlock bb.cond
define i32 @foo(i1 %cond) !prof !0 {
; CHECK-LABEL: @foo
diff --git a/llvm/test/Transforms/JumpThreading/thread-prob-3.ll b/llvm/test/Transforms/JumpThreading/thread-prob-3.ll
index b9fb0368079fd..27d060e159522 100644
--- a/llvm/test/Transforms/JumpThreading/thread-prob-3.ll
+++ b/llvm/test/Transforms/JumpThreading/thread-prob-3.ll
@@ -1,6 +1,4 @@
-; RUN: opt -debug-only=branch-prob -enable-new-pm=false -branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes="require<branch-prob>,jump-threading" -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes=jump-threading -S %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOBPI
+; RUN: opt -debug-only=branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
; REQUIRES: asserts
; Make sure that we set edge probabilities for bb2 as we
@@ -9,7 +7,6 @@
; CHECK-LABEL: ---- Branch Probability Info : foo
; CHECK: set edge bb2 -> 0 successor probability to 0x80000000 / 0x80000000 = 100.00%
; CHECK-NEXT: set edge bb2 -> 1 successor probability to 0x00000000 / 0x80000000 = 0.00%
-; CHECK-NOBPI-NOT: ---- Branch Probability Info : foo
define void @foo(i1 %f0, i1 %f1, i1 %f2) !prof !{!"function_entry_count", i64 0} {
; CHECK-LABEL: @foo(
bb1:
diff --git a/llvm/test/Transforms/JumpThreading/thread-prob-4.ll b/llvm/test/Transforms/JumpThreading/thread-prob-4.ll
index ba10b9b3c7e76..2e3f1f241bd8a 100644
--- a/llvm/test/Transforms/JumpThreading/thread-prob-4.ll
+++ b/llvm/test/Transforms/JumpThreading/thread-prob-4.ll
@@ -1,13 +1,10 @@
-; RUN: opt -debug-only=branch-prob -enable-new-pm=false -branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes="require<branch-prob>,jump-threading" -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes=jump-threading -S %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOBPI
+; RUN: opt -debug-only=branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
; REQUIRES: asserts
; Make sure that we clear edge probabilities for bb1 as we fold
; the conditional branch in it.
; CHECK: eraseBlock bb1
-; CHECK-NOBPI-NOT: eraseBlock bb1
define i32 @foo(i32 %arg) !prof !0 {
; CHECK-LABEL: @foo
diff --git a/llvm/test/Transforms/JumpThreading/thread-prob-5.ll b/llvm/test/Transforms/JumpThreading/thread-prob-5.ll
index 3f051a3a1a25c..89bf2ad4efcfc 100644
--- a/llvm/test/Transforms/JumpThreading/thread-prob-5.ll
+++ b/llvm/test/Transforms/JumpThreading/thread-prob-5.ll
@@ -1,13 +1,10 @@
-; RUN: opt -debug-only=branch-prob -enable-new-pm=false -branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes="require<branch-prob>,jump-threading" -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes=jump-threading -S %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOBPI
+; RUN: opt -debug-only=branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
; REQUIRES: asserts
; Make sure that we clear edge probabilities for bb1 as we fold
; the conditional branch in it.
; CHECK: eraseBlock bb1
-; CHECK-NOBPI-NOT: eraseBlock bb1
define void @foo(i32 %i, i32 %len) !prof !0 {
; CHECK-LABEL: @foo
diff --git a/llvm/test/Transforms/JumpThreading/thread-prob-6.ll b/llvm/test/Transforms/JumpThreading/thread-prob-6.ll
index c9a4626f307bf..1e0949ff66183 100644
--- a/llvm/test/Transforms/JumpThreading/thread-prob-6.ll
+++ b/llvm/test/Transforms/JumpThreading/thread-prob-6.ll
@@ -1,13 +1,10 @@
-; RUN: opt -debug-only=branch-prob -enable-new-pm=false -branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes="require<branch-prob>,jump-threading" -S %s 2>&1 | FileCheck %s
-; RUN: opt -debug-only=branch-prob -passes=jump-threading -S %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOBPI
+; RUN: opt -debug-only=branch-prob -jump-threading -S %s 2>&1 | FileCheck %s
; REQUIRES: asserts
; Make sure that we clear edge probabilities for bb1 as we fold
; the conditional branch in it.
; CHECK: eraseBlock bb1
-; CHECK-NOBPI-NOT: eraseBlock bb1
define i32 @foo() !prof !0 {
; CHECK-LABEL: @foo
diff --git a/llvm/test/Transforms/JumpThreading/threading_prof1.ll b/llvm/test/Transforms/JumpThreading/threading_prof1.ll
index 273cfafaf1362..1bfd4509714e4 100644
--- a/llvm/test/Transforms/JumpThreading/threading_prof1.ll
+++ b/llvm/test/Transforms/JumpThreading/threading_prof1.ll
@@ -96,4 +96,4 @@ declare i32 @b()
!0 = !{!"branch_weights", i32 2146410443, i32 1073205}
;CHECK: ![[PROF1]] = !{!"branch_weights", i32 1073205, i32 2146410443}
-;CHECK: ![[PROF2]] = !{!"branch_weights", i32 -2147483648, i32 0}
+;CHECK: ![[PROF2]] = !{!"branch_weights", i32 2146410443, i32 1073205}
diff --git a/llvm/test/Transforms/JumpThreading/threading_prof2.ll b/llvm/test/Transforms/JumpThreading/threading_prof2.ll
index 7081453fcab19..b14b996f24eaa 100644
--- a/llvm/test/Transforms/JumpThreading/threading_prof2.ll
+++ b/llvm/test/Transforms/JumpThreading/threading_prof2.ll
@@ -39,4 +39,4 @@ declare i32 @b()
!0 = !{!"branch_weights", i32 2146410443, i32 1073205}
;CHECK: ![[PROF1]] = !{!"branch_weights", i32 1073205, i32 2146410443}
-;CHECK: ![[PROF2]] = !{!"branch_weights", i32 -2147483648, i32 0}
+;CHECK: ![[PROF2]] = !{!"branch_weights", i32 2146410443, i32 1073205}
diff --git a/llvm/test/Transforms/JumpThreading/threading_prof3.ll b/llvm/test/Transforms/JumpThreading/threading_prof3.ll
index cf5843fdfdbd4..b235c9b72b938 100644
--- a/llvm/test/Transforms/JumpThreading/threading_prof3.ll
+++ b/llvm/test/Transforms/JumpThreading/threading_prof3.ll
@@ -27,4 +27,4 @@ bb9:
ret void
}
-;CHECK: ![[PROF]] = !{!"branch_weights", i32 -2147483648, i32 0}
+;CHECK: ![[PROF]] = !{!"branch_weights", i32 0, i32 0}
More information about the llvm-commits
mailing list