comparison src/share/vm/ci/ciMethodHandle.hpp @ 3905:c26de9aef2ed

7071307: MethodHandle bimorphic inlining should consider the frequency Reviewed-by: twisti, roland, kvn, iveresov
author never
date Fri, 02 Sep 2011 20:58:21 -0700
parents f918d6096e23
children e0658a9b3f87
comparison
equal deleted inserted replaced
3902:11a4af030e4b 3905:c26de9aef2ed
35 class ciMethodHandle : public ciInstance { 35 class ciMethodHandle : public ciInstance {
36 private: 36 private:
37 ciMethod* _callee; 37 ciMethod* _callee;
38 ciMethod* _caller; 38 ciMethod* _caller;
39 ciCallProfile _profile; 39 ciCallProfile _profile;
40 ciMethod* _method_handle_adapter;
41 ciMethod* _invokedynamic_adapter;
40 42
41 // Return an adapter for this MethodHandle. 43 // Return an adapter for this MethodHandle.
42 ciMethod* get_adapter_impl(bool is_invokedynamic) const; 44 ciMethod* get_adapter_impl(bool is_invokedynamic);
43 ciMethod* get_adapter( bool is_invokedynamic) const; 45 ciMethod* get_adapter( bool is_invokedynamic);
44 46
45 protected: 47 protected:
46 void print_impl(outputStream* st); 48 void print_chain_impl(outputStream* st) PRODUCT_RETURN;
47 49
48 public: 50 public:
49 ciMethodHandle(instanceHandle h_i) : 51 ciMethodHandle(instanceHandle h_i) :
50 ciInstance(h_i), 52 ciInstance(h_i),
51 _callee(NULL), 53 _callee(NULL),
52 _caller(NULL) 54 _caller(NULL),
55 _method_handle_adapter(NULL),
56 _invokedynamic_adapter(NULL)
53 {} 57 {}
54 58
55 // What kind of ciObject is this? 59 // What kind of ciObject is this?
56 bool is_method_handle() const { return true; } 60 bool is_method_handle() const { return true; }
57 61
58 void set_callee(ciMethod* m) { _callee = m; } 62 void set_callee(ciMethod* m) { _callee = m; }
59 void set_caller(ciMethod* m) { _caller = m; } 63 void set_caller(ciMethod* m) { _caller = m; }
60 void set_call_profile(ciCallProfile profile) { _profile = profile; } 64 void set_call_profile(ciCallProfile profile) { _profile = profile; }
61 65
62 // Return an adapter for a MethodHandle call. 66 // Return an adapter for a MethodHandle call.
63 ciMethod* get_method_handle_adapter() const { return get_adapter(false); } 67 ciMethod* get_method_handle_adapter() {
68 if (_method_handle_adapter == NULL) {
69 _method_handle_adapter = get_adapter(false);
70 }
71 return _method_handle_adapter;
72 }
64 73
65 // Return an adapter for an invokedynamic call. 74 // Return an adapter for an invokedynamic call.
66 ciMethod* get_invokedynamic_adapter() const { return get_adapter(true); } 75 ciMethod* get_invokedynamic_adapter() {
76 if (_invokedynamic_adapter == NULL) {
77 _invokedynamic_adapter = get_adapter(true);
78 }
79 return _invokedynamic_adapter;
80 }
81
82 void print_chain(outputStream* st = tty) PRODUCT_RETURN;
67 }; 83 };
68 84
69 #endif // SHARE_VM_CI_CIMETHODHANDLE_HPP 85 #endif // SHARE_VM_CI_CIMETHODHANDLE_HPP