< prev index next >

src/share/vm/opto/chaitin.hpp

Print this page




 603         uint new_pressure = current_pressure() + fatproj_mask.Size();
 604         if (new_pressure > final_pressure()) {
 605           _final_pressure = new_pressure;
 606         }
 607 
 608         // if we were at a low pressure and now and the fat proj is at high pressure, record the fat proj location
 609         // as coming from a low to high (to low again)
 610         if (current_pressure() <= high_pressure_limit() && new_pressure > high_pressure_limit()) {
 611           _high_pressure_index = fatproj_location;
 612         }
 613       }
 614 
 615       Pressure(uint high_pressure_index, uint high_pressure_limit)
 616         : _current_pressure(0)
 617         , _high_pressure_index(high_pressure_index)
 618         , _final_pressure(0)
 619         , _high_pressure_limit(high_pressure_limit)
 620         , _start_pressure(0) {}
 621   };
 622 
 623   void check_for_high_pressure_transition_at_fatproj(uint& block_reg_pressure, uint location, LRG& lrg, Pressure& pressure, const int op_regtype);
 624   void add_input_to_liveout(Block* b, Node* n, IndexSet* liveout, double cost, Pressure& int_pressure, Pressure& float_pressure);
 625   void compute_initial_block_pressure(Block* b, IndexSet* liveout, Pressure& int_pressure, Pressure& float_pressure, double cost);
 626   bool remove_node_if_not_used(Block* b, uint location, Node* n, uint lid, IndexSet* liveout);
 627   void assign_high_score_to_immediate_copies(Block* b, Node* n, LRG& lrg, uint next_inst, uint last_inst);
 628   void remove_interference_from_copy(Block* b, uint location, uint lid_copy, IndexSet* liveout, double cost, Pressure& int_pressure, Pressure& float_pressure);
 629   void remove_bound_register_from_interfering_live_ranges(LRG& lrg, IndexSet* liveout, uint& must_spill);
 630   void check_for_high_pressure_block(Pressure& pressure);
 631   void adjust_high_pressure_index(Block* b, uint& hrp_index, Pressure& pressure);
 632 
 633   // Build the interference graph using physical registers when available.
 634   // That is, if 2 live ranges are simultaneously alive but in their
 635   // acceptable register sets do not overlap, then they do not interfere.
 636   uint build_ifg_physical( ResourceArea *a );
 637 
 638 public:
 639   // Gather LiveRanGe information, including register masks and base pointer/
 640   // derived pointer relationships.
 641   void gather_lrg_masks( bool mod_cisc_masks );
 642 
 643   // user visible pressure variables for scheduling




 603         uint new_pressure = current_pressure() + fatproj_mask.Size();
 604         if (new_pressure > final_pressure()) {
 605           _final_pressure = new_pressure;
 606         }
 607 
 608         // if we were at a low pressure and now and the fat proj is at high pressure, record the fat proj location
 609         // as coming from a low to high (to low again)
 610         if (current_pressure() <= high_pressure_limit() && new_pressure > high_pressure_limit()) {
 611           _high_pressure_index = fatproj_location;
 612         }
 613       }
 614 
 615       Pressure(uint high_pressure_index, uint high_pressure_limit)
 616         : _current_pressure(0)
 617         , _high_pressure_index(high_pressure_index)
 618         , _final_pressure(0)
 619         , _high_pressure_limit(high_pressure_limit)
 620         , _start_pressure(0) {}
 621   };
 622 
 623   void check_for_high_pressure_transition_at_fatproj(uint& block_reg_pressure, uint location, LRG& lrg, Pressure& pressure, const Opcodes op_regtype);
 624   void add_input_to_liveout(Block* b, Node* n, IndexSet* liveout, double cost, Pressure& int_pressure, Pressure& float_pressure);
 625   void compute_initial_block_pressure(Block* b, IndexSet* liveout, Pressure& int_pressure, Pressure& float_pressure, double cost);
 626   bool remove_node_if_not_used(Block* b, uint location, Node* n, uint lid, IndexSet* liveout);
 627   void assign_high_score_to_immediate_copies(Block* b, Node* n, LRG& lrg, uint next_inst, uint last_inst);
 628   void remove_interference_from_copy(Block* b, uint location, uint lid_copy, IndexSet* liveout, double cost, Pressure& int_pressure, Pressure& float_pressure);
 629   void remove_bound_register_from_interfering_live_ranges(LRG& lrg, IndexSet* liveout, uint& must_spill);
 630   void check_for_high_pressure_block(Pressure& pressure);
 631   void adjust_high_pressure_index(Block* b, uint& hrp_index, Pressure& pressure);
 632 
 633   // Build the interference graph using physical registers when available.
 634   // That is, if 2 live ranges are simultaneously alive but in their
 635   // acceptable register sets do not overlap, then they do not interfere.
 636   uint build_ifg_physical( ResourceArea *a );
 637 
 638 public:
 639   // Gather LiveRanGe information, including register masks and base pointer/
 640   // derived pointer relationships.
 641   void gather_lrg_masks( bool mod_cisc_masks );
 642 
 643   // user visible pressure variables for scheduling


< prev index next >