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