118 // The CI treats a klass as loaded if it is consistently defined in
119 // another loader, even if it hasn't yet been loaded in all loaders
120 // that could potentially see it via delegation.
121 ciKlass* get_klass_by_name(ciKlass* accessing_klass,
122 ciSymbol* klass_name,
123 bool require_local);
124
125 // Constant pool access.
126 ciKlass* get_klass_by_index(const constantPoolHandle& cpool,
127 int klass_index,
128 bool& is_accessible,
129 ciInstanceKlass* loading_klass);
130 ciConstant get_constant_by_index(const constantPoolHandle& cpool,
131 int pool_index, int cache_index,
132 ciInstanceKlass* accessor);
133 ciField* get_field_by_index(ciInstanceKlass* loading_klass,
134 int field_index, Bytecodes::Code bc);
135 ciMethod* get_method_by_index(const constantPoolHandle& cpool,
136 int method_index, Bytecodes::Code bc,
137 ciInstanceKlass* loading_klass);
138
139 // Implementation methods for loading and constant pool access.
140 ciKlass* get_klass_by_name_impl(ciKlass* accessing_klass,
141 const constantPoolHandle& cpool,
142 ciSymbol* klass_name,
143 bool require_local);
144 ciKlass* get_klass_by_index_impl(const constantPoolHandle& cpool,
145 int klass_index,
146 bool& is_accessible,
147 ciInstanceKlass* loading_klass);
148 ciConstant get_constant_by_index_impl(const constantPoolHandle& cpool,
149 int pool_index, int cache_index,
150 ciInstanceKlass* loading_klass);
151 ciField* get_field_by_index_impl(ciInstanceKlass* loading_klass,
152 int field_index, Bytecodes::Code bc);
153 ciMethod* get_method_by_index_impl(const constantPoolHandle& cpool,
154 int method_index, Bytecodes::Code bc,
155 ciInstanceKlass* loading_klass);
156
157 // Helper methods
185 return _factory->get_symbol(o);
186 }
187 }
188
189 ciMetadata* get_metadata(Metadata* o) {
190 if (o == nullptr) {
191 return nullptr;
192 } else {
193 return _factory->get_metadata(o);
194 }
195 }
196
197 ciMetadata* cached_metadata(Metadata* o) {
198 return _factory->cached_metadata(o);
199 }
200
201 ciInstance* get_instance(oop o) {
202 if (o == nullptr) return nullptr;
203 return get_object(o)->as_instance();
204 }
205 ciObjArrayKlass* get_obj_array_klass(Klass* o) {
206 if (o == nullptr) return nullptr;
207 return get_metadata(o)->as_obj_array_klass();
208 }
209 ciTypeArrayKlass* get_type_array_klass(Klass* o) {
210 if (o == nullptr) return nullptr;
211 return get_metadata(o)->as_type_array_klass();
212 }
213 ciKlass* get_klass(Klass* o) {
214 if (o == nullptr) return nullptr;
215 return get_metadata(o)->as_klass();
216 }
217 ciInstanceKlass* get_instance_klass(Klass* o) {
218 if (o == nullptr) return nullptr;
219 return get_metadata(o)->as_instance_klass();
220 }
221 ciMethod* get_method(Method* o) {
222 if (o == nullptr) return nullptr;
223 return get_metadata(o)->as_method();
224 }
481 void set_dyno_loc(const InstanceKlass* ik);
482 void record_best_dyno_loc(const InstanceKlass* ik);
483 bool print_dyno_loc(outputStream* out, const InstanceKlass* ik) const;
484
485 GrowableArray<const InstanceKlass*>* _dyno_klasses;
486 GrowableArray<const char *>* _dyno_locs;
487
488 #define MAX_DYNO_NAME_LENGTH 1024
489 char _dyno_name[MAX_DYNO_NAME_LENGTH+1];
490
491 public:
492 // Dump the compilation replay data for the ciEnv to the stream.
493 void dump_replay_data(int compile_id);
494 void dump_inline_data(int compile_id);
495 void dump_replay_data(outputStream* out);
496 void dump_replay_data_unsafe(outputStream* out);
497 void dump_replay_data_helper(outputStream* out);
498 void dump_compile_data(outputStream* out);
499 void dump_replay_data_version(outputStream* out);
500
501 const char *dyno_name(const InstanceKlass* ik) const;
502 const char *replay_name(const InstanceKlass* ik) const;
503 const char *replay_name(ciKlass* i) const;
504
505 void record_lambdaform(Thread* thread, oop obj);
506 void record_member(Thread* thread, oop obj);
507 void record_mh(Thread* thread, oop obj);
508 void record_call_site_obj(Thread* thread, oop obj);
509 void record_call_site_method(Thread* thread, Method* adapter);
510 void process_invokedynamic(const constantPoolHandle &cp, int index, JavaThread* thread);
511 void process_invokehandle(const constantPoolHandle &cp, int index, JavaThread* thread);
512 void find_dynamic_call_sites();
513 };
514
515 #endif // SHARE_CI_CIENV_HPP
|
118 // The CI treats a klass as loaded if it is consistently defined in
119 // another loader, even if it hasn't yet been loaded in all loaders
120 // that could potentially see it via delegation.
121 ciKlass* get_klass_by_name(ciKlass* accessing_klass,
122 ciSymbol* klass_name,
123 bool require_local);
124
125 // Constant pool access.
126 ciKlass* get_klass_by_index(const constantPoolHandle& cpool,
127 int klass_index,
128 bool& is_accessible,
129 ciInstanceKlass* loading_klass);
130 ciConstant get_constant_by_index(const constantPoolHandle& cpool,
131 int pool_index, int cache_index,
132 ciInstanceKlass* accessor);
133 ciField* get_field_by_index(ciInstanceKlass* loading_klass,
134 int field_index, Bytecodes::Code bc);
135 ciMethod* get_method_by_index(const constantPoolHandle& cpool,
136 int method_index, Bytecodes::Code bc,
137 ciInstanceKlass* loading_klass);
138 bool has_Q_signature(const constantPoolHandle& cpool,
139 int klass_index);
140
141 // Implementation methods for loading and constant pool access.
142 ciKlass* get_klass_by_name_impl(ciKlass* accessing_klass,
143 const constantPoolHandle& cpool,
144 ciSymbol* klass_name,
145 bool require_local);
146 ciKlass* get_klass_by_index_impl(const constantPoolHandle& cpool,
147 int klass_index,
148 bool& is_accessible,
149 ciInstanceKlass* loading_klass);
150 ciConstant get_constant_by_index_impl(const constantPoolHandle& cpool,
151 int pool_index, int cache_index,
152 ciInstanceKlass* loading_klass);
153 ciField* get_field_by_index_impl(ciInstanceKlass* loading_klass,
154 int field_index, Bytecodes::Code bc);
155 ciMethod* get_method_by_index_impl(const constantPoolHandle& cpool,
156 int method_index, Bytecodes::Code bc,
157 ciInstanceKlass* loading_klass);
158
159 // Helper methods
187 return _factory->get_symbol(o);
188 }
189 }
190
191 ciMetadata* get_metadata(Metadata* o) {
192 if (o == nullptr) {
193 return nullptr;
194 } else {
195 return _factory->get_metadata(o);
196 }
197 }
198
199 ciMetadata* cached_metadata(Metadata* o) {
200 return _factory->cached_metadata(o);
201 }
202
203 ciInstance* get_instance(oop o) {
204 if (o == nullptr) return nullptr;
205 return get_object(o)->as_instance();
206 }
207 ciFlatArrayKlass* get_flat_array_klass(Klass* o) {
208 if (o == nullptr) return nullptr;
209 return get_metadata(o)->as_flat_array_klass();
210 }
211 ciObjArrayKlass* get_obj_array_klass(Klass* o) {
212 if (o == nullptr) return nullptr;
213 return get_metadata(o)->as_obj_array_klass();
214 }
215 ciTypeArrayKlass* get_type_array_klass(Klass* o) {
216 if (o == nullptr) return nullptr;
217 return get_metadata(o)->as_type_array_klass();
218 }
219 ciKlass* get_klass(Klass* o) {
220 if (o == nullptr) return nullptr;
221 return get_metadata(o)->as_klass();
222 }
223 ciInstanceKlass* get_instance_klass(Klass* o) {
224 if (o == nullptr) return nullptr;
225 return get_metadata(o)->as_instance_klass();
226 }
227 ciMethod* get_method(Method* o) {
228 if (o == nullptr) return nullptr;
229 return get_metadata(o)->as_method();
230 }
487 void set_dyno_loc(const InstanceKlass* ik);
488 void record_best_dyno_loc(const InstanceKlass* ik);
489 bool print_dyno_loc(outputStream* out, const InstanceKlass* ik) const;
490
491 GrowableArray<const InstanceKlass*>* _dyno_klasses;
492 GrowableArray<const char *>* _dyno_locs;
493
494 #define MAX_DYNO_NAME_LENGTH 1024
495 char _dyno_name[MAX_DYNO_NAME_LENGTH+1];
496
497 public:
498 // Dump the compilation replay data for the ciEnv to the stream.
499 void dump_replay_data(int compile_id);
500 void dump_inline_data(int compile_id);
501 void dump_replay_data(outputStream* out);
502 void dump_replay_data_unsafe(outputStream* out);
503 void dump_replay_data_helper(outputStream* out);
504 void dump_compile_data(outputStream* out);
505 void dump_replay_data_version(outputStream* out);
506
507 ciWrapper* make_null_free_wrapper(ciType* type) {
508 return _factory->make_null_free_wrapper(type);
509 }
510
511 const char *dyno_name(const InstanceKlass* ik) const;
512 const char *replay_name(const InstanceKlass* ik) const;
513 const char *replay_name(ciKlass* i) const;
514
515 void record_lambdaform(Thread* thread, oop obj);
516 void record_member(Thread* thread, oop obj);
517 void record_mh(Thread* thread, oop obj);
518 void record_call_site_obj(Thread* thread, oop obj);
519 void record_call_site_method(Thread* thread, Method* adapter);
520 void process_invokedynamic(const constantPoolHandle &cp, int index, JavaThread* thread);
521 void process_invokehandle(const constantPoolHandle &cp, int index, JavaThread* thread);
522 void find_dynamic_call_sites();
523 };
524
525 #endif // SHARE_CI_CIENV_HPP
|