< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page




1276   // Split Node 'n' through merge point if there is enough win.
1277   Node *split_thru_phi( Node *n, Node *region, int policy );
1278   // Found an If getting its condition-code input from a Phi in the
1279   // same block.  Split thru the Region.
1280   void do_split_if( Node *iff );
1281 
1282   // Conversion of fill/copy patterns into intrisic versions
1283   bool do_intrinsify_fill();
1284   bool intrinsify_fill(IdealLoopTree* lpt);
1285   bool match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
1286                        Node*& shift, Node*& offset);
1287 
1288 private:
1289   // Return a type based on condition control flow
1290   const TypeInt* filtered_type( Node *n, Node* n_ctrl);
1291   const TypeInt* filtered_type( Node *n ) { return filtered_type(n, NULL); }
1292  // Helpers for filtered type
1293   const TypeInt* filtered_type_from_dominators( Node* val, Node *val_ctrl);
1294 
1295   // Helper functions
1296   Node *spinup( Node *iff, Node *new_false, Node *new_true, Node *region, Node *phi, small_cache *cache );
1297   Node *find_use_block( Node *use, Node *def, Node *old_false, Node *new_false, Node *old_true, Node *new_true );
1298   void handle_use( Node *use, Node *def, small_cache *cache, Node *region_dom, Node *new_false, Node *new_true, Node *old_false, Node *old_true );

1299   bool split_up( Node *n, Node *blk1, Node *blk2 );
1300   void sink_use( Node *use, Node *post_loop );
1301   Node *place_near_use( Node *useblock ) const;
1302   Node* try_move_store_before_loop(Node* n, Node *n_ctrl);
1303   void try_move_store_after_loop(Node* n);
1304   bool identical_backtoback_ifs(Node *n);
1305   bool can_split_if(Node *n_ctrl);
1306 
1307   bool _created_loop_node;
1308 public:
1309   void set_created_loop_node() { _created_loop_node = true; }
1310   bool created_loop_node()     { return _created_loop_node; }
1311   void register_new_node( Node *n, Node *blk );
1312 
1313 #ifdef ASSERT
1314   void dump_bad_graph(const char* msg, Node* n, Node* early, Node* LCA);
1315 #endif
1316 
1317 #ifndef PRODUCT
1318   void dump( ) const;




1276   // Split Node 'n' through merge point if there is enough win.
1277   Node *split_thru_phi( Node *n, Node *region, int policy );
1278   // Found an If getting its condition-code input from a Phi in the
1279   // same block.  Split thru the Region.
1280   void do_split_if( Node *iff );
1281 
1282   // Conversion of fill/copy patterns into intrisic versions
1283   bool do_intrinsify_fill();
1284   bool intrinsify_fill(IdealLoopTree* lpt);
1285   bool match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
1286                        Node*& shift, Node*& offset);
1287 
1288 private:
1289   // Return a type based on condition control flow
1290   const TypeInt* filtered_type( Node *n, Node* n_ctrl);
1291   const TypeInt* filtered_type( Node *n ) { return filtered_type(n, NULL); }
1292  // Helpers for filtered type
1293   const TypeInt* filtered_type_from_dominators( Node* val, Node *val_ctrl);
1294 
1295   // Helper functions
1296   Node *spinup( Node *iff, Node *new_false, Node *new_true, Node *region, Node *phi, small_cache *cache, Node* old_region );
1297   Node *find_use_block( Node *use, Node *def, Node *old_false, Node *new_false, Node *old_true, Node *new_true );
1298   void handle_use( Node *use, Node *def, small_cache *cache, Node *region_dom, Node *new_false, Node *new_true,
1299                    Node *old_false, Node *old_true, Node* old_region );
1300   bool split_up( Node *n, Node *blk1, Node *blk2 );
1301   void sink_use( Node *use, Node *post_loop );
1302   Node *place_near_use( Node *useblock ) const;
1303   Node* try_move_store_before_loop(Node* n, Node *n_ctrl);
1304   void try_move_store_after_loop(Node* n);
1305   bool identical_backtoback_ifs(Node *n);
1306   bool can_split_if(Node *n_ctrl);
1307 
1308   bool _created_loop_node;
1309 public:
1310   void set_created_loop_node() { _created_loop_node = true; }
1311   bool created_loop_node()     { return _created_loop_node; }
1312   void register_new_node( Node *n, Node *blk );
1313 
1314 #ifdef ASSERT
1315   void dump_bad_graph(const char* msg, Node* n, Node* early, Node* LCA);
1316 #endif
1317 
1318 #ifndef PRODUCT
1319   void dump( ) const;


< prev index next >