[llvm-commits] [llvm] r170503 - in /llvm/trunk/docs: Vectorizers.rst subsystems.rst
Nadav Rotem
nrotem at apple.com
Wed Dec 19 00:40:36 PST 2012
Hi Shuxin,
Yes, I agree. At the moment the check is too conservative and, as you said, we can check that P and Q are "vector-len" bytes apart.
Thanks,
Nadav
On Dec 19, 2012, at 12:36 AM, Shuxin Yang <shuxin.llvm at gmail.com> wrote:
> Hi, Nadav:
>
> I guess we are bit conservative in this case.
>
> +
> + void bar(float *A, float* B, float K, int start, int end) {
> + for (int i = start; i < end; ++i)
> + A[i] *= B[i] + K;
> + }
> +
> Let us use a simpler case:
>
> void foo(float *P, float *Q) {
> for (i = 0; i < symbolic-val; i++)
> P[i] += Q[i];
> }
>
> We don't need examine if P[*] overlap Q[*]. I guess condition
> "Q <= P || (Q - P) >= Vector-length" is enough. The reasoning is following:
>
> Break the statement in questions into following simpler stmts:
>
> S1: t1 = Q[i]
> S2: t2 = P[i]
> S3: P[i] = t1 + t2
>
> There are bunch of dep here. We only care if the dependences form a SCC.
> SCC could exist only if there is a dep from S3 to S1 arising from mem-access.
>
> So if Q <= P, there is mem-flow-dep at all.
> if Q - P = m (m> 0), there is mem-flow-dep between S3 and S1; however, if
> m >= vector-length, we can still go ahead vectorize in the presence of SCC.
>
>
>
>
>
More information about the llvm-commits
mailing list