[PATCH] D116312: [SLP]Improve isGatherShuffledEntry to handles shuffles between different length vectors.
    Simon Pilgrim via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Sun May  1 07:54:46 PDT 2022
    
    
  
RKSimon added inline comments.
Herald added a subscriber: vporpo.
Herald added a project: All.
================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:5897
     }
-    // No perfect match, just shuffle, so choose the first tree node.
-    Entries.push_back(*UsedTEs.front().begin());
+    // No perfect match, just shuffle, so choose the tree node with min index.
+    Entries.push_back(
----------------
min index? Aren't you finding the max_element here?
================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:5932
+      Entries.push_back(
+          *std::max_element(UsedTEs.front().begin(), UsedTEs.front().end(),
+                            [](const TreeEntry *TE1, const TreeEntry *TE2) {
----------------
Duplicate code - worth pulling this out as a helper?
================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6362
+          std::iota(ResizeMask.begin(), ResizeMask.end(), 0);
+          Vec1 = Builder.CreateShuffleVector(Vec1, ResizeMask);
+          if (auto *I = dyn_cast<Instruction>(Vec1)) {
----------------
We do this often enough - I'm wondering if we just add a helper to IRBuilder that creates an identity shuffle that pads/extracts a source Value to requested #elements size?
================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6394
+        }
+      }
+      Vec = Builder.CreateShuffleVector(Vec1, Vec2, Mask);
----------------
Worth putting all of this inside ShuffleInstructionBuilder ?
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116312/new/
https://reviews.llvm.org/D116312
    
    
More information about the llvm-commits
mailing list