Skip to content

[NFC] Pre-commit a test case for a SimplifyCFG issue#204957

Open
shiltian wants to merge 1 commit into
mainfrom
users/shiltian/pre-commit-test-for-simplify-cfg-bug
Open

[NFC] Pre-commit a test case for a SimplifyCFG issue#204957
shiltian wants to merge 1 commit into
mainfrom
users/shiltian/pre-commit-test-for-simplify-cfg-bug

Conversation

@shiltian

Copy link
Copy Markdown
Contributor

No description provided.

@shiltian

shiltian commented Jun 21, 2026

Copy link
Copy Markdown
Contributor Author

@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-llvm-transforms

Author: Shilei Tian (shiltian)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/204957.diff

1 Files Affected:

  • (added) llvm/test/Transforms/SimplifyCFG/convergent-loop-header.ll (+50)
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
+}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant