hotspot/src/share/vm/opto/domgraph.cpp
changeset 24425 53764d2358f9
parent 22234 da823d78ad65
child 32202 7e7ad8b06f5b
equal deleted inserted replaced
24336:1507192c67e6 24425:53764d2358f9
   395   int i;
   395   int i;
   396   for( i= C->unique()-1; i>=0; i-- )
   396   for( i= C->unique()-1; i>=0; i-- )
   397     ntarjan[i]._control = NULL;
   397     ntarjan[i]._control = NULL;
   398 
   398 
   399   // Store the DFS order for the main loop
   399   // Store the DFS order for the main loop
       
   400   const uint fill_value = max_juint;
   400   uint *dfsorder = NEW_RESOURCE_ARRAY(uint,C->unique()+1);
   401   uint *dfsorder = NEW_RESOURCE_ARRAY(uint,C->unique()+1);
   401   memset(dfsorder, max_uint, (C->unique()+1) * sizeof(uint));
   402   memset(dfsorder, fill_value, (C->unique()+1) * sizeof(uint));
   402 
   403 
   403   // Tarjan's algorithm, almost verbatim:
   404   // Tarjan's algorithm, almost verbatim:
   404   // Step 1:
   405   // Step 1:
   405   VectorSet visited(Thread::current()->resource_area());
   406   VectorSet visited(Thread::current()->resource_area());
   406   int dfsnum = NTarjan::DFS( ntarjan, visited, this, dfsorder);
   407   int dfsnum = NTarjan::DFS( ntarjan, visited, this, dfsorder);
   417     Node *whead = w->_control;
   418     Node *whead = w->_control;
   418     for( uint j=0; j < whead->req(); j++ ) { // For each predecessor
   419     for( uint j=0; j < whead->req(); j++ ) { // For each predecessor
   419       if( whead->in(j) == NULL || !whead->in(j)->is_CFG() )
   420       if( whead->in(j) == NULL || !whead->in(j)->is_CFG() )
   420         continue;                            // Only process control nodes
   421         continue;                            // Only process control nodes
   421       uint b = dfsorder[whead->in(j)->_idx];
   422       uint b = dfsorder[whead->in(j)->_idx];
   422       if(b == max_uint) continue;
   423       if(b == fill_value) continue;
   423       NTarjan *vx = &ntarjan[b];
   424       NTarjan *vx = &ntarjan[b];
   424       NTarjan *u = vx->EVAL();
   425       NTarjan *u = vx->EVAL();
   425       if( u->_semi < w->_semi )
   426       if( u->_semi < w->_semi )
   426         w->_semi = u->_semi;
   427         w->_semi = u->_semi;
   427     }
   428     }