714 {
715 const intptr_t current_ssa_temp_index = Read<intptr_t>();
716 const intptr_t max_block_id = Read<intptr_t>();
717 const intptr_t inlining_id = Read<intptr_t>();
718 const Array& coverage_array = Read<const Array&>();
719 const PrologueInfo prologue_info(Read<intptr_t>(), Read<intptr_t>());
720
721 definitions_.EnsureLength(current_ssa_temp_index, nullptr);
722 blocks_.EnsureLength(max_block_id + 1, nullptr);
723
724
725 ZoneGrowableArray<Instruction*> instructions(16);
726 Instruction*
prev =
nullptr;
727 while (Instruction* instr = Read<Instruction*>()) {
728 instructions.Add(instr);
729 if (!instr->IsBlockEntry()) {
732 }
734 }
735 ASSERT(graph_entry_ !=
nullptr);
736 const auto& detached_defs = Read<const ZoneGrowableArray<Definition*>&>();
737
738
739
740 for (Instruction* instr : instructions) {
741 instr->ReadExtra(this);
742 }
743 for (auto* instr : detached_defs) {
744 instr->ReadExtra(this);
745 }
746
747 FlowGraph* flow_graph =
750 flow_graph->set_current_ssa_temp_index(current_ssa_temp_index);
751 flow_graph->CreateCommonConstants();
752 flow_graph->disallow_licm();
753 flow_graph->set_inlining_id(inlining_id);
754 flow_graph->set_coverage_array(coverage_array);
755
756 {
757 const intptr_t num_blocks = Read<intptr_t>();
758 if (num_blocks != 0) {
759 auto* codegen_block_order = flow_graph->CodegenBlockOrder();
760 ASSERT(codegen_block_order == &flow_graph->optimized_block_order());
761 for (intptr_t
i = 0;
i < num_blocks; ++
i) {
762 codegen_block_order->Add(ReadRef<BlockEntryInstr*>());
763 }
764 }
765 }
766
767 if (Read<bool>()) {
768 GrowableArray<intptr_t> indices = Read<GrowableArray<intptr_t>>();
769 for (intptr_t
i : indices) {
770 flow_graph->captured_parameters()->Add(
i);
771 }
772 }
773
774 return flow_graph;
775}
static float prev(float f)