Commit f5eae65a authored by Victor Gomes's avatar Victor Gomes Committed by Commit Bot

[cleanup] Remove IrOpcode::kArgumentsFrame

After removing the arguments adaptor frame, this should not be needed anymore.

Removes ArgumentFrame from the following nodes:
- ArgumentsLength
- RestLength
- NewArgumentsElements

Also removes 'formal parameter count' as input of ArgumentsLength.

Adapt the escape analysis to use the frame pointer directly instead of the ArgumentsFrame node.

Change-Id: I0ead48a6ee05a10d05d6cfa2e46906ad69930986
Bug: v8:11306
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2639765
Commit-Queue: Victor Gomes <victorgomes@chromium.org>
Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#72264}
parent 41c3140b
...@@ -148,7 +148,6 @@ class EffectControlLinearizer { ...@@ -148,7 +148,6 @@ class EffectControlLinearizer {
Node* LowerObjectIsInteger(Node* node); Node* LowerObjectIsInteger(Node* node);
Node* LowerNumberIsSafeInteger(Node* node); Node* LowerNumberIsSafeInteger(Node* node);
Node* LowerObjectIsSafeInteger(Node* node); Node* LowerObjectIsSafeInteger(Node* node);
Node* LowerArgumentsFrame(Node* node);
Node* LowerArgumentsLength(Node* node); Node* LowerArgumentsLength(Node* node);
Node* LowerRestLength(Node* node); Node* LowerRestLength(Node* node);
Node* LowerNewDoubleElements(Node* node); Node* LowerNewDoubleElements(Node* node);
...@@ -1125,9 +1124,6 @@ bool EffectControlLinearizer::TryWireInStateEffect(Node* node, ...@@ -1125,9 +1124,6 @@ bool EffectControlLinearizer::TryWireInStateEffect(Node* node,
case IrOpcode::kObjectIsUndetectable: case IrOpcode::kObjectIsUndetectable:
result = LowerObjectIsUndetectable(node); result = LowerObjectIsUndetectable(node);
break; break;
case IrOpcode::kArgumentsFrame:
result = LowerArgumentsFrame(node);
break;
case IrOpcode::kArgumentsLength: case IrOpcode::kArgumentsLength:
result = LowerArgumentsLength(node); result = LowerArgumentsLength(node);
break; break;
...@@ -3703,10 +3699,6 @@ Node* EffectControlLinearizer::LowerRestLength(Node* node) { ...@@ -3703,10 +3699,6 @@ Node* EffectControlLinearizer::LowerRestLength(Node* node) {
return done.PhiAt(0); return done.PhiAt(0);
} }
Node* EffectControlLinearizer::LowerArgumentsFrame(Node* node) {
return __ LoadFramePointer();
}
Node* EffectControlLinearizer::LowerNewDoubleElements(Node* node) { Node* EffectControlLinearizer::LowerNewDoubleElements(Node* node) {
AllocationType const allocation = AllocationTypeOf(node->op()); AllocationType const allocation = AllocationTypeOf(node->op());
Node* length = node->InputAt(0); Node* length = node->InputAt(0);
...@@ -3806,8 +3798,8 @@ Node* EffectControlLinearizer::LowerNewArgumentsElements(Node* node) { ...@@ -3806,8 +3798,8 @@ Node* EffectControlLinearizer::LowerNewArgumentsElements(Node* node) {
CreateArgumentsType type = parameters.arguments_type(); CreateArgumentsType type = parameters.arguments_type();
Operator::Properties const properties = node->op()->properties(); Operator::Properties const properties = node->op()->properties();
CallDescriptor::Flags const flags = CallDescriptor::kNoFlags; CallDescriptor::Flags const flags = CallDescriptor::kNoFlags;
Node* frame = NodeProperties::GetValueInput(node, 0); Node* frame = __ LoadFramePointer();
Node* arguments_count = NodeProperties::GetValueInput(node, 1); Node* arguments_count = NodeProperties::GetValueInput(node, 0);
Builtins::Name builtin_name; Builtins::Name builtin_name;
switch (type) { switch (type) {
case CreateArgumentsType::kMappedArguments: case CreateArgumentsType::kMappedArguments:
......
...@@ -229,9 +229,7 @@ void EscapeAnalysisReducer::Finalize() { ...@@ -229,9 +229,7 @@ void EscapeAnalysisReducer::Finalize() {
? params.formal_parameter_count() ? params.formal_parameter_count()
: 0; : 0;
Node* arguments_frame = NodeProperties::GetValueInput(node, 0); Node* arguments_length = NodeProperties::GetValueInput(node, 0);
if (arguments_frame->opcode() != IrOpcode::kArgumentsFrame) continue;
Node* arguments_length = NodeProperties::GetValueInput(node, 1);
if (arguments_length->opcode() != IrOpcode::kArgumentsLength) continue; if (arguments_length->opcode() != IrOpcode::kArgumentsLength) continue;
Node* arguments_length_state = nullptr; Node* arguments_length_state = nullptr;
...@@ -331,7 +329,10 @@ void EscapeAnalysisReducer::Finalize() { ...@@ -331,7 +329,10 @@ void EscapeAnalysisReducer::Finalize() {
} }
NodeProperties::SetType(offset, NodeProperties::SetType(offset,
TypeCache::Get()->kArgumentsLengthType); TypeCache::Get()->kArgumentsLengthType);
NodeProperties::ReplaceValueInput(load, arguments_frame, 0); Node* frame = jsgraph()->graph()->NewNode(
jsgraph()->machine()->LoadFramePointer());
NodeProperties::SetType(frame, Type::ExternalPointer());
NodeProperties::ReplaceValueInput(load, frame, 0);
NodeProperties::ReplaceValueInput(load, offset, 1); NodeProperties::ReplaceValueInput(load, offset, 1);
NodeProperties::ChangeOp( NodeProperties::ChangeOp(
load, jsgraph()->simplified()->LoadStackArgument()); load, jsgraph()->simplified()->LoadStackArgument());
...@@ -340,7 +341,7 @@ void EscapeAnalysisReducer::Finalize() { ...@@ -340,7 +341,7 @@ void EscapeAnalysisReducer::Finalize() {
case IrOpcode::kLoadField: { case IrOpcode::kLoadField: {
DCHECK_EQ(FieldAccessOf(load->op()).offset, DCHECK_EQ(FieldAccessOf(load->op()).offset,
FixedArray::kLengthOffset); FixedArray::kLengthOffset);
Node* length = NodeProperties::GetValueInput(node, 1); Node* length = NodeProperties::GetValueInput(node, 0);
ReplaceWithValue(load, length); ReplaceWithValue(load, length);
break; break;
} }
......
...@@ -164,17 +164,13 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) { ...@@ -164,17 +164,13 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
Node* const callee = NodeProperties::GetValueInput(node, 0); Node* const callee = NodeProperties::GetValueInput(node, 0);
Node* const context = NodeProperties::GetContextInput(node); Node* const context = NodeProperties::GetContextInput(node);
Node* effect = NodeProperties::GetEffectInput(node); Node* effect = NodeProperties::GetEffectInput(node);
Node* const arguments_frame =
graph()->NewNode(simplified()->ArgumentsFrame());
Node* const arguments_length = Node* const arguments_length =
graph()->NewNode(simplified()->ArgumentsLength( graph()->NewNode(simplified()->ArgumentsLength());
shared.internal_formal_parameter_count()),
arguments_frame);
// Allocate the elements backing store. // Allocate the elements backing store.
bool has_aliased_arguments = false; bool has_aliased_arguments = false;
Node* const elements = effect = AllocateAliasedArguments( Node* const elements = effect =
effect, control, context, arguments_frame, arguments_length, shared, AllocateAliasedArguments(effect, control, context, arguments_length,
&has_aliased_arguments); shared, &has_aliased_arguments);
// Load the arguments object map. // Load the arguments object map.
Node* const arguments_map = jsgraph()->Constant( Node* const arguments_map = jsgraph()->Constant(
has_aliased_arguments has_aliased_arguments
...@@ -196,18 +192,14 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) { ...@@ -196,18 +192,14 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
} }
case CreateArgumentsType::kUnmappedArguments: { case CreateArgumentsType::kUnmappedArguments: {
Node* effect = NodeProperties::GetEffectInput(node); Node* effect = NodeProperties::GetEffectInput(node);
Node* const arguments_frame =
graph()->NewNode(simplified()->ArgumentsFrame());
Node* const arguments_length = Node* const arguments_length =
graph()->NewNode(simplified()->ArgumentsLength( graph()->NewNode(simplified()->ArgumentsLength());
shared.internal_formal_parameter_count()),
arguments_frame);
// Allocate the elements backing store. // Allocate the elements backing store.
Node* const elements = effect = Node* const elements = effect =
graph()->NewNode(simplified()->NewArgumentsElements( graph()->NewNode(simplified()->NewArgumentsElements(
CreateArgumentsType::kUnmappedArguments, CreateArgumentsType::kUnmappedArguments,
shared.internal_formal_parameter_count()), shared.internal_formal_parameter_count()),
arguments_frame, arguments_length, effect); arguments_length, effect);
// Load the arguments object map. // Load the arguments object map.
Node* const arguments_map = Node* const arguments_map =
jsgraph()->Constant(native_context().strict_arguments_map()); jsgraph()->Constant(native_context().strict_arguments_map());
...@@ -226,21 +218,16 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) { ...@@ -226,21 +218,16 @@ Reduction JSCreateLowering::ReduceJSCreateArguments(Node* node) {
} }
case CreateArgumentsType::kRestParameter: { case CreateArgumentsType::kRestParameter: {
Node* effect = NodeProperties::GetEffectInput(node); Node* effect = NodeProperties::GetEffectInput(node);
Node* const arguments_frame =
graph()->NewNode(simplified()->ArgumentsFrame());
Node* const arguments_length = Node* const arguments_length =
graph()->NewNode(simplified()->ArgumentsLength( graph()->NewNode(simplified()->ArgumentsLength());
shared.internal_formal_parameter_count()),
arguments_frame);
Node* const rest_length = graph()->NewNode( Node* const rest_length = graph()->NewNode(
simplified()->RestLength(shared.internal_formal_parameter_count()), simplified()->RestLength(shared.internal_formal_parameter_count()));
arguments_frame);
// Allocate the elements backing store. // Allocate the elements backing store.
Node* const elements = effect = Node* const elements = effect =
graph()->NewNode(simplified()->NewArgumentsElements( graph()->NewNode(simplified()->NewArgumentsElements(
CreateArgumentsType::kRestParameter, CreateArgumentsType::kRestParameter,
shared.internal_formal_parameter_count()), shared.internal_formal_parameter_count()),
arguments_frame, arguments_length, effect); arguments_length, effect);
// Load the JSArray object map. // Load the JSArray object map.
Node* const jsarray_map = jsgraph()->Constant( Node* const jsarray_map = jsgraph()->Constant(
native_context().js_array_packed_elements_map()); native_context().js_array_packed_elements_map());
...@@ -1537,9 +1524,8 @@ Node* JSCreateLowering::AllocateAliasedArguments( ...@@ -1537,9 +1524,8 @@ Node* JSCreateLowering::AllocateAliasedArguments(
// values can only be determined dynamically at run-time and are provided. // values can only be determined dynamically at run-time and are provided.
// Serves as backing store for JSCreateArguments nodes. // Serves as backing store for JSCreateArguments nodes.
Node* JSCreateLowering::AllocateAliasedArguments( Node* JSCreateLowering::AllocateAliasedArguments(
Node* effect, Node* control, Node* context, Node* arguments_frame, Node* effect, Node* control, Node* context, Node* arguments_length,
Node* arguments_length, const SharedFunctionInfoRef& shared, const SharedFunctionInfoRef& shared, bool* has_aliased_arguments) {
bool* has_aliased_arguments) {
// If there is no aliasing, the arguments object elements are not // If there is no aliasing, the arguments object elements are not
// special in any way, we can just return an unmapped backing store. // special in any way, we can just return an unmapped backing store.
int parameter_count = shared.internal_formal_parameter_count(); int parameter_count = shared.internal_formal_parameter_count();
...@@ -1547,7 +1533,7 @@ Node* JSCreateLowering::AllocateAliasedArguments( ...@@ -1547,7 +1533,7 @@ Node* JSCreateLowering::AllocateAliasedArguments(
return graph()->NewNode( return graph()->NewNode(
simplified()->NewArgumentsElements( simplified()->NewArgumentsElements(
CreateArgumentsType::kUnmappedArguments, parameter_count), CreateArgumentsType::kUnmappedArguments, parameter_count),
arguments_frame, arguments_length, effect); arguments_length, effect);
} }
// From here on we are going to allocate a mapped (aka. aliased) elements // From here on we are going to allocate a mapped (aka. aliased) elements
...@@ -1563,7 +1549,7 @@ Node* JSCreateLowering::AllocateAliasedArguments( ...@@ -1563,7 +1549,7 @@ Node* JSCreateLowering::AllocateAliasedArguments(
Node* arguments = effect = Node* arguments = effect =
graph()->NewNode(simplified()->NewArgumentsElements( graph()->NewNode(simplified()->NewArgumentsElements(
CreateArgumentsType::kMappedArguments, mapped_count), CreateArgumentsType::kMappedArguments, mapped_count),
arguments_frame, arguments_length, effect); arguments_length, effect);
// Actually allocate the backing store. // Actually allocate the backing store.
AllocationBuilder a(jsgraph(), effect, control); AllocationBuilder a(jsgraph(), effect, control);
......
...@@ -91,7 +91,7 @@ class V8_EXPORT_PRIVATE JSCreateLowering final ...@@ -91,7 +91,7 @@ class V8_EXPORT_PRIVATE JSCreateLowering final
const SharedFunctionInfoRef& shared, const SharedFunctionInfoRef& shared,
bool* has_aliased_arguments); bool* has_aliased_arguments);
Node* AllocateAliasedArguments(Node* effect, Node* control, Node* context, Node* AllocateAliasedArguments(Node* effect, Node* control, Node* context,
Node* arguments_frame, Node* arguments_length, Node* arguments_length,
const SharedFunctionInfoRef& shared, const SharedFunctionInfoRef& shared,
bool* has_aliased_arguments); bool* has_aliased_arguments);
Node* AllocateElements(Node* effect, Node* control, Node* AllocateElements(Node* effect, Node* control,
......
...@@ -393,7 +393,6 @@ ...@@ -393,7 +393,6 @@
#define SIMPLIFIED_OTHER_OP_LIST(V) \ #define SIMPLIFIED_OTHER_OP_LIST(V) \
V(Allocate) \ V(Allocate) \
V(AllocateRaw) \ V(AllocateRaw) \
V(ArgumentsFrame) \
V(ArgumentsLength) \ V(ArgumentsLength) \
V(AssertType) \ V(AssertType) \
V(BooleanNot) \ V(BooleanNot) \
......
...@@ -3075,6 +3075,10 @@ class RepresentationSelector { ...@@ -3075,6 +3075,10 @@ class RepresentationSelector {
SetOutput<T>(node, MachineRepresentation::kTaggedPointer); SetOutput<T>(node, MachineRepresentation::kTaggedPointer);
return; return;
} }
case IrOpcode::kLoadFramePointer: {
SetOutput<T>(node, MachineType::PointerRepresentation());
return;
}
case IrOpcode::kLoadMessage: { case IrOpcode::kLoadMessage: {
if (truncation.IsUnused()) return VisitUnused<T>(node); if (truncation.IsUnused()) return VisitUnused<T>(node);
VisitUnop<T>(node, UseInfo::Word(), MachineRepresentation::kTagged); VisitUnop<T>(node, UseInfo::Word(), MachineRepresentation::kTagged);
...@@ -3531,14 +3535,9 @@ class RepresentationSelector { ...@@ -3531,14 +3535,9 @@ class RepresentationSelector {
VisitObjectIs<T>(node, Type::Undetectable(), lowering); VisitObjectIs<T>(node, Type::Undetectable(), lowering);
return; return;
} }
case IrOpcode::kArgumentsFrame: {
SetOutput<T>(node, MachineType::PointerRepresentation());
return;
}
case IrOpcode::kArgumentsLength: case IrOpcode::kArgumentsLength:
case IrOpcode::kRestLength: { case IrOpcode::kRestLength: {
VisitUnop<T>(node, UseInfo::Word(), SetOutput<T>(node, MachineRepresentation::kTaggedSigned);
MachineRepresentation::kTaggedSigned);
return; return;
} }
case IrOpcode::kNewDoubleElements: case IrOpcode::kNewDoubleElements:
...@@ -3548,8 +3547,8 @@ class RepresentationSelector { ...@@ -3548,8 +3547,8 @@ class RepresentationSelector {
return; return;
} }
case IrOpcode::kNewArgumentsElements: { case IrOpcode::kNewArgumentsElements: {
VisitBinop<T>(node, UseInfo::Word(), UseInfo::TaggedSigned(), VisitUnop<T>(node, UseInfo::TaggedSigned(),
MachineRepresentation::kTaggedPointer); MachineRepresentation::kTaggedPointer);
return; return;
} }
case IrOpcode::kCheckFloat64Hole: { case IrOpcode::kCheckFloat64Hole: {
......
...@@ -972,13 +972,6 @@ struct SimplifiedOperatorGlobalCache final { ...@@ -972,13 +972,6 @@ struct SimplifiedOperatorGlobalCache final {
FindOrderedHashMapEntryForInt32KeyOperator FindOrderedHashMapEntryForInt32KeyOperator
kFindOrderedHashMapEntryForInt32Key; kFindOrderedHashMapEntryForInt32Key;
struct ArgumentsFrameOperator final : public Operator {
ArgumentsFrameOperator()
: Operator(IrOpcode::kArgumentsFrame, Operator::kPure, "ArgumentsFrame",
0, 0, 0, 1, 0, 0) {}
};
ArgumentsFrameOperator kArgumentsFrame;
template <CheckForMinusZeroMode kMode> template <CheckForMinusZeroMode kMode>
struct ChangeFloat64ToTaggedOperator final struct ChangeFloat64ToTaggedOperator final
: public Operator1<CheckForMinusZeroMode> { : public Operator1<CheckForMinusZeroMode> {
...@@ -1225,7 +1218,6 @@ SimplifiedOperatorBuilder::SimplifiedOperatorBuilder(Zone* zone) ...@@ -1225,7 +1218,6 @@ SimplifiedOperatorBuilder::SimplifiedOperatorBuilder(Zone* zone)
PURE_OP_LIST(GET_FROM_CACHE) PURE_OP_LIST(GET_FROM_CACHE)
EFFECT_DEPENDENT_OP_LIST(GET_FROM_CACHE) EFFECT_DEPENDENT_OP_LIST(GET_FROM_CACHE)
CHECKED_OP_LIST(GET_FROM_CACHE) CHECKED_OP_LIST(GET_FROM_CACHE)
GET_FROM_CACHE(ArgumentsFrame)
GET_FROM_CACHE(FindOrderedHashMapEntry) GET_FROM_CACHE(FindOrderedHashMapEntry)
GET_FROM_CACHE(FindOrderedHashMapEntryForInt32Key) GET_FROM_CACHE(FindOrderedHashMapEntryForInt32Key)
GET_FROM_CACHE(LoadFieldByIndex) GET_FROM_CACHE(LoadFieldByIndex)
...@@ -1637,14 +1629,12 @@ const Operator* SimplifiedOperatorBuilder::TransitionElementsKind( ...@@ -1637,14 +1629,12 @@ const Operator* SimplifiedOperatorBuilder::TransitionElementsKind(
transition); // parameter transition); // parameter
} }
const Operator* SimplifiedOperatorBuilder::ArgumentsLength( const Operator* SimplifiedOperatorBuilder::ArgumentsLength() {
int formal_parameter_count) { return zone()->New<Operator>( // --
return zone()->New<Operator1<int>>( // -- IrOpcode::kArgumentsLength, // opcode
IrOpcode::kArgumentsLength, // opcode Operator::kPure, // flags
Operator::kPure, // flags "ArgumentsLength", // name
"ArgumentsLength", // name 0, 0, 0, 1, 0, 0); // counts
1, 0, 0, 1, 0, 0, // counts
formal_parameter_count); // parameter
} }
const Operator* SimplifiedOperatorBuilder::RestLength( const Operator* SimplifiedOperatorBuilder::RestLength(
...@@ -1653,7 +1643,7 @@ const Operator* SimplifiedOperatorBuilder::RestLength( ...@@ -1653,7 +1643,7 @@ const Operator* SimplifiedOperatorBuilder::RestLength(
IrOpcode::kRestLength, // opcode IrOpcode::kRestLength, // opcode
Operator::kPure, // flags Operator::kPure, // flags
"RestLength", // name "RestLength", // name
1, 0, 0, 1, 0, 0, // counts 0, 0, 0, 1, 0, 0, // counts
formal_parameter_count); // parameter formal_parameter_count); // parameter
} }
...@@ -1775,7 +1765,7 @@ const Operator* SimplifiedOperatorBuilder::NewArgumentsElements( ...@@ -1775,7 +1765,7 @@ const Operator* SimplifiedOperatorBuilder::NewArgumentsElements(
IrOpcode::kNewArgumentsElements, // opcode IrOpcode::kNewArgumentsElements, // opcode
Operator::kEliminatable, // flags Operator::kEliminatable, // flags
"NewArgumentsElements", // name "NewArgumentsElements", // name
2, 1, 0, 1, 1, 0, // counts 1, 1, 0, 1, 1, 0, // counts
NewArgumentsElementsParameters(type, NewArgumentsElementsParameters(type,
formal_parameter_count)); // parameter formal_parameter_count)); // parameter
} }
......
...@@ -972,14 +972,13 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final ...@@ -972,14 +972,13 @@ class V8_EXPORT_PRIVATE SimplifiedOperatorBuilder final
const Operator* NumberIsSafeInteger(); const Operator* NumberIsSafeInteger();
const Operator* ObjectIsInteger(); const Operator* ObjectIsInteger();
const Operator* ArgumentsFrame(); const Operator* ArgumentsLength();
const Operator* ArgumentsLength(int formal_parameter_count);
const Operator* RestLength(int formal_parameter_count); const Operator* RestLength(int formal_parameter_count);
const Operator* NewDoubleElements(AllocationType); const Operator* NewDoubleElements(AllocationType);
const Operator* NewSmiOrObjectElements(AllocationType); const Operator* NewSmiOrObjectElements(AllocationType);
// new-arguments-elements frame, arguments count // new-arguments-elements arguments-length
const Operator* NewArgumentsElements(CreateArgumentsType type, const Operator* NewArgumentsElements(CreateArgumentsType type,
int formal_parameter_count); int formal_parameter_count);
......
...@@ -2323,10 +2323,6 @@ Type Typer::Visitor::TypeRestLength(Node* node) { ...@@ -2323,10 +2323,6 @@ Type Typer::Visitor::TypeRestLength(Node* node) {
return TypeCache::Get()->kArgumentsLengthType; return TypeCache::Get()->kArgumentsLengthType;
} }
Type Typer::Visitor::TypeArgumentsFrame(Node* node) {
return Type::ExternalPointer();
}
Type Typer::Visitor::TypeNewDoubleElements(Node* node) { Type Typer::Visitor::TypeNewDoubleElements(Node* node) {
return Type::OtherInternal(); return Type::OtherInternal();
} }
......
...@@ -1228,12 +1228,8 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { ...@@ -1228,12 +1228,8 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) {
break; break;
case IrOpcode::kArgumentsLength: case IrOpcode::kArgumentsLength:
case IrOpcode::kRestLength: case IrOpcode::kRestLength:
CheckValueInputIs(node, 0, Type::ExternalPointer());
CheckTypeIs(node, TypeCache::Get()->kArgumentsLengthType); CheckTypeIs(node, TypeCache::Get()->kArgumentsLengthType);
break; break;
case IrOpcode::kArgumentsFrame:
CheckTypeIs(node, Type::ExternalPointer());
break;
case IrOpcode::kNewDoubleElements: case IrOpcode::kNewDoubleElements:
case IrOpcode::kNewSmiOrObjectElements: case IrOpcode::kNewSmiOrObjectElements:
CheckValueInputIs(node, 0, CheckValueInputIs(node, 0,
...@@ -1241,8 +1237,7 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) { ...@@ -1241,8 +1237,7 @@ void Verifier::Visitor::Check(Node* node, const AllNodes& all) {
CheckTypeIs(node, Type::OtherInternal()); CheckTypeIs(node, Type::OtherInternal());
break; break;
case IrOpcode::kNewArgumentsElements: case IrOpcode::kNewArgumentsElements:
CheckValueInputIs(node, 0, Type::ExternalPointer()); CheckValueInputIs(node, 0,
CheckValueInputIs(node, 1,
Type::Range(0.0, FixedArray::kMaxLength, zone)); Type::Range(0.0, FixedArray::kMaxLength, zone));
CheckTypeIs(node, Type::OtherInternal()); CheckTypeIs(node, Type::OtherInternal());
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment