| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index bf002fa5224ac05476f13470576c5f01f57c1494..a277388df2ce7c1dcf7e5f19ed4b1426f65fe2f3 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -87,6 +87,23 @@ MachineRepresentation MachineRepresentationFromArrayType(
|
| return MachineRepresentation::kNone;
|
| }
|
|
|
| +UseInfo CheckedUseInfoAsWord32FromHint(BinaryOperationHints::Hint hint) {
|
| + switch (hint) {
|
| + case BinaryOperationHints::kSignedSmall:
|
| + return UseInfo::CheckedSignedSmallAsWord32();
|
| + case BinaryOperationHints::kSigned32:
|
| + return UseInfo::CheckedSigned32AsWord32();
|
| + case BinaryOperationHints::kNumberOrOddball:
|
| + return UseInfo::CheckedNumberOrOddballAsWord32();
|
| + case BinaryOperationHints::kNone:
|
| + case BinaryOperationHints::kString:
|
| + case BinaryOperationHints::kAny:
|
| + break;
|
| + }
|
| + UNREACHABLE();
|
| + return UseInfo::None();
|
| +}
|
| +
|
| UseInfo TruncatingUseInfoFromRepresentation(MachineRepresentation rep) {
|
| switch (rep) {
|
| case MachineRepresentation::kTagged:
|
| @@ -742,14 +759,8 @@ class RepresentationSelector {
|
| MachineRepresentation::kWord32);
|
| }
|
| BinaryOperationHints::Hint hint = BinaryOperationHintOf(node->op());
|
| - if (hint == BinaryOperationHints::kSignedSmall ||
|
| - hint == BinaryOperationHints::kSigned32) {
|
| - return VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| - MachineRepresentation::kWord32);
|
| - }
|
| - DCHECK_EQ(BinaryOperationHints::kNumberOrOddball, hint);
|
| - VisitBinop(node, UseInfo::CheckedNumberOrOddballAsWord32(),
|
| - MachineRepresentation::kWord32, Type::Signed32());
|
| + return VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| + MachineRepresentation::kWord32);
|
| }
|
|
|
| // Helper for unops of the I -> O variety.
|
| @@ -1124,7 +1135,7 @@ class RepresentationSelector {
|
|
|
| if (hint == BinaryOperationHints::kSignedSmall ||
|
| hint == BinaryOperationHints::kSigned32) {
|
| - VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Signed32());
|
| if (lower()) ChangeToInt32OverflowOp(node);
|
| return;
|
| @@ -1412,7 +1423,7 @@ class RepresentationSelector {
|
|
|
| if (hint == BinaryOperationHints::kSignedSmall ||
|
| hint == BinaryOperationHints::kSigned32) {
|
| - VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Signed32());
|
| if (lower()) {
|
| LowerToCheckedInt32Mul(node, truncation, input0_type, input1_type);
|
| @@ -1508,11 +1519,11 @@ class RepresentationSelector {
|
| hint == BinaryOperationHints::kSigned32) {
|
| // If the result is truncated, we only need to check the inputs.
|
| if (truncation.IsUsedAsWord32()) {
|
| - VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32);
|
| if (lower()) DeferReplacement(node, lowering->Int32Div(node));
|
| } else {
|
| - VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Signed32());
|
| if (lower()) ChangeToInt32OverflowOp(node);
|
| }
|
| @@ -1616,11 +1627,11 @@ class RepresentationSelector {
|
| hint == BinaryOperationHints::kSigned32) {
|
| // If the result is truncated, we only need to check the inputs.
|
| if (truncation.IsUsedAsWord32()) {
|
| - VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32);
|
| if (lower()) DeferReplacement(node, lowering->Int32Mod(node));
|
| } else {
|
| - VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Signed32());
|
| if (lower()) ChangeToInt32OverflowOp(node);
|
| }
|
| @@ -1747,9 +1758,7 @@ class RepresentationSelector {
|
| }
|
| BinaryOperationHints::Hint hint = BinaryOperationHintOf(node->op());
|
| Type* rhs_type = GetUpperBound(node->InputAt(1));
|
| - VisitBinop(node, hint == BinaryOperationHints::kNumberOrOddball
|
| - ? UseInfo::CheckedNumberOrOddballAsWord32()
|
| - : UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Signed32());
|
| if (lower()) {
|
| lowering->DoShift(node, lowering->machine()->Word32Shl(), rhs_type);
|
| @@ -1785,9 +1794,7 @@ class RepresentationSelector {
|
| }
|
| BinaryOperationHints::Hint hint = BinaryOperationHintOf(node->op());
|
| Type* rhs_type = GetUpperBound(node->InputAt(1));
|
| - VisitBinop(node, hint == BinaryOperationHints::kNumberOrOddball
|
| - ? UseInfo::CheckedNumberOrOddballAsWord32()
|
| - : UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Signed32());
|
| if (lower()) {
|
| lowering->DoShift(node, lowering->machine()->Word32Sar(), rhs_type);
|
| @@ -1823,9 +1830,7 @@ class RepresentationSelector {
|
| }
|
| BinaryOperationHints::Hint hint = BinaryOperationHintOf(node->op());
|
| Type* rhs_type = GetUpperBound(node->InputAt(1));
|
| - VisitBinop(node, hint == BinaryOperationHints::kNumberOrOddball
|
| - ? UseInfo::CheckedNumberOrOddballAsWord32()
|
| - : UseInfo::CheckedSigned32AsWord32(),
|
| + VisitBinop(node, CheckedUseInfoAsWord32FromHint(hint),
|
| MachineRepresentation::kWord32, Type::Unsigned32());
|
| if (lower()) {
|
| lowering->DoShift(node, lowering->machine()->Word32Shr(), rhs_type);
|
| @@ -2141,8 +2146,7 @@ class RepresentationSelector {
|
| }
|
| case IrOpcode::kCheckTaggedSigned: {
|
| if (SmiValuesAre32Bits() && truncation.IsUsedAsWord32()) {
|
| - // TODO(jarin,bmeurer): Add CheckedSignedSmallAsWord32?
|
| - VisitUnop(node, UseInfo::CheckedSigned32AsWord32(),
|
| + VisitUnop(node, UseInfo::CheckedSignedSmallAsWord32(),
|
| MachineRepresentation::kWord32);
|
| if (lower()) DeferReplacement(node, node->InputAt(0));
|
| } else {
|
|
|