@@ -8793,29 +8793,28 @@ static SDValue lowerBuildVectorAsBlend(BuildVectorSDNode *BVOp, SDLoc const &DL,
8793
8793
MVT VT = BVOp->getSimpleValueType(0u);
8794
8794
auto const NumElems = VT.getVectorNumElements();
8795
8795
8796
- if (Subtarget.hasAVX() && VT == MVT::v4f64) {
8796
+ if (VT == MVT::v4f64) {
8797
8797
// Collect unique operands.
8798
8798
auto UniqueOps = SmallSet<SDValue, 16u>();
8799
- for (auto & Op : BVOp->ops()) {
8800
- if (isIntOrFPConstant(Op) || Op.get()-> isUndef())
8801
- return {} ;
8799
+ for (SDValue Op : BVOp->ops()) {
8800
+ if (isIntOrFPConstant(Op) || Op.isUndef())
8801
+ return SDValue() ;
8802
8802
UniqueOps.insert(Op);
8803
8803
}
8804
8804
// Candidate BUILD_VECTOR must have 2 unique operands.
8805
8805
if (UniqueOps.size() != 2u)
8806
- return {} ;
8806
+ return SDValue() ;
8807
8807
// Create shuffle mask.
8808
- auto Op0 = BVOp->getOperand(0u);
8809
- auto Mask = std::vector<int>();
8810
- Mask.reserve(NumElems);
8808
+ SDValue Op0 = BVOp->getOperand(0u);
8809
+ SmallVector<int, 16u> Mask(NumElems);
8811
8810
for (auto I = 0u; I < NumElems; ++I) {
8812
- auto & Op = BVOp->getOperand(I);
8813
- Mask.push_back( Op == Op0 ? I : I + NumElems) ;
8811
+ SDValue Op = BVOp->getOperand(I);
8812
+ Mask[I] = Op == Op0 ? I : I + NumElems;
8814
8813
}
8815
8814
// Create shuffle of splats.
8816
- UniqueOps.erase(Op0);
8817
- auto NewOp0 = DAG.getSplatBuildVector(VT, DL, Op0 );
8818
- auto NewOp1 = DAG.getSplatBuildVector(VT, DL, *UniqueOps.begin());
8815
+
8816
+ SDValue NewOp0 = DAG.getSplatBuildVector(VT, DL, *UniqueOps.begin() );
8817
+ SDValue NewOp1 = DAG.getSplatBuildVector(VT, DL, *(++ UniqueOps.begin() ));
8819
8818
return DAG.getVectorShuffle(VT, DL, NewOp0, NewOp1, Mask);
8820
8819
}
8821
8820
0 commit comments