[llvm] [AMDGPU][Verifier] Allow llvm.amdgcn.unreachable after cs.chain (PR #139494)
Shilei Tian via llvm-commits
llvm-commits at lists.llvm.org
Sun May 11 21:51:12 PDT 2025
================
@@ -0,0 +1,38 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -mtriple=amdgcn--amdpal -mcpu=gfx1200 -verify -amdgpu-unify-divergent-exit-nodes -verify -S %s -o - | FileCheck %s
+
+; Check @llvm.amdgcn.unreachable is a valid alternative to unreachable after @llvm.amdgcn.cs.chain
+
+declare amdgpu_cs_chain void @callee() #0
+
+define amdgpu_cs_chain void @test_unreachable(i32 %val) {
+; CHECK-LABEL: define amdgpu_cs_chain void @test_unreachable(
+; CHECK-SAME: i32 [[VAL:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT: [[TAIL_BLOCK:.*:]]
+; CHECK-NEXT: [[DOTCOND:%.*]] = icmp ne i32 [[VAL]], 0
+; CHECK-NEXT: br i1 [[DOTCOND]], label %[[CHAIN_BLOCK:.*]], label %[[UNIFIEDRETURNBLOCK:.*]]
+; CHECK: [[CHAIN_BLOCK]]:
+; CHECK-NEXT: call void (ptr, i64, i32, i32, i32, ...) @llvm.amdgcn.cs.chain.p0.i64.i32.i32(ptr @callee, i64 -1, i32 inreg 1, i32 2, i32 1, i32 inreg 32, i32 inreg -1, ptr @callee)
+; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
+; CHECK-NEXT: br label %[[UNIFIEDRETURNBLOCK]]
+; CHECK: [[UNIFIEDRETURNBLOCK]]:
+; CHECK-NEXT: ret void
+;
+tail.block:
+ %.cond = icmp ne i32 %val, 0
+ br i1 %.cond, label %chain.block, label %ret.block
+
+chain.block:
+ call void(ptr, i64, i32, i32, i32, ...) @llvm.amdgcn.cs.chain(ptr @callee, i64 -1, i32 inreg 1, i32 2, i32 1, i32 inreg 32, i32 inreg -1, ptr @callee)
+ unreachable
+
+ret.block:
+ ret void
+}
+
+; Function Attrs: convergent noreturn nounwind
+declare void @llvm.amdgcn.cs.chain.p0.i64.i32.i32(ptr, i64, i32, i32, i32 immarg, ...) #1
+
+attributes #0 = { nounwind }
----------------
shiltian wrote:
These attributes might not matter.
https://github.com/llvm/llvm-project/pull/139494
More information about the llvm-commits
mailing list