[PATCH] D87679: [LV] Unroll factor is expected to be > 0
Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 14 02:48:41 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd0c95808e50c: [LV] Unroll factor is expected to be > 0 (authored by Evgeniy Brevnov <ybrevnov at azul.com>).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D87679/new/
https://reviews.llvm.org/D87679
Files:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/SystemZ/zero_unroll.ll
Index: llvm/test/Transforms/LoopVectorize/SystemZ/zero_unroll.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/LoopVectorize/SystemZ/zero_unroll.ll
@@ -0,0 +1,22 @@
+; RUN: opt -S -loop-vectorize -mtriple=s390x-linux-gnu -tiny-trip-count-interleave-threshold=4 -vectorizer-min-trip-count=8 < %s | FileCheck %s
+; RUN: opt -S -passes=loop-vectorize -mtriple=s390x-linux-gnu -tiny-trip-count-interleave-threshold=4 -vectorizer-min-trip-count=8 < %s | FileCheck %s
+
+define i32 @main(i32 %arg, i8** nocapture readnone %arg1) #0 {
+;CHECK: vector.body:
+entry:
+ %0 = alloca i8, align 1
+ br label %loop
+
+loop:
+ %storemerge.i.i = phi i8 [ 0, %entry ], [ %tmp12.i.i, %loop ]
+ store i8 %storemerge.i.i, i8* %0, align 2
+ %tmp8.i.i = icmp ult i8 %storemerge.i.i, 8
+ %tmp12.i.i = add nuw nsw i8 %storemerge.i.i, 1
+ br i1 %tmp8.i.i, label %loop, label %ret
+
+ret:
+ ret i32 0
+}
+
+attributes #0 = { "target-cpu"="z13" }
+
Index: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -5598,12 +5598,28 @@
}
// If trip count is known or estimated compile time constant, limit the
- // interleave count to be less than the trip count divided by VF.
+ // interleave count to be less than the trip count divided by VF, provided it
+ // is at least 1.
if (BestKnownTC) {
MaxInterleaveCount =
std::min(*BestKnownTC / VF.getKnownMinValue(), MaxInterleaveCount);
+ // Make sure MaxInterleaveCount is greater than 0.
+ MaxInterleaveCount = std::max(1u, MaxInterleaveCount);
}
+ assert(MaxInterleaveCount > 0 &&
+ "Maximum interleave count must be greater than 0");
+
+ // Clamp the calculated IC to be between the 1 and the max interleave count
+ // that the target and trip count allows.
+ if (IC > MaxInterleaveCount)
+ IC = MaxInterleaveCount;
+ else
+ // Make sure IC is greater than 0.
+ IC = std::max(1u, IC);
+
+ assert(IC > 0 && "Interleave count must be greater than 0.");
+
// If we did not calculate the cost for VF (because the user selected the VF)
// then we calculate the cost of VF here.
if (LoopCost == 0)
@@ -5611,13 +5627,6 @@
assert(LoopCost && "Non-zero loop cost expected");
- // Clamp the calculated IC to be between the 1 and the max interleave count
- // that the target and trip count allows.
- if (IC > MaxInterleaveCount)
- IC = MaxInterleaveCount;
- else if (IC < 1)
- IC = 1;
-
// Interleave if we vectorized this loop and there is a reduction that could
// benefit from interleaving.
if (VF.isVector() && HasReductions) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87679.298091.patch
Type: text/x-patch
Size: 2778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201014/df5d2edb/attachment.bin>
More information about the llvm-commits
mailing list