hotspot/src/share/vm/opto/block.cpp
changeset 13895 f6dfe4123709
parent 11191 d54ab5dcba83
child 13963 e5b53c306fb5
equal deleted inserted replaced
13894:068a8efe7203 13895:f6dfe4123709
   376 {
   376 {
   377   ResourceMark rm;
   377   ResourceMark rm;
   378   // I'll need a few machine-specific GotoNodes.  Make an Ideal GotoNode,
   378   // I'll need a few machine-specific GotoNodes.  Make an Ideal GotoNode,
   379   // then Match it into a machine-specific Node.  Then clone the machine
   379   // then Match it into a machine-specific Node.  Then clone the machine
   380   // Node on demand.
   380   // Node on demand.
   381   Node *x = new (C, 1) GotoNode(NULL);
   381   Node *x = new (C) GotoNode(NULL);
   382   x->init_req(0, x);
   382   x->init_req(0, x);
   383   _goto = m.match_tree(x);
   383   _goto = m.match_tree(x);
   384   assert(_goto != NULL, "");
   384   assert(_goto != NULL, "");
   385   _goto->set_req(0,_goto);
   385   _goto->set_req(0,_goto);
   386 
   386 
   430         p = p->in(0);               // Move control forward
   430         p = p->in(0);               // Move control forward
   431       } while( !p->is_block_proj() &&
   431       } while( !p->is_block_proj() &&
   432                !p->is_block_start() );
   432                !p->is_block_start() );
   433       // Make the block begin with one of Region or StartNode.
   433       // Make the block begin with one of Region or StartNode.
   434       if( !p->is_block_start() ) {
   434       if( !p->is_block_start() ) {
   435         RegionNode *r = new (C, 2) RegionNode( 2 );
   435         RegionNode *r = new (C) RegionNode( 2 );
   436         r->init_req(1, p);         // Insert RegionNode in the way
   436         r->init_req(1, p);         // Insert RegionNode in the way
   437         proj->set_req(0, r);        // Insert RegionNode in the way
   437         proj->set_req(0, r);        // Insert RegionNode in the way
   438         p = r;
   438         p = r;
   439       }
   439       }
   440       // 'p' now points to the start of this basic block
   440       // 'p' now points to the start of this basic block
   506   // surrounding blocks.
   506   // surrounding blocks.
   507   float freq = in->_freq * in->succ_prob(succ_no);
   507   float freq = in->_freq * in->succ_prob(succ_no);
   508   // get ProjNode corresponding to the succ_no'th successor of the in block
   508   // get ProjNode corresponding to the succ_no'th successor of the in block
   509   ProjNode* proj = in->_nodes[in->_nodes.size() - in->_num_succs + succ_no]->as_Proj();
   509   ProjNode* proj = in->_nodes[in->_nodes.size() - in->_num_succs + succ_no]->as_Proj();
   510   // create region for basic block
   510   // create region for basic block
   511   RegionNode* region = new (C, 2) RegionNode(2);
   511   RegionNode* region = new (C) RegionNode(2);
   512   region->init_req(1, proj);
   512   region->init_req(1, proj);
   513   // setup corresponding basic block
   513   // setup corresponding basic block
   514   Block* block = new (_bbs._arena) Block(_bbs._arena, region);
   514   Block* block = new (_bbs._arena) Block(_bbs._arena, region);
   515   _bbs.map(region->_idx, block);
   515   _bbs.map(region->_idx, block);
   516   C->regalloc()->set_bad(region->_idx);
   516   C->regalloc()->set_bad(region->_idx);