[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