#ifndef V8_COMPILER_TURBOSHAFT_GRAPH_H_
#define V8_COMPILER_TURBOSHAFT_GRAPH_H_
#include <algorithm>
#include <iterator>
#include <limits>
#include <memory>
#include <tuple>
#include <type_traits>
#include "src/base/iterator.h"
#include "src/base/logging.h"
#include "src/base/small-vector.h"
#include "src/base/vector.h"
#include "src/codegen/source-position.h"
#include "src/compiler/turboshaft/operations.h"
#include "src/compiler/turboshaft/sidetable.h"
#include "src/compiler/turboshaft/types.h"
#include "src/zone/zone-containers.h"
namespace v8::internal::compiler::turboshaft {
template <class Reducers>
class Assembler;
class LoopUnrollingAnalyzer;
class OperationBuffer { … };
template <class Derived>
class DominatorForwardTreeNode;
template <class Derived>
class RandomAccessStackDominatorNode;
template <class Derived>
class DominatorForwardTreeNode { … };
template <class Derived>
class RandomAccessStackDominatorNode
: public DominatorForwardTreeNode<Derived> { … };
class PredecessorIterator { … };
class NeighboringPredecessorIterable { … };
class Block : public RandomAccessStackDominatorNode<Block> { … };
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, const Block* b);
inline PredecessorIterator& PredecessorIterator::operator++() { … }
class Graph { … };
V8_INLINE OperationStorageSlot* AllocateOpStorage(Graph* graph,
size_t slot_count) { … }
V8_INLINE const Operation& Get(const Graph& graph, OpIndex index) { … }
V8_INLINE const Operation& Block::FirstOperation(const Graph& graph) const { … }
V8_INLINE const Operation& Block::LastOperation(const Graph& graph) const { … }
V8_INLINE bool Block::HasPhis(const Graph& graph) const { … }
struct PrintAsBlockHeader { … };
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
PrintAsBlockHeader block);
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
const Graph& graph);
V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
const Block::Kind& kind);
inline uint32_t Block::ComputeDominator() { … }
template <class Derived>
inline void RandomAccessStackDominatorNode<Derived>::SetAsDominatorRoot() { … }
template <class Derived>
inline void RandomAccessStackDominatorNode<Derived>::SetDominator(
Derived* dominator) { … }
template <class Derived>
inline Derived* RandomAccessStackDominatorNode<Derived>::GetCommonDominator(
RandomAccessStackDominatorNode<Derived>* other) const { … }
}
template <>
class std::iterator_traits<
v8::internal::compiler::turboshaft::PredecessorIterator> { … };
#endif