On Sun, May 16, 2021 at 7:35 PM apinski--- via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > From: Andrew Pinski <apin...@marvel.com> > > While rewriting part of PHI-OPT to use match-and-simplify, > I ran into a bug where this pattern in match.pd would hit > and would produce invalid gimple; a shift of a pointer type. > > This just disables this simplification for pointer types similarly > to what is already done in PHI-OPT for the generic A ? D : 0 case. > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. > > Thanks, > Andrew Pinski > > gcc/ChangeLog: > * match.pd ((A & C) != 0 ? D : 0): Limit to non pointer types. > > gcc/testsuite/ChangeLog: > * testsuite/gcc.dg/gimplefe-45.c: New testcase. > --- > gcc/match.pd | 2 +- > gcc/testsuite/gcc.dg/gimplefe-45.c | 19 +++++++++++++++++++ > 2 files changed, 20 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/gimplefe-45.c > > diff --git a/gcc/match.pd b/gcc/match.pd > index cdb87636951..10503b97ab5 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -4830,7 +4830,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > (cond > (ne (bit_and @0 integer_pow2p@1) integer_zerop) > INTEGER_CST@2 integer_zerop) > - (if (integer_pow2p (@2)) > + (if (!POINTER_TYPE_P (type) && integer_pow2p (@2))
Might be more natural to check INTEGRAL_TYPE_P (type) && integer_pow2p (@2) OK either way. Richard. > (with { > int shift = (wi::exact_log2 (wi::to_wide (@2)) > - wi::exact_log2 (wi::to_wide (@1))); > diff --git a/gcc/testsuite/gcc.dg/gimplefe-45.c > b/gcc/testsuite/gcc.dg/gimplefe-45.c > new file mode 100644 > index 00000000000..b1d3cbb0205 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/gimplefe-45.c > @@ -0,0 +1,19 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fgimple" } */ > + > +/* This used to ICE when simplifying (A & C) != 0 ? D : 0 > + for pointer types. */ > + > +int *__GIMPLE () > +p (int n) > +{ > + int *_2; > + int *_t; > + int *_t1; > + _t = (int*)8; > + _t1 = 0; > + n = n & 2; > + _2 = n != 0 ? _t : _t1; > + return _2; > +} > + > -- > 2.27.0 >