diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/LoopVectorize/consec_no_gep.ll | 43 | ||||
-rw-r--r-- | llvm/test/Transforms/LoopVectorize/consec_no_gep2.ll | 34 | ||||
-rw-r--r-- | llvm/test/Transforms/LoopVectorize/ptr-induction.ll | 1 |
3 files changed, 78 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopVectorize/consec_no_gep.ll b/llvm/test/Transforms/LoopVectorize/consec_no_gep.ll new file mode 100644 index 00000000000..4e906bb2659 --- /dev/null +++ b/llvm/test/Transforms/LoopVectorize/consec_no_gep.ll @@ -0,0 +1,43 @@ +; RUN: opt < %s -loop-vectorize -force-vector-width=4 -force-vector-interleave=1 -instcombine -S | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +;; Check consecutive memory access without preceding GEP instruction + +; for (int i=0; i<len; i++) { +; *to++ = *from++; +; } + +; CHECK-LABEL: @consecutive_no_gep( +; CHECK: vector.body +; CHECK: %[[index:.*]] = phi i64 [ 0, %vector.ph ] +; CHECK: getelementptr float, float* %{{.*}}, i64 %[[index]] +; CHECK: load <4 x float> + +define void @consecutive_no_gep(float* noalias nocapture readonly %from, float* noalias nocapture %to, i32 %len) #0 { +entry: + %cmp2 = icmp sgt i32 %len, 0 + br i1 %cmp2, label %for.body.preheader, label %for.end + +for.body.preheader: ; preds = %entry + br label %for.body + +for.body: ; preds = %for.body.preheader, %for.body + %i.05 = phi i32 [ %inc, %for.body ], [ 0, %for.body.preheader ] + %from.addr.04 = phi float* [ %incdec.ptr, %for.body ], [ %from, %for.body.preheader ] + %to.addr.03 = phi float* [ %incdec.ptr1, %for.body ], [ %to, %for.body.preheader ] + %incdec.ptr = getelementptr inbounds float, float* %from.addr.04, i64 1 + %val = load float, float* %from.addr.04, align 4 + %incdec.ptr1 = getelementptr inbounds float, float* %to.addr.03, i64 1 + store float %val, float* %to.addr.03, align 4 + %inc = add nsw i32 %i.05, 1 + %cmp = icmp slt i32 %inc, %len + br i1 %cmp, label %for.body, label %for.end.loopexit + +for.end.loopexit: ; preds = %for.body + br label %for.end + +for.end: ; preds = %for.end.loopexit, %entry + ret void +} diff --git a/llvm/test/Transforms/LoopVectorize/consec_no_gep2.ll b/llvm/test/Transforms/LoopVectorize/consec_no_gep2.ll new file mode 100644 index 00000000000..628a5b376ff --- /dev/null +++ b/llvm/test/Transforms/LoopVectorize/consec_no_gep2.ll @@ -0,0 +1,34 @@ +; RUN: opt < %s -loop-vectorize -S | FileCheck %s +target datalayout = "E-m:e-i64:64-n32:64" +target triple = "powerpc64-unknown-linux-gnu" + +; CHECK-LABEL: @img2buf +; CHECK: store <4 x i32> +; Function Attrs: nounwind +define void @img2buf(i64 %val, i8* nocapture %buf, i32 %N) local_unnamed_addr #0 { +entry: + br label %l2 + +l2: + br label %for.body57.us + +for.body57.us: + %indvars.iv24 = phi i64 [ %val, %l2 ], [ %indvars.iv.next25, %for.body57.us ] + %0 = trunc i64 %indvars.iv24 to i32 + %add77.us = add i32 5, %0 + %mul78.us = shl nsw i32 %add77.us, 2 + %idx.ext79.us = sext i32 %mul78.us to i64 + %add.ptr80.us = getelementptr inbounds i8, i8* %buf, i64 %idx.ext79.us + %ui32.0.add.ptr80.sroa_cast.us = bitcast i8* %add.ptr80.us to i32* + store i32 0, i32* %ui32.0.add.ptr80.sroa_cast.us, align 1 + %indvars.iv.next25 = add nsw i64 %indvars.iv24, 1 + %lftr.wideiv26 = trunc i64 %indvars.iv.next25 to i32 + %exitcond27 = icmp eq i32 %lftr.wideiv26, %N + br i1 %exitcond27, label %l3, label %for.body57.us + +l3: + ret void +} + +attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="ppc64" "target-features"="+altivec,-bpermd,-crypto,-direct-move,-extdiv,-power8-vector,-qpx,-vsx" "unsafe-fp-math"="false" "use-soft-float"="false" } + diff --git a/llvm/test/Transforms/LoopVectorize/ptr-induction.ll b/llvm/test/Transforms/LoopVectorize/ptr-induction.ll index 47d33352763..e0e1139e0eb 100644 --- a/llvm/test/Transforms/LoopVectorize/ptr-induction.ll +++ b/llvm/test/Transforms/LoopVectorize/ptr-induction.ll @@ -18,6 +18,7 @@ while.body.preheader: ; preds = %entry while.body: ; preds = %while.body.preheader, %while.body %a.pn = phi i32* [ %incdec.ptr8, %while.body ], [ %a, %while.body.preheader ] %acc.07 = phi i32 [ %add, %while.body ], [ 0, %while.body.preheader ] + %a1.pn = getelementptr inbounds i32, i32* %a.pn, i64 0 %incdec.ptr8 = getelementptr inbounds i32, i32* %a.pn, i64 1 %0 = load i32, i32* %incdec.ptr8, align 1 %add = add nuw nsw i32 %0, %acc.07 |