Duplicate :
|
|
Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
Several bug fixes were recommended from Cliff Click of Azul Systems The fix for this bug containes fixes only for the next 2 problems described by Cliff. It does not fix the problem described in Comments section. That problem is addressed in 6472714. ====================================================================================== Subject: Bug dejeur Date: Mon, 02 Feb 2004 08:20:47 -0800 From: Cliff Click <###@###.###> Organization: Azul Systems To: David Cox <###@###.###> Fix a OBOB in the allocator. Bug is having a derived live range merging at a Phi; this requires a bases be merged at the same block, sometimes requiring a base-phi be inserted. If the block has no instructions between the last Phi and the block-ending branch, you'll miss out that a base-phi is needed. Requires a Sparc V9-style compare-n-branch in 1 instruction style thing, plus of course a merging derived live range. ==== //java/working/main-dev/spin1/java/hotspot/src/share/vm/opto/chaitin.cpp#2 (text) ==== @@ -1411,7 +1411,7 @@ // Search the current block for an existing base-Phi Block *b = _cfg._bbs[derived->_idx]; - for( i = 1; i < b->end_idx(); i++ ) {// Search for matching Phi + for( i = 1; i <= b->end_idx(); i++ ) {// Search for matching Phi Node *phi = b->_nodes[i]; if( !phi->is_Phi() ) { // Found end of Phis with no match? b->_nodes.insert( i, base ); // Must insert created Phi here as base Enjoy! Cliff =============================================================================== Subject: HotSpot bug dejeur Date: Mon, 02 Feb 2004 08:13:41 -0800 From: Cliff Click <###@###.###> Organization: Azul Systems To: David Cox <###@###.###> I fixed a bug with trying to split-thru-phi a c-move where the guard value is loop-INvariant and the data values are loop-Varying. I added this code: ==== //java/main-dev/java/hotspot/src/share/vm/opto/loopopts.cpp#14 (text) ==== @@ -690,6 +690,8 @@ if( get_ctrl(iff->in(2)) == n_ctrl || get_ctrl(iff->in(3)) == n_ctrl ) return; // Inputs not yet split-up + if( get_loop(n_ctrl) != get_loop(get_ctrl(iff)) ) + return; // Loop-invar test gates loop-varying CMOVE? } // Do not do 'split-if' if some paths are dead. First do dead code Enjoy! Cliff
|