From 70891ddf32cca2eb28b248883086247ee2a4484f Mon Sep 17 00:00:00 2001 From: "mstarzinger@chromium.org" Date: Wed, 25 Jun 2014 17:21:44 +0000 Subject: [PATCH] Revert "Allow inlining of functions containing %_ArgumentsLength." This cuased layout test failures. TBR=svenpanne@chromium.org Review URL: https://codereview.chromium.org/349923009 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22022 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/ast.cc | 8 +++++--- src/hydrogen.cc | 16 ++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/ast.cc b/src/ast.cc index bf16b9c..53d2799 100644 --- a/src/ast.cc +++ b/src/ast.cc @@ -1117,9 +1117,11 @@ void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) { // optimize them. add_flag(kDontInline); } else if (node->function()->intrinsic_type == Runtime::INLINE && - node->raw_name()->IsOneByteEqualTo("_Arguments")) { - // Don't inline the %_Arguments because it's implementation will not work. - // There is no stack frame to get them from. + (node->raw_name()->IsOneByteEqualTo("_ArgumentsLength") || + node->raw_name()->IsOneByteEqualTo("_Arguments"))) { + // Don't inline the %_ArgumentsLength or %_Arguments because their + // implementation will not work. There is no stack frame to get them + // from. add_flag(kDontInline); } } diff --git a/src/hydrogen.cc b/src/hydrogen.cc index d447bbc..6ae1466 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -11310,17 +11310,13 @@ void HOptimizedGraphBuilder::GenerateIsConstructCall(CallRuntime* call) { // Support for arguments.length and arguments[?]. void HOptimizedGraphBuilder::GenerateArgumentsLength(CallRuntime* call) { + // Our implementation of arguments (based on this stack frame or an + // adapter below it) does not work for inlined functions. This runtime + // function is blacklisted by AstNode::IsInlineable. + ASSERT(function_state()->outer() == NULL); ASSERT(call->arguments()->length() == 0); - HInstruction* result = NULL; - if (function_state()->outer() == NULL) { - HInstruction* elements = Add(false); - result = New(elements); - } else { - // Number of arguments without receiver. - int argument_count = environment()-> - arguments_environment()->parameter_count() - 1; - result = New(argument_count); - } + HInstruction* elements = Add(false); + HArgumentsLength* result = New(elements); return ast_context()->ReturnInstruction(result, call->id()); } -- 2.7.4