458 int _num_loops; // total number of loops |
458 int _num_loops; // total number of loops |
459 bool _iterative_dominators;// method requires iterative computation of dominatiors |
459 bool _iterative_dominators;// method requires iterative computation of dominatiors |
460 |
460 |
461 BlockList* _linear_scan_order; // the resulting list of blocks in correct order |
461 BlockList* _linear_scan_order; // the resulting list of blocks in correct order |
462 |
462 |
463 BitMap _visited_blocks; // used for recursive processing of blocks |
463 ResourceBitMap _visited_blocks; // used for recursive processing of blocks |
464 BitMap _active_blocks; // used for recursive processing of blocks |
464 ResourceBitMap _active_blocks; // used for recursive processing of blocks |
465 BitMap _dominator_blocks; // temproary BitMap used for computation of dominator |
465 ResourceBitMap _dominator_blocks; // temproary BitMap used for computation of dominator |
466 intArray _forward_branches; // number of incoming forward branches for each block |
466 intArray _forward_branches; // number of incoming forward branches for each block |
467 BlockList _loop_end_blocks; // list of all loop end blocks collected during count_edges |
467 BlockList _loop_end_blocks; // list of all loop end blocks collected during count_edges |
468 BitMap2D _loop_map; // two-dimensional bit set: a bit is set if a block is contained in a loop |
468 BitMap2D _loop_map; // two-dimensional bit set: a bit is set if a block is contained in a loop |
469 BlockList _work_list; // temporary list (used in mark_loops and compute_order) |
469 BlockList _work_list; // temporary list (used in mark_loops and compute_order) |
470 BlockList _loop_headers; |
470 BlockList _loop_headers; |
471 |
471 |
472 Compilation* _compilation; |
472 Compilation* _compilation; |
473 |
473 |
474 // accessors for _visited_blocks and _active_blocks |
474 // accessors for _visited_blocks and _active_blocks |
475 void init_visited() { _active_blocks.clear(); _visited_blocks.clear(); } |
475 void init_visited() { _active_blocks.clear(); _visited_blocks.clear(); } |
533 _dominator_blocks(_max_block_id), |
533 _dominator_blocks(_max_block_id), |
534 _forward_branches(_max_block_id, _max_block_id, 0), |
534 _forward_branches(_max_block_id, _max_block_id, 0), |
535 _loop_end_blocks(8), |
535 _loop_end_blocks(8), |
536 _work_list(8), |
536 _work_list(8), |
537 _linear_scan_order(NULL), // initialized later with correct size |
537 _linear_scan_order(NULL), // initialized later with correct size |
538 _loop_map(0, 0), // initialized later with correct size |
538 _loop_map(0), // initialized later with correct size |
539 _compilation(c) |
539 _compilation(c) |
540 { |
540 { |
541 TRACE_LINEAR_SCAN(2, tty->print_cr("***** computing linear-scan block order")); |
541 TRACE_LINEAR_SCAN(2, tty->print_cr("***** computing linear-scan block order")); |
542 |
542 |
543 init_visited(); |
543 init_visited(); |