1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK 3# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK 4 5--- 6name: test_fminnum 7body: | 8 bb.0: 9 liveins: $vgpr0, $vgpr1 10 11 ; CHECK-LABEL: name: test_fminnum 12 ; CHECK: liveins: $vgpr0, $vgpr1 13 ; CHECK-NEXT: {{ $}} 14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 15 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 16 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 17 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 18 ; CHECK-NEXT: [[FMAXNUM:%[0-9]+]]:_(s32) = G_FMAXNUM [[FNEG]], [[FNEG1]] 19 ; CHECK-NEXT: $vgpr0 = COPY [[FMAXNUM]](s32) 20 %0:_(s32) = COPY $vgpr0 21 %1:_(s32) = COPY $vgpr1 22 %2:_(s32) = G_FMINNUM %0, %1 23 %3:_(s32) = G_FNEG %2 24 $vgpr0 = COPY %3(s32) 25 26... 27--- 28name: test_fmaxnum 29body: | 30 bb.0: 31 liveins: $vgpr0, $vgpr1 32 33 ; CHECK-LABEL: name: test_fmaxnum 34 ; CHECK: liveins: $vgpr0, $vgpr1 35 ; CHECK-NEXT: {{ $}} 36 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 37 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 38 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 39 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 40 ; CHECK-NEXT: [[FMINNUM:%[0-9]+]]:_(s32) = G_FMINNUM [[FNEG]], [[FNEG1]] 41 ; CHECK-NEXT: $vgpr0 = COPY [[FMINNUM]](s32) 42 %0:_(s32) = COPY $vgpr0 43 %1:_(s32) = COPY $vgpr1 44 %2:_(s32) = G_FMAXNUM %0, %1 45 %3:_(s32) = G_FNEG %2 46 $vgpr0 = COPY %3(s32) 47 48... 49--- 50name: test_fminnum_ieee 51body: | 52 bb.0: 53 liveins: $vgpr0, $vgpr1 54 55 ; CHECK-LABEL: name: test_fminnum_ieee 56 ; CHECK: liveins: $vgpr0, $vgpr1 57 ; CHECK-NEXT: {{ $}} 58 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 59 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 60 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 61 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 62 ; CHECK-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s32) = G_FMAXNUM_IEEE [[FNEG]], [[FNEG1]] 63 ; CHECK-NEXT: $vgpr0 = COPY [[FMAXNUM_IEEE]](s32) 64 %0:_(s32) = COPY $vgpr0 65 %1:_(s32) = COPY $vgpr1 66 %2:_(s32) = G_FMINNUM_IEEE %0, %1 67 %3:_(s32) = G_FNEG %2 68 $vgpr0 = COPY %3(s32) 69 70... 71--- 72name: test_fmaxnum_ieee 73body: | 74 bb.0: 75 liveins: $vgpr0, $vgpr1 76 77 ; CHECK-LABEL: name: test_fmaxnum_ieee 78 ; CHECK: liveins: $vgpr0, $vgpr1 79 ; CHECK-NEXT: {{ $}} 80 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 81 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 82 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 83 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 84 ; CHECK-NEXT: [[FMINNUM_IEEE:%[0-9]+]]:_(s32) = G_FMINNUM_IEEE [[FNEG]], [[FNEG1]] 85 ; CHECK-NEXT: $vgpr0 = COPY [[FMINNUM_IEEE]](s32) 86 %0:_(s32) = COPY $vgpr0 87 %1:_(s32) = COPY $vgpr1 88 %2:_(s32) = G_FMAXNUM_IEEE %0, %1 89 %3:_(s32) = G_FNEG %2 90 $vgpr0 = COPY %3(s32) 91 92... 93--- 94name: test_amdgpu_fmin_legacy 95body: | 96 bb.0: 97 liveins: $vgpr0, $vgpr1 98 99 ; CHECK-LABEL: name: test_amdgpu_fmin_legacy 100 ; CHECK: liveins: $vgpr0, $vgpr1 101 ; CHECK-NEXT: {{ $}} 102 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 103 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 104 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 105 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 106 ; CHECK-NEXT: [[AMDGPU_FMAX_LEGACY:%[0-9]+]]:_(s32) = G_AMDGPU_FMAX_LEGACY [[FNEG]], [[FNEG1]] 107 ; CHECK-NEXT: $vgpr0 = COPY [[AMDGPU_FMAX_LEGACY]](s32) 108 %0:_(s32) = COPY $vgpr0 109 %1:_(s32) = COPY $vgpr1 110 %2:_(s32) = G_AMDGPU_FMIN_LEGACY %0, %1 111 %3:_(s32) = G_FNEG %2 112 $vgpr0 = COPY %3(s32) 113 114... 115--- 116name: test_amdgpu_fmax_legacy 117body: | 118 bb.0: 119 liveins: $vgpr0, $vgpr1 120 121 ; CHECK-LABEL: name: test_amdgpu_fmax_legacy 122 ; CHECK: liveins: $vgpr0, $vgpr1 123 ; CHECK-NEXT: {{ $}} 124 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 125 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 126 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 127 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 128 ; CHECK-NEXT: [[AMDGPU_FMIN_LEGACY:%[0-9]+]]:_(s32) = G_AMDGPU_FMIN_LEGACY [[FNEG]], [[FNEG1]] 129 ; CHECK-NEXT: $vgpr0 = COPY [[AMDGPU_FMIN_LEGACY]](s32) 130 %0:_(s32) = COPY $vgpr0 131 %1:_(s32) = COPY $vgpr1 132 %2:_(s32) = G_AMDGPU_FMAX_LEGACY %0, %1 133 %3:_(s32) = G_FNEG %2 134 $vgpr0 = COPY %3(s32) 135 136... 137--- 138name: test_fadd 139body: | 140 bb.0: 141 liveins: $vgpr0, $vgpr1 142 143 ; CHECK-LABEL: name: test_fadd 144 ; CHECK: liveins: $vgpr0, $vgpr1 145 ; CHECK-NEXT: {{ $}} 146 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 147 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 148 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 149 ; CHECK-NEXT: [[FSUB:%[0-9]+]]:_(s32) = nsz G_FSUB [[FNEG]], [[COPY1]] 150 ; CHECK-NEXT: $vgpr0 = COPY [[FSUB]](s32) 151 %0:_(s32) = COPY $vgpr0 152 %1:_(s32) = COPY $vgpr1 153 %2:_(s32) = nsz G_FADD %0, %1 154 %3:_(s32) = G_FNEG %2 155 $vgpr0 = COPY %3(s32) 156 157... 158--- 159name: test_fsub 160body: | 161 bb.0: 162 liveins: $vgpr0, $vgpr1 163 164 ; CHECK-LABEL: name: test_fsub 165 ; CHECK: liveins: $vgpr0, $vgpr1 166 ; CHECK-NEXT: {{ $}} 167 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 168 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 169 ; CHECK-NEXT: [[FSUB:%[0-9]+]]:_(s32) = nsz G_FSUB [[COPY1]], [[COPY]] 170 ; CHECK-NEXT: $vgpr0 = COPY [[FSUB]](s32) 171 %0:_(s32) = COPY $vgpr0 172 %1:_(s32) = COPY $vgpr1 173 %2:_(s32) = nsz G_FSUB %0, %1 174 %3:_(s32) = G_FNEG %2 175 $vgpr0 = COPY %3(s32) 176 177... 178--- 179name: test_fma 180body: | 181 bb.0: 182 liveins: $vgpr0, $vgpr1, $vgpr2 183 184 ; CHECK-LABEL: name: test_fma 185 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 186 ; CHECK-NEXT: {{ $}} 187 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 188 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 189 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 190 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 191 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY2]] 192 ; CHECK-NEXT: [[FMA:%[0-9]+]]:_(s32) = nsz G_FMA [[COPY]], [[FNEG]], [[FNEG1]] 193 ; CHECK-NEXT: $vgpr0 = COPY [[FMA]](s32) 194 %0:_(s32) = COPY $vgpr0 195 %1:_(s32) = COPY $vgpr1 196 %2:_(s32) = COPY $vgpr2 197 %3:_(s32) = nsz G_FMA %0, %1, %2 198 %4:_(s32) = G_FNEG %3 199 $vgpr0 = COPY %4(s32) 200 201... 202--- 203name: test_fmad 204body: | 205 bb.0: 206 liveins: $vgpr0, $vgpr1, $vgpr2 207 208 ; CHECK-LABEL: name: test_fmad 209 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 210 ; CHECK-NEXT: {{ $}} 211 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 212 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 213 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 214 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 215 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY2]] 216 ; CHECK-NEXT: [[FMAD:%[0-9]+]]:_(s32) = nsz G_FMAD [[COPY]], [[FNEG]], [[FNEG1]] 217 ; CHECK-NEXT: $vgpr0 = COPY [[FMAD]](s32) 218 %0:_(s32) = COPY $vgpr0 219 %1:_(s32) = COPY $vgpr1 220 %2:_(s32) = COPY $vgpr2 221 %3:_(s32) = nsz G_FMAD %0, %1, %2 222 %4:_(s32) = G_FNEG %3 223 $vgpr0 = COPY %4(s32) 224 225... 226--- 227name: test_fmul 228body: | 229 bb.0: 230 liveins: $vgpr0, $vgpr1 231 232 ; CHECK-LABEL: name: test_fmul 233 ; CHECK: liveins: $vgpr0, $vgpr1 234 ; CHECK-NEXT: {{ $}} 235 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 236 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 237 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 238 ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[FNEG]] 239 ; CHECK-NEXT: $vgpr0 = COPY [[FMUL]](s32) 240 %0:_(s32) = COPY $vgpr0 241 %1:_(s32) = COPY $vgpr1 242 %2:_(s32) = G_FMUL %0, %1 243 %3:_(s32) = G_FNEG %2 244 $vgpr0 = COPY %3(s32) 245 246... 247--- 248name: test_fpext 249body: | 250 bb.0: 251 liveins: $vgpr0 252 253 ; CHECK-LABEL: name: test_fpext 254 ; CHECK: liveins: $vgpr0 255 ; CHECK-NEXT: {{ $}} 256 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 257 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 258 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG [[TRUNC]] 259 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[FNEG]](s16) 260 ; CHECK-NEXT: $vgpr0 = COPY [[FPEXT]](s32) 261 %0:_(s32) = COPY $vgpr0 262 %1:_(s16) = G_TRUNC %0(s32) 263 %2:_(s32) = G_FPEXT %1(s16) 264 %3:_(s32) = G_FNEG %2 265 $vgpr0 = COPY %3(s32) 266 267... 268--- 269name: test_intrinsic_trunc 270body: | 271 bb.0: 272 liveins: $vgpr0 273 274 ; CHECK-LABEL: name: test_intrinsic_trunc 275 ; CHECK: liveins: $vgpr0 276 ; CHECK-NEXT: {{ $}} 277 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 278 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 279 ; CHECK-NEXT: [[INTRINSIC_TRUNC:%[0-9]+]]:_(s32) = G_INTRINSIC_TRUNC [[FNEG]] 280 ; CHECK-NEXT: $vgpr0 = COPY [[INTRINSIC_TRUNC]](s32) 281 %0:_(s32) = COPY $vgpr0 282 %1:_(s32) = G_INTRINSIC_TRUNC %0 283 %2:_(s32) = G_FNEG %1 284 $vgpr0 = COPY %2(s32) 285 286... 287--- 288name: test_frint 289body: | 290 bb.0: 291 liveins: $vgpr0 292 293 ; CHECK-LABEL: name: test_frint 294 ; CHECK: liveins: $vgpr0 295 ; CHECK-NEXT: {{ $}} 296 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 297 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 298 ; CHECK-NEXT: [[FRINT:%[0-9]+]]:_(s32) = G_FRINT [[FNEG]] 299 ; CHECK-NEXT: $vgpr0 = COPY [[FRINT]](s32) 300 %0:_(s32) = COPY $vgpr0 301 %1:_(s32) = G_FRINT %0 302 %2:_(s32) = G_FNEG %1 303 $vgpr0 = COPY %2(s32) 304 305... 306--- 307name: test_fnearbyint 308body: | 309 bb.0: 310 liveins: $vgpr0 311 312 ; CHECK-LABEL: name: test_fnearbyint 313 ; CHECK: liveins: $vgpr0 314 ; CHECK-NEXT: {{ $}} 315 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 316 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 317 ; CHECK-NEXT: [[FNEARBYINT:%[0-9]+]]:_(s32) = G_FNEARBYINT [[FNEG]] 318 ; CHECK-NEXT: $vgpr0 = COPY [[FNEARBYINT]](s32) 319 %0:_(s32) = COPY $vgpr0 320 %1:_(s32) = G_FNEARBYINT %0 321 %2:_(s32) = G_FNEG %1 322 $vgpr0 = COPY %2(s32) 323 324... 325--- 326name: test_intrinsic_round 327body: | 328 bb.0: 329 liveins: $vgpr0 330 331 ; CHECK-LABEL: name: test_intrinsic_round 332 ; CHECK: liveins: $vgpr0 333 ; CHECK-NEXT: {{ $}} 334 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 335 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 336 ; CHECK-NEXT: [[INTRINSIC_ROUND:%[0-9]+]]:_(s32) = G_INTRINSIC_ROUND [[FNEG]] 337 ; CHECK-NEXT: $vgpr0 = COPY [[INTRINSIC_ROUND]](s32) 338 %0:_(s32) = COPY $vgpr0 339 %1:_(s32) = G_INTRINSIC_ROUND %0 340 %2:_(s32) = G_FNEG %1 341 $vgpr0 = COPY %2(s32) 342 343... 344--- 345name: test_intrinsic_roundeven 346body: | 347 bb.0: 348 liveins: $vgpr0 349 350 ; CHECK-LABEL: name: test_intrinsic_roundeven 351 ; CHECK: liveins: $vgpr0 352 ; CHECK-NEXT: {{ $}} 353 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 354 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 355 ; CHECK-NEXT: [[INTRINSIC_ROUNDEVEN:%[0-9]+]]:_(s32) = G_INTRINSIC_ROUNDEVEN [[FNEG]] 356 ; CHECK-NEXT: $vgpr0 = COPY [[INTRINSIC_ROUNDEVEN]](s32) 357 %0:_(s32) = COPY $vgpr0 358 %1:_(s32) = G_INTRINSIC_ROUNDEVEN %0 359 %2:_(s32) = G_FNEG %1 360 $vgpr0 = COPY %2(s32) 361 362... 363--- 364name: test_fsin 365body: | 366 bb.0: 367 liveins: $vgpr0 368 369 ; CHECK-LABEL: name: test_fsin 370 ; CHECK: liveins: $vgpr0 371 ; CHECK-NEXT: {{ $}} 372 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 373 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 374 ; CHECK-NEXT: [[FSIN:%[0-9]+]]:_(s32) = G_FSIN [[FNEG]] 375 ; CHECK-NEXT: $vgpr0 = COPY [[FSIN]](s32) 376 %0:_(s32) = COPY $vgpr0 377 %1:_(s32) = G_FSIN %0 378 %2:_(s32) = G_FNEG %1 379 $vgpr0 = COPY %2(s32) 380 381... 382--- 383name: test_fcanonicalize 384body: | 385 bb.0: 386 liveins: $vgpr0 387 388 ; CHECK-LABEL: name: test_fcanonicalize 389 ; CHECK: liveins: $vgpr0 390 ; CHECK-NEXT: {{ $}} 391 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 392 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 393 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s32) = G_FCANONICALIZE [[FNEG]] 394 ; CHECK-NEXT: $vgpr0 = COPY [[FCANONICALIZE]](s32) 395 %0:_(s32) = COPY $vgpr0 396 %1:_(s32) = G_FCANONICALIZE %0 397 %2:_(s32) = G_FNEG %1 398 $vgpr0 = COPY %2(s32) 399 400... 401--- 402name: test_amdgcn_rcp_iflag 403body: | 404 bb.0: 405 liveins: $vgpr0 406 407 ; CHECK-LABEL: name: test_amdgcn_rcp_iflag 408 ; CHECK: liveins: $vgpr0 409 ; CHECK-NEXT: {{ $}} 410 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 411 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 412 ; CHECK-NEXT: [[AMDGPU_RCP_IFLAG:%[0-9]+]]:_(s32) = G_AMDGPU_RCP_IFLAG [[FNEG]](s32) 413 ; CHECK-NEXT: $vgpr0 = COPY [[AMDGPU_RCP_IFLAG]](s32) 414 %0:_(s32) = COPY $vgpr0 415 %1:_(s32) = G_AMDGPU_RCP_IFLAG %0 416 %2:_(s32) = G_FNEG %1 417 $vgpr0 = COPY %2(s32) 418 419... 420--- 421name: test_fptrunc 422body: | 423 bb.0: 424 liveins: $vgpr0_vgpr1 425 ; CHECK-LABEL: name: test_fptrunc 426 ; CHECK: liveins: $vgpr0_vgpr1 427 ; CHECK-NEXT: {{ $}} 428 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 429 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[COPY]] 430 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s32) = G_FPTRUNC [[FNEG]](s64) 431 ; CHECK-NEXT: $vgpr0 = COPY [[FPTRUNC]](s32) 432 %0:_(s64) = COPY $vgpr0_vgpr1 433 %1:_(s32) = G_FPTRUNC %0:_(s64) 434 %2:_(s32) = G_FNEG %1:_ 435 $vgpr0 = COPY %2:_(s32) 436 437... 438--- 439name: test_amdgcn_rcp 440body: | 441 bb.0: 442 liveins: $vgpr0 443 444 ; CHECK-LABEL: name: test_amdgcn_rcp 445 ; CHECK: liveins: $vgpr0 446 ; CHECK-NEXT: {{ $}} 447 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 448 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 449 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[FNEG]](s32) 450 ; CHECK-NEXT: $vgpr0 = COPY [[INT]](s32) 451 %0:_(s32) = COPY $vgpr0 452 %1:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %0(s32) 453 %2:_(s32) = G_FNEG %1 454 $vgpr0 = COPY %2(s32) 455 456... 457--- 458name: test_amdgcn_rcp_legacy 459body: | 460 bb.0: 461 liveins: $vgpr0 462 463 ; CHECK-LABEL: name: test_amdgcn_rcp_legacy 464 ; CHECK: liveins: $vgpr0 465 ; CHECK-NEXT: {{ $}} 466 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 467 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 468 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.rcp.legacy), [[FNEG]](s32) 469 ; CHECK-NEXT: $vgpr0 = COPY [[INT]](s32) 470 %0:_(s32) = COPY $vgpr0 471 %1:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.rcp.legacy), %0(s32) 472 %2:_(s32) = G_FNEG %1 473 $vgpr0 = COPY %2(s32) 474 475... 476--- 477name: test_amdgcn_sin 478body: | 479 bb.0: 480 liveins: $vgpr0 481 482 ; CHECK-LABEL: name: test_amdgcn_sin 483 ; CHECK: liveins: $vgpr0 484 ; CHECK-NEXT: {{ $}} 485 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 486 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 487 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.sin), [[FNEG]](s32) 488 ; CHECK-NEXT: $vgpr0 = COPY [[INT]](s32) 489 %0:_(s32) = COPY $vgpr0 490 %1:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.sin), %0(s32) 491 %2:_(s32) = G_FNEG %1 492 $vgpr0 = COPY %2(s32) 493 494... 495--- 496name: test_fmul_legacy 497body: | 498 bb.0: 499 liveins: $vgpr0, $vgpr1 500 501 ; CHECK-LABEL: name: test_fmul_legacy 502 ; CHECK: liveins: $vgpr0, $vgpr1 503 ; CHECK-NEXT: {{ $}} 504 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 505 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 506 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 507 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.fmul.legacy), [[COPY]](s32), [[FNEG]](s32) 508 ; CHECK-NEXT: $vgpr0 = COPY [[INT]](s32) 509 %0:_(s32) = COPY $vgpr0 510 %1:_(s32) = COPY $vgpr1 511 %2:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.fmul.legacy), %0(s32), %1(s32) 512 %3:_(s32) = G_FNEG %2 513 $vgpr0 = COPY %3(s32) 514 515... 516--- 517name: test_fmed3 518body: | 519 bb.0: 520 liveins: $vgpr0, $vgpr1, $vgpr2 521 522 ; CHECK-LABEL: name: test_fmed3 523 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 524 ; CHECK-NEXT: {{ $}} 525 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 526 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 527 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 528 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 529 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 530 ; CHECK-NEXT: [[FNEG2:%[0-9]+]]:_(s32) = G_FNEG [[COPY2]] 531 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.fmed3), [[FNEG]](s32), [[FNEG1]](s32), [[FNEG2]](s32) 532 ; CHECK-NEXT: $vgpr0 = COPY [[INT]](s32) 533 %0:_(s32) = COPY $vgpr0 534 %1:_(s32) = COPY $vgpr1 535 %2:_(s32) = COPY $vgpr2 536 %3:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.fmed3), %0(s32), %1(s32), %2(s32) 537 %4:_(s32) = G_FNEG %3 538 $vgpr0 = COPY %4(s32) 539 540... 541--- 542name: test_amdgcn_fma_legacy 543body: | 544 bb.0: 545 liveins: $vgpr0, $vgpr1, $vgpr2 546 547 ; CHECK-LABEL: name: test_amdgcn_fma_legacy 548 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 549 ; CHECK-NEXT: {{ $}} 550 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 551 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 552 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 553 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 554 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[COPY2]] 555 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = nsz G_INTRINSIC intrinsic(@llvm.amdgcn.fma.legacy), [[COPY]](s32), [[FNEG]](s32), [[FNEG1]](s32) 556 ; CHECK-NEXT: $vgpr0 = COPY [[INT]](s32) 557 %0:_(s32) = COPY $vgpr0 558 %1:_(s32) = COPY $vgpr1 559 %2:_(s32) = COPY $vgpr2 560 %3:_(s32) = nsz G_INTRINSIC intrinsic(@llvm.amdgcn.fma.legacy), %0(s32), %1(s32), %2(s32) 561 %4:_(s32) = G_FNEG %3 562 $vgpr0 = COPY %4(s32) 563 564... 565 566# Don't fold fneg for fadd, fsub, fma, fmad or fma_legacy without nsz 567--- 568name: test_fadd_sz 569body: | 570 bb.0: 571 liveins: $vgpr0, $vgpr1 572 573 ; CHECK-LABEL: name: test_fadd_sz 574 ; CHECK: liveins: $vgpr0, $vgpr1 575 ; CHECK-NEXT: {{ $}} 576 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 577 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 578 ; CHECK-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[COPY]], [[COPY1]] 579 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FADD]] 580 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 581 %0:_(s32) = COPY $vgpr0 582 %1:_(s32) = COPY $vgpr1 583 %2:_(s32) = G_FADD %0, %1 584 %3:_(s32) = G_FNEG %2 585 $vgpr0 = COPY %3(s32) 586 587... 588--- 589name: test_fsub_sz 590body: | 591 bb.0: 592 liveins: $vgpr0, $vgpr1 593 594 ; CHECK-LABEL: name: test_fsub_sz 595 ; CHECK: liveins: $vgpr0, $vgpr1 596 ; CHECK-NEXT: {{ $}} 597 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 598 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 599 ; CHECK-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[COPY1]] 600 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FSUB]] 601 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 602 %0:_(s32) = COPY $vgpr0 603 %1:_(s32) = COPY $vgpr1 604 %2:_(s32) = G_FSUB %0, %1 605 %3:_(s32) = G_FNEG %2 606 $vgpr0 = COPY %3(s32) 607 608... 609--- 610name: test_fma_sz 611body: | 612 bb.0: 613 liveins: $vgpr0, $vgpr1, $vgpr2 614 615 ; CHECK-LABEL: name: test_fma_sz 616 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 617 ; CHECK-NEXT: {{ $}} 618 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 619 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 620 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 621 ; CHECK-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]] 622 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FMA]] 623 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 624 %0:_(s32) = COPY $vgpr0 625 %1:_(s32) = COPY $vgpr1 626 %2:_(s32) = COPY $vgpr2 627 %3:_(s32) = G_FMA %0, %1, %2 628 %4:_(s32) = G_FNEG %3 629 $vgpr0 = COPY %4(s32) 630 631... 632--- 633name: test_fmad_sz 634body: | 635 bb.0: 636 liveins: $vgpr0, $vgpr1, $vgpr2 637 638 ; CHECK-LABEL: name: test_fmad_sz 639 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 640 ; CHECK-NEXT: {{ $}} 641 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 642 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 643 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 644 ; CHECK-NEXT: [[FMAD:%[0-9]+]]:_(s32) = G_FMAD [[COPY]], [[COPY1]], [[COPY2]] 645 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FMAD]] 646 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 647 %0:_(s32) = COPY $vgpr0 648 %1:_(s32) = COPY $vgpr1 649 %2:_(s32) = COPY $vgpr2 650 %3:_(s32) = G_FMAD %0, %1, %2 651 %4:_(s32) = G_FNEG %3 652 $vgpr0 = COPY %4(s32) 653 654... 655--- 656name: test_amdgcn_fma_legacy_sz 657body: | 658 bb.0: 659 liveins: $vgpr0, $vgpr1, $vgpr2 660 661 ; CHECK-LABEL: name: test_amdgcn_fma_legacy_sz 662 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 663 ; CHECK-NEXT: {{ $}} 664 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 665 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 666 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 667 ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.fma.legacy), [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32) 668 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[INT]] 669 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 670 %0:_(s32) = COPY $vgpr0 671 %1:_(s32) = COPY $vgpr1 672 %2:_(s32) = COPY $vgpr2 673 %3:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.fma.legacy), %0(s32), %1(s32), %2(s32) 674 %4:_(s32) = G_FNEG %3 675 $vgpr0 = COPY %4(s32) 676 677... 678 679# Don't negate 0 for minnum, maxnum 680--- 681name: test_fminnum_zero 682body: | 683 bb.0: 684 liveins: $vgpr0 685 ; CHECK-LABEL: name: test_fminnum_zero 686 ; CHECK: liveins: $vgpr0 687 ; CHECK-NEXT: {{ $}} 688 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 689 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00 690 ; CHECK-NEXT: [[FMINNUM:%[0-9]+]]:_(s32) = G_FMINNUM [[COPY]], [[C]] 691 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FMINNUM]] 692 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 693 %0:_(s32) = COPY $vgpr0 694 %1:_(s32) = G_FCONSTANT float 0.000000e+00 695 %2:_(s32) = G_FMINNUM %0:_, %1:_ 696 %3:_(s32) = G_FNEG %2:_ 697 $vgpr0 = COPY %3:_(s32) 698 699... 700 701# On VI and above don't negate 1.0 / (0.5 * pi) 702--- 703name: test_fminnum_inv2pi_half 704body: | 705 bb.0: 706 liveins: $vgpr0 707 ; CHECK-LABEL: name: test_fminnum_inv2pi_half 708 ; CHECK: liveins: $vgpr0 709 ; CHECK-NEXT: {{ $}} 710 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 711 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 712 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH3118 713 ; CHECK-NEXT: [[FMINNUM:%[0-9]+]]:_(s16) = G_FMINNUM [[TRUNC]], [[C]] 714 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG [[FMINNUM]] 715 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FNEG]](s16) 716 ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 717 %0:_(s32) = COPY $vgpr0 718 %1:_(s16) = G_TRUNC %0:_(s32) 719 %2:_(s16) = G_FCONSTANT half 0xH3118 720 %3:_(s16) = G_FMINNUM %1:_, %2:_ 721 %4:_(s16) = G_FNEG %3:_ 722 %5:_(s32) = G_ANYEXT %4:_(s16) 723 $vgpr0 = COPY %5:_(s32) 724 725... 726--- 727name: test_fminnum_inv2pi_float 728body: | 729 bb.0: 730 liveins: $vgpr0 731 ; CHECK-LABEL: name: test_fminnum_inv2pi_float 732 ; CHECK: liveins: $vgpr0 733 ; CHECK-NEXT: {{ $}} 734 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 735 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x3FC45F3060000000 736 ; CHECK-NEXT: [[FMINNUM:%[0-9]+]]:_(s32) = G_FMINNUM [[COPY]], [[C]] 737 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FMINNUM]] 738 ; CHECK-NEXT: $vgpr0 = COPY [[FNEG]](s32) 739 %0:_(s32) = COPY $vgpr0 740 %1:_(s32) = G_FCONSTANT float 0x3FC45F3060000000 741 %2:_(s32) = G_FMINNUM %0:_, %1:_ 742 %3:_(s32) = G_FNEG %2:_ 743 $vgpr0 = COPY %3:_(s32) 744 745... 746--- 747name: test_fminnum_inv2pi_double 748body: | 749 bb.0: 750 liveins: $vgpr0_vgpr1 751 ; CHECK-LABEL: name: test_fminnum_inv2pi_double 752 ; CHECK: liveins: $vgpr0_vgpr1 753 ; CHECK-NEXT: {{ $}} 754 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 755 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x3FC45F306DC9C882 756 ; CHECK-NEXT: [[FMINNUM:%[0-9]+]]:_(s64) = G_FMINNUM [[COPY]], [[C]] 757 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[FMINNUM]] 758 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FNEG]](s64) 759 %0:_(s64) = COPY $vgpr0_vgpr1 760 %1:_(s64) = G_FCONSTANT double 0x3FC45F306DC9C882 761 %2:_(s64) = G_FMINNUM %0:_, %1:_ 762 %3:_(s64) = G_FNEG %2:_ 763 $vgpr0_vgpr1 = COPY %3:_(s64) 764 765... 766 767#Don't fold when where instruction count will not decrease. 768--- 769name: test_use_both 770body: | 771 bb.0: 772 liveins: $vgpr0, $vgpr1, $vgpr2 773 774 ; CHECK-LABEL: name: test_use_both 775 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 776 ; CHECK-NEXT: {{ $}} 777 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 778 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 779 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 780 ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]] 781 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FMUL]] 782 ; CHECK-NEXT: [[FMUL1:%[0-9]+]]:_(s32) = G_FMUL [[FNEG]], [[COPY2]] 783 ; CHECK-NEXT: $vgpr0 = COPY [[FMUL]](s32) 784 ; CHECK-NEXT: $vgpr1 = COPY [[FNEG]](s32) 785 ; CHECK-NEXT: $vgpr2 = COPY [[FMUL1]](s32) 786 %0:_(s32) = COPY $vgpr0 787 %1:_(s32) = COPY $vgpr1 788 %2:_(s32) = COPY $vgpr2 789 %3:_(s32) = G_FMUL %0, %1 790 %4:_(s32) = G_FNEG %3 791 %5:_(s32) = G_FMUL %4, %2 792 $vgpr0 = COPY %3:_(s32) 793 $vgpr1 = COPY %4:_(s32) 794 $vgpr2 = COPY %5:_(s32) 795 796... 797 798#Don't fold when where instruction count will not decrease. 799--- 800name: test_use_both2 801body: | 802 bb.0: 803 liveins: $vgpr0, $vgpr1 804 805 ; CHECK-LABEL: name: test_use_both2 806 ; CHECK: liveins: $vgpr0, $vgpr1 807 ; CHECK-NEXT: {{ $}} 808 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 809 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 810 ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]] 811 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[FMUL]] 812 ; CHECK-NEXT: $vgpr0 = COPY [[FMUL]](s32) 813 ; CHECK-NEXT: $vgpr1 = COPY [[FNEG]](s32) 814 %0:_(s32) = COPY $vgpr0 815 %1:_(s32) = COPY $vgpr1 816 %2:_(s32) = G_FMUL %0, %1 817 %3:_(s32) = G_FNEG %2 818 $vgpr0 = COPY %2:_(s32) 819 $vgpr1 = COPY %3:_(s32) 820 821... 822 823--- 824name: multiple_uses_of_fneg 825body: | 826 bb.0: 827 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 828 829 ; CHECK-LABEL: name: multiple_uses_of_fneg 830 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 831 ; CHECK-NEXT: {{ $}} 832 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 833 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 834 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 835 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3 836 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 837 ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[FNEG]] 838 ; CHECK-NEXT: [[FMUL1:%[0-9]+]]:_(s32) = G_FMUL [[FMUL]], [[COPY2]] 839 ; CHECK-NEXT: [[FMUL2:%[0-9]+]]:_(s32) = G_FMUL [[FMUL]], [[COPY3]] 840 ; CHECK-NEXT: $vgpr0 = COPY [[FMUL]](s32) 841 ; CHECK-NEXT: $vgpr1 = COPY [[FMUL1]](s32) 842 ; CHECK-NEXT: $vgpr2 = COPY [[FMUL2]](s32) 843 %0:_(s32) = COPY $vgpr0 844 %1:_(s32) = COPY $vgpr1 845 %2:_(s32) = COPY $vgpr2 846 %3:_(s32) = COPY $vgpr3 847 848 %4:_(s32) = G_FMUL %0, %1 849 %5:_(s32) = G_FNEG %4 850 %6:_(s32) = G_FMUL %5, %2 851 %7:_(s32) = G_FMUL %5, %3 852 853 $vgpr0 = COPY %5:_(s32) 854 $vgpr1 = COPY %6:_(s32) 855 $vgpr2 = COPY %7:_(s32) 856 857... 858 859# Check if new fneg is inserted at the appropriate place 860--- 861name: fneg_src_has_multiple_uses 862body: | 863 bb.0: 864 liveins: $vgpr0, $vgpr1, $vgpr2 865 866 ; CHECK-LABEL: name: fneg_src_has_multiple_uses 867 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2 868 ; CHECK-NEXT: {{ $}} 869 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 870 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 871 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 872 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]] 873 ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[FNEG]] 874 ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[FMUL]] 875 ; CHECK-NEXT: [[FMUL1:%[0-9]+]]:_(s32) = G_FMUL [[FNEG1]], [[COPY2]] 876 ; CHECK-NEXT: $vgpr0 = COPY [[FMUL1]](s32) 877 ; CHECK-NEXT: $vgpr1 = COPY [[FMUL]](s32) 878 %0:_(s32) = COPY $vgpr0 879 %1:_(s32) = COPY $vgpr1 880 %2:_(s32) = COPY $vgpr2 881 %3:_(s32) = G_FMUL %0:_, %1:_ 882 %4:_(s32) = G_FMUL %3:_, %2:_ 883 %5:_(s32) = G_FNEG %3:_ 884 $vgpr0 = COPY %4:_(s32) 885 $vgpr1 = COPY %5:_(s32) 886 887... 888