330 #endif 331 }; 332 333 334 //------------------------------PhaseCFG--------------------------------------- 335 // Build an array of Basic Block pointers, one per Node. 336 class PhaseCFG : public Phase { 337 private: 338 // Build a proper looking cfg. Return count of basic blocks 339 uint build_cfg(); 340 341 // Perform DFS search. 342 // Setup 'vertex' as DFS to vertex mapping. 343 // Setup 'semi' as vertex to DFS mapping. 344 // Set 'parent' to DFS parent. 345 uint DFS( Tarjan *tarjan ); 346 347 // Helper function to insert a node into a block 348 void schedule_node_into_block( Node *n, Block *b ); 349 350 // Set the basic block for pinned Nodes 351 void schedule_pinned_nodes( VectorSet &visited ); 352 353 // I'll need a few machine-specific GotoNodes. Clone from this one. 354 MachNode *_goto; 355 356 Block* insert_anti_dependences(Block* LCA, Node* load, bool verify = false); 357 void verify_anti_dependences(Block* LCA, Node* load) { 358 assert(LCA == _bbs[load->_idx], "should already be scheduled"); 359 insert_anti_dependences(LCA, load, true); 360 } 361 362 public: 363 PhaseCFG( Arena *a, RootNode *r, Matcher &m ); 364 365 uint _num_blocks; // Count of basic blocks 366 Block_List _blocks; // List of basic blocks 367 RootNode *_root; // Root of whole program 368 Block_Array _bbs; // Map Nodes to owning Basic Block 369 Block *_broot; // Basic block of root | 330 #endif 331 }; 332 333 334 //------------------------------PhaseCFG--------------------------------------- 335 // Build an array of Basic Block pointers, one per Node. 336 class PhaseCFG : public Phase { 337 private: 338 // Build a proper looking cfg. Return count of basic blocks 339 uint build_cfg(); 340 341 // Perform DFS search. 342 // Setup 'vertex' as DFS to vertex mapping. 343 // Setup 'semi' as vertex to DFS mapping. 344 // Set 'parent' to DFS parent. 345 uint DFS( Tarjan *tarjan ); 346 347 // Helper function to insert a node into a block 348 void schedule_node_into_block( Node *n, Block *b ); 349 350 void PhaseCFG::replace_block_proj_ctrl( Node *n ); 351 352 // Set the basic block for pinned Nodes 353 void schedule_pinned_nodes( VectorSet &visited ); 354 355 // I'll need a few machine-specific GotoNodes. Clone from this one. 356 MachNode *_goto; 357 358 Block* insert_anti_dependences(Block* LCA, Node* load, bool verify = false); 359 void verify_anti_dependences(Block* LCA, Node* load) { 360 assert(LCA == _bbs[load->_idx], "should already be scheduled"); 361 insert_anti_dependences(LCA, load, true); 362 } 363 364 public: 365 PhaseCFG( Arena *a, RootNode *r, Matcher &m ); 366 367 uint _num_blocks; // Count of basic blocks 368 Block_List _blocks; // List of basic blocks 369 RootNode *_root; // Root of whole program 370 Block_Array _bbs; // Map Nodes to owning Basic Block 371 Block *_broot; // Basic block of root |