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

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

Issue 2293023003: [turbofan] Don't eliminate FinishRegion nodes. (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 | « 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 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 15 matching lines...) Expand all
26 false_type_(Type::Constant(factory()->false_value(), graph()->zone())), 26 false_type_(Type::Constant(factory()->false_value(), graph()->zone())),
27 type_cache_(TypeCache::Get()) {} 27 type_cache_(TypeCache::Get()) {}
28 28
29 TypedOptimization::~TypedOptimization() {} 29 TypedOptimization::~TypedOptimization() {}
30 30
31 Reduction TypedOptimization::Reduce(Node* node) { 31 Reduction TypedOptimization::Reduce(Node* node) {
32 // Check if the output type is a singleton. In that case we already know the 32 // Check if the output type is a singleton. In that case we already know the
33 // result value and can simply replace the node if it's eliminable. 33 // result value and can simply replace the node if it's eliminable.
34 if (!NodeProperties::IsConstant(node) && NodeProperties::IsTyped(node) && 34 if (!NodeProperties::IsConstant(node) && NodeProperties::IsTyped(node) &&
35 node->op()->HasProperty(Operator::kEliminatable)) { 35 node->op()->HasProperty(Operator::kEliminatable)) {
36 // TODO(v8:5303): We must not eliminate FinishRegion here. This special
37 // case can be removed once we have separate operators for value and
38 // effect regions.
39 if (node->opcode() == IrOpcode::kFinishRegion) return NoChange();
36 // We can only constant-fold nodes here, that are known to not cause any 40 // We can only constant-fold nodes here, that are known to not cause any
37 // side-effect, may it be a JavaScript observable side-effect or a possible 41 // side-effect, may it be a JavaScript observable side-effect or a possible
38 // eager deoptimization exit (i.e. {node} has an operator that doesn't have 42 // eager deoptimization exit (i.e. {node} has an operator that doesn't have
39 // the Operator::kNoDeopt property). 43 // the Operator::kNoDeopt property).
40 Type* upper = NodeProperties::GetType(node); 44 Type* upper = NodeProperties::GetType(node);
41 if (upper->IsInhabited()) { 45 if (upper->IsInhabited()) {
42 if (upper->IsConstant()) { 46 if (upper->IsConstant()) {
43 Node* replacement = jsgraph()->Constant(upper->AsConstant()->Value()); 47 Node* replacement = jsgraph()->Constant(upper->AsConstant()->Value());
44 ReplaceWithValue(node, replacement); 48 ReplaceWithValue(node, replacement);
45 return Changed(replacement); 49 return Changed(replacement);
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 252
249 Isolate* TypedOptimization::isolate() const { return jsgraph()->isolate(); } 253 Isolate* TypedOptimization::isolate() const { return jsgraph()->isolate(); }
250 254
251 SimplifiedOperatorBuilder* TypedOptimization::simplified() const { 255 SimplifiedOperatorBuilder* TypedOptimization::simplified() const {
252 return jsgraph()->simplified(); 256 return jsgraph()->simplified();
253 } 257 }
254 258
255 } // namespace compiler 259 } // namespace compiler
256 } // namespace internal 260 } // namespace internal
257 } // namespace v8 261 } // 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