Skip to content

Commit

Permalink
[LV] Don't vectorize when we have a small static bound on trip count
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mkuperst committed Dec 13, 2016
1 parent b56a103 commit 3d23d4a
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
4 changes: 2 additions & 2 deletions llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
Expand Up @@ -7382,8 +7382,8 @@ bool LoopVectorizePass::processLoop(Loop *L) {

// Check the loop for a trip count threshold:
// do not vectorize loops with a tiny trip count.
const unsigned TC = SE->getSmallConstantTripCount(L);
if (TC > 0u && TC < TinyTripCountVectorThreshold) {
const unsigned MaxTC = SE->getSmallConstantMaxTripCount(L);
if (MaxTC > 0u && MaxTC < TinyTripCountVectorThreshold) {
DEBUG(dbgs() << "LV: Found a loop with a very small trip count. "
<< "This loop is not worth vectorizing.");
if (Hints.getForce() == LoopVectorizeHints::FK_Enabled)
Expand Down
25 changes: 25 additions & 0 deletions llvm/test/Transforms/LoopVectorize/small-loop.ll
Expand Up @@ -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
}

0 comments on commit 3d23d4a

Please sign in to comment.