This removes the duplicate (TARGET_POWERPC64 && size == 16) block. Bootstrapped and regression tested powerpc64le-linux.
* config/rs6000/rs6000.c (rs6000_secondary_reload_direct_move): Delete duplicated code. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index c16863d..5b9aae2 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -19599,50 +19599,11 @@ rs6000_secondary_reload_direct_move (enum rs6000_reg_type to_type, int cost = 0; int size = GET_MODE_SIZE (mode); - if (TARGET_POWERPC64) - { - if (size == 16) - { - /* Handle moving 128-bit values from GPRs to VSX point registers on - ISA 2.07 (power8, power9) when running in 64-bit mode using - XXPERMDI to glue the two 64-bit values back together. */ - if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE) - { - cost = 3; /* 2 mtvsrd's, 1 xxpermdi. */ - icode = reg_addr[mode].reload_vsx_gpr; - } - - /* Handle moving 128-bit values from VSX point registers to GPRs on - ISA 2.07 when running in 64-bit mode using XXPERMDI to get access to the - bottom 64-bit value. */ - else if (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE) - { - cost = 3; /* 2 mfvsrd's, 1 xxpermdi. */ - icode = reg_addr[mode].reload_gpr_vsx; - } - } - - else if (mode == SFmode) - { - if (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE) - { - cost = 3; /* xscvdpspn, mfvsrd, and. */ - icode = reg_addr[mode].reload_gpr_vsx; - } - - else if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE) - { - cost = 2; /* mtvsrz, xscvspdpn. */ - icode = reg_addr[mode].reload_vsx_gpr; - } - } - } - if (TARGET_POWERPC64 && size == 16) { /* Handle moving 128-bit values from GPRs to VSX point registers on - ISA 2.07 when running in 64-bit mode using XXPERMDI to glue the two - 64-bit values back together. */ + ISA 2.07 (power8, power9) when running in 64-bit mode using + XXPERMDI to glue the two 64-bit values back together. */ if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE) { cost = 3; /* 2 mtvsrd's, 1 xxpermdi. */ @@ -19659,6 +19620,21 @@ rs6000_secondary_reload_direct_move (enum rs6000_reg_type to_type, } } + else if (TARGET_POWERPC64 && mode == SFmode) + { + if (to_type == GPR_REG_TYPE && from_type == VSX_REG_TYPE) + { + cost = 3; /* xscvdpspn, mfvsrd, and. */ + icode = reg_addr[mode].reload_gpr_vsx; + } + + else if (to_type == VSX_REG_TYPE && from_type == GPR_REG_TYPE) + { + cost = 2; /* mtvsrz, xscvspdpn. */ + icode = reg_addr[mode].reload_vsx_gpr; + } + } + else if (!TARGET_POWERPC64 && size == 8) { /* Handle moving 64-bit values from GPRs to floating point registers on -- Alan Modra Australia Development Lab, IBM