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