Sat, 12 Oct 2013 01:29:27 +0000
Merge
1.1 --- a/src/share/vm/opto/chaitin.hpp Fri Oct 11 10:14:02 2013 -0700 1.2 +++ b/src/share/vm/opto/chaitin.hpp Sat Oct 12 01:29:27 2013 +0000 1.3 @@ -52,6 +52,7 @@ 1.4 class LRG : public ResourceObj { 1.5 friend class VMStructs; 1.6 public: 1.7 + static const uint AllStack_size = 0xFFFFF; // This mask size is used to tell that the mask of this LRG supports stack positions 1.8 enum { SPILL_REG=29999 }; // Register number of a spilled LRG 1.9 1.10 double _cost; // 2 for loads/1 for stores times block freq 1.11 @@ -80,14 +81,21 @@ 1.12 private: 1.13 uint _eff_degree; // Effective degree: Sum of neighbors _num_regs 1.14 public: 1.15 - int degree() const { assert( _degree_valid, "" ); return _eff_degree; } 1.16 + int degree() const { assert( _degree_valid , "" ); return _eff_degree; } 1.17 // Degree starts not valid and any change to the IFG neighbor 1.18 // set makes it not valid. 1.19 - void set_degree( uint degree ) { _eff_degree = degree; debug_only(_degree_valid = 1;) } 1.20 + void set_degree( uint degree ) { 1.21 + _eff_degree = degree; 1.22 + debug_only(_degree_valid = 1;) 1.23 + assert(!_mask.is_AllStack() || (_mask.is_AllStack() && lo_degree()), "_eff_degree can't be bigger than AllStack_size - _num_regs if the mask supports stack registers"); 1.24 + } 1.25 // Made a change that hammered degree 1.26 void invalid_degree() { debug_only(_degree_valid=0;) } 1.27 // Incrementally modify degree. If it was correct, it should remain correct 1.28 - void inc_degree( uint mod ) { _eff_degree += mod; } 1.29 + void inc_degree( uint mod ) { 1.30 + _eff_degree += mod; 1.31 + assert(!_mask.is_AllStack() || (_mask.is_AllStack() && lo_degree()), "_eff_degree can't be bigger than AllStack_size - _num_regs if the mask supports stack registers"); 1.32 + } 1.33 // Compute the degree between 2 live ranges 1.34 int compute_degree( LRG &l ) const; 1.35 1.36 @@ -95,9 +103,9 @@ 1.37 RegMask _mask; // Allowed registers for this LRG 1.38 uint _mask_size; // cache of _mask.Size(); 1.39 public: 1.40 - int compute_mask_size() const { return _mask.is_AllStack() ? 65535 : _mask.Size(); } 1.41 + int compute_mask_size() const { return _mask.is_AllStack() ? AllStack_size : _mask.Size(); } 1.42 void set_mask_size( int size ) { 1.43 - assert((size == 65535) || (size == (int)_mask.Size()), ""); 1.44 + assert((size == (int)AllStack_size) || (size == (int)_mask.Size()), ""); 1.45 _mask_size = size; 1.46 #ifdef ASSERT 1.47 _msize_valid=1;
2.1 --- a/src/share/vm/opto/ifg.cpp Fri Oct 11 10:14:02 2013 -0700 2.2 +++ b/src/share/vm/opto/ifg.cpp Sat Oct 12 01:29:27 2013 +0000 2.3 @@ -677,7 +677,7 @@ 2.4 } else { // Common case: size 1 bound removal 2.5 if( lrg.mask().Member(r_reg) ) { 2.6 lrg.Remove(r_reg); 2.7 - lrg.set_mask_size(lrg.mask().is_AllStack() ? 65535:old_size-1); 2.8 + lrg.set_mask_size(lrg.mask().is_AllStack() ? LRG::AllStack_size : old_size - 1); 2.9 } 2.10 } 2.11 // If 'l' goes completely dry, it must spill.