[SDAG] reduce code duplication; NFC
This commit is contained in:
parent
af57dbf12e
commit
777d1d1d98
|
@ -3052,6 +3052,7 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
DAGCombinerInfo &DCI,
|
||||
const SDLoc &dl) const {
|
||||
SelectionDAG &DAG = DCI.DAG;
|
||||
const DataLayout &Layout = DAG.getDataLayout();
|
||||
EVT OpVT = N0.getValueType();
|
||||
|
||||
// Constant fold or commute setcc.
|
||||
|
@ -3256,7 +3257,7 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
APInt newMask = APInt::getLowBitsSet(maskWidth, width);
|
||||
for (unsigned offset=0; offset<origWidth/width; offset++) {
|
||||
if (Mask.isSubsetOf(newMask)) {
|
||||
if (DAG.getDataLayout().isLittleEndian())
|
||||
if (Layout.isLittleEndian())
|
||||
bestOffset = (uint64_t)offset * (width/8);
|
||||
else
|
||||
bestOffset = (origWidth/width - offset - 1) * (width/8);
|
||||
|
@ -3332,8 +3333,7 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
if (DCI.isBeforeLegalizeOps() ||
|
||||
(isOperationLegal(ISD::SETCC, newVT) &&
|
||||
isCondCodeLegal(Cond, newVT.getSimpleVT()))) {
|
||||
EVT NewSetCCVT =
|
||||
getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), newVT);
|
||||
EVT NewSetCCVT = getSetCCResultType(Layout, *DAG.getContext(), newVT);
|
||||
SDValue NewConst = DAG.getConstant(C1.trunc(InSize), dl, newVT);
|
||||
|
||||
SDValue NewSetCC = DAG.getSetCC(dl, NewSetCCVT, N0.getOperand(0),
|
||||
|
@ -3619,9 +3619,9 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
|
||||
(VT == ShValTy || (isTypeLegal(VT) && VT.bitsLE(ShValTy))) &&
|
||||
N0.getOpcode() == ISD::AND) {
|
||||
auto &DL = DAG.getDataLayout();
|
||||
if (auto *AndRHS = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
|
||||
EVT ShiftTy = getShiftAmountTy(ShValTy, DL, !DCI.isBeforeLegalize());
|
||||
EVT ShiftTy =
|
||||
getShiftAmountTy(ShValTy, Layout, !DCI.isBeforeLegalize());
|
||||
if (Cond == ISD::SETNE && C1 == 0) {// (X & 8) != 0 --> (X & 8) >> 3
|
||||
// Perform the xform if the AND RHS is a single bit.
|
||||
unsigned ShCt = AndRHS->getAPIntValue().logBase2();
|
||||
|
@ -3647,6 +3647,7 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
|
||||
if (C1.getMinSignedBits() <= 64 &&
|
||||
!isLegalICmpImmediate(C1.getSExtValue())) {
|
||||
EVT ShiftTy = getShiftAmountTy(ShValTy, Layout, !DCI.isBeforeLegalize());
|
||||
// (X & -256) == 256 -> (X >> 8) == 1
|
||||
if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
|
||||
N0.getOpcode() == ISD::AND && N0.hasOneUse()) {
|
||||
|
@ -3654,14 +3655,10 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
const APInt &AndRHSC = AndRHS->getAPIntValue();
|
||||
if ((-AndRHSC).isPowerOf2() && (AndRHSC & C1) == C1) {
|
||||
unsigned ShiftBits = AndRHSC.countTrailingZeros();
|
||||
auto &DL = DAG.getDataLayout();
|
||||
EVT ShiftTy = getShiftAmountTy(ShValTy, DL,
|
||||
!DCI.isBeforeLegalize());
|
||||
EVT CmpTy = ShValTy;
|
||||
SDValue Shift = DAG.getNode(ISD::SRL, dl, CmpTy, N0.getOperand(0),
|
||||
SDValue Shift = DAG.getNode(ISD::SRL, dl, ShValTy, N0.getOperand(0),
|
||||
DAG.getConstant(ShiftBits, dl,
|
||||
ShiftTy));
|
||||
SDValue CmpRHS = DAG.getConstant(C1.lshr(ShiftBits), dl, CmpTy);
|
||||
SDValue CmpRHS = DAG.getConstant(C1.lshr(ShiftBits), dl, ShValTy);
|
||||
return DAG.getSetCC(dl, VT, Shift, CmpRHS, Cond);
|
||||
}
|
||||
}
|
||||
|
@ -3684,14 +3681,10 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
}
|
||||
NewC.lshrInPlace(ShiftBits);
|
||||
if (ShiftBits && NewC.getMinSignedBits() <= 64 &&
|
||||
isLegalICmpImmediate(NewC.getSExtValue())) {
|
||||
auto &DL = DAG.getDataLayout();
|
||||
EVT ShiftTy = getShiftAmountTy(ShValTy, DL,
|
||||
!DCI.isBeforeLegalize());
|
||||
EVT CmpTy = ShValTy;
|
||||
SDValue Shift = DAG.getNode(ISD::SRL, dl, CmpTy, N0,
|
||||
isLegalICmpImmediate(NewC.getSExtValue())) {
|
||||
SDValue Shift = DAG.getNode(ISD::SRL, dl, ShValTy, N0,
|
||||
DAG.getConstant(ShiftBits, dl, ShiftTy));
|
||||
SDValue CmpRHS = DAG.getConstant(NewC, dl, CmpTy);
|
||||
SDValue CmpRHS = DAG.getConstant(NewC, dl, ShValTy);
|
||||
return DAG.getSetCC(dl, VT, Shift, CmpRHS, NewCond);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue