920 PhaseTransform(Ideal_Loop), |
920 PhaseTransform(Ideal_Loop), |
921 _igvn(igvn), |
921 _igvn(igvn), |
922 _verify_me(NULL), |
922 _verify_me(NULL), |
923 _verify_only(true), |
923 _verify_only(true), |
924 _dom_lca_tags(arena()) { // Thread::resource_area |
924 _dom_lca_tags(arena()) { // Thread::resource_area |
925 build_and_optimize(false, false); |
925 build_and_optimize(LoopOptsVerify); |
926 } |
926 } |
927 |
927 |
928 // build the loop tree and perform any requested optimizations |
928 // build the loop tree and perform any requested optimizations |
929 void build_and_optimize(bool do_split_if, bool skip_loop_opts, bool last_round = false); |
929 void build_and_optimize(LoopOptsMode mode); |
930 |
930 |
931 // Dominators for the sea of nodes |
931 // Dominators for the sea of nodes |
932 void Dominators(); |
932 void Dominators(); |
933 Node *dom_lca( Node *n1, Node *n2 ) const { |
933 Node *dom_lca( Node *n1, Node *n2 ) const { |
934 return find_non_split_ctrl(dom_lca_internal(n1, n2)); |
934 return find_non_split_ctrl(dom_lca_internal(n1, n2)); |
935 } |
935 } |
936 Node *dom_lca_internal( Node *n1, Node *n2 ) const; |
936 Node *dom_lca_internal( Node *n1, Node *n2 ) const; |
937 |
937 |
938 // Compute the Ideal Node to Loop mapping |
938 // Compute the Ideal Node to Loop mapping |
939 PhaseIdealLoop( PhaseIterGVN &igvn, bool do_split_ifs, bool skip_loop_opts = false, bool last_round = false) : |
939 PhaseIdealLoop(PhaseIterGVN &igvn, LoopOptsMode mode) : |
940 PhaseTransform(Ideal_Loop), |
940 PhaseTransform(Ideal_Loop), |
941 _igvn(igvn), |
941 _igvn(igvn), |
942 _verify_me(NULL), |
942 _verify_me(NULL), |
943 _verify_only(false), |
943 _verify_only(false), |
944 _dom_lca_tags(arena()) { // Thread::resource_area |
944 _dom_lca_tags(arena()) { // Thread::resource_area |
945 build_and_optimize(do_split_ifs, skip_loop_opts, last_round); |
945 build_and_optimize(mode); |
946 } |
946 } |
947 |
947 |
948 // Verify that verify_me made the same decisions as a fresh run. |
948 // Verify that verify_me made the same decisions as a fresh run. |
949 PhaseIdealLoop( PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : |
949 PhaseIdealLoop(PhaseIterGVN &igvn, const PhaseIdealLoop *verify_me) : |
950 PhaseTransform(Ideal_Loop), |
950 PhaseTransform(Ideal_Loop), |
951 _igvn(igvn), |
951 _igvn(igvn), |
952 _verify_me(verify_me), |
952 _verify_me(verify_me), |
953 _verify_only(false), |
953 _verify_only(false), |
954 _dom_lca_tags(arena()) { // Thread::resource_area |
954 _dom_lca_tags(arena()) { // Thread::resource_area |
955 build_and_optimize(false, false); |
955 build_and_optimize(LoopOptsVerify); |
956 } |
956 } |
957 |
957 |
958 // Build and verify the loop tree without modifying the graph. This |
958 // Build and verify the loop tree without modifying the graph. This |
959 // is useful to verify that all inputs properly dominate their uses. |
959 // is useful to verify that all inputs properly dominate their uses. |
960 static void verify(PhaseIterGVN& igvn) { |
960 static void verify(PhaseIterGVN& igvn) { |