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

Side by Side Diff: src/compiler/typed-optimization.cc

Issue 2293343002: [turbofan] Remove remaining uses of Class type from the compiler. (Closed)
Patch Set: Created 4 years, 3 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-native-context-specialization.cc ('k') | src/compiler/typer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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/typed-optimization.h" 5 #include "src/compiler/typed-optimization.h"
6 6
7 #include "src/compilation-dependencies.h" 7 #include "src/compilation-dependencies.h"
8 #include "src/compiler/js-graph.h" 8 #include "src/compiler/js-graph.h"
9 #include "src/compiler/node-properties.h" 9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/simplified-operator.h" 10 #include "src/compiler/simplified-operator.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 90 }
91 91
92 namespace { 92 namespace {
93 93
94 MaybeHandle<Map> GetStableMapFromObjectType(Type* object_type) { 94 MaybeHandle<Map> GetStableMapFromObjectType(Type* object_type) {
95 if (object_type->IsConstant() && 95 if (object_type->IsConstant() &&
96 object_type->AsConstant()->Value()->IsHeapObject()) { 96 object_type->AsConstant()->Value()->IsHeapObject()) {
97 Handle<Map> object_map( 97 Handle<Map> object_map(
98 Handle<HeapObject>::cast(object_type->AsConstant()->Value())->map()); 98 Handle<HeapObject>::cast(object_type->AsConstant()->Value())->map());
99 if (object_map->is_stable()) return object_map; 99 if (object_map->is_stable()) return object_map;
100 } else if (object_type->IsClass()) {
101 Handle<Map> object_map = object_type->AsClass()->Map();
102 if (object_map->is_stable()) return object_map;
103 } 100 }
104 return MaybeHandle<Map>(); 101 return MaybeHandle<Map>();
105 } 102 }
106 103
107 } // namespace 104 } // namespace
108 105
109 Reduction TypedOptimization::ReduceCheckMaps(Node* node) { 106 Reduction TypedOptimization::ReduceCheckMaps(Node* node) {
110 // The CheckMaps(o, ...map...) can be eliminated if map is stable and 107 // The CheckMaps(o, ...map...) can be eliminated if map is stable,
111 // either 108 // o has type Constant(object) and map == object->map, and either
112 // (a) o has type Constant(object) and map == object->map, or
113 // (b) o has type Class(map),
114 // and either
115 // (1) map cannot transition further, or 109 // (1) map cannot transition further, or
116 // (2) we can add a code dependency on the stability of map 110 // (2) we can add a code dependency on the stability of map
117 // (to guard the Constant type information). 111 // (to guard the Constant type information).
118 Node* const object = NodeProperties::GetValueInput(node, 0); 112 Node* const object = NodeProperties::GetValueInput(node, 0);
119 Type* const object_type = NodeProperties::GetType(object); 113 Type* const object_type = NodeProperties::GetType(object);
120 Node* const effect = NodeProperties::GetEffectInput(node); 114 Node* const effect = NodeProperties::GetEffectInput(node);
121 Handle<Map> object_map; 115 Handle<Map> object_map;
122 if (GetStableMapFromObjectType(object_type).ToHandle(&object_map)) { 116 if (GetStableMapFromObjectType(object_type).ToHandle(&object_map)) {
123 for (int i = 1; i < node->op()->ValueInputCount(); ++i) { 117 for (int i = 1; i < node->op()->ValueInputCount(); ++i) {
124 Node* const map = NodeProperties::GetValueInput(node, i); 118 Node* const map = NodeProperties::GetValueInput(node, i);
(...skipping 19 matching lines...) Expand all
144 } 138 }
145 return NoChange(); 139 return NoChange();
146 } 140 }
147 141
148 Reduction TypedOptimization::ReduceLoadField(Node* node) { 142 Reduction TypedOptimization::ReduceLoadField(Node* node) {
149 Node* const object = NodeProperties::GetValueInput(node, 0); 143 Node* const object = NodeProperties::GetValueInput(node, 0);
150 Type* const object_type = NodeProperties::GetType(object); 144 Type* const object_type = NodeProperties::GetType(object);
151 FieldAccess const& access = FieldAccessOf(node->op()); 145 FieldAccess const& access = FieldAccessOf(node->op());
152 if (access.base_is_tagged == kTaggedBase && 146 if (access.base_is_tagged == kTaggedBase &&
153 access.offset == HeapObject::kMapOffset) { 147 access.offset == HeapObject::kMapOffset) {
154 // We can replace LoadField[Map](o) with map if is stable and either 148 // We can replace LoadField[Map](o) with map if is stable, and
155 // (a) o has type Constant(object) and map == object->map, or 149 // o has type Constant(object) and map == object->map, and either
156 // (b) o has type Class(map),
157 // and either
158 // (1) map cannot transition further, or 150 // (1) map cannot transition further, or
159 // (2) deoptimization is enabled and we can add a code dependency on the 151 // (2) deoptimization is enabled and we can add a code dependency on the
160 // stability of map (to guard the Constant type information). 152 // stability of map (to guard the Constant type information).
161 Handle<Map> object_map; 153 Handle<Map> object_map;
162 if (GetStableMapFromObjectType(object_type).ToHandle(&object_map)) { 154 if (GetStableMapFromObjectType(object_type).ToHandle(&object_map)) {
163 if (object_map->CanTransition()) { 155 if (object_map->CanTransition()) {
164 if (flags() & kDeoptimizationEnabled) { 156 if (flags() & kDeoptimizationEnabled) {
165 dependencies()->AssumeMapStable(object_map); 157 dependencies()->AssumeMapStable(object_map);
166 } else { 158 } else {
167 return NoChange(); 159 return NoChange();
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 240
249 Isolate* TypedOptimization::isolate() const { return jsgraph()->isolate(); } 241 Isolate* TypedOptimization::isolate() const { return jsgraph()->isolate(); }
250 242
251 SimplifiedOperatorBuilder* TypedOptimization::simplified() const { 243 SimplifiedOperatorBuilder* TypedOptimization::simplified() const {
252 return jsgraph()->simplified(); 244 return jsgraph()->simplified();
253 } 245 }
254 246
255 } // namespace compiler 247 } // namespace compiler
256 } // namespace internal 248 } // namespace internal
257 } // namespace v8 249 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-native-context-specialization.cc ('k') | src/compiler/typer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698