[PATCH] D55426: [SelectionDAG] Add a generic isSplatValue function.
    Andrea Di Biagio via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Dec 12 08:51:28 PST 2018
    
    
  
andreadb added inline comments.
================
Comment at: lib/CodeGen/SelectionDAG/SelectionDAG.cpp:2129
+  if (!DemandedElts)
+    return false;; // No demanded elts, better to assume we don't know anything.
+
----------------
nit: remove extra semicolon.
================
Comment at: lib/CodeGen/SelectionDAG/SelectionDAG.cpp:2155-2160
+  case ISD::VECTOR_SHUFFLE: {
+    // Check if this is a shuffle node doing a splat.
+    // TODO: Do we need to handle shuffle(splat, undef, mask)?
+    auto *SVN = cast<ShuffleVectorSDNode>(V);
+    if (!SVN->isSplat())
+      break;
----------------
Let say that we have a shuffle with a mask of <1,1,2,1>
That mask is not a splat mask because the third element is different. However, that element is not demanded (i.e. DemandedElts[2] == false), it is fair to assume that this mask is in practice a splat?
In the case of ISD::BUILD_VECTOR, your code skips elements that are non-demanded.
In this case instead, `SVN->isSplat()` doesn't know about demanded elements, so it would return false for <1,1,2,1>.
Repository:
  rL LLVM
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55426/new/
https://reviews.llvm.org/D55426
    
    
More information about the llvm-commits
mailing list