xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir (revision ec66c4af09263e68d800971906e60afc27d54a06)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -disable-gisel-legality-check -o - %s | FileCheck -check-prefix=GFX8 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -mattr=+real-true16 -verify-machineinstrs -o - %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s
6# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -mattr=-real-true16 -verify-machineinstrs -o - %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s
7
8---
9
10name:            fcanonicalize_f16_denorm
11legalized:       true
12regBankSelected: true
13machineFunctionInfo:
14  mode:
15    fp64-fp16-input-denormals: true
16    fp64-fp16-output-denormals: true
17
18body: |
19  bb.0:
20    liveins: $vgpr0
21    ; GFX8-LABEL: name: fcanonicalize_f16_denorm
22    ; GFX8: liveins: $vgpr0
23    ; GFX8-NEXT: {{  $}}
24    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
25    ; GFX8-NEXT: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
26    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]]
27    ;
28    ; GFX9-LABEL: name: fcanonicalize_f16_denorm
29    ; GFX9: liveins: $vgpr0
30    ; GFX9-NEXT: {{  $}}
31    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
32    ; GFX9-NEXT: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
33    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]]
34    ;
35    ; GFX10-LABEL: name: fcanonicalize_f16_denorm
36    ; GFX10: liveins: $vgpr0
37    ; GFX10-NEXT: {{  $}}
38    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
39    ; GFX10-NEXT: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
40    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]]
41    ;
42    ; GFX11-TRUE16-LABEL: name: fcanonicalize_f16_denorm
43    ; GFX11-TRUE16: liveins: $vgpr0
44    ; GFX11-TRUE16-NEXT: {{  $}}
45    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
46    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16
47    ; GFX11-TRUE16-NEXT: [[V_MAX_F16_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_MAX_F16_t16_e64 0, [[COPY1]], 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
48    ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_t16_e64_]]
49    ;
50    ; GFX11-FAKE16-LABEL: name: fcanonicalize_f16_denorm
51    ; GFX11-FAKE16: liveins: $vgpr0
52    ; GFX11-FAKE16-NEXT: {{  $}}
53    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
54    ; GFX11-FAKE16-NEXT: [[V_MAX_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_fake16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
55    ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_fake16_e64_]]
56    %0:vgpr(s32) = COPY $vgpr0
57    %1:vgpr(s16) = G_TRUNC %0
58    %2:vgpr(s16) = G_FCANONICALIZE %1
59    S_ENDPGM 0, implicit %2
60...
61
62---
63
64name:            fcanonicalize_f16_flush
65legalized:       true
66regBankSelected: true
67machineFunctionInfo:
68  mode:
69    fp64-fp16-input-denormals: false
70    fp64-fp16-output-denormals: false
71
72body: |
73  bb.0:
74    liveins: $vgpr0
75    ; GFX8-LABEL: name: fcanonicalize_f16_flush
76    ; GFX8: liveins: $vgpr0
77    ; GFX8-NEXT: {{  $}}
78    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
79    ; GFX8-NEXT: [[V_MUL_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F16_e64 0, 15360, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
80    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F16_e64_]]
81    ;
82    ; GFX9-LABEL: name: fcanonicalize_f16_flush
83    ; GFX9: liveins: $vgpr0
84    ; GFX9-NEXT: {{  $}}
85    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
86    ; GFX9-NEXT: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
87    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]]
88    ;
89    ; GFX10-LABEL: name: fcanonicalize_f16_flush
90    ; GFX10: liveins: $vgpr0
91    ; GFX10-NEXT: {{  $}}
92    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93    ; GFX10-NEXT: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
94    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]]
95    ;
96    ; GFX11-TRUE16-LABEL: name: fcanonicalize_f16_flush
97    ; GFX11-TRUE16: liveins: $vgpr0
98    ; GFX11-TRUE16-NEXT: {{  $}}
99    ; GFX11-TRUE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
100    ; GFX11-TRUE16-NEXT: [[COPY1:%[0-9]+]]:vgpr_16 = COPY [[COPY]].lo16
101    ; GFX11-TRUE16-NEXT: [[V_MAX_F16_t16_e64_:%[0-9]+]]:vgpr_16 = nofpexcept V_MAX_F16_t16_e64 0, [[COPY1]], 0, [[COPY1]], 0, 0, 0, implicit $mode, implicit $exec
102    ; GFX11-TRUE16-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_t16_e64_]]
103    ;
104    ; GFX11-FAKE16-LABEL: name: fcanonicalize_f16_flush
105    ; GFX11-FAKE16: liveins: $vgpr0
106    ; GFX11-FAKE16-NEXT: {{  $}}
107    ; GFX11-FAKE16-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
108    ; GFX11-FAKE16-NEXT: [[V_MAX_F16_fake16_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F16_fake16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
109    ; GFX11-FAKE16-NEXT: S_ENDPGM 0, implicit [[V_MAX_F16_fake16_e64_]]
110    %0:vgpr(s32) = COPY $vgpr0
111    %1:vgpr(s16) = G_TRUNC %0
112    %2:vgpr(s16) = G_FCANONICALIZE %1
113    S_ENDPGM 0, implicit %2
114...
115
116---
117
118name:            fcanonicalize_f32_denorm
119legalized:       true
120regBankSelected: true
121machineFunctionInfo:
122  mode:
123    fp32-input-denormals: true
124    fp32-output-denormals: true
125
126body: |
127  bb.0:
128    liveins: $vgpr0
129
130    ; GFX8-LABEL: name: fcanonicalize_f32_denorm
131    ; GFX8: liveins: $vgpr0
132    ; GFX8-NEXT: {{  $}}
133    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
134    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
135    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
136    ;
137    ; GFX9-LABEL: name: fcanonicalize_f32_denorm
138    ; GFX9: liveins: $vgpr0
139    ; GFX9-NEXT: {{  $}}
140    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
141    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
142    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
143    ;
144    ; GFX10-LABEL: name: fcanonicalize_f32_denorm
145    ; GFX10: liveins: $vgpr0
146    ; GFX10-NEXT: {{  $}}
147    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
148    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
149    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
150    ;
151    ; GFX11-LABEL: name: fcanonicalize_f32_denorm
152    ; GFX11: liveins: $vgpr0
153    ; GFX11-NEXT: {{  $}}
154    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
155    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
156    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
157    %0:vgpr(s32) = COPY $vgpr0
158    %1:vgpr(s32) = G_FCANONICALIZE %0
159    S_ENDPGM 0, implicit %1
160...
161
162---
163
164name:            fcanonicalize_f32_flush
165legalized:       true
166regBankSelected: true
167machineFunctionInfo:
168  mode:
169    fp32-input-denormals: false
170    fp32-output-denormals: false
171
172body: |
173  bb.0:
174    liveins: $vgpr0
175
176    ; GFX8-LABEL: name: fcanonicalize_f32_flush
177    ; GFX8: liveins: $vgpr0
178    ; GFX8-NEXT: {{  $}}
179    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
180    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
181    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
182    ;
183    ; GFX9-LABEL: name: fcanonicalize_f32_flush
184    ; GFX9: liveins: $vgpr0
185    ; GFX9-NEXT: {{  $}}
186    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
187    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
188    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
189    ;
190    ; GFX10-LABEL: name: fcanonicalize_f32_flush
191    ; GFX10: liveins: $vgpr0
192    ; GFX10-NEXT: {{  $}}
193    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
194    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
195    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
196    ;
197    ; GFX11-LABEL: name: fcanonicalize_f32_flush
198    ; GFX11: liveins: $vgpr0
199    ; GFX11-NEXT: {{  $}}
200    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
201    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
202    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
203    %0:vgpr(s32) = COPY $vgpr0
204    %1:vgpr(s32) = G_FCANONICALIZE %0
205    S_ENDPGM 0, implicit %1
206...
207
208---
209
210name:            fcanonicalize_v2f16_denorm
211legalized:       true
212regBankSelected: true
213machineFunctionInfo:
214  mode:
215    fp64-fp16-input-denormals: true
216    fp64-fp16-output-denormals: true
217
218body: |
219  bb.0:
220    liveins: $vgpr0
221
222    ; GFX8-LABEL: name: fcanonicalize_v2f16_denorm
223    ; GFX8: liveins: $vgpr0
224    ; GFX8-NEXT: {{  $}}
225    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
226    ; GFX8-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
227    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
228    ;
229    ; GFX9-LABEL: name: fcanonicalize_v2f16_denorm
230    ; GFX9: liveins: $vgpr0
231    ; GFX9-NEXT: {{  $}}
232    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
233    ; GFX9-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
234    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
235    ;
236    ; GFX10-LABEL: name: fcanonicalize_v2f16_denorm
237    ; GFX10: liveins: $vgpr0
238    ; GFX10-NEXT: {{  $}}
239    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
240    ; GFX10-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
241    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
242    ;
243    ; GFX11-LABEL: name: fcanonicalize_v2f16_denorm
244    ; GFX11: liveins: $vgpr0
245    ; GFX11-NEXT: {{  $}}
246    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
247    ; GFX11-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
248    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
249    %0:vgpr(<2 x s16>) = COPY $vgpr0
250    %1:vgpr(<2 x s16>) = G_FCANONICALIZE %0
251    S_ENDPGM 0, implicit %1
252...
253
254---
255
256name:            fcanonicalize_v2f16_flush
257legalized:       true
258regBankSelected: true
259machineFunctionInfo:
260  mode:
261    fp64-fp16-input-denormals: false
262    fp64-fp16-output-denormals: false
263
264body: |
265  bb.0:
266    liveins: $vgpr0
267
268    ; GFX8-LABEL: name: fcanonicalize_v2f16_flush
269    ; GFX8: liveins: $vgpr0
270    ; GFX8-NEXT: {{  $}}
271    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
272    ; GFX8-NEXT: [[V_PK_MUL_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MUL_F16 0, 15360, 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
273    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_PK_MUL_F16_]]
274    ;
275    ; GFX9-LABEL: name: fcanonicalize_v2f16_flush
276    ; GFX9: liveins: $vgpr0
277    ; GFX9-NEXT: {{  $}}
278    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
279    ; GFX9-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
280    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
281    ;
282    ; GFX10-LABEL: name: fcanonicalize_v2f16_flush
283    ; GFX10: liveins: $vgpr0
284    ; GFX10-NEXT: {{  $}}
285    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
286    ; GFX10-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
287    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
288    ;
289    ; GFX11-LABEL: name: fcanonicalize_v2f16_flush
290    ; GFX11: liveins: $vgpr0
291    ; GFX11-NEXT: {{  $}}
292    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
293    ; GFX11-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
294    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_PK_MAX_F16_]]
295    %0:vgpr(<2 x s16>) = COPY $vgpr0
296    %1:vgpr(<2 x s16>) = G_FCANONICALIZE %0
297    S_ENDPGM 0, implicit %1
298...
299
300---
301
302name:            fcanonicalize_f64_denorm
303legalized:       true
304regBankSelected: true
305machineFunctionInfo:
306  mode:
307    fp64-fp16-input-denormals: true
308    fp64-fp16-output-denormals: true
309
310body: |
311  bb.0:
312    liveins: $vgpr0_vgpr1
313
314    ; GFX8-LABEL: name: fcanonicalize_f64_denorm
315    ; GFX8: liveins: $vgpr0_vgpr1
316    ; GFX8-NEXT: {{  $}}
317    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
318    ; GFX8-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
319    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
320    ;
321    ; GFX9-LABEL: name: fcanonicalize_f64_denorm
322    ; GFX9: liveins: $vgpr0_vgpr1
323    ; GFX9-NEXT: {{  $}}
324    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
325    ; GFX9-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
326    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
327    ;
328    ; GFX10-LABEL: name: fcanonicalize_f64_denorm
329    ; GFX10: liveins: $vgpr0_vgpr1
330    ; GFX10-NEXT: {{  $}}
331    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
332    ; GFX10-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
333    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
334    ;
335    ; GFX11-LABEL: name: fcanonicalize_f64_denorm
336    ; GFX11: liveins: $vgpr0_vgpr1
337    ; GFX11-NEXT: {{  $}}
338    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
339    ; GFX11-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
340    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
341    %0:vgpr(s64) = COPY $vgpr0_vgpr1
342    %1:vgpr(s64) = G_FCANONICALIZE %0
343    S_ENDPGM 0, implicit %1
344...
345
346---
347
348name:            fcanonicalize_f64_flush
349legalized:       true
350regBankSelected: true
351machineFunctionInfo:
352  mode:
353    fp64-fp16-input-denormals: false
354    fp64-fp16-output-denormals: false
355
356body: |
357  bb.0:
358    liveins: $vgpr0_vgpr1
359
360    ; GFX8-LABEL: name: fcanonicalize_f64_flush
361    ; GFX8: liveins: $vgpr0_vgpr1
362    ; GFX8-NEXT: {{  $}}
363    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
364    ; GFX8-NEXT: [[V_MUL_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MUL_F64_e64 0, 4607182418800017408, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
365    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F64_e64_]]
366    ;
367    ; GFX9-LABEL: name: fcanonicalize_f64_flush
368    ; GFX9: liveins: $vgpr0_vgpr1
369    ; GFX9-NEXT: {{  $}}
370    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
371    ; GFX9-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
372    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
373    ;
374    ; GFX10-LABEL: name: fcanonicalize_f64_flush
375    ; GFX10: liveins: $vgpr0_vgpr1
376    ; GFX10-NEXT: {{  $}}
377    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
378    ; GFX10-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
379    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
380    ;
381    ; GFX11-LABEL: name: fcanonicalize_f64_flush
382    ; GFX11: liveins: $vgpr0_vgpr1
383    ; GFX11-NEXT: {{  $}}
384    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
385    ; GFX11-NEXT: [[V_MAX_F64_e64_:%[0-9]+]]:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
386    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F64_e64_]]
387    %0:vgpr(s64) = COPY $vgpr0_vgpr1
388    %1:vgpr(s64) = G_FCANONICALIZE %0
389    S_ENDPGM 0, implicit %1
390...
391
392---
393
394name:            fcanonicalize_fabs_f32_denorm
395legalized:       true
396regBankSelected: true
397machineFunctionInfo:
398  mode:
399    fp32-input-denormals: true
400    fp32-output-denormals: true
401
402body: |
403  bb.0:
404    liveins: $vgpr0
405    ; GFX8-LABEL: name: fcanonicalize_fabs_f32_denorm
406    ; GFX8: liveins: $vgpr0
407    ; GFX8-NEXT: {{  $}}
408    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
409    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
410    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
411    ;
412    ; GFX9-LABEL: name: fcanonicalize_fabs_f32_denorm
413    ; GFX9: liveins: $vgpr0
414    ; GFX9-NEXT: {{  $}}
415    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
416    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
417    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
418    ;
419    ; GFX10-LABEL: name: fcanonicalize_fabs_f32_denorm
420    ; GFX10: liveins: $vgpr0
421    ; GFX10-NEXT: {{  $}}
422    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
423    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
424    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
425    ;
426    ; GFX11-LABEL: name: fcanonicalize_fabs_f32_denorm
427    ; GFX11: liveins: $vgpr0
428    ; GFX11-NEXT: {{  $}}
429    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
430    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
431    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
432    %0:vgpr(s32) = COPY $vgpr0
433    %1:vgpr(s32) = G_FABS %0
434    %2:vgpr(s32) = G_FCANONICALIZE %1
435    S_ENDPGM 0, implicit %2
436...
437
438
439---
440
441name:            fcanonicalize_fabs_f32_flush
442legalized:       true
443regBankSelected: true
444machineFunctionInfo:
445  mode:
446    fp32-input-denormals: false
447    fp32-output-denormals: false
448
449body: |
450  bb.0:
451    liveins: $vgpr0
452    ; GFX8-LABEL: name: fcanonicalize_fabs_f32_flush
453    ; GFX8: liveins: $vgpr0
454    ; GFX8-NEXT: {{  $}}
455    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
456    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
457    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
458    ;
459    ; GFX9-LABEL: name: fcanonicalize_fabs_f32_flush
460    ; GFX9: liveins: $vgpr0
461    ; GFX9-NEXT: {{  $}}
462    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
463    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
464    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
465    ;
466    ; GFX10-LABEL: name: fcanonicalize_fabs_f32_flush
467    ; GFX10: liveins: $vgpr0
468    ; GFX10-NEXT: {{  $}}
469    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
470    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
471    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
472    ;
473    ; GFX11-LABEL: name: fcanonicalize_fabs_f32_flush
474    ; GFX11: liveins: $vgpr0
475    ; GFX11-NEXT: {{  $}}
476    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
477    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
478    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
479    %0:vgpr(s32) = COPY $vgpr0
480    %1:vgpr(s32) = G_FABS %0
481    %2:vgpr(s32) = G_FCANONICALIZE %1
482    S_ENDPGM 0, implicit %2
483...
484
485---
486
487name:            fcanonicalize_fneg_f32_denorm
488legalized:       true
489regBankSelected: true
490machineFunctionInfo:
491  mode:
492    fp32-input-denormals: true
493    fp32-output-denormals: true
494
495body: |
496  bb.0:
497    liveins: $vgpr0
498    ; GFX8-LABEL: name: fcanonicalize_fneg_f32_denorm
499    ; GFX8: liveins: $vgpr0
500    ; GFX8-NEXT: {{  $}}
501    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
502    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
503    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
504    ;
505    ; GFX9-LABEL: name: fcanonicalize_fneg_f32_denorm
506    ; GFX9: liveins: $vgpr0
507    ; GFX9-NEXT: {{  $}}
508    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
509    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
510    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
511    ;
512    ; GFX10-LABEL: name: fcanonicalize_fneg_f32_denorm
513    ; GFX10: liveins: $vgpr0
514    ; GFX10-NEXT: {{  $}}
515    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
516    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
517    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
518    ;
519    ; GFX11-LABEL: name: fcanonicalize_fneg_f32_denorm
520    ; GFX11: liveins: $vgpr0
521    ; GFX11-NEXT: {{  $}}
522    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
523    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
524    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
525    %0:vgpr(s32) = COPY $vgpr0
526    %1:vgpr(s32) = G_FNEG %0
527    %2:vgpr(s32) = G_FCANONICALIZE %1
528    S_ENDPGM 0, implicit %2
529...
530
531---
532
533name:            fcanonicalize_fneg_f32_flush
534legalized:       true
535regBankSelected: true
536machineFunctionInfo:
537  mode:
538    fp32-input-denormals: false
539    fp32-output-denormals: false
540
541body: |
542  bb.0:
543    liveins: $vgpr0
544    ; GFX8-LABEL: name: fcanonicalize_fneg_f32_flush
545    ; GFX8: liveins: $vgpr0
546    ; GFX8-NEXT: {{  $}}
547    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
548    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
549    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
550    ;
551    ; GFX9-LABEL: name: fcanonicalize_fneg_f32_flush
552    ; GFX9: liveins: $vgpr0
553    ; GFX9-NEXT: {{  $}}
554    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
555    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
556    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
557    ;
558    ; GFX10-LABEL: name: fcanonicalize_fneg_f32_flush
559    ; GFX10: liveins: $vgpr0
560    ; GFX10-NEXT: {{  $}}
561    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
562    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
563    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
564    ;
565    ; GFX11-LABEL: name: fcanonicalize_fneg_f32_flush
566    ; GFX11: liveins: $vgpr0
567    ; GFX11-NEXT: {{  $}}
568    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
569    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
570    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
571    %0:vgpr(s32) = COPY $vgpr0
572    %1:vgpr(s32) = G_FNEG %0
573    %2:vgpr(s32) = G_FCANONICALIZE %1
574    S_ENDPGM 0, implicit %2
575...
576
577---
578
579name:            fcanonicalize_fneg_fabs_f32_denorm
580legalized:       true
581regBankSelected: true
582machineFunctionInfo:
583  mode:
584    fp32-input-denormals: true
585    fp32-output-denormals: true
586
587body: |
588  bb.0:
589    liveins: $vgpr0
590    ; GFX8-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
591    ; GFX8: liveins: $vgpr0
592    ; GFX8-NEXT: {{  $}}
593    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
594    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
595    ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
596    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
597    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
598    ;
599    ; GFX9-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
600    ; GFX9: liveins: $vgpr0
601    ; GFX9-NEXT: {{  $}}
602    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
603    ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
604    ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
605    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
606    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
607    ;
608    ; GFX10-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
609    ; GFX10: liveins: $vgpr0
610    ; GFX10-NEXT: {{  $}}
611    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
612    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
613    ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
614    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
615    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
616    ;
617    ; GFX11-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
618    ; GFX11: liveins: $vgpr0
619    ; GFX11-NEXT: {{  $}}
620    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
621    ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
622    ; GFX11-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
623    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
624    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
625    %0:vgpr(s32) = COPY $vgpr0
626    %1:vgpr(s32) = G_FNEG %0
627    %2:vgpr(s32) = G_FABS %1
628    %3:vgpr(s32) = G_FCANONICALIZE %2
629    S_ENDPGM 0, implicit %3
630...
631
632---
633
634name:            fcanonicalize_fneg_fabs_f32_flush
635legalized:       true
636regBankSelected: true
637machineFunctionInfo:
638  mode:
639    fp32-input-denormals: false
640    fp32-output-denormals: false
641
642body: |
643  bb.0:
644    liveins: $vgpr0
645    ; GFX8-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
646    ; GFX8: liveins: $vgpr0
647    ; GFX8-NEXT: {{  $}}
648    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
649    ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
650    ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
651    ; GFX8-NEXT: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
652    ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
653    ;
654    ; GFX9-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
655    ; GFX9: liveins: $vgpr0
656    ; GFX9-NEXT: {{  $}}
657    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
658    ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
659    ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
660    ; GFX9-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
661    ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
662    ;
663    ; GFX10-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
664    ; GFX10: liveins: $vgpr0
665    ; GFX10-NEXT: {{  $}}
666    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
667    ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
668    ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
669    ; GFX10-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
670    ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
671    ;
672    ; GFX11-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
673    ; GFX11: liveins: $vgpr0
674    ; GFX11-NEXT: {{  $}}
675    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
676    ; GFX11-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
677    ; GFX11-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
678    ; GFX11-NEXT: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
679    ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
680    %0:vgpr(s32) = COPY $vgpr0
681    %1:vgpr(s32) = G_FNEG %0
682    %2:vgpr(s32) = G_FABS %1
683    %3:vgpr(s32) = G_FCANONICALIZE %2
684    S_ENDPGM 0, implicit %3
685...
686