1# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass si-shrink-instructions -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s 2 3# GCN-LABEL: name: swap_phys_condensed 4# GCN: bb.0: 5# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec 6# GCN-NEXT: S_SETPC_B64_return 7--- 8name: swap_phys_condensed 9body: | 10 bb.0: 11 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 12 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec 13 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 14 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 15 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1 16... 17 18# GCN-LABEL: name: swap_phys_sparse 19# GCN: bb.0: 20# GCN-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec 21# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec 22# GCN-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec 23# GCN-NEXT: S_SETPC_B64_return 24--- 25name: swap_phys_sparse 26body: | 27 bb.0: 28 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 29 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec 30 $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec 31 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 32 $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec 33 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 34 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1 35... 36 37# GCN-LABEL: name: swap_phys_liveout 38# GCN: bb.0: 39# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec 40# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec 41# GCN-NEXT: S_SETPC_B64_return 42--- 43name: swap_phys_liveout 44body: | 45 bb.0: 46 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31 47 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec 48 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 49 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 50 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr2, implicit $vgpr1 51... 52 53# GCN-LABEL: name: swap_phys_b64 54# GCN: bb.0: 55# GCN-NEXT: $vgpr0, $vgpr2 = V_SWAP_B32 $vgpr2, $vgpr0, implicit $exec 56# GCN-NEXT: $vgpr1, $vgpr3 = V_SWAP_B32 $vgpr3, $vgpr1, implicit $exec 57--- 58name: swap_phys_b64 59body: | 60 bb.0: 61 $vgpr4_vgpr5 = COPY killed $vgpr0_vgpr1 62 $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3 63 $vgpr2_vgpr3 = COPY killed $vgpr4_vgpr5 64... 65 66# GCN-LABEL: name: swap_phys_overlap_x 67# GCN: bb.0: 68# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec 69# GCN-NEXT: $vgpr3_vgpr4 = V_ADD_F64 0, $vgpr0_vgpr1, 0, $vgpr3_vgpr4, 0, 0, implicit $exec 70# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 71# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 72--- 73name: swap_phys_overlap_x 74body: | 75 bb.0: 76 $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec 77 $vgpr3_vgpr4 = V_ADD_F64 0, $vgpr0_vgpr1, 0, $vgpr3_vgpr4, 0, 0, implicit $exec 78 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 79 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 80... 81 82# GCN-LABEL: name: swap_phys_clobber_y 83# GCN: bb.0: 84# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec 85# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 86# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec 87# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 88--- 89name: swap_phys_clobber_y 90body: | 91 bb.0: 92 $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec 93 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec 94 $vgpr1 = V_MOV_B32_e32 0, implicit $exec 95 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec 96 S_ENDPGM 97... 98 99# GCN-LABEL: name: swap_virt_copy_condense 100# GCN: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec 101--- 102name: swap_virt_copy_condense 103registers: 104 - { id: 0, class: vgpr_32 } 105 - { id: 1, class: vgpr_32 } 106 - { id: 2, class: vgpr_32 } 107body: | 108 bb.0: 109 %0 = IMPLICIT_DEF 110 %1 = IMPLICIT_DEF 111 %2 = COPY %0 112 %0 = COPY %1 113 %1 = COPY %2 114... 115 116# GCN-LABEL: name: swap_virt_copy_sparse 117# GCN: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec 118--- 119name: swap_virt_copy_sparse 120registers: 121 - { id: 0, class: vgpr_32 } 122 - { id: 1, class: vgpr_32 } 123 - { id: 2, class: vgpr_32 } 124body: | 125 bb.0: 126 %0 = IMPLICIT_DEF 127 %1 = IMPLICIT_DEF 128 %2 = COPY %0 129 S_NOP 0 130 %0 = COPY %1 131 S_NOP 0 132 %1 = COPY %2 133... 134 135# GCN-LABEL: name: swap_virt_copy_subreg 136# GCN: %0.sub0:vreg_64, %1.sub0:vreg_64 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec 137--- 138name: swap_virt_copy_subreg 139registers: 140 - { id: 0, class: vreg_64 } 141 - { id: 1, class: vreg_64 } 142 - { id: 2, class: vreg_64 } 143body: | 144 bb.0: 145 %0 = IMPLICIT_DEF 146 %1 = IMPLICIT_DEF 147 %2.sub0 = COPY %0.sub0 148 %2.sub1 = COPY %0.sub1 149 %0.sub0 = COPY %1.sub0 150 %0.sub1 = COPY %1.sub1 151 %1.sub0 = COPY %2.sub0 152... 153 154# GCN-LABEL: name: swap_virt_mov 155# GCN: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec 156--- 157name: swap_virt_mov 158registers: 159 - { id: 0, class: vgpr_32 } 160 - { id: 1, class: vgpr_32 } 161 - { id: 2, class: vgpr_32 } 162body: | 163 bb.0: 164 %0 = IMPLICIT_DEF 165 %1 = IMPLICIT_DEF 166 %2 = V_MOV_B32_e32 %0, implicit $exec 167 %0 = V_MOV_B32_e32 %1, implicit $exec 168 %1 = V_MOV_B32_e32 %2, implicit $exec 169... 170 171# GCN-LABEL: name: swap_virt_read_x 172# GCN: bb.0: 173# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 174# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 175# GCN-NEXT: %2:vgpr_32 = COPY %0 176# GCN-NEXT: %3:vgpr_32 = COPY %0 177# GCN-NEXT: %0:vgpr_32 = COPY %1 178# GCN-NEXT: %1:vgpr_32 = COPY %2 179# GCN-NEXT: S_ENDPGM 180 181--- 182name: swap_virt_read_x 183registers: 184 - { id: 0, class: vgpr_32 } 185 - { id: 1, class: vgpr_32 } 186 - { id: 2, class: vgpr_32 } 187 - { id: 3, class: vgpr_32 } 188body: | 189 bb.0: 190 %0 = IMPLICIT_DEF 191 %1 = IMPLICIT_DEF 192 %2 = COPY %0 193 %3 = COPY %0 194 %0 = COPY %1 195 %1 = COPY %2 196 S_ENDPGM 197... 198 199# GCN-LABEL: name: swap_virt_read_t_twice 200# GCN: bb.0: 201# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 202# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 203# GCN-NEXT: %2:vgpr_32 = COPY %0 204# GCN-NEXT: %3:vgpr_32 = COPY %2 205# GCN-NEXT: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec 206# GCN-NEXT: S_ENDPGM 207 208--- 209name: swap_virt_read_t_twice 210registers: 211 - { id: 0, class: vgpr_32 } 212 - { id: 1, class: vgpr_32 } 213 - { id: 2, class: vgpr_32 } 214 - { id: 3, class: vgpr_32 } 215body: | 216 bb.0: 217 %0 = IMPLICIT_DEF 218 %1 = IMPLICIT_DEF 219 %2 = COPY %0 220 %3 = COPY %2 221 %0 = COPY %1 222 %1 = COPY %2 223 S_ENDPGM 224... 225 226# GCN-LABEL: name: swap_virt_clobber_y 227# GCN: bb.0: 228# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 229# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 230# GCN-NEXT: %2:vgpr_32 = COPY %0 231# GCN-NEXT: %0:vgpr_32 = COPY %1 232# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 233# GCN-NEXT: %1:vgpr_32 = COPY %2 234# GCN-NEXT: S_ENDPGM 235 236--- 237name: swap_virt_clobber_y 238registers: 239 - { id: 0, class: vgpr_32 } 240 - { id: 1, class: vgpr_32 } 241 - { id: 2, class: vgpr_32 } 242body: | 243 bb.0: 244 %0 = IMPLICIT_DEF 245 %1 = IMPLICIT_DEF 246 %2 = COPY %0 247 %0 = COPY %1 248 %1 = IMPLICIT_DEF 249 %1 = COPY %2 250 S_ENDPGM 251... 252 253# GCN-LABEL: name: swap_virt_clobber_x1 254# GCN: bb.0: 255# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 256# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 257# GCN-NEXT: %2:vgpr_32 = COPY %0 258# GCN-NEXT: %0:vgpr_32 = COPY %1 259# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 260# GCN-NEXT: %1:vgpr_32 = COPY %2 261# GCN-NEXT: S_ENDPGM 262 263--- 264name: swap_virt_clobber_x1 265registers: 266 - { id: 0, class: vgpr_32 } 267 - { id: 1, class: vgpr_32 } 268 - { id: 2, class: vgpr_32 } 269body: | 270 bb.0: 271 %0 = IMPLICIT_DEF 272 %1 = IMPLICIT_DEF 273 %2 = COPY %0 274 %0 = COPY %1 275 %0 = IMPLICIT_DEF 276 %1 = COPY %2 277 S_ENDPGM 278... 279 280# GCN-LABEL: name: swap_virt_clobber_x2 281# GCN: bb.0: 282# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 283# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 284# GCN-NEXT: %2:vgpr_32 = COPY %0 285# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 286# GCN-NEXT: %0:vgpr_32 = COPY %1 287# GCN-NEXT: %1:vgpr_32 = COPY %2 288# GCN-NEXT: S_ENDPGM 289 290--- 291name: swap_virt_clobber_x2 292registers: 293 - { id: 0, class: vgpr_32 } 294 - { id: 1, class: vgpr_32 } 295 - { id: 2, class: vgpr_32 } 296body: | 297 bb.0: 298 %0 = IMPLICIT_DEF 299 %1 = IMPLICIT_DEF 300 %2 = COPY %0 301 %0 = IMPLICIT_DEF 302 %0 = COPY %1 303 %1 = COPY %2 304 S_ENDPGM 305... 306 307# GCN-LABEL: name: swap_virt_clobber_t 308# GCN: bb.0: 309# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF 310# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF 311# GCN-NEXT: %2:vgpr_32 = COPY %0 312# GCN-NEXT: %0:vgpr_32 = COPY %1 313# GCN-NEXT: %2:vgpr_32 = IMPLICIT_DEF 314# GCN-NEXT: %1:vgpr_32 = COPY %2 315# GCN-NEXT: S_ENDPGM 316 317--- 318name: swap_virt_clobber_t 319registers: 320 - { id: 0, class: vgpr_32 } 321 - { id: 1, class: vgpr_32 } 322 - { id: 2, class: vgpr_32 } 323body: | 324 bb.0: 325 %0 = IMPLICIT_DEF 326 %1 = IMPLICIT_DEF 327 %2 = COPY %0 328 %0 = COPY %1 329 %2 = IMPLICIT_DEF 330 %1 = COPY %2 331 S_ENDPGM 332... 333 334# GCN-LABEL: name: swap_virt_copy_subreg_overlap_x_full 335# GCN: bb.0: 336# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF 337# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF 338# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0 339# GCN-NEXT: %3:vreg_64 = COPY %0 340# GCN-NEXT: %0.sub0:vreg_64 = COPY %1.sub0 341# GCN-NEXT: %1.sub0:vreg_64 = COPY %2.sub0 342--- 343name: swap_virt_copy_subreg_overlap_x_full 344registers: 345 - { id: 0, class: vreg_64 } 346 - { id: 1, class: vreg_64 } 347 - { id: 2, class: vreg_64 } 348 - { id: 3, class: vreg_64 } 349body: | 350 bb.0: 351 %0 = IMPLICIT_DEF 352 %1 = IMPLICIT_DEF 353 %2.sub0 = COPY %0.sub0 354 %3 = COPY %0 355 %0.sub0 = COPY %1.sub0 356 %1.sub0 = COPY %2.sub0 357... 358 359# GCN-LABEL: name: swap_virt_copy_subreg_overlap_x_part 360# GCN: bb.0: 361# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF 362# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF 363# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0 364# GCN-NEXT: %3:vreg_64 = COPY %0.sub0_sub1 365# GCN-NEXT: %0.sub0:vreg_128 = COPY %1.sub0 366# GCN-NEXT: %1.sub0:vreg_64 = COPY %2.sub0 367--- 368name: swap_virt_copy_subreg_overlap_x_part 369registers: 370 - { id: 0, class: vreg_128 } 371 - { id: 1, class: vreg_64 } 372 - { id: 2, class: vreg_64 } 373 - { id: 3, class: vreg_64 } 374body: | 375 bb.0: 376 %0 = IMPLICIT_DEF 377 %1 = IMPLICIT_DEF 378 %2.sub0 = COPY %0.sub0 379 %3 = COPY %0.sub0_sub1 380 %0.sub0 = COPY %1.sub0 381 %1.sub0 = COPY %2.sub0 382... 383 384# GCN-LABEL: name: swap_virt_copy_subreg_wide_y 385# GCN: bb.0: 386# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF 387# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF 388# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0 389# GCN-NEXT: %0.sub0:vreg_64 = COPY %1.sub0 390# GCN-NEXT: %1:vreg_64 = COPY %2 391--- 392name: swap_virt_copy_subreg_wide_y 393registers: 394 - { id: 0, class: vreg_64 } 395 - { id: 1, class: vreg_64 } 396 - { id: 2, class: vreg_64 } 397body: | 398 bb.0: 399 %0 = IMPLICIT_DEF 400 %1 = IMPLICIT_DEF 401 %2.sub0 = COPY %0.sub0 402 %0.sub0 = COPY %1.sub0 403 %1 = COPY %2 404... 405 406# GCN-LABEL: name: swap_virt_b64 407# GCN: bb.0: 408# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF 409# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF 410# GCN-NEXT: %0.sub0:vreg_64, %1.sub0:vreg_64 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec 411# GCN-NEXT: %0.sub1:vreg_64, %1.sub1:vreg_64 = V_SWAP_B32 %1.sub1, %0.sub1, implicit $exec 412--- 413name: swap_virt_b64 414registers: 415 - { id: 0, class: vreg_64 } 416 - { id: 1, class: vreg_64 } 417 - { id: 2, class: vreg_64 } 418body: | 419 bb.0: 420 %0 = IMPLICIT_DEF 421 %1 = IMPLICIT_DEF 422 %2 = COPY %0 423 %0 = COPY %1 424 %1 = COPY %2 425... 426 427# GCN-LABEL: name: swap_virt_b128 428# GCN: bb.0: 429# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF 430# GCN-NEXT: %1:vreg_128 = IMPLICIT_DEF 431# GCN-NEXT: %0.sub0:vreg_128, %1.sub0:vreg_128 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec 432# GCN-NEXT: %0.sub1:vreg_128, %1.sub1:vreg_128 = V_SWAP_B32 %1.sub1, %0.sub1, implicit $exec 433# GCN-NEXT: %0.sub2:vreg_128, %1.sub2:vreg_128 = V_SWAP_B32 %1.sub2, %0.sub2, implicit $exec 434# GCN-NEXT: %0.sub3:vreg_128, %1.sub3:vreg_128 = V_SWAP_B32 %1.sub3, %0.sub3, implicit $exec 435--- 436name: swap_virt_b128 437registers: 438 - { id: 0, class: vreg_128 } 439 - { id: 1, class: vreg_128 } 440 - { id: 2, class: vreg_128 } 441body: | 442 bb.0: 443 %0 = IMPLICIT_DEF 444 %1 = IMPLICIT_DEF 445 %2 = COPY %0 446 %0 = COPY %1 447 %1 = COPY %2 448... 449 450# GCN-LABEL: name: swap_virt_b128_sub0_1 451# GCN: bb.0: 452# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF 453# GCN-NEXT: %1:vreg_128 = IMPLICIT_DEF 454# GCN-NEXT: %0.sub0:vreg_128, %1.sub0:vreg_128 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec 455# GCN-NEXT: %0.sub1:vreg_128, %1.sub1:vreg_128 = V_SWAP_B32 %1.sub1, %0.sub1, implicit $exec 456# GCN-NEXT: S_ENDPGM 457--- 458name: swap_virt_b128_sub0_1 459registers: 460 - { id: 0, class: vreg_128 } 461 - { id: 1, class: vreg_128 } 462 - { id: 2, class: vreg_128 } 463body: | 464 bb.0: 465 %0 = IMPLICIT_DEF 466 %1 = IMPLICIT_DEF 467 %2.sub0_sub1 = COPY %0.sub0_sub1 468 %0.sub0_sub1 = COPY %1.sub0_sub1 469 %1.sub0_sub1 = COPY %2.sub0_sub1 470 S_ENDPGM 471... 472 473# GCN-LABEL: name: swap_virt_b128_sub2_3 474# GCN: bb.0: 475# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF 476# GCN-NEXT: %1:vreg_128 = IMPLICIT_DEF 477# GCN-NEXT: %0.sub2:vreg_128, %1.sub2:vreg_128 = V_SWAP_B32 %1.sub2, %0.sub2, implicit $exec 478# GCN-NEXT: %0.sub3:vreg_128, %1.sub3:vreg_128 = V_SWAP_B32 %1.sub3, %0.sub3, implicit $exec 479# GCN-NEXT: S_ENDPGM 480--- 481name: swap_virt_b128_sub2_3 482registers: 483 - { id: 0, class: vreg_128 } 484 - { id: 1, class: vreg_128 } 485 - { id: 2, class: vreg_128 } 486body: | 487 bb.0: 488 %0 = IMPLICIT_DEF 489 %1 = IMPLICIT_DEF 490 %2.sub2_sub3 = COPY %0.sub2_sub3 491 %0.sub2_sub3 = COPY %1.sub2_sub3 492 %1.sub2_sub3 = COPY %2.sub2_sub3 493 S_ENDPGM 494... 495 496 497# GCN-LABEL: name: swap_virt_s_to_s 498# GCN: bb.0: 499# GCN-NEXT: %0:sgpr_32 = IMPLICIT_DEF 500# GCN-NEXT: %1:sgpr_32 = IMPLICIT_DEF 501# GCN-NEXT: %2:sgpr_32 = COPY %0 502# GCN-NEXT: %0:sgpr_32 = COPY %1 503# GCN-NEXT: %1:sgpr_32 = COPY %2 504--- 505name: swap_virt_s_to_s 506registers: 507 - { id: 0, class: sgpr_32 } 508 - { id: 1, class: sgpr_32 } 509 - { id: 2, class: sgpr_32 } 510body: | 511 bb.0: 512 %0 = IMPLICIT_DEF 513 %1 = IMPLICIT_DEF 514 %2 = COPY %0 515 %0 = COPY %1 516 %1 = COPY %2 517... 518 519# GCN-LABEL: name: swap_virt_copy_subreg_impdef_super 520# GCN: %0.sub0:vreg_64, %1.sub0:vreg_64 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec 521--- 522name: swap_virt_copy_subreg_impdef_super 523registers: 524 - { id: 0, class: vreg_64 } 525 - { id: 1, class: vreg_64 } 526 - { id: 2, class: vreg_64 } 527body: | 528 bb.0: 529 %0 = IMPLICIT_DEF 530 %1 = IMPLICIT_DEF 531 %2.sub0 = COPY %0.sub0, implicit-def %2, implicit $exec 532 %2.sub1 = COPY %0.sub1 533 %0.sub0 = COPY %1.sub0 534 %0.sub1 = COPY %1.sub1 535 %1.sub0 = COPY %2.sub0 536... 537 538# GCN-LABEL: name: swap_virt_copy_subreg_impuse_x 539# GCN: bb.0: 540# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF 541# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF 542# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0 543# GCN-NEXT: %2.sub1:vreg_64 = COPY %0.sub1 544# GCN-NEXT: %0.sub0:vreg_64 = COPY %1.sub0, implicit %0 545# GCN-NEXT: %0.sub1:vreg_64 = COPY %1.sub1 546# GCN-NEXT: %1.sub0:vreg_64 = COPY %2.sub0 547# GCN-NEXT: S_ENDPGM 548--- 549name: swap_virt_copy_subreg_impuse_x 550registers: 551 - { id: 0, class: vreg_64 } 552 - { id: 1, class: vreg_64 } 553 - { id: 2, class: vreg_64 } 554body: | 555 bb.0: 556 %0 = IMPLICIT_DEF 557 %1 = IMPLICIT_DEF 558 %2.sub0 = COPY %0.sub0 559 %2.sub1 = COPY %0.sub1 560 %0.sub0 = COPY %1.sub0, implicit %0 561 %0.sub1 = COPY %1.sub1 562 %1.sub0 = COPY %2.sub0 563 S_ENDPGM 564... 565