Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index a4c8d012dabaeb75d23dc06aabb48349053a804b..457bd090b559171320115bcff639288df1b4e0ef 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -1726,7 +1726,7 @@ HValue* HGraphBuilder::BuildNumberToString(HValue* object, Type* type) { |
if_found.Else(); |
{ |
// Cache miss, fallback to runtime. |
- Add<HPushArgument>(object); |
+ Add<HPushArguments>(zone(), object); |
Push(Add<HCallRuntime>( |
isolate()->factory()->empty_string(), |
Runtime::FunctionForId(Runtime::kHiddenNumberToStringSkipCache), |
@@ -2050,8 +2050,7 @@ HValue* HGraphBuilder::BuildUncheckedStringAdd( |
if_sameencodingandsequential.Else(); |
{ |
// Fallback to the runtime to add the two strings. |
- Add<HPushArgument>(left); |
- Add<HPushArgument>(right); |
+ Add<HPushArguments>(zone(), left, right); |
Push(Add<HCallRuntime>( |
isolate()->factory()->empty_string(), |
Runtime::FunctionForId(Runtime::kHiddenStringAdd), |
@@ -4188,9 +4187,11 @@ void HOptimizedGraphBuilder::PushArgumentsFromEnvironment(int count) { |
arguments.Add(Pop(), zone()); |
} |
+ HPushArguments* push_args = New<HPushArguments>(zone()); |
while (!arguments.is_empty()) { |
- Add<HPushArgument>(arguments.RemoveLast()); |
+ push_args->AddArgument(arguments.RemoveLast()); |
} |
+ AddInstruction(push_args); |
} |
@@ -5184,10 +5185,11 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
flags |= expr->has_function() |
? ObjectLiteral::kHasFunction : ObjectLiteral::kNoFlags; |
- Add<HPushArgument>(Add<HConstant>(closure_literals)); |
- Add<HPushArgument>(Add<HConstant>(literal_index)); |
- Add<HPushArgument>(Add<HConstant>(constant_properties)); |
- Add<HPushArgument>(Add<HConstant>(flags)); |
+ Add<HPushArguments>(zone(), |
+ Add<HConstant>(closure_literals), |
+ Add<HConstant>(literal_index), |
+ Add<HConstant>(constant_properties), |
+ Add<HConstant>(flags)); |
// TODO(mvstanton): Add a flag to turn off creation of any |
// AllocationMementos for this call: we are in crankshaft and should have |
@@ -5342,10 +5344,11 @@ void HOptimizedGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
: ArrayLiteral::kNoFlags; |
flags |= ArrayLiteral::kDisableMementos; |
- Add<HPushArgument>(Add<HConstant>(literals)); |
- Add<HPushArgument>(Add<HConstant>(literal_index)); |
- Add<HPushArgument>(Add<HConstant>(constants)); |
- Add<HPushArgument>(Add<HConstant>(flags)); |
+ Add<HPushArguments>(zone(), |
+ Add<HConstant>(literals), |
+ Add<HConstant>(literal_index), |
+ Add<HConstant>(constants), |
+ Add<HConstant>(flags)); |
// TODO(mvstanton): Consider a flag to turn off creation of any |
// AllocationMementos for this call: we are in crankshaft and should have |
@@ -6379,7 +6382,7 @@ void HOptimizedGraphBuilder::VisitThrow(Throw* expr) { |
HValue* value = environment()->Pop(); |
if (!FLAG_hydrogen_track_positions) SetSourcePosition(expr->position()); |
- Add<HPushArgument>(value); |
+ Add<HPushArguments>(zone(), value); |
Add<HCallRuntime>(isolate()->factory()->empty_string(), |
Runtime::FunctionForId(Runtime::kHiddenThrow), 1); |
Add<HSimulate>(expr->id()); |
@@ -6781,7 +6784,7 @@ void HOptimizedGraphBuilder::EnsureArgumentsArePushedForAccess() { |
HInstruction* insert_after = entry; |
for (int i = 0; i < arguments_values->length(); i++) { |
HValue* argument = arguments_values->at(i); |
- HInstruction* push_argument = New<HPushArgument>(argument); |
+ HInstruction* push_argument = New<HPushArguments>(zone(), argument); |
push_argument->InsertAfter(insert_after); |
insert_after = push_argument; |
} |
@@ -8076,7 +8079,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function, |
ASSERT_EQ(NULL, receiver); |
// Receiver is on expression stack. |
receiver = Pop(); |
- Add<HPushArgument>(receiver); |
+ Add<HPushArguments>(zone(), receiver); |
break; |
case kCallApiSetter: |
{ |
@@ -8087,8 +8090,7 @@ bool HOptimizedGraphBuilder::TryInlineApiCall(Handle<JSFunction> function, |
// Receiver and value are on expression stack. |
HValue* value = Pop(); |
receiver = Pop(); |
- Add<HPushArgument>(receiver); |
- Add<HPushArgument>(value); |
+ Add<HPushArguments>(zone(), receiver, value); |
break; |
} |
} |
@@ -8656,7 +8658,7 @@ void HOptimizedGraphBuilder::VisitCallNew(CallNew* expr) { |
} |
// TODO(mstarzinger): For now we remove the previous HAllocate and all |
- // corresponding instructions and instead add HPushArgument for the |
+ // corresponding instructions and instead add HPushArguments for the |
// arguments in case inlining failed. What we actually should do is for |
// inlining to try to build a subgraph without mutating the parent graph. |
HInstruction* instr = current_block()->last(); |
@@ -9135,9 +9137,8 @@ void HOptimizedGraphBuilder::VisitDelete(UnaryOperation* expr) { |
HValue* key = Pop(); |
HValue* obj = Pop(); |
HValue* function = AddLoadJSBuiltin(Builtins::DELETE); |
- Add<HPushArgument>(obj); |
- Add<HPushArgument>(key); |
- Add<HPushArgument>(Add<HConstant>(function_strict_mode())); |
+ Add<HPushArguments>(zone(), |
+ obj, key, Add<HConstant>(function_strict_mode())); |
// TODO(olivf) InvokeFunction produces a check for the parameter count, |
// even though we are certain to pass the correct number of arguments here. |
HInstruction* instr = New<HInvokeFunction>(function, 3); |
@@ -9622,8 +9623,7 @@ HValue* HGraphBuilder::BuildBinaryOperation( |
} else if (!left_type->Is(Type::String())) { |
ASSERT(right_type->Is(Type::String())); |
HValue* function = AddLoadJSBuiltin(Builtins::STRING_ADD_RIGHT); |
- Add<HPushArgument>(left); |
- Add<HPushArgument>(right); |
+ Add<HPushArguments>(zone(), left, right); |
return AddUncasted<HInvokeFunction>(function, 2); |
} |
@@ -9634,8 +9634,7 @@ HValue* HGraphBuilder::BuildBinaryOperation( |
} else if (!right_type->Is(Type::String())) { |
ASSERT(left_type->Is(Type::String())); |
HValue* function = AddLoadJSBuiltin(Builtins::STRING_ADD_LEFT); |
- Add<HPushArgument>(left); |
- Add<HPushArgument>(right); |
+ Add<HPushArguments>(zone(), left, right); |
return AddUncasted<HInvokeFunction>(function, 2); |
} |
@@ -9697,8 +9696,7 @@ HValue* HGraphBuilder::BuildBinaryOperation( |
// operation in optimized code, which is more expensive, than a stub call. |
if (graph()->info()->IsStub() && is_non_primitive) { |
HValue* function = AddLoadJSBuiltin(BinaryOpIC::TokenToJSBuiltin(op)); |
- Add<HPushArgument>(left); |
- Add<HPushArgument>(right); |
+ Add<HPushArguments>(zone(), left, right); |
instr = AddUncasted<HInvokeFunction>(function, 2); |
} else { |
switch (op) { |
@@ -10062,8 +10060,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) { |
UNREACHABLE(); |
} else if (op == Token::IN) { |
HValue* function = AddLoadJSBuiltin(Builtins::IN); |
- Add<HPushArgument>(left); |
- Add<HPushArgument>(right); |
+ Add<HPushArguments>(zone(), left, right); |
// TODO(olivf) InvokeFunction produces a check for the parameter count, |
// even though we are certain to pass the correct number of arguments here. |
HInstruction* result = New<HInvokeFunction>(function, 2); |