comparison src/share/vm/opto/output.cpp @ 707:4ec1257180ec

6826960: C2 Sparc: assert(bb->_nodes(_bb_end)->is_Proj(),"skipping projections after expected call") Summary: Add the check when a Halt node is placed in a separate block. Reviewed-by: twisti
author kvn
date Tue, 07 Apr 2009 10:05:04 -0700
parents 98cb887364d3
children bd02caa94611 ea3f9723b5cf
comparison
equal deleted inserted replaced
706:819880572f09 707:4ec1257180ec
2254 // in the block), because they have delay slots we can fill. Calls all 2254 // in the block), because they have delay slots we can fill. Calls all
2255 // have their delay slots filled in the template expansions, so we don't 2255 // have their delay slots filled in the template expansions, so we don't
2256 // bother scheduling them. 2256 // bother scheduling them.
2257 Node *last = bb->_nodes[_bb_end]; 2257 Node *last = bb->_nodes[_bb_end];
2258 if( last->is_Catch() || 2258 if( last->is_Catch() ||
2259 (last->is_Mach() && last->as_Mach()->ideal_Opcode() == Op_Halt) ) { 2259 // Exclude unreachable path case when Halt node is in a separate block.
2260 (_bb_end > 1 && last->is_Mach() && last->as_Mach()->ideal_Opcode() == Op_Halt) ) {
2260 // There must be a prior call. Skip it. 2261 // There must be a prior call. Skip it.
2261 while( !bb->_nodes[--_bb_end]->is_Call() ) { 2262 while( !bb->_nodes[--_bb_end]->is_Call() ) {
2262 assert( bb->_nodes[_bb_end]->is_Proj(), "skipping projections after expected call" ); 2263 assert( bb->_nodes[_bb_end]->is_Proj(), "skipping projections after expected call" );
2263 } 2264 }
2264 } else if( last->is_MachNullCheck() ) { 2265 } else if( last->is_MachNullCheck() ) {