Hi all, This is a gentle ping.
Regards, Radosav On 7/15/26 19:03, Radosav Krunic wrote: > It tunes ifcvt parameters so that we get if-conversion in more cases. > > gcc/ > > * config/mips/mips.cc (mips_rtx_costs): Reduce cost of > if_then_else pattern. > (mips_max_noce_ifcvt_seq_cost): New function. Decrease > maximum permissible cost for the unconditional sequence which > should be generated during if-conversion (for all non-r6 > targets). This disables if-conversion for non-r6 targets in > branch-cost-1.c test. > (TARGET_MAX_NOCE_IFCVT_SEQ_COST): Define hook. > > gcc/testsuite/ > > * gcc.target/mips/branch-cost-1.c: Disable for -Os. > > Signed-off-by: Dragan Mladjenovic <[email protected]> > Signed-off-by: Mihailo Stojanovic <[email protected]> > Signed-off-by: Faraz Shahbazker <[email protected]> > Signed-off-by: Aleksandar Rakic <[email protected]> > Signed-off-by: Radosav Krunic <[email protected]> > --- > v4: Fix the formatting and remove the conversion_profitable_hook. > > gcc/config/mips/mips.cc | 34 +++++++++++++++++++ > gcc/testsuite/gcc.target/mips/branch-cost-1.c | 2 +- > 2 files changed, 35 insertions(+), 1 deletion(-) > > diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc > index 80828ed20af..9d7c86fffca 100644 > --- a/gcc/config/mips/mips.cc > +++ b/gcc/config/mips/mips.cc > @@ -67,6 +67,7 @@ along with GCC; see the file COPYING3. If not see > #include "rtl-iter.h" > #include "flags.h" > #include "opts.h" > +#include "ifcvt.h" > > /* This file should be included last. */ > #include "target-def.h" > @@ -4796,6 +4797,12 @@ mips_rtx_costs (rtx x, machine_mode mode, int > outer_code, > } > return false; > > + case IF_THEN_ELSE: > + if (reg_or_0_operand (XEXP (x, 1), VOIDmode) > + || reg_or_0_operand (XEXP (x, 2), VOIDmode)) > + *total = 0; > + return false; > + > default: > return false; > } > @@ -23359,6 +23366,30 @@ mips_bit_clear_p (enum machine_mode mode, unsigned > HOST_WIDE_INT m) > return false; > } > > +/* Implement TARGET_MAX_NOCE_IFCVT_SEQ_COST. */ > + > +static unsigned int > +mips_max_noce_ifcvt_seq_cost (edge e) > +{ > + bool predictable_p = predictable_edge_p (e); > + > + /* If we have a parameter set, use that, otherwise take a guess using > + BRANCH_COST. */ > + if (predictable_p) > + { > + if (OPTION_SET_P (param_max_rtl_if_conversion_predictable_cost)) > + return param_max_rtl_if_conversion_predictable_cost; > + } > + else > + { > + if (OPTION_SET_P (param_max_rtl_if_conversion_unpredictable_cost)) > + return param_max_rtl_if_conversion_unpredictable_cost; > + } > + > + return BRANCH_COST (true, predictable_p) > + * COSTS_N_INSNS (mips_isa_rev == 6 ? 4 : 3); > +} > + > /* define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY */ > > /* The MIPS function start is implemented in the prologue function. > @@ -23687,6 +23718,9 @@ mips_print_patchable_function_entry (FILE *file > ATTRIBUTE_UNUSED, > #undef TARGET_DOCUMENTATION_NAME > #define TARGET_DOCUMENTATION_NAME "MIPS" > > +#undef TARGET_MAX_NOCE_IFCVT_SEQ_COST > +#define TARGET_MAX_NOCE_IFCVT_SEQ_COST mips_max_noce_ifcvt_seq_cost > + > #undef TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY > #define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY \ > mips_print_patchable_function_entry > diff --git a/gcc/testsuite/gcc.target/mips/branch-cost-1.c > b/gcc/testsuite/gcc.target/mips/branch-cost-1.c > index 7f7ebbe5fc9..006a29a7361 100644 > --- a/gcc/testsuite/gcc.target/mips/branch-cost-1.c > +++ b/gcc/testsuite/gcc.target/mips/branch-cost-1.c > @@ -1,5 +1,5 @@ > /* { dg-options "-mbranch-cost=1 (HAS_MOVN)" } */ > -/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ > +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" "-Os" } { "" } } */ > NOMIPS16 int > foo (int x, int y, int z, int k) > {
