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
|