< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page




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

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




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


< prev index next >