diff options
Diffstat (limited to 'test/Transforms/LoopVectorize/version-mem-access.ll')
-rw-r--r-- | test/Transforms/LoopVectorize/version-mem-access.ll | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/test/Transforms/LoopVectorize/version-mem-access.ll b/test/Transforms/LoopVectorize/version-mem-access.ll index 7ac2fca2533f9..a9d319e5a2dd9 100644 --- a/test/Transforms/LoopVectorize/version-mem-access.ll +++ b/test/Transforms/LoopVectorize/version-mem-access.ll @@ -2,10 +2,16 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" +; Check that we version this loop with speculating the value 1 for symbolic +; strides. This also checks that the symbolic stride information is correctly +; propagated to the memcheck generation. Without this the loop wouldn't +; vectorize because we couldn't determine the array bounds for the required +; memchecks. + ; CHECK-LABEL: test -define void @test(i32* noalias %A, i64 %AStride, - i32* noalias %B, i32 %BStride, - i32* noalias %C, i64 %CStride, i32 %N) { +define void @test(i32* %A, i64 %AStride, + i32* %B, i32 %BStride, + i32* %C, i64 %CStride, i32 %N) { entry: %cmp13 = icmp eq i32 %N, 0 br i1 %cmp13, label %for.end, label %for.body.preheader @@ -28,14 +34,14 @@ for.body: %iv.trunc = trunc i64 %indvars.iv to i32 %mul = mul i32 %iv.trunc, %BStride %mul64 = zext i32 %mul to i64 - %arrayidx = getelementptr inbounds i32* %B, i64 %mul64 - %0 = load i32* %arrayidx, align 4 + %arrayidx = getelementptr inbounds i32, i32* %B, i64 %mul64 + %0 = load i32, i32* %arrayidx, align 4 %mul2 = mul nsw i64 %indvars.iv, %CStride - %arrayidx3 = getelementptr inbounds i32* %C, i64 %mul2 - %1 = load i32* %arrayidx3, align 4 + %arrayidx3 = getelementptr inbounds i32, i32* %C, i64 %mul2 + %1 = load i32, i32* %arrayidx3, align 4 %mul4 = mul nsw i32 %1, %0 %mul3 = mul nsw i64 %indvars.iv, %AStride - %arrayidx7 = getelementptr inbounds i32* %A, i64 %mul3 + %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %mul3 store i32 %mul4, i32* %arrayidx7, align 4 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %lftr.wideiv = trunc i64 %indvars.iv.next to i32 @@ -70,9 +76,9 @@ for.body: %0 = trunc i64 %indvars.iv to i32 %mul = mul nsw i32 %0, %conv %idxprom = sext i32 %mul to i64 - %arrayidx = getelementptr inbounds double* %x, i64 %idxprom - %1 = load double* %arrayidx, align 8 - %arrayidx3 = getelementptr inbounds double* %c, i64 %indvars.iv + %arrayidx = getelementptr inbounds double, double* %x, i64 %idxprom + %1 = load double, double* %arrayidx, align 8 + %arrayidx3 = getelementptr inbounds double, double* %c, i64 %indvars.iv store double %1, double* %arrayidx3, align 8 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %lftr.wideiv = trunc i64 %indvars.iv.next to i32 |