Mercurial > hg > truffle
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 |