This helps generate broadcasts instead of gathers in cases like:
for (i = 0; i != N; ++i) ... = ... B[i/4]
when VF is a multiple of 4.
And will generate a single store in cases like this:
for (i = 0; i != N; ++i) A[i/4] = ...
when VF is a multiple of 4.
Without this patch the uniformity checks only test for loop-invariance, so they
return false for i/4, even though i/4 will always return i/4 for all
i/4, (i+1)/4, (i+2)/4 and (i+3)/4.
This patch adds a simple analysis that checks if a value is a linear expression
of the induction variable divided by a constant and that the VF is a multiple
of this constant. If so, the value is treaded as uniform.
This seems overly restrictive.