comparison src/share/vm/opto/callGenerator.cpp @ 3852:fdb992d83a87

7071653: JSR 292: call site change notification should be pushed not pulled Reviewed-by: kvn, never, bdelsart
author twisti
date Tue, 16 Aug 2011 04:14:05 -0700
parents f918d6096e23
children b27c72d69fd1
comparison
equal deleted inserted replaced
3851:95134e034042 3852:fdb992d83a87
22 * 22 *
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "ci/bcEscapeAnalyzer.hpp" 26 #include "ci/bcEscapeAnalyzer.hpp"
27 #include "ci/ciCallSite.hpp"
27 #include "ci/ciCPCache.hpp" 28 #include "ci/ciCPCache.hpp"
28 #include "ci/ciMethodHandle.hpp" 29 #include "ci/ciMethodHandle.hpp"
29 #include "classfile/javaClasses.hpp" 30 #include "classfile/javaClasses.hpp"
30 #include "compiler/compileLog.hpp" 31 #include "compiler/compileLog.hpp"
31 #include "opto/addnode.hpp" 32 #include "opto/addnode.hpp"
736 } 737 }
737 return NULL; 738 return NULL;
738 } 739 }
739 740
740 741
742 CallGenerator* CallGenerator::for_invokedynamic_inline(ciCallSite* call_site, JVMState* jvms,
743 ciMethod* caller, ciMethod* callee, ciCallProfile profile) {
744 assert(call_site->is_constant_call_site() || call_site->is_mutable_call_site(), "must be");
745 ciMethodHandle* method_handle = call_site->get_target();
746
747 // Set the callee to have access to the class and signature in the
748 // MethodHandleCompiler.
749 method_handle->set_callee(callee);
750 method_handle->set_caller(caller);
751 method_handle->set_call_profile(profile);
752
753 // Get an adapter for the MethodHandle.
754 ciMethod* target_method = method_handle->get_invokedynamic_adapter();
755 if (target_method != NULL) {
756 Compile *C = Compile::current();
757 CallGenerator* hit_cg = C->call_generator(target_method, -1, false, jvms, true, PROB_ALWAYS);
758 if (hit_cg != NULL && hit_cg->is_inline()) {
759 // Add a dependence for invalidation of the optimization.
760 if (call_site->is_mutable_call_site()) {
761 C->dependencies()->assert_call_site_target_value(C->env()->CallSite_klass(), call_site, method_handle);
762 }
763 return hit_cg;
764 }
765 }
766 return NULL;
767 }
768
769
741 JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { 770 JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) {
742 GraphKit kit(jvms); 771 GraphKit kit(jvms);
743 PhaseGVN& gvn = kit.gvn(); 772 PhaseGVN& gvn = kit.gvn();
744 773
745 CompileLog* log = kit.C->log(); 774 CompileLog* log = kit.C->log();