comparison src/share/vm/c1/c1_Runtime1.cpp @ 4048:cec1757a0134

7102657: JSR 292: C1 deoptimizes unlinked invokedynamic call sites infinitely Reviewed-by: never, bdelsart
author twisti
date Thu, 27 Oct 2011 04:43:37 -0700
parents c124e2e7463e
children 04b9a2566eec 20334ed5ed3c
comparison
equal deleted inserted replaced
4047:d8cb48376797 4048:cec1757a0134
677 // When using fast locking, the compiled code has already tried the fast case 677 // When using fast locking, the compiled code has already tried the fast case
678 ObjectSynchronizer::slow_exit(obj, lock->lock(), THREAD); 678 ObjectSynchronizer::slow_exit(obj, lock->lock(), THREAD);
679 } else { 679 } else {
680 ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD); 680 ObjectSynchronizer::fast_exit(obj, lock->lock(), THREAD);
681 } 681 }
682 JRT_END
683
684 // Cf. OptoRuntime::deoptimize_caller_frame
685 JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* thread))
686 // Called from within the owner thread, so no need for safepoint
687 RegisterMap reg_map(thread, false);
688 frame stub_frame = thread->last_frame();
689 assert(stub_frame.is_runtime_frame(), "sanity check");
690 frame caller_frame = stub_frame.sender(&reg_map);
691
692 // We are coming from a compiled method; check this is true.
693 assert(CodeCache::find_nmethod(caller_frame.pc()) != NULL, "sanity");
694
695 // Deoptimize the caller frame.
696 Deoptimization::deoptimize_frame(thread, caller_frame.id());
697
698 // Return to the now deoptimized frame.
682 JRT_END 699 JRT_END
683 700
684 701
685 static klassOop resolve_field_return_klass(methodHandle caller, int bci, TRAPS) { 702 static klassOop resolve_field_return_klass(methodHandle caller, int bci, TRAPS) {
686 Bytecode_field field_access(caller, bci); 703 Bytecode_field field_access(caller, bci);