1# RUN: llc -mtriple=amdgcn--amdhsa -mcpu=hawaii -verify-machineinstrs -run-pass si-fold-operands,dead-mi-elimination -o - %s | FileCheck -check-prefix=GCN %s 2... 3 4# GCN-LABEL: name: s_fold_and_imm_regimm_32{{$}} 5# GCN: %10:vgpr_32 = V_MOV_B32_e32 1543, implicit $exec 6# GCN: BUFFER_STORE_DWORD_OFFSET killed %10, 7name: s_fold_and_imm_regimm_32 8alignment: 0 9exposesReturnsTwice: false 10legalized: false 11regBankSelected: false 12selected: false 13tracksRegLiveness: true 14registers: 15 - { id: 0, class: sgpr_64 } 16 - { id: 1, class: sreg_64_xexec } 17 - { id: 2, class: sreg_32_xm0 } 18 - { id: 3, class: sreg_32_xm0 } 19 - { id: 4, class: sreg_32_xm0 } 20 - { id: 5, class: sreg_32_xm0 } 21 - { id: 6, class: sreg_128 } 22 - { id: 7, class: sreg_32_xm0 } 23 - { id: 8, class: sreg_32_xm0 } 24 - { id: 9, class: sreg_32_xm0 } 25 - { id: 10, class: vgpr_32 } 26liveins: 27 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 28frameInfo: 29 isFrameAddressTaken: false 30 isReturnAddressTaken: false 31 hasStackMap: false 32 hasPatchPoint: false 33 stackSize: 0 34 offsetAdjustment: 0 35 maxAlignment: 0 36 adjustsStack: false 37 hasCalls: false 38 maxCallFrameSize: 0 39 hasOpaqueSPAdjustment: false 40 hasVAStart: false 41 hasMustTailInVarArgFunc: false 42body: | 43 bb.0: 44 liveins: $sgpr0_sgpr1 45 46 %0 = COPY $sgpr0_sgpr1 47 %1 = S_LOAD_DWORDX2_IMM %0, 36, 0 48 %2 = COPY %1.sub1 49 %3 = COPY %1.sub0 50 %4 = S_MOV_B32 61440 51 %5 = S_MOV_B32 -1 52 %6 = REG_SEQUENCE killed %2, 1, killed %3, 2, killed %4, 3, killed %5, 4 53 %7 = S_MOV_B32 1234567 54 %8 = S_MOV_B32 9999 55 %9 = S_AND_B32 killed %7, killed %8, implicit-def dead $scc 56 %10 = COPY %9 57 BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, 0, implicit $exec 58 S_ENDPGM 59 60... 61--- 62 63# GCN-LABEL: name: v_fold_and_imm_regimm_32{{$}} 64 65# GCN: %9:vgpr_32 = V_MOV_B32_e32 646, implicit $exec 66# GCN: FLAT_STORE_DWORD %19, %9, 67 68# GCN: %10:vgpr_32 = V_MOV_B32_e32 646, implicit $exec 69# GCN: FLAT_STORE_DWORD %19, %10 70 71# GCN: %11:vgpr_32 = V_MOV_B32_e32 646, implicit $exec 72# GCN: FLAT_STORE_DWORD %19, %11, 73 74# GCN: %12:vgpr_32 = V_MOV_B32_e32 1234567, implicit $exec 75# GCN: FLAT_STORE_DWORD %19, %12, 76 77# GCN: %13:vgpr_32 = V_MOV_B32_e32 63, implicit $exec 78# GCN: FLAT_STORE_DWORD %19, %13, 79 80name: v_fold_and_imm_regimm_32 81alignment: 0 82exposesReturnsTwice: false 83legalized: false 84regBankSelected: false 85selected: false 86tracksRegLiveness: true 87registers: 88 - { id: 0, class: sgpr_64 } 89 - { id: 1, class: sreg_32_xm0 } 90 - { id: 2, class: sgpr_32 } 91 - { id: 3, class: vgpr_32 } 92 - { id: 4, class: sreg_64_xexec } 93 - { id: 20, class: sreg_32_xm0 } 94 - { id: 24, class: vgpr_32 } 95 - { id: 25, class: vreg_64 } 96 - { id: 26, class: sreg_32_xm0 } 97 - { id: 27, class: vgpr_32 } 98 - { id: 28, class: vgpr_32 } 99 - { id: 29, class: vgpr_32 } 100 - { id: 30, class: vgpr_32 } 101 - { id: 31, class: vgpr_32 } 102 - { id: 32, class: vreg_64 } 103 - { id: 33, class: vreg_64 } 104 - { id: 34, class: vgpr_32 } 105 - { id: 35, class: vgpr_32 } 106 - { id: 36, class: vgpr_32 } 107 - { id: 37, class: vreg_64 } 108 - { id: 44, class: vgpr_32 } 109 110liveins: 111 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 112 - { reg: '$vgpr0', virtual-reg: '%3' } 113frameInfo: 114 isFrameAddressTaken: false 115 isReturnAddressTaken: false 116 hasStackMap: false 117 hasPatchPoint: false 118 stackSize: 0 119 offsetAdjustment: 0 120 maxAlignment: 0 121 adjustsStack: false 122 hasCalls: false 123 maxCallFrameSize: 0 124 hasOpaqueSPAdjustment: false 125 hasVAStart: false 126 hasMustTailInVarArgFunc: false 127body: | 128 bb.0: 129 liveins: $sgpr0_sgpr1, $vgpr0 130 131 %3 = COPY $vgpr0 132 %0 = COPY $sgpr0_sgpr1 133 %4 = S_LOAD_DWORDX2_IMM %0, 36, 0 134 %31 = V_ASHRREV_I32_e64 31, %3, implicit $exec 135 %32 = REG_SEQUENCE %3, 1, %31, 2 136 %33 = V_LSHLREV_B64 2, killed %32, implicit $exec 137 %20 = COPY %4.sub1 138 %44 = V_ADD_I32_e32 %4.sub0, %33.sub0, implicit-def $vcc, implicit $exec 139 %36 = COPY killed %20 140 %35 = V_ADDC_U32_e32 %33.sub1, %36, implicit-def $vcc, implicit $vcc, implicit $exec 141 %37 = REG_SEQUENCE %44, 1, killed %35, 2 142 %24 = V_MOV_B32_e32 982, implicit $exec 143 %26 = S_MOV_B32 1234567 144 %34 = V_MOV_B32_e32 63, implicit $exec 145 146 %27 = V_AND_B32_e64 %26, %24, implicit $exec 147 FLAT_STORE_DWORD %37, %27, 0, 0, 0, implicit $exec, implicit $flat_scr 148 149 %28 = V_AND_B32_e64 %24, %26, implicit $exec 150 FLAT_STORE_DWORD %37, %28, 0, 0, 0, implicit $exec, implicit $flat_scr 151 152 %29 = V_AND_B32_e32 %26, %24, implicit $exec 153 FLAT_STORE_DWORD %37, %29, 0, 0, 0, implicit $exec, implicit $flat_scr 154 155 %30 = V_AND_B32_e64 %26, %26, implicit $exec 156 FLAT_STORE_DWORD %37, %30, 0, 0, 0, implicit $exec, implicit $flat_scr 157 158 %31 = V_AND_B32_e64 %34, %34, implicit $exec 159 FLAT_STORE_DWORD %37, %31, 0, 0, 0, implicit $exec, implicit $flat_scr 160 161 S_ENDPGM 162 163... 164--- 165 166# GCN-LABEL: name: s_fold_shl_imm_regimm_32{{$}} 167# GC1: %13 = V_MOV_B32_e32 4096, implicit $exec 168# GCN: BUFFER_STORE_DWORD_OFFSET killed %13, 169 170name: s_fold_shl_imm_regimm_32 171alignment: 0 172exposesReturnsTwice: false 173legalized: false 174regBankSelected: false 175selected: false 176tracksRegLiveness: true 177registers: 178 - { id: 0, class: sgpr_64 } 179 - { id: 1, class: sreg_32_xm0 } 180 - { id: 2, class: sgpr_32 } 181 - { id: 3, class: vgpr_32 } 182 - { id: 4, class: sreg_64_xexec } 183 - { id: 5, class: sreg_32_xm0_xexec } 184 - { id: 6, class: sreg_32_xm0 } 185 - { id: 7, class: sreg_32_xm0 } 186 - { id: 8, class: sreg_32_xm0 } 187 - { id: 9, class: sreg_32_xm0 } 188 - { id: 10, class: sreg_128 } 189 - { id: 11, class: sreg_32_xm0 } 190 - { id: 12, class: sreg_32_xm0 } 191 - { id: 13, class: vgpr_32 } 192liveins: 193 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 194frameInfo: 195 isFrameAddressTaken: false 196 isReturnAddressTaken: false 197 hasStackMap: false 198 hasPatchPoint: false 199 stackSize: 0 200 offsetAdjustment: 0 201 maxAlignment: 0 202 adjustsStack: false 203 hasCalls: false 204 maxCallFrameSize: 0 205 hasOpaqueSPAdjustment: false 206 hasVAStart: false 207 hasMustTailInVarArgFunc: false 208body: | 209 bb.0: 210 liveins: $sgpr0_sgpr1 211 212 %0 = COPY $sgpr0_sgpr1 213 %4 = S_LOAD_DWORDX2_IMM %0, 36, 0 214 %5 = S_MOV_B32 1 215 %6 = COPY %4.sub1 216 %7 = COPY %4.sub0 217 %8 = S_MOV_B32 61440 218 %9 = S_MOV_B32 -1 219 %10 = REG_SEQUENCE killed %7, 1, killed %6, 2, killed %9, 3, killed %8, 4 220 %12 = S_LSHL_B32 killed %5, 12, implicit-def dead $scc 221 %13 = COPY %12 222 BUFFER_STORE_DWORD_OFFSET killed %13, killed %10, 0, 0, 0, 0, 0, implicit $exec 223 S_ENDPGM 224 225... 226--- 227# GCN-LABEL: name: v_fold_shl_imm_regimm_32{{$}} 228 229# GCN: %11:vgpr_32 = V_MOV_B32_e32 40955904, implicit $exec 230# GCN: FLAT_STORE_DWORD %20, %11, 231 232# GCN: %12:vgpr_32 = V_MOV_B32_e32 24, implicit $exec 233# GCN: FLAT_STORE_DWORD %20, %12, 234 235# GCN: %13:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 236# GCN: FLAT_STORE_DWORD %20, %13, 237 238# GCN: %14:vgpr_32 = V_MOV_B32_e32 24, implicit $exec 239# GCN: FLAT_STORE_DWORD %20, %14, 240 241# GCN: %15:vgpr_32 = V_MOV_B32_e32 0, implicit $exec 242# GCN: FLAT_STORE_DWORD %20, %15, 243 244# GCN: %22:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec 245# GCN: FLAT_STORE_DWORD %20, %22, 246 247# GCN: %23:vgpr_32 = V_MOV_B32_e32 1, implicit $exec 248# GCN: FLAT_STORE_DWORD %20, %23, 249 250# GCN: %25:vgpr_32 = V_MOV_B32_e32 2, implicit $exec 251# GCN: FLAT_STORE_DWORD %20, %25, 252 253# GCN: %26:vgpr_32 = V_MOV_B32_e32 7927808, implicit $exec 254# GCN: FLAT_STORE_DWORD %20, %26, 255 256# GCN: %28:vgpr_32 = V_MOV_B32_e32 -8, implicit $exec 257# GCN: FLAT_STORE_DWORD %20, %28, 258 259name: v_fold_shl_imm_regimm_32 260alignment: 0 261exposesReturnsTwice: false 262legalized: false 263regBankSelected: false 264selected: false 265tracksRegLiveness: true 266registers: 267 - { id: 0, class: sgpr_64 } 268 - { id: 1, class: sreg_32_xm0 } 269 - { id: 2, class: vgpr_32 } 270 - { id: 3, class: sreg_64_xexec } 271 - { id: 4, class: sreg_64_xexec } 272 - { id: 5, class: sreg_32_xm0 } 273 - { id: 6, class: vgpr_32 } 274 - { id: 7, class: sreg_32_xm0 } 275 - { id: 8, class: sreg_64 } 276 - { id: 9, class: sreg_32_xm0 } 277 - { id: 10, class: vgpr_32 } 278 - { id: 11, class: vgpr_32 } 279 - { id: 12, class: vgpr_32 } 280 - { id: 13, class: vgpr_32 } 281 - { id: 14, class: vgpr_32 } 282 - { id: 15, class: vgpr_32 } 283 - { id: 16, class: vreg_64 } 284 - { id: 17, class: vreg_64 } 285 - { id: 18, class: vgpr_32 } 286 - { id: 19, class: vgpr_32 } 287 - { id: 20, class: vreg_64 } 288 - { id: 21, class: vgpr_32 } 289 - { id: 22, class: vgpr_32 } 290 - { id: 23, class: vgpr_32 } 291 - { id: 24, class: vgpr_32 } 292 - { id: 25, class: vgpr_32 } 293 - { id: 26, class: vgpr_32 } 294 - { id: 27, class: sreg_32_xm0 } 295 - { id: 28, class: vgpr_32 } 296liveins: 297 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 298 - { reg: '$vgpr0', virtual-reg: '%2' } 299frameInfo: 300 isFrameAddressTaken: false 301 isReturnAddressTaken: false 302 hasStackMap: false 303 hasPatchPoint: false 304 stackSize: 0 305 offsetAdjustment: 0 306 maxAlignment: 0 307 adjustsStack: false 308 hasCalls: false 309 maxCallFrameSize: 0 310 hasOpaqueSPAdjustment: false 311 hasVAStart: false 312 hasMustTailInVarArgFunc: false 313body: | 314 bb.0: 315 liveins: $sgpr0_sgpr1, $vgpr0 316 317 %2 = COPY $vgpr0 318 %0 = COPY $sgpr0_sgpr1 319 %3 = S_LOAD_DWORDX2_IMM %0, 36, 0 :: (non-temporal dereferenceable invariant load 8 from `i64 addrspace(2)* undef`) 320 %15 = V_ASHRREV_I32_e64 31, %2, implicit $exec 321 %16 = REG_SEQUENCE %2, 1, %15, 2 322 %17 = V_LSHLREV_B64 2, killed %16, implicit $exec 323 %9 = COPY %3.sub1 324 %21 = V_ADD_I32_e32 %3.sub0, %17.sub0, implicit-def $vcc, implicit $exec 325 %19 = COPY killed %9 326 %18 = V_ADDC_U32_e32 %17.sub1, %19, implicit-def $vcc, implicit $vcc, implicit $exec 327 %20 = REG_SEQUENCE %21, 1, killed %18, 2 328 %10 = V_MOV_B32_e32 9999, implicit $exec 329 %24 = V_MOV_B32_e32 3871, implicit $exec 330 %6 = V_MOV_B32_e32 1, implicit $exec 331 %7 = S_MOV_B32 1 332 %27 = S_MOV_B32 -4 333 334 %11 = V_LSHLREV_B32_e64 12, %10, implicit $exec 335 FLAT_STORE_DWORD %20, %11, 0, 0, 0, implicit $exec, implicit $flat_scr 336 337 %12 = V_LSHLREV_B32_e64 %7, 12, implicit $exec 338 FLAT_STORE_DWORD %20, %12, 0, 0, 0, implicit $exec, implicit $flat_scr 339 340 %13 = V_LSHL_B32_e64 %7, 12, implicit $exec 341 FLAT_STORE_DWORD %20, %13, 0, 0, 0, implicit $exec, implicit $flat_scr 342 343 %14 = V_LSHL_B32_e64 12, %7, implicit $exec 344 FLAT_STORE_DWORD %20, %14, 0, 0, 0, implicit $exec, implicit $flat_scr 345 346 %15 = V_LSHL_B32_e64 12, %24, implicit $exec 347 FLAT_STORE_DWORD %20, %15, 0, 0, 0, implicit $exec, implicit $flat_scr 348 349 %22 = V_LSHL_B32_e64 %6, 12, implicit $exec 350 FLAT_STORE_DWORD %20, %22, 0, 0, 0, implicit $exec, implicit $flat_scr 351 352 %23 = V_LSHL_B32_e64 %6, 32, implicit $exec 353 FLAT_STORE_DWORD %20, %23, 0, 0, 0, implicit $exec, implicit $flat_scr 354 355 %25 = V_LSHL_B32_e32 %6, %6, implicit $exec 356 FLAT_STORE_DWORD %20, %25, 0, 0, 0, implicit $exec, implicit $flat_scr 357 358 %26 = V_LSHLREV_B32_e32 11, %24, implicit $exec 359 FLAT_STORE_DWORD %20, %26, 0, 0, 0, implicit $exec, implicit $flat_scr 360 361 %28 = V_LSHL_B32_e32 %27, %6, implicit $exec 362 FLAT_STORE_DWORD %20, %28, 0, 0, 0, implicit $exec, implicit $flat_scr 363 364 S_ENDPGM 365 366... 367--- 368 369# GCN-LABEL: name: s_fold_ashr_imm_regimm_32{{$}} 370# GCN: %11:vgpr_32 = V_MOV_B32_e32 243, implicit $exec 371# GCN: BUFFER_STORE_DWORD_OFFSET killed %11, killed %8, 372name: s_fold_ashr_imm_regimm_32 373alignment: 0 374exposesReturnsTwice: false 375legalized: false 376regBankSelected: false 377selected: false 378tracksRegLiveness: true 379registers: 380 - { id: 0, class: sgpr_64 } 381 - { id: 1, class: sreg_32_xm0 } 382 - { id: 4, class: sreg_64_xexec } 383 - { id: 5, class: sreg_32_xm0_xexec } 384 - { id: 6, class: sreg_32_xm0 } 385 - { id: 7, class: sreg_32_xm0 } 386 - { id: 8, class: sreg_32_xm0 } 387 - { id: 9, class: sreg_32_xm0 } 388 - { id: 10, class: sreg_128 } 389 - { id: 11, class: sreg_32_xm0 } 390 - { id: 12, class: sreg_32_xm0 } 391 - { id: 13, class: vgpr_32 } 392liveins: 393 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 394frameInfo: 395 isFrameAddressTaken: false 396 isReturnAddressTaken: false 397 hasStackMap: false 398 hasPatchPoint: false 399 stackSize: 0 400 offsetAdjustment: 0 401 maxAlignment: 0 402 adjustsStack: false 403 hasCalls: false 404 maxCallFrameSize: 0 405 hasOpaqueSPAdjustment: false 406 hasVAStart: false 407 hasMustTailInVarArgFunc: false 408body: | 409 bb.0: 410 liveins: $sgpr0_sgpr1 411 412 %0 = COPY $sgpr0_sgpr1 413 %4 = S_LOAD_DWORDX2_IMM %0, 36, 0 414 %5 = S_MOV_B32 999123 415 %6 = COPY %4.sub1 416 %7 = COPY %4.sub0 417 %8 = S_MOV_B32 61440 418 %9 = S_MOV_B32 -1 419 %10 = REG_SEQUENCE killed %7, 1, killed %6, 2, killed %9, 3, killed %8, 4 420 %12 = S_ASHR_I32 killed %5, 12, implicit-def dead $scc 421 %13 = COPY %12 422 BUFFER_STORE_DWORD_OFFSET killed %13, killed %10, 0, 0, 0, 0, 0, implicit $exec 423 S_ENDPGM 424 425... 426 427# GCN-LABEL: name: v_fold_ashr_imm_regimm_32{{$}} 428# GCN: %11:vgpr_32 = V_MOV_B32_e32 3903258, implicit $exec 429# GCN: FLAT_STORE_DWORD %20, %11, 430 431# GCN: %12:vgpr_32 = V_MOV_B32_e32 62452139, implicit $exec 432# GCN: FLAT_STORE_DWORD %20, %12, 433 434# GCN: %13:vgpr_32 = V_MOV_B32_e32 1678031, implicit $exec 435# GCN: FLAT_STORE_DWORD %20, %13, 436 437# GCN: %14:vgpr_32 = V_MOV_B32_e32 3, implicit $exec 438# GCN: FLAT_STORE_DWORD %20, %14, 439 440# GCN: %15:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 441# GCN: FLAT_STORE_DWORD %20, %15, 442 443# GCN: %22:vgpr_32 = V_MOV_B32_e32 62500, implicit $exec 444# GCN: FLAT_STORE_DWORD %20, %22, 445 446# GCN: %23:vgpr_32 = V_MOV_B32_e32 500000, implicit $exec 447# GCN: FLAT_STORE_DWORD %20, %23, 448 449# GCN: %25:vgpr_32 = V_MOV_B32_e32 1920, implicit $exec 450# GCN: FLAT_STORE_DWORD %20, %25, 451 452# GCN: %26:vgpr_32 = V_MOV_B32_e32 487907, implicit $exec 453# GCN: FLAT_STORE_DWORD %20, %26, 454 455# GCN: %28:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec 456# GCN: FLAT_STORE_DWORD %20, %28, 457 458name: v_fold_ashr_imm_regimm_32 459alignment: 0 460exposesReturnsTwice: false 461legalized: false 462regBankSelected: false 463selected: false 464tracksRegLiveness: true 465registers: 466 - { id: 0, class: sgpr_64 } 467 - { id: 1, class: sreg_32_xm0 } 468 - { id: 2, class: vgpr_32 } 469 - { id: 3, class: sreg_64_xexec } 470 - { id: 4, class: sreg_64_xexec } 471 - { id: 5, class: sreg_32_xm0 } 472 - { id: 6, class: vgpr_32 } 473 - { id: 7, class: sreg_32_xm0 } 474 - { id: 8, class: sreg_32_xm0 } 475 - { id: 9, class: sreg_32_xm0 } 476 - { id: 10, class: vgpr_32 } 477 - { id: 11, class: vgpr_32 } 478 - { id: 12, class: vgpr_32 } 479 - { id: 13, class: vgpr_32 } 480 - { id: 14, class: vgpr_32 } 481 - { id: 15, class: vgpr_32 } 482 - { id: 16, class: vreg_64 } 483 - { id: 17, class: vreg_64 } 484 - { id: 18, class: vgpr_32 } 485 - { id: 19, class: vgpr_32 } 486 - { id: 20, class: vreg_64 } 487 - { id: 21, class: vgpr_32 } 488 - { id: 22, class: vgpr_32 } 489 - { id: 23, class: vgpr_32 } 490 - { id: 24, class: vgpr_32 } 491 - { id: 25, class: vgpr_32 } 492 - { id: 26, class: vgpr_32 } 493 - { id: 27, class: sreg_32_xm0 } 494 - { id: 28, class: vgpr_32 } 495 - { id: 32, class: sreg_32_xm0 } 496 - { id: 33, class: sreg_32_xm0 } 497 - { id: 34, class: vgpr_32 } 498 - { id: 35, class: vgpr_32 } 499liveins: 500 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 501 - { reg: '$vgpr0', virtual-reg: '%2' } 502frameInfo: 503 isFrameAddressTaken: false 504 isReturnAddressTaken: false 505 hasStackMap: false 506 hasPatchPoint: false 507 stackSize: 0 508 offsetAdjustment: 0 509 maxAlignment: 0 510 adjustsStack: false 511 hasCalls: false 512 maxCallFrameSize: 0 513 hasOpaqueSPAdjustment: false 514 hasVAStart: false 515 hasMustTailInVarArgFunc: false 516body: | 517 bb.0: 518 liveins: $sgpr0_sgpr1, $vgpr0 519 520 %2 = COPY $vgpr0 521 %0 = COPY $sgpr0_sgpr1 522 %3 = S_LOAD_DWORDX2_IMM %0, 36, 0 523 %15 = V_ASHRREV_I32_e64 31, %2, implicit $exec 524 %16 = REG_SEQUENCE %2, 1, %15, 2 525 %17 = V_LSHLREV_B64 2, killed %16, implicit $exec 526 %9 = COPY %3.sub1 527 %21 = V_ADD_I32_e32 %3.sub0, %17.sub0, implicit-def $vcc, implicit $exec 528 %19 = COPY killed %9 529 %18 = V_ADDC_U32_e32 %17.sub1, %19, implicit-def $vcc, implicit $vcc, implicit $exec 530 %20 = REG_SEQUENCE %21, 1, killed %18, 2 531 %10 = V_MOV_B32_e32 999234234, implicit $exec 532 %24 = V_MOV_B32_e32 3871, implicit $exec 533 %6 = V_MOV_B32_e32 1000000, implicit $exec 534 %7 = S_MOV_B32 13424252 535 %8 = S_MOV_B32 4 536 %27 = S_MOV_B32 -4 537 %32 = S_MOV_B32 1 538 %33 = S_MOV_B32 3841 539 %34 = V_MOV_B32_e32 3841, implicit $exec 540 %35 = V_MOV_B32_e32 2, implicit $exec 541 542 %11 = V_ASHRREV_I32_e64 8, %10, implicit $exec 543 FLAT_STORE_DWORD %20, %11, 0, 0, 0, implicit $exec, implicit $flat_scr 544 545 %12 = V_ASHRREV_I32_e64 %8, %10, implicit $exec 546 FLAT_STORE_DWORD %20, %12, 0, 0, 0, implicit $exec, implicit $flat_scr 547 548 %13 = V_ASHR_I32_e64 %7, 3, implicit $exec 549 FLAT_STORE_DWORD %20, %13, 0, 0, 0, implicit $exec, implicit $flat_scr 550 551 %14 = V_ASHR_I32_e64 7, %32, implicit $exec 552 FLAT_STORE_DWORD %20, %14, 0, 0, 0, implicit $exec, implicit $flat_scr 553 554 %15 = V_ASHR_I32_e64 %27, %24, implicit $exec 555 FLAT_STORE_DWORD %20, %15, 0, 0, 0, implicit $exec, implicit $flat_scr 556 557 %22 = V_ASHR_I32_e64 %6, 4, implicit $exec 558 FLAT_STORE_DWORD %20, %22, 0, 0, 0, implicit $exec, implicit $flat_scr 559 560 %23 = V_ASHR_I32_e64 %6, %33, implicit $exec 561 FLAT_STORE_DWORD %20, %23, 0, 0, 0, implicit $exec, implicit $flat_scr 562 563 %25 = V_ASHR_I32_e32 %34, %34, implicit $exec 564 FLAT_STORE_DWORD %20, %25, 0, 0, 0, implicit $exec, implicit $flat_scr 565 566 %26 = V_ASHRREV_I32_e32 11, %10, implicit $exec 567 FLAT_STORE_DWORD %20, %26, 0, 0, 0, implicit $exec, implicit $flat_scr 568 569 %28 = V_ASHR_I32_e32 %27, %35, implicit $exec 570 FLAT_STORE_DWORD %20, %28, 0, 0, 0, implicit $exec, implicit $flat_scr 571 572 S_ENDPGM 573 574... 575--- 576 577# GCN-LABEL: name: s_fold_lshr_imm_regimm_32{{$}} 578# GCN: %11:vgpr_32 = V_MOV_B32_e32 1048332, implicit $exec 579# GCN: BUFFER_STORE_DWORD_OFFSET killed %11, killed %8, 580name: s_fold_lshr_imm_regimm_32 581alignment: 0 582exposesReturnsTwice: false 583legalized: false 584regBankSelected: false 585selected: false 586tracksRegLiveness: true 587registers: 588 - { id: 0, class: sgpr_64 } 589 - { id: 1, class: sreg_32_xm0 } 590 - { id: 4, class: sreg_64_xexec } 591 - { id: 5, class: sreg_32_xm0_xexec } 592 - { id: 6, class: sreg_32_xm0 } 593 - { id: 7, class: sreg_32_xm0 } 594 - { id: 8, class: sreg_32_xm0 } 595 - { id: 9, class: sreg_32_xm0 } 596 - { id: 10, class: sreg_128 } 597 - { id: 11, class: sreg_32_xm0 } 598 - { id: 12, class: sreg_32_xm0 } 599 - { id: 13, class: vgpr_32 } 600liveins: 601 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 602frameInfo: 603 isFrameAddressTaken: false 604 isReturnAddressTaken: false 605 hasStackMap: false 606 hasPatchPoint: false 607 stackSize: 0 608 offsetAdjustment: 0 609 maxAlignment: 0 610 adjustsStack: false 611 hasCalls: false 612 maxCallFrameSize: 0 613 hasOpaqueSPAdjustment: false 614 hasVAStart: false 615 hasMustTailInVarArgFunc: false 616body: | 617 bb.0: 618 liveins: $sgpr0_sgpr1 619 620 %0 = COPY $sgpr0_sgpr1 621 %4 = S_LOAD_DWORDX2_IMM %0, 36, 0 622 %5 = S_MOV_B32 -999123 623 %6 = COPY %4.sub1 624 %7 = COPY %4.sub0 625 %8 = S_MOV_B32 61440 626 %9 = S_MOV_B32 -1 627 %10 = REG_SEQUENCE killed %7, 1, killed %6, 2, killed %9, 3, killed %8, 4 628 %12 = S_LSHR_B32 killed %5, 12, implicit-def dead $scc 629 %13 = COPY %12 630 BUFFER_STORE_DWORD_OFFSET killed %13, killed %10, 0, 0, 0, 0, 0, implicit $exec 631 S_ENDPGM 632 633... 634--- 635 636# GCN-LABEL: name: v_fold_lshr_imm_regimm_32{{$}} 637# GCN: %11:vgpr_32 = V_MOV_B32_e32 3903258, implicit $exec 638# GCN: FLAT_STORE_DWORD %20, %11, 639 640# GCN: %12:vgpr_32 = V_MOV_B32_e32 62452139, implicit $exec 641# GCN: FLAT_STORE_DWORD %20, %12, 642 643# GCN: %13:vgpr_32 = V_MOV_B32_e32 1678031, implicit $exec 644# GCN: FLAT_STORE_DWORD %20, %13, 645 646# GCN: %14:vgpr_32 = V_MOV_B32_e32 3, implicit $exec 647# GCN: FLAT_STORE_DWORD %20, %14, 648 649# GCN: %15:vgpr_32 = V_MOV_B32_e32 1, implicit $exec 650# GCN: FLAT_STORE_DWORD %20, %15, 651 652# GCN: %22:vgpr_32 = V_MOV_B32_e32 62500, implicit $exec 653# GCN: FLAT_STORE_DWORD %20, %22, 654 655# GCN: %23:vgpr_32 = V_MOV_B32_e32 500000, implicit $exec 656# GCN: FLAT_STORE_DWORD %20, %23, 657 658# GCN: %25:vgpr_32 = V_MOV_B32_e32 1920, implicit $exec 659# GCN: FLAT_STORE_DWORD %20, %25, 660 661# GCN: %26:vgpr_32 = V_MOV_B32_e32 487907, implicit $exec 662# GCN: FLAT_STORE_DWORD %20, %26, 663 664# GCN: %28:vgpr_32 = V_MOV_B32_e32 1073741823, implicit $exec 665# GCN: FLAT_STORE_DWORD %20, %28, 666 667name: v_fold_lshr_imm_regimm_32 668alignment: 0 669exposesReturnsTwice: false 670legalized: false 671regBankSelected: false 672selected: false 673tracksRegLiveness: true 674registers: 675 - { id: 0, class: sgpr_64 } 676 - { id: 1, class: sreg_32_xm0 } 677 - { id: 2, class: vgpr_32 } 678 - { id: 3, class: sreg_64_xexec } 679 - { id: 4, class: sreg_64_xexec } 680 - { id: 5, class: sreg_32_xm0 } 681 - { id: 6, class: vgpr_32 } 682 - { id: 7, class: sreg_32_xm0 } 683 - { id: 8, class: sreg_32_xm0 } 684 - { id: 9, class: sreg_32_xm0 } 685 - { id: 10, class: vgpr_32 } 686 - { id: 11, class: vgpr_32 } 687 - { id: 12, class: vgpr_32 } 688 - { id: 13, class: vgpr_32 } 689 - { id: 14, class: vgpr_32 } 690 - { id: 15, class: vgpr_32 } 691 - { id: 16, class: vreg_64 } 692 - { id: 17, class: vreg_64 } 693 - { id: 18, class: vgpr_32 } 694 - { id: 19, class: vgpr_32 } 695 - { id: 20, class: vreg_64 } 696 - { id: 21, class: vgpr_32 } 697 - { id: 22, class: vgpr_32 } 698 - { id: 23, class: vgpr_32 } 699 - { id: 24, class: vgpr_32 } 700 - { id: 25, class: vgpr_32 } 701 - { id: 26, class: vgpr_32 } 702 - { id: 27, class: sreg_32_xm0 } 703 - { id: 28, class: vgpr_32 } 704 - { id: 32, class: sreg_32_xm0 } 705 - { id: 33, class: sreg_32_xm0 } 706 - { id: 34, class: vgpr_32 } 707 - { id: 35, class: vgpr_32 } 708liveins: 709 - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' } 710 - { reg: '$vgpr0', virtual-reg: '%2' } 711frameInfo: 712 isFrameAddressTaken: false 713 isReturnAddressTaken: false 714 hasStackMap: false 715 hasPatchPoint: false 716 stackSize: 0 717 offsetAdjustment: 0 718 maxAlignment: 0 719 adjustsStack: false 720 hasCalls: false 721 maxCallFrameSize: 0 722 hasOpaqueSPAdjustment: false 723 hasVAStart: false 724 hasMustTailInVarArgFunc: false 725body: | 726 bb.0: 727 liveins: $sgpr0_sgpr1, $vgpr0 728 729 %2 = COPY $vgpr0 730 %0 = COPY $sgpr0_sgpr1 731 %3 = S_LOAD_DWORDX2_IMM %0, 36, 0 732 %15 = V_ASHRREV_I32_e64 31, %2, implicit $exec 733 %16 = REG_SEQUENCE %2, 1, %15, 2 734 %17 = V_LSHLREV_B64 2, killed %16, implicit $exec 735 %9 = COPY %3.sub1 736 %21 = V_ADD_I32_e32 %3.sub0, %17.sub0, implicit-def $vcc, implicit $exec 737 %19 = COPY killed %9 738 %18 = V_ADDC_U32_e32 %17.sub1, %19, implicit-def $vcc, implicit $vcc, implicit $exec 739 %20 = REG_SEQUENCE %21, 1, killed %18, 2 740 %10 = V_MOV_B32_e32 999234234, implicit $exec 741 %24 = V_MOV_B32_e32 3871, implicit $exec 742 %6 = V_MOV_B32_e32 1000000, implicit $exec 743 %7 = S_MOV_B32 13424252 744 %8 = S_MOV_B32 4 745 %27 = S_MOV_B32 -4 746 %32 = S_MOV_B32 1 747 %33 = S_MOV_B32 3841 748 %34 = V_MOV_B32_e32 3841, implicit $exec 749 %35 = V_MOV_B32_e32 2, implicit $exec 750 751 %11 = V_LSHRREV_B32_e64 8, %10, implicit $exec 752 FLAT_STORE_DWORD %20, %11, 0, 0, 0, implicit $exec, implicit $flat_scr 753 754 %12 = V_LSHRREV_B32_e64 %8, %10, implicit $exec 755 FLAT_STORE_DWORD %20, %12, 0, 0, 0, implicit $exec, implicit $flat_scr 756 757 %13 = V_LSHR_B32_e64 %7, 3, implicit $exec 758 FLAT_STORE_DWORD %20, %13, 0, 0, 0, implicit $exec, implicit $flat_scr 759 760 %14 = V_LSHR_B32_e64 7, %32, implicit $exec 761 FLAT_STORE_DWORD %20, %14, 0, 0, 0, implicit $exec, implicit $flat_scr 762 763 %15 = V_LSHR_B32_e64 %27, %24, implicit $exec 764 FLAT_STORE_DWORD %20, %15, 0, 0, 0, implicit $exec, implicit $flat_scr 765 766 %22 = V_LSHR_B32_e64 %6, 4, implicit $exec 767 FLAT_STORE_DWORD %20, %22, 0, 0, 0, implicit $exec, implicit $flat_scr 768 769 %23 = V_LSHR_B32_e64 %6, %33, implicit $exec 770 FLAT_STORE_DWORD %20, %23, 0, 0, 0, implicit $exec, implicit $flat_scr 771 772 %25 = V_LSHR_B32_e32 %34, %34, implicit $exec 773 FLAT_STORE_DWORD %20, %25, 0, 0, 0, implicit $exec, implicit $flat_scr 774 775 %26 = V_LSHRREV_B32_e32 11, %10, implicit $exec 776 FLAT_STORE_DWORD %20, %26, 0, 0, 0, implicit $exec, implicit $flat_scr 777 778 %28 = V_LSHR_B32_e32 %27, %35, implicit $exec 779 FLAT_STORE_DWORD %20, %28, 0, 0, 0, implicit $exec, implicit $flat_scr 780 781 S_ENDPGM 782 783... 784--- 785# There is only an undef use operand for %1, so there is no 786# corresponding defining instruction 787 788# GCN-LABEL: name: undefined_vreg_operand{{$}} 789# GCN: bb.0 790# GCN-NEXT: FLAT_STORE_DWORD undef %3:vreg_64, undef %1:vgpr_32, 791# GCN-NEXT: S_ENDPGM 792name: undefined_vreg_operand 793tracksRegLiveness: true 794registers: 795 - { id: 0, class: vgpr_32, preferred-register: '' } 796 - { id: 1, class: vgpr_32, preferred-register: '' } 797 - { id: 2, class: vgpr_32, preferred-register: '' } 798 - { id: 3, class: vreg_64, preferred-register: '' } 799body: | 800 bb.0: 801 %0 = V_MOV_B32_e32 0, implicit $exec 802 %2 = V_XOR_B32_e64 killed %0, undef %1, implicit $exec 803 FLAT_STORE_DWORD undef %3, %2, 0, 0, 0, implicit $exec, implicit $flat_scr 804 S_ENDPGM 805 806... 807--- 808# Make sure there is no crash if one of the operands is a physical register 809# GCN-LABEL: name: constant_fold_physreg_op{{$}} 810# GCN: %3:sreg_64 = S_AND_B64 $exec, 0, implicit-def dead $scc 811 812name: constant_fold_physreg_op 813tracksRegLiveness: true 814body: | 815 bb.0: 816 successors: %bb.1, %bb.3 817 liveins: $vgpr0, $sgpr4_sgpr5 818 819 %19:sreg_64 = IMPLICIT_DEF 820 %0:sreg_64 = SI_IF killed %19, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec 821 S_BRANCH %bb.1 822 823 bb.1: 824 %6:sreg_64 = S_MOV_B64 0 825 %7:sreg_64 = S_AND_B64 $exec, killed %6, implicit-def dead $scc 826 $vcc = COPY %7 827 828 bb.3: 829 liveins: $vcc 830 SI_END_CF %0, implicit-def dead $exec, implicit-def dead $scc, implicit $exec 831 S_ENDPGM implicit $vcc 832 833... 834