brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.6 KiB · e7177a5 Raw
986 lines · plain
1# RUN: llc -mtriple=amdgcn--amdhsa -mcpu=gfx900 -verify-machineinstrs -run-pass si-fold-operands,dead-mi-elimination -o - %s | FileCheck -enable-var-scope -check-prefix=GCN %s2...3 4# GCN-LABEL: name: s_fold_and_imm_regimm_32{{$}}5# GCN: %10:vgpr_32 = V_MOV_B32_e32 1543, implicit $exec6# GCN: BUFFER_STORE_DWORD_OFFSET killed %10,7name:            s_fold_and_imm_regimm_328tracksRegLiveness: true9liveins:10  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }11frameInfo:12  isFrameAddressTaken: false13  isReturnAddressTaken: false14  hasStackMap:     false15  hasPatchPoint:   false16  stackSize:       017  offsetAdjustment: 018  maxAlignment:    019  adjustsStack:    false20  hasCalls:        false21  maxCallFrameSize: 022  hasOpaqueSPAdjustment: false23  hasVAStart:      false24  hasMustTailInVarArgFunc: false25body:             |26  bb.0:27    liveins: $sgpr0_sgpr128 29    %0:sgpr_64 = COPY $sgpr0_sgpr130    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 031    %2:sreg_32_xm0 = COPY %1.sub132    %3:sreg_32_xm0 = COPY %1.sub033    %4:sreg_32_xm0 = S_MOV_B32 6144034    %5:sreg_32_xm0 = S_MOV_B32 -135    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.hi16, killed %3, %subreg.lo16, killed %4, %subreg.sub0, killed %5, %subreg.sub0_sub136    %7:sreg_32_xm0 = S_MOV_B32 123456737    %8:sreg_32_xm0 = S_MOV_B32 999938    %9:sreg_32_xm0 = S_AND_B32 killed %7, killed %8, implicit-def dead $scc39    %10:vgpr_32 = COPY %940    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec41    S_ENDPGM 042 43...44---45 46# GCN-LABEL: name: v_fold_and_imm_regimm_32{{$}}47 48# GCN: [[VAL0:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 646, implicit $exec49# GCN: FLAT_STORE_DWORD %10, [[VAL0]],50 51# GCN: [[VAL1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 646, implicit $exec52# GCN: FLAT_STORE_DWORD %10, [[VAL1]],53 54# GCN: [[VAL2:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 646, implicit $exec55# GCN: FLAT_STORE_DWORD %10, [[VAL2]],56 57# GCN: [[VAL3:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1234567, implicit $exec58# GCN: FLAT_STORE_DWORD %10, [[VAL3]],59 60# GCN: [[VAL4:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 63, implicit $exec61# GCN: FLAT_STORE_DWORD %10, [[VAL4]],62 63name:            v_fold_and_imm_regimm_3264tracksRegLiveness: true65liveins:66  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }67  - { reg: '$vgpr0', virtual-reg: '%3' }68body:             |69  bb.0:70    liveins: $sgpr0_sgpr1, $vgpr071 72    %3:vgpr_32 = COPY $vgpr073    %0:sgpr_64 = COPY $sgpr0_sgpr174    %4:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 075    %13:vgpr_32 = V_ASHRREV_I32_e64 31, %3, implicit $exec76    %14:vreg_64 = REG_SEQUENCE %3, %subreg.hi16, %13, %subreg.lo1677    %15:vreg_64 = V_LSHLREV_B64_e64 2, killed %14, implicit $exec78    %5:sreg_32_xm0 = COPY %4.sub179    %20:vgpr_32 = V_ADD_CO_U32_e32 %4.sub0, %15.sub0, implicit-def $vcc, implicit $exec80    %18:vgpr_32 = COPY killed %581    %17:vgpr_32 = V_ADDC_U32_e32 %15.sub1, %18, implicit-def $vcc, implicit $vcc, implicit $exec82    %19:vreg_64 = REG_SEQUENCE %20, %subreg.hi16, killed %17, %subreg.lo1683    %6:vgpr_32 = V_MOV_B32_e32 982, implicit $exec84    %8:sreg_32_xm0 = S_MOV_B32 123456785    %16:vgpr_32 = V_MOV_B32_e32 63, implicit $exec86 87    %9:vgpr_32 = V_AND_B32_e64 %8, %6, implicit $exec88    FLAT_STORE_DWORD %19, %9, 0, 0, implicit $exec, implicit $flat_scr89 90    %10:vgpr_32 = V_AND_B32_e64 %6, %8, implicit $exec91    FLAT_STORE_DWORD %19, %10, 0, 0, implicit $exec, implicit $flat_scr92 93    %11:vgpr_32 = V_AND_B32_e32 %8, %6, implicit $exec94    FLAT_STORE_DWORD %19, %11, 0, 0, implicit $exec, implicit $flat_scr95 96    %12:vgpr_32 = V_AND_B32_e64 %8, %8, implicit $exec97    FLAT_STORE_DWORD %19, %12, 0, 0, implicit $exec, implicit $flat_scr98 99    %21:vgpr_32 = V_AND_B32_e64 %16, %16, implicit $exec100    FLAT_STORE_DWORD %19, %21, 0, 0, implicit $exec, implicit $flat_scr101 102    S_ENDPGM 0103 104...105---106 107# GCN-LABEL: name: s_fold_shl_imm_regimm_32{{$}}108# GCN: [[VAL:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec109# GCN: BUFFER_STORE_DWORD_OFFSET killed [[VAL]],110 111name:            s_fold_shl_imm_regimm_32112tracksRegLiveness: true113liveins:114  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }115body:             |116  bb.0:117    liveins: $sgpr0_sgpr1118 119    %0:sgpr_64 = COPY $sgpr0_sgpr1120    %4:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0121    %5:sreg_32_xm0_xexec = S_MOV_B32 1122    %6:sreg_32_xm0 = COPY %4.sub1123    %7:sreg_32_xm0 = COPY %4.sub0124    %8:sreg_32_xm0 = S_MOV_B32 61440125    %9:sreg_32_xm0 = S_MOV_B32 -1126    %10:sgpr_128 = REG_SEQUENCE killed %7, %subreg.hi16, killed %6, %subreg.lo16, killed %9, %subreg.sub0, killed %8, %subreg.sub0_sub1127    %12:sreg_32_xm0 = S_LSHL_B32 killed %5, 12, implicit-def dead $scc128    %13:vgpr_32 = COPY %12129    BUFFER_STORE_DWORD_OFFSET killed %13, killed %10, 0, 0, 0, 0, implicit $exec130    S_ENDPGM 0131 132...133---134 135# GCN-LABEL: name: s_fold_ashr_imm_regimm_32{{$}}136# GCN: [[VAL:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 243, implicit $exec137# GCN: BUFFER_STORE_DWORD_OFFSET killed [[VAL]], killed %7,138name:            s_fold_ashr_imm_regimm_32139tracksRegLiveness: true140liveins:141  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }142body:             |143  bb.0:144    liveins: $sgpr0_sgpr1145 146    %0:sgpr_64 = COPY $sgpr0_sgpr1147    %2:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0148    %3:sreg_32_xm0_xexec = S_MOV_B32 999123149    %4:sreg_32_xm0 = COPY %2.sub1150    %5:sreg_32_xm0 = COPY %2.sub0151    %6:sreg_32_xm0 = S_MOV_B32 61440152    %7:sreg_32_xm0 = S_MOV_B32 -1153    %8:sgpr_128 = REG_SEQUENCE killed %5, %subreg.hi16, killed %4, %subreg.lo16, killed %7, %subreg.sub0, killed %6, %subreg.sub0_sub1154    %10:sreg_32_xm0 = S_ASHR_I32 killed %3, 12, implicit-def dead $scc155    %11:vgpr_32 = COPY %10156    BUFFER_STORE_DWORD_OFFSET killed %11, killed %8, 0, 0, 0, 0, implicit $exec157    S_ENDPGM 0158 159...160 161# GCN-LABEL: name: v_fold_ashr_imm_regimm_32{{$}}162# GCN: [[VAL0:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 3903258, implicit $exec163# GCN: FLAT_STORE_DWORD %10, [[VAL0]],164 165# GCN: [[VAL1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 62452139, implicit $exec166# GCN: FLAT_STORE_DWORD %10, [[VAL1]],167 168# GCN: [[VAL2:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1678031, implicit $exec169# GCN: FLAT_STORE_DWORD %10, [[VAL2]],170 171# GCN: [[VAL3:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 3, implicit $exec172# GCN: FLAT_STORE_DWORD %10, [[VAL3]],173 174# GCN: [[VAL4:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec175# GCN: FLAT_STORE_DWORD %10, [[VAL4]],176 177# GCN: [[VAL5:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 62500, implicit $exec178# GCN: FLAT_STORE_DWORD %10, [[VAL5]],179 180# GCN: [[VAL6:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 500000, implicit $exec181# GCN: FLAT_STORE_DWORD %10, [[VAL6]],182 183# GCN: [[VAL7:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1920, implicit $exec184# GCN: FLAT_STORE_DWORD %10, [[VAL7]],185 186# GCN: [[VAL8:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 487907, implicit $exec187# GCN: FLAT_STORE_DWORD %10, [[VAL8]],188 189# GCN: [[VAL9:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec190# GCN: FLAT_STORE_DWORD %10, [[VAL9]],191 192name:            v_fold_ashr_imm_regimm_32193tracksRegLiveness: true194isSSA: true195liveins:196  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }197  - { reg: '$vgpr0', virtual-reg: '%2' }198body:             |199  bb.0:200    liveins: $sgpr0_sgpr1, $vgpr0201 202    %2:vgpr_32 = COPY $vgpr0203    %0:sgpr_64 = COPY $sgpr0_sgpr1204    %3:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0205    %15:vgpr_32 = V_ASHRREV_I32_e64 31, %2, implicit $exec206    %16:vreg_64 = REG_SEQUENCE %2, %subreg.hi16, %15, %subreg.lo16207    %17:vreg_64 = V_LSHLREV_B64_e64 2, killed %16, implicit $exec208    %9:sreg_32_xm0 = COPY %3.sub1209    %21:vgpr_32 = V_ADD_CO_U32_e32 %3.sub0, %17.sub0, implicit-def $vcc, implicit $exec210    %19:vgpr_32 = COPY killed %9211    %18:vgpr_32 = V_ADDC_U32_e32 %17.sub1, %19, implicit-def $vcc, implicit $vcc, implicit $exec212    %20:vreg_64 = REG_SEQUENCE %21, %subreg.hi16, killed %18, %subreg.lo16213    %10:vgpr_32 = V_MOV_B32_e32 999234234, implicit $exec214    %24:vgpr_32 = V_MOV_B32_e32 3871, implicit $exec215    %6:vgpr_32 = V_MOV_B32_e32 1000000, implicit $exec216    %7:sreg_32_xm0 = S_MOV_B32 13424252217    %8:sreg_32_xm0 = S_MOV_B32 4218    %27:sreg_32_xm0 = S_MOV_B32 -4219    %29:sreg_32_xm0 = S_MOV_B32 1220    %30:sreg_32_xm0 = S_MOV_B32 3841221    %31:vgpr_32 = V_MOV_B32_e32 3841, implicit $exec222    %32:vgpr_32 = V_MOV_B32_e32 2, implicit $exec223 224    %11:vgpr_32 = V_ASHRREV_I32_e64 8, %10, implicit $exec225    FLAT_STORE_DWORD %20, %11, 0, 0, implicit $exec, implicit $flat_scr226 227    %12:vgpr_32 = V_ASHRREV_I32_e64 %8, %10, implicit $exec228    FLAT_STORE_DWORD %20, %12, 0, 0, implicit $exec, implicit $flat_scr229 230    %13:vgpr_32 = V_ASHR_I32_e64 %7, 3, implicit $exec231    FLAT_STORE_DWORD %20, %13, 0, 0, implicit $exec, implicit $flat_scr232 233    %14:vgpr_32 = V_ASHR_I32_e64 7, %29, implicit $exec234    FLAT_STORE_DWORD %20, %14, 0, 0, implicit $exec, implicit $flat_scr235 236    %33:vgpr_32 = V_ASHR_I32_e64 %27, %24, implicit $exec237    FLAT_STORE_DWORD %20, %33, 0, 0, implicit $exec, implicit $flat_scr238 239    %22:vgpr_32 = V_ASHR_I32_e64 %6, 4, implicit $exec240    FLAT_STORE_DWORD %20, %22, 0, 0, implicit $exec, implicit $flat_scr241 242    %23:vgpr_32 = V_ASHR_I32_e64 %6, %30, implicit $exec243    FLAT_STORE_DWORD %20, %23, 0, 0, implicit $exec, implicit $flat_scr244 245    %25:vgpr_32 = V_ASHR_I32_e32 %31, %31, implicit $exec246    FLAT_STORE_DWORD %20, %25, 0, 0, implicit $exec, implicit $flat_scr247 248    %26:vgpr_32 = V_ASHRREV_I32_e32 11, %10, implicit $exec249    FLAT_STORE_DWORD %20, %26, 0, 0, implicit $exec, implicit $flat_scr250 251    %28:vgpr_32 = V_ASHR_I32_e32 %27, %32, implicit $exec252    FLAT_STORE_DWORD %20, %28, 0, 0, implicit $exec, implicit $flat_scr253 254    S_ENDPGM 0255 256...257---258 259# GCN-LABEL: name: s_fold_lshr_imm_regimm_32{{$}}260# GCN: [[VAL:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1048332, implicit $exec261# GCN: BUFFER_STORE_DWORD_OFFSET killed [[VAL]], killed %7,262name:            s_fold_lshr_imm_regimm_32263tracksRegLiveness: true264liveins:265  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }266body:             |267  bb.0:268    liveins: $sgpr0_sgpr1269 270    %0:sgpr_64 = COPY $sgpr0_sgpr1271    %2:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0272    %3:sreg_32_xm0_xexec = S_MOV_B32 -999123273    %4:sreg_32_xm0 = COPY %2.sub1274    %5:sreg_32_xm0 = COPY %2.sub0275    %6:sreg_32_xm0 = S_MOV_B32 61440276    %7:sreg_32_xm0 = S_MOV_B32 -1277    %8:sgpr_128 = REG_SEQUENCE killed %5, %subreg.hi16, killed %4, %subreg.lo16, killed %7, %subreg.sub0, killed %6, %subreg.sub0_sub1278    %10:sreg_32_xm0 = S_LSHR_B32 killed %3, 12, implicit-def dead $scc279    %11:vgpr_32 = COPY %10280    BUFFER_STORE_DWORD_OFFSET killed %11, killed %8, 0, 0, 0, 0, implicit $exec281    S_ENDPGM 0282 283...284---285 286# GCN-LABEL: name: v_fold_lshr_imm_regimm_32{{$}}287# GCN: [[VAL0:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 3903258, implicit $exec288# GCN: FLAT_STORE_DWORD %10, [[VAL0]],289 290# GCN: [[VAL1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 62452139, implicit $exec291# GCN: FLAT_STORE_DWORD %10, [[VAL1]],292 293# GCN: [[VAL2:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1678031, implicit $exec294# GCN: FLAT_STORE_DWORD %10, [[VAL2]],295 296# GCN: [[VAL3:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 3, implicit $exec297# GCN: FLAT_STORE_DWORD %10, [[VAL3]],298 299# GCN: [[VAL4:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1, implicit $exec300# GCN: FLAT_STORE_DWORD %10, [[VAL4]],301 302# GCN: [[VAL5:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 62500, implicit $exec303# GCN: FLAT_STORE_DWORD %10, [[VAL5]],304 305# GCN: [[VAL6:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 500000, implicit $exec306# GCN: FLAT_STORE_DWORD %10, [[VAL6]],307 308# GCN: [[VAL7:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1920, implicit $exec309# GCN: FLAT_STORE_DWORD %10, [[VAL7]],310 311# GCN: [[VAL8:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 487907, implicit $exec312# GCN: FLAT_STORE_DWORD %10, [[VAL8]],313 314# GCN: [[VAL9:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741823, implicit $exec315# GCN: FLAT_STORE_DWORD %10, [[VAL9]],316 317name:            v_fold_lshr_imm_regimm_32318tracksRegLiveness: true319liveins:320  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }321  - { reg: '$vgpr0', virtual-reg: '%2' }322body:             |323  bb.0:324    liveins: $sgpr0_sgpr1, $vgpr0325 326    %2:vgpr_32 = COPY $vgpr0327    %0:sgpr_64 = COPY $sgpr0_sgpr1328    %3:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0329    %15:vgpr_32 = V_ASHRREV_I32_e64 31, %2, implicit $exec330    %16:vreg_64 = REG_SEQUENCE %2, %subreg.hi16, %15, %subreg.lo16331    %17:vreg_64 = V_LSHLREV_B64_e64 2, killed %16, implicit $exec332    %9:sreg_32_xm0 = COPY %3.sub1333    %21:vgpr_32 = V_ADD_CO_U32_e32 %3.sub0, %17.sub0, implicit-def $vcc, implicit $exec334    %19:vgpr_32 = COPY killed %9335    %18:vgpr_32 = V_ADDC_U32_e32 %17.sub1, %19, implicit-def $vcc, implicit $vcc, implicit $exec336    %20:vreg_64 = REG_SEQUENCE %21, %subreg.hi16, killed %18, %subreg.lo16337    %10:vgpr_32 = V_MOV_B32_e32 999234234, implicit $exec338    %24:vgpr_32 = V_MOV_B32_e32 3871, implicit $exec339    %6:vgpr_32 = V_MOV_B32_e32 1000000, implicit $exec340    %7:sreg_32_xm0 = S_MOV_B32 13424252341    %8:sreg_32_xm0 = S_MOV_B32 4342    %27:sreg_32_xm0 = S_MOV_B32 -4343    %29:sreg_32_xm0 = S_MOV_B32 1344    %30:sreg_32_xm0 = S_MOV_B32 3841345    %31:vgpr_32 = V_MOV_B32_e32 3841, implicit $exec346    %32:vgpr_32 = V_MOV_B32_e32 2, implicit $exec347 348    %11:vgpr_32 = V_LSHRREV_B32_e64 8, %10, implicit $exec349    FLAT_STORE_DWORD %20, %11, 0, 0, implicit $exec, implicit $flat_scr350 351    %12:vgpr_32 = V_LSHRREV_B32_e64 %8, %10, implicit $exec352    FLAT_STORE_DWORD %20, %12, 0, 0, implicit $exec, implicit $flat_scr353 354    %13:vgpr_32 = V_LSHR_B32_e64 %7, 3, implicit $exec355    FLAT_STORE_DWORD %20, %13, 0, 0, implicit $exec, implicit $flat_scr356 357    %14:vgpr_32 = V_LSHR_B32_e64 7, %29, implicit $exec358    FLAT_STORE_DWORD %20, %14, 0, 0, implicit $exec, implicit $flat_scr359 360    %33:vgpr_32 = V_LSHR_B32_e64 %27, %24, implicit $exec361    FLAT_STORE_DWORD %20, %33, 0, 0, implicit $exec, implicit $flat_scr362 363    %22:vgpr_32 = V_LSHR_B32_e64 %6, 4, implicit $exec364    FLAT_STORE_DWORD %20, %22, 0, 0, implicit $exec, implicit $flat_scr365 366    %23:vgpr_32 = V_LSHR_B32_e64 %6, %30, implicit $exec367    FLAT_STORE_DWORD %20, %23, 0, 0, implicit $exec, implicit $flat_scr368 369    %25:vgpr_32 = V_LSHR_B32_e32 %31, %31, implicit $exec370    FLAT_STORE_DWORD %20, %25, 0, 0, implicit $exec, implicit $flat_scr371 372    %26:vgpr_32 = V_LSHRREV_B32_e32 11, %10, implicit $exec373    FLAT_STORE_DWORD %20, %26, 0, 0, implicit $exec, implicit $flat_scr374 375    %28:vgpr_32 = V_LSHR_B32_e32 %27, %32, implicit $exec376    FLAT_STORE_DWORD %20, %28, 0, 0, implicit $exec, implicit $flat_scr377    S_ENDPGM 0378 379...380---381# There is only an undef use operand for %1, so there is no382# corresponding defining instruction383 384# GCN-LABEL: name: undefined_vreg_operand{{$}}385# GCN: bb.0386# GCN-NEXT: FLAT_STORE_DWORD undef %3:vreg_64, undef %2:vgpr_32,387# GCN-NEXT: S_ENDPGM 0388name: undefined_vreg_operand389tracksRegLiveness: true390body:             |391  bb.0:392    %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec393    %2:vgpr_32 = V_XOR_B32_e64 killed %0, undef %1:vgpr_32, implicit $exec394    FLAT_STORE_DWORD undef %3:vreg_64, %2, 0, 0, implicit $exec, implicit $flat_scr395    S_ENDPGM 0396 397...398---399# Make sure there is no crash if one of the operands is a physical register400# GCN-LABEL: name: constant_fold_physreg_op{{$}}401# GCN: %3:sreg_64 = S_AND_B64 $exec, 0, implicit-def dead $scc402 403name: constant_fold_physreg_op404tracksRegLiveness: true405body:             |406  bb.0:407    successors: %bb.1, %bb.3408    liveins: $vgpr0, $sgpr4_sgpr5409 410    %19:sreg_64 = IMPLICIT_DEF411    %0:sreg_64 = SI_IF killed %19, %bb.3, implicit-def dead $exec, implicit-def dead $scc, implicit $exec412    S_BRANCH %bb.1413 414  bb.1:415    %6:sreg_64 = S_MOV_B64 0416    %7:sreg_64 = S_AND_B64 $exec, killed %6, implicit-def dead $scc417    $vcc = COPY %7418 419  bb.3:420    liveins: $vcc421    SI_END_CF %0, implicit-def dead $exec, implicit-def dead $scc, implicit $exec422    S_ENDPGM 0, implicit $vcc423 424...425---426# GCN-LABEL: name: s_fold_andn2_imm_regimm_32{{$}}427# GCN: [[VAL:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1233024, implicit $exec428# GCN: BUFFER_STORE_DWORD_OFFSET killed [[VAL]],429name:            s_fold_andn2_imm_regimm_32430tracksRegLiveness: true431liveins:432  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }433body:             |434  bb.0:435    liveins: $sgpr0_sgpr1436 437    %0:sgpr_64 = COPY $sgpr0_sgpr1438    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0439    %2:sreg_32_xm0 = COPY %1.sub1440    %3:sreg_32_xm0 = COPY %1.sub0441    %4:sreg_32_xm0 = S_MOV_B32 61440442    %5:sreg_32_xm0 = S_MOV_B32 -1443    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.sub0, killed %3, %subreg.sub1, killed %4, %subreg.sub2, killed %5, %subreg.sub3444    %7:sreg_32_xm0 = S_MOV_B32 1234567445    %8:sreg_32_xm0 = S_MOV_B32 9999446    %9:sreg_32_xm0 = S_ANDN2_B32 killed %7, killed %8, implicit-def dead $scc447    %10:vgpr_32 = COPY %9448    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec449    S_ENDPGM 0450 451...452---453 454# GCN-LABEL: name: s_fold_or_imm_regimm_32{{$}}455# GCN: %10:vgpr_32 = V_MOV_B32_e32 1243023, implicit $exec456# GCN: BUFFER_STORE_DWORD_OFFSET killed %10,457name:            s_fold_or_imm_regimm_32458alignment:       0459exposesReturnsTwice: false460legalized:       false461regBankSelected: false462selected:        false463tracksRegLiveness: true464liveins:465  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }466body:             |467  bb.0:468    liveins: $sgpr0_sgpr1469 470    %0:sgpr_64 = COPY $sgpr0_sgpr1471    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0472    %2:sreg_32_xm0 = COPY %1.sub1473    %3:sreg_32_xm0 = COPY %1.sub0474    %4:sreg_32_xm0 = S_MOV_B32 61440475    %5:sreg_32_xm0 = S_MOV_B32 -1476    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.sub0, killed %3, %subreg.sub1, killed %4, %subreg.sub2, killed %5, %subreg.sub3477    %7:sreg_32_xm0 = S_MOV_B32 1234567478    %8:sreg_32_xm0 = S_MOV_B32 9999479    %9:sreg_32_xm0 = S_OR_B32 killed %7, killed %8, implicit-def dead $scc480    %10:vgpr_32 = COPY %9481    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec482    S_ENDPGM 0483 484...485---486 487# GCN-LABEL: name: v_fold_or_imm_regimm_32{{$}}488 489# GCN: %14:vgpr_32 = V_MOV_B32_e32 1234903, implicit $exec490# GCN: FLAT_STORE_DWORD %10, %14,491 492# GCN: %15:vgpr_32 = V_MOV_B32_e32 1234903, implicit $exec493# GCN: FLAT_STORE_DWORD %10, %15494 495# GCN: %16:vgpr_32 = V_MOV_B32_e32 1234903, implicit $exec496# GCN: FLAT_STORE_DWORD %10, %16,497 498# GCN: %17:vgpr_32 = V_MOV_B32_e32 1234567, implicit $exec499# GCN: FLAT_STORE_DWORD %10, %17,500 501# GCN: %18:vgpr_32 = V_MOV_B32_e32 63, implicit $exec502# GCN: FLAT_STORE_DWORD %10, %18,503 504name:            v_fold_or_imm_regimm_32505alignment:       0506exposesReturnsTwice: false507legalized:       false508regBankSelected: false509selected:        false510tracksRegLiveness: true511liveins:512  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }513  - { reg: '$vgpr0', virtual-reg: '%3' }514body:             |515  bb.0:516    liveins: $sgpr0_sgpr1, $vgpr0517 518    %3:vgpr_32 = COPY $vgpr0519    %0:sgpr_64 = COPY $sgpr0_sgpr1520    %4:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0521    %13:vgpr_32 = V_ASHRREV_I32_e64 31, %3, implicit $exec522    %14:vreg_64 = REG_SEQUENCE %3, %subreg.sub0, %13, %subreg.sub1523    %15:vreg_64 = V_LSHLREV_B64_e64 2, killed %14, implicit $exec524    %5:sreg_32_xm0 = COPY %4.sub1525    %20:vgpr_32 = V_ADD_CO_U32_e32 %4.sub0, %15.sub0, implicit-def $vcc, implicit $exec526    %18:vgpr_32 = COPY killed %5527    %17:vgpr_32 = V_ADDC_U32_e32 %15.sub1, %18, implicit-def $vcc, implicit $vcc, implicit $exec528    %19:vreg_64 = REG_SEQUENCE %20, %subreg.sub0, killed %17, %subreg.sub1529    %6:vgpr_32 = V_MOV_B32_e32 982, implicit $exec530    %8:sreg_32_xm0 = S_MOV_B32 1234567531    %16:vgpr_32 = V_MOV_B32_e32 63, implicit $exec532    %9:vgpr_32 = V_OR_B32_e64 %8, %6, implicit $exec533    FLAT_STORE_DWORD %19, %9, 0, 0, implicit $exec, implicit $flat_scr534    %10:vgpr_32 = V_OR_B32_e64 %6, %8, implicit $exec535    FLAT_STORE_DWORD %19, %10, 0, 0, implicit $exec, implicit $flat_scr536    %11:vgpr_32 = V_OR_B32_e32 %8, %6, implicit $exec537    FLAT_STORE_DWORD %19, %11, 0, 0, implicit $exec, implicit $flat_scr538    %12:vgpr_32 = V_OR_B32_e64 %8, %8, implicit $exec539    FLAT_STORE_DWORD %19, %12, 0, 0, implicit $exec, implicit $flat_scr540    %21:vgpr_32 = V_OR_B32_e64 %16, %16, implicit $exec541    FLAT_STORE_DWORD %19, %21, 0, 0, implicit $exec, implicit $flat_scr542    S_ENDPGM 0543 544...545---546 547# GCN-LABEL: name: s_fold_orn2_imm_regimm_32{{$}}548# GCN: %10:vgpr_32 = V_MOV_B32_e32 -8457, implicit $exec549# GCN: BUFFER_STORE_DWORD_OFFSET killed %10,550name:            s_fold_orn2_imm_regimm_32551alignment:       0552exposesReturnsTwice: false553legalized:       false554regBankSelected: false555selected:        false556tracksRegLiveness: true557liveins:558  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }559body:             |560  bb.0:561    liveins: $sgpr0_sgpr1562 563    %0:sgpr_64 = COPY $sgpr0_sgpr1564    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0565    %2:sreg_32_xm0 = COPY %1.sub1566    %3:sreg_32_xm0 = COPY %1.sub0567    %4:sreg_32_xm0 = S_MOV_B32 61440568    %5:sreg_32_xm0 = S_MOV_B32 -1569    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.sub0, killed %3, %subreg.sub1, killed %4, %subreg.sub2, killed %5, %subreg.sub3570    %7:sreg_32_xm0 = S_MOV_B32 1234567571    %8:sreg_32_xm0 = S_MOV_B32 9999572    %9:sreg_32_xm0 = S_ORN2_B32 killed %7, killed %8, implicit-def dead $scc573    %10:vgpr_32 = COPY %9574    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec575    S_ENDPGM 0576 577...578---579 580# GCN-LABEL: name: s_fold_nand_imm_regimm_32{{$}}581# GCN: %10:vgpr_32 = V_MOV_B32_e32 -1544, implicit $exec582# GCN: BUFFER_STORE_DWORD_OFFSET killed %10,583name:            s_fold_nand_imm_regimm_32584alignment:       0585exposesReturnsTwice: false586legalized:       false587regBankSelected: false588selected:        false589tracksRegLiveness: true590liveins:591  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }592body:             |593  bb.0:594    liveins: $sgpr0_sgpr1595 596    %0:sgpr_64 = COPY $sgpr0_sgpr1597    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0598    %2:sreg_32_xm0 = COPY %1.sub1599    %3:sreg_32_xm0 = COPY %1.sub0600    %4:sreg_32_xm0 = S_MOV_B32 61440601    %5:sreg_32_xm0 = S_MOV_B32 -1602    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.sub0, killed %3, %subreg.sub1, killed %4, %subreg.sub2, killed %5, %subreg.sub3603    %7:sreg_32_xm0 = S_MOV_B32 1234567604    %8:sreg_32_xm0 = S_MOV_B32 9999605    %9:sreg_32_xm0 = S_NAND_B32 killed %7, killed %8, implicit-def dead $scc606    %10:vgpr_32 = COPY %9607    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec608    S_ENDPGM 0609 610...611---612 613# GCN-LABEL: name: s_fold_nor_imm_regimm_32{{$}}614# GCN: %10:vgpr_32 = V_MOV_B32_e32 -1243024, implicit $exec615# GCN: BUFFER_STORE_DWORD_OFFSET killed %10,616name:            s_fold_nor_imm_regimm_32617alignment:       0618exposesReturnsTwice: false619legalized:       false620regBankSelected: false621selected:        false622tracksRegLiveness: true623liveins:624  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }625body:             |626  bb.0:627    liveins: $sgpr0_sgpr1628 629    %0:sgpr_64 = COPY $sgpr0_sgpr1630    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0631    %2:sreg_32_xm0 = COPY %1.sub1632    %3:sreg_32_xm0 = COPY %1.sub0633    %4:sreg_32_xm0 = S_MOV_B32 61440634    %5:sreg_32_xm0 = S_MOV_B32 -1635    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.sub0, killed %3, %subreg.sub1, killed %4, %subreg.sub2, killed %5, %subreg.sub3636    %7:sreg_32_xm0 = S_MOV_B32 1234567637    %8:sreg_32_xm0 = S_MOV_B32 9999638    %9:sreg_32_xm0 = S_NOR_B32 killed %7, killed %8, implicit-def dead $scc639    %10:vgpr_32 = COPY %9640    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec641    S_ENDPGM 0642 643...644---645 646# GCN-LABEL: name: s_fold_xnor_imm_regimm_32{{$}}647# GCN: %10:vgpr_32 = V_MOV_B32_e32 -1241481, implicit $exec648# GCN: BUFFER_STORE_DWORD_OFFSET killed %10,649name:            s_fold_xnor_imm_regimm_32650alignment:       0651exposesReturnsTwice: false652legalized:       false653regBankSelected: false654selected:        false655tracksRegLiveness: true656liveins:657  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }658body:             |659  bb.0:660    liveins: $sgpr0_sgpr1661 662    %0:sgpr_64 = COPY $sgpr0_sgpr1663    %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0664    %2:sreg_32_xm0 = COPY %1.sub1665    %3:sreg_32_xm0 = COPY %1.sub0666    %4:sreg_32_xm0 = S_MOV_B32 61440667    %5:sreg_32_xm0 = S_MOV_B32 -1668    %6:sgpr_128 = REG_SEQUENCE killed %2, %subreg.sub0, killed %3, %subreg.sub1, killed %4, %subreg.sub2, killed %5, %subreg.sub3669    %7:sreg_32_xm0 = S_MOV_B32 1234567670    %8:sreg_32_xm0 = S_MOV_B32 9999671    %9:sreg_32_xm0 = S_XNOR_B32 killed %7, killed %8, implicit-def dead $scc672    %10:vgpr_32 = COPY %9673    BUFFER_STORE_DWORD_OFFSET killed %10, killed %6, 0, 0, 0, 0, implicit $exec674    S_ENDPGM 0675 676...677 678---679# GCN-LABEL: name: v_fold_shl_imm_regimm_32{{$}}680 681# GCN: %16:vgpr_32 = V_MOV_B32_e32 40955904, implicit $exec682# GCN: FLAT_STORE_DWORD %10, %16,683 684# GCN: %17:vgpr_32 = V_MOV_B32_e32 24, implicit $exec685# GCN: FLAT_STORE_DWORD %10, %17,686 687# GCN: %18:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec688# GCN: FLAT_STORE_DWORD %10, %18,689 690# GCN: %19:vgpr_32 = V_MOV_B32_e32 24, implicit $exec691# GCN: FLAT_STORE_DWORD %10, %19,692 693# GCN: %20:vgpr_32 = V_MOV_B32_e32 0, implicit $exec694# GCN: FLAT_STORE_DWORD %10, %20,695 696# GCN: %21:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec697# GCN: FLAT_STORE_DWORD %10, %21,698 699# GCN: %22:vgpr_32 = V_MOV_B32_e32 1, implicit $exec700# GCN: FLAT_STORE_DWORD %10, %22,701 702# GCN: %23:vgpr_32 = V_MOV_B32_e32 2, implicit $exec703# GCN: FLAT_STORE_DWORD %10, %23,704 705# GCN: %24:vgpr_32 = V_MOV_B32_e32 7927808, implicit $exec706# GCN: FLAT_STORE_DWORD %10, %24,707 708# GCN: %25:vgpr_32 = V_MOV_B32_e32 -8, implicit $exec709# GCN: FLAT_STORE_DWORD %10, %25,710 711name:            v_fold_shl_imm_regimm_32712alignment:       0713exposesReturnsTwice: false714legalized:       false715regBankSelected: false716selected:        false717tracksRegLiveness: true718liveins:719  - { reg: '$sgpr0_sgpr1', virtual-reg: '%0' }720  - { reg: '$vgpr0', virtual-reg: '%2' }721body:             |722  bb.0:723    liveins: $sgpr0_sgpr1, $vgpr0724 725    %2:vgpr_32 = COPY $vgpr0726    %0:sgpr_64 = COPY $sgpr0_sgpr1727    %3:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0 :: (non-temporal dereferenceable invariant load (s64) from `ptr addrspace(4) poison`, addrspace 4)728    %15:vgpr_32 = V_ASHRREV_I32_e64 31, %2, implicit $exec729    %16:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %15, %subreg.sub1730    %17:vreg_64 = V_LSHLREV_B64_e64 2, killed %16, implicit $exec731    %9:sreg_32_xm0 = COPY %3.sub1732    %21:vgpr_32 = V_ADD_CO_U32_e32 %3.sub0, %17.sub0, implicit-def $vcc, implicit $exec733    %19:vgpr_32 = COPY killed %9734    %18:vgpr_32 = V_ADDC_U32_e32 %17.sub1, %19, implicit-def $vcc, implicit $vcc, implicit $exec735    %20:vreg_64 = REG_SEQUENCE %21, %subreg.sub0, killed %18, %subreg.sub1736    %10:vgpr_32 = V_MOV_B32_e32 9999, implicit $exec737    %24:vgpr_32 = V_MOV_B32_e32 3871, implicit $exec738    %6:vgpr_32 = V_MOV_B32_e32 1, implicit $exec739    %7:sreg_32_xm0 = S_MOV_B32 1740    %27:sreg_32_xm0 = S_MOV_B32 -4741    %11:vgpr_32 = V_LSHLREV_B32_e64 12, %10, implicit $exec742    FLAT_STORE_DWORD %20, %11, 0, 0, implicit $exec, implicit $flat_scr743    %12:vgpr_32 = V_LSHLREV_B32_e64 %7, 12, implicit $exec744    FLAT_STORE_DWORD %20, %12, 0, 0, implicit $exec, implicit $flat_scr745    %13:vgpr_32 = V_LSHL_B32_e64 %7, 12, implicit $exec746    FLAT_STORE_DWORD %20, %13, 0, 0, implicit $exec, implicit $flat_scr747    %14:vgpr_32 = V_LSHL_B32_e64 12, %7, implicit $exec748    FLAT_STORE_DWORD %20, %14, 0, 0, implicit $exec, implicit $flat_scr749    %30:vgpr_32 = V_LSHL_B32_e64 12, %24, implicit $exec750    FLAT_STORE_DWORD %20, %30, 0, 0, implicit $exec, implicit $flat_scr751    %22:vgpr_32 = V_LSHL_B32_e64 %6, 12, implicit $exec752    FLAT_STORE_DWORD %20, %22, 0, 0, implicit $exec, implicit $flat_scr753    %23:vgpr_32 = V_LSHL_B32_e64 %6, 32, implicit $exec754    FLAT_STORE_DWORD %20, %23, 0, 0, implicit $exec, implicit $flat_scr755    %25:vgpr_32 = V_LSHL_B32_e32 %6, %6, implicit $exec756    FLAT_STORE_DWORD %20, %25, 0, 0, implicit $exec, implicit $flat_scr757    %26:vgpr_32 = V_LSHLREV_B32_e32 11, %24, implicit $exec758    FLAT_STORE_DWORD %20, %26, 0, 0, implicit $exec, implicit $flat_scr759    %28:vgpr_32 = V_LSHL_B32_e32 %27, %6, implicit $exec760    FLAT_STORE_DWORD %20, %28, 0, 0, implicit $exec, implicit $flat_scr761    S_ENDPGM 0762 763...764 765# This used to incorrectly interpret V_MOV_B32_sdwa as being a move766# immediate, and interpreting the src0_modifiers field as a767# materialized immediate.768 769---770# GCN-LABEL: name: no_fold_sdwa_mov_imm771# GCN: %2:vgpr_32 = V_MOV_B32_sdwa 0, %0, 0, 5, 2, 4, implicit $exec, implicit %0(tied-def 0)772# GCN-NEXT: [[SHIFT:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, %2, implicit $exec773# GCN-NEXT: S_ENDPGM 0, implicit [[SHIFT]]774 775name:            no_fold_sdwa_mov_imm776alignment:       0777exposesReturnsTwice: false778legalized:       false779regBankSelected: false780selected:        false781tracksRegLiveness: true782 783body:             |784  bb.0:785    liveins: $vgpr0786    %0:vgpr_32 = COPY $vgpr0787    %1:vgpr_32 = V_MOV_B32_e32 16, implicit $exec788    %2:vgpr_32 = V_MOV_B32_sdwa 0, %0:vgpr_32, 0, 5, 2, 4, implicit $exec, implicit %0:vgpr_32(tied-def 0)789    %3:vgpr_32 = V_MOV_B32_e32 16, implicit $exec790    %4:vgpr_32 = V_LSHRREV_B32_e64 %3:vgpr_32, %2:vgpr_32, implicit $exec791    S_ENDPGM 0, implicit %4792 793...794 795---796name:            constant_s_and_b32_only_implicit_def_scc_is_used797tracksRegLiveness: true798body:             |799  bb.0:800    ; GCN-LABEL: name: constant_s_and_b32_only_implicit_def_scc_is_used801    ; GCN: [[S_AND_B32_:%[0-9]+]]:sgpr_32 = S_AND_B32 32, 15, implicit-def $scc802    ; GCN-NEXT: S_ENDPGM 0, implicit $scc803    %0:sgpr_32 = S_MOV_B32 32804    %1:sgpr_32 = S_MOV_B32 15805    %2:sgpr_32 = S_AND_B32 %0, %1, implicit-def $scc806    S_ENDPGM 0, implicit $scc807 808...809 810---811name:            constant_s_and_b32_implicit_def_scc_is_used812tracksRegLiveness: true813body:             |814  bb.0:815    ; GCN-LABEL: name: constant_s_and_b32_implicit_def_scc_is_used816    ; GCN: [[S_AND_B32_:%[0-9]+]]:sgpr_32 = S_AND_B32 32, 15, implicit-def $scc817    ; GCN-NEXT: S_ENDPGM 0, implicit [[S_AND_B32_]], implicit $scc818    %0:sgpr_32 = S_MOV_B32 32819    %1:sgpr_32 = S_MOV_B32 15820    %2:sgpr_32 = S_AND_B32 %0, %1, implicit-def $scc821    S_ENDPGM 0, implicit %2, implicit $scc822 823...824 825---826name:            constant_s_and_b32_only_implicit_def_scc_is_dead827tracksRegLiveness: true828body:             |829  bb.0:830    ; GCN-LABEL: name: constant_s_and_b32_only_implicit_def_scc_is_dead831    ; GCN: S_ENDPGM 0, implicit undef $scc832    %0:sgpr_32 = S_MOV_B32 32833    %1:sgpr_32 = S_MOV_B32 15834    %2:sgpr_32 = S_AND_B32 %0, %1, implicit-def dead $scc835    S_ENDPGM 0, implicit undef $scc836 837...838 839---840name:            constant_s_or_b32_only_implicit_def_scc_is_used841tracksRegLiveness: true842body:             |843  bb.0:844    ; GCN-LABEL: name: constant_s_or_b32_only_implicit_def_scc_is_used845    ; GCN: [[S_OR_B32_:%[0-9]+]]:sgpr_32 = S_OR_B32 32, 15, implicit-def $scc846    ; GCN-NEXT: S_ENDPGM 0, implicit $scc847    %0:sgpr_32 = S_MOV_B32 32848    %1:sgpr_32 = S_MOV_B32 15849    %2:sgpr_32 = S_OR_B32 %0, %1, implicit-def $scc850    S_ENDPGM 0, implicit $scc851 852...853 854---855name:            constant_s_xor_b32_only_implicit_def_scc_is_used856tracksRegLiveness: true857body:             |858  bb.0:859    ; GCN-LABEL: name: constant_s_xor_b32_only_implicit_def_scc_is_used860    ; GCN: [[S_XOR_B32_:%[0-9]+]]:sgpr_32 = S_XOR_B32 32, 15, implicit-def $scc861    ; GCN-NEXT: S_ENDPGM 0, implicit $scc862    %0:sgpr_32 = S_MOV_B32 32863    %1:sgpr_32 = S_MOV_B32 15864    %2:sgpr_32 = S_XOR_B32 %0, %1, implicit-def $scc865    S_ENDPGM 0, implicit $scc866 867...868 869---870name:            constant_s_not_b32_only_implicit_def_scc_is_used871tracksRegLiveness: true872body:             |873  bb.0:874    ; GCN-LABEL: name: constant_s_not_b32_only_implicit_def_scc_is_used875    ; GCN: [[S_NOT_B32_:%[0-9]+]]:sgpr_32 = S_NOT_B32 32, implicit-def $scc876    ; GCN-NEXT: S_ENDPGM 0, implicit $scc877    %0:sgpr_32 = S_MOV_B32 32878    %1:sgpr_32 = S_NOT_B32 %0, implicit-def $scc879    S_ENDPGM 0, implicit $scc880 881...882 883# Really really implicit operand884---885name:            constant_v_and_b32_implicit_def_scc_is_used886tracksRegLiveness: true887body:             |888  bb.0:889    ; GCN-LABEL: name: constant_v_and_b32_implicit_def_scc_is_used890    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 15, implicit $exec891    ; GCN-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 32, [[V_MOV_B32_e32_]], implicit $exec, implicit-def $scc892    ; GCN-NEXT: S_ENDPGM 0, implicit $scc893    %0:vgpr_32 = V_MOV_B32_e32 32, implicit $exec894    %1:vgpr_32 = V_MOV_B32_e32 15, implicit $exec895    %2:vgpr_32 = V_AND_B32_e32 %0, %1, implicit $exec, implicit-def $scc896    S_ENDPGM 0, implicit $scc897 898...899 900---901name:            constant_v_and_b32_implicit_def_vreg_is_used902tracksRegLiveness: true903body:             |904  bb.0:905    ; GCN-LABEL: name: constant_v_and_b32_implicit_def_vreg_is_used906    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 15, implicit $exec907    ; GCN-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 32, [[V_MOV_B32_e32_]], implicit $exec, implicit-def %3908    ; GCN-NEXT: S_ENDPGM 0, implicit %3909    %0:vgpr_32 = V_MOV_B32_e32 32, implicit $exec910    %1:vgpr_32 = V_MOV_B32_e32 15, implicit $exec911    %2:vgpr_32 = V_AND_B32_e32 %0, %1, implicit $exec, implicit-def %3:vgpr_32912    S_ENDPGM 0, implicit %3913 914...915---916name:            constant_v_and_b32_implicit_use917tracksRegLiveness: true918body:             |919  bb.0:920    ; GCN-LABEL: name: constant_v_and_b32_implicit_use921    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec922    ; GCN-NEXT: S_ENDPGM 0, implicit [[V_MOV_B32_e32_]]923    %0:vgpr_32 = V_MOV_B32_e32 32, implicit $exec924    %1:vgpr_32 = V_MOV_B32_e32 15, implicit $exec925    %2:vgpr_32 = V_MOV_B32_e32 24, implicit $exec926    %3:vgpr_32 = V_AND_B32_e32 %0, %1, implicit $exec, implicit %2:vgpr_32927    S_ENDPGM 0, implicit %3928 929...930 931---932name:            constant_s_xor_b32_uses_subreg933tracksRegLiveness: true934body:             |935  bb.0:936    ; GCN-LABEL: name: constant_s_xor_b32_uses_subreg937    ; GCN: [[S_MOV_B32_:%[0-9]+]]:sgpr_32 = S_MOV_B32 47938    ; GCN-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sgpr_32 = S_MOV_B32 0939    ; GCN-NEXT: S_ENDPGM 0, implicit [[S_MOV_B32_]], implicit [[S_MOV_B32_1]]940    %0:sreg_64 = S_MOV_B64 32941    %1:sreg_64 = S_MOV_B64 15942    %2:sgpr_32 = S_XOR_B32 %0.sub0, %1.sub0, implicit-def dead $scc943    %3:sgpr_32 = S_XOR_B32 %0.sub1, %1.sub1, implicit-def dead $scc944    S_ENDPGM 0, implicit %2, implicit %3945 946...947 948---949name:            constant_v_or_b32_uses_subreg950tracksRegLiveness: true951body:             |952  bb.0:953    ; GCN-LABEL: name: constant_v_or_b32_uses_subreg954    ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 268435455, implicit $exec955    ; GCN-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec956    ; GCN-NEXT: S_ENDPGM 0, implicit [[V_MOV_B32_e32_]], implicit [[V_MOV_B32_e32_1]]957    %0:vreg_64 = V_MOV_B64_PSEUDO 18446744069683019775, implicit $exec958    %1:vreg_64 = V_MOV_B64_PSEUDO 0, implicit $exec959    %2:vgpr_32 = V_OR_B32_e32 %0.sub0, %1.sub0, implicit $exec960    %3:vgpr_32 = V_OR_B32_e32 %0.sub1, %1.sub1, implicit $exec961    S_ENDPGM 0, implicit %2, implicit %3962 963...964 965---966name:            constant_v_or_b32_uses_subreg_or_0_regression967tracksRegLiveness: true968body:             |969  bb.0:970  liveins: $vgpr0, $vgpr1971 972    ; GCN-LABEL: name: constant_v_or_b32_uses_subreg_or_0_regression973    ; GCN: liveins: $vgpr0, $vgpr1974    ; GCN-NEXT: {{  $}}975    ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1976    ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]]977    ; GCN-NEXT: S_ENDPGM 0, implicit [[COPY1]]978  %0:vgpr_32 = COPY $vgpr0979  %1:vgpr_32 = COPY $vgpr1980  %2:vgpr_32 = V_MOV_B32_e32 0, implicit $exec981  %3:vreg_64 = REG_SEQUENCE %2:vgpr_32, %subreg.sub0, %0:vgpr_32, %subreg.sub1982  %4:vgpr_32 = V_OR_B32_e64 %3.sub0:vreg_64, %1, implicit $exec983  S_ENDPGM 0, implicit %4984 985...986