5#ifndef V8_COMPILER_TURBOSHAFT_INSTRUCTION_SELECTION_PHASE_H_
6#define V8_COMPILER_TURBOSHAFT_INSTRUCTION_SELECTION_PHASE_H_
13class ProfileDataFromFile;
34 static const int kBlockOnStack = -2;
35 static const int kBlockVisited1 = -3;
36 static const int kBlockVisited2 = -4;
37 static const int kBlockUnvisited = -1;
39 using Backedge = std::pair<const Block*, size_t>;
48 : block(block), index(index), successors(
std::move(successors)) {}
65 static constexpr size_t kNoLoopNumber = std::numeric_limits<size_t>::max();
66 int32_t rpo_number = kBlockUnvisited;
67 size_t loop_number = kNoLoopNumber;
68 const Block* rpo_next =
nullptr;
72 :
graph_(&graph), block_data_(graph.block_count(), zone), loops_(zone) {}
81 return block_data_[block->index()].rpo_number;
85 block_data_[block->index()].rpo_number = rpo_number;
89 return block_data_[block->index()].loop_number != BlockData::kNoLoopNumber;
93 DCHECK(has_loop_number(block));
94 return block_data_[block->index()].loop_number;
98 block_data_[block->index()].loop_number = loop_number;
102 block_data_[block->index()].rpo_next = head;
FixedBlockSidetable< BlockData > block_data_
int32_t rpo_number(const Block *block) const
std::pair< const Block *, size_t > Backedge
void set_loop_number(const Block *block, size_t loop_number)
TurboshaftSpecialRPONumberer(const Graph &graph, Zone *zone)
size_t loop_number(const Block *block) const
ZoneVector< LoopInfo > loops_
void set_rpo_number(const Block *block, int32_t rpo_number)
const Block * PushFront(const Block *head, const Block *block)
bool has_loop_number(const Block *block) const
void PropagateDeferred(Graph &graph)
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE
static constexpr bool kOutputIsTraceableGraph
std::optional< BailoutReason > Run(PipelineData *data, Zone *temp_zone, const CallDescriptor *call_descriptor, Linkage *linkage, CodeTracer *code_tracer)
void Run(PipelineData *data, Zone *temp_zone, const ProfileDataFromFile *profile)
void Run(PipelineData *data, Zone *temp_zone)
void AddOutgoing(Zone *zone, const Block *block)
SparseBitVector * members
base::SmallVector< Block const *, 4 > outgoing
base::SmallVector< Block *, 4 > successors
SpecialRPOStackFrame(const Block *block, size_t index, base::SmallVector< Block *, 4 > successors)
#define DECL_TURBOSHAFT_PHASE_CONSTANTS(Name)