< prev index next >

src/share/vm/opto/block.hpp

Print this page
rev 11496 : 8157306: Random infrequent null pointer exceptions in javac
Reviewed-by: kvn


 464 
 465   // Perform a Depth First Search (DFS).
 466   // Setup 'vertex' as DFS to vertex mapping.
 467   // Setup 'semi' as vertex to DFS mapping.
 468   // Set 'parent' to DFS parent.
 469   uint do_DFS(Tarjan* tarjan, uint rpo_counter);
 470 
 471   // Helper function to insert a node into a block
 472   void schedule_node_into_block( Node *n, Block *b );
 473 
 474   void replace_block_proj_ctrl( Node *n );
 475 
 476   // Set the basic block for pinned Nodes
 477   void schedule_pinned_nodes( VectorSet &visited );
 478 
 479   // I'll need a few machine-specific GotoNodes.  Clone from this one.
 480   // Used when building the CFG and creating end nodes for blocks.
 481   MachNode* _goto;
 482 
 483   Block* insert_anti_dependences(Block* LCA, Node* load, bool verify = false);
 484   void verify_anti_dependences(Block* LCA, Node* load) {
 485     assert(LCA == get_block_for_node(load), "should already be scheduled");
 486     insert_anti_dependences(LCA, load, true);
 487   }
 488 
 489   bool move_to_next(Block* bx, uint b_index);
 490   void move_to_end(Block* bx, uint b_index);
 491 
 492   void insert_goto_at(uint block_no, uint succ_no);
 493 
 494   // Check for NeverBranch at block end.  This needs to become a GOTO to the
 495   // true target.  NeverBranch are treated as a conditional branch that always
 496   // goes the same direction for most of the optimizer and are used to give a
 497   // fake exit path to infinite loops.  At this late stage they need to turn
 498   // into Goto's so that when you enter the infinite loop you indeed hang.
 499   void convert_NeverBranch_to_Goto(Block *b);
 500 
 501   CFGLoop* create_loop_tree();
 502   bool is_dominator(Node* dom_node, Node* node);
 503 
 504   #ifndef PRODUCT
 505   bool _trace_opto_pipelining;  // tracing flag
 506   #endif




 464 
 465   // Perform a Depth First Search (DFS).
 466   // Setup 'vertex' as DFS to vertex mapping.
 467   // Setup 'semi' as vertex to DFS mapping.
 468   // Set 'parent' to DFS parent.
 469   uint do_DFS(Tarjan* tarjan, uint rpo_counter);
 470 
 471   // Helper function to insert a node into a block
 472   void schedule_node_into_block( Node *n, Block *b );
 473 
 474   void replace_block_proj_ctrl( Node *n );
 475 
 476   // Set the basic block for pinned Nodes
 477   void schedule_pinned_nodes( VectorSet &visited );
 478 
 479   // I'll need a few machine-specific GotoNodes.  Clone from this one.
 480   // Used when building the CFG and creating end nodes for blocks.
 481   MachNode* _goto;
 482 
 483   Block* insert_anti_dependences(Block* LCA, Node* load, bool verify = false);
 484   void verify_anti_dependences(Block* LCA, Node* load) const {
 485     assert(LCA == get_block_for_node(load), "should already be scheduled");
 486     const_cast<PhaseCFG*>(this)->insert_anti_dependences(LCA, load, true);
 487   }
 488 
 489   bool move_to_next(Block* bx, uint b_index);
 490   void move_to_end(Block* bx, uint b_index);
 491 
 492   void insert_goto_at(uint block_no, uint succ_no);
 493 
 494   // Check for NeverBranch at block end.  This needs to become a GOTO to the
 495   // true target.  NeverBranch are treated as a conditional branch that always
 496   // goes the same direction for most of the optimizer and are used to give a
 497   // fake exit path to infinite loops.  At this late stage they need to turn
 498   // into Goto's so that when you enter the infinite loop you indeed hang.
 499   void convert_NeverBranch_to_Goto(Block *b);
 500 
 501   CFGLoop* create_loop_tree();
 502   bool is_dominator(Node* dom_node, Node* node);
 503 
 504   #ifndef PRODUCT
 505   bool _trace_opto_pipelining;  // tracing flag
 506   #endif


< prev index next >