// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_COMPILER_GRAPH_REDUCER_H_ #define V8_COMPILER_GRAPH_REDUCER_H_ #include "src/base/compiler-specific.h" #include "src/compiler/graph.h" #include "src/compiler/node-marker.h" #include "src/compiler/node-properties.h" #include "src/zone/zone-containers.h" namespace v8 { namespace internal { class TickCounter; namespace compiler { class Graph; class JSHeapBroker; class Node; class ObserveNodeManager; // NodeIds are identifying numbers for nodes that can be used to index auxiliary // out-of-line data associated with each node. NodeId; // Possible outcomes for decisions. enum class Decision : uint8_t { … }; // Represents the result of trying to reduce a node in the graph. class Reduction final { … }; // A reducer can reduce or simplify a given node based on its operator and // inputs. This class functions as an extension point for the graph reducer for // language-specific reductions (e.g. reduction based on types or constant // folding of low-level operators) can be integrated into the graph reduction // phase. class V8_EXPORT_PRIVATE Reducer { … }; // An advanced reducer can also edit the graphs by changing and replacing nodes // other than the one currently being reduced. class AdvancedReducer : public Reducer { … }; // Performs an iterative reduction of a node graph. class V8_EXPORT_PRIVATE GraphReducer : public NON_EXPORTED_BASE(AdvancedReducer::Editor) { … }; } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_GRAPH_REDUCER_H_