brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.1 KiB · 2bdc3f6 Raw
602 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=amdgcn -mcpu=gfx803 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX8 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX9 %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx1030 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX10 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck -check-prefixes=CHECK,GFX10 %s6 7---8name:  copy_undef9tracksRegLiveness: true10stack:11  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }12body:             |13  bb.0:14    ; CHECK-LABEL: name: copy_undef15    ; CHECK: [[COPY:%[0-9]+]]:vgpr_32 = COPY undef %2:sreg_3216    ; CHECK-NEXT: SI_RETURN implicit [[COPY]]17    %0:sreg_32 = S_MOV_B32 %stack.018    %2:vgpr_32 = COPY undef %1:sreg_3219    SI_RETURN implicit %220...21 22---23name:  fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr24tracksRegLiveness: true25stack:26  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }27body:             |28  bb.0:29    ; GFX8-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr30    ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = nuw V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec31    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]32    ;33    ; GFX9-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr34    ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e32 128, %stack.0, implicit $exec35    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]36    ;37    ; GFX10-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr38    ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e32 128, %stack.0, implicit $exec39    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]40    %0:sreg_32 = S_MOV_B32 %stack.041    %1:sreg_32 = nuw S_ADD_I32 %0, 128, implicit-def dead $scc42    %2:vgpr_32 = COPY %143    SI_RETURN implicit %244...45 46---47name:  fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr48tracksRegLiveness: true49stack:50  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }51body:             |52  bb.0:53    ; GFX8-LABEL: name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr54    ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec55    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]56    ;57    ; GFX9-LABEL: name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr58    ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec59    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]60    ;61    ; GFX10-LABEL: name: fold_s_add_i32__const_copy_mov_fi_to_virt_vgpr62    ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec63    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]64    %0:sreg_32 = S_MOV_B32 %stack.065    %1:sreg_32 = S_ADD_I32 128, %0, implicit-def dead $scc66    %2:vgpr_32 = COPY %167    SI_RETURN implicit %268...69 70---71name:  fold_s_add_i32__fi_imm_copy_to_virt_vgpr72tracksRegLiveness: true73stack:74  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }75body:             |76  bb.0:77    ; GFX8-LABEL: name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr78    ; GFX8: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = nuw V_ADD_CO_U32_e64 64, %stack.0, 0, implicit $exec79    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]80    ;81    ; GFX9-LABEL: name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr82    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec83    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]84    ;85    ; GFX10-LABEL: name: fold_s_add_i32__fi_imm_copy_to_virt_vgpr86    ; GFX10: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec87    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]88    %0:sreg_32 = nuw S_ADD_I32 %stack.0, 64, implicit-def dead $scc89    %1:vgpr_32 = COPY %090    SI_RETURN implicit %191...92 93---94name:  fold_s_add_i32__imm_fi_copy_to_virt_vgpr95tracksRegLiveness: true96stack:97  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }98body:             |99  bb.0:100    ; GFX8-LABEL: name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr101    ; GFX8: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = nuw V_ADD_CO_U32_e64 64, %stack.0, 0, implicit $exec102    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]103    ;104    ; GFX9-LABEL: name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr105    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec106    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]107    ;108    ; GFX10-LABEL: name: fold_s_add_i32__imm_fi_copy_to_virt_vgpr109    ; GFX10: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = nuw V_ADD_U32_e64 64, %stack.0, 0, implicit $exec110    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]111    %0:sreg_32 = nuw S_ADD_I32 64, %stack.0, implicit-def dead $scc112    %1:vgpr_32 = COPY %0113    SI_RETURN implicit %1114...115 116---117name:  fold_s_add_i32__mov_fi_const_copy_to_phys_vgpr118tracksRegLiveness: true119stack:120  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }121body:             |122  bb.0:123    ; CHECK-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_phys_vgpr124    ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def dead $scc125    ; CHECK-NEXT: $vgpr0 = COPY [[S_ADD_I32_]]126    ; CHECK-NEXT: SI_RETURN implicit $vgpr0127    %0:sreg_32 = S_MOV_B32 %stack.0128    %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def dead $scc129    $vgpr0 = COPY %1130    SI_RETURN implicit $vgpr0131...132 133---134name:  fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc135tracksRegLiveness: true136stack:137  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }138body:             |139  bb.0:140    liveins: $vcc141    ; GFX8-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc142    ; GFX8: liveins: $vcc143    ; GFX8-NEXT: {{  $}}144    ; GFX8-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def dead $scc145    ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]146    ; GFX8-NEXT: SI_RETURN implicit [[COPY]], implicit $vcc147    ;148    ; GFX9-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc149    ; GFX9: liveins: $vcc150    ; GFX9-NEXT: {{  $}}151    ; GFX9-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec152    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]], implicit $vcc153    ;154    ; GFX10-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_vcc155    ; GFX10: liveins: $vcc156    ; GFX10-NEXT: {{  $}}157    ; GFX10-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec158    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]], implicit $vcc159    %0:sreg_32 = S_MOV_B32 %stack.0160    %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def dead $scc161    %2:vgpr_32 = COPY %1162    SI_RETURN implicit %2, implicit $vcc163...164 165---166name:  fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_scc167tracksRegLiveness: true168frameInfo:169  maxAlignment:    4170  localFrameSize:  16384171stack:172  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }173body:             |174  bb.0:175    ; CHECK-LABEL: name: fold_s_add_i32__mov_fi_const_copy_to_virt_vgpr_live_scc176    ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def $scc177    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_ADD_I32_]]178    ; CHECK-NEXT: SI_RETURN implicit [[COPY]], implicit $scc179    %0:sreg_32 = S_MOV_B32 %stack.0180    %1:sreg_32 = S_ADD_I32 %0, 128, implicit-def $scc181    %2:vgpr_32 = COPY %1182    SI_RETURN implicit %2, implicit $scc183...184 185---186name:  fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr187tracksRegLiveness: true188stack:189  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }190body:             |191  bb.0:192    liveins: $sgpr8193 194    ; GFX8-LABEL: name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr195    ; GFX8: liveins: $sgpr8196    ; GFX8-NEXT: {{  $}}197    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8198    ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec199    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]200    ;201    ; GFX9-LABEL: name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr202    ; GFX9: liveins: $sgpr8203    ; GFX9-NEXT: {{  $}}204    ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8205    ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec206    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]207    ;208    ; GFX10-LABEL: name: fold_s_add_i32__mov_fi_reg_copy_to_virt_vgpr209    ; GFX10: liveins: $sgpr8210    ; GFX10-NEXT: {{  $}}211    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8212    ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec213    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]214    %0:sreg_32 = COPY $sgpr8215    %1:sreg_32 = S_MOV_B32 %stack.0216    %2:sreg_32 = S_ADD_I32 %0, %1, implicit-def dead $scc217    %3:vgpr_32 = COPY %2218    SI_RETURN implicit %3219...220 221 222---223name:  fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr224tracksRegLiveness: true225stack:226  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }227body:             |228  bb.0:229    liveins: $sgpr8230 231    ; GFX8-LABEL: name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr232    ; GFX8: liveins: $sgpr8233    ; GFX8-NEXT: {{  $}}234    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8235    ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec236    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]237    ;238    ; GFX9-LABEL: name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr239    ; GFX9: liveins: $sgpr8240    ; GFX9-NEXT: {{  $}}241    ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8242    ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec243    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]244    ;245    ; GFX10-LABEL: name: fold_s_add_i32__reg_copy_mov_fi_to_virt_vgpr246    ; GFX10: liveins: $sgpr8247    ; GFX10-NEXT: {{  $}}248    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8249    ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec250    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]251    %0:sreg_32 = COPY $sgpr8252    %1:sreg_32 = S_MOV_B32 %stack.0253    %2:sreg_32 = S_ADD_I32 %1, %0, implicit-def dead $scc254    %3:vgpr_32 = COPY %2255    SI_RETURN implicit %3256...257 258---259name:  fold_s_add_i32__fi_fi_copy_to_virt_vgpr260tracksRegLiveness: true261stack:262  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }263  - { id: 1, size: 16384, alignment: 4, local-offset: 0 }264body:             |265  bb.0:266    ; CHECK-LABEL: name: fold_s_add_i32__fi_fi_copy_to_virt_vgpr267    ; CHECK: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, %stack.1, implicit-def dead $scc268    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[COPY]]269    ; CHECK-NEXT: SI_RETURN implicit [[COPY]]270    %0:sreg_32 = S_ADD_I32 %stack.0, %stack.1, implicit-def dead $scc271    %1:vgpr_32 = COPY %1272    SI_RETURN implicit %1273...274 275---276name:  fold_s_add_i32__fi_const_copy_to_virt_vgpr277tracksRegLiveness: true278stack:279  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }280body:             |281  bb.0:282    ; GFX8-LABEL: name: fold_s_add_i32__fi_const_copy_to_virt_vgpr283    ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec284    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]285    ;286    ; GFX9-LABEL: name: fold_s_add_i32__fi_const_copy_to_virt_vgpr287    ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec288    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]289    ;290    ; GFX10-LABEL: name: fold_s_add_i32__fi_const_copy_to_virt_vgpr291    ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec292    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]293    %0:sreg_32 = S_ADD_I32 %stack.0, 128, implicit-def dead $scc294    %1:vgpr_32 = COPY %0295    SI_RETURN implicit %1296...297 298---299name:  fold_s_add_i32__const_fi_copy_to_virt_vgpr300tracksRegLiveness: true301stack:302  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }303body:             |304  bb.0:305    ; GFX8-LABEL: name: fold_s_add_i32__const_fi_copy_to_virt_vgpr306    ; GFX8: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 128, %stack.0, implicit-def dead $vcc, implicit $exec307    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e32_]]308    ;309    ; GFX9-LABEL: name: fold_s_add_i32__const_fi_copy_to_virt_vgpr310    ; GFX9: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec311    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]312    ;313    ; GFX10-LABEL: name: fold_s_add_i32__const_fi_copy_to_virt_vgpr314    ; GFX10: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 128, %stack.0, implicit $exec315    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e32_]]316    %0:sreg_32 = S_ADD_I32 128, %stack.0, implicit-def dead $scc317    %1:vgpr_32 = COPY %0318    SI_RETURN implicit %1319...320 321---322name:  fold_s_add_i32__fi_reg_copy_to_virt_vgpr323tracksRegLiveness: true324stack:325  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }326body:             |327  bb.0:328    liveins: $sgpr8329    ; GFX8-LABEL: name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr330    ; GFX8: liveins: $sgpr8331    ; GFX8-NEXT: {{  $}}332    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8333    ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec334    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]335    ;336    ; GFX9-LABEL: name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr337    ; GFX9: liveins: $sgpr8338    ; GFX9-NEXT: {{  $}}339    ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8340    ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec341    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]342    ;343    ; GFX10-LABEL: name: fold_s_add_i32__fi_reg_copy_to_virt_vgpr344    ; GFX10: liveins: $sgpr8345    ; GFX10-NEXT: {{  $}}346    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8347    ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec348    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]349    %0:sreg_32 = COPY $sgpr8350    %1:sreg_32 = S_ADD_I32 %stack.0, %0, implicit-def dead $scc351    %2:vgpr_32 = COPY %1352    SI_RETURN implicit %2353...354 355---356name:  fold_s_add_i32__reg_fi_copy_to_virt_vgpr357tracksRegLiveness: true358stack:359  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }360body:             |361  bb.0:362    liveins: $sgpr8363    ; GFX8-LABEL: name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr364    ; GFX8: liveins: $sgpr8365    ; GFX8-NEXT: {{  $}}366    ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8367    ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], %stack.0, 0, implicit $exec368    ; GFX8-NEXT: SI_RETURN implicit [[V_ADD_CO_U32_e64_]]369    ;370    ; GFX9-LABEL: name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr371    ; GFX9: liveins: $sgpr8372    ; GFX9-NEXT: {{  $}}373    ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8374    ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec375    ; GFX9-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]376    ;377    ; GFX10-LABEL: name: fold_s_add_i32__reg_fi_copy_to_virt_vgpr378    ; GFX10: liveins: $sgpr8379    ; GFX10-NEXT: {{  $}}380    ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr8381    ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], %stack.0, 0, implicit $exec382    ; GFX10-NEXT: SI_RETURN implicit [[V_ADD_U32_e64_]]383    %0:sreg_32 = COPY $sgpr8384    %1:sreg_32 = S_ADD_I32 %0, %stack.0, implicit-def dead $scc385    %2:vgpr_32 = COPY %1386    SI_RETURN implicit %2387...388 389---390name:  fold_s_or_b32__mov_fi_const_copy_to_virt_vgpr391tracksRegLiveness: true392stack:393  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }394body:             |395  bb.0:396    ; CHECK-LABEL: name: fold_s_or_b32__mov_fi_const_copy_to_virt_vgpr397    ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0398    ; CHECK-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[S_MOV_B32_]], 128, implicit-def dead $scc399    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_OR_B32_]]400    ; CHECK-NEXT: SI_RETURN implicit [[COPY]]401    %0:sreg_32 = S_MOV_B32 %stack.0402    %1:sreg_32 = S_OR_B32 %0, 128, implicit-def dead $scc403    %2:vgpr_32 = COPY %1404    SI_RETURN implicit %2405...406 407---408name:  fold_s_or_b32__const_copy_mov_fi_to_virt_vgpr409tracksRegLiveness: true410stack:411  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }412body:             |413  bb.0:414    ; CHECK-LABEL: name: fold_s_or_b32__const_copy_mov_fi_to_virt_vgpr415    ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0416    ; CHECK-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 128, [[S_MOV_B32_]], implicit-def dead $scc417    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_OR_B32_]]418    ; CHECK-NEXT: SI_RETURN implicit [[COPY]]419    %0:sreg_32 = S_MOV_B32 %stack.0420    %1:sreg_32 = S_OR_B32 128, %0, implicit-def dead $scc421    %2:vgpr_32 = COPY %1422    SI_RETURN implicit %2423...424 425---426name:  fold_s_or_b32__fi_imm_copy_to_virt_vgpr427tracksRegLiveness: true428stack:429  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }430body:             |431  bb.0:432    ; CHECK-LABEL: name: fold_s_or_b32__fi_imm_copy_to_virt_vgpr433    ; CHECK: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = disjoint V_OR_B32_e64 64, %stack.0, implicit $exec434    ; CHECK-NEXT: SI_RETURN implicit [[V_OR_B32_e64_]]435    %0:sreg_32 = disjoint S_OR_B32 %stack.0, 64, implicit-def dead $scc436    %1:vgpr_32 = COPY %0437    SI_RETURN implicit %1438...439 440---441name:  fold_s_or_b32__imm_fi_copy_to_virt_vgpr442tracksRegLiveness: true443stack:444  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }445body:             |446  bb.0:447    ; CHECK-LABEL: name: fold_s_or_b32__imm_fi_copy_to_virt_vgpr448    ; CHECK: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = disjoint V_OR_B32_e64 64, %stack.0, implicit $exec449    ; CHECK-NEXT: SI_RETURN implicit [[V_OR_B32_e64_]]450    %0:sreg_32 = disjoint S_OR_B32 64, %stack.0, implicit-def dead $scc451    %1:vgpr_32 = COPY %0452    SI_RETURN implicit %1453...454 455---456name:  fold_s_and_b32__fi_imm_copy_to_virt_vgpr457tracksRegLiveness: true458stack:459  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }460body:             |461  bb.0:462    ; CHECK-LABEL: name: fold_s_and_b32__fi_imm_copy_to_virt_vgpr463    ; CHECK: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 64, %stack.0, implicit $exec464    ; CHECK-NEXT: SI_RETURN implicit [[V_AND_B32_e64_]]465    %0:sreg_32 = S_AND_B32 %stack.0, 64, implicit-def dead $scc466    %1:vgpr_32 = COPY %0467    SI_RETURN implicit %1468...469 470---471name:  fold_s_and_b32__fi_const_copy_to_virt_vgpr472tracksRegLiveness: true473stack:474  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }475body:             |476  bb.0:477    ; CHECK-LABEL: name: fold_s_and_b32__fi_const_copy_to_virt_vgpr478    ; CHECK: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 128, %stack.0, implicit $exec479    ; CHECK-NEXT: SI_RETURN implicit [[V_AND_B32_e32_]]480    %0:sreg_32 = S_AND_B32 %stack.0, 128, implicit-def dead $scc481    %1:vgpr_32 = COPY %0482    SI_RETURN implicit %1483...484 485---486name:  fold_s_mul_i32__fi_imm_copy_to_virt_vgpr487tracksRegLiveness: true488stack:489  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }490body:             |491  bb.0:492    ; CHECK-LABEL: name: fold_s_mul_i32__fi_imm_copy_to_virt_vgpr493    ; CHECK: [[V_MUL_LO_U32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_LO_U32_e64 64, %stack.0, implicit $exec494    ; CHECK-NEXT: SI_RETURN implicit [[V_MUL_LO_U32_e64_]]495    %0:sreg_32 = S_MUL_I32 %stack.0, 64, implicit-def dead $scc496    %1:vgpr_32 = COPY %0497    SI_RETURN implicit %1498...499 500---501name:  fold_s_mul_i32__fi_reg_copy_to_virt_vgpr502tracksRegLiveness: true503stack:504  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }505body:             |506  bb.0:507      liveins: $sgpr4508    ; CHECK-LABEL: name: fold_s_mul_i32__fi_reg_copy_to_virt_vgpr509    ; CHECK: liveins: $sgpr4510    ; CHECK-NEXT: {{  $}}511    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr4512    ; CHECK-NEXT: [[V_MUL_LO_U32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_LO_U32_e64 [[COPY]], %stack.0, implicit $exec513    ; CHECK-NEXT: SI_RETURN implicit [[V_MUL_LO_U32_e64_]]514    %0:sreg_32 = COPY $sgpr4515    %1:sreg_32 = S_MUL_I32 %stack.0, %0, implicit-def dead $scc516    %2:vgpr_32 = COPY %1517    SI_RETURN implicit %2518...519 520---521name:  fold_s_and_b32__mov_fi_const_copy_to_virt_vgpr522tracksRegLiveness: true523stack:524  - { id: 0, size: 16384, alignment: 4, local-offset: 0 }525body:             |526  bb.0:527    ; CHECK-LABEL: name: fold_s_and_b32__mov_fi_const_copy_to_virt_vgpr528    ; CHECK: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 %stack.0529    ; CHECK-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 [[S_MOV_B32_]], 128, implicit-def dead $scc530    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[S_AND_B32_]]531    ; CHECK-NEXT: SI_RETURN implicit [[COPY]]532    %0:sreg_32 = S_MOV_B32 %stack.0533    %1:sreg_32 = S_AND_B32 %0, 128, implicit-def dead $scc534    %2:vgpr_32 = COPY %1535    SI_RETURN implicit %2536...537 538# Physreg copy of %2 to $vgpr0 should not be erased539---540name: fold_fi_into_s_or_b32_user_is_physreg_copy541tracksRegLiveness: true542stack:543  - { id: 0, size: 16, alignment: 16 }544machineFunctionInfo:545  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'546  frameOffsetReg:  '$sgpr33'547  stackPtrOffsetReg: '$sgpr32'548body:             |549  ; CHECK-LABEL: name: fold_fi_into_s_or_b32_user_is_physreg_copy550  ; CHECK: bb.0:551  ; CHECK-NEXT:   successors: %bb.1(0x80000000)552  ; CHECK-NEXT:   liveins: $vgpr0_vgpr1553  ; CHECK-NEXT: {{  $}}554  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1555  ; CHECK-NEXT:   [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 %stack.0, 4, implicit-def dead $scc556  ; CHECK-NEXT:   [[S_MOV_B64_:%[0-9]+]]:sreg_64_xexec = S_MOV_B64 $exec557  ; CHECK-NEXT: {{  $}}558  ; CHECK-NEXT: bb.1:559  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)560  ; CHECK-NEXT: {{  $}}561  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[COPY]].sub0, implicit $exec562  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32_xm0 = V_READFIRSTLANE_B32 [[COPY]].sub1, implicit $exec563  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_64 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1564  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U64_e64 [[REG_SEQUENCE]], [[COPY]], implicit $exec565  ; CHECK-NEXT:   [[S_AND_SAVEEXEC_B64_:%[0-9]+]]:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed [[V_CMP_EQ_U64_e64_]], implicit-def $exec, implicit-def $scc, implicit $exec566  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32567  ; CHECK-NEXT:   $vgpr0 = COPY [[S_ADD_I32_]]568  ; CHECK-NEXT:   $sgpr30_sgpr31 = SI_CALL [[REG_SEQUENCE]], 0, csr_amdgpu, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $vgpr0569  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32570  ; CHECK-NEXT:   $exec = S_XOR_B64_term $exec, [[S_AND_SAVEEXEC_B64_]], implicit-def $scc571  ; CHECK-NEXT:   SI_WATERFALL_LOOP %bb.1, implicit $exec572  ; CHECK-NEXT: {{  $}}573  ; CHECK-NEXT: bb.2:574  ; CHECK-NEXT:   $exec = S_MOV_B64 [[S_MOV_B64_]]575  ; CHECK-NEXT:   SI_RETURN576  bb.0:577    liveins: $vgpr0_vgpr1578 579    %0:vreg_64 = COPY $vgpr0_vgpr1580    %1:sreg_32 = S_MOV_B32 %stack.0581    %2:sreg_32 = S_ADD_I32 killed %1, 4, implicit-def dead $scc582    %3:sreg_64_xexec = S_MOV_B64 $exec583 584  bb.1:585    %4:sreg_32_xm0 = V_READFIRSTLANE_B32 %0.sub0, implicit $exec586    %5:sreg_32_xm0 = V_READFIRSTLANE_B32 %0.sub1, implicit $exec587    %6:sgpr_64 = REG_SEQUENCE %4, %subreg.sub0, %5, %subreg.sub1588    %7:sreg_64_xexec = V_CMP_EQ_U64_e64 %6, %0, implicit $exec589    %8:sreg_64_xexec = S_AND_SAVEEXEC_B64 killed %7, implicit-def $exec, implicit-def $scc, implicit $exec590    ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32591    $vgpr0 = COPY %2592    $sgpr30_sgpr31 = SI_CALL %6, 0, csr_amdgpu, implicit $sgpr0_sgpr1_sgpr2_sgpr3, implicit $vgpr0593    ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32594    $exec = S_XOR_B64_term $exec, %8, implicit-def $scc595    SI_WATERFALL_LOOP %bb.1, implicit $exec596 597  bb.2:598    $exec = S_MOV_B64 %3599    SI_RETURN600 601...602