mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Implement mulo x, 2 -> addo x, x in DAGCombiner.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131800 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -165,6 +165,8 @@ namespace {
|
||||
SDValue visitMULHS(SDNode *N);
|
||||
SDValue visitSMUL_LOHI(SDNode *N);
|
||||
SDValue visitUMUL_LOHI(SDNode *N);
|
||||
SDValue visitSMULO(SDNode *N);
|
||||
SDValue visitUMULO(SDNode *N);
|
||||
SDValue visitSDIVREM(SDNode *N);
|
||||
SDValue visitUDIVREM(SDNode *N);
|
||||
SDValue visitAND(SDNode *N);
|
||||
@ -1047,6 +1049,8 @@ SDValue DAGCombiner::visit(SDNode *N) {
|
||||
case ISD::MULHS: return visitMULHS(N);
|
||||
case ISD::SMUL_LOHI: return visitSMUL_LOHI(N);
|
||||
case ISD::UMUL_LOHI: return visitUMUL_LOHI(N);
|
||||
case ISD::SMULO: return visitSMULO(N);
|
||||
case ISD::UMULO: return visitUMULO(N);
|
||||
case ISD::SDIVREM: return visitSDIVREM(N);
|
||||
case ISD::UDIVREM: return visitUDIVREM(N);
|
||||
case ISD::AND: return visitAND(N);
|
||||
@ -2177,6 +2181,26 @@ SDValue DAGCombiner::visitUMUL_LOHI(SDNode *N) {
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitSMULO(SDNode *N) {
|
||||
// (smulo x, 2) -> (saddo x, x)
|
||||
if (ConstantSDNode *C2 = dyn_cast<ConstantSDNode>(N->getOperand(1)))
|
||||
if (C2->getAPIntValue() == 2)
|
||||
return DAG.getNode(ISD::SADDO, N->getDebugLoc(), N->getVTList(),
|
||||
N->getOperand(0), N->getOperand(0));
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitUMULO(SDNode *N) {
|
||||
// (umulo x, 2) -> (uaddo x, x)
|
||||
if (ConstantSDNode *C2 = dyn_cast<ConstantSDNode>(N->getOperand(1)))
|
||||
if (C2->getAPIntValue() == 2)
|
||||
return DAG.getNode(ISD::UADDO, N->getDebugLoc(), N->getVTList(),
|
||||
N->getOperand(0), N->getOperand(0));
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitSDIVREM(SDNode *N) {
|
||||
SDValue Res = SimplifyNodeWithTwoResults(N, ISD::SDIV, ISD::SREM);
|
||||
if (Res.getNode()) return Res;
|
||||
|
Reference in New Issue
Block a user