On Thu, 7 May 2026, Tamar Christina wrote:

> This patch is a NFC, but while working on the second patch I noticed that when
> folding an expression in a gassign in SCEV we check whether it's a unary or
> binary operation and then individually analyze the components and then fold 
> the
> results using the original operator.
> 
> SCEV however can already handle expressions recursively in instantiate_scev_r,
> so this is replicating some code.
> 
> Instead convert the gimple to a tree expression with gimple_assign_rhs_to_tree
> and pass that to instantiate_scev_r.
> 
> I will note that gimple_assign_rhs_to_tree also handle ternary expressions.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu,
> arm-none-linux-gnueabihf, x86_64-pc-linux-gnu
> -m32, -m64 and no issues.
> 
> Ok for master?

Nope.  gimple_assign_rhs_to_tree shouldn't be used, it's going to waste
GC memory here.

Sure, this results in "redundant" handling of both GIMPLE and
GENERIC, but so be it ...

> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       * tree-scalar-evolution.cc (instantiate_scev_name): Use
>       gimple_assign_rhs_to_tree.
> 
> ---
> diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc
> index 
> f524786f33be6ae46f04c68c796610a8ecfafede..710a40921acf15b3dd1b130629c38083e551c2be
>  100644
> --- a/gcc/tree-scalar-evolution.cc
> +++ b/gcc/tree-scalar-evolution.cc
> @@ -281,6 +281,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "dumpfile.h"
>  #include "tree-ssa-propagate.h"
>  #include "gimple-fold.h"
> +#include "cfgexpand.h"
>  #include "tree-into-ssa.h"
>  #include "builtins.h"
>  #include "case-cfn-macros.h"
> @@ -2385,40 +2386,9 @@ instantiate_scev_name (edge instantiate_below,
>      {
>        gimple *def = SSA_NAME_DEF_STMT (chrec);
>        if (gassign *ass = dyn_cast <gassign *> (def))
> -     {
> -       switch (gimple_assign_rhs_class (ass))
> -         {
> -         case GIMPLE_UNARY_RHS:
> -           {
> -             tree op0 = instantiate_scev_r (instantiate_below, 
> evolution_loop,
> -                                            inner_loop, gimple_assign_rhs1 
> (ass),
> -                                            fold_conversions, size_expr);
> -             if (op0 == chrec_dont_know)
> -               return chrec_dont_know;
> -             res = fold_build1 (gimple_assign_rhs_code (ass),
> -                                TREE_TYPE (chrec), op0);
> -             break;
> -           }
> -         case GIMPLE_BINARY_RHS:
> -           {
> -             tree op0 = instantiate_scev_r (instantiate_below, 
> evolution_loop,
> -                                            inner_loop, gimple_assign_rhs1 
> (ass),
> -                                            fold_conversions, size_expr);
> -             if (op0 == chrec_dont_know)
> -               return chrec_dont_know;
> -             tree op1 = instantiate_scev_r (instantiate_below, 
> evolution_loop,
> -                                            inner_loop, gimple_assign_rhs2 
> (ass),
> -                                            fold_conversions, size_expr);
> -             if (op1 == chrec_dont_know)
> -               return chrec_dont_know;
> -             res = fold_build2 (gimple_assign_rhs_code (ass),
> -                                TREE_TYPE (chrec), op0, op1);
> -             break;
> -           }
> -         default:
> -           res = chrec_dont_know;
> -         }
> -     }
> +     res = instantiate_scev_r (instantiate_below, evolution_loop,
> +                               inner_loop, gimple_assign_rhs_to_tree (ass),
> +                               fold_conversions, size_expr);
>        else
>       res = chrec_dont_know;
>        global_cache->set (si, res);
> 
> 
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to