https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97396
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amacleod at redhat dot com --- Comment #2 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- In bounds_of_var_in_loop, evolution_part_in_loop_num is returning NULL: step = evolution_part_in_loop_num (chrec, loop->num); and we ICE while trying to calculate the range for STEP. This is for: (gdb) dd stmt qx.0_3 = PHI <qx.0_1(3)> (gdb) dd var qx.0_3 I'm not familiar with the SCEV code. It looks like NULL is a perfectly valid response from evolution_part_in_loop_num. Should we just bail if NULL? diff --git a/gcc/vr-values.c b/gcc/vr-values.c index da0b249278b..16f6c629f29 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -1827,6 +1827,8 @@ bounds_of_var_in_loop (tree *min, tree *max, range_query *query, init = initial_condition_in_loop_num (chrec, loop->num); step = evolution_part_in_loop_num (chrec, loop->num); + if (step == NULL_TREE) + return false; /* If INIT is an SSA with a singleton range, set INIT to said singleton, otherwise leave INIT alone. */