[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.quadmask.ll
blobafc5807e4f5f699f4cb0294a328e6b91b45d0530
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -global-isel=1 -verify-machineinstrs < %s | FileCheck  -check-prefixes=GFX11 %s
3 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -global-isel=0 -verify-machineinstrs < %s | FileCheck  -check-prefixes=GFX11 %s
5 declare i32 @llvm.amdgcn.s.quadmask.i32(i32)
6 declare i64 @llvm.amdgcn.s.quadmask.i64(i64)
8 define i32 @test_quadmask_constant_zero_i32() {
9 ; GFX11-LABEL: test_quadmask_constant_zero_i32:
10 ; GFX11:       ; %bb.0: ; %entry
11 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
13 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
14 entry:
15   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 0)
16   ret i32 %qm
19 define i32 @test_quadmask_constant_neg_one_i32() {
20 ; GFX11-LABEL: test_quadmask_constant_neg_one_i32:
21 ; GFX11:       ; %bb.0: ; %entry
22 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0xff
24 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25 entry:
26   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 -1)
27   ret i32 %qm
30 define i32 @test_quadmask_constant_undef_i32() {
31 ; GFX11-LABEL: test_quadmask_constant_undef_i32:
32 ; GFX11:       ; %bb.0: ; %entry
33 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34 ; GFX11-NEXT:    s_quadmask_b32 s0, s0
35 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
36 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
37 entry:
38   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 undef)
39   ret i32 %qm
42 define i32 @test_quadmask_constant_poison_i32() {
43 ; GFX11-LABEL: test_quadmask_constant_poison_i32:
44 ; GFX11:       ; %bb.0: ; %entry
45 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
46 ; GFX11-NEXT:    s_quadmask_b32 s0, s0
47 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
48 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
49 entry:
50   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 poison)
51   ret i32 %qm
54 define i32 @test_quadmask_constant_i32() {
55 ; GFX11-LABEL: test_quadmask_constant_i32:
56 ; GFX11:       ; %bb.0: ; %entry
57 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0xcb
59 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
60 entry:
61   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 u0x85003092)
62   ret i32 %qm
65 define amdgpu_cs void @test_quadmask_sgpr_i32(i32 inreg %mask, ptr addrspace(1) %out) {
66 ; GFX11-LABEL: test_quadmask_sgpr_i32:
67 ; GFX11:       ; %bb.0: ; %entry
68 ; GFX11-NEXT:    s_quadmask_b32 s0, s0
69 ; GFX11-NEXT:    v_mov_b32_e32 v2, s0
70 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
71 ; GFX11-NEXT:    s_endpgm
72 entry:
73   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 %mask)
74   store i32 %qm, ptr addrspace(1) %out
75   ret void
79 define i32 @test_quadmask_vgpr_i32(i32 %mask) {
80 ; GFX11-LABEL: test_quadmask_vgpr_i32:
81 ; GFX11:       ; %bb.0: ; %entry
82 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
83 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
84 ; GFX11-NEXT:    s_quadmask_b32 s0, s0
85 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
86 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
87 entry:
88   %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 %mask)
89   ret i32 %qm
92 define i64 @test_quadmask_constant_i64() {
93 ; GFX11-LABEL: test_quadmask_constant_i64:
94 ; GFX11:       ; %bb.0: ; %entry
95 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
96 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0xe3e6 :: v_dual_mov_b32 v1, 0
97 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
98 entry:
99   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 u0x67D000FC85F00A90)
100   ret i64 %qm
103 define i64 @test_quadmask_constant_zero_i64() {
104 ; GFX11-LABEL: test_quadmask_constant_zero_i64:
105 ; GFX11:       ; %bb.0: ; %entry
106 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
107 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, 0
108 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
109 entry:
110   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 0)
111   ret i64 %qm
114 define i64 @test_quadmask_constant_neg_one_i64() {
115 ; GFX11-LABEL: test_quadmask_constant_neg_one_i64:
116 ; GFX11:       ; %bb.0: ; %entry
117 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
118 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0xffff :: v_dual_mov_b32 v1, 0
119 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
120 entry:
121   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 -1)
122   ret i64 %qm
125 define i64 @test_quadmask_constant_undef_i64() {
126 ; GFX11-LABEL: test_quadmask_constant_undef_i64:
127 ; GFX11:       ; %bb.0: ; %entry
128 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129 ; GFX11-NEXT:    s_quadmask_b64 s[0:1], s[0:1]
130 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
131 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
132 entry:
133   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 undef)
134   ret i64 %qm
137 define i64 @test_quadmask_constant_poison_i64() {
138 ; GFX11-LABEL: test_quadmask_constant_poison_i64:
139 ; GFX11:       ; %bb.0: ; %entry
140 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
141 ; GFX11-NEXT:    s_quadmask_b64 s[0:1], s[0:1]
142 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
143 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
144 entry:
145   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 poison)
146   ret i64 %qm
149 define amdgpu_cs void @test_quadmask_sgpr_i64(i64 inreg %mask, ptr addrspace(1) %out) {
150 ; GFX11-LABEL: test_quadmask_sgpr_i64:
151 ; GFX11:       ; %bb.0: ; %entry
152 ; GFX11-NEXT:    s_quadmask_b64 s[0:1], s[0:1]
153 ; GFX11-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0
154 ; GFX11-NEXT:    global_store_b64 v[0:1], v[2:3], off
155 ; GFX11-NEXT:    s_endpgm
156 entry:
157   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 %mask)
158   store i64 %qm, ptr addrspace(1) %out
159   ret void
162 define i64 @test_quadmask_vgpr_i64(i64 %mask) {
163 ; GFX11-LABEL: test_quadmask_vgpr_i64:
164 ; GFX11:       ; %bb.0: ; %entry
165 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
166 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
167 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v1
168 ; GFX11-NEXT:    s_quadmask_b64 s[0:1], s[0:1]
169 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
170 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
171 entry:
172   %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 %mask)
173   ret i64 %qm