mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 13:46:13 +00:00
SelectionDAG: Cleanup integer bin op promotion functions.
SDIV and UDIV had special handling, but this is the same handling that min/max need. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256098 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9832f083b4
commit
bfe2e58c93
@ -76,9 +76,9 @@ void DAGTypeLegalizer::PromoteIntegerResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::SELECT_CC: Res = PromoteIntRes_SELECT_CC(N); break;
|
||||
case ISD::SETCC: Res = PromoteIntRes_SETCC(N); break;
|
||||
case ISD::SMIN:
|
||||
case ISD::SMAX: Res = PromoteIntRes_SExtOrZExtIntBinOp(N, true); break;
|
||||
case ISD::SMAX: Res = PromoteIntRes_SExtIntBinOp(N); break;
|
||||
case ISD::UMIN:
|
||||
case ISD::UMAX: Res = PromoteIntRes_SExtOrZExtIntBinOp(N, false); break;
|
||||
case ISD::UMAX: Res = PromoteIntRes_ZExtIntBinOp(N); break;
|
||||
|
||||
case ISD::SHL: Res = PromoteIntRes_SHL(N); break;
|
||||
case ISD::SIGN_EXTEND_INREG:
|
||||
@ -119,10 +119,10 @@ void DAGTypeLegalizer::PromoteIntegerResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::MUL: Res = PromoteIntRes_SimpleIntBinOp(N); break;
|
||||
|
||||
case ISD::SDIV:
|
||||
case ISD::SREM: Res = PromoteIntRes_SDIV(N); break;
|
||||
case ISD::SREM: Res = PromoteIntRes_SExtIntBinOp(N); break;
|
||||
|
||||
case ISD::UDIV:
|
||||
case ISD::UREM: Res = PromoteIntRes_UDIV(N); break;
|
||||
case ISD::UREM: Res = PromoteIntRes_ZExtIntBinOp(N); break;
|
||||
|
||||
case ISD::SADDO:
|
||||
case ISD::SSUBO: Res = PromoteIntRes_SADDSUBO(N, ResNo); break;
|
||||
@ -566,14 +566,6 @@ SDValue DAGTypeLegalizer::PromoteIntRes_SADDSUBO(SDNode *N, unsigned ResNo) {
|
||||
return Res;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_SDIV(SDNode *N) {
|
||||
// Sign extend the input.
|
||||
SDValue LHS = SExtPromotedInteger(N->getOperand(0));
|
||||
SDValue RHS = SExtPromotedInteger(N->getOperand(1));
|
||||
return DAG.getNode(N->getOpcode(), SDLoc(N),
|
||||
LHS.getValueType(), LHS, RHS);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_SELECT(SDNode *N) {
|
||||
SDValue LHS = GetPromotedInteger(N->getOperand(1));
|
||||
SDValue RHS = GetPromotedInteger(N->getOperand(2));
|
||||
@ -661,18 +653,18 @@ SDValue DAGTypeLegalizer::PromoteIntRes_SimpleIntBinOp(SDNode *N) {
|
||||
LHS.getValueType(), LHS, RHS);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_SExtOrZExtIntBinOp(SDNode *N,
|
||||
bool Signed) {
|
||||
SDValue LHS, RHS;
|
||||
|
||||
if (Signed) {
|
||||
LHS = SExtPromotedInteger(N->getOperand(0));
|
||||
RHS = SExtPromotedInteger(N->getOperand(1));
|
||||
} else {
|
||||
LHS = ZExtPromotedInteger(N->getOperand(0));
|
||||
RHS = ZExtPromotedInteger(N->getOperand(1));
|
||||
}
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_SExtIntBinOp(SDNode *N) {
|
||||
// Sign extend the input.
|
||||
SDValue LHS = SExtPromotedInteger(N->getOperand(0));
|
||||
SDValue RHS = SExtPromotedInteger(N->getOperand(1));
|
||||
return DAG.getNode(N->getOpcode(), SDLoc(N),
|
||||
LHS.getValueType(), LHS, RHS);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_ZExtIntBinOp(SDNode *N) {
|
||||
// Zero extend the input.
|
||||
SDValue LHS = ZExtPromotedInteger(N->getOperand(0));
|
||||
SDValue RHS = ZExtPromotedInteger(N->getOperand(1));
|
||||
return DAG.getNode(N->getOpcode(), SDLoc(N),
|
||||
LHS.getValueType(), LHS, RHS);
|
||||
}
|
||||
@ -818,14 +810,6 @@ SDValue DAGTypeLegalizer::PromoteIntRes_XMULO(SDNode *N, unsigned ResNo) {
|
||||
return Mul;
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_UDIV(SDNode *N) {
|
||||
// Zero extend the input.
|
||||
SDValue LHS = ZExtPromotedInteger(N->getOperand(0));
|
||||
SDValue RHS = ZExtPromotedInteger(N->getOperand(1));
|
||||
return DAG.getNode(N->getOpcode(), SDLoc(N),
|
||||
LHS.getValueType(), LHS, RHS);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntRes_UNDEF(SDNode *N) {
|
||||
return DAG.getUNDEF(TLI.getTypeToTransformTo(*DAG.getContext(),
|
||||
N->getValueType(0)));
|
||||
|
@ -269,20 +269,19 @@ private:
|
||||
SDValue PromoteIntRes_MGATHER(MaskedGatherSDNode *N);
|
||||
SDValue PromoteIntRes_Overflow(SDNode *N);
|
||||
SDValue PromoteIntRes_SADDSUBO(SDNode *N, unsigned ResNo);
|
||||
SDValue PromoteIntRes_SDIV(SDNode *N);
|
||||
SDValue PromoteIntRes_SELECT(SDNode *N);
|
||||
SDValue PromoteIntRes_VSELECT(SDNode *N);
|
||||
SDValue PromoteIntRes_SELECT_CC(SDNode *N);
|
||||
SDValue PromoteIntRes_SETCC(SDNode *N);
|
||||
SDValue PromoteIntRes_SHL(SDNode *N);
|
||||
SDValue PromoteIntRes_SimpleIntBinOp(SDNode *N);
|
||||
SDValue PromoteIntRes_SExtOrZExtIntBinOp(SDNode *N, bool Signed);
|
||||
SDValue PromoteIntRes_ZExtIntBinOp(SDNode *N);
|
||||
SDValue PromoteIntRes_SExtIntBinOp(SDNode *N);
|
||||
SDValue PromoteIntRes_SIGN_EXTEND_INREG(SDNode *N);
|
||||
SDValue PromoteIntRes_SRA(SDNode *N);
|
||||
SDValue PromoteIntRes_SRL(SDNode *N);
|
||||
SDValue PromoteIntRes_TRUNCATE(SDNode *N);
|
||||
SDValue PromoteIntRes_UADDSUBO(SDNode *N, unsigned ResNo);
|
||||
SDValue PromoteIntRes_UDIV(SDNode *N);
|
||||
SDValue PromoteIntRes_UNDEF(SDNode *N);
|
||||
SDValue PromoteIntRes_VAARG(SDNode *N);
|
||||
SDValue PromoteIntRes_XMULO(SDNode *N, unsigned ResNo);
|
||||
|
Loading…
Reference in New Issue
Block a user