1.1 --- a/src/share/vm/opto/callGenerator.hpp Fri Dec 21 10:27:49 2012 -0800 1.2 +++ b/src/share/vm/opto/callGenerator.hpp Sun Dec 23 17:08:22 2012 +0100 1.3 @@ -68,6 +68,12 @@ 1.4 1.5 // is_late_inline: supports conversion of call into an inline 1.6 virtual bool is_late_inline() const { return false; } 1.7 + // same but for method handle calls 1.8 + virtual bool is_mh_late_inline() const { return false; } 1.9 + 1.10 + // for method handle calls: have we tried inlinining the call already? 1.11 + virtual bool already_attempted() const { ShouldNotReachHere(); return false; } 1.12 + 1.13 // Replace the call with an inline version of the code 1.14 virtual void do_late_inline() { ShouldNotReachHere(); } 1.15 1.16 @@ -112,11 +118,13 @@ 1.17 static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface 1.18 static CallGenerator* for_dynamic_call(ciMethod* m); // invokedynamic 1.19 1.20 - static CallGenerator* for_method_handle_call( JVMState* jvms, ciMethod* caller, ciMethod* callee); 1.21 - static CallGenerator* for_method_handle_inline(JVMState* jvms, ciMethod* caller, ciMethod* callee); 1.22 + static CallGenerator* for_method_handle_call( JVMState* jvms, ciMethod* caller, ciMethod* callee, bool delayed_forbidden); 1.23 + static CallGenerator* for_method_handle_inline(JVMState* jvms, ciMethod* caller, ciMethod* callee, bool& input_not_const); 1.24 1.25 // How to generate a replace a direct call with an inline version 1.26 static CallGenerator* for_late_inline(ciMethod* m, CallGenerator* inline_cg); 1.27 + static CallGenerator* for_mh_late_inline(ciMethod* caller, ciMethod* callee, bool input_not_const); 1.28 + static CallGenerator* for_string_late_inline(ciMethod* m, CallGenerator* inline_cg); 1.29 1.30 // How to make a call but defer the decision whether to inline or not. 1.31 static CallGenerator* for_warm_call(WarmCallInfo* ci, 1.32 @@ -147,6 +155,8 @@ 1.33 CallGenerator* cg); 1.34 virtual Node* generate_predicate(JVMState* jvms) { return NULL; }; 1.35 1.36 + virtual void print_inlining_late(const char* msg) { ShouldNotReachHere(); } 1.37 + 1.38 static void print_inlining(Compile* C, ciMethod* callee, int inline_level, int bci, const char* msg) { 1.39 if (PrintInlining) 1.40 C->print_inlining(callee, inline_level, bci, msg);