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

Side by Side Diff: src/compiler/scheduler.cc

Issue 944903002: Make sure exception handlers are deferred. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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 | test/unittests/compiler/scheduler-unittest.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/scheduler.h" 5 #include "src/compiler/scheduler.h"
6 6
7 #include "src/bit-vector.h" 7 #include "src/bit-vector.h"
8 #include "src/compiler/common-operator.h" 8 #include "src/compiler/common-operator.h"
9 #include "src/compiler/control-equivalence.h" 9 #include "src/compiler/control-equivalence.h"
10 #include "src/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 special_rpo_->ComputeSpecialRPO(); 1067 special_rpo_->ComputeSpecialRPO();
1068 } 1068 }
1069 1069
1070 1070
1071 void Scheduler::PropagateImmediateDominators(BasicBlock* block) { 1071 void Scheduler::PropagateImmediateDominators(BasicBlock* block) {
1072 for (/*nop*/; block != NULL; block = block->rpo_next()) { 1072 for (/*nop*/; block != NULL; block = block->rpo_next()) {
1073 auto pred = block->predecessors().begin(); 1073 auto pred = block->predecessors().begin();
1074 auto end = block->predecessors().end(); 1074 auto end = block->predecessors().end();
1075 DCHECK(pred != end); // All blocks except start have predecessors. 1075 DCHECK(pred != end); // All blocks except start have predecessors.
1076 BasicBlock* dominator = *pred; 1076 BasicBlock* dominator = *pred;
1077 bool deferred = dominator->deferred();
1077 // For multiple predecessors, walk up the dominator tree until a common 1078 // For multiple predecessors, walk up the dominator tree until a common
1078 // dominator is found. Visitation order guarantees that all predecessors 1079 // dominator is found. Visitation order guarantees that all predecessors
1079 // except for backwards edges have been visited. 1080 // except for backwards edges have been visited.
1080 for (++pred; pred != end; ++pred) { 1081 for (++pred; pred != end; ++pred) {
1081 // Don't examine backwards edges. 1082 // Don't examine backwards edges.
1082 if ((*pred)->dominator_depth() < 0) continue; 1083 if ((*pred)->dominator_depth() < 0) continue;
1083 dominator = BasicBlock::GetCommonDominator(dominator, *pred); 1084 dominator = BasicBlock::GetCommonDominator(dominator, *pred);
1085 deferred = deferred & (*pred)->deferred();
1084 } 1086 }
1085 block->set_dominator(dominator); 1087 block->set_dominator(dominator);
1086 block->set_dominator_depth(dominator->dominator_depth() + 1); 1088 block->set_dominator_depth(dominator->dominator_depth() + 1);
1087 // Propagate "deferredness" of the dominator. 1089 block->set_deferred(deferred | block->deferred());
1088 if (dominator->deferred()) block->set_deferred(true);
1089 Trace("Block B%d's idom is B%d, depth = %d\n", block->id().ToInt(), 1090 Trace("Block B%d's idom is B%d, depth = %d\n", block->id().ToInt(),
1090 dominator->id().ToInt(), block->dominator_depth()); 1091 dominator->id().ToInt(), block->dominator_depth());
1091 } 1092 }
1092 } 1093 }
1093 1094
1094 1095
1095 void Scheduler::GenerateImmediateDominatorTree() { 1096 void Scheduler::GenerateImmediateDominatorTree() {
1096 Trace("--- IMMEDIATE BLOCK DOMINATORS -----------------------------\n"); 1097 Trace("--- IMMEDIATE BLOCK DOMINATORS -----------------------------\n");
1097 1098
1098 // Seed start block to be the first dominator. 1099 // Seed start block to be the first dominator.
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 for (Node* const node : *nodes) { 1661 for (Node* const node : *nodes) {
1661 schedule_->SetBlockForNode(to, node); 1662 schedule_->SetBlockForNode(to, node);
1662 scheduled_nodes_[to->id().ToSize()].push_back(node); 1663 scheduled_nodes_[to->id().ToSize()].push_back(node);
1663 } 1664 }
1664 nodes->clear(); 1665 nodes->clear();
1665 } 1666 }
1666 1667
1667 } // namespace compiler 1668 } // namespace compiler
1668 } // namespace internal 1669 } // namespace internal
1669 } // namespace v8 1670 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/unittests/compiler/scheduler-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698