584 #ifndef PRODUCT 585 BytecodeParseHistogram *parse_histogram_obj = new (C->env()->arena()) BytecodeParseHistogram(this, C); 586 set_parse_histogram( parse_histogram_obj ); 587 #endif 588 589 // Parse all the basic blocks. 590 do_all_blocks(); 591 592 C->set_default_node_notes(caller_nn); 593 594 // Check for bailouts during conversion to graph 595 if (failing()) { 596 if (log) log->done("parse"); 597 return; 598 } 599 600 // Fix up all exiting control flow. 601 set_map(entry_map); 602 do_exits(); 603 604 if (log) log->done("parse nodes='%d' memory='%d'", 605 C->unique(), C->node_arena()->used()); 606 } 607 608 //---------------------------do_all_blocks------------------------------------- 609 void Parse::do_all_blocks() { 610 bool has_irreducible = flow()->has_irreducible_entry(); 611 612 // Walk over all blocks in Reverse Post-Order. 613 while (true) { 614 bool progress = false; 615 for (int rpo = 0; rpo < block_count(); rpo++) { 616 Block* block = rpo_at(rpo); 617 618 if (block->is_parsed()) continue; 619 620 if (!block->is_merged()) { 621 // Dead block, no state reaches this block 622 continue; 623 } 624 625 // Prepare to parse this block. | 584 #ifndef PRODUCT 585 BytecodeParseHistogram *parse_histogram_obj = new (C->env()->arena()) BytecodeParseHistogram(this, C); 586 set_parse_histogram( parse_histogram_obj ); 587 #endif 588 589 // Parse all the basic blocks. 590 do_all_blocks(); 591 592 C->set_default_node_notes(caller_nn); 593 594 // Check for bailouts during conversion to graph 595 if (failing()) { 596 if (log) log->done("parse"); 597 return; 598 } 599 600 // Fix up all exiting control flow. 601 set_map(entry_map); 602 do_exits(); 603 604 if (log) log->done("parse nodes='%d' live='%d' memory='%d'", 605 C->unique(), C->live_nodes(), C->node_arena()->used()); 606 } 607 608 //---------------------------do_all_blocks------------------------------------- 609 void Parse::do_all_blocks() { 610 bool has_irreducible = flow()->has_irreducible_entry(); 611 612 // Walk over all blocks in Reverse Post-Order. 613 while (true) { 614 bool progress = false; 615 for (int rpo = 0; rpo < block_count(); rpo++) { 616 Block* block = rpo_at(rpo); 617 618 if (block->is_parsed()) continue; 619 620 if (!block->is_merged()) { 621 // Dead block, no state reaches this block 622 continue; 623 } 624 625 // Prepare to parse this block. |