From 388429e97c84a1320eef37cf6b5b26cb8e6ad3e0 Mon Sep 17 00:00:00 2001 From: "chunyang.dai" Date: Tue, 2 Jun 2015 02:07:13 -0700 Subject: [PATCH] X87: [turbofan] First step towards sanitizing for-in and making it optimizable. port e2e47f30be06e6ea6b8a3cc90138381914ecd07d (r28711) original commit message: [turbofan] First step towards sanitizing for-in and making it optimizable. In a nutshell: The FILTER_KEY builtin is gone, and was replaced by a simple runtime call to ForInFilter, which does everything and is even cheaper (because FILTER_KEY used to call into the runtime anyway). And ForInFilter returns either the name or undefined, which makes it possible to remove the control flow construction from the AstGraphBuilder, and thereby make both the initialization and the per-loop code of for-in optimizable later (in typed lowering). BUG= Review URL: https://codereview.chromium.org/1144143005 Cr-Commit-Position: refs/heads/master@{#28748} --- src/x87/full-codegen-x87.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/x87/full-codegen-x87.cc b/src/x87/full-codegen-x87.cc index edd2d83..ba7a2d4 100644 --- a/src/x87/full-codegen-x87.cc +++ b/src/x87/full-codegen-x87.cc @@ -1190,9 +1190,9 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { // just skip it. __ push(ecx); // Enumerable. __ push(ebx); // Current entry. - __ InvokeBuiltin(Builtins::FILTER_KEY, CALL_FUNCTION); + __ CallRuntime(Runtime::kForInFilter, 2); PrepareForBailoutForId(stmt->FilterId(), TOS_REG); - __ test(eax, eax); + __ cmp(eax, isolate()->factory()->undefined_value()); __ j(equal, loop_statement.continue_label()); __ mov(ebx, eax); -- 2.7.4