47 protected: |
47 protected: |
48 CallGenerator(ciMethod* method) : _method(method) {} |
48 CallGenerator(ciMethod* method) : _method(method) {} |
49 |
49 |
50 public: |
50 public: |
51 // Accessors |
51 // Accessors |
52 ciMethod* method() const { return _method; } |
52 ciMethod* method() const { return _method; } |
53 |
53 |
54 // is_inline: At least some code implementing the method is copied here. |
54 // is_inline: At least some code implementing the method is copied here. |
55 virtual bool is_inline() const { return false; } |
55 virtual bool is_inline() const { return false; } |
56 // is_intrinsic: There's a method-specific way of generating the inline code. |
56 // is_intrinsic: There's a method-specific way of generating the inline code. |
57 virtual bool is_intrinsic() const { return false; } |
57 virtual bool is_intrinsic() const { return false; } |
121 static CallGenerator* for_osr(ciMethod* m, int osr_bci); |
121 static CallGenerator* for_osr(ciMethod* m, int osr_bci); |
122 |
122 |
123 // How to generate vanilla out-of-line call sites: |
123 // How to generate vanilla out-of-line call sites: |
124 static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false); // static, special |
124 static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false); // static, special |
125 static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface |
125 static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index); // virtual, interface |
126 static CallGenerator* for_dynamic_call(ciMethod* m); // invokedynamic |
|
127 |
126 |
128 static CallGenerator* for_method_handle_call( JVMState* jvms, ciMethod* caller, ciMethod* callee, bool delayed_forbidden); |
127 static CallGenerator* for_method_handle_call( JVMState* jvms, ciMethod* caller, ciMethod* callee, bool delayed_forbidden); |
129 static CallGenerator* for_method_handle_inline(JVMState* jvms, ciMethod* caller, ciMethod* callee, bool& input_not_const); |
128 static CallGenerator* for_method_handle_inline(JVMState* jvms, ciMethod* caller, ciMethod* callee, bool& input_not_const); |
130 |
129 |
131 // How to generate a replace a direct call with an inline version |
130 // How to generate a replace a direct call with an inline version |
168 static void print_inlining(Compile* C, ciMethod* callee, int inline_level, int bci, const char* msg) { |
167 static void print_inlining(Compile* C, ciMethod* callee, int inline_level, int bci, const char* msg) { |
169 if (C->print_inlining()) { |
168 if (C->print_inlining()) { |
170 C->print_inlining(callee, inline_level, bci, msg); |
169 C->print_inlining(callee, inline_level, bci, msg); |
171 } |
170 } |
172 } |
171 } |
|
172 |
|
173 static bool is_inlined_mh_linker(JVMState* jvms, ciMethod* m); |
173 }; |
174 }; |
174 |
175 |
175 |
176 |
176 //------------------------InlineCallGenerator---------------------------------- |
177 //------------------------InlineCallGenerator---------------------------------- |
177 class InlineCallGenerator : public CallGenerator { |
178 class InlineCallGenerator : public CallGenerator { |