51 friend class ciExceptionHandlerStream;
52 friend class ciBytecodeStream;
53 friend class ciMethodHandle;
54 friend class ciReplay;
55
56 private:
57 // General method information.
58 ciFlags _flags;
59 ciSymbol* _name;
60 ciInstanceKlass* _holder;
61 ciSignature* _signature;
62 ciMethodData* _method_data;
63 ciMethodBlocks* _method_blocks;
64
65 // Code attributes.
66 int _code_size;
67 int _max_stack;
68 int _max_locals;
69 vmIntrinsics::ID _intrinsic_id;
70 int _handler_count;
71 int _interpreter_invocation_count;
72 int _interpreter_throwout_count;
73 int _instructions_size;
74 int _size_of_parameters;
75
76 bool _uses_monitors;
77 bool _balanced_monitors;
78 bool _is_c1_compilable;
79 bool _is_c2_compilable;
80 bool _can_be_statically_bound;
81
82 // Lazy fields, filled in on demand
83 address _code;
84 ciExceptionHandler** _exception_handlers;
85
86 // Optional liveness analyzer.
87 MethodLiveness* _liveness;
88 #if defined(COMPILER2) || defined(SHARK)
89 ciTypeFlow* _flow;
90 BCEscapeAnalyzer* _bcea;
151 if (code != Bytecodes::_invokestatic &&
152 code != Bytecodes::_invokedynamic) {
153 arg_size++;
154 }
155 return arg_size;
156 }
157 }
158
159
160 // Method code and related information.
161 address code() { if (_code == NULL) load_code(); return _code; }
162 int code_size() const { check_is_loaded(); return _code_size; }
163 int max_stack() const { check_is_loaded(); return _max_stack; }
164 int max_locals() const { check_is_loaded(); return _max_locals; }
165 vmIntrinsics::ID intrinsic_id() const { check_is_loaded(); return _intrinsic_id; }
166 bool has_exception_handlers() const { check_is_loaded(); return _handler_count > 0; }
167 int exception_table_length() const { check_is_loaded(); return _handler_count; }
168 int interpreter_invocation_count() const { check_is_loaded(); return _interpreter_invocation_count; }
169 int interpreter_throwout_count() const { check_is_loaded(); return _interpreter_throwout_count; }
170 int size_of_parameters() const { check_is_loaded(); return _size_of_parameters; }
171
172 // Code size for inlining decisions.
173 int code_size_for_inlining();
174
175 bool caller_sensitive() { return get_Method()->caller_sensitive(); }
176 bool force_inline() { return get_Method()->force_inline(); }
177 bool dont_inline() { return get_Method()->dont_inline(); }
178
179 int comp_level();
180 int highest_osr_comp_level();
181
182 Bytecodes::Code java_code_at_bci(int bci) {
183 address bcp = code() + bci;
184 return Bytecodes::java_code_at(NULL, bcp);
185 }
186 Bytecodes::Code raw_code_at_bci(int bci) {
187 address bcp = code() + bci;
188 return Bytecodes::code_at(NULL, bcp);
189 }
190 BCEscapeAnalyzer *get_bcea();
|
51 friend class ciExceptionHandlerStream;
52 friend class ciBytecodeStream;
53 friend class ciMethodHandle;
54 friend class ciReplay;
55
56 private:
57 // General method information.
58 ciFlags _flags;
59 ciSymbol* _name;
60 ciInstanceKlass* _holder;
61 ciSignature* _signature;
62 ciMethodData* _method_data;
63 ciMethodBlocks* _method_blocks;
64
65 // Code attributes.
66 int _code_size;
67 int _max_stack;
68 int _max_locals;
69 vmIntrinsics::ID _intrinsic_id;
70 int _handler_count;
71 int _nmethod_age;
72 int _interpreter_invocation_count;
73 int _interpreter_throwout_count;
74 int _instructions_size;
75 int _size_of_parameters;
76
77 bool _uses_monitors;
78 bool _balanced_monitors;
79 bool _is_c1_compilable;
80 bool _is_c2_compilable;
81 bool _can_be_statically_bound;
82
83 // Lazy fields, filled in on demand
84 address _code;
85 ciExceptionHandler** _exception_handlers;
86
87 // Optional liveness analyzer.
88 MethodLiveness* _liveness;
89 #if defined(COMPILER2) || defined(SHARK)
90 ciTypeFlow* _flow;
91 BCEscapeAnalyzer* _bcea;
152 if (code != Bytecodes::_invokestatic &&
153 code != Bytecodes::_invokedynamic) {
154 arg_size++;
155 }
156 return arg_size;
157 }
158 }
159
160
161 // Method code and related information.
162 address code() { if (_code == NULL) load_code(); return _code; }
163 int code_size() const { check_is_loaded(); return _code_size; }
164 int max_stack() const { check_is_loaded(); return _max_stack; }
165 int max_locals() const { check_is_loaded(); return _max_locals; }
166 vmIntrinsics::ID intrinsic_id() const { check_is_loaded(); return _intrinsic_id; }
167 bool has_exception_handlers() const { check_is_loaded(); return _handler_count > 0; }
168 int exception_table_length() const { check_is_loaded(); return _handler_count; }
169 int interpreter_invocation_count() const { check_is_loaded(); return _interpreter_invocation_count; }
170 int interpreter_throwout_count() const { check_is_loaded(); return _interpreter_throwout_count; }
171 int size_of_parameters() const { check_is_loaded(); return _size_of_parameters; }
172 int nmethod_age() const { check_is_loaded(); return _nmethod_age; }
173
174 // Should the method be compiled with an age counter?
175 bool profile_aging() const;
176
177 // Code size for inlining decisions.
178 int code_size_for_inlining();
179
180 bool caller_sensitive() { return get_Method()->caller_sensitive(); }
181 bool force_inline() { return get_Method()->force_inline(); }
182 bool dont_inline() { return get_Method()->dont_inline(); }
183
184 int comp_level();
185 int highest_osr_comp_level();
186
187 Bytecodes::Code java_code_at_bci(int bci) {
188 address bcp = code() + bci;
189 return Bytecodes::java_code_at(NULL, bcp);
190 }
191 Bytecodes::Code raw_code_at_bci(int bci) {
192 address bcp = code() + bci;
193 return Bytecodes::code_at(NULL, bcp);
194 }
195 BCEscapeAnalyzer *get_bcea();
|