< prev index next >

src/share/vm/opto/loopnode.hpp

Print this page




1045   // Reorganize offset computations to lower register pressure.
1046   // Mostly prevent loop-fallout uses of the pre-incremented trip counter
1047   // (which are then alive with the post-incremented trip counter
1048   // forcing an extra register move)
1049   void reorg_offsets( IdealLoopTree *loop );
1050 
1051   // Check for aggressive application of 'split-if' optimization,
1052   // using basic block level info.
1053   void  split_if_with_blocks     ( VectorSet &visited, Node_Stack &nstack );
1054   Node *split_if_with_blocks_pre ( Node *n );
1055   void  split_if_with_blocks_post( Node *n );
1056   Node *has_local_phi_input( Node *n );
1057   // Mark an IfNode as being dominated by a prior test,
1058   // without actually altering the CFG (and hence IDOM info).
1059   void dominated_by( Node *prevdom, Node *iff, bool flip = false, bool exclude_loop_predicate = false );
1060 
1061   // Split Node 'n' through merge point
1062   Node *split_thru_region( Node *n, Node *region );
1063   // Split Node 'n' through merge point if there is enough win.
1064   Node *split_thru_phi( Node *n, Node *region, int policy );


1065   // Found an If getting its condition-code input from a Phi in the
1066   // same block.  Split thru the Region.
1067   void do_split_if( Node *iff );
1068 
1069   // Conversion of fill/copy patterns into intrisic versions
1070   bool do_intrinsify_fill();
1071   bool intrinsify_fill(IdealLoopTree* lpt);
1072   bool match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
1073                        Node*& shift, Node*& offset);
1074 
1075 private:
1076   // Return a type based on condition control flow
1077   const TypeInt* filtered_type( Node *n, Node* n_ctrl);
1078   const TypeInt* filtered_type( Node *n ) { return filtered_type(n, NULL); }
1079  // Helpers for filtered type
1080   const TypeInt* filtered_type_from_dominators( Node* val, Node *val_ctrl);
1081 
1082   // Helper functions
1083   Node *spinup( Node *iff, Node *new_false, Node *new_true, Node *region, Node *phi, small_cache *cache );
1084   Node *find_use_block( Node *use, Node *def, Node *old_false, Node *new_false, Node *old_true, Node *new_true );




1045   // Reorganize offset computations to lower register pressure.
1046   // Mostly prevent loop-fallout uses of the pre-incremented trip counter
1047   // (which are then alive with the post-incremented trip counter
1048   // forcing an extra register move)
1049   void reorg_offsets( IdealLoopTree *loop );
1050 
1051   // Check for aggressive application of 'split-if' optimization,
1052   // using basic block level info.
1053   void  split_if_with_blocks     ( VectorSet &visited, Node_Stack &nstack );
1054   Node *split_if_with_blocks_pre ( Node *n );
1055   void  split_if_with_blocks_post( Node *n );
1056   Node *has_local_phi_input( Node *n );
1057   // Mark an IfNode as being dominated by a prior test,
1058   // without actually altering the CFG (and hence IDOM info).
1059   void dominated_by( Node *prevdom, Node *iff, bool flip = false, bool exclude_loop_predicate = false );
1060 
1061   // Split Node 'n' through merge point
1062   Node *split_thru_region( Node *n, Node *region );
1063   // Split Node 'n' through merge point if there is enough win.
1064   Node *split_thru_phi( Node *n, Node *region, int policy );
1065   void split_mem_thru_phi(Node*, Node* r, Node* phi);
1066 
1067   // Found an If getting its condition-code input from a Phi in the
1068   // same block.  Split thru the Region.
1069   void do_split_if( Node *iff );
1070 
1071   // Conversion of fill/copy patterns into intrisic versions
1072   bool do_intrinsify_fill();
1073   bool intrinsify_fill(IdealLoopTree* lpt);
1074   bool match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& store_value,
1075                        Node*& shift, Node*& offset);
1076 
1077 private:
1078   // Return a type based on condition control flow
1079   const TypeInt* filtered_type( Node *n, Node* n_ctrl);
1080   const TypeInt* filtered_type( Node *n ) { return filtered_type(n, NULL); }
1081  // Helpers for filtered type
1082   const TypeInt* filtered_type_from_dominators( Node* val, Node *val_ctrl);
1083 
1084   // Helper functions
1085   Node *spinup( Node *iff, Node *new_false, Node *new_true, Node *region, Node *phi, small_cache *cache );
1086   Node *find_use_block( Node *use, Node *def, Node *old_false, Node *new_false, Node *old_true, Node *new_true );


< prev index next >