@@ -51206,10 +51206,10 @@ static SDValue combineAddOrSubToADCOrSBB(SDNode *N, const SDLoc &DL,
51206
51206
return SDValue();
51207
51207
}
51208
51208
51209
- static SDValue combineOrXorWithSETCC(SDNode *N, SDValue N0, SDValue N1,
51209
+ static SDValue combineOrXorWithSETCC(unsigned Opc, const SDLoc &DL, EVT VT,
51210
+ SDValue N0, SDValue N1,
51210
51211
SelectionDAG &DAG) {
51211
- assert((N->getOpcode() == ISD::XOR || N->getOpcode() == ISD::OR) &&
51212
- "Unexpected opcode");
51212
+ assert((Opc == ISD::XOR || Opc == ISD::OR) && "Unexpected opcode");
51213
51213
51214
51214
// Delegate to combineAddOrSubToADCOrSBB if we have:
51215
51215
//
@@ -51220,23 +51220,19 @@ static SDValue combineOrXorWithSETCC(SDNode *N, SDValue N0, SDValue N1,
51220
51220
if (N0.getOpcode() == ISD::ZERO_EXTEND &&
51221
51221
N0.getOperand(0).getOpcode() == X86ISD::SETCC && N0.hasOneUse()) {
51222
51222
if (auto *N1C = dyn_cast<ConstantSDNode>(N1)) {
51223
- bool IsSub = N->getOpcode() == ISD::XOR;
51223
+ bool IsSub = Opc == ISD::XOR;
51224
51224
bool N1COdd = N1C->getZExtValue() & 1;
51225
- if (IsSub ? N1COdd : !N1COdd) {
51226
- SDLoc DL(N);
51227
- EVT VT = N->getValueType(0);
51225
+ if (IsSub ? N1COdd : !N1COdd)
51228
51226
if (SDValue R = combineAddOrSubToADCOrSBB(IsSub, DL, VT, N1, N0, DAG))
51229
51227
return R;
51230
- }
51231
51228
}
51232
51229
}
51233
51230
51234
51231
// not(pcmpeq(and(X,CstPow2),0)) -> pcmpeq(and(X,CstPow2),CstPow2)
51235
- if (N->getOpcode() == ISD::XOR && N0.getOpcode() == X86ISD::PCMPEQ &&
51232
+ if (Opc == ISD::XOR && N0.getOpcode() == X86ISD::PCMPEQ &&
51236
51233
N0.getOperand(0).getOpcode() == ISD::AND &&
51237
51234
ISD::isBuildVectorAllZeros(N0.getOperand(1).getNode()) &&
51238
51235
ISD::isBuildVectorAllOnes(N1.getNode())) {
51239
- MVT VT = N->getSimpleValueType(0);
51240
51236
APInt UndefElts;
51241
51237
SmallVector<APInt> EltBits;
51242
51238
if (getTargetConstantBitsFromNode(N0.getOperand(0).getOperand(1),
@@ -51247,7 +51243,7 @@ static SDValue combineOrXorWithSETCC(SDNode *N, SDValue N0, SDValue N1,
51247
51243
IsPow2OrUndef &= UndefElts[I] || EltBits[I].isPowerOf2();
51248
51244
51249
51245
if (IsPow2OrUndef)
51250
- return DAG.getNode(X86ISD::PCMPEQ, SDLoc(N) , VT, N0.getOperand(0),
51246
+ return DAG.getNode(X86ISD::PCMPEQ, DL , VT, N0.getOperand(0),
51251
51247
N0.getOperand(0).getOperand(1));
51252
51248
}
51253
51249
}
@@ -51409,7 +51405,7 @@ static SDValue combineOr(SDNode *N, SelectionDAG &DAG,
51409
51405
if (SDValue R = foldMaskedMerge(N, DAG))
51410
51406
return R;
51411
51407
51412
- if (SDValue R = combineOrXorWithSETCC(N, N0, N1, DAG))
51408
+ if (SDValue R = combineOrXorWithSETCC(N->getOpcode(), dl, VT , N0, N1, DAG))
51413
51409
return R;
51414
51410
51415
51411
return SDValue();
@@ -53638,7 +53634,7 @@ static SDValue combineXor(SDNode *N, SelectionDAG &DAG,
53638
53634
if (SDValue SetCC = foldXor1SetCC(N, DAG))
53639
53635
return SetCC;
53640
53636
53641
- if (SDValue R = combineOrXorWithSETCC(N, N0, N1, DAG))
53637
+ if (SDValue R = combineOrXorWithSETCC(N->getOpcode(), DL, VT , N0, N1, DAG))
53642
53638
return R;
53643
53639
53644
53640
if (SDValue RV = foldXorTruncShiftIntoCmp(N, DAG))
0 commit comments