-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Revert "[SimplifyCFG] Skip threading if the target may have divergent branches" #100994
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
jplehr
merged 1 commit into
main
from
revert-100185-users/darkbuck/spr/simplifycfg-skip-threading-if-the-target-may-have-divergent-branches
Jul 29, 2024
Merged
Revert "[SimplifyCFG] Skip threading if the target may have divergent branches" #100994
jplehr
merged 1 commit into
main
from
revert-100185-users/darkbuck/spr/simplifycfg-skip-threading-if-the-target-may-have-divergent-branches
Jul 29, 2024
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
… branches" This reverts commit ba45453.
@llvm/pr-subscribers-llvm-transforms @llvm/pr-subscribers-backend-amdgpu Author: Jan Patrick Lehr (jplehr) ChangesReverts llvm/llvm-project#100185 See comments on PR. Full diff: https://github.com/llvm/llvm-project/pull/100994.diff 3 Files Affected:
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 1a17524b826a1..f23e28888931d 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -3246,12 +3246,7 @@ bool SimplifyCFGOpt::SpeculativelyExecuteBB(BranchInst *BI,
}
/// Return true if we can thread a branch across this block.
-static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB,
- const TargetTransformInfo &TTI) {
- // Skip threading if the branch may be divergent.
- if (TTI.hasBranchDivergence(BB->getParent()))
- return false;
-
+static bool BlockIsSimpleEnoughToThreadThrough(BasicBlock *BB) {
int Size = 0;
EphemeralValueTracker EphTracker;
@@ -3306,9 +3301,10 @@ static ConstantInt *getKnownValueOnEdge(Value *V, BasicBlock *From,
/// If we have a conditional branch on something for which we know the constant
/// value in predecessors (e.g. a phi node in the current block), thread edges
/// from the predecessor to their ultimate destination.
-static std::optional<bool> FoldCondBranchOnValueKnownInPredecessorImpl(
- BranchInst *BI, DomTreeUpdater *DTU, const DataLayout &DL,
- const TargetTransformInfo &TTI, AssumptionCache *AC) {
+static std::optional<bool>
+FoldCondBranchOnValueKnownInPredecessorImpl(BranchInst *BI, DomTreeUpdater *DTU,
+ const DataLayout &DL,
+ AssumptionCache *AC) {
SmallMapVector<ConstantInt *, SmallSetVector<BasicBlock *, 2>, 2> KnownValues;
BasicBlock *BB = BI->getParent();
Value *Cond = BI->getCondition();
@@ -3336,7 +3332,7 @@ static std::optional<bool> FoldCondBranchOnValueKnownInPredecessorImpl(
// Now we know that this block has multiple preds and two succs.
// Check that the block is small enough and values defined in the block are
// not used outside of it.
- if (!BlockIsSimpleEnoughToThreadThrough(BB, TTI))
+ if (!BlockIsSimpleEnoughToThreadThrough(BB))
return false;
for (const auto &Pair : KnownValues) {
@@ -3463,14 +3459,15 @@ static std::optional<bool> FoldCondBranchOnValueKnownInPredecessorImpl(
return false;
}
-static bool FoldCondBranchOnValueKnownInPredecessor(
- BranchInst *BI, DomTreeUpdater *DTU, const DataLayout &DL,
- const TargetTransformInfo &TTI, AssumptionCache *AC) {
+static bool FoldCondBranchOnValueKnownInPredecessor(BranchInst *BI,
+ DomTreeUpdater *DTU,
+ const DataLayout &DL,
+ AssumptionCache *AC) {
std::optional<bool> Result;
bool EverChanged = false;
do {
// Note that None means "we changed things, but recurse further."
- Result = FoldCondBranchOnValueKnownInPredecessorImpl(BI, DTU, DL, TTI, AC);
+ Result = FoldCondBranchOnValueKnownInPredecessorImpl(BI, DTU, DL, AC);
EverChanged |= Result == std::nullopt || *Result;
} while (Result == std::nullopt);
return EverChanged;
@@ -7546,7 +7543,7 @@ bool SimplifyCFGOpt::simplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
// If this is a branch on something for which we know the constant value in
// predecessors (e.g. a phi node in the current block), thread control
// through this block.
- if (FoldCondBranchOnValueKnownInPredecessor(BI, DTU, DL, TTI, Options.AC))
+ if (FoldCondBranchOnValueKnownInPredecessor(BI, DTU, DL, Options.AC))
return requestResimplify();
// Scan predecessor blocks for conditional branches.
diff --git a/llvm/test/Transforms/SimplifyCFG/AMDGPU/skip-threading.ll b/llvm/test/Transforms/SimplifyCFG/AMDGPU/skip-threading.ll
deleted file mode 100644
index b1262e294c6d0..0000000000000
--- a/llvm/test/Transforms/SimplifyCFG/AMDGPU/skip-threading.ll
+++ /dev/null
@@ -1,44 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
-; RUN: opt -mtriple=amdgcn -S -passes=simplifycfg < %s | FileCheck %s
-
-declare void @bar1()
-declare void @bar2()
-declare void @bar3()
-
-define i32 @test_01a(i32 %a) {
-; CHECK-LABEL: define i32 @test_01a(
-; CHECK-SAME: i32 [[A:%.*]]) {
-; CHECK-NEXT: [[ENTRY:.*:]]
-; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A]], 0
-; CHECK-NEXT: br i1 [[COND]], label %[[MERGE:.*]], label %[[IF_FALSE:.*]]
-; CHECK: [[IF_FALSE]]:
-; CHECK-NEXT: call void @bar1()
-; CHECK-NEXT: br label %[[MERGE]]
-; CHECK: [[MERGE]]:
-; CHECK-NEXT: call void @bar2()
-; CHECK-NEXT: br i1 [[COND]], label %[[EXIT:.*]], label %[[IF_FALSE_2:.*]]
-; CHECK: [[IF_FALSE_2]]:
-; CHECK-NEXT: call void @bar3()
-; CHECK-NEXT: br label %[[EXIT]]
-; CHECK: [[EXIT]]:
-; CHECK-NEXT: ret i32 [[A]]
-;
-entry:
- %cond = icmp eq i32 %a, 0
- br i1 %cond, label %merge, label %if.false
-
-if.false:
- call void @bar1()
- br label %merge
-
-merge:
- call void @bar2()
- br i1 %cond, label %exit, label %if.false.2
-
-if.false.2:
- call void @bar3()
- br label %exit
-
-exit:
- ret i32 %a
-}
diff --git a/llvm/test/Transforms/SimplifyCFG/convergent.ll b/llvm/test/Transforms/SimplifyCFG/convergent.ll
index d148063589de6..6ba51e06460c2 100644
--- a/llvm/test/Transforms/SimplifyCFG/convergent.ll
+++ b/llvm/test/Transforms/SimplifyCFG/convergent.ll
@@ -4,9 +4,6 @@
; RUN: opt -S -passes='simplifycfg<hoist-common-insts;sink-common-insts>' < %s | FileCheck -check-prefixes=CHECK,SINK %s
declare void @foo() convergent
-declare void @bar1()
-declare void @bar2()
-declare void @bar3()
declare i32 @tid()
declare i32 @mbcnt(i32 %a, i32 %b) convergent
declare i32 @bpermute(i32 %a, i32 %b) convergent
@@ -48,42 +45,6 @@ exit:
ret i32 %a
}
-define i32 @test_01a(i32 %a) {
-; CHECK-LABEL: @test_01a(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 0
-; CHECK-NEXT: br i1 [[COND]], label [[EXIT_CRITEDGE:%.*]], label [[IF_FALSE:%.*]]
-; CHECK: if.false:
-; CHECK-NEXT: call void @bar1()
-; CHECK-NEXT: call void @bar2()
-; CHECK-NEXT: call void @bar3()
-; CHECK-NEXT: br label [[EXIT:%.*]]
-; CHECK: exit.critedge:
-; CHECK-NEXT: call void @bar2()
-; CHECK-NEXT: br label [[EXIT]]
-; CHECK: exit:
-; CHECK-NEXT: ret i32 [[A]]
-;
-entry:
- %cond = icmp eq i32 %a, 0
- br i1 %cond, label %merge, label %if.false
-
-if.false:
- call void @bar1()
- br label %merge
-
-merge:
- call void @bar2()
- br i1 %cond, label %exit, label %if.false.2
-
-if.false.2:
- call void @bar3()
- br label %exit
-
-exit:
- ret i32 %a
-}
-
define void @test_02(ptr %y.coerce) convergent {
; NOSINK-LABEL: @test_02(
; NOSINK-NEXT: entry:
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Reverts #100185
See comments on PR.