On 7/11/26 00:32, Jeffrey Law wrote:
>
> On 6/30/2026 12:19 PM, 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.
>>       (mips_noce_conversion_profitable_p): New function.
>>       (TARGET_MAX_NOCE_IFCVT_SEQ_COST): Define hook.
>>       (TARGET_NOCE_CONVERSION_PROFITABLE_P): Define hook.
>>
>> gcc/testsuite/
>>
>>       * gcc.target/mips/branch-cost-1.c: Disable for -Os.
> Note this is MIPS specific, so in an ideal world someone more familiar
> with MIPS targets would step in with an ACK or list of things to fix.
> In the absence of that feedback...
>
>
>> gcc/config/mips/mips.cc                       | 56 +++++++++++++++++++
>>   gcc/testsuite/gcc.target/mips/branch-cost-1.c |  2 +-
>>   2 files changed, 57 insertions(+), 1 deletion(-)
>>
>> diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc
>> index 277ec419826..81a41b8ee3a 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"
>> @@ -4795,6 +4796,12 @@ mips_rtx_costs (rtx x, machine_mode mode, int 
>> outer_code,
>>         break;
>>       }
>>         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;
> Formatting looks wrong here.  Make sure the case IF_THEN_ELSE lines up
> with other cases in that switch.  The IF should be indented two spaces
> relative to the case label and so-on following GNU style guidelines.
>
>>
>>
>> +
>> +/* Return true if SEQ is a good candidate as a replacement for the
>> +   if-convertible sequence described in IF_INFO.  */
>> +
>> +static bool
>> +mips_noce_conversion_profitable_p (rtx_insn *seq, struct 
>> noce_if_info *if_info)
>> +{
>> +  struct noce_if_info mips_if_info = *if_info;
>> +
>> +    for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
>> +    {
>> +    /* Compensate target-specific costs by incrementing original_cost
>> +       (mips_if_info.original_cost) and max_seq_costif 
>> (mips_if_info.ax_seq_costif) */
>> +      break;
>> +    }
>> +
>> +  return default_noce_conversion_profitable_p(seq, &mips_if_info);
> So is this hook definition really doing anything useful?  It doesn't
> really do anything with the insns in the sequence and just seems to hand
> back off to the generic variant.  Am I missing something? Formatting
> nit.  if we're keeping this code there's always supposed to be a space
> between the function name and the open paren for its arguments.
>
> Basically it seems sensible from an overall structure standpoint. I
> can't really comment on the cost model as I haven't done meaningful work
> on mips in probably 20 years at this point.   THe biggest issue I see is
> the conversion_profitable_hook seems pointless and should probably just
> be removed unless there's a followup which is going to improve it 
> further.
>
> jeff 

Hi Jeff,

Thanks for the comments and sorry for the delayed response.

I'll fix the formatting and remove the conversion_profitable_hook, as it is
unnecessary in v4.

Best regards,
Radosav

Reply via email to