On Sat, Jun 19, 2021 at 11:43 PM apinski--- via Gcc-patches
<[email protected]> wrote:
>
> From: Andrew Pinski <[email protected]>
>
> While converting some fold_cond_expr_with_comparison
> to match, I found that I wanted to use "for cnd (cond vec_cond)"
> but that was not causing the lowering of cond to happen.
> What was happening was the lowering of the for loop
> was happening after the lowering of the cond. So
> swapping was the correct thing to do but it also
> means we need to copy for_subst_vec in lower_cond.
>
> OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.
OK. Can you please put a comment before for lowering that says
why it's performed before cond lowering and also why it is safe
(for substitution delay does not happen for cond/vec_cond).
Thanks,
Richard.
> gcc/ChangeLog:
>
> * genmatch.c (lower_cond): Copy for_subst_vec
> for the simplify also.
> (lower): Swap the order for lower_for and lower_cond.
> ---
> gcc/genmatch.c | 24 ++++++++++++------------
> 1 file changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/gcc/genmatch.c b/gcc/genmatch.c
> index 4d47672..3aee3dd 100644
> --- a/gcc/genmatch.c
> +++ b/gcc/genmatch.c
> @@ -1306,6 +1306,7 @@ lower_cond (simplify *s, vec<simplify *>& simplifiers)
> {
> simplify *ns = new simplify (s->kind, s->id, matchers[i], s->result,
> s->for_vec, s->capture_ids);
> + ns->for_subst_vec.safe_splice (s->for_subst_vec);
> simplifiers.safe_push (ns);
> }
> }
> @@ -1543,24 +1544,23 @@ static void
> lower (vec<simplify *>& simplifiers, bool gimple)
> {
> auto_vec<simplify *> out_simplifiers;
> - for (unsigned i = 0; i < simplifiers.length (); ++i)
> - lower_opt (simplifiers[i], out_simplifiers);
> + for (auto s: simplifiers)
> + lower_opt (s, out_simplifiers);
>
> simplifiers.truncate (0);
> - for (unsigned i = 0; i < out_simplifiers.length (); ++i)
> - lower_commutative (out_simplifiers[i], simplifiers);
> + for (auto s: out_simplifiers)
> + lower_commutative (s, simplifiers);
>
> out_simplifiers.truncate (0);
> - if (gimple)
> - for (unsigned i = 0; i < simplifiers.length (); ++i)
> - lower_cond (simplifiers[i], out_simplifiers);
> - else
> - out_simplifiers.safe_splice (simplifiers);
> -
> + for (auto s: simplifiers)
> + lower_for (s, out_simplifiers);
>
> simplifiers.truncate (0);
> - for (unsigned i = 0; i < out_simplifiers.length (); ++i)
> - lower_for (out_simplifiers[i], simplifiers);
> + if (gimple)
> + for (auto s: out_simplifiers)
> + lower_cond (s, simplifiers);
> + else
> + simplifiers.safe_splice (out_simplifiers);
> }
>
>
> --
> 1.8.3.1
>