[llvm] a6ef086 - Revert "[SLP]Fix PR101213: Reuse extractelement, only if its vector operand comes before new vector value."
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 30 15:11:46 PDT 2024
Author: Alexey Bataev
Date: 2024-07-30T15:11:35-07:00
New Revision: a6ef0864e9cf365a5cc4a3c39c9c749c49c87c1d
URL: https://github.com/llvm/llvm-project/commit/a6ef0864e9cf365a5cc4a3c39c9c749c49c87c1d
DIFF: https://github.com/llvm/llvm-project/commit/a6ef0864e9cf365a5cc4a3c39c9c749c49c87c1d.diff
LOG: Revert "[SLP]Fix PR101213: Reuse extractelement, only if its vector operand comes before new vector value."
This reverts commit f70f1228035c9610de38e0e376afdacb647c4ad9 to fix the
crash reported by https://lab.llvm.org/buildbot/#/builders/133/builds/2456.
Added:
Modified:
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
Removed:
llvm/test/Transforms/SLPVectorizer/X86/extract-vectorized-operand.ll
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 60c20aa2ebb5c..6ce1077d81cf5 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -13927,16 +13927,11 @@ Value *BoUpSLP::vectorizeTree(
}
if (!Ex) {
// "Reuse" the existing extract to improve final codegen.
- if (auto *ES = dyn_cast<ExtractElementInst>(Scalar);
- ES && isa<Instruction>(Vec)) {
+ if (auto *ES = dyn_cast<ExtractElementInst>(Scalar)) {
Value *V = ES->getVectorOperand();
if (const TreeEntry *ETE = getTreeEntry(V))
V = ETE->VectorizedValue;
- if (auto *IV = dyn_cast<Instruction>(V);
- !IV || IV == Vec || IV->comesBefore(cast<Instruction>(Vec)))
- Ex = Builder.CreateExtractElement(V, ES->getIndexOperand());
- else
- Ex = Builder.CreateExtractElement(Vec, Lane);
+ Ex = Builder.CreateExtractElement(V, ES->getIndexOperand());
} else if (ReplaceGEP) {
// Leave the GEPs as is, they are free in most cases and better to
// keep them as GEPs.
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/extract-vectorized-operand.ll b/llvm/test/Transforms/SLPVectorizer/X86/extract-vectorized-operand.ll
deleted file mode 100644
index f1a5709d07f02..0000000000000
--- a/llvm/test/Transforms/SLPVectorizer/X86/extract-vectorized-operand.ll
+++ /dev/null
@@ -1,49 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
-; RUN: opt -S --passes=slp-vectorizer -slp-threshold=-99999 < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
-
-define void @test() {
-; CHECK-LABEL: define void @test() {
-; CHECK-NEXT: [[BB:.*]]:
-; CHECK-NEXT: br label %[[BB43:.*]]
-; CHECK: [[BB20:.*]]:
-; CHECK-NEXT: br label %[[BB105:.*]]
-; CHECK: [[BB43]]:
-; CHECK-NEXT: [[TMP0:%.*]] = phi <2 x ptr addrspace(1)> [ [[TMP1:%.*]], %[[BB51:.*]] ], [ zeroinitializer, %[[BB]] ]
-; CHECK-NEXT: br i1 false, label %[[BB105]], label %[[BB51]]
-; CHECK: [[BB51]]:
-; CHECK-NEXT: [[TMP1]] = phi <2 x ptr addrspace(1)> [ poison, %[[BB54:.*]] ], [ zeroinitializer, %[[BB43]] ]
-; CHECK-NEXT: br label %[[BB43]]
-; CHECK: [[BB54]]:
-; CHECK-NEXT: br label %[[BB51]]
-; CHECK: [[BB105]]:
-; CHECK-NEXT: [[PHI106:%.*]] = phi ptr addrspace(1) [ null, %[[BB20]] ], [ null, %[[BB43]] ]
-; CHECK-NEXT: ret void
-;
-bb:
- %0 = shufflevector <2 x ptr addrspace(1)> zeroinitializer, <2 x ptr addrspace(1)> zeroinitializer, <2 x i32> <i32 1, i32 0>
- %1 = extractelement <2 x ptr addrspace(1)> %0, i32 0
- %2 = extractelement <2 x ptr addrspace(1)> %0, i32 1
- br label %bb43
-
-bb20:
- br label %bb105
-
-bb43:
- %phi441 = phi ptr addrspace(1) [ %4, %bb51 ], [ %2, %bb ]
- %phi452 = phi ptr addrspace(1) [ %5, %bb51 ], [ %1, %bb ]
- br i1 false, label %bb105, label %bb51
-
-bb51:
- %3 = phi <2 x ptr addrspace(1)> [ poison, %bb54 ], [ zeroinitializer, %bb43 ]
- %4 = extractelement <2 x ptr addrspace(1)> %3, i32 0
- %5 = extractelement <2 x ptr addrspace(1)> %3, i32 1
- br label %bb43
-
-bb54:
- br label %bb51
-
-bb105:
- %phi106 = phi ptr addrspace(1) [ %1, %bb20 ], [ null, %bb43 ]
- ret void
-}
-
More information about the llvm-commits
mailing list