654 if (log != NULL) {
655 log->elem("predicted_call bci='%d' klass='%d'",
656 jvms->bci(), log->identify(_predicted_receiver));
657 }
658
659 receiver = kit.null_check_receiver_before_call(method());
660 if (kit.stopped()) {
661 return kit.transfer_exceptions_into_jvms();
662 }
663
664 // Make a copy of the replaced nodes in case we need to restore them
665 ReplacedNodes replaced_nodes = kit.map()->replaced_nodes();
666 replaced_nodes.clone();
667
668 Node* exact_receiver = receiver; // will get updated in place...
669 Node* slow_ctl = kit.type_check_receiver(receiver,
670 _predicted_receiver, _hit_prob,
671 &exact_receiver);
672
673 SafePointNode* slow_map = NULL;
674 JVMState* slow_jvms;
675 { PreserveJVMState pjvms(&kit);
676 kit.set_control(slow_ctl);
677 if (!kit.stopped()) {
678 slow_jvms = _if_missed->generate(kit.sync_jvms());
679 if (kit.failing())
680 return NULL; // might happen because of NodeCountInliningCutoff
681 assert(slow_jvms != NULL, "must be");
682 kit.add_exception_states_from(slow_jvms);
683 kit.set_map(slow_jvms->map());
684 if (!kit.stopped())
685 slow_map = kit.stop();
686 }
687 }
688
689 if (kit.stopped()) {
690 // Instance exactly does not matches the desired type.
691 kit.set_jvms(slow_jvms);
692 return kit.transfer_exceptions_into_jvms();
693 }
694
|
654 if (log != NULL) {
655 log->elem("predicted_call bci='%d' klass='%d'",
656 jvms->bci(), log->identify(_predicted_receiver));
657 }
658
659 receiver = kit.null_check_receiver_before_call(method());
660 if (kit.stopped()) {
661 return kit.transfer_exceptions_into_jvms();
662 }
663
664 // Make a copy of the replaced nodes in case we need to restore them
665 ReplacedNodes replaced_nodes = kit.map()->replaced_nodes();
666 replaced_nodes.clone();
667
668 Node* exact_receiver = receiver; // will get updated in place...
669 Node* slow_ctl = kit.type_check_receiver(receiver,
670 _predicted_receiver, _hit_prob,
671 &exact_receiver);
672
673 SafePointNode* slow_map = NULL;
674 JVMState* slow_jvms = NULL;
675 { PreserveJVMState pjvms(&kit);
676 kit.set_control(slow_ctl);
677 if (!kit.stopped()) {
678 slow_jvms = _if_missed->generate(kit.sync_jvms());
679 if (kit.failing())
680 return NULL; // might happen because of NodeCountInliningCutoff
681 assert(slow_jvms != NULL, "must be");
682 kit.add_exception_states_from(slow_jvms);
683 kit.set_map(slow_jvms->map());
684 if (!kit.stopped())
685 slow_map = kit.stop();
686 }
687 }
688
689 if (kit.stopped()) {
690 // Instance exactly does not matches the desired type.
691 kit.set_jvms(slow_jvms);
692 return kit.transfer_exceptions_into_jvms();
693 }
694
|