[llvm] r311341 - Revert 311208, 311209
Xinliang David Li via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 21 09:00:38 PDT 2017
Author: davidxl
Date: Mon Aug 21 09:00:38 2017
New Revision: 311341
URL: http://llvm.org/viewvc/llvm-project?rev=311341&view=rev
Log:
Revert 311208, 311209
Removed:
llvm/trunk/test/Transforms/JumpThreading/threading_prof1.ll
llvm/trunk/test/Transforms/JumpThreading/threading_prof2.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=311341&r1=311340&r2=311341&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Mon Aug 21 09:00:38 2017
@@ -126,113 +126,7 @@ JumpThreadingPass::JumpThreadingPass(int
BBDupThreshold = (T == -1) ? BBDuplicateThreshold : unsigned(T);
}
-// Update branch probability information according to conditional
-// branch probablity. This is usually made possible for cloned branches
-// in inline instances by the context specific profile in the caller.
-// For instance,
-//
-// [Block PredBB]
-// [Branch PredBr]
-// if (t) {
-// Block A;
-// } else {
-// Block B;
-// }
-//
-// [Block BB]
-// cond = PN([true, %A], [..., %B]); // PHI node
-// [Branch CondBr]
-// if (cond) {
-// ... // P(cond == true) = 1%
-// }
-//
-// Here we know that when block A is taken, cond must be true, which means
-// P(cond == true | A) = 1
-//
-// Given that P(cond == true) = P(cond == true | A) * P(A) +
-// P(cond == true | B) * P(B)
-// we get
-// P(cond == true ) = P(A) + P(cond == true | B) * P(B)
-//
-// which gives us:
-// P(A) <= P(c == true), i.e.
-// P(t == true) <= P(cond == true)
-//
-// In other words, if we know P(cond == true), we know that P(t == true)
-// can not be greater than 1%.
-static void updatePredecessorProfileMetadata(PHINode *PN, BasicBlock *BB) {
- BranchInst *CondBr = dyn_cast<BranchInst>(BB->getTerminator());
- if (!CondBr)
- return;
-
- BranchProbability BP;
- uint64_t TrueWeight, FalseWeight;
- if (!CondBr->extractProfMetadata(TrueWeight, FalseWeight))
- return;
-
- // Returns the outgoing edge of the dominating predecessor block
- // that leads to the PhiNode's incoming block:
- auto GetPredOutEdge =
- [](BasicBlock *IncomingBB,
- BasicBlock *PhiBB) -> std::pair<BasicBlock *, BasicBlock *> {
- auto *PredBB = IncomingBB;
- while (auto *SinglePredBB = PredBB->getSinglePredecessor())
- PredBB = SinglePredBB;
-
- BranchInst *PredBr = dyn_cast<BranchInst>(IncomingBB->getTerminator());
- if (PredBr && PredBr->isConditional())
- return {IncomingBB, PhiBB};
-
- return {nullptr, nullptr};
- };
-
- for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
- Value *PhiOpnd = PN->getIncomingValue(i);
- ConstantInt *CI = dyn_cast<ConstantInt>(PhiOpnd);
-
- if (!CI || !CI->getType()->isIntegerTy(1))
- continue;
-
- BP = (CI->isOne() ? BranchProbability::getBranchProbability(
- TrueWeight, TrueWeight + FalseWeight)
- : BranchProbability::getBranchProbability(
- FalseWeight, TrueWeight + FalseWeight));
-
- auto PredOutEdge = GetPredOutEdge(PN->getIncomingBlock(i), BB);
- if (!PredOutEdge.first)
- return;
-
- BasicBlock *PredBB = PredOutEdge.first;
- BranchInst *PredBr = cast<BranchInst>(PredBB->getTerminator());
-
- uint64_t PredTrueWeight, PredFalseWeight;
- // FIXME: We currently only set the profile data when it is missing.
- // With PGO, this can be used to refine even existing profile data with
- // context information. This needs to be done after more performance
- // testing.
- if (PredBr->extractProfMetadata(PredTrueWeight, PredFalseWeight))
- continue;
-
- // We can not infer anything useful when BP >= 50%, because BP is the
- // upper bound probability value.
- if (BP >= BranchProbability(50, 100))
- continue;
-
- SmallVector<uint32_t, 2> Weights;
- if (PredBr->getSuccessor(0) == PredOutEdge.second) {
- Weights.push_back(BP.getNumerator());
- Weights.push_back(BP.getCompl().getNumerator());
- } else {
- Weights.push_back(BP.getCompl().getNumerator());
- Weights.push_back(BP.getNumerator());
- }
- PredBr->setMetadata(LLVMContext::MD_prof,
- MDBuilder(PredBr->getParent()->getContext())
- .createBranchWeights(Weights));
- }
-}
-
-/// runOnFunction - Toplevel algorithm.
+/// runOnFunction - Top level algorithm.
///
bool JumpThreading::runOnFunction(Function &F) {
if (skipFunction(F))
@@ -1097,11 +991,6 @@ bool JumpThreadingPass::ProcessBlock(Bas
if (SimplifyPartiallyRedundantLoad(LI))
return true;
- // Before threading, try to propagate profile data backwards:
- if (PHINode *PN = dyn_cast<PHINode>(CondInst))
- if (PN->getParent() == BB && isa<BranchInst>(BB->getTerminator()))
- updatePredecessorProfileMetadata(PN, BB);
-
// Handle a variety of cases where we are branching on something derived from
// a PHI node in the current block. If we can prove that any predecessors
// compute a predictable value based on a PHI node, thread those predecessors.
Removed: llvm/trunk/test/Transforms/JumpThreading/threading_prof1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/threading_prof1.ll?rev=311340&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/JumpThreading/threading_prof1.ll (original)
+++ llvm/trunk/test/Transforms/JumpThreading/threading_prof1.ll (removed)
@@ -1,37 +0,0 @@
-; RUN: opt -jump-threading -S < %s | FileCheck %s
-; RUN: opt -passes=jump-threading -S < %s | FileCheck %s
-
-define void @test() {
-bb:
- %tmp = call i32 @a()
- %tmp1 = icmp eq i32 %tmp, 1
- br i1 %tmp1, label %bb5, label %bb2
-; CHECK: br i1 %tmp1,{{.*}} !prof ![[PROF1:[0-9]+]]
-
-bb2: ; preds = %bb
- %tmp3 = call i32 @b()
- %tmp4 = icmp ne i32 %tmp3, 1
- br label %bb5
-; CHECK: br i1 %tmp4, {{.*}} !prof ![[PROF2:[0-9]+]]
-
-bb5: ; preds = %bb2, %bb
- %tmp6 = phi i1 [ false, %bb ], [ %tmp4, %bb2 ]
- br i1 %tmp6, label %bb8, label %bb7, !prof !0
-
-bb7: ; preds = %bb5
- call void @bar()
- br label %bb8
-
-bb8: ; preds = %bb7, %bb5
- ret void
-}
-
-declare void @bar()
-
-declare i32 @a()
-
-declare i32 @b()
-
-!0 = !{!"branch_weights", i32 2146410443, i32 1073205}
-;CHECK: ![[PROF1]] = !{!"branch_weights", i32 1073205, i32 2146410443}
-;CHECK: ![[PROF2]] = !{!"branch_weights", i32 2146410443, i32 1073205}
Removed: llvm/trunk/test/Transforms/JumpThreading/threading_prof2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/threading_prof2.ll?rev=311340&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/JumpThreading/threading_prof2.ll (original)
+++ llvm/trunk/test/Transforms/JumpThreading/threading_prof2.ll (removed)
@@ -1,42 +0,0 @@
-; RUN: opt -jump-threading -S < %s | FileCheck %s
-; RUN: opt -passes=jump-threading -S < %s | FileCheck %s
-define void @test() {
-bb:
- %tmp = call i32 @a()
- %tmp1 = icmp eq i32 %tmp, 1
- br i1 %tmp1, label %bb5, label %bb2
-; CHECK: br i1 %tmp1,{{.*}} !prof ![[PROF1:[0-9]+]]
-
-bb2:
- %tmp3 = call i32 @b()
- %tmp4 = icmp ne i32 %tmp3, 1
- br label %bb5
-; CHECK: br i1 %tmp4, {{.*}} !prof ![[PROF2:[0-9]+]]
-
-bb5:
- %tmp6 = phi i1 [ false, %bb ], [ %tmp4, %bb2 ]
- br i1 %tmp6, label %bb8, label %bb7, !prof !0
-
-bb7:
- call void @bar()
- br label %bb9
-
-bb8:
- call void @foo()
- br label %bb9
-
-bb9:
- ret void
-}
-
-declare void @bar()
-
-declare void @foo()
-
-declare i32 @a()
-
-declare i32 @b()
-
-!0 = !{!"branch_weights", i32 2146410443, i32 1073205}
-;CHECK: ![[PROF1]] = !{!"branch_weights", i32 1073205, i32 2146410443}
-;CHECK: ![[PROF2]] = !{!"branch_weights", i32 2146410443, i32 1073205}
More information about the llvm-commits
mailing list