[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.update.dpp.gfx90a.ll
blobfa32ee108d3829f38807a8000a4daf9561fae122
1 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck --check-prefixes=GCN,GFX90A %s
2 ; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx90a < %s | FileCheck --check-prefixes=GCN,GFX90A %s
3 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck --check-prefixes=GCN,GFX942 %s
4 ; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx942 < %s | FileCheck --check-prefixes=GCN,GFX942 %s
5 ; RUN: llc -global-isel=1 -global-isel-abort=2 -mtriple=amdgcn -mcpu=gfx9-4-generic --amdhsa-code-object-version=6 < %s | FileCheck --check-prefixes=GCN,GFX942 %s
7 ; DPP control value 337 is valid for 64-bit DPP on gfx942
9 ; GCN-LABEL: update_dpp_i64:
11 ; GFX90A-DAG:    v_mov_b32_dpp v2, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
12 ; GFX90A-DAG:    v_mov_b32_dpp v3, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
14 ; GFX942:        v_mov_b64_dpp v[2:3], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
16 ; GCN:           global_store_dwordx2 v[4:5], v[2:3], off
18 define amdgpu_ps void @update_dpp_i64(i64 %in, i64 %old, ptr addrspace(1) %out) {
19   %tmp0 = call i64 @llvm.amdgcn.update.dpp.i64(i64 %old, i64 %in, i32 337, i32 1, i32 1, i1 0)
20   store i64 %tmp0, ptr addrspace(1) %out
21   ret void
24 ; GCN-LABEL: update_dpp_v2i32:
26 ; GFX90A-DAG:    v_mov_b32_dpp v2, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
27 ; GFX90A-DAG:    v_mov_b32_dpp v3, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
29 ; GFX942:        v_mov_b64_dpp v[2:3], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
31 ; GCN:           global_store_dwordx2 v[4:5], v[2:3], off
33 define amdgpu_ps void @update_dpp_v2i32(<2 x i32> %in, <2 x i32> %old, ptr addrspace(1) %out) {
34   %tmp0 = call <2 x i32> @llvm.amdgcn.update.dpp.v2i32(<2 x i32> %old, <2 x i32> %in, i32 337, i32 1, i32 1, i1 0)
35   store <2 x i32> %tmp0, ptr addrspace(1) %out
36   ret void
39 ; GCN-LABEL: update_dpp_v3i32:
41 ; GCN-DAG:    v_mov_b32_dpp v{{[0-9]+}}, v2 row_newbcast:1 row_mask:0x1 bank_mask:0x1
42 ; GCN-DAG:    v_mov_b32_dpp v{{[0-9]+}}, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
43 ; GCN-DAG:    v_mov_b32_dpp v{{[0-9]+}}, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
45 ; GCN:        global_store_dwordx3
47 define amdgpu_ps void @update_dpp_v3i32(<3 x i32> %in, <3 x i32> %old, ptr addrspace(1) %out) {
48   %tmp0 = call <3 x i32> @llvm.amdgcn.update.dpp.v3i32(<3 x i32> %old, <3 x i32> %in, i32 337, i32 1, i32 1, i1 0)
49   store <3 x i32> %tmp0, ptr addrspace(1) %out
50   ret void
53 ; GCN-LABEL: update_dpp_v4i32:
55 ; GFX90A-DAG:    v_mov_b32_dpp v6, v2 row_newbcast:1 row_mask:0x1 bank_mask:0x1
56 ; GFX90A-DAG:    v_mov_b32_dpp v7, v3 row_newbcast:1 row_mask:0x1 bank_mask:0x1
57 ; GFX90A-DAG:    v_mov_b32_dpp v4, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
58 ; GFX90A-DAG:    v_mov_b32_dpp v5, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
60 ; GFX942-DAG:    v_mov_b64_dpp v[6:7], v[2:3] row_newbcast:1 row_mask:0x1 bank_mask:0x1
61 ; GFX942-DAG:    v_mov_b64_dpp v[4:5], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
63 ; GCN:           global_store_dwordx4 v[8:9], v[4:7], off
65 define amdgpu_ps void @update_dpp_v4i32(<4 x i32> %in, <4 x i32> %old, ptr addrspace(1) %out) {
66   %tmp0 = call <4 x i32> @llvm.amdgcn.update.dpp.v4i32(<4 x i32> %old, <4 x i32> %in, i32 337, i32 1, i32 1, i1 0)
67   store <4 x i32> %tmp0, ptr addrspace(1) %out
68   ret void
71 ; GCN-LABEL: update_dpp_v2i32_poison:
73 ; GFX90A-DAG:    v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
74 ; GFX90A-DAG:    v_mov_b32_dpp v1, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
76 ; GFX942:        v_mov_b64_dpp v[0:1], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
78 ; GCN:           global_store_dwordx2 v[2:3], v[0:1], off
80 define amdgpu_ps void @update_dpp_v2i32_poison(<2 x i32> %in, ptr addrspace(1) %out) {
81   %tmp0 = call <2 x i32> @llvm.amdgcn.update.dpp.v2i32(<2 x i32> poison, <2 x i32> %in, i32 337, i32 1, i32 1, i1 0)
82   store <2 x i32> %tmp0, ptr addrspace(1) %out
83   ret void
86 ; GCN-LABEL: update_dpp_float:
88 ; GCN:        v_mov_b32_dpp v1, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
90 ; GCN:        global_store_dword v[2:3], v1, off
92 define amdgpu_ps void @update_dpp_float(float %in, float %old, ptr addrspace(1) %out) {
93   %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float %old, float %in, i32 337, i32 1, i32 1, i1 0)
94   store float %tmp0, ptr addrspace(1) %out
95   ret void
98 ; GCN-LABEL: update_dpp_double:
100 ; GFX90A-DAG:    v_mov_b32_dpp v2, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
101 ; GFX90A-DAG:    v_mov_b32_dpp v3, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
103 ; GFX942:        v_mov_b64_dpp v[2:3], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
105 ; GCN:           global_store_dwordx2 v[4:5], v[2:3], off
107 define amdgpu_ps void @update_dpp_double(double %in, double %old, ptr addrspace(1) %out) {
108   %tmp0 = call double @llvm.amdgcn.update.dpp.f64(double %old, double %in, i32 337, i32 1, i32 1, i1 0)
109   store double %tmp0, ptr addrspace(1) %out
110   ret void
113 ; GCN-LABEL: update_dpp_float_poison:
115 ; GCN:        v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
117 ; GCN:        global_store_dword v[{{[0-9:]+}}], v0, off
119 define amdgpu_ps void @update_dpp_float_poison(float %in, ptr addrspace(1) %out) {
120   %tmp0 = call float @llvm.amdgcn.update.dpp.f32(float poison, float %in, i32 337, i32 1, i32 1, i1 0)
121   store float %tmp0, ptr addrspace(1) %out
122   ret void
125 ; GCN-LABEL: update_dpp_double_poison:
127 ; GFX90A-DAG:    v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
128 ; GFX90A-DAG:    v_mov_b32_dpp v1, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
130 ; GFX942:        v_mov_b64_dpp v[0:1], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
132 ; GCN:           global_store_dwordx2 v[2:3], v[0:1], off
134 define amdgpu_ps void @update_dpp_double_poison(double %in, ptr addrspace(1) %out) {
135   %tmp0 = call double @llvm.amdgcn.update.dpp.f64(double poison, double %in, i32 337, i32 1, i32 1, i1 0)
136   store double %tmp0, ptr addrspace(1) %out
137   ret void
140 ; GCN-LABEL: update_dpp_v2f32_poison:
142 ; GFX90A-DAG:    v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
143 ; GFX90A-DAG:    v_mov_b32_dpp v1, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
145 ; GFX942:        v_mov_b64_dpp v[0:1], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
147 ; GCN:           global_store_dwordx2 v[2:3], v[0:1], off
149 define amdgpu_ps void @update_dpp_v2f32_poison(<2 x float> %in, ptr addrspace(1) %out) {
150   %tmp0 = call <2 x float> @llvm.amdgcn.update.dpp.v2f32(<2 x float> poison, <2 x float> %in, i32 337, i32 1, i32 1, i1 0)
151   store <2 x float> %tmp0, ptr addrspace(1) %out
152   ret void
155 ; GCN-LABEL: update_dpp_v2f16_poison:
157 ; GCN:         v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
159 ; GCN:         global_store_dword v[{{[0-9:]+}}], v0, off
161 define amdgpu_ps void @update_dpp_v2f16_poison(<2 x half> %in, ptr addrspace(1) %out) {
162   %tmp0 = call <2 x half> @llvm.amdgcn.update.dpp.v2f16(<2 x half> poison, <2 x half> %in, i32 337, i32 1, i32 1, i1 0)
163   store <2 x half> %tmp0, ptr addrspace(1) %out
164   ret void
167 ; GCN-LABEL: update_dpp_v8f16_poison:
169 ; GFX90A-DAG:    v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
170 ; GFX90A-DAG:    v_mov_b32_dpp v1, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
171 ; GFX90A-DAG:    v_mov_b32_dpp v2, v2 row_newbcast:1 row_mask:0x1 bank_mask:0x1
172 ; GFX90A-DAG:    v_mov_b32_dpp v3, v3 row_newbcast:1 row_mask:0x1 bank_mask:0x1
174 ; GFX942-DAG:    v_mov_b64_dpp v[2:3], v[2:3] row_newbcast:1 row_mask:0x1 bank_mask:0x1
175 ; GFX942-DAG:    v_mov_b64_dpp v[0:1], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
177 ; GCN:           global_store_dwordx4 v[4:5], v[0:3], off
179 define amdgpu_ps void @update_dpp_v8f16_poison(<8 x half> %in, ptr addrspace(1) %out) {
180   %tmp0 = call <8 x half> @llvm.amdgcn.update.dpp.v8f16(<8 x half> poison, <8 x half> %in, i32 337, i32 1, i32 1, i1 0)
181   store <8 x half> %tmp0, ptr addrspace(1) %out
182   ret void
185 ; GCN-LABEL: update_dpp_p3_poison:
187 ; GCN:        v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
189 ; GCN:        global_store_dword v[{{[0-9:]+}}], v0, off
191 define amdgpu_ps void @update_dpp_p3_poison(ptr addrspace(3) %in, ptr addrspace(1) %out) {
192   %tmp0 = call ptr addrspace(3) @llvm.amdgcn.update.dpp.p3(ptr addrspace(3) poison, ptr addrspace(3) %in, i32 337, i32 1, i32 1, i1 0)
193   store ptr addrspace(3) %tmp0, ptr addrspace(1) %out
194   ret void
197 ; GCN-LABEL: update_dpp_p0_poison:
199 ; GFX90A-DAG:    v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
200 ; GFX90A-DAG:    v_mov_b32_dpp v1, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x1
202 ; GFX942-DAG:    v_mov_b64_dpp v[0:1], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x1
204 ; GCN:            global_store_dwordx2 v[2:3], v[0:1], off
206 define amdgpu_ps void @update_dpp_p0_poison(ptr %in, ptr addrspace(1) %out) {
207   %tmp0 = call ptr @llvm.amdgcn.update.dpp.p0(ptr poison, ptr %in, i32 337, i32 1, i32 1, i1 0)
208   store ptr %tmp0, ptr addrspace(1) %out
209   ret void
212 ; GCN-LABEL: update_dpp_i64_unsupported_dpp64_op:
214 ; GCN-DAG:    v_mov_b32_dpp v3, v1 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1
215 ; GCN-DAG:    v_mov_b32_dpp v2, v0 quad_perm:[1,0,0,0] row_mask:0x1 bank_mask:0x1
217 ; GCN:        global_store_dwordx2 v[4:5], v[2:3], off
219 define amdgpu_ps void @update_dpp_i64_unsupported_dpp64_op(i64 %in, i64 %old, ptr addrspace(1) %out) {
220   %tmp0 = call i64 @llvm.amdgcn.update.dpp.i64(i64 %old, i64 %in, i32 1, i32 1, i32 1, i1 0)
221   store i64 %tmp0, ptr addrspace(1) %out
222   ret void
225 ; GCN-LABEL: update_dpp_i16:
227 ; GCN:        v_mov_b32_dpp v1, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
229 ; GCN:        global_store_short v[2:3], v1, off
231 define amdgpu_ps void @update_dpp_i16(i16 %in, i16 %old, ptr addrspace(1) %out) {
232   %tmp0 = call i16 @llvm.amdgcn.update.dpp.i16(i16 %old, i16 %in, i32 337, i32 1, i32 1, i1 0)
233   store i16 %tmp0, ptr addrspace(1) %out
234   ret void
237 ; GCN-LABEL: update_dpp_half:
239 ; GCN-DAG:    v_mov_b32_dpp v1, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
241 ; GCN:        global_store_short v[2:3], v1, off
243 define amdgpu_ps void @update_dpp_half(half %in, half %old, ptr addrspace(1) %out) {
244   %tmp0 = call half @llvm.amdgcn.update.dpp.f16(half %old, half %in, i32 337, i32 1, i32 1, i1 0)
245   store half %tmp0, ptr addrspace(1) %out
246   ret void
249 ; GCN-LABEL: update_dpp_bfloat:
251 ; GCN-DAG:    v_mov_b32_dpp v1, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x1
253 ; GCN:        global_store_short v[2:3], v1, off
255 define amdgpu_ps void @update_dpp_bfloat(bfloat %in, bfloat %old, ptr addrspace(1) %out) {
256   %tmp0 = call bfloat @llvm.amdgcn.update.dpp.bf16(bfloat %old, bfloat %in, i32 337, i32 1, i32 1, i1 0)
257   store bfloat %tmp0, ptr addrspace(1) %out
258   ret void
261 ; GCN-LABEL: update_dpp_v2p0_poison:
263 ; GFX90A-DAG:    v_mov_b32_dpp v0, v0 row_newbcast:1 row_mask:0x1 bank_mask:0x2
264 ; GFX90A-DAG:    v_mov_b32_dpp v1, v1 row_newbcast:1 row_mask:0x1 bank_mask:0x2
265 ; GFX90A-DAG:    v_mov_b32_dpp v2, v2 row_newbcast:1 row_mask:0x1 bank_mask:0x2
266 ; GFX90A-DAG:    v_mov_b32_dpp v3, v3 row_newbcast:1 row_mask:0x1 bank_mask:0x2
268 ; GFX942-DAG:    v_mov_b64_dpp v[2:3], v[2:3] row_newbcast:1 row_mask:0x1 bank_mask:0x2
269 ; GFX942-DAG:    v_mov_b64_dpp v[0:1], v[0:1] row_newbcast:1 row_mask:0x1 bank_mask:0x2
271 ; GCN:           global_store_dwordx4 v[4:5], v[0:3], off
273 define amdgpu_ps void @update_dpp_v2p0_poison(<2 x ptr> %in, ptr addrspace(1) %out) {
274   %tmp0 = call <2 x ptr> @llvm.amdgcn.update.dpp.v2p0(<2 x ptr> poison, <2 x ptr> %in, i32 337, i32 1, i32 2, i1 0)
275   store <2 x ptr> %tmp0, ptr addrspace(1) %out
276   ret void