diff options
author | tcwzxx <tcwzxx@gmail.com> | 2024-07-08 18:08:04 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-08 06:08:04 -0400 |
commit | c2fe75f99c9b385eb707571e0b46b7a1afef37db (patch) | |
tree | 229554c1a7bd5104037d37992e85347c96b45ad5 /llvm/lib | |
parent | b590e9a5aedabeceb00d81d49897abbf02ab3b87 (diff) | |
download | llvm-c2fe75f99c9b385eb707571e0b46b7a1afef37db.zip llvm-c2fe75f99c9b385eb707571e0b46b7a1afef37db.tar.gz llvm-c2fe75f99c9b385eb707571e0b46b7a1afef37db.tar.bz2 |
Make the logic for checking scatter vectorized nodes of GEP clearer (#97826)
There is no functional change.
Authored-by: zhizhixu <zhizhixu@tencent.com>
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index f6b51f8..a66218d 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -6725,9 +6725,9 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth, bool IsScatterVectorizeUserTE = UserTreeIdx.UserTE && UserTreeIdx.UserTE->State == TreeEntry::ScatterVectorize; - bool AreAllSameInsts = - (S.getOpcode() && allSameBlock(VL)) || - (S.OpValue->getType()->isPointerTy() && IsScatterVectorizeUserTE && + bool AreAllSameBlock = S.getOpcode() && allSameBlock(VL); + bool AreScatterAllGEPSameBlock = + (IsScatterVectorizeUserTE && S.OpValue->getType()->isPointerTy() && VL.size() > 2 && all_of(VL, [&BB](Value *V) { @@ -6741,6 +6741,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth, BB && sortPtrAccesses(VL, UserTreeIdx.UserTE->getMainOp()->getType(), *DL, *SE, SortedIndices)); + bool AreAllSameInsts = AreAllSameBlock || AreScatterAllGEPSameBlock; if (!AreAllSameInsts || allConstant(VL) || isSplat(VL) || (isa<InsertElementInst, ExtractValueInst, ExtractElementInst>( S.OpValue) && @@ -6820,9 +6821,7 @@ void BoUpSLP::buildTree_rec(ArrayRef<Value *> VL, unsigned Depth, // Special processing for sorted pointers for ScatterVectorize node with // constant indeces only. - if (AreAllSameInsts && UserTreeIdx.UserTE && - UserTreeIdx.UserTE->State == TreeEntry::ScatterVectorize && - !(S.getOpcode() && allSameBlock(VL))) { + if (!AreAllSameBlock && AreScatterAllGEPSameBlock) { assert(S.OpValue->getType()->isPointerTy() && count_if(VL, IsaPred<GetElementPtrInst>) >= 2 && "Expected pointers only."); |