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.2199999999999999289457264239899814128875732421875e+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.2199999999999999289457264239899814128875732421875e+1; # .MEM_35 = VDEF <.MEM_32> MEM[(doubleD.32 *)_26 clique 1 base 1] = _29; ... So the dependence clique is used to do disambiguation.