https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66288
--- Comment #1 from vries at gcc dot gnu.org ---
Note that for the example from PR66285, with INDEX_TYPE long/unsigned long, we
vectorize without run-time aliasing test.
In that example, we start out with two restrict pointers. During aliasing, we
determine clique and base:
...
# VUSE <.MEM_23>
_9 = MEM[(doubleD.32 *)_8 clique 1 base 2];
_10 = _9 * 1.2199289457264239899814128875732421875e+1;
# .MEM_11 = VDEF <.MEM_23>
MEM[(doubleD.32 *)_6 clique 1 base 1] = _10;
...
That information is preserved after function splitoff due to parallelization:
...
# VUSE <.MEM_32>
_28 = MEM[(doubleD.32 *)_27 clique 1 base 2];
_29 = _28 * 1.2199289457264239899814128875732421875e+1;
# .MEM_35 = VDEF <.MEM_32>
MEM[(doubleD.32 *)_26 clique 1 base 1] = _29;
...
So the dependence clique is used to do disambiguation.