761 // With java.lang.ref.reference.get() we must go through the
762 // intrinsic when G1 is enabled - even when get() is the root
763 // method of the compile - so that, if necessary, the value in
764 // the referent field of the reference object gets recorded by
765 // the pre-barrier code.
766 // Specifically, if G1 is enabled, the value in the referent
767 // field is recorded by the G1 SATB pre barrier. This will
768 // result in the referent being marked live and the reference
769 // object removed from the list of discovered references during
770 // reference processing.
771 cg = find_intrinsic(method(), false);
772 }
773 if (cg == NULL) {
774 float past_uses = method()->interpreter_invocation_count();
775 float expected_uses = past_uses;
776 cg = CallGenerator::for_inline(method(), expected_uses);
777 }
778 }
779 if (failing()) return;
780 if (cg == NULL) {
781 record_method_not_compilable_all_tiers("cannot parse method");
782 return;
783 }
784 JVMState* jvms = build_start_state(start(), tf());
785 if ((jvms = cg->generate(jvms)) == NULL) {
786 if (!failure_reason_is(C2Compiler::retry_class_loading_during_parsing())) {
787 record_method_not_compilable("method parse failed");
788 }
789 return;
790 }
791 GraphKit kit(jvms);
792
793 if (!kit.stopped()) {
794 // Accept return values, and transfer control we know not where.
795 // This is done by a special, unique ReturnNode bound to root.
796 return_values(kit.jvms());
797 }
798
799 if (kit.has_exceptions()) {
800 // Any exceptions that escape from this call must be rethrown
801 // to whatever caller is dynamically above us on the stack.
|
761 // With java.lang.ref.reference.get() we must go through the
762 // intrinsic when G1 is enabled - even when get() is the root
763 // method of the compile - so that, if necessary, the value in
764 // the referent field of the reference object gets recorded by
765 // the pre-barrier code.
766 // Specifically, if G1 is enabled, the value in the referent
767 // field is recorded by the G1 SATB pre barrier. This will
768 // result in the referent being marked live and the reference
769 // object removed from the list of discovered references during
770 // reference processing.
771 cg = find_intrinsic(method(), false);
772 }
773 if (cg == NULL) {
774 float past_uses = method()->interpreter_invocation_count();
775 float expected_uses = past_uses;
776 cg = CallGenerator::for_inline(method(), expected_uses);
777 }
778 }
779 if (failing()) return;
780 if (cg == NULL) {
781 record_method_not_compilable("cannot parse method");
782 return;
783 }
784 JVMState* jvms = build_start_state(start(), tf());
785 if ((jvms = cg->generate(jvms)) == NULL) {
786 if (!failure_reason_is(C2Compiler::retry_class_loading_during_parsing())) {
787 record_method_not_compilable("method parse failed");
788 }
789 return;
790 }
791 GraphKit kit(jvms);
792
793 if (!kit.stopped()) {
794 // Accept return values, and transfer control we know not where.
795 // This is done by a special, unique ReturnNode bound to root.
796 return_values(kit.jvms());
797 }
798
799 if (kit.has_exceptions()) {
800 // Any exceptions that escape from this call must be rethrown
801 // to whatever caller is dynamically above us on the stack.
|