#ifndef V8_COMPILER_TURBOSHAFT_PHASE_H_
#define V8_COMPILER_TURBOSHAFT_PHASE_H_
#include <optional>
#include <type_traits>
#include "src/base/contextual.h"
#include "src/base/template-meta-programming/functional.h"
#include "src/codegen/assembler.h"
#include "src/codegen/optimized-compilation-info.h"
#include "src/common/globals.h"
#include "src/compiler/access-info.h"
#include "src/compiler/backend/instruction.h"
#include "src/compiler/compilation-dependencies.h"
#include "src/compiler/compiler-source-position-table.h"
#include "src/compiler/node-origin-table.h"
#include "src/compiler/osr.h"
#include "src/compiler/phase.h"
#include "src/compiler/turboshaft/graph.h"
#include "src/compiler/turboshaft/sidetable.h"
#include "src/compiler/turboshaft/zone-with-name.h"
#include "src/logging/runtime-call-stats.h"
#include "src/zone/accounting-allocator.h"
#include "src/zone/zone.h"
#ifdef HAS_CPP_CONCEPTS
#define STATIC_ASSERT_IF_CONCEPTS(cond) …
#else
#define STATIC_ASSERT_IF_CONCEPTS …
#endif
#define DECL_TURBOSHAFT_PHASE_CONSTANTS_IMPL(Name, CallStatsName) …
#define DECL_TURBOSHAFT_PHASE_CONSTANTS(Name) …
#define DECL_TURBOSHAFT_PHASE_CONSTANTS_WITH_LEGACY_NAME(Name) …
#define DECL_TURBOSHAFT_MAIN_THREAD_PIPELINE_PHASE_CONSTANTS_WITH_LEGACY_NAME( \
Name) …
namespace v8::internal::compiler {
class RegisterAllocationData;
class Schedule;
class TurbofanPipelineStatistics;
}
namespace v8::internal::compiler::turboshaft {
class PipelineData;
#ifdef HAS_CPP_CONCEPTS
template <typename Phase>
struct HasProperRunMethod { … };
TurboshaftPhase;
TurbofanPhase;
CompilerPhase;
#define CONCEPT(name) …
#else
#define CONCEPT …
#endif
namespace detail {
template <typename, typename = void>
struct produces_printable_graph_impl : std::true_type { … };
template <typename P>
struct produces_printable_graph_impl<
P, std::void_t<decltype(P::kOutputIsTraceableGraph)>>
: std::bool_constant<P::kOutputIsTraceableGraph> {};
#ifdef HAS_CPP_CLASS_TYPES_AS_TEMPLATE_ARGS
template <base::tmp::StringLiteral ZoneName>
#else
template <auto ZoneName>
#endif
struct ComponentWithZone { … };
struct BuiltinComponent { … };
struct GraphComponent : public ComponentWithZone<kGraphZoneName> { … };
struct CodegenComponent : public ComponentWithZone<kCodegenZoneName> { … };
struct InstructionComponent : public ComponentWithZone<kInstructionZoneName> { … };
struct RegisterComponent
: public ComponentWithZone<kRegisterAllocationZoneName> { … };
}
template <typename P>
struct produces_printable_graph
: public detail::produces_printable_graph_impl<P> { … };
enum class TurboshaftPipelineKind { … };
class LoopUnrollingAnalyzer;
class WasmRevecAnalyzer;
class V8_EXPORT_PRIVATE PipelineData { … };
void PrintTurboshaftGraph(PipelineData* data, Zone* temp_zone,
CodeTracer* code_tracer, const char* phase_name);
void PrintTurboshaftGraphForTurbolizer(std::ofstream& stream,
const Graph& graph,
const char* phase_name,
NodeOriginTable* node_origins,
Zone* temp_zone);
}
#endif