https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92301
--- Comment #7 from Martin Liška <marxin at gcc dot gnu.org> --- Even easier, use the following self-contained test-case: $ cat /tmp/vect.c unsigned int m; struct df_reg_info { unsigned int n_regs; }; #define N 128 struct df_reg_info a[N]; unsigned int __attribute__((noipa)) df_count_refs (bool include_defs) { unsigned int regno; int size = 0; for (regno = 0; regno < m; regno++) { if (include_defs) size += a[regno].n_regs; } return size; } int main(int argc, char **argv) { for (unsigned i = 0; i < N; i++) { a[i].n_regs = i; } if (argc == 1) m = 17; unsigned int r = df_count_refs(true); __builtin_printf ("r: %d\n", r); if (r != 136) __builtin_abort (); return 0; } $ marxin@marxinbox:/dev/shm/objdir/gcc> g++ /tmp/vect.c -march=haswell -O0 && ./a.out r: 136 marxin@marxinbox:/dev/shm/objdir/gcc> g++ /tmp/vect.c -march=haswell -O3 && ./a.out r: 17 Aborted (core dumped)