diff options
author | Michael Kuperstein <mkuper@google.com> | 2016-12-13 20:38:18 +0000 |
---|---|---|
committer | Michael Kuperstein <mkuper@google.com> | 2016-12-13 20:38:18 +0000 |
commit | 3d23d4a2343a59cfa6977d8dc12c626b7b97e20e (patch) | |
tree | 724bb1fee4031a61a798768e1aac5c2bf9f2ca66 /llvm/test/Transforms/LoopVectorize/small-loop.ll | |
parent | b56a103462c8b9a3bac12859f9285b6fa3f5b7bb (diff) | |
download | bcm5719-llvm-3d23d4a2343a59cfa6977d8dc12c626b7b97e20e.tar.gz bcm5719-llvm-3d23d4a2343a59cfa6977d8dc12c626b7b97e20e.zip |
[LV] Don't vectorize when we have a small static bound on trip count
We currently check if the exact trip count is known and is smaller than the
"tiny loop" bound. We should be checking the maximum bound on the trip count
instead.
Differential Revision: https://reviews.llvm.org/D27690
llvm-svn: 289583
Diffstat (limited to 'llvm/test/Transforms/LoopVectorize/small-loop.ll')
-rw-r--r-- | llvm/test/Transforms/LoopVectorize/small-loop.ll | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LoopVectorize/small-loop.ll b/llvm/test/Transforms/LoopVectorize/small-loop.ll index 01bf54b87af..9a5dc4aa1b7 100644 --- a/llvm/test/Transforms/LoopVectorize/small-loop.ll +++ b/llvm/test/Transforms/LoopVectorize/small-loop.ll @@ -30,3 +30,28 @@ define void @example1() nounwind uwtable ssp { ret void } +;CHECK-LABEL: @bound1( +;CHECK-NOT: load <4 x i32> +;CHECK: ret void +define void @bound1(i32 %k) nounwind uwtable ssp { + br label %1 + +; <label>:1 ; preds = %1, %0 + %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %1 ] + %2 = getelementptr inbounds [2048 x i32], [2048 x i32]* @b, i64 0, i64 %indvars.iv + %3 = load i32, i32* %2, align 4 + %4 = getelementptr inbounds [2048 x i32], [2048 x i32]* @c, i64 0, i64 %indvars.iv + %5 = load i32, i32* %4, align 4 + %6 = add nsw i32 %5, %3 + %7 = getelementptr inbounds [2048 x i32], [2048 x i32]* @a, i64 0, i64 %indvars.iv + store i32 %6, i32* %7, align 4 + %indvars.iv.next = add i64 %indvars.iv, 1 + %lftr.wideiv = trunc i64 %indvars.iv.next to i32 + %large = icmp sge i32 %lftr.wideiv, 8 + %exitcond = icmp eq i32 %lftr.wideiv, %k + %realexit = or i1 %large, %exitcond + br i1 %realexit, label %8, label %1 + +; <label>:8 ; preds = %1 + ret void +} |