745 PhaseTransform(Ideal_Loop), |
745 PhaseTransform(Ideal_Loop), |
746 _igvn(igvn), |
746 _igvn(igvn), |
747 _dom_lca_tags(arena()), // Thread::resource_area |
747 _dom_lca_tags(arena()), // Thread::resource_area |
748 _verify_me(NULL), |
748 _verify_me(NULL), |
749 _verify_only(true) { |
749 _verify_only(true) { |
750 build_and_optimize(false); |
750 build_and_optimize(false, false); |
751 } |
751 } |
752 |
752 |
753 // build the loop tree and perform any requested optimizations |
753 // build the loop tree and perform any requested optimizations |
754 void build_and_optimize(bool do_split_if); |
754 void build_and_optimize(bool do_split_if, bool skip_loop_opts); |
755 |
755 |
756 public: |
756 public: |
757 // Dominators for the sea of nodes |
757 // Dominators for the sea of nodes |
758 void Dominators(); |
758 void Dominators(); |
759 Node *dom_lca( Node *n1, Node *n2 ) const { |
759 Node *dom_lca( Node *n1, Node *n2 ) const { |
760 return find_non_split_ctrl(dom_lca_internal(n1, n2)); |
760 return find_non_split_ctrl(dom_lca_internal(n1, n2)); |
761 } |
761 } |
762 Node *dom_lca_internal( Node *n1, Node *n2 ) const; |
762 Node *dom_lca_internal( Node *n1, Node *n2 ) const; |
763 |
763 |
764 // Compute the Ideal Node to Loop mapping |
764 // Compute the Ideal Node to Loop mapping |
765 PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs) : |
765 PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool skip_loop_opts = false) : |
766 PhaseTransform(Ideal_Loop), |
766 PhaseTransform(Ideal_Loop), |
767 _igvn(igvn), |
767 _igvn(igvn), |
768 _dom_lca_tags(arena()), // Thread::resource_area |
768 _dom_lca_tags(arena()), // Thread::resource_area |
769 _verify_me(NULL), |
769 _verify_me(NULL), |
770 _verify_only(false) { |
770 _verify_only(false) { |
771 build_and_optimize(do_split_ifs); |
771 build_and_optimize(do_split_ifs, skip_loop_opts); |
772 } |
772 } |
773 |
773 |
774 // Verify that verify_me made the same decisions as a fresh run. |
774 // Verify that verify_me made the same decisions as a fresh run. |
775 PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : |
775 PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : |
776 PhaseTransform(Ideal_Loop), |
776 PhaseTransform(Ideal_Loop), |
777 _igvn(igvn), |
777 _igvn(igvn), |
778 _dom_lca_tags(arena()), // Thread::resource_area |
778 _dom_lca_tags(arena()), // Thread::resource_area |
779 _verify_me(verify_me), |
779 _verify_me(verify_me), |
780 _verify_only(false) { |
780 _verify_only(false) { |
781 build_and_optimize(false); |
781 build_and_optimize(false, false); |
782 } |
782 } |
783 |
783 |
784 // Build and verify the loop tree without modifying the graph. This |
784 // Build and verify the loop tree without modifying the graph. This |
785 // is useful to verify that all inputs properly dominate their uses. |
785 // is useful to verify that all inputs properly dominate their uses. |
786 static void verify(PhaseIterGVN& igvn) { |
786 static void verify(PhaseIterGVN& igvn) { |