xref: /llvm-project/llvm/test/CodeGen/AMDGPU/fp-atomic-to-s_denormmode.mir (revision 9f8e7c3a01bc071447634eaa3e7b41ae072a87fe)
1# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX10 %s
2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN %s
3
4# GCN-LABEL: name: flat_atomic_fcmpswap_to_s_denorm_mode
5# GCN:      FLAT_ATOMIC_FCMPSWAP
6# GFX10-NEXT: S_NOP 2
7# GCN-NEXT: S_DENORM_MODE
8---
9name:            flat_atomic_fcmpswap_to_s_denorm_mode
10body:            |
11  bb.0:
12    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 `ptr addrspace(1) undef`)
13    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
14...
15
16# GCN-LABEL: name: flat_atomic_fcmpswap_x2_to_s_denorm_mode
17# GCN:      FLAT_ATOMIC_FCMPSWAP_X2
18# GFX10-NEXT: S_NOP 2
19# GCN-NEXT: S_DENORM_MODE
20---
21name:            flat_atomic_fcmpswap_x2_to_s_denorm_mode
22body:            |
23  bb.0:
24    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 `ptr addrspace(1) undef`)
25    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
26...
27
28# GCN-LABEL: name: flat_atomic_fmax_to_s_denorm_mode
29# GCN:      FLAT_ATOMIC_FMAX
30# GFX10-NEXT: S_NOP 2
31# GCN-NEXT: S_DENORM_MODE
32---
33name:            flat_atomic_fmax_to_s_denorm_mode
34body:            |
35  bb.0:
36    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 `ptr addrspace(1) undef`)
37    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
38...
39
40# GCN-LABEL: name: flat_atomic_fmax_x2_to_s_denorm_mode
41# GCN:      FLAT_ATOMIC_MAX_F64
42# GFX10-NEXT: S_NOP 2
43# GCN-NEXT: S_DENORM_MODE
44---
45name:            flat_atomic_fmax_x2_to_s_denorm_mode
46body:            |
47  bb.0:
48    FLAT_ATOMIC_MAX_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
49    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
50...
51
52# GCN-LABEL: name: flat_atomic_fmin_to_s_denorm_mode
53# GCN:      FLAT_ATOMIC_FMIN
54# GFX10-NEXT: S_NOP 2
55# GCN-NEXT: S_DENORM_MODE
56---
57name:            flat_atomic_fmin_to_s_denorm_mode
58body:            |
59  bb.0:
60    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 `ptr addrspace(1) undef`)
61    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
62...
63
64# GCN-LABEL: name: flat_atomic_fmin_x2_to_s_denorm_mode
65# GCN:      FLAT_ATOMIC_MIN_F64
66# GFX10-NEXT: S_NOP 2
67# GCN-NEXT: S_DENORM_MODE
68---
69name:            flat_atomic_fmin_x2_to_s_denorm_mode
70body:            |
71  bb.0:
72    FLAT_ATOMIC_MIN_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec, implicit $flat_scr :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
73    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
74...
75
76# GCN-LABEL: name: flat_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
77# GCN:      FLAT_ATOMIC_FCMPSWAP_X2_RTN
78# GFX10-NEXT: S_NOP 2
79# GCN-NEXT: S_DENORM_MODE
80---
81name:            flat_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
82body:            |
83  bb.0:
84    %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 `ptr addrspace(1) undef`)
85    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
86...
87
88# GCN-LABEL: name: flat_atomic_fmax_rtn_to_s_denorm_mode
89# GCN:      FLAT_ATOMIC_FMAX_RTN
90# GFX10-NEXT: S_NOP 2
91# GCN-NEXT: S_DENORM_MODE
92---
93name:            flat_atomic_fmax_rtn_to_s_denorm_mode
94body:            |
95  bb.0:
96    %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 `ptr addrspace(1) undef`)
97    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
98...
99
100# GCN-LABEL: name: flat_atomic_fmax_x2_rtn_to_s_denorm_mode
101# GCN:      FLAT_ATOMIC_MAX_F64_RTN
102# GFX10-NEXT: S_NOP 2
103# GCN-NEXT: S_DENORM_MODE
104---
105name:            flat_atomic_fmax_x2_rtn_to_s_denorm_mode
106body:            |
107  bb.0:
108    %2:vreg_64 = FLAT_ATOMIC_MAX_F64_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 `ptr addrspace(1) undef`)
109    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
110...
111
112# GCN-LABEL: name: flat_atomic_fmin_rtn_to_s_denorm_mode
113# GCN:      FLAT_ATOMIC_FMIN_RTN
114# GFX10-NEXT: S_NOP 2
115# GCN-NEXT: S_DENORM_MODE
116---
117name:            flat_atomic_fmin_rtn_to_s_denorm_mode
118body:            |
119  bb.0:
120    %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 `ptr addrspace(1) undef`)
121    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
122...
123
124# GCN-LABEL: name: flat_atomic_fmin_x2_rtn_to_s_denorm_mode
125# GCN:      FLAT_ATOMIC_MIN_F64_RTN
126# GFX10-NEXT: S_NOP 2
127# GCN-NEXT: S_DENORM_MODE
128---
129name:            flat_atomic_fmin_x2_rtn_to_s_denorm_mode
130body:            |
131  bb.0:
132    %2:vreg_64 = FLAT_ATOMIC_MIN_F64_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 `ptr addrspace(1) undef`)
133    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
134...
135
136# GCN-LABEL: name: flat_atomic_fcmpswap_rtn_to_s_denorm_mode
137# GCN:      FLAT_ATOMIC_FCMPSWAP_RTN
138# GFX10-NEXT: S_NOP 2
139# GCN-NEXT: S_DENORM_MODE
140---
141name:            flat_atomic_fcmpswap_rtn_to_s_denorm_mode
142body:            |
143  bb.0:
144    %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 `ptr addrspace(1) undef`)
145    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
146...
147
148# GCN-LABEL: name: global_atomic_fcmpswap_to_s_denorm_mode
149# GCN:      GLOBAL_ATOMIC_FCMPSWAP
150# GFX10-NEXT: S_NOP 2
151# GCN-NEXT: S_DENORM_MODE
152---
153name:            global_atomic_fcmpswap_to_s_denorm_mode
154body:            |
155  bb.0:
156    GLOBAL_ATOMIC_FCMPSWAP undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
157    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
158...
159
160# GCN-LABEL: name: global_atomic_fcmpswap_x2_to_s_denorm_mode
161# GCN:      GLOBAL_ATOMIC_FCMPSWAP_X2
162# GFX10-NEXT: S_NOP 2
163# GCN-NEXT: S_DENORM_MODE
164---
165name:            global_atomic_fcmpswap_x2_to_s_denorm_mode
166body:            |
167  bb.0:
168    GLOBAL_ATOMIC_FCMPSWAP_X2 undef %0:vreg_64, undef %1:vreg_128, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
169    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
170...
171
172# GCN-LABEL: name: global_atomic_fmax_to_s_denorm_mode
173# GCN:      GLOBAL_ATOMIC_FMAX
174# GFX10-NEXT: S_NOP 2
175# GCN-NEXT: S_DENORM_MODE
176---
177name:            global_atomic_fmax_to_s_denorm_mode
178body:            |
179  bb.0:
180    GLOBAL_ATOMIC_FMAX undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
181    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
182...
183
184# GCN-LABEL: name: global_atomic_fmax_x2_to_s_denorm_mode
185# GCN:      GLOBAL_ATOMIC_MAX_F64
186# GFX10-NEXT: S_NOP 2
187# GCN-NEXT: S_DENORM_MODE
188---
189name:            global_atomic_fmax_x2_to_s_denorm_mode
190body:            |
191  bb.0:
192    GLOBAL_ATOMIC_MAX_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
193    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
194...
195
196# GCN-LABEL: name: global_atomic_fmin_to_s_denorm_mode
197# GCN:      GLOBAL_ATOMIC_FMIN
198# GFX10-NEXT: S_NOP 2
199# GCN-NEXT: S_DENORM_MODE
200---
201name:            global_atomic_fmin_to_s_denorm_mode
202body:            |
203  bb.0:
204    GLOBAL_ATOMIC_FMIN undef %0:vreg_64, undef %1:vgpr_32, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
205    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
206...
207
208# GCN-LABEL: name: global_atomic_fmin_x2_to_s_denorm_mode
209# GCN:      GLOBAL_ATOMIC_MIN_F64
210# GFX10-NEXT: S_NOP 2
211# GCN-NEXT: S_DENORM_MODE
212---
213name:            global_atomic_fmin_x2_to_s_denorm_mode
214body:            |
215  bb.0:
216    GLOBAL_ATOMIC_MIN_F64 undef %0:vreg_64, undef %1:vreg_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
217    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
218...
219
220# GCN-LABEL: name: global_atomic_fcmpswap_rtn_to_s_denorm_mode
221# GCN:      GLOBAL_ATOMIC_FCMPSWAP_RTN
222# GFX10-NEXT: S_NOP 2
223# GCN-NEXT: S_DENORM_MODE
224---
225name:            global_atomic_fcmpswap_rtn_to_s_denorm_mode
226body:            |
227  bb.0:
228    %2:vgpr_32 = GLOBAL_ATOMIC_FCMPSWAP_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
229    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
230...
231
232# GCN-LABEL: name: global_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
233# GCN:      GLOBAL_ATOMIC_FCMPSWAP_X2_RTN
234# GFX10-NEXT: S_NOP 2
235# GCN-NEXT: S_DENORM_MODE
236---
237name:            global_atomic_fcmpswap_x2_rtn_to_s_denorm_mode
238body:            |
239  bb.0:
240    %2:vreg_64 = GLOBAL_ATOMIC_FCMPSWAP_X2_RTN undef %0:vreg_64, undef %1:vreg_128, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
241    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
242...
243
244# GCN-LABEL: name: global_atomic_fmax_rtn_to_s_denorm_mode
245# GCN:      GLOBAL_ATOMIC_FMAX_RTN
246# GFX10-NEXT: S_NOP 2
247# GCN-NEXT: S_DENORM_MODE
248---
249name:            global_atomic_fmax_rtn_to_s_denorm_mode
250body:            |
251  bb.0:
252    %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 `ptr addrspace(1) undef`)
253    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
254...
255
256# GCN-LABEL: name: global_atomic_fmax_x2_rtn_to_s_denorm_mode
257# GCN:      GLOBAL_ATOMIC_MAX_F64_RTN
258# GFX10-NEXT: S_NOP 2
259# GCN-NEXT: S_DENORM_MODE
260---
261name:            global_atomic_fmax_x2_rtn_to_s_denorm_mode
262body:            |
263  bb.0:
264    %2:vreg_64 = GLOBAL_ATOMIC_MAX_F64_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
265    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
266...
267
268# GCN-LABEL: name: global_atomic_fmin_rtn_to_s_denorm_mode
269# GCN:      GLOBAL_ATOMIC_FMIN_RTN
270# GFX10-NEXT: S_NOP 2
271# GCN-NEXT: S_DENORM_MODE
272---
273name:            global_atomic_fmin_rtn_to_s_denorm_mode
274body:            |
275  bb.0:
276    %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 `ptr addrspace(1) undef`)
277    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
278...
279
280# GCN-LABEL: name: global_atomic_fmin_x2_rtn_to_s_denorm_mode
281# GCN:      GLOBAL_ATOMIC_MIN_F64_RTN
282# GFX10-NEXT: S_NOP 2
283# GCN-NEXT: S_DENORM_MODE
284---
285name:            global_atomic_fmin_x2_rtn_to_s_denorm_mode
286body:            |
287  bb.0:
288    %2:vreg_64 = GLOBAL_ATOMIC_MIN_F64_RTN undef %0:vreg_64, undef %1:vreg_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
289    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
290...
291
292# GCN-LABEL: name: global_atomic_fcmpswap_saddr_to_s_denorm_mode
293# GCN:      GLOBAL_ATOMIC_FCMPSWAP_SADDR
294# GFX10-NEXT: S_NOP 2
295# GCN-NEXT: S_DENORM_MODE
296---
297name:            global_atomic_fcmpswap_saddr_to_s_denorm_mode
298body:            |
299  bb.0:
300    GLOBAL_ATOMIC_FCMPSWAP_SADDR undef %0:vgpr_32, undef %1:vreg_64, undef %3:sgpr_64, 0, 0, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
301    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
302...
303
304# GCN-LABEL: name: global_atomic_fcmpswap_x2_saddr_rtn_to_s_denorm_mode
305# GCN:      GLOBAL_ATOMIC_FCMPSWAP_X2_SADDR_RTN
306# GFX10-NEXT: S_NOP 2
307# GCN-NEXT: S_DENORM_MODE
308---
309name:            global_atomic_fcmpswap_x2_saddr_rtn_to_s_denorm_mode
310body:            |
311  bb.0:
312    %2:vreg_64 = GLOBAL_ATOMIC_FCMPSWAP_X2_SADDR_RTN undef %0:vgpr_32, undef %1:vreg_128, undef %3:sgpr_64, 0, 1, implicit $exec :: (volatile load store seq_cst seq_cst (s32) on `ptr addrspace(1) undef`)
313    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
314...
315
316# GCN-LABEL: name: global_atomic_fmax_saddr_rtn_to_s_denorm_mode
317# GCN:      GLOBAL_ATOMIC_FMAX_SADDR_RTN
318# GFX10-NEXT: S_NOP 2
319# GCN-NEXT: S_DENORM_MODE
320---
321name:            global_atomic_fmax_saddr_rtn_to_s_denorm_mode
322body:            |
323  bb.0:
324    %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 `ptr addrspace(1) undef`)
325    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
326...
327
328# GCN-LABEL: name: global_atomic_fmax_x2_saddr_rtn_to_s_denorm_mode
329# GCN:      GLOBAL_ATOMIC_MAX_F64_SADDR_RTN
330# GFX10-NEXT: S_NOP 2
331# GCN-NEXT: S_DENORM_MODE
332---
333name:            global_atomic_fmax_x2_saddr_rtn_to_s_denorm_mode
334body:            |
335  bb.0:
336    %2:vreg_64 = GLOBAL_ATOMIC_MAX_F64_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 `ptr addrspace(1) undef`)
337    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
338...
339
340# GCN-LABEL: name: global_atomic_fmin_saddr_rtn_to_s_denorm_mode
341# GCN:      GLOBAL_ATOMIC_FMIN_SADDR_RTN
342# GFX10-NEXT: S_NOP 2
343# GCN-NEXT: S_DENORM_MODE
344---
345name:            global_atomic_fmin_saddr_rtn_to_s_denorm_mode
346body:            |
347  bb.0:
348    %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 `ptr addrspace(1) undef`)
349    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
350...
351
352# GCN-LABEL: name: global_atomic_fmin_x2_saddr_rtn_to_s_denorm_mode
353# GCN:      GLOBAL_ATOMIC_MIN_F64_SADDR_RTN
354# GFX10-NEXT: S_NOP 2
355# GCN-NEXT: S_DENORM_MODE
356---
357name:            global_atomic_fmin_x2_saddr_rtn_to_s_denorm_mode
358body:            |
359  bb.0:
360    %2:vreg_64 = GLOBAL_ATOMIC_MIN_F64_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 `ptr addrspace(1) undef`)
361    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
362...
363
364# GCN-LABEL: name: flat_fp_atomic_to_s_denorm_mode_waitcnt
365# GCN:      FLAT_ATOMIC_FMIN
366# GCN-NEXT: S_WAITCNT
367# GCN-NEXT: S_DENORM_MODE
368---
369name:            flat_fp_atomic_to_s_denorm_mode_waitcnt
370body:            |
371  bb.0:
372    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 `ptr addrspace(1) undef`)
373    S_WAITCNT 0
374    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
375...
376
377# GCN-LABEL: name: flat_fp_atomic_to_s_denorm_mode_valu
378# GCN:      FLAT_ATOMIC_FMIN
379# GCN-NEXT: V_ADD_F32_e32
380# GCN-NEXT: S_DENORM_MODE
381---
382name:            flat_fp_atomic_to_s_denorm_mode_valu
383body:            |
384  bb.0:
385    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 `ptr addrspace(1) undef`)
386    %2:vgpr_32 = V_ADD_F32_e32 undef %1:vgpr_32, undef %1:vgpr_32, implicit $mode, implicit $exec
387    S_DENORM_MODE 0, implicit-def $mode, implicit $mode
388...
389