| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index d1f6c8743bbe466d850ca74493daaa6f8b09f425..7119d94d6f4355407db142167eb5b02402bce39e 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -1245,24 +1245,6 @@ class RepresentationSelector {
|
| }
|
| return;
|
| }
|
| - case IrOpcode::kBooleanToNumber: {
|
| - if (lower()) {
|
| - NodeInfo* input_info = GetInfo(node->InputAt(0));
|
| - if (input_info->representation() == MachineRepresentation::kBit) {
|
| - // BooleanToNumber(x: kRepBit) => x
|
| - DeferReplacement(node, node->InputAt(0));
|
| - } else {
|
| - // BooleanToNumber(x: kRepTagged) => WordEqual(x, #true)
|
| - node->AppendInput(jsgraph_->zone(), jsgraph_->TrueConstant());
|
| - NodeProperties::ChangeOp(node, lowering->machine()->WordEqual());
|
| - }
|
| - } else {
|
| - // No input representation requirement; adapt during lowering.
|
| - ProcessInput(node, 0, UseInfo::AnyTruncatingToBool());
|
| - SetOutput(node, MachineRepresentation::kWord32);
|
| - }
|
| - return;
|
| - }
|
| case IrOpcode::kNumberEqual:
|
| case IrOpcode::kNumberLessThan:
|
| case IrOpcode::kNumberLessThanOrEqual: {
|
| @@ -1790,24 +1772,6 @@ class RepresentationSelector {
|
| MachineRepresentation::kTagged);
|
| return;
|
| }
|
| - case IrOpcode::kStringToNumber: {
|
| - VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
| - if (lower()) {
|
| - // StringToNumber(x) => Call(StringToNumber, x, no-context)
|
| - Operator::Properties properties = Operator::kEliminatable;
|
| - Callable callable = CodeFactory::StringToNumber(jsgraph_->isolate());
|
| - CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
| - CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
| - jsgraph_->isolate(), jsgraph_->zone(), callable.descriptor(), 0,
|
| - flags, properties);
|
| - node->InsertInput(jsgraph_->zone(), 0,
|
| - jsgraph_->HeapConstant(callable.code()));
|
| - node->AppendInput(jsgraph_->zone(), jsgraph_->NoContextConstant());
|
| - node->AppendInput(jsgraph_->zone(), jsgraph_->graph()->start());
|
| - NodeProperties::ChangeOp(node, jsgraph_->common()->Call(desc));
|
| - }
|
| - return;
|
| - }
|
|
|
| case IrOpcode::kCheckBounds: {
|
| if (TypeOf(node->InputAt(0))->Is(Type::Unsigned32())) {
|
| @@ -1995,8 +1959,14 @@ class RepresentationSelector {
|
| }
|
| return;
|
| }
|
| - case IrOpcode::kPlainPrimitiveToNumber:
|
| - if (truncation.TruncatesToWord32()) {
|
| + case IrOpcode::kPlainPrimitiveToNumber: {
|
| + if (InputIs(node, Type::Boolean())) {
|
| + VisitUnop(node, UseInfo::Bool(), MachineRepresentation::kWord32);
|
| + if (lower()) DeferReplacement(node, node->InputAt(0));
|
| + } else if (InputIs(node, Type::String())) {
|
| + VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
| + if (lower()) lowering->DoStringToNumber(node);
|
| + } else if (truncation.TruncatesToWord32()) {
|
| // TODO(jarin): Extend this to Number \/ Oddball
|
| if (InputIs(node, Type::NumberOrUndefined())) {
|
| VisitUnop(node, UseInfo::TruncatingWord32(),
|
| @@ -2028,6 +1998,7 @@ class RepresentationSelector {
|
| VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
|
| }
|
| return;
|
| + }
|
| case IrOpcode::kObjectIsCallable:
|
| case IrOpcode::kObjectIsNumber:
|
| case IrOpcode::kObjectIsReceiver:
|
| @@ -3270,6 +3241,19 @@ void SimplifiedLowering::DoShift(Node* node, Operator const* op,
|
| NodeProperties::ChangeOp(node, op);
|
| }
|
|
|
| +void SimplifiedLowering::DoStringToNumber(Node* node) {
|
| + Operator::Properties properties = Operator::kEliminatable;
|
| + Callable callable = CodeFactory::StringToNumber(isolate());
|
| + CallDescriptor::Flags flags = CallDescriptor::kNoFlags;
|
| + CallDescriptor* desc = Linkage::GetStubCallDescriptor(
|
| + isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties);
|
| + node->InsertInput(graph()->zone(), 0,
|
| + jsgraph()->HeapConstant(callable.code()));
|
| + node->AppendInput(graph()->zone(), jsgraph()->NoContextConstant());
|
| + node->AppendInput(graph()->zone(), graph()->start());
|
| + NodeProperties::ChangeOp(node, common()->Call(desc));
|
| +}
|
| +
|
| Node* SimplifiedLowering::ToNumberCode() {
|
| if (!to_number_code_.is_set()) {
|
| Callable callable = CodeFactory::ToNumber(isolate());
|
|
|