xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/convergent-inlineasm.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=amdgcn--amdhsa -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.amdgcn.workitem.id.x() #0
4*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}convergent_inlineasm:
5*9880d681SAndroid Build Coastguard Worker; GCN: BB#0:
6*9880d681SAndroid Build Coastguard Worker; GCN: v_cmp_ne_i32_e64
7*9880d681SAndroid Build Coastguard Worker; GCN: BB#1:
8*9880d681SAndroid Build Coastguard Workerdefine void @convergent_inlineasm(i64 addrspace(1)* nocapture %arg) {
9*9880d681SAndroid Build Coastguard Workerbb:
10*9880d681SAndroid Build Coastguard Worker  %tmp = call i32 @llvm.amdgcn.workitem.id.x()
11*9880d681SAndroid Build Coastguard Worker  %tmp1 = tail call i64 asm "v_cmp_ne_i32_e64 $0, 0, $1", "=s,v"(i32 1) #1
12*9880d681SAndroid Build Coastguard Worker  %tmp2 = icmp eq i32 %tmp, 8
13*9880d681SAndroid Build Coastguard Worker  br i1 %tmp2, label %bb3, label %bb5
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerbb3:                                              ; preds = %bb
16*9880d681SAndroid Build Coastguard Worker  %tmp4 = getelementptr i64, i64 addrspace(1)* %arg, i32 %tmp
17*9880d681SAndroid Build Coastguard Worker  store i64 %tmp1, i64 addrspace(1)* %arg, align 8
18*9880d681SAndroid Build Coastguard Worker  br label %bb5
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerbb5:                                              ; preds = %bb3, %bb
21*9880d681SAndroid Build Coastguard Worker  ret void
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}nonconvergent_inlineasm:
25*9880d681SAndroid Build Coastguard Worker; GCN: BB#1:
26*9880d681SAndroid Build Coastguard Worker; GCN: v_cmp_ne_i32_e64
27*9880d681SAndroid Build Coastguard Worker; GCN: BB1_2:
28*9880d681SAndroid Build Coastguard Workerdefine void @nonconvergent_inlineasm(i64 addrspace(1)* nocapture %arg) {
29*9880d681SAndroid Build Coastguard Workerbb:
30*9880d681SAndroid Build Coastguard Worker  %tmp = call i32 @llvm.amdgcn.workitem.id.x()
31*9880d681SAndroid Build Coastguard Worker  %tmp1 = tail call i64 asm "v_cmp_ne_i32_e64 $0, 0, $1", "=s,v"(i32 1)
32*9880d681SAndroid Build Coastguard Worker  %tmp2 = icmp eq i32 %tmp, 8
33*9880d681SAndroid Build Coastguard Worker  br i1 %tmp2, label %bb3, label %bb5
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerbb3:                                              ; preds = %bb
36*9880d681SAndroid Build Coastguard Worker  %tmp4 = getelementptr i64, i64 addrspace(1)* %arg, i32 %tmp
37*9880d681SAndroid Build Coastguard Worker  store i64 %tmp1, i64 addrspace(1)* %arg, align 8
38*9880d681SAndroid Build Coastguard Worker  br label %bb5
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerbb5:                                              ; preds = %bb3, %bb
41*9880d681SAndroid Build Coastguard Worker  ret void
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone }
45*9880d681SAndroid Build Coastguard Workerattributes #1 = { convergent nounwind readnone }
46