# RUN: llc -march=amdgcn -mcpu=tonga -run-pass=gcn-dpp-combine -o - %s | FileCheck %s # test if $old definition is correctly tracked through subreg manipulation pseudos --- # CHECK-LABEL: name: mul_old_subreg # CHECK: %7:vgpr_32 = V_MUL_I32_I24_dpp %0.sub1, %1, %0.sub1, 1, 1, 1, 0, implicit $exec name: mul_old_subreg tracksRegLiveness: true registers: - { id: 0, class: vreg_64 } - { id: 1, class: vgpr_32 } - { id: 2, class: vgpr_32 } - { id: 3, class: vgpr_32 } - { id: 4, class: vreg_64 } - { id: 5, class: vreg_64 } - { id: 6, class: vgpr_32 } - { id: 7, class: vgpr_32 } liveins: - { reg: '$vgpr0', virtual-reg: '%0' } - { reg: '$vgpr1', virtual-reg: '%1' } body: | bb.0: liveins: $vgpr0, $vgpr1 %0:vreg_64 = COPY $vgpr0 %1:vgpr_32 = COPY $vgpr1 %2:vgpr_32 = V_MOV_B32_e32 1, implicit $exec %3:vgpr_32 = V_MOV_B32_e32 42, implicit $exec %4 = REG_SEQUENCE %2, %subreg.sub0, %3, %subreg.sub1 %5 = INSERT_SUBREG %4, %1, %subreg.sub1 ; %5.sub0 is taken from %4 %6:vgpr_32 = V_MOV_B32_dpp %5.sub0, %1, 1, 1, 1, 0, implicit $exec %7:vgpr_32 = V_MUL_I32_I24_e32 %6, %0.sub1, implicit $exec ... # CHECK-LABEL: name: add_old_subreg # CHECK: [[OLD:\%[0-9]+]]:vgpr_32 = IMPLICIT_DEF # CHECK: %5:vgpr_32 = V_ADD_U32_dpp [[OLD]], %1, %0.sub1, 1, 1, 1, 1, implicit $exec name: add_old_subreg tracksRegLiveness: true registers: - { id: 0, class: vreg_64 } - { id: 1, class: vgpr_32 } - { id: 2, class: vgpr_32 } - { id: 3, class: vreg_64 } - { id: 4, class: vgpr_32 } - { id: 5, class: vgpr_32 } liveins: - { reg: '$vgpr0', virtual-reg: '%0' } - { reg: '$vgpr1', virtual-reg: '%1' } body: | bb.0: liveins: $vgpr0, $vgpr1 %0:vreg_64 = COPY $vgpr0 %1:vgpr_32 = COPY $vgpr1 %2:vgpr_32 = V_MOV_B32_e32 0, implicit $exec %3:vreg_64 = INSERT_SUBREG %0, %2, %subreg.sub1 ; %3.sub1 is inserted %4:vgpr_32 = V_MOV_B32_dpp %3.sub1, %1, 1, 1, 1, 0, implicit $exec %5:vgpr_32 = V_ADD_U32_e32 %4, %0.sub1, implicit $exec ... # CHECK-LABEL: name: add_old_subreg_undef # CHECK: %5:vgpr_32 = V_ADD_U32_dpp %3.sub1, %1, %0.sub1, 1, 1, 1, 0, implicit $exec name: add_old_subreg_undef tracksRegLiveness: true registers: - { id: 0, class: vreg_64 } - { id: 1, class: vgpr_32 } - { id: 2, class: vgpr_32 } - { id: 3, class: vreg_64 } - { id: 4, class: vgpr_32 } - { id: 5, class: vgpr_32 } liveins: - { reg: '$vgpr0', virtual-reg: '%0' } - { reg: '$vgpr1', virtual-reg: '%1' } body: | bb.0: liveins: $vgpr0, $vgpr1 %0:vreg_64 = COPY $vgpr0 %1:vgpr_32 = COPY $vgpr1 %2:vgpr_32 = V_MOV_B32_e32 0, implicit $exec %3:vreg_64 = REG_SEQUENCE %2, %subreg.sub0 ; %3.sub1 is undef %4:vgpr_32 = V_MOV_B32_dpp %3.sub1, %1, 1, 1, 1, 0, implicit $exec %5:vgpr_32 = V_ADD_U32_e32 %4, %0.sub1, implicit $exec ... # CHECK-LABEL: name: add_f32_e64 # CHECK: %3:vgpr_32 = V_MOV_B32_dpp undef %2, %1, 1, 1, 1, 1, implicit $exec # CHECK: %4:vgpr_32 = V_ADD_F32_e64 0, %3, 0, %0, 0, 1, implicit $exec # CHECK: %6:vgpr_32 = V_ADD_F32_dpp %2, 0, %1, 0, %0, 1, 1, 1, 1, implicit $exec # CHECK: %7:vgpr_32 = V_ADD_F32_dpp %2, 1, %1, 2, %0, 1, 1, 1, 1, implicit $exec # CHECK: %9:vgpr_32 = V_ADD_F32_e64 4, %8, 8, %0, 0, 0, implicit $exec name: add_f32_e64 tracksRegLiveness: true registers: - { id: 0, class: vgpr_32 } - { id: 1, class: vgpr_32 } - { id: 2, class: vgpr_32 } - { id: 3, class: vgpr_32 } - { id: 4, class: vgpr_32 } - { id: 5, class: vgpr_32 } - { id: 6, class: vgpr_32 } - { id: 7, class: vgpr_32 } - { id: 8, class: vgpr_32 } - { id: 9, class: vgpr_32 } liveins: - { reg: '$vgpr0', virtual-reg: '%0' } - { reg: '$vgpr1', virtual-reg: '%1' } body: | bb.0: liveins: $vgpr0, $vgpr1 %0:vgpr_32 = COPY $vgpr0 %1:vgpr_32 = COPY $vgpr1 %2:vgpr_32 = IMPLICIT_DEF %3:vgpr_32 = V_MOV_B32_dpp undef %2, %1, 1, 1, 1, 1, implicit $exec ; this shouldn't be combined as omod is set %4:vgpr_32 = V_ADD_F32_e64 0, %3, 0, %0, 0, 1, implicit $exec %5:vgpr_32 = V_MOV_B32_dpp undef %2, %1, 1, 1, 1, 1, implicit $exec ; this should be combined as all modifiers are default %6:vgpr_32 = V_ADD_F32_e64 0, %5, 0, %0, 0, 0, implicit $exec ; this should be combined as modifiers other than abs|neg are default %7:vgpr_32 = V_ADD_F32_e64 1, %5, 2, %0, 0, 0, implicit $exec %8:vgpr_32 = V_MOV_B32_dpp undef %2, %1, 1, 1, 1, 1, implicit $exec ; this shouldn't be combined as modifiers aren't abs|neg %9:vgpr_32 = V_ADD_F32_e64 4, %8, 8, %0, 0, 0, implicit $exec ...