https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80815
--- Comment #1 from amker at gcc dot gnu.org --- GCC uses vect_factor as minimal segment length for dr_b when merging alias pairs, I think it could be relaxed to vect_factor * abs (DR_STEP (dr_b)). Below test shows this change can merge additional alias checks: #include <stdio.h> int arr[2048]; int foo (int *a, int *b, int len) { int i; int *a1 = a; int *a0 = a1 - 4; for (i = 0; i < len; i++) { *b = *a0 + *a1; b--; a0++; a1++; } return 0; } int main (void) { int *a = &arr[1027]; int *b = &arr[1024]; int i; for (i = 0; i < 2048; i++) arr[i] = i; foo (a, b, 500); for (i = 0; i < 2048; i++) fprintf (stdout, "%d: %d\n", i, arr[i]); return 0; } $ ./gcc -Ofast -fno-inline ./z.c -o z.exe -fdump-tree-vect-details Of course, alias check should fail and vectorized loop in foo should never be executed. Thanks,