[PATCH] D106657: [LV] Disable Scalable VFs when tail folding is enabled b/c of low tripcount.
Sander de Smalen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 23 05:52:29 PDT 2021
sdesmalen created this revision.
Herald added a subscriber: hiraditya.
sdesmalen requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
The loop vectorizer may decide to use tail folding when the trip-count
is low. When that happens, scalable VFs are no longer a candidate,
since tail folding/predication is not yet supported for scalable vectors.
This can be re-enabled in a future patch.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D106657
Files:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding.ll
Index: llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding.ll
@@ -0,0 +1,23 @@
+; RUN: opt -S -loop-vectorize -scalable-vectorization=preferred -prefer-predicate-over-epilogue=predicate-dont-vectorize < %s | FileCheck %s
+
+; CHECK-NOT: vector.body:
+
+target triple = "aarch64-unknown-linux-gnu"
+
+define void @tail_predication(i32 %init, i32* %ptr, i32 %val) #0 {
+entry:
+ br label %while.body
+
+while.body: ; preds = %while.body, %entry
+ %index = phi i32 [ %index.dec, %while.body ], [ %init, %entry ]
+ %gep = getelementptr i32, i32* %ptr, i32 %index
+ store i32 %val, i32* %gep
+ %index.dec = add nsw i32 %index, -1
+ %cmp10 = icmp sgt i32 %index, 0
+ br i1 %cmp10, label %while.body, label %while.end.loopexit
+
+while.end.loopexit: ; preds = %while.body
+ ret void
+}
+
+attributes #0 = { "target-features"="+sve" }
Index: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -5819,6 +5819,12 @@
}
}
+ // For scalable vectors, don't use tail folding as this is currently not yet
+ // supported. The code is likely to have ended up here if the tripcount is
+ // low, in which case it makes sense not to use scalable vectors.
+ if (MaxFactors.ScalableVF.isVector())
+ MaxFactors.ScalableVF = ElementCount::getScalable(0);
+
// If we don't know the precise trip count, or if the trip count that we
// found modulo the vectorization factor is not zero, try to fold the tail
// by masking.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106657.361170.patch
Type: text/x-patch
Size: 1825 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210723/9d86b484/attachment.bin>
More information about the llvm-commits
mailing list