@@ -30007,7 +30007,7 @@ static SDValue combineOr(SDNode *N, SelectionDAG &DAG,
30007
30007
return SDValue();
30008
30008
}
30009
30009
30010
- // Generate NEG and CMOV for integer abs.
30010
+ /// Generate NEG and CMOV for integer abs.
30011
30011
static SDValue combineIntegerAbs(SDNode *N, SelectionDAG &DAG) {
30012
30012
EVT VT = N->getValueType(0);
30013
30013
@@ -30023,21 +30023,19 @@ static SDValue combineIntegerAbs(SDNode *N, SelectionDAG &DAG) {
30023
30023
// Check pattern of XOR(ADD(X,Y), Y) where Y is SRA(X, size(X)-1)
30024
30024
// and change it to SUB and CMOV.
30025
30025
if (VT.isInteger() && N->getOpcode() == ISD::XOR &&
30026
- N0.getOpcode() == ISD::ADD &&
30027
- N0.getOperand(1) == N1 &&
30028
- N1.getOpcode() == ISD::SRA &&
30029
- N1.getOperand(0) == N0.getOperand(0))
30030
- if (ConstantSDNode *Y1C = dyn_cast<ConstantSDNode>(N1.getOperand(1)))
30031
- if (Y1C->getAPIntValue() == VT.getSizeInBits()-1) {
30032
- // Generate SUB & CMOV.
30033
- SDValue Neg = DAG.getNode(X86ISD::SUB, DL, DAG.getVTList(VT, MVT::i32),
30034
- DAG.getConstant(0, DL, VT), N0.getOperand(0));
30035
-
30036
- SDValue Ops[] = { N0.getOperand(0), Neg,
30037
- DAG.getConstant(X86::COND_GE, DL, MVT::i8),
30038
- SDValue(Neg.getNode(), 1) };
30039
- return DAG.getNode(X86ISD::CMOV, DL, DAG.getVTList(VT, MVT::Glue), Ops);
30040
- }
30026
+ N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1 &&
30027
+ N1.getOpcode() == ISD::SRA && N1.getOperand(0) == N0.getOperand(0)) {
30028
+ auto *Y1C = dyn_cast<ConstantSDNode>(N1.getOperand(1));
30029
+ if (Y1C && Y1C->getAPIntValue() == VT.getSizeInBits() - 1) {
30030
+ // Generate SUB & CMOV.
30031
+ SDValue Neg = DAG.getNode(X86ISD::SUB, DL, DAG.getVTList(VT, MVT::i32),
30032
+ DAG.getConstant(0, DL, VT), N0.getOperand(0));
30033
+ SDValue Ops[] = {N0.getOperand(0), Neg,
30034
+ DAG.getConstant(X86::COND_GE, DL, MVT::i8),
30035
+ SDValue(Neg.getNode(), 1)};
30036
+ return DAG.getNode(X86ISD::CMOV, DL, DAG.getVTList(VT, MVT::Glue), Ops);
30037
+ }
30038
+ }
30041
30039
return SDValue();
30042
30040
}
30043
30041
0 commit comments