1 # RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefix=GCN %s
3 # GCN-LABEL: name: flat_atomic_fcmpswap_to_s_denorm_mode
4 # GCN: FLAT_ATOMIC_FCMPSWAP
6 # GCN-NEXT: S_DENORM_MODE
8 name: flat_atomic_fcmpswap_to_s_denorm_mode
11 FLAT_ATOMIC_FCMPSWAP undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
12 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
15 # GCN-LABEL: name: flat_atomic_fcmpswap_x2_to_s_denorm_mode
16 # GCN: FLAT_ATOMIC_FCMPSWAP_X2
18 # GCN-NEXT: S_DENORM_MODE
20 name: flat_atomic_fcmpswap_x2_to_s_denorm_mode
23 FLAT_ATOMIC_FCMPSWAP_X2 undef %0:vreg_64, undef %1:vreg_128, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
24 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
27 # GCN-LABEL: name: flat_atomic_fmax_to_s_denorm_mode
28 # GCN: FLAT_ATOMIC_FMAX
30 # GCN-NEXT: S_DENORM_MODE
32 name: flat_atomic_fmax_to_s_denorm_mode
35 FLAT_ATOMIC_FMAX undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
36 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
39 # GCN-LABEL: name: flat_atomic_fmax_x2_to_s_denorm_mode
40 # GCN: FLAT_ATOMIC_FMAX_X2
42 # GCN-NEXT: S_DENORM_MODE
44 name: flat_atomic_fmax_x2_to_s_denorm_mode
47 FLAT_ATOMIC_FMAX_X2 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
48 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
51 # GCN-LABEL: name: flat_atomic_fmin_to_s_denorm_mode
52 # GCN: FLAT_ATOMIC_FMIN
54 # GCN-NEXT: S_DENORM_MODE
56 name: flat_atomic_fmin_to_s_denorm_mode
59 FLAT_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
60 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
63 # GCN-LABEL: name: flat_atomic_fmin_x2_to_s_denorm_mode
64 # GCN: FLAT_ATOMIC_FMIN_X2
66 # GCN-NEXT: S_DENORM_MODE
68 name: flat_atomic_fmin_x2_to_s_denorm_mode
71 FLAT_ATOMIC_FMIN_X2 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
72 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
75 # GCN-LABEL: name: flat_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
76 # GCN: FLAT_ATOMIC_FCMPSWAP_X2_RTN
78 # GCN-NEXT: S_DENORM_MODE
80 name: flat_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
83 %2:vreg_64 = FLAT_ATOMIC_FCMPSWAP_X2_RTN undef %0:vreg_64, undef %1:vreg_128, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
84 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
87 # GCN-LABEL: name: flat_atomic_fmax_rtn_to_s_denorm_mode
88 # GCN: FLAT_ATOMIC_FMAX_RTN
90 # GCN-NEXT: S_DENORM_MODE
92 name: flat_atomic_fmax_rtn_to_s_denorm_mode
95 %2:vgpr_32 = FLAT_ATOMIC_FMAX_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
96 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
99 # GCN-LABEL: name: flat_atomic_fmax_x2_rtn_to_s_denorm_mode
100 # GCN: FLAT_ATOMIC_FMAX_X2_RTN
102 # GCN-NEXT: S_DENORM_MODE
104 name: flat_atomic_fmax_x2_rtn_to_s_denorm_mode
107 %2:vreg_64 = FLAT_ATOMIC_FMAX_X2_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
108 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
111 # GCN-LABEL: name: flat_atomic_fmin_rtn_to_s_denorm_mode
112 # GCN: FLAT_ATOMIC_FMIN_RTN
114 # GCN-NEXT: S_DENORM_MODE
116 name: flat_atomic_fmin_rtn_to_s_denorm_mode
119 %2:vgpr_32 = FLAT_ATOMIC_FMIN_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
120 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
123 # GCN-LABEL: name: flat_atomic_fmin_x2_rtn_to_s_denorm_mode
124 # GCN: FLAT_ATOMIC_FMIN_X2_RTN
126 # GCN-NEXT: S_DENORM_MODE
128 name: flat_atomic_fmin_x2_rtn_to_s_denorm_mode
131 %2:vreg_64 = FLAT_ATOMIC_FMIN_X2_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
132 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
135 # GCN-LABEL: name: flat_atomic_fcmpswap_rtn_to_s_denorm_mode
136 # GCN: FLAT_ATOMIC_FCMPSWAP_RTN
138 # GCN-NEXT: S_DENORM_MODE
140 name: flat_atomic_fcmpswap_rtn_to_s_denorm_mode
143 %2:vgpr_32 = FLAT_ATOMIC_FCMPSWAP_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
144 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
147 # GCN-LABEL: name: global_atomic_fcmpswap_to_s_denorm_mode
148 # GCN: GLOBAL_ATOMIC_FCMPSWAP
150 # GCN-NEXT: S_DENORM_MODE
152 name: global_atomic_fcmpswap_to_s_denorm_mode
155 GLOBAL_ATOMIC_FCMPSWAP undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
156 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
159 # GCN-LABEL: name: global_atomic_fcmpswap_x2_to_s_denorm_mode
160 # GCN: GLOBAL_ATOMIC_FCMPSWAP_X2
162 # GCN-NEXT: S_DENORM_MODE
164 name: global_atomic_fcmpswap_x2_to_s_denorm_mode
167 GLOBAL_ATOMIC_FCMPSWAP_X2 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
168 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
171 # GCN-LABEL: name: global_atomic_fmax_to_s_denorm_mode
172 # GCN: GLOBAL_ATOMIC_FMAX
174 # GCN-NEXT: S_DENORM_MODE
176 name: global_atomic_fmax_to_s_denorm_mode
179 GLOBAL_ATOMIC_FMAX undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
180 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
183 # GCN-LABEL: name: global_atomic_fmax_x2_to_s_denorm_mode
184 # GCN: GLOBAL_ATOMIC_FMAX_X2
186 # GCN-NEXT: S_DENORM_MODE
188 name: global_atomic_fmax_x2_to_s_denorm_mode
191 GLOBAL_ATOMIC_FMAX_X2 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
192 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
195 # GCN-LABEL: name: global_atomic_fmin_to_s_denorm_mode
196 # GCN: GLOBAL_ATOMIC_FMIN
198 # GCN-NEXT: S_DENORM_MODE
200 name: global_atomic_fmin_to_s_denorm_mode
203 GLOBAL_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
204 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
207 # GCN-LABEL: name: global_atomic_fmin_x2_to_s_denorm_mode
208 # GCN: GLOBAL_ATOMIC_FMIN_X2
210 # GCN-NEXT: S_DENORM_MODE
212 name: global_atomic_fmin_x2_to_s_denorm_mode
215 GLOBAL_ATOMIC_FMIN_X2 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
216 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
219 # GCN-LABEL: name: global_atomic_fcmpswap_rtn_to_s_denorm_mode
220 # GCN: GLOBAL_ATOMIC_FCMPSWAP_RTN
222 # GCN-NEXT: S_DENORM_MODE
224 name: global_atomic_fcmpswap_rtn_to_s_denorm_mode
227 %2:vgpr_32 = GLOBAL_ATOMIC_FCMPSWAP_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
228 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
231 # GCN-LABEL: name: global_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
232 # GCN: GLOBAL_ATOMIC_FCMPSWAP_X2_RTN
234 # GCN-NEXT: S_DENORM_MODE
236 name: global_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
239 %2:vreg_64 = GLOBAL_ATOMIC_FCMPSWAP_X2_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
240 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
243 # GCN-LABEL: name: global_atomic_fmax_rtn_to_s_denorm_mode
244 # GCN: GLOBAL_ATOMIC_FMAX_RTN
246 # GCN-NEXT: S_DENORM_MODE
248 name: global_atomic_fmax_rtn_to_s_denorm_mode
251 %2:vgpr_32 = GLOBAL_ATOMIC_FMAX_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
252 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
255 # GCN-LABEL: name: global_atomic_fmax_x2_rtn_to_s_denorm_mode
256 # GCN: GLOBAL_ATOMIC_FMAX_X2_RTN
258 # GCN-NEXT: S_DENORM_MODE
260 name: global_atomic_fmax_x2_rtn_to_s_denorm_mode
263 %2:vreg_64 = GLOBAL_ATOMIC_FMAX_X2_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
264 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
267 # GCN-LABEL: name: global_atomic_fmin_rtn_to_s_denorm_mode
268 # GCN: GLOBAL_ATOMIC_FMIN_RTN
270 # GCN-NEXT: S_DENORM_MODE
272 name: global_atomic_fmin_rtn_to_s_denorm_mode
275 %2:vgpr_32 = GLOBAL_ATOMIC_FMIN_RTN undef %0:vreg_64, undef %1:vgpr_32, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
276 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
279 # GCN-LABEL: name: global_atomic_fmin_x2_rtn_to_s_denorm_mode
280 # GCN: GLOBAL_ATOMIC_FMIN_X2_RTN
282 # GCN-NEXT: S_DENORM_MODE
284 name: global_atomic_fmin_x2_rtn_to_s_denorm_mode
287 %2:vreg_64 = GLOBAL_ATOMIC_FMIN_X2_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
288 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
291 # GCN-LABEL: name: global_atomic_fcmpswap_saddr_to_s_denorm_mode
292 # GCN: GLOBAL_ATOMIC_FCMPSWAP_SADDR
294 # GCN-NEXT: S_DENORM_MODE
296 name: global_atomic_fcmpswap_saddr_to_s_denorm_mode
299 GLOBAL_ATOMIC_FCMPSWAP_SADDR undef %0:vgpr_32, undef %1:vgpr_32, undef %3:sgpr_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
300 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
303 # GCN-LABEL: name: global_atomic_fcmpswap_x2_saddr_rtn_to_s_denorm_mode
304 # GCN: GLOBAL_ATOMIC_FCMPSWAP_X2_SADDR_RTN
306 # GCN-NEXT: S_DENORM_MODE
308 name: global_atomic_fcmpswap_x2_saddr_rtn_to_s_denorm_mode
311 %2:vreg_64 = GLOBAL_ATOMIC_FCMPSWAP_X2_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
312 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
315 # GCN-LABEL: name: global_atomic_fmax_saddr_rtn_to_s_denorm_mode
316 # GCN: GLOBAL_ATOMIC_FMAX_SADDR_RTN
318 # GCN-NEXT: S_DENORM_MODE
320 name: global_atomic_fmax_saddr_rtn_to_s_denorm_mode
323 %2:vgpr_32 = GLOBAL_ATOMIC_FMAX_SADDR_RTN undef %0:vgpr_32, undef %1:vgpr_32, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
324 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
327 # GCN-LABEL: name: global_atomic_fmax_x2_saddr_rtn_to_s_denorm_mode
328 # GCN: GLOBAL_ATOMIC_FMAX_X2_SADDR_RTN
330 # GCN-NEXT: S_DENORM_MODE
332 name: global_atomic_fmax_x2_saddr_rtn_to_s_denorm_mode
335 %2:vreg_64 = GLOBAL_ATOMIC_FMAX_X2_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
336 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
339 # GCN-LABEL: name: global_atomic_fmin_saddr_rtn_to_s_denorm_mode
340 # GCN: GLOBAL_ATOMIC_FMIN_SADDR_RTN
342 # GCN-NEXT: S_DENORM_MODE
344 name: global_atomic_fmin_saddr_rtn_to_s_denorm_mode
347 %2:vgpr_32 = GLOBAL_ATOMIC_FMIN_SADDR_RTN undef %0:vgpr_32, undef %1:vgpr_32, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
348 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
351 # GCN-LABEL: name: global_atomic_fmin_x2_saddr_rtn_to_s_denorm_mode
352 # GCN: GLOBAL_ATOMIC_FMIN_X2_SADDR_RTN
354 # GCN-NEXT: S_DENORM_MODE
356 name: global_atomic_fmin_x2_saddr_rtn_to_s_denorm_mode
359 %2:vreg_64 = GLOBAL_ATOMIC_FMIN_X2_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
360 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
363 # GCN-LABEL: name: flat_fp_atomic_to_s_denorm_mode_waitcnt
364 # GCN: FLAT_ATOMIC_FMIN
365 # GCN-NEXT: S_WAITCNT
366 # GCN-NEXT: S_DENORM_MODE
368 name: flat_fp_atomic_to_s_denorm_mode_waitcnt
371 FLAT_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
373 S_DENORM_MODE 0, implicit-def $mode, implicit $mode
376 # GCN-LABEL: name: flat_fp_atomic_to_s_denorm_mode_valu
377 # GCN: FLAT_ATOMIC_FMIN
378 # GCN-NEXT: V_ADD_F32_e32
379 # GCN-NEXT: S_DENORM_MODE
381 name: flat_fp_atomic_to_s_denorm_mode_valu
384 FLAT_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `float addrspace(1)* undef`)
385 %2:vgpr_32 = V_ADD_F32_e32 undef %1:vgpr_32, undef %1:vgpr_32, implicit $mode, implicit $exec
386 S_DENORM_MODE 0, implicit-def $mode, implicit $mode