[llvm] r316017 - [DAGCombine] Add SCALAR_TO_VECTOR undef handling to simplifyShuffleMask.

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 17 11:14:49 PDT 2017


Author: rksimon
Date: Tue Oct 17 11:14:48 2017
New Revision: 316017

URL: http://llvm.org/viewvc/llvm-project?rev=316017&view=rev
Log:
[DAGCombine] Add SCALAR_TO_VECTOR undef handling to simplifyShuffleMask.

This allows us to simplify later visitVECTOR_SHUFFLE optimizations such as combineShuffleOfScalars.

Noticed whilst working on D38696

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=316017&r1=316016&r2=316017&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Oct 17 11:14:48 2017
@@ -15350,6 +15350,8 @@ static SDValue simplifyShuffleMask(Shuff
     // TODO - handle more cases as required.
     if (V.getOpcode() == ISD::BUILD_VECTOR)
       return V.getOperand(Idx).isUndef();
+    if (V.getOpcode() == ISD::SCALAR_TO_VECTOR)
+      return (Idx != 0) || V.getOperand(0).isUndef();
     return false;
   };
 
@@ -15463,6 +15465,7 @@ static SDValue combineShuffleOfScalars(S
 
   if (!N0->hasOneUse() || !N1->hasOneUse())
     return SDValue();
+
   // If only one of N1,N2 is constant, bail out if it is not ALL_ZEROS as
   // discussed above.
   if (!N1.isUndef()) {
@@ -15484,8 +15487,8 @@ static SDValue combineShuffleOfScalars(S
       if (S.getOpcode() == ISD::BUILD_VECTOR) {
         Op = S.getOperand(Idx);
       } else if (S.getOpcode() == ISD::SCALAR_TO_VECTOR) {
-        if (Idx == 0)
-          Op = S.getOperand(0);
+        assert(Idx == 0 && "Unexpected SCALAR_TO_VECTOR operand index.");
+        Op = S.getOperand(0);
       } else {
         // Operand can't be combined - bail out.
         return SDValue();
@@ -15501,6 +15504,7 @@ static SDValue combineShuffleOfScalars(S
 
     Ops.push_back(Op);
   }
+
   // BUILD_VECTOR requires all inputs to be of the same type, find the
   // maximum type and extend them all.
   EVT SVT = VT.getScalarType();




More information about the llvm-commits mailing list