Richard Sandiford <[email protected]> writes:
> Robin Dapp via Gcc-patches <[email protected]> writes:
>> [...]
>> @@ -386,9 +390,29 @@ try_conditional_simplification (internal_fn ifn,
>> gimple_match_op *res_op,
>> default:
>> gcc_unreachable ();
>> }
>> - *res_op = cond_op;
>> - maybe_resimplify_conditional_op (seq, res_op, valueize);
>> - return true;
>> +
>> + if (len)
>> + {
>> + /* If we had a COND_LEN before we need to ensure that it stays that
>> + way. */
>> + gimple_match_op old_op = *res_op;
>> + *res_op = cond_op;
>> + maybe_resimplify_conditional_op (seq, res_op, valueize);
>> +
>> + auto cfn = combined_fn (res_op->code);
>> + if (internal_fn_p (cfn)
>> + && internal_fn_len_index (as_internal_fn (cfn)) != -1)
>> + return true;
>
> Why isn't it enough to check the result of maybe_resimplify_conditional_op?
Sorry, ignore that part. I get it now.
But isn't the test whether res_op->code itself is an internal_function?
In other words, shouldn't it just be:
if (internal_fn_p (res_op->code)
&& internal_fn_len_index (as_internal_fn (res_op->code)) != -1)
return true;
maybe_resimplify_conditional_op should already have converted to an
internal function where possible, and if combined_fn (res_op->code)
does any extra conversion on the fly, that conversion won't be reflected
in res_op.
Thanks,
Richard