< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page




1081   // Return the (unique) control output node that's in the loop (if it exists.)
1082   Node* stay_in_loop( Node* n, IdealLoopTree *loop);
1083   // Insert a signed compare loop exit cloned from an unsigned compare.
1084   IfNode* insert_cmpi_loop_exit(IfNode* if_cmpu, IdealLoopTree *loop);
1085   void remove_cmpi_loop_exit(IfNode* if_cmp, IdealLoopTree *loop);
1086   // Utility to register node "n" with PhaseIdealLoop
1087   void register_node(Node* n, IdealLoopTree *loop, Node* pred, int ddepth);
1088   // Utility to create an if-projection
1089   ProjNode* proj_clone(ProjNode* p, IfNode* iff);
1090   // Force the iff control output to be the live_proj
1091   Node* short_circuit_if(IfNode* iff, ProjNode* live_proj);
1092   // Insert a region before an if projection
1093   RegionNode* insert_region_before_proj(ProjNode* proj);
1094   // Insert a new if before an if projection
1095   ProjNode* insert_if_before_proj(Node* left, bool Signed, BoolTest::mask relop, Node* right, ProjNode* proj);
1096 
1097   // Passed in a Phi merging (recursively) some nearly equivalent Bool/Cmps.
1098   // "Nearly" because all Nodes have been cloned from the original in the loop,
1099   // but the fall-in edges to the Cmp are different.  Clone bool/Cmp pairs
1100   // through the Phi recursively, and return a Bool.
1101   BoolNode *clone_iff( PhiNode *phi, IdealLoopTree *loop );
1102   CmpNode *clone_bool( PhiNode *phi, IdealLoopTree *loop );
1103 
1104 
1105   // Rework addressing expressions to get the most loop-invariant stuff
1106   // moved out.  We'd like to do all associative operators, but it's especially
1107   // important (common) to do address expressions.
1108   Node *remix_address_expressions( Node *n );
1109 
1110   // Attempt to use a conditional move instead of a phi/branch
1111   Node *conditional_move( Node *n );
1112 
1113   // Reorganize offset computations to lower register pressure.
1114   // Mostly prevent loop-fallout uses of the pre-incremented trip counter
1115   // (which are then alive with the post-incremented trip counter
1116   // forcing an extra register move)
1117   void reorg_offsets( IdealLoopTree *loop );
1118 
1119   // Check for aggressive application of 'split-if' optimization,
1120   // using basic block level info.
1121   void  split_if_with_blocks     ( VectorSet &visited, Node_Stack &nstack );




1081   // Return the (unique) control output node that's in the loop (if it exists.)
1082   Node* stay_in_loop( Node* n, IdealLoopTree *loop);
1083   // Insert a signed compare loop exit cloned from an unsigned compare.
1084   IfNode* insert_cmpi_loop_exit(IfNode* if_cmpu, IdealLoopTree *loop);
1085   void remove_cmpi_loop_exit(IfNode* if_cmp, IdealLoopTree *loop);
1086   // Utility to register node "n" with PhaseIdealLoop
1087   void register_node(Node* n, IdealLoopTree *loop, Node* pred, int ddepth);
1088   // Utility to create an if-projection
1089   ProjNode* proj_clone(ProjNode* p, IfNode* iff);
1090   // Force the iff control output to be the live_proj
1091   Node* short_circuit_if(IfNode* iff, ProjNode* live_proj);
1092   // Insert a region before an if projection
1093   RegionNode* insert_region_before_proj(ProjNode* proj);
1094   // Insert a new if before an if projection
1095   ProjNode* insert_if_before_proj(Node* left, bool Signed, BoolTest::mask relop, Node* right, ProjNode* proj);
1096 
1097   // Passed in a Phi merging (recursively) some nearly equivalent Bool/Cmps.
1098   // "Nearly" because all Nodes have been cloned from the original in the loop,
1099   // but the fall-in edges to the Cmp are different.  Clone bool/Cmp pairs
1100   // through the Phi recursively, and return a Bool.
1101   Node *clone_iff( PhiNode *phi, IdealLoopTree *loop );
1102   CmpNode *clone_bool( PhiNode *phi, IdealLoopTree *loop );
1103 
1104 
1105   // Rework addressing expressions to get the most loop-invariant stuff
1106   // moved out.  We'd like to do all associative operators, but it's especially
1107   // important (common) to do address expressions.
1108   Node *remix_address_expressions( Node *n );
1109 
1110   // Attempt to use a conditional move instead of a phi/branch
1111   Node *conditional_move( Node *n );
1112 
1113   // Reorganize offset computations to lower register pressure.
1114   // Mostly prevent loop-fallout uses of the pre-incremented trip counter
1115   // (which are then alive with the post-incremented trip counter
1116   // forcing an extra register move)
1117   void reorg_offsets( IdealLoopTree *loop );
1118 
1119   // Check for aggressive application of 'split-if' optimization,
1120   // using basic block level info.
1121   void  split_if_with_blocks     ( VectorSet &visited, Node_Stack &nstack );


< prev index next >