[llvm] [NFC] Pre-commit a test case for a SimplifyCFG issue (PR #204957)

Shilei Tian via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 20 19:29:08 PDT 2026


https://github.com/shiltian created https://github.com/llvm/llvm-project/pull/204957

None

>From 0cddd5f86693fba379025ba1c43cb5b83618f6fd Mon Sep 17 00:00:00 2001
From: Shilei Tian <i at tianshilei.me>
Date: Sat, 20 Jun 2026 00:22:18 -0400
Subject: [PATCH] [NFC] Pre-commit a test case for a SimplifyCFG issue

---
 .../SimplifyCFG/convergent-loop-header.ll     | 50 +++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 llvm/test/Transforms/SimplifyCFG/convergent-loop-header.ll

diff --git a/llvm/test/Transforms/SimplifyCFG/convergent-loop-header.ll b/llvm/test/Transforms/SimplifyCFG/convergent-loop-header.ll
new file mode 100644
index 0000000000000..a988d9e469880
--- /dev/null
+++ b/llvm/test/Transforms/SimplifyCFG/convergent-loop-header.ll
@@ -0,0 +1,50 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -passes='simplifycfg<no-keep-loops>' < %s | FileCheck %s
+
+declare void @barrier() convergent
+
+define void @preserve_loop_header_branch(i32 %tid, ptr %ptr) convergent {
+; CHECK-LABEL: define void @preserve_loop_header_branch(
+; CHECK-SAME: i32 [[TID:%.*]], ptr [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[TID]], 0
+; CHECK-NEXT:    call void @barrier()
+; CHECK-NEXT:    br i1 [[COND]], label %[[OUTER_THEN:.*]], label %[[LOOP_HEADER:.*]]
+; CHECK:       [[OUTER_THEN]]:
+; CHECK-NEXT:    store i32 1, ptr [[PTR]], align 4
+; CHECK-NEXT:    br label %[[LOOP_THEN:.*]]
+; CHECK:       [[LOOP_THEN]]:
+; CHECK-NEXT:    store i32 2, ptr [[PTR]], align 4
+; CHECK-NEXT:    br label %[[LOOP_HEADER]]
+; CHECK:       [[LOOP_HEADER]]:
+; CHECK-NEXT:    call void @barrier()
+; CHECK-NEXT:    br i1 [[COND]], label %[[LOOP_THEN]], label %[[EXIT:.*]]
+; CHECK:       [[EXIT]]:
+; CHECK-NEXT:    ret void
+;
+entry:
+  %cond = icmp eq i32 %tid, 0
+  br label %outer
+
+outer:
+  call void @barrier()
+  br i1 %cond, label %outer.then, label %loop.header
+
+outer.then:
+  store i32 1, ptr %ptr, align 4
+  br label %loop.header
+
+loop.header:
+  br i1 %cond, label %loop.then, label %loop.body
+
+loop.then:
+  store i32 2, ptr %ptr, align 4
+  br label %loop.body
+
+loop.body:
+  call void @barrier()
+  br i1 %cond, label %loop.header, label %exit
+
+exit:
+  ret void
+}



More information about the llvm-commits mailing list