[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
Tue Jul 27 03:38:31 PDT 2021


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd7dd12aee399: [LV] Disable Scalable VFs when tail folding is enabled b/c of low tripcount. (authored by sdesmalen).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D106657/new/

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
@@ -5817,6 +5817,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.361966.patch
Type: text/x-patch
Size: 1825 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210727/70a731b4/attachment.bin>


More information about the llvm-commits mailing list