[llvm] [llvm-reduce] Treat CallBrInst as Branch (PR #156366)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 1 21:49:23 PDT 2025
https://github.com/XChy updated https://github.com/llvm/llvm-project/pull/156366
>From b8e23d1a5e6f7e931fb3348e16edfe51bac26325 Mon Sep 17 00:00:00 2001
From: XChy <xxs_chy at outlook.com>
Date: Tue, 2 Sep 2025 02:10:39 +0800
Subject: [PATCH 1/2] [llvm-reduce] Treat CallBrInst as Branch
---
.../tools/llvm-reduce/reduce-bb-callbr.ll | 22 +++++++++++++++++++
.../llvm-reduce/deltas/ReduceBasicBlocks.cpp | 2 +-
2 files changed, 23 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
diff --git a/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll b/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
new file mode 100644
index 0000000000000..06df1407102f0
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-reduce %s -o %t --abort-on-invalid-reduction --delta-passes=basic-blocks --test FileCheck --test-arg %s --test-arg --match-full-lines --test-arg --check-prefix=INTERESTING --test-arg --input-file
+; RUN: FileCheck %s --input-file %t --check-prefixes=INTERESTING
+
+; CHECK-INTERESTINGNESS: store i32 0,
+; CHECK-INTERESTINGNESS: store i32 1,
+
+define i32 @e(ptr %p, i1 %cond) {
+entry:
+ callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"()
+ to label %for.cond [label %preheader]
+
+for.cond:
+ store i32 0, ptr %p
+ br label %preheader
+
+preheader:
+ store i32 1, %p
+ br i1 %%cond, label %for.cond, label %g
+
+returnbb:
+ ret i32 0
+}
diff --git a/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp b/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
index 3c00f9eb9a1e8..34c2b625ab86c 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp
@@ -49,7 +49,7 @@ static void replaceBranchTerminator(BasicBlock &BB,
if (isa<CatchSwitchInst>(Term))
return;
- bool IsBranch = isa<BranchInst>(Term);
+ bool IsBranch = isa<BranchInst>(Term) || isa<CallBrInst>(Term);
if (InvokeInst *Invoke = dyn_cast<InvokeInst>(Term)) {
BasicBlock *UnwindDest = Invoke->getUnwindDest();
BasicBlock::iterator LP = UnwindDest->getFirstNonPHIIt();
>From 8462605bf7d10193f58235c1689b4014efaf84a2 Mon Sep 17 00:00:00 2001
From: XChy <xxs_chy at outlook.com>
Date: Tue, 2 Sep 2025 12:49:10 +0800
Subject: [PATCH 2/2] update testcase
---
.../tools/llvm-reduce/reduce-bb-callbr.ll | 42 ++++++++++++++-----
1 file changed, 32 insertions(+), 10 deletions(-)
diff --git a/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll b/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
index 06df1407102f0..f0f6646a20719 100644
--- a/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
+++ b/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
@@ -1,22 +1,44 @@
-; RUN: llvm-reduce %s -o %t --abort-on-invalid-reduction --delta-passes=basic-blocks --test FileCheck --test-arg %s --test-arg --match-full-lines --test-arg --check-prefix=INTERESTING --test-arg --input-file
-; RUN: FileCheck %s --input-file %t --check-prefixes=INTERESTING
+; RUN: llvm-reduce %s -o %t --abort-on-invalid-reduction --delta-passes=basic-blocks --test FileCheck --test-arg %s --test-arg --check-prefix=INTERESTING --test-arg --input-file
+; RUN: FileCheck %s --input-file %t --check-prefixes=CHECK,INTERESTING
-; CHECK-INTERESTINGNESS: store i32 0,
-; CHECK-INTERESTINGNESS: store i32 1,
-define i32 @e(ptr %p, i1 %cond) {
-entry:
+; CHECK-LABEL: define i32 @keep_callbr(ptr %p, i1 %cond) {
+; CHECK: entry1:
+; CHECK-NEXT: callbr void asm
+; INTERESTING: store i32 0,
+; INTERESTING: store i32 1,
+
+define i32 @keep_callbr(ptr %p, i1 %cond) {
+entry1:
callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"()
to label %for.cond [label %preheader]
for.cond:
store i32 0, ptr %p
- br label %preheader
+ ret i32 0
preheader:
- store i32 1, %p
- br i1 %%cond, label %for.cond, label %g
+ store i32 1, ptr %p
+ ret i32 1
+}
+
-returnbb:
+; CHECK-LABEL: define i32 @drop_callbr(ptr %p, i1 %cond) {
+; CHECK: entry1:
+; CHECK-NEXT: br
+; INTERESTING: store i32 0,
+
+define i32 @drop_callbr(ptr %p, i1 %cond) {
+entry1:
+ callbr void asm sideeffect "", "!i,~{dirflag},~{fpsr},~{flags}"()
+ to label %for.cond [label %preheader]
+
+for.cond:
+ store i32 0, ptr %p
ret i32 0
+
+preheader:
+ store i32 1, ptr %p
+ ret i32 1
+
}
More information about the llvm-commits
mailing list