@@ -8753,29 +8753,28 @@ static SDValue lowerBuildVectorAsBlend(BuildVectorSDNode *BVOp, SDLoc const &DL,
8753
8753
MVT VT = BVOp->getSimpleValueType(0u);
8754
8754
auto const NumElems = VT.getVectorNumElements();
8755
8755
8756
- if (Subtarget.hasAVX() && VT == MVT::v4f64) {
8756
+ if (VT == MVT::v4f64) {
8757
8757
// Collect unique operands.
8758
8758
auto UniqueOps = SmallSet<SDValue, 16u>();
8759
- for (auto & Op : BVOp->ops()) {
8760
- if (isIntOrFPConstant(Op) || Op.get()-> isUndef())
8761
- return {} ;
8759
+ for (SDValue Op : BVOp->ops()) {
8760
+ if (isIntOrFPConstant(Op) || Op.isUndef())
8761
+ return SDValue() ;
8762
8762
UniqueOps.insert(Op);
8763
8763
}
8764
8764
// Candidate BUILD_VECTOR must have 2 unique operands.
8765
8765
if (UniqueOps.size() != 2u)
8766
- return {} ;
8766
+ return SDValue() ;
8767
8767
// Create shuffle mask.
8768
- auto Op0 = BVOp->getOperand(0u);
8769
- auto Mask = std::vector<int>();
8770
- Mask.reserve(NumElems);
8768
+ SDValue Op0 = BVOp->getOperand(0u);
8769
+ SmallVector<int, 16u> Mask(NumElems);
8771
8770
for (auto I = 0u; I < NumElems; ++I) {
8772
- auto & Op = BVOp->getOperand(I);
8773
- Mask.push_back( Op == Op0 ? I : I + NumElems) ;
8771
+ SDValue Op = BVOp->getOperand(I);
8772
+ Mask[I] = Op == Op0 ? I : I + NumElems;
8774
8773
}
8775
8774
// Create shuffle of splats.
8776
- UniqueOps.erase(Op0);
8777
- auto NewOp0 = DAG.getSplatBuildVector(VT, DL, Op0 );
8778
- auto NewOp1 = DAG.getSplatBuildVector(VT, DL, *UniqueOps.begin());
8775
+
8776
+ SDValue NewOp0 = DAG.getSplatBuildVector(VT, DL, *UniqueOps.begin() );
8777
+ SDValue NewOp1 = DAG.getSplatBuildVector(VT, DL, *(++ UniqueOps.begin() ));
8779
8778
return DAG.getVectorShuffle(VT, DL, NewOp0, NewOp1, Mask);
8780
8779
}
8781
8780
0 commit comments