Mercurial > hg > graal-compiler
comparison src/share/vm/oops/method.cpp @ 6800:9191895df19d
7200001: failed C1 OSR compile doesn't get recompiled with C2
Reviewed-by: kvn
author | twisti |
---|---|
date | Mon, 24 Sep 2012 17:59:24 -0700 |
parents | 8d3cc6612bd1 |
children | d8ce2825b193 c3e799c37717 |
comparison
equal
deleted
inserted
replaced
6799:c92f43386117 | 6800:9191895df19d |
---|---|
690 address* signature_handler = signature_handler_addr(); | 690 address* signature_handler = signature_handler_addr(); |
691 *signature_handler = handler; | 691 *signature_handler = handler; |
692 } | 692 } |
693 | 693 |
694 | 694 |
695 bool Method::is_not_compilable(int comp_level) const { | 695 void Method::print_made_not_compilable(int comp_level, bool is_osr, bool report) { |
696 if (number_of_breakpoints() > 0) { | |
697 return true; | |
698 } | |
699 if (is_method_handle_intrinsic()) { | |
700 return !is_synthetic(); // the generated adapters must be compiled | |
701 } | |
702 if (comp_level == CompLevel_any) { | |
703 return is_not_c1_compilable() || is_not_c2_compilable(); | |
704 } | |
705 if (is_c1_compile(comp_level)) { | |
706 return is_not_c1_compilable(); | |
707 } | |
708 if (is_c2_compile(comp_level)) { | |
709 return is_not_c2_compilable(); | |
710 } | |
711 return false; | |
712 } | |
713 | |
714 // call this when compiler finds that this method is not compilable | |
715 void Method::set_not_compilable(int comp_level, bool report) { | |
716 if (PrintCompilation && report) { | 696 if (PrintCompilation && report) { |
717 ttyLocker ttyl; | 697 ttyLocker ttyl; |
718 tty->print("made not compilable "); | 698 tty->print("made not %scompilable on ", is_osr ? "OSR " : ""); |
699 if (comp_level == CompLevel_all) { | |
700 tty->print("all levels "); | |
701 } else { | |
702 tty->print("levels "); | |
703 for (int i = (int)CompLevel_none; i <= comp_level; i++) { | |
704 tty->print("%d ", i); | |
705 } | |
706 } | |
719 this->print_short_name(tty); | 707 this->print_short_name(tty); |
720 int size = this->code_size(); | 708 int size = this->code_size(); |
721 if (size > 0) | 709 if (size > 0) |
722 tty->print(" (%d bytes)", size); | 710 tty->print(" (%d bytes)", size); |
723 tty->cr(); | 711 tty->cr(); |
724 } | 712 } |
725 if ((TraceDeoptimization || LogCompilation) && (xtty != NULL)) { | 713 if ((TraceDeoptimization || LogCompilation) && (xtty != NULL)) { |
726 ttyLocker ttyl; | 714 ttyLocker ttyl; |
727 xtty->begin_elem("make_not_compilable thread='%d'", (int) os::current_thread_id()); | 715 xtty->begin_elem("make_not_%scompilable thread='%d'", is_osr ? "osr_" : "", (int) os::current_thread_id()); |
728 xtty->method(this); | 716 xtty->method(this); |
729 xtty->stamp(); | 717 xtty->stamp(); |
730 xtty->end_elem(); | 718 xtty->end_elem(); |
731 } | 719 } |
720 } | |
721 | |
722 bool Method::is_not_compilable(int comp_level) const { | |
723 if (number_of_breakpoints() > 0) | |
724 return true; | |
725 if (is_method_handle_intrinsic()) | |
726 return !is_synthetic(); // the generated adapters must be compiled | |
727 if (comp_level == CompLevel_any) | |
728 return is_not_c1_compilable() || is_not_c2_compilable(); | |
729 if (is_c1_compile(comp_level)) | |
730 return is_not_c1_compilable(); | |
731 if (is_c2_compile(comp_level)) | |
732 return is_not_c2_compilable(); | |
733 return false; | |
734 } | |
735 | |
736 // call this when compiler finds that this method is not compilable | |
737 void Method::set_not_compilable(int comp_level, bool report) { | |
738 print_made_not_compilable(comp_level, /*is_osr*/ false, report); | |
732 if (comp_level == CompLevel_all) { | 739 if (comp_level == CompLevel_all) { |
733 set_not_c1_compilable(); | 740 set_not_c1_compilable(); |
734 set_not_c2_compilable(); | 741 set_not_c2_compilable(); |
735 } else { | 742 } else { |
736 if (is_c1_compile(comp_level)) { | 743 if (is_c1_compile(comp_level)) |
737 set_not_c1_compilable(); | 744 set_not_c1_compilable(); |
738 } else | 745 if (is_c2_compile(comp_level)) |
739 if (is_c2_compile(comp_level)) { | 746 set_not_c2_compilable(); |
740 set_not_c2_compilable(); | 747 } |
741 } | 748 CompilationPolicy::policy()->disable_compilation(this); |
749 } | |
750 | |
751 bool Method::is_not_osr_compilable(int comp_level) const { | |
752 if (is_not_compilable(comp_level)) | |
753 return true; | |
754 if (comp_level == CompLevel_any) | |
755 return is_not_c1_osr_compilable() || is_not_c2_osr_compilable(); | |
756 if (is_c1_compile(comp_level)) | |
757 return is_not_c1_osr_compilable(); | |
758 if (is_c2_compile(comp_level)) | |
759 return is_not_c2_osr_compilable(); | |
760 return false; | |
761 } | |
762 | |
763 void Method::set_not_osr_compilable(int comp_level, bool report) { | |
764 print_made_not_compilable(comp_level, /*is_osr*/ true, report); | |
765 if (comp_level == CompLevel_all) { | |
766 set_not_c1_osr_compilable(); | |
767 set_not_c2_osr_compilable(); | |
768 } else { | |
769 if (is_c1_compile(comp_level)) | |
770 set_not_c1_osr_compilable(); | |
771 if (is_c2_compile(comp_level)) | |
772 set_not_c2_osr_compilable(); | |
742 } | 773 } |
743 CompilationPolicy::policy()->disable_compilation(this); | 774 CompilationPolicy::policy()->disable_compilation(this); |
744 } | 775 } |
745 | 776 |
746 // Revert to using the interpreter and clear out the nmethod | 777 // Revert to using the interpreter and clear out the nmethod |