5#ifndef RUNTIME_VM_COMPILER_FRONTEND_FLOW_GRAPH_BUILDER_H_
6#define RUNTIME_VM_COMPILER_FRONTEND_FLOW_GRAPH_BUILDER_H_
8#if defined(DART_PRECOMPILED_RUNTIME)
9#error "AOT runtime should not use compiler sources (including header files)"
27 : caller_graph_(caller_graph), call_(
call), exits_(4) {}
55 BlockEntryInstr* ExitBlockAt(intptr_t
i)
const {
56 ASSERT(exits_[
i].exit_block !=
nullptr);
57 return exits_[
i].exit_block;
60 Instruction* LastInstructionAt(intptr_t
i)
const {
64 Value* ValueAt(intptr_t
i)
const {
return ReturnAt(
i)->
value(); }
66 DartReturnInstr* ReturnAt(intptr_t
i)
const {
return exits_[
i].exit_return; }
68 static int LowestBlockIdFirst(
const Data*
a,
const Data*
b);
70 void RemoveUnreachableExits(FlowGraph* callee_graph);
72 Definition* JoinReturns(BlockEntryInstr** exit_block,
73 Instruction** last_instruction,
76 Zone* zone()
const {
return caller_graph_->
zone(); }
78 FlowGraph* caller_graph_;
80 GrowableArray<Data> exits_;
InlineExitCollector(FlowGraph *caller_graph, Definition *call)
void Union(const InlineExitCollector *other)
void PrepareGraphs(FlowGraph *callee_graph)
void AddExit(DartReturnInstr *exit)
void ReplaceCall(BlockEntryInstr *callee_entry)
Instruction * previous() const
uword FindDoubleConstant(double value)
bool SimpleInstanceOfType(const AbstractType &type)
struct PathData * Data(SkPath *path)