[llvm] 5cd7d81 - [llvm-reduce] Treat CallBrInst as Branch (#156366)

via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 1 23:01:40 PDT 2025


Author: XChy
Date: 2025-09-02T14:01:36+08:00
New Revision: 5cd7d81973510ea86ec49c5ce96e9055737b6c89

URL: https://github.com/llvm/llvm-project/commit/5cd7d81973510ea86ec49c5ce96e9055737b6c89
DIFF: https://github.com/llvm/llvm-project/commit/5cd7d81973510ea86ec49c5ce96e9055737b6c89.diff

LOG: [llvm-reduce] Treat CallBrInst as Branch (#156366)

Fixes the bug of the missing terminator for CallBrInst.

Added: 
    llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll

Modified: 
    llvm/tools/llvm-reduce/deltas/ReduceBasicBlocks.cpp

Removed: 
    


################################################################################
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..f0f6646a20719
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/reduce-bb-callbr.ll
@@ -0,0 +1,44 @@
+; 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-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
+  ret i32 0
+
+preheader:
+  store i32 1, ptr %p
+  ret i32 1
+}
+
+
+; 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
+
+}

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();


        


More information about the llvm-commits mailing list