[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