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

Side by Side Diff: src/compiler/js-call-reducer.cc

Issue 2782143003: [turbofan] Inline calls to the Boolean constructor. (Closed)
Patch Set: Created 3 years, 8 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 | « src/compiler/js-call-reducer.h ('k') | 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/js-call-reducer.h" 5 #include "src/compiler/js-call-reducer.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/compilation-dependencies.h" 9 #include "src/compilation-dependencies.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 size_t const arity = p.arity() - 2; 56 size_t const arity = p.arity() - 2;
57 NodeProperties::ReplaceValueInput(node, target, 0); 57 NodeProperties::ReplaceValueInput(node, target, 0);
58 NodeProperties::ReplaceValueInput(node, target, 1); 58 NodeProperties::ReplaceValueInput(node, target, 1);
59 // TODO(bmeurer): We might need to propagate the tail call mode to 59 // TODO(bmeurer): We might need to propagate the tail call mode to
60 // the JSCreateArray operator, because an Array call in tail call 60 // the JSCreateArray operator, because an Array call in tail call
61 // position must always properly consume the parent stack frame. 61 // position must always properly consume the parent stack frame.
62 NodeProperties::ChangeOp(node, javascript()->CreateArray(arity, site)); 62 NodeProperties::ChangeOp(node, javascript()->CreateArray(arity, site));
63 return Changed(node); 63 return Changed(node);
64 } 64 }
65 65
66 // ES6 section 19.3.1.1 Boolean ( value )
67 Reduction JSCallReducer::ReduceBooleanConstructor(Node* node) {
68 DCHECK_EQ(IrOpcode::kJSCall, node->opcode());
69 CallParameters const& p = CallParametersOf(node->op());
70
71 // Replace the {node} with a proper {JSToBoolean} operator.
72 DCHECK_LE(2u, p.arity());
73 Node* value = (p.arity() == 2) ? jsgraph()->UndefinedConstant()
74 : NodeProperties::GetValueInput(node, 2);
75 Node* context = NodeProperties::GetContextInput(node);
76 value = graph()->NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), value,
77 context);
78 ReplaceWithValue(node, value);
79 return Replace(value);
80 }
66 81
67 // ES6 section 20.1.1 The Number Constructor 82 // ES6 section 20.1.1 The Number Constructor
68 Reduction JSCallReducer::ReduceNumberConstructor(Node* node) { 83 Reduction JSCallReducer::ReduceNumberConstructor(Node* node) {
69 DCHECK_EQ(IrOpcode::kJSCall, node->opcode()); 84 DCHECK_EQ(IrOpcode::kJSCall, node->opcode());
70 CallParameters const& p = CallParametersOf(node->op()); 85 CallParameters const& p = CallParametersOf(node->op());
71 86
72 // Turn the {node} into a {JSToNumber} call. 87 // Turn the {node} into a {JSToNumber} call.
73 DCHECK_LE(2u, p.arity()); 88 DCHECK_LE(2u, p.arity());
74 Node* value = (p.arity() == 2) ? jsgraph()->ZeroConstant() 89 Node* value = (p.arity() == 2) ? jsgraph()->ZeroConstant()
75 : NodeProperties::GetValueInput(node, 2); 90 : NodeProperties::GetValueInput(node, 2);
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 Reduction const reduction = ReduceJSCall(node); 566 Reduction const reduction = ReduceJSCall(node);
552 return reduction.Changed() ? reduction : Changed(node); 567 return reduction.Changed() ? reduction : Changed(node);
553 } 568 }
554 } 569 }
555 570
556 // Don't inline cross native context. 571 // Don't inline cross native context.
557 if (function->native_context() != *native_context()) return NoChange(); 572 if (function->native_context() != *native_context()) return NoChange();
558 573
559 // Check for known builtin functions. 574 // Check for known builtin functions.
560 switch (builtin_index) { 575 switch (builtin_index) {
576 case Builtins::kBooleanConstructor:
577 return ReduceBooleanConstructor(node);
561 case Builtins::kFunctionPrototypeApply: 578 case Builtins::kFunctionPrototypeApply:
562 return ReduceFunctionPrototypeApply(node); 579 return ReduceFunctionPrototypeApply(node);
563 case Builtins::kFunctionPrototypeCall: 580 case Builtins::kFunctionPrototypeCall:
564 return ReduceFunctionPrototypeCall(node); 581 return ReduceFunctionPrototypeCall(node);
565 case Builtins::kFunctionPrototypeHasInstance: 582 case Builtins::kFunctionPrototypeHasInstance:
566 return ReduceFunctionPrototypeHasInstance(node); 583 return ReduceFunctionPrototypeHasInstance(node);
567 case Builtins::kNumberConstructor: 584 case Builtins::kNumberConstructor:
568 return ReduceNumberConstructor(node); 585 return ReduceNumberConstructor(node);
569 case Builtins::kObjectPrototypeGetProto: 586 case Builtins::kObjectPrototypeGetProto:
570 return ReduceObjectPrototypeGetProto(node); 587 return ReduceObjectPrototypeGetProto(node);
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 return jsgraph()->javascript(); 856 return jsgraph()->javascript();
840 } 857 }
841 858
842 SimplifiedOperatorBuilder* JSCallReducer::simplified() const { 859 SimplifiedOperatorBuilder* JSCallReducer::simplified() const {
843 return jsgraph()->simplified(); 860 return jsgraph()->simplified();
844 } 861 }
845 862
846 } // namespace compiler 863 } // namespace compiler
847 } // namespace internal 864 } // namespace internal
848 } // namespace v8 865 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-call-reducer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698