annotate src/share/vm/c1/c1_Compilation.hpp @ 4710:41406797186b

7113012: G1: rename not-fully-young GCs as "mixed" Summary: Renamed partially-young GCs as mixed and fully-young GCs as young. Change all external output that includes those terms (GC log and GC ergo log) as well as any comments, fields, methods, etc. The changeset also includes very minor code tidying up (added some curly brackets). Reviewed-by: johnc, brutisso
author tonyp
date Fri, 16 Dec 2011 02:14:27 -0500
parents 1d1603768966
children 137868b7aa6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
2426
1d1603768966 7010070: Update all 2010 Oracle-changed OpenJDK files to have the proper copyright dates - second pass
trims
parents: 2098
diff changeset
2 * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
25 #ifndef SHARE_VM_C1_C1_COMPILATION_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
26 #define SHARE_VM_C1_C1_COMPILATION_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
28 #include "ci/ciEnv.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
29 #include "code/exceptionHandlerTable.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
30 #include "memory/resourceArea.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
31
0
a61af66fc99e Initial load
duke
parents:
diff changeset
32 class CompilationResourceObj;
a61af66fc99e Initial load
duke
parents:
diff changeset
33 class XHandlers;
a61af66fc99e Initial load
duke
parents:
diff changeset
34 class ExceptionInfo;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 class DebugInformationRecorder;
a61af66fc99e Initial load
duke
parents:
diff changeset
36 class FrameMap;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 class IR;
a61af66fc99e Initial load
duke
parents:
diff changeset
38 class IRScope;
a61af66fc99e Initial load
duke
parents:
diff changeset
39 class Instruction;
a61af66fc99e Initial load
duke
parents:
diff changeset
40 class LinearScan;
a61af66fc99e Initial load
duke
parents:
diff changeset
41 class OopMap;
a61af66fc99e Initial load
duke
parents:
diff changeset
42 class LIR_Emitter;
a61af66fc99e Initial load
duke
parents:
diff changeset
43 class LIR_Assembler;
a61af66fc99e Initial load
duke
parents:
diff changeset
44 class CodeEmitInfo;
a61af66fc99e Initial load
duke
parents:
diff changeset
45 class ciEnv;
a61af66fc99e Initial load
duke
parents:
diff changeset
46 class ciMethod;
a61af66fc99e Initial load
duke
parents:
diff changeset
47 class ValueStack;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 class LIR_OprDesc;
a61af66fc99e Initial load
duke
parents:
diff changeset
49 class C1_MacroAssembler;
a61af66fc99e Initial load
duke
parents:
diff changeset
50 class CFGPrinter;
a61af66fc99e Initial load
duke
parents:
diff changeset
51 typedef LIR_OprDesc* LIR_Opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
52
a61af66fc99e Initial load
duke
parents:
diff changeset
53
a61af66fc99e Initial load
duke
parents:
diff changeset
54 define_array(BasicTypeArray, BasicType)
a61af66fc99e Initial load
duke
parents:
diff changeset
55 define_stack(BasicTypeList, BasicTypeArray)
a61af66fc99e Initial load
duke
parents:
diff changeset
56
a61af66fc99e Initial load
duke
parents:
diff changeset
57 define_array(ExceptionInfoArray, ExceptionInfo*)
a61af66fc99e Initial load
duke
parents:
diff changeset
58 define_stack(ExceptionInfoList, ExceptionInfoArray)
a61af66fc99e Initial load
duke
parents:
diff changeset
59
a61af66fc99e Initial load
duke
parents:
diff changeset
60 class Compilation: public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
61 friend class CompilationResourceObj;
a61af66fc99e Initial load
duke
parents:
diff changeset
62 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
63 // compilation specifics
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
64 Arena* _arena;
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
65 int _next_id;
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
66 int _next_block_id;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
67 AbstractCompiler* _compiler;
a61af66fc99e Initial load
duke
parents:
diff changeset
68 ciEnv* _env;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 ciMethod* _method;
a61af66fc99e Initial load
duke
parents:
diff changeset
70 int _osr_bci;
a61af66fc99e Initial load
duke
parents:
diff changeset
71 IR* _hir;
a61af66fc99e Initial load
duke
parents:
diff changeset
72 int _max_spills;
a61af66fc99e Initial load
duke
parents:
diff changeset
73 FrameMap* _frame_map;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 C1_MacroAssembler* _masm;
a61af66fc99e Initial load
duke
parents:
diff changeset
75 bool _has_exception_handlers;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 bool _has_fpu_code;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 bool _has_unsafe_access;
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
78 bool _would_profile;
1691
4a665be40fd3 6975855: don't emit deopt MH handler in C1 if not required
twisti
parents: 1681
diff changeset
79 bool _has_method_handle_invokes; // True if this method has MethodHandle invokes.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
80 const char* _bailout_msg;
a61af66fc99e Initial load
duke
parents:
diff changeset
81 ExceptionInfoList* _exception_info_list;
a61af66fc99e Initial load
duke
parents:
diff changeset
82 ExceptionHandlerTable _exception_handler_table;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 ImplicitExceptionTable _implicit_exception_table;
a61af66fc99e Initial load
duke
parents:
diff changeset
84 LinearScan* _allocator;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 CodeOffsets _offsets;
a61af66fc99e Initial load
duke
parents:
diff changeset
86 CodeBuffer _code;
a61af66fc99e Initial load
duke
parents:
diff changeset
87
a61af66fc99e Initial load
duke
parents:
diff changeset
88 // compilation helpers
a61af66fc99e Initial load
duke
parents:
diff changeset
89 void initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
90 void build_hir();
a61af66fc99e Initial load
duke
parents:
diff changeset
91 void emit_lir();
a61af66fc99e Initial load
duke
parents:
diff changeset
92
a61af66fc99e Initial load
duke
parents:
diff changeset
93 void emit_code_epilog(LIR_Assembler* assembler);
a61af66fc99e Initial load
duke
parents:
diff changeset
94 int emit_code_body();
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 int compile_java_method();
a61af66fc99e Initial load
duke
parents:
diff changeset
97 void install_code(int frame_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 void compile_method();
a61af66fc99e Initial load
duke
parents:
diff changeset
99
a61af66fc99e Initial load
duke
parents:
diff changeset
100 void generate_exception_handler_table();
a61af66fc99e Initial load
duke
parents:
diff changeset
101
a61af66fc99e Initial load
duke
parents:
diff changeset
102 ExceptionInfoList* exception_info_list() const { return _exception_info_list; }
a61af66fc99e Initial load
duke
parents:
diff changeset
103 ExceptionHandlerTable* exception_handler_table() { return &_exception_handler_table; }
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105 LinearScan* allocator() { return _allocator; }
a61af66fc99e Initial load
duke
parents:
diff changeset
106 void set_allocator(LinearScan* allocator) { _allocator = allocator; }
a61af66fc99e Initial load
duke
parents:
diff changeset
107
a61af66fc99e Initial load
duke
parents:
diff changeset
108 Instruction* _current_instruction; // the instruction currently being processed
a61af66fc99e Initial load
duke
parents:
diff changeset
109 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
110 Instruction* _last_instruction_printed; // the last instruction printed during traversal
a61af66fc99e Initial load
duke
parents:
diff changeset
111 #endif // PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
112
a61af66fc99e Initial load
duke
parents:
diff changeset
113 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // creation
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
115 Compilation(AbstractCompiler* compiler, ciEnv* env, ciMethod* method,
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
116 int osr_bci, BufferBlob* buffer_blob);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
117 ~Compilation();
a61af66fc99e Initial load
duke
parents:
diff changeset
118
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
119
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
120 static Compilation* current() {
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
121 return (Compilation*) ciEnv::current()->compiler_data();
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
122 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
123
a61af66fc99e Initial load
duke
parents:
diff changeset
124 // accessors
a61af66fc99e Initial load
duke
parents:
diff changeset
125 ciEnv* env() const { return _env; }
a61af66fc99e Initial load
duke
parents:
diff changeset
126 AbstractCompiler* compiler() const { return _compiler; }
a61af66fc99e Initial load
duke
parents:
diff changeset
127 bool has_exception_handlers() const { return _has_exception_handlers; }
a61af66fc99e Initial load
duke
parents:
diff changeset
128 bool has_fpu_code() const { return _has_fpu_code; }
a61af66fc99e Initial load
duke
parents:
diff changeset
129 bool has_unsafe_access() const { return _has_unsafe_access; }
a61af66fc99e Initial load
duke
parents:
diff changeset
130 ciMethod* method() const { return _method; }
a61af66fc99e Initial load
duke
parents:
diff changeset
131 int osr_bci() const { return _osr_bci; }
a61af66fc99e Initial load
duke
parents:
diff changeset
132 bool is_osr_compile() const { return osr_bci() >= 0; }
a61af66fc99e Initial load
duke
parents:
diff changeset
133 IR* hir() const { return _hir; }
a61af66fc99e Initial load
duke
parents:
diff changeset
134 int max_spills() const { return _max_spills; }
a61af66fc99e Initial load
duke
parents:
diff changeset
135 FrameMap* frame_map() const { return _frame_map; }
a61af66fc99e Initial load
duke
parents:
diff changeset
136 CodeBuffer* code() { return &_code; }
a61af66fc99e Initial load
duke
parents:
diff changeset
137 C1_MacroAssembler* masm() const { return _masm; }
a61af66fc99e Initial load
duke
parents:
diff changeset
138 CodeOffsets* offsets() { return &_offsets; }
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
139 Arena* arena() { return _arena; }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
140
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
141 // Instruction ids
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
142 int get_next_id() { return _next_id++; }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
143 int number_of_instructions() const { return _next_id; }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
144
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
145 // BlockBegin ids
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
146 int get_next_block_id() { return _next_block_id++; }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
147 int number_of_blocks() const { return _next_block_id; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
148
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // setters
a61af66fc99e Initial load
duke
parents:
diff changeset
150 void set_has_exception_handlers(bool f) { _has_exception_handlers = f; }
a61af66fc99e Initial load
duke
parents:
diff changeset
151 void set_has_fpu_code(bool f) { _has_fpu_code = f; }
a61af66fc99e Initial load
duke
parents:
diff changeset
152 void set_has_unsafe_access(bool f) { _has_unsafe_access = f; }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
153 void set_would_profile(bool f) { _would_profile = f; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // Add a set of exception handlers covering the given PC offset
a61af66fc99e Initial load
duke
parents:
diff changeset
155 void add_exception_handlers_for_pco(int pco, XHandlers* exception_handlers);
a61af66fc99e Initial load
duke
parents:
diff changeset
156 // Statistics gathering
a61af66fc99e Initial load
duke
parents:
diff changeset
157 void notice_inlined_method(ciMethod* method);
a61af66fc99e Initial load
duke
parents:
diff changeset
158
1691
4a665be40fd3 6975855: don't emit deopt MH handler in C1 if not required
twisti
parents: 1681
diff changeset
159 // JSR 292
4a665be40fd3 6975855: don't emit deopt MH handler in C1 if not required
twisti
parents: 1681
diff changeset
160 bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
4a665be40fd3 6975855: don't emit deopt MH handler in C1 if not required
twisti
parents: 1681
diff changeset
161 void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; }
4a665be40fd3 6975855: don't emit deopt MH handler in C1 if not required
twisti
parents: 1681
diff changeset
162
0
a61af66fc99e Initial load
duke
parents:
diff changeset
163 DebugInformationRecorder* debug_info_recorder() const; // = _env->debug_info();
a61af66fc99e Initial load
duke
parents:
diff changeset
164 Dependencies* dependency_recorder() const; // = _env->dependencies()
a61af66fc99e Initial load
duke
parents:
diff changeset
165 ImplicitExceptionTable* implicit_exception_table() { return &_implicit_exception_table; }
a61af66fc99e Initial load
duke
parents:
diff changeset
166
a61af66fc99e Initial load
duke
parents:
diff changeset
167 Instruction* current_instruction() const { return _current_instruction; }
a61af66fc99e Initial load
duke
parents:
diff changeset
168 Instruction* set_current_instruction(Instruction* instr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
169 Instruction* previous = _current_instruction;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 _current_instruction = instr;
a61af66fc99e Initial load
duke
parents:
diff changeset
171 return previous;
a61af66fc99e Initial load
duke
parents:
diff changeset
172 }
a61af66fc99e Initial load
duke
parents:
diff changeset
173
a61af66fc99e Initial load
duke
parents:
diff changeset
174 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
175 void maybe_print_current_instruction();
a61af66fc99e Initial load
duke
parents:
diff changeset
176 #endif // PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
177
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // error handling
a61af66fc99e Initial load
duke
parents:
diff changeset
179 void bailout(const char* msg);
a61af66fc99e Initial load
duke
parents:
diff changeset
180 bool bailed_out() const { return _bailout_msg != NULL; }
a61af66fc99e Initial load
duke
parents:
diff changeset
181 const char* bailout_msg() const { return _bailout_msg; }
a61af66fc99e Initial load
duke
parents:
diff changeset
182
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
183 static int desired_max_code_buffer_size() {
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1584
diff changeset
184 #ifndef PPC
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
185 return (int) NMethodSizeLimit; // default 256K or 512K
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1584
diff changeset
186 #else
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1584
diff changeset
187 // conditional branches on PPC are restricted to 16 bit signed
1899
42a10fc37986 6991577: add IfOp optimization to C1
roland
parents: 1819
diff changeset
188 return MIN2((unsigned int)NMethodSizeLimit,32*K);
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1584
diff changeset
189 #endif
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
190 }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
191 static int desired_max_constant_size() {
1899
42a10fc37986 6991577: add IfOp optimization to C1
roland
parents: 1819
diff changeset
192 return desired_max_code_buffer_size() / 10;
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
193 }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
194
2098
2f9d59b0fa5c 7009268: guarantee(middle - slop > start) failed: need enough space to divide up
bobv
parents: 1972
diff changeset
195 static bool setup_code_buffer(CodeBuffer* cb, int call_stub_estimate);
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
196
0
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // timers
a61af66fc99e Initial load
duke
parents:
diff changeset
198 static void print_timers();
a61af66fc99e Initial load
duke
parents:
diff changeset
199
a61af66fc99e Initial load
duke
parents:
diff changeset
200 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
201 // debugging support.
a61af66fc99e Initial load
duke
parents:
diff changeset
202 // produces a file named c1compileonly in the current directory with
a61af66fc99e Initial load
duke
parents:
diff changeset
203 // directives to compile only the current method and it's inlines.
a61af66fc99e Initial load
duke
parents:
diff changeset
204 // The file can be passed to the command line option -XX:Flags=<filename>
a61af66fc99e Initial load
duke
parents:
diff changeset
205 void compile_only_this_method();
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void compile_only_this_scope(outputStream* st, IRScope* scope);
a61af66fc99e Initial load
duke
parents:
diff changeset
207 void exclude_this_method();
a61af66fc99e Initial load
duke
parents:
diff changeset
208 #endif // PRODUCT
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
209
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
210 bool is_profiling() {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
211 return env()->comp_level() == CompLevel_full_profile ||
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
212 env()->comp_level() == CompLevel_limited_profile;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
213 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
214 bool count_invocations() { return is_profiling(); }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
215 bool count_backedges() { return is_profiling(); }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
216
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
217 // Helpers for generation of profile information
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
218 bool profile_branches() {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
219 return env()->comp_level() == CompLevel_full_profile &&
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
220 C1UpdateMethodData && C1ProfileBranches;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
221 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
222 bool profile_calls() {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
223 return env()->comp_level() == CompLevel_full_profile &&
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
224 C1UpdateMethodData && C1ProfileCalls;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
225 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
226 bool profile_inlined_calls() {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
227 return profile_calls() && C1ProfileInlinedCalls;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
228 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
229 bool profile_checkcasts() {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
230 return env()->comp_level() == CompLevel_full_profile &&
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
231 C1UpdateMethodData && C1ProfileCheckcasts;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1691
diff changeset
232 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
233 };
a61af66fc99e Initial load
duke
parents:
diff changeset
234
a61af66fc99e Initial load
duke
parents:
diff changeset
235
a61af66fc99e Initial load
duke
parents:
diff changeset
236 // Macro definitions for unified bailout-support
a61af66fc99e Initial load
duke
parents:
diff changeset
237 // The methods bailout() and bailed_out() are present in all classes
a61af66fc99e Initial load
duke
parents:
diff changeset
238 // that might bailout, but forward all calls to Compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
239 #define BAILOUT(msg) { bailout(msg); return; }
a61af66fc99e Initial load
duke
parents:
diff changeset
240 #define BAILOUT_(msg, res) { bailout(msg); return res; }
a61af66fc99e Initial load
duke
parents:
diff changeset
241
a61af66fc99e Initial load
duke
parents:
diff changeset
242 #define CHECK_BAILOUT() { if (bailed_out()) return; }
a61af66fc99e Initial load
duke
parents:
diff changeset
243 #define CHECK_BAILOUT_(res) { if (bailed_out()) return res; }
a61af66fc99e Initial load
duke
parents:
diff changeset
244
a61af66fc99e Initial load
duke
parents:
diff changeset
245
a61af66fc99e Initial load
duke
parents:
diff changeset
246 class InstructionMark: public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
247 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
248 Compilation* _compilation;
a61af66fc99e Initial load
duke
parents:
diff changeset
249 Instruction* _previous;
a61af66fc99e Initial load
duke
parents:
diff changeset
250
a61af66fc99e Initial load
duke
parents:
diff changeset
251 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
252 InstructionMark(Compilation* compilation, Instruction* instr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
253 _compilation = compilation;
a61af66fc99e Initial load
duke
parents:
diff changeset
254 _previous = _compilation->set_current_instruction(instr);
a61af66fc99e Initial load
duke
parents:
diff changeset
255 }
a61af66fc99e Initial load
duke
parents:
diff changeset
256 ~InstructionMark() {
a61af66fc99e Initial load
duke
parents:
diff changeset
257 _compilation->set_current_instruction(_previous);
a61af66fc99e Initial load
duke
parents:
diff changeset
258 }
a61af66fc99e Initial load
duke
parents:
diff changeset
259 };
a61af66fc99e Initial load
duke
parents:
diff changeset
260
a61af66fc99e Initial load
duke
parents:
diff changeset
261
a61af66fc99e Initial load
duke
parents:
diff changeset
262 //----------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
263 // Base class for objects allocated by the compiler in the compilation arena
a61af66fc99e Initial load
duke
parents:
diff changeset
264 class CompilationResourceObj ALLOCATION_SUPER_CLASS_SPEC {
a61af66fc99e Initial load
duke
parents:
diff changeset
265 public:
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
266 void* operator new(size_t size) { return Compilation::current()->arena()->Amalloc(size); }
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
267 void* operator new(size_t size, Arena* arena) {
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
268 return arena->Amalloc(size);
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1552
diff changeset
269 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
270 void operator delete(void* p) {} // nothing to do
a61af66fc99e Initial load
duke
parents:
diff changeset
271 };
a61af66fc99e Initial load
duke
parents:
diff changeset
272
a61af66fc99e Initial load
duke
parents:
diff changeset
273
a61af66fc99e Initial load
duke
parents:
diff changeset
274 //----------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
275 // Class for aggregating exception handler information.
a61af66fc99e Initial load
duke
parents:
diff changeset
276
a61af66fc99e Initial load
duke
parents:
diff changeset
277 // Effectively extends XHandlers class with PC offset of
a61af66fc99e Initial load
duke
parents:
diff changeset
278 // potentially exception-throwing instruction.
a61af66fc99e Initial load
duke
parents:
diff changeset
279 // This class is used at the end of the compilation to build the
a61af66fc99e Initial load
duke
parents:
diff changeset
280 // ExceptionHandlerTable.
a61af66fc99e Initial load
duke
parents:
diff changeset
281 class ExceptionInfo: public CompilationResourceObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
282 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
283 int _pco; // PC of potentially exception-throwing instruction
a61af66fc99e Initial load
duke
parents:
diff changeset
284 XHandlers* _exception_handlers; // flat list of exception handlers covering this PC
a61af66fc99e Initial load
duke
parents:
diff changeset
285
a61af66fc99e Initial load
duke
parents:
diff changeset
286 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
287 ExceptionInfo(int pco, XHandlers* exception_handlers)
a61af66fc99e Initial load
duke
parents:
diff changeset
288 : _pco(pco)
a61af66fc99e Initial load
duke
parents:
diff changeset
289 , _exception_handlers(exception_handlers)
a61af66fc99e Initial load
duke
parents:
diff changeset
290 { }
a61af66fc99e Initial load
duke
parents:
diff changeset
291
a61af66fc99e Initial load
duke
parents:
diff changeset
292 int pco() { return _pco; }
a61af66fc99e Initial load
duke
parents:
diff changeset
293 XHandlers* exception_handlers() { return _exception_handlers; }
a61af66fc99e Initial load
duke
parents:
diff changeset
294 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
295
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1899
diff changeset
296 #endif // SHARE_VM_C1_C1_COMPILATION_HPP