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
8 name: fcanonicalize_f16_denorm
13 fp64-fp16-input-denormals: true
14 fp64-fp16-output-denormals: true
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
39 name: fcanonicalize_f16_flush
44 fp64-fp16-input-denormals: false
45 fp64-fp16-output-denormals: false
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
70 name: fcanonicalize_f32_denorm
75 fp32-input-denormals: true
76 fp32-output-denormals: true
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
101 name: fcanonicalize_f32_flush
103 regBankSelected: true
106 fp32-input-denormals: false
107 fp32-output-denormals: false
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
134 regBankSelected: true
137 fp64-fp16-input-denormals: true
138 fp64-fp16-output-denormals: true
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
165 regBankSelected: true
168 fp64-fp16-input-denormals: false
169 fp64-fp16-output-denormals: false
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
196 regBankSelected: true
199 fp64-fp16-input-denormals: true
200 fp64-fp16-output-denormals: true
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
227 regBankSelected: true
230 fp64-fp16-input-denormals: false
231 fp64-fp16-output-denormals: false
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
258 regBankSelected: true
261 fp32-input-denormals: true
262 fp32-output-denormals: true
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
290 regBankSelected: true
293 fp32-input-denormals: false
294 fp32-output-denormals: false
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
321 regBankSelected: true
324 fp32-input-denormals: true
325 fp32-output-denormals: true
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
352 regBankSelected: true
355 fp32-input-denormals: false
356 fp32-output-denormals: false
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
383 regBankSelected: true
386 fp32-input-denormals: true
387 fp32-output-denormals: true
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
421 regBankSelected: true
424 fp32-input-denormals: false
425 fp32-output-denormals: false
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