https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106408
Bug ID: 106408 Summary: PRE with infinite loops Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- int array[10000]; volatile int val; int test(short *b,int s) { for (int i = 0; i<10000;i++) { for (int j = 0; j < 10; j+=s) val++; array[i]+=*b; } } shows we PRE the *b load from both GIMPLE and RTL PRE across the possibly infinite loop (with s == 0). The function makes progress by means of the volatile access which is considered I/O.