@@ -2490,7 +2490,8 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
24902490 unsigned SelOpNo = 0;
24912491 SDValue Sel = BO->getOperand(0);
24922492 auto BinOpcode = BO->getOpcode();
2493- if (Sel.getOpcode() != ISD::SELECT || !Sel.hasOneUse()) {
2493+ if ((Sel.getOpcode() != ISD::SELECT && Sel.getOpcode() != ISD::VSELECT) ||
2494+ !Sel.hasOneUse()) {
24942495 SelOpNo = 1;
24952496 Sel = BO->getOperand(1);
24962497
@@ -2506,7 +2507,8 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
25062507 }
25072508 }
25082509
2509- if (Sel.getOpcode() != ISD::SELECT || !Sel.hasOneUse())
2510+ if ((Sel.getOpcode() != ISD::SELECT && Sel.getOpcode() != ISD::VSELECT) ||
2511+ !Sel.hasOneUse())
25102512 return SDValue();
25112513
25122514 SDValue CT = Sel.getOperand(1);
@@ -10017,7 +10019,8 @@ SDValue DAGCombiner::visitShiftByConstant(SDNode *N) {
1001710019 BinOpLHSVal.getOpcode() == ISD::SRL) &&
1001810020 isa<ConstantSDNode>(BinOpLHSVal.getOperand(1));
1001910021 bool IsCopyOrSelect = BinOpLHSVal.getOpcode() == ISD::CopyFromReg ||
10020- BinOpLHSVal.getOpcode() == ISD::SELECT;
10022+ BinOpLHSVal.getOpcode() == ISD::SELECT ||
10023+ BinOpLHSVal.getOpcode() == ISD::VSELECT;
1002110024
1002210025 if (!IsShiftByConstant && !IsCopyOrSelect)
1002310026 return SDValue();
@@ -13435,7 +13438,7 @@ static SDValue tryToFoldExtendOfConstant(SDNode *N, const SDLoc &DL,
1343513438 // fold (sext (select cond, c1, c2)) -> (select cond, sext c1, sext c2)
1343613439 // fold (zext (select cond, c1, c2)) -> (select cond, zext c1, zext c2)
1343713440 // fold (aext (select cond, c1, c2)) -> (select cond, sext c1, sext c2)
13438- if (N0->getOpcode() == ISD::SELECT) {
13441+ if (N0->getOpcode() == ISD::SELECT || N0->getOpcode() == ISD::VSELECT ) {
1343913442 SDValue Op1 = N0->getOperand(1);
1344013443 SDValue Op2 = N0->getOperand(2);
1344113444 if (isa<ConstantSDNode>(Op1) && isa<ConstantSDNode>(Op2) &&
@@ -17763,10 +17766,11 @@ SDValue DAGCombiner::visitFMUL(SDNode *N) {
1776317766 // fold (fmul X, (select (fcmp X > 0.0), -1.0, 1.0)) -> (fneg (fabs X))
1776417767 // fold (fmul X, (select (fcmp X > 0.0), 1.0, -1.0)) -> (fabs X)
1776517768 if (Flags.hasNoNaNs() && Flags.hasNoSignedZeros() &&
17766- (N0.getOpcode() == ISD::SELECT || N1.getOpcode() == ISD::SELECT) &&
17769+ (N0.getOpcode() == ISD::SELECT || N0.getOpcode() == ISD::VSELECT ||
17770+ N1.getOpcode() == ISD::SELECT || N1.getOpcode() == ISD::VSELECT) &&
1776717771 TLI.isOperationLegal(ISD::FABS, VT)) {
1776817772 SDValue Select = N0, X = N1;
17769- if (Select.getOpcode() != ISD::SELECT)
17773+ if (Select.getOpcode() != ISD::SELECT && Select.getOpcode() != ISD::VSELECT )
1777017774 std::swap(Select, X);
1777117775
1777217776 SDValue Cond = Select.getOperand(0);
0 commit comments