mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
SelectionDAG: Add sext_inreg optimizations
v2: use dyn_cast fixup comments v3: use cast Reviewed-by: Matt Arsenault <arsenm2@gmail.com> Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220044 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1680,6 +1680,17 @@ SDValue DAGCombiner::visitADD(SDNode *N) {
|
||||
return DAG.getNode(ISD::SUB, DL, VT, N1, ZExt);
|
||||
}
|
||||
|
||||
// add X, (sextinreg Y i1) -> sub X, (and Y 1)
|
||||
if (N1.getOpcode() == ISD::SIGN_EXTEND_INREG) {
|
||||
VTSDNode *TN = cast<VTSDNode>(N1.getOperand(1));
|
||||
if (TN->getVT() == MVT::i1) {
|
||||
SDLoc DL(N);
|
||||
SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0),
|
||||
DAG.getConstant(1, VT));
|
||||
return DAG.getNode(ISD::SUB, DL, VT, N0, ZExt);
|
||||
}
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
@@ -1845,6 +1856,17 @@ SDValue DAGCombiner::visitSUB(SDNode *N) {
|
||||
VT);
|
||||
}
|
||||
|
||||
// sub X, (sextinreg Y i1) -> add X, (and Y 1)
|
||||
if (N1.getOpcode() == ISD::SIGN_EXTEND_INREG) {
|
||||
VTSDNode *TN = cast<VTSDNode>(N1.getOperand(1));
|
||||
if (TN->getVT() == MVT::i1) {
|
||||
SDLoc DL(N);
|
||||
SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0),
|
||||
DAG.getConstant(1, VT));
|
||||
return DAG.getNode(ISD::ADD, DL, VT, N0, ZExt);
|
||||
}
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user