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]
15 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 0)
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]
26 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 -1)
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]
38 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 undef)
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]
50 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 poison)
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]
61 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 u0x85003092)
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
73 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 %mask)
74 store i32 %qm, ptr addrspace(1) %out
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]
88 %qm = call i32 @llvm.amdgcn.s.quadmask.i32(i32 %mask)
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]
99 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 u0x67D000FC85F00A90)
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]
110 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 0)
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]
121 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 -1)
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]
133 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 undef)
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]
145 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 poison)
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
157 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 %mask)
158 store i64 %qm, ptr addrspace(1) %out
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]
172 %qm = call i64 @llvm.amdgcn.s.quadmask.i64(i64 %mask)