| Index: src/compiler/control-reducer.cc
|
| diff --git a/src/compiler/control-reducer.cc b/src/compiler/control-reducer.cc
|
| index 05cf5ec897df208bce81061a60ace99150a16c0c..4644440f9c6e1826b11ef940446248437fe907b2 100644
|
| --- a/src/compiler/control-reducer.cc
|
| +++ b/src/compiler/control-reducer.cc
|
| @@ -21,27 +21,8 @@ namespace compiler {
|
| if (FLAG_trace_turbo_reduction) PrintF(__VA_ARGS__); \
|
| } while (false)
|
|
|
| -enum VisitState { kUnvisited = 0, kOnStack = 1, kRevisit = 2, kVisited = 3 };
|
| enum Decision { kFalse, kUnknown, kTrue };
|
|
|
| -class ReachabilityMarker : public NodeMarker<uint8_t> {
|
| - public:
|
| - explicit ReachabilityMarker(Graph* graph) : NodeMarker<uint8_t>(graph, 8) {}
|
| - bool SetReachableFromEnd(Node* node) {
|
| - uint8_t before = Get(node);
|
| - Set(node, before | kFromEnd);
|
| - return before & kFromEnd;
|
| - }
|
| - bool IsReachableFromEnd(Node* node) { return Get(node) & kFromEnd; }
|
| - void Push(Node* node) { Set(node, Get(node) | kFwStack); }
|
| - void Pop(Node* node) { Set(node, Get(node) & ~kFwStack); }
|
| - bool IsOnStack(Node* node) { return Get(node) & kFwStack; }
|
| -
|
| - private:
|
| - enum Bit { kFromEnd = 1, kFwStack = 2 };
|
| -};
|
| -
|
| -
|
| class ControlReducerImpl final : public AdvancedReducer {
|
| public:
|
| Zone* zone_;
|
| @@ -58,83 +39,6 @@ class ControlReducerImpl final : public AdvancedReducer {
|
| CommonOperatorBuilder* common() { return jsgraph_->common(); }
|
| Node* dead() { return jsgraph_->DeadControl(); }
|
|
|
| - // Finish reducing the graph by trimming nodes.
|
| - bool Finish() final {
|
| - // TODO(bmeurer): Move this to the GraphReducer.
|
| - Trim();
|
| - return true;
|
| - }
|
| -
|
| - void AddNodesReachableFromRoots(ReachabilityMarker& marked,
|
| - NodeVector& nodes) {
|
| - jsgraph_->GetCachedNodes(&nodes); // Consider cached nodes roots.
|
| - Node* end = graph()->end();
|
| - marked.SetReachableFromEnd(end);
|
| - if (!end->IsDead()) nodes.push_back(end); // Consider end to be a root.
|
| - for (Node* node : nodes) marked.SetReachableFromEnd(node);
|
| - AddBackwardsReachableNodes(marked, nodes, 0);
|
| - }
|
| -
|
| - void AddBackwardsReachableNodes(ReachabilityMarker& marked, NodeVector& nodes,
|
| - size_t cursor) {
|
| - while (cursor < nodes.size()) {
|
| - Node* node = nodes[cursor++];
|
| - for (Node* const input : node->inputs()) {
|
| - if (!marked.SetReachableFromEnd(input)) {
|
| - nodes.push_back(input);
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - void Trim() {
|
| - // Gather all nodes backwards-reachable from end through inputs.
|
| - ReachabilityMarker marked(graph());
|
| - NodeVector nodes(zone_);
|
| - jsgraph_->GetCachedNodes(&nodes);
|
| - AddNodesReachableFromRoots(marked, nodes);
|
| - TrimNodes(marked, nodes);
|
| - }
|
| -
|
| - void TrimNodes(ReachabilityMarker& marked, NodeVector& nodes) {
|
| - // Remove dead->live edges.
|
| - for (size_t j = 0; j < nodes.size(); j++) {
|
| - Node* node = nodes[j];
|
| - for (Edge edge : node->use_edges()) {
|
| - Node* use = edge.from();
|
| - if (!marked.IsReachableFromEnd(use)) {
|
| - TRACE("DeadLink: #%d:%s(%d) -> #%d:%s\n", use->id(),
|
| - use->op()->mnemonic(), edge.index(), node->id(),
|
| - node->op()->mnemonic());
|
| - edge.UpdateTo(NULL);
|
| - }
|
| - }
|
| - }
|
| -#if DEBUG
|
| - // Verify that no inputs to live nodes are NULL.
|
| - for (Node* node : nodes) {
|
| - for (int index = 0; index < node->InputCount(); index++) {
|
| - Node* input = node->InputAt(index);
|
| - if (input == nullptr) {
|
| - std::ostringstream str;
|
| - str << "GraphError: node #" << node->id() << ":" << *node->op()
|
| - << "(input @" << index << ") == null";
|
| - FATAL(str.str().c_str());
|
| - }
|
| - if (input->opcode() == IrOpcode::kDead) {
|
| - std::ostringstream str;
|
| - str << "GraphError: node #" << node->id() << ":" << *node->op()
|
| - << "(input @" << index << ") == dead";
|
| - FATAL(str.str().c_str());
|
| - }
|
| - }
|
| - for (Node* use : node->uses()) {
|
| - CHECK(marked.IsReachableFromEnd(use));
|
| - }
|
| - }
|
| -#endif
|
| - }
|
| -
|
| //===========================================================================
|
| // Reducer implementation: perform reductions on a node.
|
| //===========================================================================
|
| @@ -443,13 +347,6 @@ class DummyEditor final : public AdvancedReducer::Editor {
|
| } // namespace
|
|
|
|
|
| -void ControlReducer::TrimGraph(Zone* zone, JSGraph* jsgraph) {
|
| - DummyEditor editor;
|
| - ControlReducerImpl impl(&editor, zone, jsgraph);
|
| - impl.Trim();
|
| -}
|
| -
|
| -
|
| Node* ControlReducer::ReduceMerge(JSGraph* jsgraph, Node* node,
|
| int max_phis_for_select) {
|
| Zone zone;
|
|
|