@@ -2490,7 +2490,8 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
2490
2490
unsigned SelOpNo = 0;
2491
2491
SDValue Sel = BO->getOperand(0);
2492
2492
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()) {
2494
2495
SelOpNo = 1;
2495
2496
Sel = BO->getOperand(1);
2496
2497
@@ -2506,7 +2507,8 @@ SDValue DAGCombiner::foldBinOpIntoSelect(SDNode *BO) {
2506
2507
}
2507
2508
}
2508
2509
2509
- if (Sel.getOpcode() != ISD::SELECT || !Sel.hasOneUse())
2510
+ if ((Sel.getOpcode() != ISD::SELECT && Sel.getOpcode() != ISD::VSELECT) ||
2511
+ !Sel.hasOneUse())
2510
2512
return SDValue();
2511
2513
2512
2514
SDValue CT = Sel.getOperand(1);
@@ -10017,7 +10019,8 @@ SDValue DAGCombiner::visitShiftByConstant(SDNode *N) {
10017
10019
BinOpLHSVal.getOpcode() == ISD::SRL) &&
10018
10020
isa<ConstantSDNode>(BinOpLHSVal.getOperand(1));
10019
10021
bool IsCopyOrSelect = BinOpLHSVal.getOpcode() == ISD::CopyFromReg ||
10020
- BinOpLHSVal.getOpcode() == ISD::SELECT;
10022
+ BinOpLHSVal.getOpcode() == ISD::SELECT ||
10023
+ BinOpLHSVal.getOpcode() == ISD::VSELECT;
10021
10024
10022
10025
if (!IsShiftByConstant && !IsCopyOrSelect)
10023
10026
return SDValue();
@@ -13435,7 +13438,7 @@ static SDValue tryToFoldExtendOfConstant(SDNode *N, const SDLoc &DL,
13435
13438
// fold (sext (select cond, c1, c2)) -> (select cond, sext c1, sext c2)
13436
13439
// fold (zext (select cond, c1, c2)) -> (select cond, zext c1, zext c2)
13437
13440
// 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 ) {
13439
13442
SDValue Op1 = N0->getOperand(1);
13440
13443
SDValue Op2 = N0->getOperand(2);
13441
13444
if (isa<ConstantSDNode>(Op1) && isa<ConstantSDNode>(Op2) &&
@@ -17763,10 +17766,11 @@ SDValue DAGCombiner::visitFMUL(SDNode *N) {
17763
17766
// fold (fmul X, (select (fcmp X > 0.0), -1.0, 1.0)) -> (fneg (fabs X))
17764
17767
// fold (fmul X, (select (fcmp X > 0.0), 1.0, -1.0)) -> (fabs X)
17765
17768
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) &&
17767
17771
TLI.isOperationLegal(ISD::FABS, VT)) {
17768
17772
SDValue Select = N0, X = N1;
17769
- if (Select.getOpcode() != ISD::SELECT)
17773
+ if (Select.getOpcode() != ISD::SELECT && Select.getOpcode() != ISD::VSELECT )
17770
17774
std::swap(Select, X);
17771
17775
17772
17776
SDValue Cond = Select.getOperand(0);
0 commit comments