[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-fcanonicalize.mir
blob71613d9049382ff8632234f78c7c73aecad88236
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=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 -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
4 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
6 ---
8 name:            fcanonicalize_f16_denorm
9 legalized:       true
10 regBankSelected: true
11 machineFunctionInfo:
12   mode:
13     fp64-fp16-input-denormals: true
14     fp64-fp16-output-denormals: true
16 body: |
17   bb.0:
18     liveins: $vgpr0
19     ; GFX8-LABEL: name: fcanonicalize_f16_denorm
20     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
21     ; GFX8-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
22     ; GFX8-NEXT: S_ENDPGM 0, implicit %2
23     ; GFX9-LABEL: name: fcanonicalize_f16_denorm
24     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
25     ; GFX9-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
26     ; GFX9-NEXT: S_ENDPGM 0, implicit %2
27     ; GFX10-LABEL: name: fcanonicalize_f16_denorm
28     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
29     ; GFX10-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
30     ; GFX10-NEXT: S_ENDPGM 0, implicit %2
31     %0:vgpr(s32) = COPY $vgpr0
32     %1:vgpr(s16) = G_TRUNC %0
33     %2:vgpr(s16) = G_FCANONICALIZE %1
34     S_ENDPGM 0, implicit %2
35 ...
37 ---
39 name:            fcanonicalize_f16_flush
40 legalized:       true
41 regBankSelected: true
42 machineFunctionInfo:
43   mode:
44     fp64-fp16-input-denormals: false
45     fp64-fp16-output-denormals: false
47 body: |
48   bb.0:
49     liveins: $vgpr0
50     ; GFX8-LABEL: name: fcanonicalize_f16_flush
51     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
52     ; GFX8-NEXT: %2:vgpr_32 = nofpexcept V_MUL_F16_e64 0, 15360, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
53     ; GFX8-NEXT: S_ENDPGM 0, implicit %2
54     ; GFX9-LABEL: name: fcanonicalize_f16_flush
55     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
56     ; GFX9-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
57     ; GFX9-NEXT: S_ENDPGM 0, implicit %2
58     ; GFX10-LABEL: name: fcanonicalize_f16_flush
59     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
60     ; GFX10-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
61     ; GFX10-NEXT: S_ENDPGM 0, implicit %2
62     %0:vgpr(s32) = COPY $vgpr0
63     %1:vgpr(s16) = G_TRUNC %0
64     %2:vgpr(s16) = G_FCANONICALIZE %1
65     S_ENDPGM 0, implicit %2
66 ...
68 ---
70 name:            fcanonicalize_f32_denorm
71 legalized:       true
72 regBankSelected: true
73 machineFunctionInfo:
74   mode:
75     fp32-input-denormals: true
76     fp32-output-denormals: true
78 body: |
79   bb.0:
80     liveins: $vgpr0
82     ; GFX8-LABEL: name: fcanonicalize_f32_denorm
83     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
84     ; GFX8-NEXT: %1:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
85     ; GFX8-NEXT: S_ENDPGM 0, implicit %1
86     ; GFX9-LABEL: name: fcanonicalize_f32_denorm
87     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
88     ; GFX9-NEXT: %1:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
89     ; GFX9-NEXT: S_ENDPGM 0, implicit %1
90     ; GFX10-LABEL: name: fcanonicalize_f32_denorm
91     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
92     ; GFX10-NEXT: %1:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
93     ; GFX10-NEXT: S_ENDPGM 0, implicit %1
94     %0:vgpr(s32) = COPY $vgpr0
95     %1:vgpr(s32) = G_FCANONICALIZE %0
96     S_ENDPGM 0, implicit %1
97 ...
99 ---
101 name:            fcanonicalize_f32_flush
102 legalized:       true
103 regBankSelected: true
104 machineFunctionInfo:
105   mode:
106     fp32-input-denormals: false
107     fp32-output-denormals: false
109 body: |
110   bb.0:
111     liveins: $vgpr0
113     ; GFX8-LABEL: name: fcanonicalize_f32_flush
114     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
115     ; GFX8-NEXT: %1:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
116     ; GFX8-NEXT: S_ENDPGM 0, implicit %1
117     ; GFX9-LABEL: name: fcanonicalize_f32_flush
118     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
119     ; GFX9-NEXT: %1:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
120     ; GFX9-NEXT: S_ENDPGM 0, implicit %1
121     ; GFX10-LABEL: name: fcanonicalize_f32_flush
122     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
123     ; GFX10-NEXT: %1:vgpr_32 = nofpexcept V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
124     ; GFX10-NEXT: S_ENDPGM 0, implicit %1
125     %0:vgpr(s32) = COPY $vgpr0
126     %1:vgpr(s32) = G_FCANONICALIZE %0
127     S_ENDPGM 0, implicit %1
132 name:            fcanonicalize_v2f16_denorm
133 legalized:       true
134 regBankSelected: true
135 machineFunctionInfo:
136   mode:
137     fp64-fp16-input-denormals: true
138     fp64-fp16-output-denormals: true
140 body: |
141   bb.0:
142     liveins: $vgpr0
144     ; GFX8-LABEL: name: fcanonicalize_v2f16_denorm
145     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
146     ; GFX8-NEXT: %1:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
147     ; GFX8-NEXT: S_ENDPGM 0, implicit %1
148     ; GFX9-LABEL: name: fcanonicalize_v2f16_denorm
149     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
150     ; GFX9-NEXT: %1:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
151     ; GFX9-NEXT: S_ENDPGM 0, implicit %1
152     ; GFX10-LABEL: name: fcanonicalize_v2f16_denorm
153     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
154     ; GFX10-NEXT: %1:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
155     ; GFX10-NEXT: S_ENDPGM 0, implicit %1
156     %0:vgpr(<2 x s16>) = COPY $vgpr0
157     %1:vgpr(<2 x s16>) = G_FCANONICALIZE %0
158     S_ENDPGM 0, implicit %1
163 name:            fcanonicalize_v2f16_flush
164 legalized:       true
165 regBankSelected: true
166 machineFunctionInfo:
167   mode:
168     fp64-fp16-input-denormals: false
169     fp64-fp16-output-denormals: false
171 body: |
172   bb.0:
173     liveins: $vgpr0
175     ; GFX8-LABEL: name: fcanonicalize_v2f16_flush
176     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
177     ; GFX8-NEXT: %1:vgpr_32 = nofpexcept V_PK_MUL_F16 0, 15360, 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
178     ; GFX8-NEXT: S_ENDPGM 0, implicit %1
179     ; GFX9-LABEL: name: fcanonicalize_v2f16_flush
180     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
181     ; GFX9-NEXT: %1:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
182     ; GFX9-NEXT: S_ENDPGM 0, implicit %1
183     ; GFX10-LABEL: name: fcanonicalize_v2f16_flush
184     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
185     ; GFX10-NEXT: %1:vgpr_32 = nofpexcept V_PK_MAX_F16 8, [[COPY]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec
186     ; GFX10-NEXT: S_ENDPGM 0, implicit %1
187     %0:vgpr(<2 x s16>) = COPY $vgpr0
188     %1:vgpr(<2 x s16>) = G_FCANONICALIZE %0
189     S_ENDPGM 0, implicit %1
194 name:            fcanonicalize_f64_denorm
195 legalized:       true
196 regBankSelected: true
197 machineFunctionInfo:
198   mode:
199     fp64-fp16-input-denormals: true
200     fp64-fp16-output-denormals: true
202 body: |
203   bb.0:
204     liveins: $vgpr0_vgpr1
206     ; GFX8-LABEL: name: fcanonicalize_f64_denorm
207     ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
208     ; GFX8-NEXT: %1:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
209     ; GFX8-NEXT: S_ENDPGM 0, implicit %1
210     ; GFX9-LABEL: name: fcanonicalize_f64_denorm
211     ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
212     ; GFX9-NEXT: %1:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
213     ; GFX9-NEXT: S_ENDPGM 0, implicit %1
214     ; GFX10-LABEL: name: fcanonicalize_f64_denorm
215     ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
216     ; GFX10-NEXT: %1:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
217     ; GFX10-NEXT: S_ENDPGM 0, implicit %1
218     %0:vgpr(s64) = COPY $vgpr0_vgpr1
219     %1:vgpr(s64) = G_FCANONICALIZE %0
220     S_ENDPGM 0, implicit %1
225 name:            fcanonicalize_f64_flush
226 legalized:       true
227 regBankSelected: true
228 machineFunctionInfo:
229   mode:
230     fp64-fp16-input-denormals: false
231     fp64-fp16-output-denormals: false
233 body: |
234   bb.0:
235     liveins: $vgpr0_vgpr1
237     ; GFX8-LABEL: name: fcanonicalize_f64_flush
238     ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
239     ; GFX8-NEXT: %1:vreg_64 = nofpexcept V_MUL_F64_e64 0, 4607182418800017408, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
240     ; GFX8-NEXT: S_ENDPGM 0, implicit %1
241     ; GFX9-LABEL: name: fcanonicalize_f64_flush
242     ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
243     ; GFX9-NEXT: %1:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
244     ; GFX9-NEXT: S_ENDPGM 0, implicit %1
245     ; GFX10-LABEL: name: fcanonicalize_f64_flush
246     ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
247     ; GFX10-NEXT: %1:vreg_64 = nofpexcept V_MAX_F64_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
248     ; GFX10-NEXT: S_ENDPGM 0, implicit %1
249     %0:vgpr(s64) = COPY $vgpr0_vgpr1
250     %1:vgpr(s64) = G_FCANONICALIZE %0
251     S_ENDPGM 0, implicit %1
256 name:            fcanonicalize_fabs_f32_denorm
257 legalized:       true
258 regBankSelected: true
259 machineFunctionInfo:
260   mode:
261     fp32-input-denormals: true
262     fp32-output-denormals: true
264 body: |
265   bb.0:
266     liveins: $vgpr0
267     ; GFX8-LABEL: name: fcanonicalize_fabs_f32_denorm
268     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
269     ; GFX8-NEXT: %2:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
270     ; GFX8-NEXT: S_ENDPGM 0, implicit %2
271     ; GFX9-LABEL: name: fcanonicalize_fabs_f32_denorm
272     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
273     ; GFX9-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
274     ; GFX9-NEXT: S_ENDPGM 0, implicit %2
275     ; GFX10-LABEL: name: fcanonicalize_fabs_f32_denorm
276     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
277     ; GFX10-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
278     ; GFX10-NEXT: S_ENDPGM 0, implicit %2
279     %0:vgpr(s32) = COPY $vgpr0
280     %1:vgpr(s32) = G_FABS %0
281     %2:vgpr(s32) = G_FCANONICALIZE %1
282     S_ENDPGM 0, implicit %2
288 name:            fcanonicalize_fabs_f32_flush
289 legalized:       true
290 regBankSelected: true
291 machineFunctionInfo:
292   mode:
293     fp32-input-denormals: false
294     fp32-output-denormals: false
296 body: |
297   bb.0:
298     liveins: $vgpr0
299     ; GFX8-LABEL: name: fcanonicalize_fabs_f32_flush
300     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
301     ; GFX8-NEXT: %2:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
302     ; GFX8-NEXT: S_ENDPGM 0, implicit %2
303     ; GFX9-LABEL: name: fcanonicalize_fabs_f32_flush
304     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
305     ; GFX9-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
306     ; GFX9-NEXT: S_ENDPGM 0, implicit %2
307     ; GFX10-LABEL: name: fcanonicalize_fabs_f32_flush
308     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
309     ; GFX10-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $mode, implicit $exec
310     ; GFX10-NEXT: S_ENDPGM 0, implicit %2
311     %0:vgpr(s32) = COPY $vgpr0
312     %1:vgpr(s32) = G_FABS %0
313     %2:vgpr(s32) = G_FCANONICALIZE %1
314     S_ENDPGM 0, implicit %2
319 name:            fcanonicalize_fneg_f32_denorm
320 legalized:       true
321 regBankSelected: true
322 machineFunctionInfo:
323   mode:
324     fp32-input-denormals: true
325     fp32-output-denormals: true
327 body: |
328   bb.0:
329     liveins: $vgpr0
330     ; GFX8-LABEL: name: fcanonicalize_fneg_f32_denorm
331     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
332     ; GFX8-NEXT: %2:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
333     ; GFX8-NEXT: S_ENDPGM 0, implicit %2
334     ; GFX9-LABEL: name: fcanonicalize_fneg_f32_denorm
335     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
336     ; GFX9-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
337     ; GFX9-NEXT: S_ENDPGM 0, implicit %2
338     ; GFX10-LABEL: name: fcanonicalize_fneg_f32_denorm
339     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
340     ; GFX10-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
341     ; GFX10-NEXT: S_ENDPGM 0, implicit %2
342     %0:vgpr(s32) = COPY $vgpr0
343     %1:vgpr(s32) = G_FNEG %0
344     %2:vgpr(s32) = G_FCANONICALIZE %1
345     S_ENDPGM 0, implicit %2
350 name:            fcanonicalize_fneg_f32_flush
351 legalized:       true
352 regBankSelected: true
353 machineFunctionInfo:
354   mode:
355     fp32-input-denormals: false
356     fp32-output-denormals: false
358 body: |
359   bb.0:
360     liveins: $vgpr0
361     ; GFX8-LABEL: name: fcanonicalize_fneg_f32_flush
362     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
363     ; GFX8-NEXT: %2:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $mode, implicit $exec
364     ; GFX8-NEXT: S_ENDPGM 0, implicit %2
365     ; GFX9-LABEL: name: fcanonicalize_fneg_f32_flush
366     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
367     ; GFX9-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
368     ; GFX9-NEXT: S_ENDPGM 0, implicit %2
369     ; GFX10-LABEL: name: fcanonicalize_fneg_f32_flush
370     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
371     ; GFX10-NEXT: %2:vgpr_32 = nofpexcept V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $mode, implicit $exec
372     ; GFX10-NEXT: S_ENDPGM 0, implicit %2
373     %0:vgpr(s32) = COPY $vgpr0
374     %1:vgpr(s32) = G_FNEG %0
375     %2:vgpr(s32) = G_FCANONICALIZE %1
376     S_ENDPGM 0, implicit %2
381 name:            fcanonicalize_fneg_fabs_f32_denorm
382 legalized:       true
383 regBankSelected: true
384 machineFunctionInfo:
385   mode:
386     fp32-input-denormals: true
387     fp32-output-denormals: true
389 body: |
390   bb.0:
391     liveins: $vgpr0
392     ; GFX8-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
393     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
394     ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
395     ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
396     ; GFX8-NEXT: %3:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
397     ; GFX8-NEXT: S_ENDPGM 0, implicit %3
398     ; GFX9-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
399     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
400     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
401     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
402     ; GFX9-NEXT: %3:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
403     ; GFX9-NEXT: S_ENDPGM 0, implicit %3
404     ; GFX10-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm
405     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
406     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
407     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
408     ; GFX10-NEXT: %3:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
409     ; GFX10-NEXT: S_ENDPGM 0, implicit %3
410     %0:vgpr(s32) = COPY $vgpr0
411     %1:vgpr(s32) = G_FNEG %0
412     %2:vgpr(s32) = G_FABS %1
413     %3:vgpr(s32) = G_FCANONICALIZE %2
414     S_ENDPGM 0, implicit %3
419 name:            fcanonicalize_fneg_fabs_f32_flush
420 legalized:       true
421 regBankSelected: true
422 machineFunctionInfo:
423   mode:
424     fp32-input-denormals: false
425     fp32-output-denormals: false
427 body: |
428   bb.0:
429     liveins: $vgpr0
430     ; GFX8-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
431     ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
432     ; GFX8-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
433     ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
434     ; GFX8-NEXT: %3:vgpr_32 = nofpexcept V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
435     ; GFX8-NEXT: S_ENDPGM 0, implicit %3
436     ; GFX9-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
437     ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
438     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
439     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
440     ; GFX9-NEXT: %3:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
441     ; GFX9-NEXT: S_ENDPGM 0, implicit %3
442     ; GFX10-LABEL: name: fcanonicalize_fneg_fabs_f32_flush
443     ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
444     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
445     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
446     ; GFX10-NEXT: %3:vgpr_32 = nofpexcept V_MAX_F32_e64 2, [[V_XOR_B32_e64_]], 2, [[V_XOR_B32_e64_]], 0, 0, implicit $mode, implicit $exec
447     ; GFX10-NEXT: S_ENDPGM 0, implicit %3
448     %0:vgpr(s32) = COPY $vgpr0
449     %1:vgpr(s32) = G_FNEG %0
450     %2:vgpr(s32) = G_FABS %1
451     %3:vgpr(s32) = G_FCANONICALIZE %2
452     S_ENDPGM 0, implicit %3