108 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass si-fold-operands,dead-mi-elimination %s -o - | FileCheck -check-prefix=GCN %s3 4---5 6# Uses a carry out in an instruction that can't be shrunk.7 8name: shrink_scalar_imm_vgpr_v_add_i32_e64_other_carry_out_use9tracksRegLiveness: true10 11body: |12 bb.0:13 ; GCN-LABEL: name: shrink_scalar_imm_vgpr_v_add_i32_e64_other_carry_out_use14 ; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1234515 ; GCN-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF16 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec17 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY killed $vcc18 ; GCN-NEXT: S_ENDPGM 0, implicit [[COPY]]19 %0:sreg_32_xm0 = S_MOV_B32 1234520 %1:vgpr_32 = IMPLICIT_DEF21 %2:vgpr_32 = IMPLICIT_DEF22 %3:vgpr_32 = IMPLICIT_DEF23 24 %4:vgpr_32, %5:sreg_64_xexec = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec25 S_ENDPGM 0, implicit %526 27...28---29 30name: shrink_scalar_imm_multi_use_with_used_carry31tracksRegLiveness: true32 33body: |34 bb.0:35 ; GCN-LABEL: name: shrink_scalar_imm_multi_use_with_used_carry36 ; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1234537 ; GCN-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF38 ; GCN-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF39 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec40 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY killed $vcc41 ; GCN-NEXT: [[V_ADD_CO_U32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[DEF1]], implicit-def $vcc, implicit $exec42 ; GCN-NEXT: S_ENDPGM 0, implicit [[COPY]], implicit [[V_ADD_CO_U32_e32_1]]43 %0:sreg_32_xm0 = S_MOV_B32 1234544 %1:vgpr_32 = IMPLICIT_DEF45 %2:vgpr_32 = IMPLICIT_DEF46 %3:vgpr_32 = IMPLICIT_DEF47 %4:vgpr_32 = IMPLICIT_DEF48 49 %5:vgpr_32, %6:sreg_64_xexec = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec50 %7:vgpr_32, %8:sreg_64_xexec = V_ADD_CO_U32_e64 %0, %2, 0, implicit $exec51 S_ENDPGM 0, implicit %6, implicit %752 53...54---55 56# TODO: Is it OK to leave the broken use around on the DBG_VALUE?57 58name: shrink_scalar_imm_vgpr_v_add_i32_e64_dbg_only_carry_out_use59tracksRegLiveness: true60 61body: |62 bb.0:63 ; GCN-LABEL: name: shrink_scalar_imm_vgpr_v_add_i32_e64_dbg_only_carry_out_use64 ; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1234565 ; GCN-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF66 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec67 ; GCN-NEXT: DBG_VALUE %5:sreg_64_xexec, $noreg68 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]69 %0:sreg_32_xm0 = S_MOV_B32 1234570 %1:vgpr_32 = IMPLICIT_DEF71 %2:vgpr_32 = IMPLICIT_DEF72 %3:vgpr_32 = IMPLICIT_DEF73 74 %4:vgpr_32, %5:sreg_64_xexec = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec75 DBG_VALUE %5, $noreg76 S_ENDPGM 0, implicit %477 78...79 80---81 82# Uses carry out in a normal pattern83 84name: shrink_scalar_imm_vgpr_v_add_i32_e64_carry_out_use85tracksRegLiveness: true86 87body: |88 bb.0:89 ; GCN-LABEL: name: shrink_scalar_imm_vgpr_v_add_i32_e64_carry_out_use90 ; GCN: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 1234591 ; GCN-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF92 ; GCN-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF93 ; GCN-NEXT: [[DEF2:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF94 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[DEF]], implicit-def $vcc, implicit $exec95 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64_xexec = COPY killed $vcc96 ; GCN-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[DEF1]], [[DEF2]], [[COPY]], 0, implicit $exec97 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADDC_U32_e64_]]98 %0:sreg_32_xm0 = S_MOV_B32 1234599 %1:vgpr_32 = IMPLICIT_DEF100 %2:vgpr_32 = IMPLICIT_DEF101 %3:vgpr_32 = IMPLICIT_DEF102 103 %4:vgpr_32, %5:sreg_64_xexec = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec104 %6:vgpr_32, %7:sreg_64_xexec = V_ADDC_U32_e64 %2, %3, %5, 0, implicit $exec105 S_ENDPGM 0, implicit %6106 107...108