aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authortcwzxx <tcwzxx@gmail.com>2024-07-08 18:08:04 +0800
committerGitHub <noreply@github.com>2024-07-08 06:08:04 -0400
commitc2fe75f99c9b385eb707571e0b46b7a1afef37db (patch)
tree229554c1a7bd5104037d37992e85347c96b45ad5 /llvm/lib
parentb590e9a5aedabeceb00d81d49897abbf02ab3b87 (diff)
downloadllvm-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.cpp11
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.");