Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 886853002: Avoid using ProcessArguments for static calls. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/ast-graph-builder.h" 5 #include "src/compiler/ast-graph-builder.h"
6 6
7 #include "src/compiler.h" 7 #include "src/compiler.h"
8 #include "src/compiler/ast-loop-assignment-analyzer.h" 8 #include "src/compiler/ast-loop-assignment-analyzer.h"
9 #include "src/compiler/control-builders.h" 9 #include "src/compiler/control-builders.h"
10 #include "src/compiler/machine-operator.h" 10 #include "src/compiler/machine-operator.h"
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 NewNode(javascript()->StrictEqual(), obj, jsgraph()->NullConstant()); 660 NewNode(javascript()->StrictEqual(), obj, jsgraph()->NullConstant());
661 is_null.If(is_null_cond); 661 is_null.If(is_null_cond);
662 is_null.Then(); 662 is_null.Then();
663 is_null.Else(); 663 is_null.Else();
664 // Convert object to jsobject. 664 // Convert object to jsobject.
665 // PrepareForBailoutForId(stmt->PrepareId(), TOS_REG); 665 // PrepareForBailoutForId(stmt->PrepareId(), TOS_REG);
666 obj = NewNode(javascript()->ToObject(), obj); 666 obj = NewNode(javascript()->ToObject(), obj);
667 PrepareFrameState(obj, stmt->ToObjectId(), OutputFrameStateCombine::Push()); 667 PrepareFrameState(obj, stmt->ToObjectId(), OutputFrameStateCombine::Push());
668 environment()->Push(obj); 668 environment()->Push(obj);
669 // TODO(dcarney): should do a fast enum cache check here to skip runtime. 669 // TODO(dcarney): should do a fast enum cache check here to skip runtime.
670 environment()->Push(obj); 670 Node* cache_type = NewNode(
671 Node* cache_type = ProcessArguments( 671 javascript()->CallRuntime(Runtime::kGetPropertyNamesFast, 1), obj);
672 javascript()->CallRuntime(Runtime::kGetPropertyNamesFast, 1), 1);
673 PrepareFrameState(cache_type, stmt->EnumId(), 672 PrepareFrameState(cache_type, stmt->EnumId(),
674 OutputFrameStateCombine::Push()); 673 OutputFrameStateCombine::Push());
675 // TODO(dcarney): these next runtime calls should be removed in favour of 674 // TODO(dcarney): these next runtime calls should be removed in favour of
676 // a few simplified instructions. 675 // a few simplified instructions.
677 environment()->Push(obj); 676 Node* cache_pair = NewNode(
678 environment()->Push(cache_type); 677 javascript()->CallRuntime(Runtime::kForInInit, 2), obj, cache_type);
679 Node* cache_pair =
680 ProcessArguments(javascript()->CallRuntime(Runtime::kForInInit, 2), 2);
681 // cache_type may have been replaced. 678 // cache_type may have been replaced.
682 Node* cache_array = NewNode(common()->Projection(0), cache_pair); 679 Node* cache_array = NewNode(common()->Projection(0), cache_pair);
683 cache_type = NewNode(common()->Projection(1), cache_pair); 680 cache_type = NewNode(common()->Projection(1), cache_pair);
684 environment()->Push(cache_type); 681 Node* cache_length =
685 environment()->Push(cache_array); 682 NewNode(javascript()->CallRuntime(Runtime::kForInCacheArrayLength, 2),
686 Node* cache_length = ProcessArguments( 683 cache_type, cache_array);
687 javascript()->CallRuntime(Runtime::kForInCacheArrayLength, 2), 2);
688 { 684 {
689 // TODO(dcarney): this check is actually supposed to be for the 685 // TODO(dcarney): this check is actually supposed to be for the
690 // empty enum case only. 686 // empty enum case only.
691 IfBuilder have_no_properties(this); 687 IfBuilder have_no_properties(this);
692 Node* empty_array_cond = NewNode(javascript()->StrictEqual(), 688 Node* empty_array_cond = NewNode(javascript()->StrictEqual(),
693 cache_length, jsgraph()->ZeroConstant()); 689 cache_length, jsgraph()->ZeroConstant());
694 have_no_properties.If(empty_array_cond); 690 have_no_properties.If(empty_array_cond);
695 have_no_properties.Then(); 691 have_no_properties.Then();
696 // Pop obj and skip loop. 692 // Pop obj and skip loop.
697 environment()->Pop(); 693 environment()->Pop();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 IfBuilder test_should_filter(this); 738 IfBuilder test_should_filter(this);
743 Node* should_filter_cond = NewNode( 739 Node* should_filter_cond = NewNode(
744 javascript()->StrictEqual(), should_filter, jsgraph()->TrueConstant()); 740 javascript()->StrictEqual(), should_filter, jsgraph()->TrueConstant());
745 test_should_filter.If(should_filter_cond); 741 test_should_filter.If(should_filter_cond);
746 test_should_filter.Then(); 742 test_should_filter.Then();
747 value = environment()->Pop(); 743 value = environment()->Pop();
748 Node* builtins = BuildLoadBuiltinsObject(); 744 Node* builtins = BuildLoadBuiltinsObject();
749 Node* function = BuildLoadObjectField( 745 Node* function = BuildLoadObjectField(
750 builtins, 746 builtins,
751 JSBuiltinsObject::OffsetOfFunctionWithId(Builtins::FILTER_KEY)); 747 JSBuiltinsObject::OffsetOfFunctionWithId(Builtins::FILTER_KEY));
752 // Callee.
753 environment()->Push(function);
754 // Receiver.
755 environment()->Push(obj);
756 // Args.
757 environment()->Push(value);
758 // result is either the string key or Smi(0) indicating the property 748 // result is either the string key or Smi(0) indicating the property
759 // is gone. 749 // is gone.
760 Node* res = ProcessArguments( 750 Node* res = NewNode(javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS),
761 javascript()->CallFunction(3, NO_CALL_FUNCTION_FLAGS), 3); 751 function, obj, value);
762 // TODO(jarin): provide real bailout id. 752 // TODO(jarin): provide real bailout id.
763 PrepareFrameState(res, BailoutId::None()); 753 PrepareFrameState(res, BailoutId::None());
764 Node* property_missing = 754 Node* property_missing =
765 NewNode(javascript()->StrictEqual(), res, jsgraph()->ZeroConstant()); 755 NewNode(javascript()->StrictEqual(), res, jsgraph()->ZeroConstant());
766 { 756 {
767 IfBuilder is_property_missing(this); 757 IfBuilder is_property_missing(this);
768 is_property_missing.If(property_missing); 758 is_property_missing.If(property_missing);
769 is_property_missing.Then(); 759 is_property_missing.Then();
770 // Inc counter and continue. 760 // Inc counter and continue.
771 Node* index_inc = 761 Node* index_inc =
(...skipping 1667 matching lines...) Expand 10 before | Expand all | Expand 10 after
2439 2429
2440 BitVector* AstGraphBuilder::GetVariablesAssignedInLoop( 2430 BitVector* AstGraphBuilder::GetVariablesAssignedInLoop(
2441 IterationStatement* stmt) { 2431 IterationStatement* stmt) {
2442 if (loop_assignment_analysis_ == NULL) return NULL; 2432 if (loop_assignment_analysis_ == NULL) return NULL;
2443 return loop_assignment_analysis_->GetVariablesAssignedInLoop(stmt); 2433 return loop_assignment_analysis_->GetVariablesAssignedInLoop(stmt);
2444 } 2434 }
2445 2435
2446 } // namespace compiler 2436 } // namespace compiler
2447 } // namespace internal 2437 } // namespace internal
2448 } // namespace v8 2438 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698