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

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

Issue 2646763004: [turbofan] Introduce simplified operators directly in BytecodeGraphBuilder. (Closed)
Patch Set: Created 3 years, 11 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 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/bytecode-graph-builder.h" 5 #include "src/compiler/bytecode-graph-builder.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler/compiler-source-position-table.h" 10 #include "src/compiler/compiler-source-position-table.h"
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 // Output environment where the context has an extension 837 // Output environment where the context has an extension
838 Environment* slow_environment = nullptr; 838 Environment* slow_environment = nullptr;
839 839
840 // We only need to check up to the last-but-one depth, because the an eval in 840 // We only need to check up to the last-but-one depth, because the an eval in
841 // the same scope as the variable itself has no way of shadowing it. 841 // the same scope as the variable itself has no way of shadowing it.
842 for (uint32_t d = 0; d < depth; d++) { 842 for (uint32_t d = 0; d < depth; d++) {
843 Node* extension_slot = 843 Node* extension_slot =
844 NewNode(javascript()->LoadContext(d, Context::EXTENSION_INDEX, false)); 844 NewNode(javascript()->LoadContext(d, Context::EXTENSION_INDEX, false));
845 845
846 Node* check_no_extension = 846 Node* check_no_extension =
847 NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), 847 NewNode(simplified()->ReferenceEqual(), extension_slot,
848 extension_slot, jsgraph()->TheHoleConstant()); 848 jsgraph()->TheHoleConstant());
849 849
850 NewBranch(check_no_extension); 850 NewBranch(check_no_extension);
851 Environment* true_environment = environment()->Copy(); 851 Environment* true_environment = environment()->Copy();
852 852
853 { 853 {
854 NewIfFalse(); 854 NewIfFalse();
855 // If there is an extension, merge into the slow path. 855 // If there is an extension, merge into the slow path.
856 if (slow_environment == nullptr) { 856 if (slow_environment == nullptr) {
857 slow_environment = environment(); 857 slow_environment = environment();
858 NewMerge(); 858 NewMerge();
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after
1592 PrepareEagerCheckpoint(); 1592 PrepareEagerCheckpoint();
1593 const Operator* js_op = 1593 const Operator* js_op =
1594 javascript()->Subtract(GetBinaryOperationHint(kCountOperationHintIndex)); 1594 javascript()->Subtract(GetBinaryOperationHint(kCountOperationHintIndex));
1595 Node* node = NewNode(js_op, environment()->LookupAccumulator(), 1595 Node* node = NewNode(js_op, environment()->LookupAccumulator(),
1596 jsgraph()->OneConstant()); 1596 jsgraph()->OneConstant());
1597 environment()->BindAccumulator(node, Environment::kAttachFrameState); 1597 environment()->BindAccumulator(node, Environment::kAttachFrameState);
1598 } 1598 }
1599 1599
1600 void BytecodeGraphBuilder::VisitLogicalNot() { 1600 void BytecodeGraphBuilder::VisitLogicalNot() {
1601 Node* value = environment()->LookupAccumulator(); 1601 Node* value = environment()->LookupAccumulator();
1602 Node* node = NewNode(common()->Select(MachineRepresentation::kTagged), value, 1602 Node* node = NewNode(simplified()->BooleanNot(), value);
1603 jsgraph()->FalseConstant(), jsgraph()->TrueConstant());
1604 environment()->BindAccumulator(node); 1603 environment()->BindAccumulator(node);
1605 } 1604 }
1606 1605
1607 void BytecodeGraphBuilder::VisitToBooleanLogicalNot() { 1606 void BytecodeGraphBuilder::VisitToBooleanLogicalNot() {
1608 Node* value = NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), 1607 Node* value = NewNode(javascript()->ToBoolean(ToBooleanHint::kAny),
1609 environment()->LookupAccumulator()); 1608 environment()->LookupAccumulator());
1610 Node* node = NewNode(common()->Select(MachineRepresentation::kTagged), value, 1609 Node* node = NewNode(simplified()->BooleanNot(), value);
1611 jsgraph()->FalseConstant(), jsgraph()->TrueConstant());
1612 environment()->BindAccumulator(node); 1610 environment()->BindAccumulator(node);
1613 } 1611 }
1614 1612
1615 void BytecodeGraphBuilder::VisitTypeOf() { 1613 void BytecodeGraphBuilder::VisitTypeOf() {
1616 Node* node = 1614 Node* node =
1617 NewNode(javascript()->TypeOf(), environment()->LookupAccumulator()); 1615 NewNode(javascript()->TypeOf(), environment()->LookupAccumulator());
1618 environment()->BindAccumulator(node); 1616 environment()->BindAccumulator(node);
1619 } 1617 }
1620 1618
1621 void BytecodeGraphBuilder::BuildDelete(LanguageMode language_mode) { 1619 void BytecodeGraphBuilder::BuildDelete(LanguageMode language_mode) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1691 void BytecodeGraphBuilder::VisitTestUndetectable() { 1689 void BytecodeGraphBuilder::VisitTestUndetectable() {
1692 Node* object = 1690 Node* object =
1693 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 1691 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
1694 Node* node = NewNode(jsgraph()->simplified()->ObjectIsUndetectable(), object); 1692 Node* node = NewNode(jsgraph()->simplified()->ObjectIsUndetectable(), object);
1695 environment()->BindAccumulator(node); 1693 environment()->BindAccumulator(node);
1696 } 1694 }
1697 1695
1698 void BytecodeGraphBuilder::VisitTestNull() { 1696 void BytecodeGraphBuilder::VisitTestNull() {
1699 Node* object = 1697 Node* object =
1700 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 1698 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
1701 Node* result = NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), 1699 Node* result = NewNode(simplified()->ReferenceEqual(), object,
1702 object, jsgraph()->NullConstant()); 1700 jsgraph()->NullConstant());
1703 environment()->BindAccumulator(result); 1701 environment()->BindAccumulator(result);
1704 } 1702 }
1705 1703
1706 void BytecodeGraphBuilder::VisitTestUndefined() { 1704 void BytecodeGraphBuilder::VisitTestUndefined() {
1707 Node* object = 1705 Node* object =
1708 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); 1706 environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
1709 Node* result = NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), 1707 Node* result = NewNode(simplified()->ReferenceEqual(), object,
1710 object, jsgraph()->UndefinedConstant()); 1708 jsgraph()->UndefinedConstant());
1711 environment()->BindAccumulator(result); 1709 environment()->BindAccumulator(result);
1712 } 1710 }
1713 1711
1714 void BytecodeGraphBuilder::BuildCastOperator(const Operator* js_op) { 1712 void BytecodeGraphBuilder::BuildCastOperator(const Operator* js_op) {
1715 Node* value = NewNode(js_op, environment()->LookupAccumulator()); 1713 Node* value = NewNode(js_op, environment()->LookupAccumulator());
1716 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), value, 1714 environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), value,
1717 Environment::kAttachFrameState); 1715 Environment::kAttachFrameState);
1718 } 1716 }
1719 1717
1720 void BytecodeGraphBuilder::VisitToName() { 1718 void BytecodeGraphBuilder::VisitToName() {
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
2049 Environment* if_true_environment = environment()->Copy(); 2047 Environment* if_true_environment = environment()->Copy();
2050 NewIfFalse(); 2048 NewIfFalse();
2051 MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset()); 2049 MergeIntoSuccessorEnvironment(bytecode_iterator().GetJumpTargetOffset());
2052 set_environment(if_true_environment); 2050 set_environment(if_true_environment);
2053 NewIfTrue(); 2051 NewIfTrue();
2054 } 2052 }
2055 2053
2056 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) { 2054 void BytecodeGraphBuilder::BuildJumpIfEqual(Node* comperand) {
2057 Node* accumulator = environment()->LookupAccumulator(); 2055 Node* accumulator = environment()->LookupAccumulator();
2058 Node* condition = 2056 Node* condition =
2059 NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), 2057 NewNode(simplified()->ReferenceEqual(), accumulator, comperand);
2060 accumulator, comperand);
2061 BuildJumpIf(condition); 2058 BuildJumpIf(condition);
2062 } 2059 }
2063 2060
2064 void BytecodeGraphBuilder::BuildJumpIfFalse() { 2061 void BytecodeGraphBuilder::BuildJumpIfFalse() {
2065 BuildJumpIfNot(environment()->LookupAccumulator()); 2062 BuildJumpIfNot(environment()->LookupAccumulator());
2066 } 2063 }
2067 2064
2068 void BytecodeGraphBuilder::BuildJumpIfTrue() { 2065 void BytecodeGraphBuilder::BuildJumpIfTrue() {
2069 BuildJumpIf(environment()->LookupAccumulator()); 2066 BuildJumpIf(environment()->LookupAccumulator());
2070 } 2067 }
2071 2068
2072 void BytecodeGraphBuilder::BuildJumpIfToBooleanTrue() { 2069 void BytecodeGraphBuilder::BuildJumpIfToBooleanTrue() {
2073 Node* accumulator = environment()->LookupAccumulator(); 2070 Node* accumulator = environment()->LookupAccumulator();
2074 Node* condition = 2071 Node* condition =
2075 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator); 2072 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator);
2076 BuildJumpIf(condition); 2073 BuildJumpIf(condition);
2077 } 2074 }
2078 2075
2079 void BytecodeGraphBuilder::BuildJumpIfToBooleanFalse() { 2076 void BytecodeGraphBuilder::BuildJumpIfToBooleanFalse() {
2080 Node* accumulator = environment()->LookupAccumulator(); 2077 Node* accumulator = environment()->LookupAccumulator();
2081 Node* condition = 2078 Node* condition =
2082 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator); 2079 NewNode(javascript()->ToBoolean(ToBooleanHint::kAny), accumulator);
2083 BuildJumpIfNot(condition); 2080 BuildJumpIfNot(condition);
2084 } 2081 }
2085 2082
2086 void BytecodeGraphBuilder::BuildJumpIfNotHole() { 2083 void BytecodeGraphBuilder::BuildJumpIfNotHole() {
2087 Node* accumulator = environment()->LookupAccumulator(); 2084 Node* accumulator = environment()->LookupAccumulator();
2088 Node* condition = 2085 Node* condition = NewNode(simplified()->ReferenceEqual(), accumulator,
2089 NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), 2086 jsgraph()->TheHoleConstant());
2090 accumulator, jsgraph()->TheHoleConstant());
2091 BuildJumpIfNot(condition); 2087 BuildJumpIfNot(condition);
2092 } 2088 }
2093 2089
2094 void BytecodeGraphBuilder::BuildJumpIfJSReceiver() { 2090 void BytecodeGraphBuilder::BuildJumpIfJSReceiver() {
2095 Node* accumulator = environment()->LookupAccumulator(); 2091 Node* accumulator = environment()->LookupAccumulator();
2096 Node* condition = NewNode(simplified()->ObjectIsReceiver(), accumulator); 2092 Node* condition = NewNode(simplified()->ObjectIsReceiver(), accumulator);
2097 BuildJumpIf(condition); 2093 BuildJumpIf(condition);
2098 } 2094 }
2099 2095
2100 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) { 2096 Node** BytecodeGraphBuilder::EnsureInputBufferSize(int size) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
2292 it->source_position().ScriptOffset(), start_position_.InliningId())); 2288 it->source_position().ScriptOffset(), start_position_.InliningId()));
2293 it->Advance(); 2289 it->Advance();
2294 } else { 2290 } else {
2295 DCHECK_GT(it->code_offset(), offset); 2291 DCHECK_GT(it->code_offset(), offset);
2296 } 2292 }
2297 } 2293 }
2298 2294
2299 } // namespace compiler 2295 } // namespace compiler
2300 } // namespace internal 2296 } // namespace internal
2301 } // namespace v8 2297 } // 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