On Sun, 26 Oct 2025, Andrew Pinski wrote:
> On Sat, Oct 25, 2025 at 2:54 AM Tamar Christina <[email protected]>
> wrote:
> >
> > The new building APIs e.g. gimple_build APIs at the moment ICE if you try to
> > build a PHI node without all the arguments set yet. However this workflow
> > is
> > quite common, especially in the vectorizer.
> >
> > This change allows this case by just not folding the PHI is any argument is
> > missing as we don't know the value, we also don't know if it's nonnegative.
> >
> > Bootstrapped Regtested on aarch64-none-linux-gnu,
> > arm-none-linux-gnueabihf, x86_64-pc-linux-gnu
> > -m32, -m64 and no issues
> >
> > Ok for master?
>
> I ran into the same issue before and Richi rejected a similar patch; I
> was also checking if the ssa name was in the free list.
>
> See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120280#c10 and afterwards .
>
> That is the match.pd patterns are broken for not passing down the
> valueizer and checking the results there. I have not looked into
> cleaning up the mess either :(.
Heh, so I did forget this older advice but in the end I have to agree
with myself. The PR hints at a solution with the #define - I'll note
that tree_single_nonnegative_warnv_p already has a partial workaround
for some issues with checking name_registered_for_update_p.
Partially invalid IL _is_ a problem for SSA walking things, I wonder to
what extent we can avoid this here though - short of putting temporary
PHI args in there, but those would need to be reliably 'VARYING' in
all senses which is difficult - putting in error_mark_node might
do the trick?
Richard.
> Thanks,
> Andrew
>
> >
> > Thanks,
> > Tamar
> >
> > gcc/ChangeLog:
> >
> > * gimple-fold.cc (gimple_phi_nonnegative_warnv_p): If the arguments
> > aren't defined, then return false.
> >
> > ---
> > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
> > index
> > edcc04adc08cf15cff36d436caa31c0cfbff8f9a..bed760b9c0d538e2f874f5a1263a0d2db5486a86
> > 100644
> > --- a/gcc/gimple-fold.cc
> > +++ b/gcc/gimple-fold.cc
> > @@ -11386,7 +11386,9 @@ gimple_phi_nonnegative_warnv_p (gimple *stmt, bool
> > *strict_overflow_p,
> > for (unsigned i = 0; i < gimple_phi_num_args (stmt); ++i)
> > {
> > tree arg = gimple_phi_arg_def (stmt, i);
> > - if (!tree_single_nonnegative_warnv_p (arg, strict_overflow_p, depth
> > + 1))
> > + if (!arg
> > + || !tree_single_nonnegative_warnv_p (arg, strict_overflow_p,
> > + depth + 1))
> > return false;
> > }
> > return true;
> >
> >
> > --
>
--
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)