https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80198
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org Last reconfirmed|2017-03-27 00:00:00 |2021-1-27 --- Comment #19 from Richard Biener <rguenth at gcc dot gnu.org> --- So I think when you consider void __attribute__((noinline)) fun(int * a, int * b, int c) { int i; for (i=0; i < 256; i++) { a[i] = b[i] | c; } } we can improve the versioning condition to allow a dependence distance of zero. Likewise with void __attribute__((noipa)) generic(int * a, int * b, int c) { int i; a = __builtin_assume_aligned (a, 16); b = __builtin_assume_aligned (b, 16); for (i=0; i < 256; i++) { a[i] = b[i] | c; } } we fail to realize no versioning check is required - the distance is either zero or a multiple of 16. Richard - ISTR you added some alignment considerations to the alias versioning code, but it doesn't seem to help?