Chromium Code Reviews| Index: src/compiler/simplified-lowering.cc |
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc |
| index 86cae22269b2c0482f4977c50b50ec0d9097d92c..fc7dcf8f939344dba37a79bb1d7eaf4a45611763 100644 |
| --- a/src/compiler/simplified-lowering.cc |
| +++ b/src/compiler/simplified-lowering.cc |
| @@ -911,6 +911,21 @@ class RepresentationSelector { |
| } |
| } |
| + void VisitObjectIs(Node* node, Type* type, SimplifiedLowering* lowering) { |
| + Type* const input_type = TypeOf(node->InputAt(0)); |
| + if (input_type->Is(type)) { |
| + VisitUnop(node, UseInfo::None(), MachineRepresentation::kBit); |
|
Jarin
2016/09/16 15:37:11
Does it really buy you anything to send UseInfo::N
Benedikt Meurer
2016/09/16 17:14:32
I guess that would work. Do you want me to change
|
| + if (lower()) { |
| + DeferReplacement(node, lowering->jsgraph()->Int32Constant(1)); |
| + } |
| + } else { |
| + VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kBit); |
| + if (lower() && !input_type->Maybe(type)) { |
| + DeferReplacement(node, lowering->jsgraph()->Int32Constant(0)); |
| + } |
| + } |
| + } |
| + |
| void VisitCall(Node* node, SimplifiedLowering* lowering) { |
| const CallDescriptor* desc = CallDescriptorOf(node->op()); |
| int params = static_cast<int>(desc->ParameterCount()); |
| @@ -2339,12 +2354,32 @@ class RepresentationSelector { |
| } |
| return; |
| } |
| - case IrOpcode::kObjectIsCallable: |
| - case IrOpcode::kObjectIsNumber: |
| - case IrOpcode::kObjectIsReceiver: |
| - case IrOpcode::kObjectIsSmi: |
| - case IrOpcode::kObjectIsString: |
| - case IrOpcode::kObjectIsUndetectable: |
| + case IrOpcode::kObjectIsCallable: { |
| + // TODO(turbofan): Add Type::Callable to optimize this? |
| + VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kBit); |
| + return; |
| + } |
| + case IrOpcode::kObjectIsNumber: { |
| + VisitObjectIs(node, Type::Number(), lowering); |
| + return; |
| + } |
| + case IrOpcode::kObjectIsReceiver: { |
| + VisitObjectIs(node, Type::Receiver(), lowering); |
| + return; |
| + } |
| + case IrOpcode::kObjectIsSmi: { |
| + // TODO(turbofan): Optimize based on input representation. |
| + VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kBit); |
| + return; |
| + } |
| + case IrOpcode::kObjectIsString: { |
| + VisitObjectIs(node, Type::String(), lowering); |
| + return; |
| + } |
| + case IrOpcode::kObjectIsUndetectable: { |
| + VisitObjectIs(node, Type::Undetectable(), lowering); |
| + return; |
| + } |
| case IrOpcode::kArrayBufferWasNeutered: { |
| VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kBit); |
| return; |