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
|