@@ -1381,7 +1381,6 @@ class RepresentationSelector {
13811381 IsSomePositiveOrderedNumber (input1_type)
13821382 ? CheckForMinusZeroMode::kDontCheckForMinusZero
13831383 : CheckForMinusZeroMode::kCheckForMinusZero ;
1384-
13851384 NodeProperties::ChangeOp (node, simplified ()->CheckedInt32Mul (mz_mode));
13861385 }
13871386
@@ -1425,6 +1424,13 @@ class RepresentationSelector {
14251424
14261425 Type left_feedback_type = TypeOf (node->InputAt (0 ));
14271426 Type right_feedback_type = TypeOf (node->InputAt (1 ));
1427+
1428+ // Using Signed32 as restriction type amounts to promising there won't be
1429+ // signed overflow. This is incompatible with relying on a Word32
1430+ // truncation in order to skip the overflow check.
1431+ Type const restriction =
1432+ truncation.IsUsedAsWord32 () ? Type::Any () : Type::Signed32 ();
1433+
14281434 // Handle the case when no int32 checks on inputs are necessary (but
14291435 // an overflow check is needed on the output). Note that we do not
14301436 // have to do any check if at most one side can be minus zero. For
@@ -1438,7 +1444,7 @@ class RepresentationSelector {
14381444 right_upper.Is (Type::Signed32OrMinusZero ()) &&
14391445 (left_upper.Is (Type::Signed32 ()) || right_upper.Is (Type::Signed32 ()))) {
14401446 VisitBinop<T>(node, UseInfo::TruncatingWord32 (),
1441- MachineRepresentation::kWord32 , Type::Signed32 () );
1447+ MachineRepresentation::kWord32 , restriction );
14421448 } else {
14431449 // If the output's truncation is identify-zeros, we can pass it
14441450 // along. Moreover, if the operation is addition and we know the
@@ -1458,8 +1464,9 @@ class RepresentationSelector {
14581464 UseInfo right_use = CheckedUseInfoAsWord32FromHint (hint, FeedbackSource (),
14591465 kIdentifyZeros );
14601466 VisitBinop<T>(node, left_use, right_use, MachineRepresentation::kWord32 ,
1461- Type::Signed32 () );
1467+ restriction );
14621468 }
1469+
14631470 if (lower<T>()) {
14641471 if (truncation.IsUsedAsWord32 () ||
14651472 !CanOverflowSigned32 (node->op (), left_feedback_type,
0 commit comments