124 void compute_set_mask_size() { set_mask_size(compute_mask_size()); } 125 int mask_size() const { assert( _msize_valid, "mask size not valid" ); 126 return _mask_size; } 127 // Get the last mask size computed, even if it does not match the 128 // count of bits in the current mask. 129 int get_invalid_mask_size() const { return _mask_size; } 130 const RegMask &mask() const { return _mask; } 131 void set_mask( const RegMask &rm ) { _mask = rm; debug_only(_msize_valid=0;)} 132 void AND( const RegMask &rm ) { _mask.AND(rm); debug_only(_msize_valid=0;)} 133 void SUBTRACT( const RegMask &rm ) { _mask.SUBTRACT(rm); debug_only(_msize_valid=0;)} 134 void Clear() { _mask.Clear() ; debug_only(_msize_valid=1); _mask_size = 0; } 135 void Set_All() { _mask.Set_All(); debug_only(_msize_valid=1); _mask_size = RegMask::CHUNK_SIZE; } 136 137 void Insert( OptoReg::Name reg ) { _mask.Insert(reg); debug_only(_msize_valid=0;) } 138 void Remove( OptoReg::Name reg ) { _mask.Remove(reg); debug_only(_msize_valid=0;) } 139 void clear_to_pairs() { _mask.clear_to_pairs(); debug_only(_msize_valid=0;) } 140 void clear_to_sets() { _mask.clear_to_sets(_num_regs); debug_only(_msize_valid=0;) } 141 142 // Number of registers this live range uses when it colors 143 private: 144 uint8_t _num_regs; // 2 for Longs and Doubles, 1 for all else 145 // except _num_regs is kill count for fat_proj 146 public: 147 int num_regs() const { return _num_regs; } 148 void set_num_regs( int reg ) { assert( _num_regs == reg || !_num_regs, "" ); _num_regs = reg; } 149 150 private: 151 // Number of physical registers this live range uses when it colors 152 // Architecture and register-set dependent 153 uint8_t _reg_pressure; 154 public: 155 void set_reg_pressure(int i) { _reg_pressure = i; } 156 int reg_pressure() const { return _reg_pressure; } 157 158 // How much 'wiggle room' does this live range have? 159 // How many color choices can it make (scaled by _num_regs)? 160 int degrees_of_freedom() const { return mask_size() - _num_regs; } 161 // Bound LRGs have ZERO degrees of freedom. We also count 162 // must_spill as bound. 163 bool is_bound () const { return _is_bound; } 164 // Negative degrees-of-freedom; even with no neighbors this 165 // live range must spill. 166 bool not_free() const { return degrees_of_freedom() < 0; } 167 // Is this live range of "low-degree"? Trivially colorable? 168 bool lo_degree () const { return degree() <= degrees_of_freedom(); } 169 // Is this live range just barely "low-degree"? Trivially colorable? 170 bool just_lo_degree () const { return degree() == degrees_of_freedom(); } 171 172 uint _is_oop:1, // Live-range holds an oop 173 _is_float:1, // True if in float registers | 124 void compute_set_mask_size() { set_mask_size(compute_mask_size()); } 125 int mask_size() const { assert( _msize_valid, "mask size not valid" ); 126 return _mask_size; } 127 // Get the last mask size computed, even if it does not match the 128 // count of bits in the current mask. 129 int get_invalid_mask_size() const { return _mask_size; } 130 const RegMask &mask() const { return _mask; } 131 void set_mask( const RegMask &rm ) { _mask = rm; debug_only(_msize_valid=0;)} 132 void AND( const RegMask &rm ) { _mask.AND(rm); debug_only(_msize_valid=0;)} 133 void SUBTRACT( const RegMask &rm ) { _mask.SUBTRACT(rm); debug_only(_msize_valid=0;)} 134 void Clear() { _mask.Clear() ; debug_only(_msize_valid=1); _mask_size = 0; } 135 void Set_All() { _mask.Set_All(); debug_only(_msize_valid=1); _mask_size = RegMask::CHUNK_SIZE; } 136 137 void Insert( OptoReg::Name reg ) { _mask.Insert(reg); debug_only(_msize_valid=0;) } 138 void Remove( OptoReg::Name reg ) { _mask.Remove(reg); debug_only(_msize_valid=0;) } 139 void clear_to_pairs() { _mask.clear_to_pairs(); debug_only(_msize_valid=0;) } 140 void clear_to_sets() { _mask.clear_to_sets(_num_regs); debug_only(_msize_valid=0;) } 141 142 // Number of registers this live range uses when it colors 143 private: 144 uint16_t _num_regs; // 2 for Longs and Doubles, 1 for all else 145 // except _num_regs is kill count for fat_proj 146 public: 147 int num_regs() const { return _num_regs; } 148 void set_num_regs( int reg ) { assert( _num_regs == reg || !_num_regs, "" ); _num_regs = reg; } 149 150 private: 151 // Number of physical registers this live range uses when it colors 152 // Architecture and register-set dependent 153 uint16_t _reg_pressure; 154 public: 155 void set_reg_pressure(int i) { _reg_pressure = i; } 156 int reg_pressure() const { return _reg_pressure; } 157 158 // How much 'wiggle room' does this live range have? 159 // How many color choices can it make (scaled by _num_regs)? 160 int degrees_of_freedom() const { return mask_size() - _num_regs; } 161 // Bound LRGs have ZERO degrees of freedom. We also count 162 // must_spill as bound. 163 bool is_bound () const { return _is_bound; } 164 // Negative degrees-of-freedom; even with no neighbors this 165 // live range must spill. 166 bool not_free() const { return degrees_of_freedom() < 0; } 167 // Is this live range of "low-degree"? Trivially colorable? 168 bool lo_degree () const { return degree() <= degrees_of_freedom(); } 169 // Is this live range just barely "low-degree"? Trivially colorable? 170 bool just_lo_degree () const { return degree() == degrees_of_freedom(); } 171 172 uint _is_oop:1, // Live-range holds an oop 173 _is_float:1, // True if in float registers |