336 }
337 tty->print_cr("");
338 }
339
340 void Block::dump() const { dump(0); }
341
342 void Block::dump( const Block_Array *bbs ) const {
343 dump_head(bbs);
344 uint cnt = _nodes.size();
345 for( uint i=0; i<cnt; i++ )
346 _nodes[i]->dump();
347 tty->print("\n");
348 }
349 #endif
350
351 //=============================================================================
352 //------------------------------PhaseCFG---------------------------------------
353 PhaseCFG::PhaseCFG( Arena *a, RootNode *r, Matcher &m ) :
354 Phase(CFG),
355 _bbs(a),
356 _root(r)
357 #ifndef PRODUCT
358 , _trace_opto_pipelining(TraceOptoPipelining || C->method_has_option("TraceOptoPipelining"))
359 #endif
360 #ifdef ASSERT
361 , _raw_oops(a)
362 #endif
363 {
364 ResourceMark rm;
365 // I'll need a few machine-specific GotoNodes. Make an Ideal GotoNode,
366 // then Match it into a machine-specific Node. Then clone the machine
367 // Node on demand.
368 Node *x = new (C, 1) GotoNode(NULL);
369 x->init_req(0, x);
370 _goto = m.match_tree(x);
371 assert(_goto != NULL, "");
372 _goto->set_req(0,_goto);
373
374 // Build the CFG in Reverse Post Order
375 _num_blocks = build_cfg();
376 _broot = _bbs[_root->_idx];
|
336 }
337 tty->print_cr("");
338 }
339
340 void Block::dump() const { dump(0); }
341
342 void Block::dump( const Block_Array *bbs ) const {
343 dump_head(bbs);
344 uint cnt = _nodes.size();
345 for( uint i=0; i<cnt; i++ )
346 _nodes[i]->dump();
347 tty->print("\n");
348 }
349 #endif
350
351 //=============================================================================
352 //------------------------------PhaseCFG---------------------------------------
353 PhaseCFG::PhaseCFG( Arena *a, RootNode *r, Matcher &m ) :
354 Phase(CFG),
355 _bbs(a),
356 _root(r),
357 _node_latency(NULL)
358 #ifndef PRODUCT
359 , _trace_opto_pipelining(TraceOptoPipelining || C->method_has_option("TraceOptoPipelining"))
360 #endif
361 #ifdef ASSERT
362 , _raw_oops(a)
363 #endif
364 {
365 ResourceMark rm;
366 // I'll need a few machine-specific GotoNodes. Make an Ideal GotoNode,
367 // then Match it into a machine-specific Node. Then clone the machine
368 // Node on demand.
369 Node *x = new (C, 1) GotoNode(NULL);
370 x->init_req(0, x);
371 _goto = m.match_tree(x);
372 assert(_goto != NULL, "");
373 _goto->set_req(0,_goto);
374
375 // Build the CFG in Reverse Post Order
376 _num_blocks = build_cfg();
377 _broot = _bbs[_root->_idx];
|