src/hotspot/share/opto/loopnode.hpp
changeset 50525 767cdb97f103
parent 50180 ffa644980dff
child 50558 d9936e986e4f
equal deleted inserted replaced
50524:04f4e983c2f7 50525:767cdb97f103
   910     _verify_only(true) {
   910     _verify_only(true) {
   911     build_and_optimize(false, false);
   911     build_and_optimize(false, false);
   912   }
   912   }
   913 
   913 
   914   // build the loop tree and perform any requested optimizations
   914   // build the loop tree and perform any requested optimizations
   915   void build_and_optimize(bool do_split_if, bool skip_loop_opts);
   915   void build_and_optimize(bool do_split_if, bool skip_loop_opts, bool last_round = false);
   916 
   916 
   917   // Dominators for the sea of nodes
   917   // Dominators for the sea of nodes
   918   void Dominators();
   918   void Dominators();
   919   Node *dom_lca( Node *n1, Node *n2 ) const {
   919   Node *dom_lca( Node *n1, Node *n2 ) const {
   920     return find_non_split_ctrl(dom_lca_internal(n1, n2));
   920     return find_non_split_ctrl(dom_lca_internal(n1, n2));
   921   }
   921   }
   922   Node *dom_lca_internal( Node *n1, Node *n2 ) const;
   922   Node *dom_lca_internal( Node *n1, Node *n2 ) const;
   923 
   923 
   924   // Compute the Ideal Node to Loop mapping
   924   // Compute the Ideal Node to Loop mapping
   925   PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool skip_loop_opts = false) :
   925   PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool skip_loop_opts = false, bool last_round = false) :
   926     PhaseTransform(Ideal_Loop),
   926     PhaseTransform(Ideal_Loop),
   927     _igvn(igvn),
   927     _igvn(igvn),
   928     _dom_lca_tags(arena()), // Thread::resource_area
   928     _dom_lca_tags(arena()), // Thread::resource_area
   929     _verify_me(NULL),
   929     _verify_me(NULL),
   930     _verify_only(false) {
   930     _verify_only(false) {
   931     build_and_optimize(do_split_ifs, skip_loop_opts);
   931     build_and_optimize(do_split_ifs, skip_loop_opts, last_round);
   932   }
   932   }
   933 
   933 
   934   // Verify that verify_me made the same decisions as a fresh run.
   934   // Verify that verify_me made the same decisions as a fresh run.
   935   PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) :
   935   PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) :
   936     PhaseTransform(Ideal_Loop),
   936     PhaseTransform(Ideal_Loop),
  1225   // forcing an extra register move)
  1225   // forcing an extra register move)
  1226   void reorg_offsets( IdealLoopTree *loop );
  1226   void reorg_offsets( IdealLoopTree *loop );
  1227 
  1227 
  1228   // Check for aggressive application of 'split-if' optimization,
  1228   // Check for aggressive application of 'split-if' optimization,
  1229   // using basic block level info.
  1229   // using basic block level info.
  1230   void  split_if_with_blocks     ( VectorSet &visited, Node_Stack &nstack );
  1230   void  split_if_with_blocks     ( VectorSet &visited, Node_Stack &nstack, bool last_round );
  1231   Node *split_if_with_blocks_pre ( Node *n );
  1231   Node *split_if_with_blocks_pre ( Node *n );
  1232   void  split_if_with_blocks_post( Node *n );
  1232   void  split_if_with_blocks_post( Node *n, bool last_round );
  1233   Node *has_local_phi_input( Node *n );
  1233   Node *has_local_phi_input( Node *n );
  1234   // Mark an IfNode as being dominated by a prior test,
  1234   // Mark an IfNode as being dominated by a prior test,
  1235   // without actually altering the CFG (and hence IDOM info).
  1235   // without actually altering the CFG (and hence IDOM info).
  1236   void dominated_by( Node *prevdom, Node *iff, bool flip = false, bool exclude_loop_predicate = false );
  1236   void dominated_by( Node *prevdom, Node *iff, bool flip = false, bool exclude_loop_predicate = false );
  1237 
  1237