On Fri, 19 Jan 2024, Jakub Jelinek wrote: > Hi! > > builtin_memref::extend_offset_range when it sees a NOP_EXPR from > INTEGRAL_TYPE (to INTEGRAL_TYPE of sizetype/ptrdifftype precision > given the callers) uses wi::to_offset on TYPE_{MIN,MAX}_VALUE > of the rhs1 type. This ICEs with large BITINT_TYPEs - to_offset > is only supported for precisions up to the offset_int precision > - but it even doesn't make any sense to do such thing for narrowing > conversions, their range means the whole sizetype/ptrdifftype range > and so the normal handling done later on (largest sized supported object) > is the way to go in that case. > > So, the following patch just restrict this to non-narrowing conversions. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK. > 2024-01-19 Jakub Jelinek <ja...@redhat.com> > > PR tree-optimization/113463 > * gimple-ssa-warn-restrict.cc (builtin_memref::extend_offset_range): > Only look through NOP_EXPRs if rhs1 doesn't have wider type than > lhs. > > * gcc.dg/bitint-74.c: New test. > > --- gcc/gimple-ssa-warn-restrict.cc.jj 2024-01-03 11:51:27.705784291 > +0100 > +++ gcc/gimple-ssa-warn-restrict.cc 2024-01-18 16:00:02.519483821 +0100 > @@ -391,7 +391,8 @@ builtin_memref::extend_offset_range (tre > tree type; > if (is_gimple_assign (stmt) > && (type = TREE_TYPE (gimple_assign_rhs1 (stmt))) > - && INTEGRAL_TYPE_P (type)) > + && INTEGRAL_TYPE_P (type) > + && TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (offset))) > { > tree_code code = gimple_assign_rhs_code (stmt); > if (code == NOP_EXPR) > --- gcc/testsuite/gcc.dg/bitint-74.c.jj 2024-01-18 16:14:05.523599054 > +0100 > +++ gcc/testsuite/gcc.dg/bitint-74.c 2024-01-18 16:13:30.150099638 +0100 > @@ -0,0 +1,16 @@ > +/* PR tree-optimization/113463 */ > +/* { dg-do compile { target bitint } } */ > +/* { dg-options "-std=c23 -O2" } */ > + > +extern char *a, *b; > +#if __BITINT_MAXWIDTH__ >= 129 > +_BitInt(129) o; > +#else > +_BitInt(63) o; > +#endif > + > +void > +foo (void) > +{ > + __builtin_memcpy (a + o, b, 4); > +} > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)