@@ -738,18 +738,15 @@ SDValue DAGTypeLegalizer::PromoteIntRes_CTLZ(SDNode *N) {
738738 // Subtract off the extra leading bits in the bigger type.
739739 SDValue ExtractLeadingBits = DAG.getConstant (
740740 NVT.getScalarSizeInBits () - OVT.getScalarSizeInBits (), dl, NVT);
741+ // Zero extend to the promoted type and do the count there.
742+ SDValue Op = ZExtPromotedInteger (N->getOperand (0 ));
741743
742- if (!N->isVPOpcode ()) {
743- // Zero extend to the promoted type and do the count there.
744- SDValue Op = ZExtPromotedInteger (N->getOperand (0 ));
744+ if (!N->isVPOpcode ())
745745 return DAG.getNode (ISD::SUB, dl, NVT,
746746 DAG.getNode (N->getOpcode (), dl, NVT, Op),
747747 ExtractLeadingBits);
748- }
749748 SDValue Mask = N->getOperand (1 );
750749 SDValue EVL = N->getOperand (2 );
751- // Zero extend to the promoted type and do the count there.
752- SDValue Op = VPZExtPromotedInteger (N->getOperand (0 ), Mask, EVL);
753750 return DAG.getNode (ISD::VP_SUB, dl, NVT,
754751 DAG.getNode (N->getOpcode (), dl, NVT, Op, Mask, EVL),
755752 ExtractLeadingBits, Mask, EVL);
@@ -806,14 +803,12 @@ SDValue DAGTypeLegalizer::PromoteIntRes_CTPOP_PARITY(SDNode *N) {
806803 }
807804
808805 // Zero extend to the promoted type and do the count or parity there.
809- if (! N->isVPOpcode ()) {
810- SDValue Op = ZExtPromotedInteger ( N->getOperand ( 0 ));
806+ SDValue Op = ZExtPromotedInteger ( N->getOperand ( 0 ));
807+ if (! N->isVPOpcode ())
811808 return DAG.getNode (N->getOpcode (), SDLoc (N), Op.getValueType (), Op);
812- }
813809
814810 SDValue Mask = N->getOperand (1 );
815811 SDValue EVL = N->getOperand (2 );
816- SDValue Op = VPZExtPromotedInteger (N->getOperand (0 ), Mask, EVL);
817812 return DAG.getNode (N->getOpcode (), SDLoc (N), Op.getValueType (), Op, Mask,
818813 EVL);
819814}
@@ -1483,17 +1478,13 @@ SDValue DAGTypeLegalizer::PromoteIntRes_FFREXP(SDNode *N) {
14831478SDValue DAGTypeLegalizer::PromoteIntRes_SHL (SDNode *N) {
14841479 SDValue LHS = GetPromotedInteger (N->getOperand (0 ));
14851480 SDValue RHS = N->getOperand (1 );
1486- if (N->getOpcode () != ISD::VP_SHL) {
1487- if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1488- RHS = ZExtPromotedInteger (RHS);
1489-
1481+ if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1482+ RHS = ZExtPromotedInteger (RHS);
1483+ if (N->getOpcode () != ISD::VP_SHL)
14901484 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS);
1491- }
14921485
14931486 SDValue Mask = N->getOperand (2 );
14941487 SDValue EVL = N->getOperand (3 );
1495- if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1496- RHS = VPZExtPromotedInteger (RHS, Mask, EVL);
14971488 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS,
14981489 Mask, EVL);
14991490}
@@ -1519,37 +1510,30 @@ SDValue DAGTypeLegalizer::PromoteIntRes_SimpleIntBinOp(SDNode *N) {
15191510}
15201511
15211512SDValue DAGTypeLegalizer::PromoteIntRes_SExtIntBinOp (SDNode *N) {
1522- if (N-> getNumOperands () == 2 ) {
1523- // Sign extend the input.
1524- SDValue LHS = SExtPromotedInteger (N->getOperand (0 ));
1525- SDValue RHS = SExtPromotedInteger (N->getOperand ( 1 ));
1513+ // Sign extend the input.
1514+ SDValue LHS = SExtPromotedInteger (N-> getOperand ( 0 ));
1515+ SDValue RHS = SExtPromotedInteger (N->getOperand (1 ));
1516+ if (N->getNumOperands () == 2 )
15261517 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS);
1527- }
15281518 assert (N->getNumOperands () == 4 && " Unexpected number of operands!" );
15291519 assert (N->isVPOpcode () && " Expected VP opcode" );
15301520 SDValue Mask = N->getOperand (2 );
15311521 SDValue EVL = N->getOperand (3 );
1532- // Sign extend the input.
1533- SDValue LHS = VPSExtPromotedInteger (N->getOperand (0 ), Mask, EVL);
1534- SDValue RHS = VPSExtPromotedInteger (N->getOperand (1 ), Mask, EVL);
15351522 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS,
15361523 Mask, EVL);
15371524}
15381525
15391526SDValue DAGTypeLegalizer::PromoteIntRes_ZExtIntBinOp (SDNode *N) {
1540- if (N-> getNumOperands () == 2 ) {
1541- // Zero extend the input.
1542- SDValue LHS = ZExtPromotedInteger (N->getOperand (0 ));
1543- SDValue RHS = ZExtPromotedInteger (N->getOperand ( 1 ));
1527+ // Zero extend the input.
1528+ SDValue LHS = ZExtPromotedInteger (N-> getOperand ( 0 ));
1529+ SDValue RHS = ZExtPromotedInteger (N->getOperand (1 ));
1530+ if (N->getNumOperands () == 2 )
15441531 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS);
1545- }
15461532 assert (N->getNumOperands () == 4 && " Unexpected number of operands!" );
15471533 assert (N->isVPOpcode () && " Expected VP opcode" );
15481534 // Zero extend the input.
15491535 SDValue Mask = N->getOperand (2 );
15501536 SDValue EVL = N->getOperand (3 );
1551- SDValue LHS = VPZExtPromotedInteger (N->getOperand (0 ), Mask, EVL);
1552- SDValue RHS = VPZExtPromotedInteger (N->getOperand (1 ), Mask, EVL);
15531537 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS,
15541538 Mask, EVL);
15551539}
@@ -1567,41 +1551,31 @@ SDValue DAGTypeLegalizer::PromoteIntRes_UMINUMAX(SDNode *N) {
15671551}
15681552
15691553SDValue DAGTypeLegalizer::PromoteIntRes_SRA (SDNode *N) {
1554+ // The input value must be properly sign extended.
1555+ SDValue LHS = SExtPromotedInteger (N->getOperand (0 ));
15701556 SDValue RHS = N->getOperand (1 );
1571- if (N->getOpcode () != ISD::VP_SRA) {
1572- // The input value must be properly sign extended.
1573- SDValue LHS = SExtPromotedInteger (N->getOperand (0 ));
1574- if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1575- RHS = ZExtPromotedInteger (RHS);
1557+ if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1558+ RHS = ZExtPromotedInteger (RHS);
1559+ if (N->getOpcode () != ISD::VP_SRA)
15761560 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS);
1577- }
15781561
15791562 SDValue Mask = N->getOperand (2 );
15801563 SDValue EVL = N->getOperand (3 );
1581- // The input value must be properly sign extended.
1582- SDValue LHS = VPSExtPromotedInteger (N->getOperand (0 ), Mask, EVL);
1583- if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1584- RHS = VPZExtPromotedInteger (RHS, Mask, EVL);
15851564 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS,
15861565 Mask, EVL);
15871566}
15881567
15891568SDValue DAGTypeLegalizer::PromoteIntRes_SRL (SDNode *N) {
15901569 SDValue RHS = N->getOperand (1 );
1591- if (N-> getOpcode () != ISD::VP_SRL) {
1592- // The input value must be properly zero extended.
1593- SDValue LHS = ZExtPromotedInteger (N-> getOperand ( 0 ));
1594- if ( getTypeAction ( RHS. getValueType ()) == TargetLowering::TypePromoteInteger)
1595- RHS = ZExtPromotedInteger (RHS);
1570+ // The input value must be properly zero extended.
1571+ SDValue LHS = ZExtPromotedInteger (N-> getOperand ( 0 ));
1572+ if ( getTypeAction (RHS. getValueType ()) == TargetLowering::TypePromoteInteger)
1573+ RHS = ZExtPromotedInteger (RHS);
1574+ if (N-> getOpcode () != ISD::VP_SRL)
15961575 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS);
1597- }
15981576
15991577 SDValue Mask = N->getOperand (2 );
16001578 SDValue EVL = N->getOperand (3 );
1601- // The input value must be properly zero extended.
1602- SDValue LHS = VPZExtPromotedInteger (N->getOperand (0 ), Mask, EVL);
1603- if (getTypeAction (RHS.getValueType ()) == TargetLowering::TypePromoteInteger)
1604- RHS = VPZExtPromotedInteger (RHS, Mask, EVL);
16051579 return DAG.getNode (N->getOpcode (), SDLoc (N), LHS.getValueType (), LHS, RHS,
16061580 Mask, EVL);
16071581}
@@ -1671,7 +1645,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_VPFunnelShift(SDNode *N) {
16711645 SDValue Mask = N->getOperand (3 );
16721646 SDValue EVL = N->getOperand (4 );
16731647 if (getTypeAction (Amt.getValueType ()) == TargetLowering::TypePromoteInteger)
1674- Amt = VPZExtPromotedInteger (Amt, Mask, EVL );
1648+ Amt = ZExtPromotedInteger (Amt);
16751649 EVT AmtVT = Amt.getValueType ();
16761650
16771651 SDLoc DL (N);
0 commit comments