< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page




1332   bool match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
1333                        Node*& shift, Node*& offset);
1334 
1335 private:
1336   // Return a type based on condition control flow
1337   const TypeInt* filtered_type( Node *n, Node* n_ctrl);
1338   const TypeInt* filtered_type( Node *n ) { return filtered_type(n, NULL); }
1339  // Helpers for filtered type
1340   const TypeInt* filtered_type_from_dominators( Node* val, Node *val_ctrl);
1341 
1342   // Helper functions
1343   Node *spinup( Node *iff, Node *new_false, Node *new_true, Node *region, Node *phi, small_cache *cache );
1344   Node *find_use_block( Node *use, Node *def, Node *old_false, Node *new_false, Node *old_true, Node *new_true );
1345   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 );
1346   bool split_up( Node *n, Node *blk1, Node *blk2 );
1347   void sink_use( Node *use, Node *post_loop );
1348   Node *place_near_use( Node *useblock ) const;
1349   Node* try_move_store_before_loop(Node* n, Node *n_ctrl);
1350   void try_move_store_after_loop(Node* n);
1351   bool identical_backtoback_ifs(Node *n);

1352   bool can_split_if(Node *n_ctrl);
1353 
1354   // Determine if a method is too big for a/another round of split-if, based on
1355   // a magic (approximate) ratio derived from the equally magic constant 35000,
1356   // previously used for this purpose (but without relating to the node limit).
1357   bool must_throttle_split_if() {
1358     uint threshold = C->max_node_limit() * 2 / 5;
1359     return C->live_nodes() > threshold;
1360   }
1361 
1362   // A simplistic node request tracking mechanism, where
1363   //   = UINT_MAX   Request not valid or made final.
1364   //   < UINT_MAX   Nodes currently requested (estimate).
1365   uint _nodes_required;
1366 
1367   enum { REQUIRE_MIN = 70 };
1368 
1369   uint nodes_required() const { return _nodes_required; }
1370 
1371   // Given the _currently_  available number of nodes, check  whether there is




1332   bool match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
1333                        Node*& shift, Node*& offset);
1334 
1335 private:
1336   // Return a type based on condition control flow
1337   const TypeInt* filtered_type( Node *n, Node* n_ctrl);
1338   const TypeInt* filtered_type( Node *n ) { return filtered_type(n, NULL); }
1339  // Helpers for filtered type
1340   const TypeInt* filtered_type_from_dominators( Node* val, Node *val_ctrl);
1341 
1342   // Helper functions
1343   Node *spinup( Node *iff, Node *new_false, Node *new_true, Node *region, Node *phi, small_cache *cache );
1344   Node *find_use_block( Node *use, Node *def, Node *old_false, Node *new_false, Node *old_true, Node *new_true );
1345   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 );
1346   bool split_up( Node *n, Node *blk1, Node *blk2 );
1347   void sink_use( Node *use, Node *post_loop );
1348   Node *place_near_use( Node *useblock ) const;
1349   Node* try_move_store_before_loop(Node* n, Node *n_ctrl);
1350   void try_move_store_after_loop(Node* n);
1351   bool identical_backtoback_ifs(Node *n);
1352   bool flatten_array_element_type_check(Node *n);
1353   bool can_split_if(Node *n_ctrl);
1354 
1355   // Determine if a method is too big for a/another round of split-if, based on
1356   // a magic (approximate) ratio derived from the equally magic constant 35000,
1357   // previously used for this purpose (but without relating to the node limit).
1358   bool must_throttle_split_if() {
1359     uint threshold = C->max_node_limit() * 2 / 5;
1360     return C->live_nodes() > threshold;
1361   }
1362 
1363   // A simplistic node request tracking mechanism, where
1364   //   = UINT_MAX   Request not valid or made final.
1365   //   < UINT_MAX   Nodes currently requested (estimate).
1366   uint _nodes_required;
1367 
1368   enum { REQUIRE_MIN = 70 };
1369 
1370   uint nodes_required() const { return _nodes_required; }
1371 
1372   // Given the _currently_  available number of nodes, check  whether there is


< prev index next >