https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111878
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|[14 Regression] ICE: in |[14 Regression] ICE: in |get_loop_exit_edges, at |get_loop_exit_edges, at |cfgloop.cc:1204 with -O3 |cfgloop.cc:1204 with -O3 |-fgraphite-identity |-fgraphite-identity |-fsave-optimization-record |-fsave-optimization-record/ | |-fdump-tree-graphite --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- If we wrap the whole function inside a loop, there is no crash. That is: ``` int long_c2i_ltmp; int *long_c2i_cont; void long_c2i (long utmp, int i) { for(int j = 0; j < 100; j++) { int neg = 1; switch (long_c2i_cont[0]) case 0: neg = 0; for (; i; i++) if (neg) utmp |= long_c2i_cont[i] ^ 5; else utmp |= long_c2i_cont[i]; long_c2i_ltmp = utmp; } } ``` That is because the loop that is being chosen here for the `->loop_father` is the outer most loop (that was just added).