Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/loopnode.hpp @ 4064:670a74b863fc
7107042: assert(no_dead_loop) failed: dead loop detected
Summary: Use dead nodes elimination code in PhaseIdealLoop before executing EA.
Reviewed-by: never, twisti
author | kvn |
---|---|
date | Wed, 09 Nov 2011 07:25:51 -0800 |
parents | c96c3eb1efae |
children | c8d8e124380c |
comparison
equal
deleted
inserted
replaced
4063:7e0e43cf86d6 | 4064:670a74b863fc |
---|---|
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) { |