[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