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) {