Richard Sandiford <richard.sandif...@arm.com> writes: > Robin Dapp via Gcc-patches <gcc-patches@gcc.gnu.org> 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