[llvm] [SLP]Initial support for (masked)loads + compress and (masked)interleaved (PR #132099)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 19 14:01:06 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 566916131ecbea8f241fb5244eb77abac1b36658 1dbe03a331f296a95bb9c543d9b9c1df0ba7f926 --extensions cpp -- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index f9905cc7c3..19725537d1 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -3377,11 +3377,11 @@ private:
/// (either with vector instruction or with scatter/gather
/// intrinsics for store/load)?
enum EntryState {
- Vectorize, ///< The node is regularly vectorized.
- ScatterVectorize, ///< Masked scatter/gather node.
- StridedVectorize, ///< Strided loads (and stores)
+ Vectorize, ///< The node is regularly vectorized.
+ ScatterVectorize, ///< Masked scatter/gather node.
+ StridedVectorize, ///< Strided loads (and stores)
MaskedLoadCompressVectorize, ///< Masked load with compress.
- NeedToGather, ///< Gather/buildvector node.
+ NeedToGather, ///< Gather/buildvector node.
CombinedVectorize, ///< Vectorized node, combined with its user into more
///< complex node like select/cmp to minmax, mul/add to
///< fma, etc. Must be used for the following nodes in
@@ -5489,7 +5489,8 @@ BoUpSLP::canVectorizeLoads(ArrayRef<Value *> VL, const Value *VL0,
[[maybe_unused]] bool IsMasked;
[[maybe_unused]] unsigned InterleaveFactor;
[[maybe_unused]] SmallVector<int> CompressMask;
- [[maybe_unused]] VectorType *LoadVecTy;;
+ [[maybe_unused]] VectorType *LoadVecTy;
+ ;
if (isMaskedLoadCompress(
VL, PointerOps, Order, *TTI, *DL, *SE, *AC, *DT, *TLI,
[&](Value *V) {
@@ -7902,31 +7903,30 @@ void BoUpSLP::tryToVectorizeGatheredLoads(
// just exit.
unsigned ConsecutiveNodesSize = 0;
if (!LoadEntriesToVectorize.empty() && InterleaveFactor == 0 &&
- any_of(
- zip(LoadEntriesToVectorize, LoadSetsToVectorize),
- [&, Slice = Slice](const auto &P) {
- const auto *It = find_if(Slice, [&](Value *V) {
- return std::get<1>(P).contains(V);
- });
- if (It == Slice.end())
- return false;
- const TreeEntry &TE = *VectorizableTree[std::get<0>(P)];
- ArrayRef<Value *> VL = TE.Scalars;
- OrdersType Order;
- SmallVector<Value *> PointerOps;
- LoadsState State =
- canVectorizeLoads(VL, VL.front(), Order,
- PointerOps);
- if (State == LoadsState::ScatterVectorize||
- State == LoadsState::MaskedLoadCompressVectorize)
- return false;
- ConsecutiveNodesSize += VL.size();
- unsigned Start = std::distance(Slice.begin(), It);
- unsigned Sz = Slice.size() - Start;
- return Sz < VL.size() ||
- Slice.slice(std::distance(Slice.begin(), It),
- VL.size()) != VL;
- }))
+ any_of(zip(LoadEntriesToVectorize, LoadSetsToVectorize),
+ [&, Slice = Slice](const auto &P) {
+ const auto *It = find_if(Slice, [&](Value *V) {
+ return std::get<1>(P).contains(V);
+ });
+ if (It == Slice.end())
+ return false;
+ const TreeEntry &TE =
+ *VectorizableTree[std::get<0>(P)];
+ ArrayRef<Value *> VL = TE.Scalars;
+ OrdersType Order;
+ SmallVector<Value *> PointerOps;
+ LoadsState State = canVectorizeLoads(
+ VL, VL.front(), Order, PointerOps);
+ if (State == LoadsState::ScatterVectorize ||
+ State == LoadsState::MaskedLoadCompressVectorize)
+ return false;
+ ConsecutiveNodesSize += VL.size();
+ unsigned Start = std::distance(Slice.begin(), It);
+ unsigned Sz = Slice.size() - Start;
+ return Sz < VL.size() ||
+ Slice.slice(std::distance(Slice.begin(), It),
+ VL.size()) != VL;
+ }))
continue;
// Try to build long masked gather loads.
UserMaxVF = bit_ceil(UserMaxVF);
@@ -12664,8 +12664,8 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
assert(IsVectorized && "Expected to be vectorized");
Align CommonAlignment;
if (IsMasked)
- CommonAlignment = computeCommonAlignment<LoadInst>(
- UniqueValues.getArrayRef());
+ CommonAlignment =
+ computeCommonAlignment<LoadInst>(UniqueValues.getArrayRef());
else
CommonAlignment = LI0->getAlign();
if (InterleaveFactor) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/132099
More information about the llvm-commits
mailing list