Chromium Code Reviews| Index: src/compiler/effect-control-linearizer.cc |
| diff --git a/src/compiler/effect-control-linearizer.cc b/src/compiler/effect-control-linearizer.cc |
| index b0158525723ee21ea7de1f8d0345a7ea5b820099..0a8fbd900d9ddafe7f95c1c1146961e6bfaa193d 100644 |
| --- a/src/compiler/effect-control-linearizer.cc |
| +++ b/src/compiler/effect-control-linearizer.cc |
| @@ -730,6 +730,12 @@ bool EffectControlLinearizer::TryWireInStateEffect(Node* node, |
| case IrOpcode::kObjectIsUndetectable: |
| state = LowerObjectIsUndetectable(node, *effect, *control); |
| break; |
| + case IrOpcode::kNewRestParameterElements: |
| + state = LowerNewRestParameterElements(node, *effect, *control); |
| + break; |
| + case IrOpcode::kNewUnmappedArgumentsElements: |
| + state = LowerNewUnmappedArgumentsElements(node, *effect, *control); |
| + break; |
| case IrOpcode::kArrayBufferWasNeutered: |
| state = LowerArrayBufferWasNeutered(node, *effect, *control); |
| break; |
| @@ -2164,6 +2170,42 @@ EffectControlLinearizer::LowerObjectIsUndetectable(Node* node, Node* effect, |
| } |
| EffectControlLinearizer::ValueEffectControl |
| +EffectControlLinearizer::LowerNewRestParameterElements(Node* node, Node* effect, |
| + Node* control) { |
| + int const formal_parameter_count = ParameterCountOf(node->op()); |
| + |
| + Callable const callable = CodeFactory::NewRestParameterElements(isolate()); |
| + Operator::Properties const properties = node->op()->properties(); |
| + CallDescriptor::Flags const flags = CallDescriptor::kNoFlags; |
| + CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
| + isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); |
| + Node* value = effect = graph()->NewNode( |
| + common()->Call(desc), jsgraph()->HeapConstant(callable.code()), |
| + jsgraph()->IntPtrConstant(formal_parameter_count), |
| + jsgraph()->NoContextConstant(), effect); |
| + return ValueEffectControl(value, effect, control); |
| +} |
| + |
| +EffectControlLinearizer::ValueEffectControl |
| +EffectControlLinearizer::LowerNewUnmappedArgumentsElements(Node* node, |
| + Node* effect, |
| + Node* control) { |
| + int const formal_parameter_count = ParameterCountOf(node->op()); |
| + |
| + Callable const callable = |
| + CodeFactory::NewUnmappedArgumentsElements(isolate()); |
| + Operator::Properties const properties = node->op()->properties(); |
| + CallDescriptor::Flags const flags = CallDescriptor::kNoFlags; |
| + CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
| + isolate(), graph()->zone(), callable.descriptor(), 0, flags, properties); |
| + Node* value = effect = graph()->NewNode( |
| + common()->Call(desc), jsgraph()->HeapConstant(callable.code()), |
| + jsgraph()->IntPtrConstant(formal_parameter_count), |
| + jsgraph()->NoContextConstant(), effect); |
| + return ValueEffectControl(value, effect, control); |
| +} |
| + |
| +EffectControlLinearizer::ValueEffectControl |
|
Jarin
2016/12/08 07:49:21
Hmm, we should seriously consider splitting effect
Benedikt Meurer
2016/12/08 07:58:15
Acknowledged.
|
| EffectControlLinearizer::LowerArrayBufferWasNeutered(Node* node, Node* effect, |
| Node* control) { |
| Node* value = node->InputAt(0); |