annotate src/share/vm/compiler/compileBroker.cpp @ 24234:ea6f94ab283b default tip

Added tag jvmci-0.36 for changeset 8128b98d4736
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Mon, 18 Sep 2017 18:49:45 +0200
parents 1523f2f7832f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 14456
diff changeset
2 * Copyright (c) 1999, 2014, 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: 1538
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1538
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: 1538
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: 1970
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
26 #include "classfile/systemDictionary.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
27 #include "classfile/vmSymbols.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
28 #include "code/codeCache.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
29 #include "compiler/compileBroker.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
30 #include "compiler/compileLog.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
31 #include "compiler/compilerOracle.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
32 #include "interpreter/linkResolver.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
33 #include "memory/allocation.inline.hpp"
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
34 #include "oops/methodData.hpp"
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
35 #include "oops/method.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
36 #include "oops/oop.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
37 #include "prims/nativeLookup.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
38 #include "runtime/arguments.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
39 #include "runtime/compilationPolicy.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
40 #include "runtime/init.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
41 #include "runtime/interfaceSupport.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
42 #include "runtime/javaCalls.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
43 #include "runtime/os.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
44 #include "runtime/sharedRuntime.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
45 #include "runtime/sweeper.hpp"
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
46 #include "trace/tracing.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
47 #include "utilities/dtrace.hpp"
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
48 #include "utilities/events.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
49 #ifdef COMPILER1
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
50 #include "c1/c1_Compiler.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
51 #endif
22298
c28cb37b2e1d Rename JVMCI to INCLUDE_JVMCI.
twisti
parents: 21559
diff changeset
52 #if INCLUDE_JVMCI
23296
f41d4011035d reduced delta against jvmci-9
Doug Simon <doug.simon@oracle.com>
parents: 23295
diff changeset
53 #include "jvmci/jvmciJavaClasses.hpp"
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
54 #include "jvmci/jvmciRuntime.hpp"
16447
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
55 #include "runtime/vframe.hpp"
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
56 #endif
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
57 #ifdef COMPILER2
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
58 #include "opto/c2compiler.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
59 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
60 #ifdef SHARK
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
61 #include "shark/sharkCompiler.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1970
diff changeset
62 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 #ifdef DTRACE_ENABLED
a61af66fc99e Initial load
duke
parents:
diff changeset
65
a61af66fc99e Initial load
duke
parents:
diff changeset
66 // Only bother with this argument setup if dtrace is available
a61af66fc99e Initial load
duke
parents:
diff changeset
67
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
68 #ifndef USDT2
0
a61af66fc99e Initial load
duke
parents:
diff changeset
69 HS_DTRACE_PROBE_DECL8(hotspot, method__compile__begin,
a61af66fc99e Initial load
duke
parents:
diff changeset
70 char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
71 HS_DTRACE_PROBE_DECL9(hotspot, method__compile__end,
a61af66fc99e Initial load
duke
parents:
diff changeset
72 char*, intptr_t, char*, intptr_t, char*, intptr_t, char*, intptr_t, bool);
a61af66fc99e Initial load
duke
parents:
diff changeset
73
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
74 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) \
0
a61af66fc99e Initial load
duke
parents:
diff changeset
75 { \
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
76 Symbol* klass_name = (method)->klass_name(); \
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
77 Symbol* name = (method)->name(); \
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
78 Symbol* signature = (method)->signature(); \
0
a61af66fc99e Initial load
duke
parents:
diff changeset
79 HS_DTRACE_PROBE8(hotspot, method__compile__begin, \
a61af66fc99e Initial load
duke
parents:
diff changeset
80 comp_name, strlen(comp_name), \
a61af66fc99e Initial load
duke
parents:
diff changeset
81 klass_name->bytes(), klass_name->utf8_length(), \
a61af66fc99e Initial load
duke
parents:
diff changeset
82 name->bytes(), name->utf8_length(), \
a61af66fc99e Initial load
duke
parents:
diff changeset
83 signature->bytes(), signature->utf8_length()); \
a61af66fc99e Initial load
duke
parents:
diff changeset
84 }
a61af66fc99e Initial load
duke
parents:
diff changeset
85
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
86 #define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success) \
0
a61af66fc99e Initial load
duke
parents:
diff changeset
87 { \
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
88 Symbol* klass_name = (method)->klass_name(); \
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
89 Symbol* name = (method)->name(); \
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
90 Symbol* signature = (method)->signature(); \
0
a61af66fc99e Initial load
duke
parents:
diff changeset
91 HS_DTRACE_PROBE9(hotspot, method__compile__end, \
a61af66fc99e Initial load
duke
parents:
diff changeset
92 comp_name, strlen(comp_name), \
a61af66fc99e Initial load
duke
parents:
diff changeset
93 klass_name->bytes(), klass_name->utf8_length(), \
a61af66fc99e Initial load
duke
parents:
diff changeset
94 name->bytes(), name->utf8_length(), \
a61af66fc99e Initial load
duke
parents:
diff changeset
95 signature->bytes(), signature->utf8_length(), (success)); \
a61af66fc99e Initial load
duke
parents:
diff changeset
96 }
a61af66fc99e Initial load
duke
parents:
diff changeset
97
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
98 #else /* USDT2 */
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
99
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
100 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name) \
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
101 { \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
102 Symbol* klass_name = (method)->klass_name(); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
103 Symbol* name = (method)->name(); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
104 Symbol* signature = (method)->signature(); \
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
105 HOTSPOT_METHOD_COMPILE_BEGIN( \
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
106 comp_name, strlen(comp_name), \
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
107 (char *) klass_name->bytes(), klass_name->utf8_length(), \
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
108 (char *) name->bytes(), name->utf8_length(), \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
109 (char *) signature->bytes(), signature->utf8_length()); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
110 }
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
111
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
112 #define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success) \
4006
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
113 { \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
114 Symbol* klass_name = (method)->klass_name(); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
115 Symbol* name = (method)->name(); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
116 Symbol* signature = (method)->signature(); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
117 HOTSPOT_METHOD_COMPILE_END( \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
118 comp_name, strlen(comp_name), \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
119 (char *) klass_name->bytes(), klass_name->utf8_length(), \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
120 (char *) name->bytes(), name->utf8_length(), \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
121 (char *) signature->bytes(), signature->utf8_length(), (success)); \
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
122 }
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
123 #endif /* USDT2 */
436b4a3231bf 7098194: integrate macosx-port changes
dcubed
parents: 3441
diff changeset
124
0
a61af66fc99e Initial load
duke
parents:
diff changeset
125 #else // ndef DTRACE_ENABLED
a61af66fc99e Initial load
duke
parents:
diff changeset
126
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
127 #define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name)
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
128 #define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
129
a61af66fc99e Initial load
duke
parents:
diff changeset
130 #endif // ndef DTRACE_ENABLED
a61af66fc99e Initial load
duke
parents:
diff changeset
131
a61af66fc99e Initial load
duke
parents:
diff changeset
132 bool CompileBroker::_initialized = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
133 volatile bool CompileBroker::_should_block = false;
13074
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
134 volatile jint CompileBroker::_print_compilation_warning = 0;
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
135 volatile jint CompileBroker::_should_compile_new_jobs = run_compilation;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
136
a61af66fc99e Initial load
duke
parents:
diff changeset
137 // The installed compiler(s)
a61af66fc99e Initial load
duke
parents:
diff changeset
138 AbstractCompiler* CompileBroker::_compilers[2];
a61af66fc99e Initial load
duke
parents:
diff changeset
139
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
140 // These counters are used to assign an unique ID to each compilation.
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
141 volatile jint CompileBroker::_compilation_id = 0;
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
142 volatile jint CompileBroker::_osr_compilation_id = 0;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
143
a61af66fc99e Initial load
duke
parents:
diff changeset
144 // Debugging information
a61af66fc99e Initial load
duke
parents:
diff changeset
145 int CompileBroker::_last_compile_type = no_compile;
a61af66fc99e Initial load
duke
parents:
diff changeset
146 int CompileBroker::_last_compile_level = CompLevel_none;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 char CompileBroker::_last_method_compiled[CompileBroker::name_buffer_length];
a61af66fc99e Initial load
duke
parents:
diff changeset
148
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // Performance counters
a61af66fc99e Initial load
duke
parents:
diff changeset
150 PerfCounter* CompileBroker::_perf_total_compilation = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
151 PerfCounter* CompileBroker::_perf_osr_compilation = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
152 PerfCounter* CompileBroker::_perf_standard_compilation = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 PerfCounter* CompileBroker::_perf_total_bailout_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
155 PerfCounter* CompileBroker::_perf_total_invalidated_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
156 PerfCounter* CompileBroker::_perf_total_compile_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
157 PerfCounter* CompileBroker::_perf_total_osr_compile_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
158 PerfCounter* CompileBroker::_perf_total_standard_compile_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
159
a61af66fc99e Initial load
duke
parents:
diff changeset
160 PerfCounter* CompileBroker::_perf_sum_osr_bytes_compiled = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
161 PerfCounter* CompileBroker::_perf_sum_standard_bytes_compiled = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
162 PerfCounter* CompileBroker::_perf_sum_nmethod_size = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
163 PerfCounter* CompileBroker::_perf_sum_nmethod_code_size = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
164
a61af66fc99e Initial load
duke
parents:
diff changeset
165 PerfStringVariable* CompileBroker::_perf_last_method = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
166 PerfStringVariable* CompileBroker::_perf_last_failed_method = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
167 PerfStringVariable* CompileBroker::_perf_last_invalidated_method = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
168 PerfVariable* CompileBroker::_perf_last_compile_type = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
169 PerfVariable* CompileBroker::_perf_last_compile_size = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
170 PerfVariable* CompileBroker::_perf_last_failed_type = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
171 PerfVariable* CompileBroker::_perf_last_invalidated_type = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
172
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // Timers and counters for generating statistics
a61af66fc99e Initial load
duke
parents:
diff changeset
174 elapsedTimer CompileBroker::_t_total_compilation;
a61af66fc99e Initial load
duke
parents:
diff changeset
175 elapsedTimer CompileBroker::_t_osr_compilation;
a61af66fc99e Initial load
duke
parents:
diff changeset
176 elapsedTimer CompileBroker::_t_standard_compilation;
a61af66fc99e Initial load
duke
parents:
diff changeset
177
a61af66fc99e Initial load
duke
parents:
diff changeset
178 int CompileBroker::_total_bailout_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
179 int CompileBroker::_total_invalidated_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
180 int CompileBroker::_total_compile_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
181 int CompileBroker::_total_osr_compile_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
182 int CompileBroker::_total_standard_compile_count = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
183
a61af66fc99e Initial load
duke
parents:
diff changeset
184 int CompileBroker::_sum_osr_bytes_compiled = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
185 int CompileBroker::_sum_standard_bytes_compiled = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
186 int CompileBroker::_sum_nmethod_size = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
187 int CompileBroker::_sum_nmethod_code_size = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
188
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
189 long CompileBroker::_peak_compilation_time = 0;
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
190
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
191 CompileQueue* CompileBroker::_c2_compile_queue = NULL;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
192 CompileQueue* CompileBroker::_c1_compile_queue = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
193
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
194 GrowableArray<CompilerThread*>* CompileBroker::_compiler_threads = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
197 class CompilationLog : public StringEventLog {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
198 public:
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
199 CompilationLog() : StringEventLog("Compilation events") {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
200 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
201
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
202 void log_compile(JavaThread* thread, CompileTask* task) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
203 StringLogMessage lm;
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
204 stringStream sstr = lm.stream();
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
205 // msg.time_stamp().update_to(tty->time_stamp().ticks());
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
206 task->print_compilation(&sstr, NULL, true);
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
207 log(thread, "%s", (const char*)lm);
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
208 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
209
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
210 void log_nmethod(JavaThread* thread, nmethod* nm) {
4944
09d00c18e323 7145537: minor tweaks to LogEvents
never
parents: 4875
diff changeset
211 log(thread, "nmethod %d%s " INTPTR_FORMAT " code ["INTPTR_FORMAT ", " INTPTR_FORMAT "]",
09d00c18e323 7145537: minor tweaks to LogEvents
never
parents: 4875
diff changeset
212 nm->compile_id(), nm->is_osr_method() ? "%" : "",
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 14456
diff changeset
213 p2i(nm), p2i(nm->code_begin()), p2i(nm->code_end()));
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
214 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
215
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
216 void log_failure(JavaThread* thread, CompileTask* task, const char* reason, const char* retry_message) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
217 StringLogMessage lm;
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
218 lm.print("%4d COMPILE SKIPPED: %s", task->compile_id(), reason);
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
219 if (retry_message != NULL) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
220 lm.append(" (%s)", retry_message);
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
221 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
222 lm.print("\n");
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
223 log(thread, "%s", (const char*)lm);
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
224 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
225 };
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
226
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
227 static CompilationLog* _compilation_log = NULL;
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
228
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
229 void compileBroker_init() {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
230 if (LogEvents) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
231 _compilation_log = new CompilationLog();
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
232 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
233 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
234
0
a61af66fc99e Initial load
duke
parents:
diff changeset
235 CompileTaskWrapper::CompileTaskWrapper(CompileTask* task) {
a61af66fc99e Initial load
duke
parents:
diff changeset
236 CompilerThread* thread = CompilerThread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
237 thread->set_task(task);
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
238 #if INCLUDE_JVMCI
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
239 if (task->is_blocking() && CompileBroker::compiler(task->comp_level())->is_jvmci()) {
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
240 task->set_jvmci_compiler_thread(thread);
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
241 }
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
242 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
243 CompileLog* log = thread->log();
a61af66fc99e Initial load
duke
parents:
diff changeset
244 if (log != NULL) task->log_task_start(log);
a61af66fc99e Initial load
duke
parents:
diff changeset
245 }
a61af66fc99e Initial load
duke
parents:
diff changeset
246
a61af66fc99e Initial load
duke
parents:
diff changeset
247 CompileTaskWrapper::~CompileTaskWrapper() {
a61af66fc99e Initial load
duke
parents:
diff changeset
248 CompilerThread* thread = CompilerThread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
249 CompileTask* task = thread->task();
a61af66fc99e Initial load
duke
parents:
diff changeset
250 CompileLog* log = thread->log();
a61af66fc99e Initial load
duke
parents:
diff changeset
251 if (log != NULL) task->log_task_done(log);
a61af66fc99e Initial load
duke
parents:
diff changeset
252 thread->set_task(NULL);
a61af66fc99e Initial load
duke
parents:
diff changeset
253 task->set_code_handle(NULL);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
254 thread->set_env(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
255 if (task->is_blocking()) {
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
256 bool free_task = false;
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
257 {
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
258 MutexLocker notifier(task->lock(), thread);
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
259 task->mark_complete();
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
260 #if INCLUDE_JVMCI
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
261 if (CompileBroker::compiler(task->comp_level())->is_jvmci()) {
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
262 if (!task->has_waiter()) {
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
263 // The waiting thread timed out and thus did not free the task.
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
264 free_task = true;
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
265 }
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
266 task->set_jvmci_compiler_thread(NULL);
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
267 }
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
268 #endif
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
269 if (!free_task) {
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
270 // Notify the waiting thread that the compilation has completed.
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
271 task->lock()->notify_all();
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
272 }
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
273 }
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
274 if (free_task) {
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
275 // The task can only be freed once the task lock is released.
22714
9b3b66634d17 use timeout for JVMCI blocking compilation to avoid deadlock between compiler and app thread that submitted the blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22449
diff changeset
276 CompileTask::free(task);
9b3b66634d17 use timeout for JVMCI blocking compilation to avoid deadlock between compiler and app thread that submitted the blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22449
diff changeset
277 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
278 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
279 task->mark_complete();
a61af66fc99e Initial load
duke
parents:
diff changeset
280
a61af66fc99e Initial load
duke
parents:
diff changeset
281 // By convention, the compiling thread is responsible for
a61af66fc99e Initial load
duke
parents:
diff changeset
282 // recycling a non-blocking CompileTask.
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
283 CompileTask::free(task);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
284 }
a61af66fc99e Initial load
duke
parents:
diff changeset
285 }
a61af66fc99e Initial load
duke
parents:
diff changeset
286
a61af66fc99e Initial load
duke
parents:
diff changeset
287
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
288 CompileTask* CompileTask::_task_free_list = NULL;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
289 #ifdef ASSERT
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
290 int CompileTask::_num_allocated_tasks = 0;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
291 #endif
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
292 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
293 * Allocate a CompileTask, from the free list if possible.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
294 */
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
295 CompileTask* CompileTask::allocate() {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
296 MutexLocker locker(CompileTaskAlloc_lock);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
297 CompileTask* task = NULL;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
298
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
299 if (_task_free_list != NULL) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
300 task = _task_free_list;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
301 _task_free_list = task->next();
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
302 task->set_next(NULL);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
303 } else {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
304 task = new CompileTask();
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
305 DEBUG_ONLY(_num_allocated_tasks++;)
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
306 NOT_JVMCI(assert (_num_allocated_tasks < 10000, "Leaking compilation tasks?");)
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
307 task->set_next(NULL);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
308 task->set_is_free(true);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
309 }
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
310 assert(task->is_free(), "Task must be free.");
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
311 task->set_is_free(false);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
312 return task;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
313 }
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
314
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
315
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
316 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
317 * Add a task to the free list.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
318 */
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
319 void CompileTask::free(CompileTask* task) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
320 MutexLocker locker(CompileTaskAlloc_lock);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
321 if (!task->is_free()) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
322 task->set_code(NULL);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
323 assert(!task->lock()->is_locked(), "Should not be locked when freed");
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
324 JNIHandles::destroy_global(task->_method_holder);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
325 JNIHandles::destroy_global(task->_hot_method_holder);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
326
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
327 task->set_is_free(true);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
328 task->set_next(_task_free_list);
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
329 _task_free_list = task;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
330 }
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
331 }
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
332
0
a61af66fc99e Initial load
duke
parents:
diff changeset
333 void CompileTask::initialize(int compile_id,
a61af66fc99e Initial load
duke
parents:
diff changeset
334 methodHandle method,
a61af66fc99e Initial load
duke
parents:
diff changeset
335 int osr_bci,
a61af66fc99e Initial load
duke
parents:
diff changeset
336 int comp_level,
a61af66fc99e Initial load
duke
parents:
diff changeset
337 methodHandle hot_method,
a61af66fc99e Initial load
duke
parents:
diff changeset
338 int hot_count,
a61af66fc99e Initial load
duke
parents:
diff changeset
339 const char* comment,
a61af66fc99e Initial load
duke
parents:
diff changeset
340 bool is_blocking) {
a61af66fc99e Initial load
duke
parents:
diff changeset
341 assert(!_lock->is_locked(), "bad locking");
a61af66fc99e Initial load
duke
parents:
diff changeset
342
a61af66fc99e Initial load
duke
parents:
diff changeset
343 _compile_id = compile_id;
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
344 _method = method();
7409
30866cd626b0 8004883: NPG: clean up anonymous class fix
coleenp
parents: 7185
diff changeset
345 _method_holder = JNIHandles::make_global(method->method_holder()->klass_holder());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
346 _osr_bci = osr_bci;
a61af66fc99e Initial load
duke
parents:
diff changeset
347 _is_blocking = is_blocking;
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
348 #if INCLUDE_JVMCI
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
349 _has_waiter = CompileBroker::compiler(comp_level)->is_jvmci();
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
350 _jvmci_compiler_thread = NULL;
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
351 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
352 _comp_level = comp_level;
a61af66fc99e Initial load
duke
parents:
diff changeset
353 _num_inlined_bytecodes = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
354
a61af66fc99e Initial load
duke
parents:
diff changeset
355 _is_complete = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
356 _is_success = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
357 _code_handle = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
358
a61af66fc99e Initial load
duke
parents:
diff changeset
359 _hot_method = NULL;
7185
90273fc0a981 8000662: NPG: nashorn ant clean test262 out-of-memory with Java heap
coleenp
parents: 6940
diff changeset
360 _hot_method_holder = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
361 _hot_count = hot_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
362 _time_queued = 0; // tidy
a61af66fc99e Initial load
duke
parents:
diff changeset
363 _comment = comment;
20469
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
364 _failure_reason = NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
365
a61af66fc99e Initial load
duke
parents:
diff changeset
366 if (LogCompilation) {
a61af66fc99e Initial load
duke
parents:
diff changeset
367 _time_queued = os::elapsed_counter();
a61af66fc99e Initial load
duke
parents:
diff changeset
368 if (hot_method.not_null()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
369 if (hot_method == method) {
a61af66fc99e Initial load
duke
parents:
diff changeset
370 _hot_method = _method;
a61af66fc99e Initial load
duke
parents:
diff changeset
371 } else {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
372 _hot_method = hot_method();
7185
90273fc0a981 8000662: NPG: nashorn ant clean test262 out-of-memory with Java heap
coleenp
parents: 6940
diff changeset
373 // only add loader or mirror if different from _method_holder
7409
30866cd626b0 8004883: NPG: clean up anonymous class fix
coleenp
parents: 7185
diff changeset
374 _hot_method_holder = JNIHandles::make_global(hot_method->method_holder()->klass_holder());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
375 }
a61af66fc99e Initial load
duke
parents:
diff changeset
376 }
a61af66fc99e Initial load
duke
parents:
diff changeset
377 }
a61af66fc99e Initial load
duke
parents:
diff changeset
378
a61af66fc99e Initial load
duke
parents:
diff changeset
379 _next = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
380 }
a61af66fc99e Initial load
duke
parents:
diff changeset
381
a61af66fc99e Initial load
duke
parents:
diff changeset
382 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
383 // CompileTask::code/set_code
a61af66fc99e Initial load
duke
parents:
diff changeset
384 nmethod* CompileTask::code() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
385 if (_code_handle == NULL) return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
386 return _code_handle->code();
a61af66fc99e Initial load
duke
parents:
diff changeset
387 }
a61af66fc99e Initial load
duke
parents:
diff changeset
388 void CompileTask::set_code(nmethod* nm) {
a61af66fc99e Initial load
duke
parents:
diff changeset
389 if (_code_handle == NULL && nm == NULL) return;
a61af66fc99e Initial load
duke
parents:
diff changeset
390 guarantee(_code_handle != NULL, "");
a61af66fc99e Initial load
duke
parents:
diff changeset
391 _code_handle->set_code(nm);
a61af66fc99e Initial load
duke
parents:
diff changeset
392 if (nm == NULL) _code_handle = NULL; // drop the handle also
a61af66fc99e Initial load
duke
parents:
diff changeset
393 }
a61af66fc99e Initial load
duke
parents:
diff changeset
394
a61af66fc99e Initial load
duke
parents:
diff changeset
395
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
396 void CompileTask::mark_on_stack() {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
397 // Mark these methods as something redefine classes cannot remove.
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
398 _method->set_on_stack(true);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
399 if (_hot_method != NULL) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
400 _hot_method->set_on_stack(true);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
401 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
402 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
403
0
a61af66fc99e Initial load
duke
parents:
diff changeset
404 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
405 // CompileTask::print
a61af66fc99e Initial load
duke
parents:
diff changeset
406 void CompileTask::print() {
a61af66fc99e Initial load
duke
parents:
diff changeset
407 tty->print("<CompileTask compile_id=%d ", _compile_id);
a61af66fc99e Initial load
duke
parents:
diff changeset
408 tty->print("method=");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
409 _method->print_name(tty);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
410 tty->print_cr(" osr_bci=%d is_blocking=%s is_complete=%s is_success=%s>",
a61af66fc99e Initial load
duke
parents:
diff changeset
411 _osr_bci, bool_to_str(_is_blocking),
a61af66fc99e Initial load
duke
parents:
diff changeset
412 bool_to_str(_is_complete), bool_to_str(_is_success));
a61af66fc99e Initial load
duke
parents:
diff changeset
413 }
a61af66fc99e Initial load
duke
parents:
diff changeset
414
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
415
0
a61af66fc99e Initial load
duke
parents:
diff changeset
416 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
417 // CompileTask::print_line_on_error
a61af66fc99e Initial load
duke
parents:
diff changeset
418 //
a61af66fc99e Initial load
duke
parents:
diff changeset
419 // This function is called by fatal error handler when the thread
a61af66fc99e Initial load
duke
parents:
diff changeset
420 // causing troubles is a compiler thread.
a61af66fc99e Initial load
duke
parents:
diff changeset
421 //
a61af66fc99e Initial load
duke
parents:
diff changeset
422 // Do not grab any lock, do not allocate memory.
a61af66fc99e Initial load
duke
parents:
diff changeset
423 //
a61af66fc99e Initial load
duke
parents:
diff changeset
424 // Otherwise it's the same as CompileTask::print_line()
a61af66fc99e Initial load
duke
parents:
diff changeset
425 //
a61af66fc99e Initial load
duke
parents:
diff changeset
426 void CompileTask::print_line_on_error(outputStream* st, char* buf, int buflen) {
a61af66fc99e Initial load
duke
parents:
diff changeset
427 // print compiler name
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
428 st->print("%s:", CompileBroker::compiler_name(comp_level()));
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
429 print_compilation(st);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
430 }
a61af66fc99e Initial load
duke
parents:
diff changeset
431
a61af66fc99e Initial load
duke
parents:
diff changeset
432 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
433 // CompileTask::print_line
a61af66fc99e Initial load
duke
parents:
diff changeset
434 void CompileTask::print_line() {
a61af66fc99e Initial load
duke
parents:
diff changeset
435 ttyLocker ttyl; // keep the following output all in one block
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
436 print_compilation();
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
437 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
438
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
439
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
440 // ------------------------------------------------------------------
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
441 // CompileTask::print_compilation_impl
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
442 void CompileTask::print_compilation_impl(outputStream* st, Method* method, int compile_id, int comp_level,
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
443 bool is_osr_method, int osr_bci, bool is_blocking,
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
444 const char* msg, bool short_form) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
445 if (!short_form) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
446 st->print("%7d ", (int) st->time_stamp().milliseconds()); // print timestamp
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
447 }
15494
e20a45d17181 Move CIPrintCompilerName handling into CompileTask::print_compilation_impl
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15487
diff changeset
448 // print compiler name if requested
16180
404d2e86488a CIPrintCompilerName: compiler name should be printed on supplied stream
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16145
diff changeset
449 if (CIPrintCompilerName) st->print("%s:", CompileBroker::compiler_name(comp_level));
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
450 st->print("%4d ", compile_id); // print compilation number
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
451
3441
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
452 // For unloaded methods the transition to zombie occurs after the
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
453 // method is cleared so it's impossible to report accurate
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
454 // information for that case.
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
455 bool is_synchronized = false;
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
456 bool has_exception_handler = false;
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
457 bool is_native = false;
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
458 if (method != NULL) {
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
459 is_synchronized = method->is_synchronized();
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
460 has_exception_handler = method->has_exception_handler();
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
461 is_native = method->is_native();
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
462 }
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
463 // method attributes
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
464 const char compile_type = is_osr_method ? '%' : ' ';
3441
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
465 const char sync_char = is_synchronized ? 's' : ' ';
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
466 const char exception_char = has_exception_handler ? '!' : ' ';
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
467 const char blocking_char = is_blocking ? 'b' : ' ';
3441
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
468 const char native_char = is_native ? 'n' : ' ';
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
469
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
470 // print method attributes
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
471 st->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, native_char);
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
472
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
473 if (TieredCompilation) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
474 if (comp_level != -1) st->print("%d ", comp_level);
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
475 else st->print("- ");
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
476 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
477 st->print(" "); // more indent
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
478
3441
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
479 if (method == NULL) {
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
480 st->print("(method)");
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
481 } else {
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
482 method->print_short_name(st);
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
483 if (is_osr_method) {
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
484 st->print(" @ %d", osr_bci);
f56542cb325a 7050554: JSR 292 - need optimization for selectAlternative
never
parents: 3294
diff changeset
485 }
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
486 if (method->is_native())
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
487 st->print(" (native)");
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
488 else
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
489 st->print(" (%d bytes)", method->code_size());
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
490 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
491
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
492 if (msg != NULL) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
493 st->print(" %s", msg);
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
494 }
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
495 if (!short_form) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
496 st->cr();
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
497 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
498 }
a61af66fc99e Initial load
duke
parents:
diff changeset
499
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
500 // ------------------------------------------------------------------
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
501 // CompileTask::print_inlining
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
502 void CompileTask::print_inlining(outputStream* st, ciMethod* method, int inline_level, int bci, const char* msg) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
503 // 1234567
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
504 st->print(" "); // print timestamp
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
505 // 1234
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
506 st->print(" "); // print compilation number
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
507
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
508 // method attributes
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
509 if (method->is_loaded()) {
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
510 const char sync_char = method->is_synchronized() ? 's' : ' ';
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
511 const char exception_char = method->has_exception_handlers() ? '!' : ' ';
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
512 const char monitors_char = method->has_monitor_bytecodes() ? 'm' : ' ';
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
513
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
514 // print method attributes
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
515 st->print(" %c%c%c ", sync_char, exception_char, monitors_char);
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
516 } else {
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
517 // %s!bn
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
518 st->print(" "); // print method attributes
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
519 }
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
520
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
521 if (TieredCompilation) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
522 st->print(" ");
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
523 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
524 st->print(" "); // more indent
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
525 st->print(" "); // initial inlining indent
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
526
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
527 for (int i = 0; i < inline_level; i++) st->print(" ");
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
528
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
529 st->print("@ %d ", bci); // print bci
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
530 method->print_short_name(st);
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
531 if (method->is_loaded())
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
532 st->print(" (%d bytes)", method->code_size());
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
533 else
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
534 st->print(" (not loaded)");
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
535
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
536 if (msg != NULL) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
537 st->print(" %s", msg);
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
538 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
539 st->cr();
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
540 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
541
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
542 // ------------------------------------------------------------------
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
543 // CompileTask::print_inline_indent
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
544 void CompileTask::print_inline_indent(int inline_level, outputStream* st) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
545 // 1234567
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
546 st->print(" "); // print timestamp
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
547 // 1234
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
548 st->print(" "); // print compilation number
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
549 // %s!bn
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
550 st->print(" "); // print method attributes
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
551 if (TieredCompilation) {
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
552 st->print(" ");
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
553 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
554 st->print(" "); // more indent
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
555 st->print(" "); // initial inlining indent
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
556 for (int i = 0; i < inline_level; i++) st->print(" ");
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
557 }
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
558
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
559 // ------------------------------------------------------------------
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
560 // CompileTask::print_compilation
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
561 void CompileTask::print_compilation(outputStream* st, const char* msg, bool short_form) {
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
562 bool is_osr_method = osr_bci() != InvocationEntryBci;
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
563 print_compilation_impl(st, method(), compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking(), msg, short_form);
2405
3d58a4983660 7022998: JSR 292 recursive method handle calls inline themselves infinitely
twisti
parents: 2403
diff changeset
564 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
565
a61af66fc99e Initial load
duke
parents:
diff changeset
566 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
567 // CompileTask::log_task
a61af66fc99e Initial load
duke
parents:
diff changeset
568 void CompileTask::log_task(xmlStream* log) {
a61af66fc99e Initial load
duke
parents:
diff changeset
569 Thread* thread = Thread::current();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
570 methodHandle method(thread, this->method());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
571 ResourceMark rm(thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
572
a61af66fc99e Initial load
duke
parents:
diff changeset
573 // <task id='9' method='M' osr_bci='X' level='1' blocking='1' stamp='1.234'>
8730
b7c2c5b2572c 8005772: Stubs report compile id -1 in phase events
neliasso
parents: 7998
diff changeset
574 log->print(" compile_id='%d'", _compile_id);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
575 if (_osr_bci != CompileBroker::standard_entry_bci) {
a61af66fc99e Initial load
duke
parents:
diff changeset
576 log->print(" compile_kind='osr'"); // same as nmethod::compile_kind
a61af66fc99e Initial load
duke
parents:
diff changeset
577 } // else compile_kind='c2c'
a61af66fc99e Initial load
duke
parents:
diff changeset
578 if (!method.is_null()) log->method(method);
a61af66fc99e Initial load
duke
parents:
diff changeset
579 if (_osr_bci != CompileBroker::standard_entry_bci) {
a61af66fc99e Initial load
duke
parents:
diff changeset
580 log->print(" osr_bci='%d'", _osr_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
581 }
15487
07fac8558d7b update state flag after initialization to allow other compiler threads to execute
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15463
diff changeset
582 // Always print the level in tiered.
07fac8558d7b update state flag after initialization to allow other compiler threads to execute
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 15463
diff changeset
583 if (_comp_level != CompLevel_highest_tier || TieredCompilation) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
584 log->print(" level='%d'", _comp_level);
a61af66fc99e Initial load
duke
parents:
diff changeset
585 }
a61af66fc99e Initial load
duke
parents:
diff changeset
586 if (_is_blocking) {
a61af66fc99e Initial load
duke
parents:
diff changeset
587 log->print(" blocking='1'");
a61af66fc99e Initial load
duke
parents:
diff changeset
588 }
a61af66fc99e Initial load
duke
parents:
diff changeset
589 log->stamp();
a61af66fc99e Initial load
duke
parents:
diff changeset
590 }
a61af66fc99e Initial load
duke
parents:
diff changeset
591
a61af66fc99e Initial load
duke
parents:
diff changeset
592
a61af66fc99e Initial load
duke
parents:
diff changeset
593 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
594 // CompileTask::log_task_queued
a61af66fc99e Initial load
duke
parents:
diff changeset
595 void CompileTask::log_task_queued() {
a61af66fc99e Initial load
duke
parents:
diff changeset
596 Thread* thread = Thread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
597 ttyLocker ttyl;
a61af66fc99e Initial load
duke
parents:
diff changeset
598 ResourceMark rm(thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
599
a61af66fc99e Initial load
duke
parents:
diff changeset
600 xtty->begin_elem("task_queued");
a61af66fc99e Initial load
duke
parents:
diff changeset
601 log_task(xtty);
a61af66fc99e Initial load
duke
parents:
diff changeset
602 if (_comment != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
603 xtty->print(" comment='%s'", _comment);
a61af66fc99e Initial load
duke
parents:
diff changeset
604 }
a61af66fc99e Initial load
duke
parents:
diff changeset
605 if (_hot_method != NULL) {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
606 methodHandle hot(thread, _hot_method);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
607 methodHandle method(thread, _method);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
608 if (hot() != method()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
609 xtty->method(hot);
a61af66fc99e Initial load
duke
parents:
diff changeset
610 }
a61af66fc99e Initial load
duke
parents:
diff changeset
611 }
a61af66fc99e Initial load
duke
parents:
diff changeset
612 if (_hot_count != 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
613 xtty->print(" hot_count='%d'", _hot_count);
a61af66fc99e Initial load
duke
parents:
diff changeset
614 }
a61af66fc99e Initial load
duke
parents:
diff changeset
615 xtty->end_elem();
a61af66fc99e Initial load
duke
parents:
diff changeset
616 }
a61af66fc99e Initial load
duke
parents:
diff changeset
617
a61af66fc99e Initial load
duke
parents:
diff changeset
618
a61af66fc99e Initial load
duke
parents:
diff changeset
619 // ------------------------------------------------------------------
19943
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
620 // CompileTask::log_task_dequeued
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
621 void CompileTask::log_task_dequeued(const char* comment) {
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
622 if (LogCompilation && xtty != NULL) {
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
623 Thread* thread = Thread::current();
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
624 ttyLocker ttyl;
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
625 ResourceMark rm(thread);
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
626
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
627 xtty->begin_elem("task_dequeued");
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
628 log_task(xtty);
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
629 if (comment != NULL) {
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
630 xtty->print(" comment='%s'", comment);
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
631 }
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
632 xtty->end_elem();
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
633 }
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
634 }
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
635
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
636
5119e7f07d93 Log dequeue of methods from CompileQueue
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19895
diff changeset
637 // ------------------------------------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
638 // CompileTask::log_task_start
a61af66fc99e Initial load
duke
parents:
diff changeset
639 void CompileTask::log_task_start(CompileLog* log) {
a61af66fc99e Initial load
duke
parents:
diff changeset
640 log->begin_head("task");
a61af66fc99e Initial load
duke
parents:
diff changeset
641 log_task(log);
a61af66fc99e Initial load
duke
parents:
diff changeset
642 log->end_head();
a61af66fc99e Initial load
duke
parents:
diff changeset
643 }
a61af66fc99e Initial load
duke
parents:
diff changeset
644
a61af66fc99e Initial load
duke
parents:
diff changeset
645
a61af66fc99e Initial load
duke
parents:
diff changeset
646 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
647 // CompileTask::log_task_done
a61af66fc99e Initial load
duke
parents:
diff changeset
648 void CompileTask::log_task_done(CompileLog* log) {
a61af66fc99e Initial load
duke
parents:
diff changeset
649 Thread* thread = Thread::current();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
650 methodHandle method(thread, this->method());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
651 ResourceMark rm(thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
652
20469
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
653 if (!_is_success) {
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
654 const char* reason = _failure_reason != NULL ? _failure_reason : "unknown";
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
655 log->elem("failure reason='%s'", reason);
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
656 }
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
657
0
a61af66fc99e Initial load
duke
parents:
diff changeset
658 // <task_done ... stamp='1.234'> </task>
a61af66fc99e Initial load
duke
parents:
diff changeset
659 nmethod* nm = code();
a61af66fc99e Initial load
duke
parents:
diff changeset
660 log->begin_elem("task_done success='%d' nmsize='%d' count='%d'",
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1728
diff changeset
661 _is_success, nm == NULL ? 0 : nm->content_size(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
662 method->invocation_count());
a61af66fc99e Initial load
duke
parents:
diff changeset
663 int bec = method->backedge_count();
a61af66fc99e Initial load
duke
parents:
diff changeset
664 if (bec != 0) log->print(" backedge_count='%d'", bec);
a61af66fc99e Initial load
duke
parents:
diff changeset
665 // Note: "_is_complete" is about to be set, but is not.
a61af66fc99e Initial load
duke
parents:
diff changeset
666 if (_num_inlined_bytecodes != 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
667 log->print(" inlined_bytes='%d'", _num_inlined_bytecodes);
a61af66fc99e Initial load
duke
parents:
diff changeset
668 }
a61af66fc99e Initial load
duke
parents:
diff changeset
669 log->stamp();
a61af66fc99e Initial load
duke
parents:
diff changeset
670 log->end_elem();
a61af66fc99e Initial load
duke
parents:
diff changeset
671 log->tail("task");
a61af66fc99e Initial load
duke
parents:
diff changeset
672 log->clear_identities(); // next task will have different CI
a61af66fc99e Initial load
duke
parents:
diff changeset
673 if (log->unflushed_count() > 2000) {
a61af66fc99e Initial load
duke
parents:
diff changeset
674 log->flush();
a61af66fc99e Initial load
duke
parents:
diff changeset
675 }
a61af66fc99e Initial load
duke
parents:
diff changeset
676 log->mark_file_end();
a61af66fc99e Initial load
duke
parents:
diff changeset
677 }
a61af66fc99e Initial load
duke
parents:
diff changeset
678
a61af66fc99e Initial load
duke
parents:
diff changeset
679
a61af66fc99e Initial load
duke
parents:
diff changeset
680
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
681 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
682 * Add a CompileTask to a CompileQueue
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
683 */
0
a61af66fc99e Initial load
duke
parents:
diff changeset
684 void CompileQueue::add(CompileTask* task) {
a61af66fc99e Initial load
duke
parents:
diff changeset
685 assert(lock()->owned_by_self(), "must own lock");
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
686 assert(!CompileBroker::is_compilation_disabled_forever(), "Do not add task if compilation is turned off forever");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
687
a61af66fc99e Initial load
duke
parents:
diff changeset
688 task->set_next(NULL);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
689 task->set_prev(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
690
a61af66fc99e Initial load
duke
parents:
diff changeset
691 if (_last == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
692 // The compile queue is empty.
a61af66fc99e Initial load
duke
parents:
diff changeset
693 assert(_first == NULL, "queue is empty");
a61af66fc99e Initial load
duke
parents:
diff changeset
694 _first = task;
a61af66fc99e Initial load
duke
parents:
diff changeset
695 _last = task;
a61af66fc99e Initial load
duke
parents:
diff changeset
696 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
697 // Append the task to the queue.
a61af66fc99e Initial load
duke
parents:
diff changeset
698 assert(_last->next() == NULL, "not last");
a61af66fc99e Initial load
duke
parents:
diff changeset
699 _last->set_next(task);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
700 task->set_prev(_last);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
701 _last = task;
a61af66fc99e Initial load
duke
parents:
diff changeset
702 }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
703 ++_size;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
704
a61af66fc99e Initial load
duke
parents:
diff changeset
705 // Mark the method as being in the compile queue.
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
706 task->method()->set_queued_for_compilation();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
707
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
708 NOT_PRODUCT(print();)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
709
a61af66fc99e Initial load
duke
parents:
diff changeset
710 if (LogCompilation && xtty != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
711 task->log_task_queued();
a61af66fc99e Initial load
duke
parents:
diff changeset
712 }
a61af66fc99e Initial load
duke
parents:
diff changeset
713
a61af66fc99e Initial load
duke
parents:
diff changeset
714 // Notify CompilerThreads that a task is available.
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
715 lock()->notify_all();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
716 }
a61af66fc99e Initial load
duke
parents:
diff changeset
717
20590
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
718 /**
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
719 * Empties compilation queue by putting all compilation tasks onto
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
720 * a freelist. Furthermore, the method wakes up all threads that are
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
721 * waiting on a compilation task to finish. This can happen if background
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
722 * compilation is disabled.
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
723 */
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
724 void CompileQueue::free_all() {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
725 MutexLocker mu(lock());
20590
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
726 CompileTask* next = _first;
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
727
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
728 // Iterate over all tasks in the compile queue
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
729 while (next != NULL) {
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
730 CompileTask* current = next;
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
731 next = current->next();
20591
28051f14c328 8043158: Crash in CodeSweeperSweepNoFlushTest in CompileQueue::free_all()
anoll
parents: 20590
diff changeset
732 {
28051f14c328 8043158: Crash in CodeSweeperSweepNoFlushTest in CompileQueue::free_all()
anoll
parents: 20590
diff changeset
733 // Wake up thread that blocks on the compile task.
28051f14c328 8043158: Crash in CodeSweeperSweepNoFlushTest in CompileQueue::free_all()
anoll
parents: 20590
diff changeset
734 MutexLocker ct_lock(current->lock());
28051f14c328 8043158: Crash in CodeSweeperSweepNoFlushTest in CompileQueue::free_all()
anoll
parents: 20590
diff changeset
735 current->lock()->notify();
28051f14c328 8043158: Crash in CodeSweeperSweepNoFlushTest in CompileQueue::free_all()
anoll
parents: 20590
diff changeset
736 }
20590
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
737 // Put the task back on the freelist.
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
738 CompileTask::free(current);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
739 }
20590
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
740 _first = NULL;
c47fcf523fff 8042428: CompileQueue::free_all() code is incorrect
anoll
parents: 20589
diff changeset
741
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
742 // Wake up all threads that block on the queue.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
743 lock()->notify_all();
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
744 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
745
0
a61af66fc99e Initial load
duke
parents:
diff changeset
746 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
747 // CompileQueue::get
a61af66fc99e Initial load
duke
parents:
diff changeset
748 //
a61af66fc99e Initial load
duke
parents:
diff changeset
749 // Get the next CompileTask from a CompileQueue
a61af66fc99e Initial load
duke
parents:
diff changeset
750 CompileTask* CompileQueue::get() {
1538
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
751 NMethodSweeper::possibly_sweep();
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
752
0
a61af66fc99e Initial load
duke
parents:
diff changeset
753 MutexLocker locker(lock());
12324
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
754 // If _first is NULL we have no more compile jobs. There are two reasons for
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
755 // having no compile jobs: First, we compiled everything we wanted. Second,
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
756 // we ran out of code cache so compilation has been disabled. In the latter
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
757 // case we perform code cache sweeps to free memory such that we can re-enable
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
758 // compilation.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
759 while (_first == NULL) {
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
760 // Exit loop if compilation is disabled forever
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
761 if (CompileBroker::is_compilation_disabled_forever()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
762 return NULL;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
763 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
764
12324
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
765 if (UseCodeCacheFlushing && !CompileBroker::should_compile_new_jobs()) {
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
766 // Wait a certain amount of time to possibly do another sweep.
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
767 // We must wait until stack scanning has happened so that we can
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
768 // transition a method's state from 'not_entrant' to 'zombie'.
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
769 long wait_time = NmethodSweepCheckInterval * 1000;
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
770 if (FLAG_IS_DEFAULT(NmethodSweepCheckInterval)) {
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
771 // Only one thread at a time can do sweeping. Scale the
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
772 // wait time according to the number of compiler threads.
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
773 // As a result, the next sweep is likely to happen every 100ms
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
774 // with an arbitrary number of threads that do sweeping.
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
775 wait_time = 100 * CICompilerCount;
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
776 }
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
777 bool timeout = lock()->wait(!Mutex::_no_safepoint_check_flag, wait_time);
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
778 if (timeout) {
1538
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
779 MutexUnlocker ul(lock());
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
780 NMethodSweeper::possibly_sweep();
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
781 }
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
782 } else {
12324
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
783 // If there are no compilation tasks and we can compile new jobs
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
784 // (i.e., there is enough free space in the code cache) there is
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
785 // no need to invoke the sweeper. As a result, the hotness of methods
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
786 // remains unchanged. This behavior is desired, since we want to keep
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
787 // the stable state, i.e., we do not want to evict methods from the
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
788 // code cache if it is unnecessary.
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
789 // We need a timed wait here, since compiler threads can exit if compilation
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
790 // is disabled forever. We use 5 seconds wait time; the exiting of compiler threads
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
791 // is not critical and we do not want idle compiler threads to wake up too often.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
792 lock()->wait(!Mutex::_no_safepoint_check_flag, 5*1000);
1538
bfe29ec02863 6950075: nmethod sweeper should operate concurrently
never
parents: 1353
diff changeset
793 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
794 }
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
795
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
796 if (CompileBroker::is_compilation_disabled_forever()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
797 return NULL;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
798 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
799
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
800 CompileTask* task;
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
801 {
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
802 No_Safepoint_Verifier nsv;
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
803 task = CompilationPolicy::policy()->select_task(this);
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
804 }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
805 remove(task);
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
806 purge_stale_tasks(); // may temporarily release MCQ lock
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
807 return task;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
808 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
809
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
810 // Clean & deallocate stale compile tasks.
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
811 // Temporarily releases MethodCompileQueue lock.
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
812 void CompileQueue::purge_stale_tasks() {
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
813 assert(lock()->owned_by_self(), "must own lock");
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
814 if (_first_stale != NULL) {
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
815 // Stale tasks are purged when MCQ lock is released,
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
816 // but _first_stale updates are protected by MCQ lock.
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
817 // Once task processing starts and MCQ lock is released,
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
818 // other compiler threads can reuse _first_stale.
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
819 CompileTask* head = _first_stale;
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
820 _first_stale = NULL;
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
821 {
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
822 MutexUnlocker ul(lock());
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
823 for (CompileTask* task = head; task != NULL; ) {
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
824 CompileTask* next_task = task->next();
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
825 CompileTaskWrapper ctw(task); // Frees the task
20469
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
826 task->set_failure_reason("stale task");
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
827 task = next_task;
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
828 }
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
829 }
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
830 }
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
831 }
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
832
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
833 void CompileQueue::remove(CompileTask* task) {
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
834 assert(lock()->owned_by_self(), "must own lock");
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
835 if (task->prev() != NULL) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
836 task->prev()->set_next(task->next());
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
837 } else {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
838 // max is the first element
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
839 assert(task == _first, "Sanity");
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
840 _first = task->next();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
841 }
a61af66fc99e Initial load
duke
parents:
diff changeset
842
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
843 if (task->next() != NULL) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
844 task->next()->set_prev(task->prev());
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
845 } else {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
846 // max is the last element
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
847 assert(task == _last, "Sanity");
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
848 _last = task->prev();
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
849 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
850 --_size;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
851 }
a61af66fc99e Initial load
duke
parents:
diff changeset
852
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
853 void CompileQueue::remove_and_mark_stale(CompileTask* task) {
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
854 assert(lock()->owned_by_self(), "must own lock");
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
855 remove(task);
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
856
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
857 // Enqueue the task for reclamation (should be done outside MCQ lock)
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
858 task->set_next(_first_stale);
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
859 task->set_prev(NULL);
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
860 _first_stale = task;
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
861 }
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
862
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
863 // methods in the compile queue need to be marked as used on the stack
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
864 // so that they don't get reclaimed by Redefine Classes
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
865 void CompileQueue::mark_on_stack() {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
866 CompileTask* task = _first;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
867 while (task != NULL) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
868 task->mark_on_stack();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
869 task = task->next();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
870 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
871 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
872
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
873 #ifndef PRODUCT
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
874 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
875 * Print entire compilation queue.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
876 */
0
a61af66fc99e Initial load
duke
parents:
diff changeset
877 void CompileQueue::print() {
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
878 if (CIPrintCompileQueue) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
879 ttyLocker ttyl;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
880 tty->print_cr("Contents of %s", name());
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
881 tty->print_cr("----------------------");
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
882 CompileTask* task = _first;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
883 while (task != NULL) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
884 task->print_line();
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
885 task = task->next();
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
886 }
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
887 tty->print_cr("----------------------");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
888 }
a61af66fc99e Initial load
duke
parents:
diff changeset
889 }
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
890 #endif // PRODUCT
0
a61af66fc99e Initial load
duke
parents:
diff changeset
891
a61af66fc99e Initial load
duke
parents:
diff changeset
892 CompilerCounters::CompilerCounters(const char* thread_name, int instance, TRAPS) {
a61af66fc99e Initial load
duke
parents:
diff changeset
893
a61af66fc99e Initial load
duke
parents:
diff changeset
894 _current_method[0] = '\0';
a61af66fc99e Initial load
duke
parents:
diff changeset
895 _compile_type = CompileBroker::no_compile;
a61af66fc99e Initial load
duke
parents:
diff changeset
896
a61af66fc99e Initial load
duke
parents:
diff changeset
897 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
898 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
899
a61af66fc99e Initial load
duke
parents:
diff changeset
900 // create the thread instance name space string - don't create an
a61af66fc99e Initial load
duke
parents:
diff changeset
901 // instance subspace if instance is -1 - keeps the adapterThread
a61af66fc99e Initial load
duke
parents:
diff changeset
902 // counters from having a ".0" namespace.
a61af66fc99e Initial load
duke
parents:
diff changeset
903 const char* thread_i = (instance == -1) ? thread_name :
a61af66fc99e Initial load
duke
parents:
diff changeset
904 PerfDataManager::name_space(thread_name, instance);
a61af66fc99e Initial load
duke
parents:
diff changeset
905
a61af66fc99e Initial load
duke
parents:
diff changeset
906
a61af66fc99e Initial load
duke
parents:
diff changeset
907 char* name = PerfDataManager::counter_name(thread_i, "method");
a61af66fc99e Initial load
duke
parents:
diff changeset
908 _perf_current_method =
a61af66fc99e Initial load
duke
parents:
diff changeset
909 PerfDataManager::create_string_variable(SUN_CI, name,
a61af66fc99e Initial load
duke
parents:
diff changeset
910 cmname_buffer_length,
a61af66fc99e Initial load
duke
parents:
diff changeset
911 _current_method, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
912
a61af66fc99e Initial load
duke
parents:
diff changeset
913 name = PerfDataManager::counter_name(thread_i, "type");
a61af66fc99e Initial load
duke
parents:
diff changeset
914 _perf_compile_type = PerfDataManager::create_variable(SUN_CI, name,
a61af66fc99e Initial load
duke
parents:
diff changeset
915 PerfData::U_None,
a61af66fc99e Initial load
duke
parents:
diff changeset
916 (jlong)_compile_type,
a61af66fc99e Initial load
duke
parents:
diff changeset
917 CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
918
a61af66fc99e Initial load
duke
parents:
diff changeset
919 name = PerfDataManager::counter_name(thread_i, "time");
a61af66fc99e Initial load
duke
parents:
diff changeset
920 _perf_time = PerfDataManager::create_counter(SUN_CI, name,
a61af66fc99e Initial load
duke
parents:
diff changeset
921 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
922
a61af66fc99e Initial load
duke
parents:
diff changeset
923 name = PerfDataManager::counter_name(thread_i, "compiles");
a61af66fc99e Initial load
duke
parents:
diff changeset
924 _perf_compiles = PerfDataManager::create_counter(SUN_CI, name,
a61af66fc99e Initial load
duke
parents:
diff changeset
925 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
926 }
a61af66fc99e Initial load
duke
parents:
diff changeset
927 }
a61af66fc99e Initial load
duke
parents:
diff changeset
928
a61af66fc99e Initial load
duke
parents:
diff changeset
929 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
930 // CompileBroker::compilation_init
a61af66fc99e Initial load
duke
parents:
diff changeset
931 //
a61af66fc99e Initial load
duke
parents:
diff changeset
932 // Initialize the Compilation object
23296
f41d4011035d reduced delta against jvmci-9
Doug Simon <doug.simon@oracle.com>
parents: 23295
diff changeset
933 void CompileBroker::compilation_init(TRAPS) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
934 _last_method_compiled[0] = '\0';
a61af66fc99e Initial load
duke
parents:
diff changeset
935
13016
a196f1aaec86 8026949: -Xint flag prints wrong warning: Initialization of C1 thread failed (no space to run compilers)
anoll
parents: 12965
diff changeset
936 // No need to initialize compilation system if we do not use it.
a196f1aaec86 8026949: -Xint flag prints wrong warning: Initialization of C1 thread failed (no space to run compilers)
anoll
parents: 12965
diff changeset
937 if (!UseCompiler) {
a196f1aaec86 8026949: -Xint flag prints wrong warning: Initialization of C1 thread failed (no space to run compilers)
anoll
parents: 12965
diff changeset
938 return;
a196f1aaec86 8026949: -Xint flag prints wrong warning: Initialization of C1 thread failed (no space to run compilers)
anoll
parents: 12965
diff changeset
939 }
1970
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
940 #ifndef SHARK
0
a61af66fc99e Initial load
duke
parents:
diff changeset
941 // Set the interface to the current compiler(s).
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
942 int c1_count = CompilationPolicy::policy()->compiler_count(CompLevel_simple);
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
943 int c2_count = CompilationPolicy::policy()->compiler_count(CompLevel_full_optimization);
22298
c28cb37b2e1d Rename JVMCI to INCLUDE_JVMCI.
twisti
parents: 21559
diff changeset
944 #if INCLUDE_JVMCI
23408
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
945 if (EnableJVMCI) {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
946 JVMCICompiler* jvmci = new JVMCICompiler();
23783
1523f2f7832f renamed JVMCIPrintSystemProperties to JVMCIPrintProperties
Doug Simon <doug.simon@oracle.com>
parents: 23779
diff changeset
947 if (JVMCIPrintProperties) {
1523f2f7832f renamed JVMCIPrintSystemProperties to JVMCIPrintProperties
Doug Simon <doug.simon@oracle.com>
parents: 23779
diff changeset
948 // Initialize JVMCI eagerly if JVMCIPrintProperties is enabled.
23777
6c8eaf47db9a added -XX:+JVMCIPrintFlags to support printing of JVMCI flags without having to know how to trigger JVMCI initialization
Doug Simon <doug.simon@oracle.com>
parents: 23410
diff changeset
949 // The JVMCI Java initialization code will read this flag and
6c8eaf47db9a added -XX:+JVMCIPrintFlags to support printing of JVMCI flags without having to know how to trigger JVMCI initialization
Doug Simon <doug.simon@oracle.com>
parents: 23410
diff changeset
950 // do the printing if it's set.
6c8eaf47db9a added -XX:+JVMCIPrintFlags to support printing of JVMCI flags without having to know how to trigger JVMCI initialization
Doug Simon <doug.simon@oracle.com>
parents: 23410
diff changeset
951 JVMCIRuntime::ensure_jvmci_class_loader_is_initialized();
6c8eaf47db9a added -XX:+JVMCIPrintFlags to support printing of JVMCI flags without having to know how to trigger JVMCI initialization
Doug Simon <doug.simon@oracle.com>
parents: 23410
diff changeset
952 JVMCIRuntime::get_HotSpotJVMCIRuntime(CHECK);
6c8eaf47db9a added -XX:+JVMCIPrintFlags to support printing of JVMCI flags without having to know how to trigger JVMCI initialization
Doug Simon <doug.simon@oracle.com>
parents: 23410
diff changeset
953 }
23408
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
954 if (UseJVMCICompiler) {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
955 _compilers[1] = jvmci;
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
956 if (FLAG_IS_DEFAULT(JVMCIThreads)) {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
957 if (BootstrapJVMCI) {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
958 // JVMCI will bootstrap so give it more threads
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
959 c2_count = MIN2(32, os::active_processor_count());
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
960 }
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
961 } else {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
962 c2_count = JVMCIThreads;
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
963 }
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
964 if (FLAG_IS_DEFAULT(JVMCIHostThreads)) {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
965 } else {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
966 c1_count = JVMCIHostThreads;
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
967 }
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
968 if (!UseInterpreter || !BackgroundCompilation) {
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
969 // Force initialization of JVMCI compiler otherwise JVMCI
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
970 // compilations will not block until JVMCI is initialized
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
971 JVMCIRuntime::ensure_jvmci_class_loader_is_initialized();
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
972 ResourceMark rm;
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
973 TempNewSymbol getCompiler = SymbolTable::new_symbol("getCompiler", CHECK);
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
974 TempNewSymbol sig = SymbolTable::new_symbol("()Ljdk/vm/ci/runtime/JVMCICompiler;", CHECK);
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
975 Handle jvmciRuntime = JVMCIRuntime::get_HotSpotJVMCIRuntime(CHECK);
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
976 JavaValue result(T_OBJECT);
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
977 JavaCalls::call_virtual(&result, jvmciRuntime, HotSpotJVMCIRuntime::klass(), getCompiler, sig, CHECK);
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
978 }
23410
12aff370a636 only set c2_count to 0 if neither JVMCI not C2 are being used
Doug Simon <doug.simon@oracle.com>
parents: 23408
diff changeset
979 #ifndef COMPILER2
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
980 } else {
23408
f84a5ac3be22 make JVMCI JDK immutable and sharable among different JVMCI clients
Doug Simon <doug.simon@oracle.com>
parents: 23404
diff changeset
981 c2_count = 0;
23410
12aff370a636 only set c2_count to 0 if neither JVMCI not C2 are being used
Doug Simon <doug.simon@oracle.com>
parents: 23408
diff changeset
982 #endif
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
983 }
16145
237508bd73b9 when Graal bootstrap is enabled (explicitly or implicitly), allocate same number of Graal compiler threads in -UseGraalCompilationQueue as in +UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 16142
diff changeset
984 }
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
985 #ifndef COMPILER2
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
986 else {
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
987 c2_count = 0;
19895
c3d9637c98ed Add GraalHostThreads flag to overwrite the number of threads spawned for the baseline compiler.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19321
diff changeset
988 }
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
989 #endif
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
990 #endif // INCLUDE_JVMCI
14107
800057208a2c enable C1 + Graal tiered
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13969
diff changeset
991
0
a61af66fc99e Initial load
duke
parents:
diff changeset
992 #ifdef COMPILER1
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
993 if (c1_count > 0) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
994 _compilers[0] = new Compiler();
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
995 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
996 #endif // COMPILER1
a61af66fc99e Initial load
duke
parents:
diff changeset
997
a61af66fc99e Initial load
duke
parents:
diff changeset
998 #ifdef COMPILER2
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
999 if (true JVMCI_ONLY( && !UseJVMCICompiler)) {
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1000 if (c2_count > 0) {
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1001 _compilers[1] = new C2Compiler();
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1002 }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1003 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1004 #endif // COMPILER2
a61af66fc99e Initial load
duke
parents:
diff changeset
1005
1970
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
1006 #else // SHARK
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
1007 int c1_count = 0;
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
1008 int c2_count = 1;
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
1009
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
1010 _compilers[1] = new SharkCompiler();
b675ff1ca7a3 7002129: Zero and Shark fixes, 3rd
twisti
parents: 1964
diff changeset
1011 #endif // SHARK
1692
d2ede61b7a12 6976186: integrate Shark HotSpot changes
twisti
parents: 1579
diff changeset
1012
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1013 // Start the CompilerThreads
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1014 init_compiler_threads(c1_count, c2_count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1015 // totalTime performance counter is always created as it is required
a61af66fc99e Initial load
duke
parents:
diff changeset
1016 // by the implementation of java.lang.management.CompilationMBean.
a61af66fc99e Initial load
duke
parents:
diff changeset
1017 {
a61af66fc99e Initial load
duke
parents:
diff changeset
1018 EXCEPTION_MARK;
a61af66fc99e Initial load
duke
parents:
diff changeset
1019 _perf_total_compilation =
a61af66fc99e Initial load
duke
parents:
diff changeset
1020 PerfDataManager::create_counter(JAVA_CI, "totalTime",
a61af66fc99e Initial load
duke
parents:
diff changeset
1021 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1022 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1023
a61af66fc99e Initial load
duke
parents:
diff changeset
1024
a61af66fc99e Initial load
duke
parents:
diff changeset
1025 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1026
a61af66fc99e Initial load
duke
parents:
diff changeset
1027 EXCEPTION_MARK;
a61af66fc99e Initial load
duke
parents:
diff changeset
1028
a61af66fc99e Initial load
duke
parents:
diff changeset
1029 // create the jvmstat performance counters
a61af66fc99e Initial load
duke
parents:
diff changeset
1030 _perf_osr_compilation =
a61af66fc99e Initial load
duke
parents:
diff changeset
1031 PerfDataManager::create_counter(SUN_CI, "osrTime",
a61af66fc99e Initial load
duke
parents:
diff changeset
1032 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1033
a61af66fc99e Initial load
duke
parents:
diff changeset
1034 _perf_standard_compilation =
a61af66fc99e Initial load
duke
parents:
diff changeset
1035 PerfDataManager::create_counter(SUN_CI, "standardTime",
a61af66fc99e Initial load
duke
parents:
diff changeset
1036 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1037
a61af66fc99e Initial load
duke
parents:
diff changeset
1038 _perf_total_bailout_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
1039 PerfDataManager::create_counter(SUN_CI, "totalBailouts",
a61af66fc99e Initial load
duke
parents:
diff changeset
1040 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1041
a61af66fc99e Initial load
duke
parents:
diff changeset
1042 _perf_total_invalidated_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
1043 PerfDataManager::create_counter(SUN_CI, "totalInvalidates",
a61af66fc99e Initial load
duke
parents:
diff changeset
1044 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1045
a61af66fc99e Initial load
duke
parents:
diff changeset
1046 _perf_total_compile_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
1047 PerfDataManager::create_counter(SUN_CI, "totalCompiles",
a61af66fc99e Initial load
duke
parents:
diff changeset
1048 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1049 _perf_total_osr_compile_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
1050 PerfDataManager::create_counter(SUN_CI, "osrCompiles",
a61af66fc99e Initial load
duke
parents:
diff changeset
1051 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1052
a61af66fc99e Initial load
duke
parents:
diff changeset
1053 _perf_total_standard_compile_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
1054 PerfDataManager::create_counter(SUN_CI, "standardCompiles",
a61af66fc99e Initial load
duke
parents:
diff changeset
1055 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1056
a61af66fc99e Initial load
duke
parents:
diff changeset
1057 _perf_sum_osr_bytes_compiled =
a61af66fc99e Initial load
duke
parents:
diff changeset
1058 PerfDataManager::create_counter(SUN_CI, "osrBytes",
a61af66fc99e Initial load
duke
parents:
diff changeset
1059 PerfData::U_Bytes, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1060
a61af66fc99e Initial load
duke
parents:
diff changeset
1061 _perf_sum_standard_bytes_compiled =
a61af66fc99e Initial load
duke
parents:
diff changeset
1062 PerfDataManager::create_counter(SUN_CI, "standardBytes",
a61af66fc99e Initial load
duke
parents:
diff changeset
1063 PerfData::U_Bytes, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1064
a61af66fc99e Initial load
duke
parents:
diff changeset
1065 _perf_sum_nmethod_size =
a61af66fc99e Initial load
duke
parents:
diff changeset
1066 PerfDataManager::create_counter(SUN_CI, "nmethodSize",
a61af66fc99e Initial load
duke
parents:
diff changeset
1067 PerfData::U_Bytes, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1068
a61af66fc99e Initial load
duke
parents:
diff changeset
1069 _perf_sum_nmethod_code_size =
a61af66fc99e Initial load
duke
parents:
diff changeset
1070 PerfDataManager::create_counter(SUN_CI, "nmethodCodeSize",
a61af66fc99e Initial load
duke
parents:
diff changeset
1071 PerfData::U_Bytes, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1072
a61af66fc99e Initial load
duke
parents:
diff changeset
1073 _perf_last_method =
a61af66fc99e Initial load
duke
parents:
diff changeset
1074 PerfDataManager::create_string_variable(SUN_CI, "lastMethod",
a61af66fc99e Initial load
duke
parents:
diff changeset
1075 CompilerCounters::cmname_buffer_length,
a61af66fc99e Initial load
duke
parents:
diff changeset
1076 "", CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1077
a61af66fc99e Initial load
duke
parents:
diff changeset
1078 _perf_last_failed_method =
a61af66fc99e Initial load
duke
parents:
diff changeset
1079 PerfDataManager::create_string_variable(SUN_CI, "lastFailedMethod",
a61af66fc99e Initial load
duke
parents:
diff changeset
1080 CompilerCounters::cmname_buffer_length,
a61af66fc99e Initial load
duke
parents:
diff changeset
1081 "", CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1082
a61af66fc99e Initial load
duke
parents:
diff changeset
1083 _perf_last_invalidated_method =
a61af66fc99e Initial load
duke
parents:
diff changeset
1084 PerfDataManager::create_string_variable(SUN_CI, "lastInvalidatedMethod",
a61af66fc99e Initial load
duke
parents:
diff changeset
1085 CompilerCounters::cmname_buffer_length,
a61af66fc99e Initial load
duke
parents:
diff changeset
1086 "", CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1087
a61af66fc99e Initial load
duke
parents:
diff changeset
1088 _perf_last_compile_type =
a61af66fc99e Initial load
duke
parents:
diff changeset
1089 PerfDataManager::create_variable(SUN_CI, "lastType",
a61af66fc99e Initial load
duke
parents:
diff changeset
1090 PerfData::U_None,
a61af66fc99e Initial load
duke
parents:
diff changeset
1091 (jlong)CompileBroker::no_compile,
a61af66fc99e Initial load
duke
parents:
diff changeset
1092 CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1093
a61af66fc99e Initial load
duke
parents:
diff changeset
1094 _perf_last_compile_size =
a61af66fc99e Initial load
duke
parents:
diff changeset
1095 PerfDataManager::create_variable(SUN_CI, "lastSize",
a61af66fc99e Initial load
duke
parents:
diff changeset
1096 PerfData::U_Bytes,
a61af66fc99e Initial load
duke
parents:
diff changeset
1097 (jlong)CompileBroker::no_compile,
a61af66fc99e Initial load
duke
parents:
diff changeset
1098 CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1099
a61af66fc99e Initial load
duke
parents:
diff changeset
1100
a61af66fc99e Initial load
duke
parents:
diff changeset
1101 _perf_last_failed_type =
a61af66fc99e Initial load
duke
parents:
diff changeset
1102 PerfDataManager::create_variable(SUN_CI, "lastFailedType",
a61af66fc99e Initial load
duke
parents:
diff changeset
1103 PerfData::U_None,
a61af66fc99e Initial load
duke
parents:
diff changeset
1104 (jlong)CompileBroker::no_compile,
a61af66fc99e Initial load
duke
parents:
diff changeset
1105 CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1106
a61af66fc99e Initial load
duke
parents:
diff changeset
1107 _perf_last_invalidated_type =
a61af66fc99e Initial load
duke
parents:
diff changeset
1108 PerfDataManager::create_variable(SUN_CI, "lastInvalidatedType",
a61af66fc99e Initial load
duke
parents:
diff changeset
1109 PerfData::U_None,
a61af66fc99e Initial load
duke
parents:
diff changeset
1110 (jlong)CompileBroker::no_compile,
a61af66fc99e Initial load
duke
parents:
diff changeset
1111 CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
1112 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1113
a61af66fc99e Initial load
duke
parents:
diff changeset
1114 _initialized = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
1115 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1116
a61af66fc99e Initial load
duke
parents:
diff changeset
1117
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1118 CompilerThread* CompileBroker::make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters,
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1119 AbstractCompiler* comp, TRAPS) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1120 CompilerThread* compiler_thread = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
1121
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1122 Klass* k =
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
1123 SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1124 true, CHECK_0);
a61af66fc99e Initial load
duke
parents:
diff changeset
1125 instanceKlassHandle klass (THREAD, k);
a61af66fc99e Initial load
duke
parents:
diff changeset
1126 instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_0);
a61af66fc99e Initial load
duke
parents:
diff changeset
1127 Handle string = java_lang_String::create_from_str(name, CHECK_0);
a61af66fc99e Initial load
duke
parents:
diff changeset
1128
a61af66fc99e Initial load
duke
parents:
diff changeset
1129 // Initialize thread_oop to put it into the system threadGroup
a61af66fc99e Initial load
duke
parents:
diff changeset
1130 Handle thread_group (THREAD, Universe::system_thread_group());
a61af66fc99e Initial load
duke
parents:
diff changeset
1131 JavaValue result(T_VOID);
a61af66fc99e Initial load
duke
parents:
diff changeset
1132 JavaCalls::call_special(&result, thread_oop,
a61af66fc99e Initial load
duke
parents:
diff changeset
1133 klass,
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
1134 vmSymbols::object_initializer_name(),
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 1972
diff changeset
1135 vmSymbols::threadgroup_string_void_signature(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1136 thread_group,
a61af66fc99e Initial load
duke
parents:
diff changeset
1137 string,
a61af66fc99e Initial load
duke
parents:
diff changeset
1138 CHECK_0);
a61af66fc99e Initial load
duke
parents:
diff changeset
1139
a61af66fc99e Initial load
duke
parents:
diff changeset
1140 {
a61af66fc99e Initial load
duke
parents:
diff changeset
1141 MutexLocker mu(Threads_lock, THREAD);
a61af66fc99e Initial load
duke
parents:
diff changeset
1142 compiler_thread = new CompilerThread(queue, counters);
a61af66fc99e Initial load
duke
parents:
diff changeset
1143 // At this point the new CompilerThread data-races with this startup
a61af66fc99e Initial load
duke
parents:
diff changeset
1144 // thread (which I believe is the primoridal thread and NOT the VM
a61af66fc99e Initial load
duke
parents:
diff changeset
1145 // thread). This means Java bytecodes being executed at startup can
a61af66fc99e Initial load
duke
parents:
diff changeset
1146 // queue compile jobs which will run at whatever default priority the
a61af66fc99e Initial load
duke
parents:
diff changeset
1147 // newly created CompilerThread runs at.
a61af66fc99e Initial load
duke
parents:
diff changeset
1148
a61af66fc99e Initial load
duke
parents:
diff changeset
1149
a61af66fc99e Initial load
duke
parents:
diff changeset
1150 // At this point it may be possible that no osthread was created for the
a61af66fc99e Initial load
duke
parents:
diff changeset
1151 // JavaThread due to lack of memory. We would have to throw an exception
a61af66fc99e Initial load
duke
parents:
diff changeset
1152 // in that case. However, since this must work and we do not allow
a61af66fc99e Initial load
duke
parents:
diff changeset
1153 // exceptions anyway, check and abort if this fails.
a61af66fc99e Initial load
duke
parents:
diff changeset
1154
a61af66fc99e Initial load
duke
parents:
diff changeset
1155 if (compiler_thread == NULL || compiler_thread->osthread() == NULL){
a61af66fc99e Initial load
duke
parents:
diff changeset
1156 vm_exit_during_initialization("java.lang.OutOfMemoryError",
a61af66fc99e Initial load
duke
parents:
diff changeset
1157 "unable to create new native thread");
a61af66fc99e Initial load
duke
parents:
diff changeset
1158 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1159
a61af66fc99e Initial load
duke
parents:
diff changeset
1160 java_lang_Thread::set_thread(thread_oop(), compiler_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
1161
a61af66fc99e Initial load
duke
parents:
diff changeset
1162 // Note that this only sets the JavaThread _priority field, which by
a61af66fc99e Initial load
duke
parents:
diff changeset
1163 // definition is limited to Java priorities and not OS priorities.
a61af66fc99e Initial load
duke
parents:
diff changeset
1164 // The os-priority is set in the CompilerThread startup code itself
4854
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1165
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1166 java_lang_Thread::set_priority(thread_oop(), NearMaxPriority);
4854
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1167
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1168 // Note that we cannot call os::set_priority because it expects Java
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1169 // priorities and we are *explicitly* using OS priorities so that it's
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1170 // possible to set the compiler thread priority higher than any Java
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1171 // thread.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1172
4854
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1173 int native_prio = CompilerThreadPriority;
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1174 if (native_prio == -1) {
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1175 if (UseCriticalCompilerThreadPriority) {
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1176 native_prio = os::java_to_os_priority[CriticalPriority];
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1177 } else {
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1178 native_prio = os::java_to_os_priority[NearMaxPriority];
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1179 }
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1180 }
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1181 os::set_native_priority(compiler_thread, native_prio);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1182
a61af66fc99e Initial load
duke
parents:
diff changeset
1183 java_lang_Thread::set_daemon(thread_oop());
a61af66fc99e Initial load
duke
parents:
diff changeset
1184
a61af66fc99e Initial load
duke
parents:
diff changeset
1185 compiler_thread->set_threadObj(thread_oop());
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1186 compiler_thread->set_compiler(comp);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1187 Threads::add(compiler_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
1188 Thread::start(compiler_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
1189 }
4854
de268c8a8075 7082553: Interpret Thread.setPriority(Thread.MAX_PRIORITY) to mean FX60 on Solaris 10 and 11
phh
parents: 4122
diff changeset
1190
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1191 // Let go of Threads_lock before yielding
a61af66fc99e Initial load
duke
parents:
diff changeset
1192 os::yield(); // make sure that the compiler thread is started early (especially helpful on SOLARIS)
a61af66fc99e Initial load
duke
parents:
diff changeset
1193
a61af66fc99e Initial load
duke
parents:
diff changeset
1194 return compiler_thread;
a61af66fc99e Initial load
duke
parents:
diff changeset
1195 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1196
a61af66fc99e Initial load
duke
parents:
diff changeset
1197
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1198 void CompileBroker::init_compiler_threads(int c1_compiler_count, int c2_compiler_count) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1199 EXCEPTION_MARK;
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1200 #if !defined(ZERO) && !defined(SHARK)
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1201 assert(c2_compiler_count > 0 || c1_compiler_count > 0 JVMCI_ONLY(|| UseJVMCICompiler), "No compilers?");
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1202 #endif // !ZERO && !SHARK
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1203 // Initialize the compilation queue
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1204 if (c2_compiler_count > 0) {
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1205 _c2_compile_queue = new CompileQueue("C2 CompileQueue", MethodCompileQueue_lock);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1206 _compilers[1]->set_num_compiler_threads(c2_compiler_count);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1207 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1208 if (c1_compiler_count > 0) {
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1209 _c1_compile_queue = new CompileQueue("C1 CompileQueue", MethodCompileQueue_lock);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1210 _compilers[0]->set_num_compiler_threads(c1_compiler_count);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1211 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1212
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1213 int compiler_count = c1_compiler_count + c2_compiler_count;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1214
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1215 _compiler_threads =
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 4944
diff changeset
1216 new (ResourceObj::C_HEAP, mtCompiler) GrowableArray<CompilerThread*>(compiler_count, true);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1217
a61af66fc99e Initial load
duke
parents:
diff changeset
1218 char name_buffer[256];
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1219 for (int i = 0; i < c2_compiler_count; i++) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1220 // Create a name for our thread.
16102
64d8c6c8a00c derive native compiler thread name from Compiler::name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16006
diff changeset
1221 sprintf(name_buffer, "%s CompilerThread%d", _compilers[1]->name(), i);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1222 CompilerCounters* counters = new CompilerCounters("compilerThread", i, CHECK);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1223 // Shark and C2
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1224 CompilerThread* new_thread = make_compiler_thread(name_buffer, _c2_compile_queue, counters, _compilers[1], CHECK);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1225 _compiler_threads->append(new_thread);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1226 }
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1227
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1228 for (int i = c2_compiler_count; i < compiler_count; i++) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1229 // Create a name for our thread.
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1230 sprintf(name_buffer, "C1 CompilerThread%d", i);
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1231 CompilerCounters* counters = new CompilerCounters("compilerThread", i, CHECK);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1232 // C1
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1233 CompilerThread* new_thread = make_compiler_thread(name_buffer, _c1_compile_queue, counters, _compilers[0], CHECK);
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1234 _compiler_threads->append(new_thread);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1235 }
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1236
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1237 if (UsePerfData) {
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1238 PerfDataManager::create_constant(SUN_CI, "threads", PerfData::U_Bytes, compiler_count, CHECK);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1239 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1240 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1241
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1242
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1243 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1244 * Set the methods on the stack as on_stack so that redefine classes doesn't
20589
0c0e68524c17 8042570: Excessive number of tests timing out on nightly testing due to fix for 8040798
anoll
parents: 20588
diff changeset
1245 * reclaim them. This method is executed at a safepoint.
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1246 */
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1247 void CompileBroker::mark_on_stack() {
20589
0c0e68524c17 8042570: Excessive number of tests timing out on nightly testing due to fix for 8040798
anoll
parents: 20588
diff changeset
1248 assert(SafepointSynchronize::is_at_safepoint(), "sanity check");
0c0e68524c17 8042570: Excessive number of tests timing out on nightly testing due to fix for 8040798
anoll
parents: 20588
diff changeset
1249 // Since we are at a safepoint, we do not need a lock to access
0c0e68524c17 8042570: Excessive number of tests timing out on nightly testing due to fix for 8040798
anoll
parents: 20588
diff changeset
1250 // the compile queues.
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1251 if (_c2_compile_queue != NULL) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1252 _c2_compile_queue->mark_on_stack();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1253 }
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1254 if (_c1_compile_queue != NULL) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1255 _c1_compile_queue->mark_on_stack();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1256 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1257 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1258
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1259 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1260 // CompileBroker::compile_method
a61af66fc99e Initial load
duke
parents:
diff changeset
1261 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1262 // Request compilation of a method.
a61af66fc99e Initial load
duke
parents:
diff changeset
1263 void CompileBroker::compile_method_base(methodHandle method,
a61af66fc99e Initial load
duke
parents:
diff changeset
1264 int osr_bci,
a61af66fc99e Initial load
duke
parents:
diff changeset
1265 int comp_level,
a61af66fc99e Initial load
duke
parents:
diff changeset
1266 methodHandle hot_method,
a61af66fc99e Initial load
duke
parents:
diff changeset
1267 int hot_count,
a61af66fc99e Initial load
duke
parents:
diff changeset
1268 const char* comment,
4825
20334ed5ed3c 7131259: compile_method and CompilationPolicy::event shouldn't be declared TRAPS
iveresov
parents: 4122
diff changeset
1269 Thread* thread) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1270 // do nothing if compiler thread(s) is not available
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1271 if (!_initialized) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1272 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
1273 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1274
a61af66fc99e Initial load
duke
parents:
diff changeset
1275 guarantee(!method->is_abstract(), "cannot compile abstract methods");
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1276 assert(method->method_holder()->oop_is_instance(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1277 "sanity check");
6940
18fb7da42534 8000725: NPG: method_holder() and pool_holder() and pool_holder field should be InstanceKlass
coleenp
parents: 6843
diff changeset
1278 assert(!method->method_holder()->is_not_initialized(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1279 "method holder must be initialized");
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
1280 assert(!method->is_method_handle_intrinsic(), "do not enqueue these guys");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1281
a61af66fc99e Initial load
duke
parents:
diff changeset
1282 if (CIPrintRequests) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1283 tty->print("request: ");
a61af66fc99e Initial load
duke
parents:
diff changeset
1284 method->print_short_name(tty);
a61af66fc99e Initial load
duke
parents:
diff changeset
1285 if (osr_bci != InvocationEntryBci) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1286 tty->print(" osr_bci: %d", osr_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
1287 }
14107
800057208a2c enable C1 + Graal tiered
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13969
diff changeset
1288 tty->print(" level: %d comment: %s count: %d", comp_level, comment, hot_count);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1289 if (!hot_method.is_null()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1290 tty->print(" hot: ");
a61af66fc99e Initial load
duke
parents:
diff changeset
1291 if (hot_method() != method()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1292 hot_method->print_short_name(tty);
a61af66fc99e Initial load
duke
parents:
diff changeset
1293 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
1294 tty->print("yes");
a61af66fc99e Initial load
duke
parents:
diff changeset
1295 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1296 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1297 tty->cr();
a61af66fc99e Initial load
duke
parents:
diff changeset
1298 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1299
a61af66fc99e Initial load
duke
parents:
diff changeset
1300 // A request has been made for compilation. Before we do any
a61af66fc99e Initial load
duke
parents:
diff changeset
1301 // real work, check to see if the method has been compiled
a61af66fc99e Initial load
duke
parents:
diff changeset
1302 // in the meantime with a definitive result.
a61af66fc99e Initial load
duke
parents:
diff changeset
1303 if (compilation_is_complete(method, osr_bci, comp_level)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1304 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
1305 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1306
2403
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1307 #ifndef PRODUCT
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1308 if (osr_bci != -1 && !FLAG_IS_DEFAULT(OSROnlyBCI)) {
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1309 if ((OSROnlyBCI > 0) ? (OSROnlyBCI != osr_bci) : (-OSROnlyBCI == osr_bci)) {
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1310 // Positive OSROnlyBCI means only compile that bci. Negative means don't compile that BCI.
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1311 return;
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1312 }
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1313 }
1927db75dd85 7024475: loop doesn't terminate when compiled
never
parents: 2353
diff changeset
1314 #endif
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1315
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1316 // If this method is already in the compile queue, then
a61af66fc99e Initial load
duke
parents:
diff changeset
1317 // we do not block the current thread.
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1318 if (compilation_is_in_queue(method)) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1319 // We may want to decay our counter a bit here to prevent
a61af66fc99e Initial load
duke
parents:
diff changeset
1320 // multiple denied requests for compilation. This is an
a61af66fc99e Initial load
duke
parents:
diff changeset
1321 // open compilation policy issue. Note: The other possibility,
a61af66fc99e Initial load
duke
parents:
diff changeset
1322 // in the case that this is a blocking compile request, is to have
a61af66fc99e Initial load
duke
parents:
diff changeset
1323 // all subsequent blocking requesters wait for completion of
a61af66fc99e Initial load
duke
parents:
diff changeset
1324 // ongoing compiles. Note that in this case we'll need a protocol
a61af66fc99e Initial load
duke
parents:
diff changeset
1325 // for freeing the associated compile tasks. [Or we could have
a61af66fc99e Initial load
duke
parents:
diff changeset
1326 // a single static monitor on which all these waiters sleep.]
a61af66fc99e Initial load
duke
parents:
diff changeset
1327 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
1328 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1329
3294
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1330 // If the requesting thread is holding the pending list lock
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1331 // then we just return. We can't risk blocking while holding
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1332 // the pending list lock or a 3-way deadlock may occur
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1333 // between the reference handler thread, a GC (instigated
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1334 // by a compiler thread), and compiled method registration.
6735
aed758eda82a 7195833: NPG: Rename instanceClassLoaderKlass, instanceRefKlass and instanceMirrorKlass
coleenp
parents: 6725
diff changeset
1335 if (InstanceRefKlass::owns_pending_list_lock(JavaThread::current())) {
3294
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1336 return;
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1337 }
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1338
20489
966205f0e717 8058564: Tiered compilation performance drop in PIT
iveresov
parents: 20469
diff changeset
1339 if (TieredCompilation) {
966205f0e717 8058564: Tiered compilation performance drop in PIT
iveresov
parents: 20469
diff changeset
1340 // Tiered policy requires MethodCounters to exist before adding a method to
966205f0e717 8058564: Tiered compilation performance drop in PIT
iveresov
parents: 20469
diff changeset
1341 // the queue. Create if we don't have them yet.
966205f0e717 8058564: Tiered compilation performance drop in PIT
iveresov
parents: 20469
diff changeset
1342 method->get_method_counters(thread);
966205f0e717 8058564: Tiered compilation performance drop in PIT
iveresov
parents: 20469
diff changeset
1343 }
966205f0e717 8058564: Tiered compilation performance drop in PIT
iveresov
parents: 20469
diff changeset
1344
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1345 // Outputs from the following MutexLocker block:
a61af66fc99e Initial load
duke
parents:
diff changeset
1346 CompileTask* task = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
1347 bool blocking = false;
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1348 CompileQueue* queue = compile_queue(comp_level);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1349
a61af66fc99e Initial load
duke
parents:
diff changeset
1350 // Acquire our lock.
a61af66fc99e Initial load
duke
parents:
diff changeset
1351 {
4825
20334ed5ed3c 7131259: compile_method and CompilationPolicy::event shouldn't be declared TRAPS
iveresov
parents: 4122
diff changeset
1352 MutexLocker locker(queue->lock(), thread);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1353
a61af66fc99e Initial load
duke
parents:
diff changeset
1354 // Make sure the method has not slipped into the queues since
a61af66fc99e Initial load
duke
parents:
diff changeset
1355 // last we checked; note that those checks were "fast bail-outs".
a61af66fc99e Initial load
duke
parents:
diff changeset
1356 // Here we need to be more careful, see 14012000 below.
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1357 if (compilation_is_in_queue(method)) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1358 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
1359 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1360
a61af66fc99e Initial load
duke
parents:
diff changeset
1361 // We need to check again to see if the compilation has
a61af66fc99e Initial load
duke
parents:
diff changeset
1362 // completed. A previous compilation may have registered
a61af66fc99e Initial load
duke
parents:
diff changeset
1363 // some result.
a61af66fc99e Initial load
duke
parents:
diff changeset
1364 if (compilation_is_complete(method, osr_bci, comp_level)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1365 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
1366 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1367
a61af66fc99e Initial load
duke
parents:
diff changeset
1368 // We now know that this compilation is not pending, complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
1369 // or prohibited. Assign a compile_id to this compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1370 // and check to see if it is in our [Start..Stop) range.
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1371 int compile_id = assign_compile_id(method, osr_bci);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1372 if (compile_id == 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1373 // The compilation falls outside the allowed range.
a61af66fc99e Initial load
duke
parents:
diff changeset
1374 return;
a61af66fc99e Initial load
duke
parents:
diff changeset
1375 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1376
a61af66fc99e Initial load
duke
parents:
diff changeset
1377 // Should this thread wait for completion of the compile?
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1378 blocking = is_compile_blocking();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1379
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1380 #if INCLUDE_JVMCI
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1381 if (UseJVMCICompiler && blocking) {
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
1382 // Don't allow blocking compiles for requests triggered by JVMCI.
16447
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1383 if (thread->is_Compiler_thread()) {
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1384 blocking = false;
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1385 }
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1386
19947
6a0692faf9fd Ignore -Xbatch when the thread is in the middle of class loading
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19943
diff changeset
1387 // Don't allow blocking compiles if inside a class initializer or while performing class loading
16447
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1388 vframeStream vfst((JavaThread*) thread);
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1389 for (; !vfst.at_end(); vfst.next()) {
19947
6a0692faf9fd Ignore -Xbatch when the thread is in the middle of class loading
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19943
diff changeset
1390 if (vfst.method()->is_static_initializer() ||
6a0692faf9fd Ignore -Xbatch when the thread is in the middle of class loading
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19943
diff changeset
1391 (vfst.method()->method_holder()->is_subclass_of(SystemDictionary::ClassLoader_klass()) &&
6a0692faf9fd Ignore -Xbatch when the thread is in the middle of class loading
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 19943
diff changeset
1392 vfst.method()->name() == vmSymbols::loadClass_name())) {
16447
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1393 blocking = false;
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1394 break;
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1395 }
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1396 }
16625
d2aa48d54db5 don't allow blocking compilation requests to Graal if Graal itself is not yet initialized
Doug Simon <doug.simon@oracle.com>
parents: 16447
diff changeset
1397
21527
07b088d61d5d added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 20804
diff changeset
1398 // Don't allow blocking compilation requests to JVMCI
07b088d61d5d added HotSpotJVMCIRuntime* classes, replaced references to HotSpotGraalRuntime in VM with HotSpotJVMCIRuntime (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 20804
diff changeset
1399 // if JVMCI itself is not yet initialized
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
1400 if (!JVMCIRuntime::is_HotSpotJVMCIRuntime_initialized() && compiler(comp_level)->is_jvmci()) {
16625
d2aa48d54db5 don't allow blocking compilation requests to Graal if Graal itself is not yet initialized
Doug Simon <doug.simon@oracle.com>
parents: 16447
diff changeset
1401 blocking = false;
d2aa48d54db5 don't allow blocking compilation requests to Graal if Graal itself is not yet initialized
Doug Simon <doug.simon@oracle.com>
parents: 16447
diff changeset
1402 }
18303
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18171
diff changeset
1403
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
1404 // Don't allow blocking compilation requests if we are in JVMCIRuntime::shutdown
18303
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18171
diff changeset
1405 // to avoid deadlock between compiler thread(s) and threads run at shutdown
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18171
diff changeset
1406 // such as the DestroyJavaVM thread.
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
1407 if (JVMCIRuntime::shutdown_called()) {
18303
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18171
diff changeset
1408 blocking = false;
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18171
diff changeset
1409 }
16185
518a221dbbde don't allow blocking compile requests from the compiler thread
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16180
diff changeset
1410 }
16447
ce6696559683 better fix for deadlock in GraalVM under -Xcomp (JBS:GRAAL-48)
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1411 // Don't allow blocking compiles
16185
518a221dbbde don't allow blocking compile requests from the compiler thread
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16180
diff changeset
1412 #endif
518a221dbbde don't allow blocking compile requests from the compiler thread
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16180
diff changeset
1413
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1414 // We will enter the compilation in the queue.
a61af66fc99e Initial load
duke
parents:
diff changeset
1415 // 14012000: Note that this sets the queued_for_compile bits in
a61af66fc99e Initial load
duke
parents:
diff changeset
1416 // the target method. We can now reason that a method cannot be
a61af66fc99e Initial load
duke
parents:
diff changeset
1417 // queued for compilation more than once, as follows:
a61af66fc99e Initial load
duke
parents:
diff changeset
1418 // Before a thread queues a task for compilation, it first acquires
a61af66fc99e Initial load
duke
parents:
diff changeset
1419 // the compile queue lock, then checks if the method's queued bits
a61af66fc99e Initial load
duke
parents:
diff changeset
1420 // are set or it has already been compiled. Thus there can not be two
a61af66fc99e Initial load
duke
parents:
diff changeset
1421 // instances of a compilation task for the same method on the
a61af66fc99e Initial load
duke
parents:
diff changeset
1422 // compilation queue. Consider now the case where the compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1423 // thread has already removed a task for that method from the queue
a61af66fc99e Initial load
duke
parents:
diff changeset
1424 // and is in the midst of compiling it. In this case, the
a61af66fc99e Initial load
duke
parents:
diff changeset
1425 // queued_for_compile bits must be set in the method (and these
a61af66fc99e Initial load
duke
parents:
diff changeset
1426 // will be visible to the current thread, since the bits were set
a61af66fc99e Initial load
duke
parents:
diff changeset
1427 // under protection of the compile queue lock, which we hold now.
a61af66fc99e Initial load
duke
parents:
diff changeset
1428 // When the compilation completes, the compiler thread first sets
a61af66fc99e Initial load
duke
parents:
diff changeset
1429 // the compilation result and then clears the queued_for_compile
a61af66fc99e Initial load
duke
parents:
diff changeset
1430 // bits. Neither of these actions are protected by a barrier (or done
a61af66fc99e Initial load
duke
parents:
diff changeset
1431 // under the protection of a lock), so the only guarantee we have
a61af66fc99e Initial load
duke
parents:
diff changeset
1432 // (on machines with TSO (Total Store Order)) is that these values
a61af66fc99e Initial load
duke
parents:
diff changeset
1433 // will update in that order. As a result, the only combinations of
a61af66fc99e Initial load
duke
parents:
diff changeset
1434 // these bits that the current thread will see are, in temporal order:
a61af66fc99e Initial load
duke
parents:
diff changeset
1435 // <RESULT, QUEUE> :
a61af66fc99e Initial load
duke
parents:
diff changeset
1436 // <0, 1> : in compile queue, but not yet compiled
a61af66fc99e Initial load
duke
parents:
diff changeset
1437 // <1, 1> : compiled but queue bit not cleared
a61af66fc99e Initial load
duke
parents:
diff changeset
1438 // <1, 0> : compiled and queue bit cleared
a61af66fc99e Initial load
duke
parents:
diff changeset
1439 // Because we first check the queue bits then check the result bits,
a61af66fc99e Initial load
duke
parents:
diff changeset
1440 // we are assured that we cannot introduce a duplicate task.
a61af66fc99e Initial load
duke
parents:
diff changeset
1441 // Note that if we did the tests in the reverse order (i.e. check
a61af66fc99e Initial load
duke
parents:
diff changeset
1442 // result then check queued bit), we could get the result bit before
a61af66fc99e Initial load
duke
parents:
diff changeset
1443 // the compilation completed, and the queue bit after the compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1444 // completed, and end up introducing a "duplicate" (redundant) task.
a61af66fc99e Initial load
duke
parents:
diff changeset
1445 // In that case, the compiler thread should first check if a method
a61af66fc99e Initial load
duke
parents:
diff changeset
1446 // has already been compiled before trying to compile it.
a61af66fc99e Initial load
duke
parents:
diff changeset
1447 // NOTE: in the event that there are multiple compiler threads and
a61af66fc99e Initial load
duke
parents:
diff changeset
1448 // there is de-optimization/recompilation, things will get hairy,
a61af66fc99e Initial load
duke
parents:
diff changeset
1449 // and in that case it's best to protect both the testing (here) of
a61af66fc99e Initial load
duke
parents:
diff changeset
1450 // these bits, and their updating (here and elsewhere) under a
a61af66fc99e Initial load
duke
parents:
diff changeset
1451 // common lock.
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1452 task = create_compile_task(queue,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1453 compile_id, method,
a61af66fc99e Initial load
duke
parents:
diff changeset
1454 osr_bci, comp_level,
a61af66fc99e Initial load
duke
parents:
diff changeset
1455 hot_method, hot_count, comment,
a61af66fc99e Initial load
duke
parents:
diff changeset
1456 blocking);
a61af66fc99e Initial load
duke
parents:
diff changeset
1457 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1458
a61af66fc99e Initial load
duke
parents:
diff changeset
1459 if (blocking) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1460 wait_for_completion(task);
a61af66fc99e Initial load
duke
parents:
diff changeset
1461 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1462 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1463
a61af66fc99e Initial load
duke
parents:
diff changeset
1464
a61af66fc99e Initial load
duke
parents:
diff changeset
1465 nmethod* CompileBroker::compile_method(methodHandle method, int osr_bci,
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1466 int comp_level,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1467 methodHandle hot_method, int hot_count,
4825
20334ed5ed3c 7131259: compile_method and CompilationPolicy::event shouldn't be declared TRAPS
iveresov
parents: 4122
diff changeset
1468 const char* comment, Thread* THREAD) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1469 // make sure arguments make sense
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1470 assert(method->method_holder()->oop_is_instance(), "not an instance method");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1471 assert(osr_bci == InvocationEntryBci || (0 <= osr_bci && osr_bci < method->code_size()), "bci out of range");
a61af66fc99e Initial load
duke
parents:
diff changeset
1472 assert(!method->is_abstract() && (osr_bci == InvocationEntryBci || !method->is_native()), "cannot compile abstract/native methods");
6940
18fb7da42534 8000725: NPG: method_holder() and pool_holder() and pool_holder field should be InstanceKlass
coleenp
parents: 6843
diff changeset
1473 assert(!method->method_holder()->is_not_initialized(), "method holder must be initialized");
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8860
diff changeset
1474 // allow any levels for WhiteBox
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8860
diff changeset
1475 assert(WhiteBoxAPI || TieredCompilation || comp_level == CompLevel_highest_tier, "only CompLevel_highest_tier must be used in non-tiered");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1476 // return quickly if possible
a61af66fc99e Initial load
duke
parents:
diff changeset
1477
a61af66fc99e Initial load
duke
parents:
diff changeset
1478 // lock, make sure that the compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1479 // isn't prohibited in a straightforward way.
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1480 AbstractCompiler *comp = CompileBroker::compiler(comp_level);
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1481 if (comp == NULL || !comp->can_compile_method(method) ||
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1482 compilation_is_prohibited(method, osr_bci, comp_level)) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1483 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
1484 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1485
a61af66fc99e Initial load
duke
parents:
diff changeset
1486 if (osr_bci == InvocationEntryBci) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1487 // standard compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1488 nmethod* method_code = method->code();
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1489 if (method_code != NULL) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1490 if (compilation_is_complete(method, osr_bci, comp_level)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1491 return method_code;
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1492 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1493 }
12324
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
1494 if (method->is_not_compilable(comp_level)) {
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
1495 return NULL;
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
1496 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1497 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
1498 // osr compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1499 #ifndef TIERED
a61af66fc99e Initial load
duke
parents:
diff changeset
1500 // seems like an assert of dubious value
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1501 assert(comp_level == CompLevel_highest_tier,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1502 "all OSR compiles are assumed to be at a single compilation lavel");
a61af66fc99e Initial load
duke
parents:
diff changeset
1503 #endif // TIERED
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1504 // We accept a higher level osr method
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1505 nmethod* nm = method->lookup_osr_nmethod_for(osr_bci, comp_level, false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1506 if (nm != NULL) return nm;
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
1507 if (method->is_not_osr_compilable(comp_level)) return NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1508 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1509
a61af66fc99e Initial load
duke
parents:
diff changeset
1510 assert(!HAS_PENDING_EXCEPTION, "No exception should be present");
a61af66fc99e Initial load
duke
parents:
diff changeset
1511 // some prerequisites that are compiler specific
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1512 if (comp->is_c2() || comp->is_shark()) {
4825
20334ed5ed3c 7131259: compile_method and CompilationPolicy::event shouldn't be declared TRAPS
iveresov
parents: 4122
diff changeset
1513 method->constants()->resolve_string_constants(CHECK_AND_CLEAR_NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1514 // Resolve all classes seen in the signature of the method
a61af66fc99e Initial load
duke
parents:
diff changeset
1515 // we are compiling.
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1516 Method::load_signature_classes(method, CHECK_AND_CLEAR_NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1517 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1518
a61af66fc99e Initial load
duke
parents:
diff changeset
1519 // If the method is native, do the lookup in the thread requesting
a61af66fc99e Initial load
duke
parents:
diff changeset
1520 // the compilation. Native lookups can load code, which is not
a61af66fc99e Initial load
duke
parents:
diff changeset
1521 // permitted during compilation.
a61af66fc99e Initial load
duke
parents:
diff changeset
1522 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1523 // Note: A native method implies non-osr compilation which is
a61af66fc99e Initial load
duke
parents:
diff changeset
1524 // checked with an assertion at the entry of this method.
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
1525 if (method->is_native() && !method->is_method_handle_intrinsic()) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1526 bool in_base_library;
a61af66fc99e Initial load
duke
parents:
diff changeset
1527 address adr = NativeLookup::lookup(method, in_base_library, THREAD);
a61af66fc99e Initial load
duke
parents:
diff changeset
1528 if (HAS_PENDING_EXCEPTION) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1529 // In case of an exception looking up the method, we just forget
a61af66fc99e Initial load
duke
parents:
diff changeset
1530 // about it. The interpreter will kick-in and throw the exception.
a61af66fc99e Initial load
duke
parents:
diff changeset
1531 method->set_not_compilable(); // implies is_not_osr_compilable()
a61af66fc99e Initial load
duke
parents:
diff changeset
1532 CLEAR_PENDING_EXCEPTION;
a61af66fc99e Initial load
duke
parents:
diff changeset
1533 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
1534 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1535 assert(method->has_native_function(), "must have native code by now");
a61af66fc99e Initial load
duke
parents:
diff changeset
1536 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1537
a61af66fc99e Initial load
duke
parents:
diff changeset
1538 // RedefineClasses() has replaced this method; just return
a61af66fc99e Initial load
duke
parents:
diff changeset
1539 if (method->is_old()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1540 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
1541 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1542
a61af66fc99e Initial load
duke
parents:
diff changeset
1543 // JVMTI -- post_compile_event requires jmethod_id() that may require
a61af66fc99e Initial load
duke
parents:
diff changeset
1544 // a lock the compiling thread can not acquire. Prefetch it here.
a61af66fc99e Initial load
duke
parents:
diff changeset
1545 if (JvmtiExport::should_post_compiled_method_load()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1546 method->jmethod_id();
a61af66fc99e Initial load
duke
parents:
diff changeset
1547 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1548
a61af66fc99e Initial load
duke
parents:
diff changeset
1549 // do the compilation
a61af66fc99e Initial load
duke
parents:
diff changeset
1550 if (method->is_native()) {
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 6197
diff changeset
1551 if (!PreferInterpreterNativeStubs || method->is_method_handle_intrinsic()) {
12965
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1552 // To properly handle the appendix argument for out-of-line calls we are using a small trampoline that
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1553 // pops off the appendix argument and jumps to the target (see gen_special_dispatch in SharedRuntime).
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1554 //
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1555 // Since normal compiled-to-compiled calls are not able to handle such a thing we MUST generate an adapter
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1556 // in this case. If we can't generate one and use it we can not execute the out-of-line method handle calls.
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1557 AdapterHandlerLibrary::create_native_wrapper(method);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1558 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
1559 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
1560 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1561 } else {
12965
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1562 // If the compiler is shut off due to code cache getting full
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1563 // fail out now so blocking compiles dont hang the java thread
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1564 if (!should_compile_new_jobs()) {
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1565 CompilationPolicy::policy()->delay_compilation(method());
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1566 return NULL;
8b4bbba322d3 8026407: VM crashes on linux-ppc and linux-i586 when there is not enough ReservedCodeCacheSize specified
anoll
parents: 12880
diff changeset
1567 }
4825
20334ed5ed3c 7131259: compile_method and CompilationPolicy::event shouldn't be declared TRAPS
iveresov
parents: 4122
diff changeset
1568 compile_method_base(method, osr_bci, comp_level, hot_method, hot_count, comment, THREAD);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1569 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1570
a61af66fc99e Initial load
duke
parents:
diff changeset
1571 // return requested nmethod
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1572 // We accept a higher level osr method
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1573 return osr_bci == InvocationEntryBci ? method->code() : method->lookup_osr_nmethod_for(osr_bci, comp_level, false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1574 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1575
a61af66fc99e Initial load
duke
parents:
diff changeset
1576
a61af66fc99e Initial load
duke
parents:
diff changeset
1577 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1578 // CompileBroker::compilation_is_complete
a61af66fc99e Initial load
duke
parents:
diff changeset
1579 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1580 // See if compilation of this method is already complete.
a61af66fc99e Initial load
duke
parents:
diff changeset
1581 bool CompileBroker::compilation_is_complete(methodHandle method,
a61af66fc99e Initial load
duke
parents:
diff changeset
1582 int osr_bci,
a61af66fc99e Initial load
duke
parents:
diff changeset
1583 int comp_level) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1584 bool is_osr = (osr_bci != standard_entry_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
1585 if (is_osr) {
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
1586 if (method->is_not_osr_compilable(comp_level)) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1587 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
1588 } else {
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1589 nmethod* result = method->lookup_osr_nmethod_for(osr_bci, comp_level, true);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1590 return (result != NULL);
a61af66fc99e Initial load
duke
parents:
diff changeset
1591 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1592 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
1593 if (method->is_not_compilable(comp_level)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1594 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
1595 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
1596 nmethod* result = method->code();
a61af66fc99e Initial load
duke
parents:
diff changeset
1597 if (result == NULL) return false;
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1598 return comp_level == result->comp_level();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1599 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1600 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1601 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1602
a61af66fc99e Initial load
duke
parents:
diff changeset
1603
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1604 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1605 * See if this compilation is already requested.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1606 *
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1607 * Implementation note: there is only a single "is in queue" bit
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1608 * for each method. This means that the check below is overly
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1609 * conservative in the sense that an osr compilation in the queue
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1610 * will block a normal compilation from entering the queue (and vice
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1611 * versa). This can be remedied by a full queue search to disambiguate
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1612 * cases. If it is deemed profitable, this may be done.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1613 */
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1614 bool CompileBroker::compilation_is_in_queue(methodHandle method) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1615 return method->queued_for_compilation();
a61af66fc99e Initial load
duke
parents:
diff changeset
1616 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1617
a61af66fc99e Initial load
duke
parents:
diff changeset
1618 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1619 // CompileBroker::compilation_is_prohibited
a61af66fc99e Initial load
duke
parents:
diff changeset
1620 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1621 // See if this compilation is not allowed.
a61af66fc99e Initial load
duke
parents:
diff changeset
1622 bool CompileBroker::compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1623 bool is_native = method->is_native();
a61af66fc99e Initial load
duke
parents:
diff changeset
1624 // Some compilers may not support the compilation of natives.
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1625 AbstractCompiler *comp = compiler(comp_level);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1626 if (is_native &&
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1627 (!CICompileNatives || comp == NULL || !comp->supports_native())) {
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
1628 method->set_not_compilable_quietly(comp_level);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1629 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
1630 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1631
a61af66fc99e Initial load
duke
parents:
diff changeset
1632 bool is_osr = (osr_bci != standard_entry_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
1633 // Some compilers may not support on stack replacement.
a61af66fc99e Initial load
duke
parents:
diff changeset
1634 if (is_osr &&
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
1635 (!CICompileOSR || comp == NULL || !comp->supports_osr())) {
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
1636 method->set_not_osr_compilable(comp_level);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1637 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
1638 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1639
a61af66fc99e Initial load
duke
parents:
diff changeset
1640 // The method may be explicitly excluded by the user.
a61af66fc99e Initial load
duke
parents:
diff changeset
1641 bool quietly;
a61af66fc99e Initial load
duke
parents:
diff changeset
1642 if (CompilerOracle::should_exclude(method, quietly)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1643 if (!quietly) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1644 // This does not happen quietly...
a61af66fc99e Initial load
duke
parents:
diff changeset
1645 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
1646 tty->print("### Excluding %s:%s",
a61af66fc99e Initial load
duke
parents:
diff changeset
1647 method->is_native() ? "generation of native wrapper" : "compile",
a61af66fc99e Initial load
duke
parents:
diff changeset
1648 (method->is_static() ? " static" : ""));
a61af66fc99e Initial load
duke
parents:
diff changeset
1649 method->print_short_name(tty);
a61af66fc99e Initial load
duke
parents:
diff changeset
1650 tty->cr();
a61af66fc99e Initial load
duke
parents:
diff changeset
1651 }
7998
6a51fc70a15e 8006613: adding reason to made_not_compilable
vlivanov
parents: 7607
diff changeset
1652 method->set_not_compilable(CompLevel_all, !quietly, "excluded by CompilerOracle");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1653 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1654
a61af66fc99e Initial load
duke
parents:
diff changeset
1655 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
1656 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1657
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1658 /**
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1659 * Generate serialized IDs for compilation requests. If certain debugging flags are used
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1660 * and the ID is not within the specified range, the method is not compiled and 0 is returned.
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1661 * The function also allows to generate separate compilation IDs for OSR compilations.
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1662 */
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1663 int CompileBroker::assign_compile_id(methodHandle method, int osr_bci) {
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1664 #ifdef ASSERT
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1665 bool is_osr = (osr_bci != standard_entry_bci);
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1666 int id;
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1667 if (method->is_native()) {
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1668 assert(!is_osr, "can't be osr");
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1669 // Adapters, native wrappers and method handle intrinsics
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1670 // should be generated always.
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1671 return Atomic::add(1, &_compilation_id);
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1672 } else if (CICountOSR && is_osr) {
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1673 id = Atomic::add(1, &_osr_compilation_id);
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1674 if (CIStartOSR <= id && id < CIStopOSR) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1675 return id;
a61af66fc99e Initial load
duke
parents:
diff changeset
1676 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1677 } else {
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1678 id = Atomic::add(1, &_compilation_id);
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1679 if (CIStart <= id && id < CIStop) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1680 return id;
a61af66fc99e Initial load
duke
parents:
diff changeset
1681 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1682 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1683
a61af66fc99e Initial load
duke
parents:
diff changeset
1684 // Method was not in the appropriate compilation range.
1208
cef333a48af6 6923043: failed nightly tests which use -XX:+PrintCompilation -Xcomp -XX:CompileOnly
kvn
parents: 1202
diff changeset
1685 method->set_not_compilable_quietly();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1686 return 0;
14236
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1687 #else
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1688 // CICountOSR is a develop flag and set to 'false' by default. In a product built,
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1689 // only _compilation_id is incremented.
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1690 return Atomic::add(1, &_compilation_id);
7c0122ed05fb 8022494: Make compilation IDs sequential
anoll
parents: 13074
diff changeset
1691 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1692 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1693
a61af66fc99e Initial load
duke
parents:
diff changeset
1694
a61af66fc99e Initial load
duke
parents:
diff changeset
1695 // ------------------------------------------------------------------
13969
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1696 // CompileBroker::assign_compile_id_unlocked
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1697 //
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1698 // Public wrapper for assign_compile_id that acquires the needed locks
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1699 uint CompileBroker::assign_compile_id_unlocked(Thread* thread, methodHandle method, int osr_bci) {
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1700 MutexLocker locker(MethodCompileQueue_lock, thread);
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1701 return assign_compile_id(method, osr_bci);
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1702 }
fe034af88233 Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13731
diff changeset
1703
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1704 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1705 * Should the current thread block until this compilation request
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1706 * has been fulfilled?
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1707 */
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1708 bool CompileBroker::is_compile_blocking() {
6735
aed758eda82a 7195833: NPG: Rename instanceClassLoaderKlass, instanceRefKlass and instanceMirrorKlass
coleenp
parents: 6725
diff changeset
1709 assert(!InstanceRefKlass::owns_pending_list_lock(JavaThread::current()), "possible deadlock");
3294
86ebb26bcdeb 7037756: Deadlock in compiler thread similiar to 6789220
johnc
parents: 2482
diff changeset
1710 return !BackgroundCompilation;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1711 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1712
a61af66fc99e Initial load
duke
parents:
diff changeset
1713
a61af66fc99e Initial load
duke
parents:
diff changeset
1714 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1715 // CompileBroker::preload_classes
a61af66fc99e Initial load
duke
parents:
diff changeset
1716 void CompileBroker::preload_classes(methodHandle method, TRAPS) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1717 // Move this code over from c1_Compiler.cpp
a61af66fc99e Initial load
duke
parents:
diff changeset
1718 ShouldNotReachHere();
a61af66fc99e Initial load
duke
parents:
diff changeset
1719 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1720
a61af66fc99e Initial load
duke
parents:
diff changeset
1721
a61af66fc99e Initial load
duke
parents:
diff changeset
1722 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1723 // CompileBroker::create_compile_task
a61af66fc99e Initial load
duke
parents:
diff changeset
1724 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1725 // Create a CompileTask object representing the current request for
a61af66fc99e Initial load
duke
parents:
diff changeset
1726 // compilation. Add this task to the queue.
a61af66fc99e Initial load
duke
parents:
diff changeset
1727 CompileTask* CompileBroker::create_compile_task(CompileQueue* queue,
a61af66fc99e Initial load
duke
parents:
diff changeset
1728 int compile_id,
a61af66fc99e Initial load
duke
parents:
diff changeset
1729 methodHandle method,
a61af66fc99e Initial load
duke
parents:
diff changeset
1730 int osr_bci,
a61af66fc99e Initial load
duke
parents:
diff changeset
1731 int comp_level,
a61af66fc99e Initial load
duke
parents:
diff changeset
1732 methodHandle hot_method,
a61af66fc99e Initial load
duke
parents:
diff changeset
1733 int hot_count,
a61af66fc99e Initial load
duke
parents:
diff changeset
1734 const char* comment,
a61af66fc99e Initial load
duke
parents:
diff changeset
1735 bool blocking) {
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1736 CompileTask* new_task = CompileTask::allocate();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1737 new_task->initialize(compile_id, method, osr_bci, comp_level,
a61af66fc99e Initial load
duke
parents:
diff changeset
1738 hot_method, hot_count, comment,
a61af66fc99e Initial load
duke
parents:
diff changeset
1739 blocking);
a61af66fc99e Initial load
duke
parents:
diff changeset
1740 queue->add(new_task);
a61af66fc99e Initial load
duke
parents:
diff changeset
1741 return new_task;
a61af66fc99e Initial load
duke
parents:
diff changeset
1742 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1743
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1744 #if INCLUDE_JVMCI
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1745 // The number of milliseconds to wait before checking if
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1746 // JVMCI compilation has made progress.
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1747 static const long JVMCI_COMPILATION_PROGRESS_WAIT_TIMESLICE = 500;
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1748
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1749 // The number of JVMCI compilation progress checks that must fail
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1750 // before unblocking a thread waiting for a blocking compilation.
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1751 static const int JVMCI_COMPILATION_PROGRESS_WAIT_ATTEMPTS = 5;
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1752
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1753 /**
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1754 * Waits for a JVMCI compiler to complete a given task. This thread
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1755 * waits until either the task completes or it sees no JVMCI compilation
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1756 * progress for N consecutive milliseconds where N is
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1757 * JVMCI_COMPILATION_PROGRESS_WAIT_TIMESLICE *
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1758 * JVMCI_COMPILATION_PROGRESS_WAIT_ATTEMPTS.
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1759 *
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1760 * @return true if this thread needs to free/recycle the task
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1761 */
23303
633cf7bea01d thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507) [part 2]
Doug Simon <doug.simon@oracle.com>
parents: 23302
diff changeset
1762 bool CompileBroker::wait_for_jvmci_completion(JVMCICompiler* jvmci, CompileTask* task, JavaThread* thread) {
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1763 MutexLocker waiter(task->lock(), thread);
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1764 int progress_wait_attempts = 0;
23303
633cf7bea01d thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507) [part 2]
Doug Simon <doug.simon@oracle.com>
parents: 23302
diff changeset
1765 int methods_compiled = jvmci->methods_compiled();
23296
f41d4011035d reduced delta against jvmci-9
Doug Simon <doug.simon@oracle.com>
parents: 23295
diff changeset
1766 while (!task->is_complete() && !is_compilation_disabled_forever() &&
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1767 task->lock()->wait(!Mutex::_no_safepoint_check_flag, JVMCI_COMPILATION_PROGRESS_WAIT_TIMESLICE)) {
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1768 CompilerThread* jvmci_compiler_thread = task->jvmci_compiler_thread();
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1769
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1770 bool progress;
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1771 if (jvmci_compiler_thread != NULL) {
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1772 // If the JVMCI compiler thread is not blocked, we deem it to be making progress.
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1773 progress = jvmci_compiler_thread->thread_state() != _thread_blocked;
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1774 } else {
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1775 // Still waiting on JVMCI compiler queue. This thread may be holding a lock
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1776 // that all JVMCI compiler threads are blocked on. We use the counter for
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1777 // successful JVMCI compilations to determine whether JVMCI compilation
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1778 // is still making progress through the JVMCI compiler queue.
23303
633cf7bea01d thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507) [part 2]
Doug Simon <doug.simon@oracle.com>
parents: 23302
diff changeset
1779 progress = jvmci->methods_compiled() != methods_compiled;
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1780 }
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1781
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1782 if (!progress) {
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1783 if (++progress_wait_attempts == JVMCI_COMPILATION_PROGRESS_WAIT_ATTEMPTS) {
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1784 if (PrintCompilation) {
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1785 task->print_compilation(tty, "wait for blocking compilation timed out");
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1786 }
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1787 break;
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1788 }
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1789 } else {
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1790 progress_wait_attempts = 0;
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1791 if (jvmci_compiler_thread == NULL) {
23303
633cf7bea01d thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507) [part 2]
Doug Simon <doug.simon@oracle.com>
parents: 23302
diff changeset
1792 methods_compiled = jvmci->methods_compiled();
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1793 }
22762
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1794 }
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1795 }
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1796 task->clear_waiter();
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1797 return task->is_complete();
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1798 }
9d78d44d3aac improved JVMCI support for blocking compilation (GRAAL-1387)
Doug Simon <doug.simon@oracle.com>
parents: 22730
diff changeset
1799 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1800
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1801 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1802 * Wait for the compilation task to complete.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1803 */
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1804 void CompileBroker::wait_for_completion(CompileTask* task) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1805 if (CIPrintCompileQueue) {
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1806 ttyLocker ttyl;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1807 tty->print_cr("BLOCKING FOR COMPILE");
a61af66fc99e Initial load
duke
parents:
diff changeset
1808 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1809
a61af66fc99e Initial load
duke
parents:
diff changeset
1810 assert(task->is_blocking(), "can only wait on blocking task");
a61af66fc99e Initial load
duke
parents:
diff changeset
1811
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1812 JavaThread* thread = JavaThread::current();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1813 thread->set_blocked_on_compilation(true);
a61af66fc99e Initial load
duke
parents:
diff changeset
1814
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
1815 methodHandle method(thread, task->method());
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1816 bool free_task = true;
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
1817 #if INCLUDE_JVMCI
23302
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1818 AbstractCompiler* comp = compiler(task->comp_level());
90f7b4c21cfb thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507)
Doug Simon <doug.simon@oracle.com>
parents: 23296
diff changeset
1819 if (comp->is_jvmci()) {
23303
633cf7bea01d thread waiting for blocking JVMCI compilation should not wait on compiler queue forever (JDK-8148507) [part 2]
Doug Simon <doug.simon@oracle.com>
parents: 23302
diff changeset
1820 free_task = wait_for_jvmci_completion((JVMCICompiler*) comp, task, thread);
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1821 } else
22714
9b3b66634d17 use timeout for JVMCI blocking compilation to avoid deadlock between compiler and app thread that submitted the blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22449
diff changeset
1822 #endif
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1823 {
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1824 MutexLocker waiter(task->lock(), thread);
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1825 while (!task->is_complete() && !is_compilation_disabled_forever()) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1826 task->lock()->wait();
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1827 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1828 }
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1829
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1830 thread->set_blocked_on_compilation(false);
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1831 if (free_task) {
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1832 if (is_compilation_disabled_forever()) {
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1833 CompileTask::free(task);
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1834 return;
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1835 }
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1836
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1837 // It is harmless to check this status without the lock, because
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1838 // completion is a stable property (until the task object is recycled).
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1839 assert(task->is_complete(), "Compilation should have completed");
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1840 assert(task->code_handle() == NULL, "must be reset");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1841
22719
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1842 // By convention, the waiter is responsible for recycling a
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1843 // blocking CompileTask. Since there is only one waiter ever
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1844 // waiting on a CompileTask, we know that no one else will
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1845 // be using this CompileTask; we can free it.
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1846 CompileTask::free(task);
44bc739eae23 fixed logic deciding who frees the CompileTask for a JVMCI blocking compilation
Doug Simon <doug.simon@oracle.com>
parents: 22714
diff changeset
1847 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1848 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1849
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1850 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1851 * Initialize compiler thread(s) + compiler object(s). The postcondition
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1852 * of this function is that the compiler runtimes are initialized and that
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1853 * compiler threads can start compiling.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1854 */
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1855 bool CompileBroker::init_compiler_runtime() {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1856 CompilerThread* thread = CompilerThread::current();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1857 AbstractCompiler* comp = thread->compiler();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1858 // Final sanity check - the compiler object must exist
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1859 guarantee(comp != NULL, "Compiler object must exist");
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1860
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1861 int system_dictionary_modification_counter;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1862 {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1863 MutexLocker locker(Compile_lock, thread);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1864 system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1865 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1866
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1867 {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1868 // Must switch to native to allocate ci_env
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1869 ThreadToNativeFromVM ttn(thread);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1870 ciEnv ci_env(NULL, system_dictionary_modification_counter);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1871 // Cache Jvmti state
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1872 ci_env.cache_jvmti_state();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1873 // Cache DTrace flags
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1874 ci_env.cache_dtrace_flags();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1875
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1876 // Switch back to VM state to do compiler initialization
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1877 ThreadInVMfromNative tv(thread);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1878 ResetNoHandleMark rnhm;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1879
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1881 if (!comp->is_shark()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1882 // Perform per-thread and global initializations
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1883 comp->initialize();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1884 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1885 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1886
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1887 if (comp->is_failed()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1888 disable_compilation_forever();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1889 // If compiler initialization failed, no compiler thread that is specific to a
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1890 // particular compiler runtime will ever start to compile methods.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1891 shutdown_compiler_runtime(comp, thread);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1892 return false;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1893 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1894
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1895 // C1 specific check
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1896 if (comp->is_c1() && (thread->get_buffer_blob() == NULL)) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1897 warning("Initialization of %s thread failed (no space to run compilers)", thread->name());
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1898 return false;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1899 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1900
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1901 return true;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1902 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1903
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1904 /**
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1905 * If C1 and/or C2 initialization failed, we shut down all compilation.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1906 * We do this to keep things simple. This can be changed if it ever turns
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1907 * out to be a problem.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1908 */
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1909 void CompileBroker::shutdown_compiler_runtime(AbstractCompiler* comp, CompilerThread* thread) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1910 // Free buffer blob, if allocated
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1911 if (thread->get_buffer_blob() != NULL) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1912 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1913 CodeCache::free(thread->get_buffer_blob());
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1914 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1915
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1916 if (comp->should_perform_shutdown()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1917 // There are two reasons for shutting down the compiler
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1918 // 1) compiler runtime initialization failed
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1919 // 2) The code cache is full and the following flag is set: -XX:-UseCodeCacheFlushing
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1920 warning("%s initialization failed. Shutting down all compilers", comp->name());
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1921
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1922 // Only one thread per compiler runtime object enters here
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1923 // Set state to shut down
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1924 comp->set_shut_down();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1925
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1926 // Delete all queued compilation tasks to make compiler threads exit faster.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1927 if (_c1_compile_queue != NULL) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1928 _c1_compile_queue->free_all();
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1929 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1930
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1931 if (_c2_compile_queue != NULL) {
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1932 _c2_compile_queue->free_all();
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1933 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1934
20588
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1935 // Set flags so that we continue execution with using interpreter only.
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1936 UseCompiler = false;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1937 UseInterpreter = true;
41dcdd636080 8040798: compiler/startup/SmallCodeCacheStartup.java timed out in RT_Baseline
anoll
parents: 20575
diff changeset
1938
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1939 // We could delete compiler runtimes also. However, there are references to
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1940 // the compiler runtime(s) (e.g., nmethod::is_compiled_by_c1()) which then
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1941 // fail. This can be done later if necessary.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1942 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1943 }
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1944
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1945 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
1946 // CompileBroker::compiler_thread_loop
a61af66fc99e Initial load
duke
parents:
diff changeset
1947 //
a61af66fc99e Initial load
duke
parents:
diff changeset
1948 // The main loop run by a CompilerThread.
a61af66fc99e Initial load
duke
parents:
diff changeset
1949 void CompileBroker::compiler_thread_loop() {
a61af66fc99e Initial load
duke
parents:
diff changeset
1950 CompilerThread* thread = CompilerThread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
1951 CompileQueue* queue = thread->queue();
a61af66fc99e Initial load
duke
parents:
diff changeset
1952 // For the thread that initializes the ciObjectFactory
a61af66fc99e Initial load
duke
parents:
diff changeset
1953 // this resource mark holds all the shared objects
a61af66fc99e Initial load
duke
parents:
diff changeset
1954 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
1955
a61af66fc99e Initial load
duke
parents:
diff changeset
1956 // First thread to get here will initialize the compiler interface
a61af66fc99e Initial load
duke
parents:
diff changeset
1957
a61af66fc99e Initial load
duke
parents:
diff changeset
1958 if (!ciObjectFactory::is_initialized()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1959 ASSERT_IN_VM;
a61af66fc99e Initial load
duke
parents:
diff changeset
1960 MutexLocker only_one (CompileThread_lock, thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
1961 if (!ciObjectFactory::is_initialized()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1962 ciObjectFactory::initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
1963 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1964 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1965
a61af66fc99e Initial load
duke
parents:
diff changeset
1966 // Open a log.
a61af66fc99e Initial load
duke
parents:
diff changeset
1967 if (LogCompilation) {
a61af66fc99e Initial load
duke
parents:
diff changeset
1968 init_compiler_thread_log();
a61af66fc99e Initial load
duke
parents:
diff changeset
1969 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1970 CompileLog* log = thread->log();
a61af66fc99e Initial load
duke
parents:
diff changeset
1971 if (log != NULL) {
6843
c3e799c37717 7177003: C1: LogCompilation support
vlivanov
parents: 6800
diff changeset
1972 log->begin_elem("start_compile_thread name='%s' thread='" UINTX_FORMAT "' process='%d'",
c3e799c37717 7177003: C1: LogCompilation support
vlivanov
parents: 6800
diff changeset
1973 thread->name(),
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1974 os::current_thread_id(),
a61af66fc99e Initial load
duke
parents:
diff changeset
1975 os::current_process_id());
a61af66fc99e Initial load
duke
parents:
diff changeset
1976 log->stamp();
a61af66fc99e Initial load
duke
parents:
diff changeset
1977 log->end_elem();
a61af66fc99e Initial load
duke
parents:
diff changeset
1978 }
a61af66fc99e Initial load
duke
parents:
diff changeset
1979
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1980 // If compiler thread/runtime initialization fails, exit the compiler thread
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1981 if (!init_compiler_runtime()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1982 return;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1983 }
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
1984
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1985 // Poll for new compilation tasks as long as the JVM runs. Compilation
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1986 // should only be disabled if something went wrong while initializing the
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1987 // compiler runtimes. This, in turn, should not happen. The only known case
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1988 // when compiler runtime initialization fails is if there is not enough free
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1989 // space in the code cache to generate the necessary stubs, etc.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1990 while (!is_compilation_disabled_forever()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1991 // We need this HandleMark to avoid leaking VM handles.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1992 HandleMark hm(thread);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1993
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1994 if (CodeCache::unallocated_capacity() < CodeCacheMinimumFreeSpace) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1995 // the code cache is really full
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1996 handle_full_code_cache();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1997 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1998
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
1999 CompileTask* task = queue->get();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2000 if (task == NULL) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2001 continue;
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2002 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2003
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2004 // Give compiler threads an extra quanta. They tend to be bursty and
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2005 // this helps the compiler to finish up the job.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2006 if( CompilerThreadHintNoPreempt )
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2007 os::hint_no_preempt();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2008
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2009 // trace per thread time and compile statistics
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2010 CompilerCounters* counters = ((CompilerThread*)thread)->counters();
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2011 PerfTraceTimedEvent(counters->time_counter(), counters->compile_counter());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2012
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2013 // Assign the task to the current thread. Mark this compilation
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2014 // thread as active for the profiler.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2015 CompileTaskWrapper ctw(task);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2016 nmethodLocker result_handle; // (handle for the nmethod produced by this task)
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2017 task->set_code_handle(&result_handle);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2018 methodHandle method(thread, task->method());
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2019
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2020 // Never compile a method if breakpoints are present in it
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2021 if (method()->number_of_breakpoints() == 0) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2022 // Compile the method.
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2023 if ((UseCompiler || AlwaysCompileLoopMethods) && CompileBroker::should_compile_new_jobs()) {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2024 invoke_compiler_on_method(task);
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2025 } else {
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2026 // After compilation is disabled, remove remaining methods from queue
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2027 method->clear_queued_for_compilation();
20469
dd89808e49ba 8049530: Provide descriptive failure reason for compilation tasks removed for the queue
vlivanov
parents: 20465
diff changeset
2028 task->set_failure_reason("compilation is disabled");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2029 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2030 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2031 }
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2032
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2033 // Shut down compiler runtime
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2034 shutdown_compiler_runtime(thread->compiler(), thread);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2035 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2036
a61af66fc99e Initial load
duke
parents:
diff changeset
2037 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2038 // CompileBroker::init_compiler_thread_log
a61af66fc99e Initial load
duke
parents:
diff changeset
2039 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2040 // Set up state required by +LogCompilation.
a61af66fc99e Initial load
duke
parents:
diff changeset
2041 void CompileBroker::init_compiler_thread_log() {
a61af66fc99e Initial load
duke
parents:
diff changeset
2042 CompilerThread* thread = CompilerThread::current();
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2043 char file_name[4*K];
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2044 FILE* fp = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
2045 intx thread_id = os::current_thread_id();
a61af66fc99e Initial load
duke
parents:
diff changeset
2046 for (int try_temp_dir = 1; try_temp_dir >= 0; try_temp_dir--) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2047 const char* dir = (try_temp_dir ? os::get_temp_directory() : NULL);
1353
a2ea687fdc7c 6938627: Make temporary directory use property java.io.tmpdir when specified
coleenp
parents: 1300
diff changeset
2048 if (dir == NULL) {
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2049 jio_snprintf(file_name, sizeof(file_name), "hs_c" UINTX_FORMAT "_pid%u.log",
1353
a2ea687fdc7c 6938627: Make temporary directory use property java.io.tmpdir when specified
coleenp
parents: 1300
diff changeset
2050 thread_id, os::current_process_id());
a2ea687fdc7c 6938627: Make temporary directory use property java.io.tmpdir when specified
coleenp
parents: 1300
diff changeset
2051 } else {
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2052 jio_snprintf(file_name, sizeof(file_name),
1353
a2ea687fdc7c 6938627: Make temporary directory use property java.io.tmpdir when specified
coleenp
parents: 1300
diff changeset
2053 "%s%shs_c" UINTX_FORMAT "_pid%u.log", dir,
a2ea687fdc7c 6938627: Make temporary directory use property java.io.tmpdir when specified
coleenp
parents: 1300
diff changeset
2054 os::file_separator(), thread_id, os::current_process_id());
a2ea687fdc7c 6938627: Make temporary directory use property java.io.tmpdir when specified
coleenp
parents: 1300
diff changeset
2055 }
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2056
20679
ecccc23346fe 8007993: hotspot.log w/ enabled LogCompilation can be an invalid XML
thartmann
parents: 20591
diff changeset
2057 fp = fopen(file_name, "wt");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2058 if (fp != NULL) {
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2059 if (LogCompilation && Verbose) {
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2060 tty->print_cr("Opening compilation log %s", file_name);
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2061 }
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2062 CompileLog* log = new(ResourceObj::C_HEAP, mtCompiler) CompileLog(file_name, fp, thread_id);
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2063 thread->init_log(log);
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2064
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2065 if (xtty != NULL) {
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2066 ttyLocker ttyl;
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2067 // Record any per thread log files
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 14456
diff changeset
2068 xtty->elem("thread_logfile thread='" INTX_FORMAT "' filename='%s'", thread_id, file_name);
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2069 }
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2070 return;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2071 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2072 }
10394
813f26e34135 8013329: File leak in hotspot/src/share/vm/compiler/compileBroker.cpp
anoll
parents: 10278
diff changeset
2073 warning("Cannot open log file: %s", file_name);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2074 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2075
a61af66fc99e Initial load
duke
parents:
diff changeset
2076 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2077 // CompileBroker::set_should_block
a61af66fc99e Initial load
duke
parents:
diff changeset
2078 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2079 // Set _should_block.
a61af66fc99e Initial load
duke
parents:
diff changeset
2080 // Call this from the VM, with Threads_lock held and a safepoint requested.
a61af66fc99e Initial load
duke
parents:
diff changeset
2081 void CompileBroker::set_should_block() {
a61af66fc99e Initial load
duke
parents:
diff changeset
2082 assert(Threads_lock->owner() == Thread::current(), "must have threads lock");
a61af66fc99e Initial load
duke
parents:
diff changeset
2083 assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint already");
a61af66fc99e Initial load
duke
parents:
diff changeset
2084 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
2085 if (PrintCompilation && (Verbose || WizardMode))
a61af66fc99e Initial load
duke
parents:
diff changeset
2086 tty->print_cr("notifying compiler thread pool to block");
a61af66fc99e Initial load
duke
parents:
diff changeset
2087 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
2088 _should_block = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
2089 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2090
a61af66fc99e Initial load
duke
parents:
diff changeset
2091 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2092 // CompileBroker::maybe_block
a61af66fc99e Initial load
duke
parents:
diff changeset
2093 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2094 // Call this from the compiler at convenient points, to poll for _should_block.
a61af66fc99e Initial load
duke
parents:
diff changeset
2095 void CompileBroker::maybe_block() {
a61af66fc99e Initial load
duke
parents:
diff changeset
2096 if (_should_block) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2097 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
2098 if (PrintCompilation && (Verbose || WizardMode))
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 14456
diff changeset
2099 tty->print_cr("compiler thread " INTPTR_FORMAT " poll detects block request", p2i(Thread::current()));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2100 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
2101 ThreadInVMfromNative tivfn(JavaThread::current());
a61af66fc99e Initial load
duke
parents:
diff changeset
2102 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2103 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2104
7595
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2105 // wrapper for CodeCache::print_summary()
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2106 static void codecache_print(bool detailed)
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2107 {
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2108 ResourceMark rm;
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2109 stringStream s;
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2110 // Dump code cache into a buffer before locking the tty,
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2111 {
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2112 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2113 CodeCache::print_summary(&s, detailed);
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2114 }
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2115 ttyLocker ttyl;
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 14456
diff changeset
2116 tty->print("%s", s.as_string());
7595
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2117 }
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2118
15463
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2119 void CompileBroker::post_compile(CompilerThread* thread, CompileTask* task, EventCompilation& event, bool success, ciEnv* ci_env) {
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2120
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2121 if (success) {
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2122 task->mark_success();
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2123 if (ci_env != NULL) {
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2124 task->set_num_inlined_bytecodes(ci_env->num_inlined_bytecodes());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2125 }
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2126 if (_compilation_log != NULL) {
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2127 nmethod* code = task->code();
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2128 if (code != NULL) {
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2129 _compilation_log->log_nmethod(thread, code);
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2130 }
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2131 }
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2132 }
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2133
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2134 // simulate crash during compilation
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2135 assert(task->compile_id() != CICrashAt, "just as planned");
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2136 if (event.should_commit()) {
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2137 event.set_method(task->method());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2138 event.set_compileID(task->compile_id());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2139 event.set_compileLevel(task->comp_level());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2140 event.set_succeded(task->is_success());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2141 event.set_isOsr(task->osr_bci() != CompileBroker::standard_entry_bci);
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2142 event.set_codeSize((task->code() == NULL) ? 0 : task->code()->total_size());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2143 event.set_inlinedBytes(task->num_inlined_bytecodes());
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2144 event.commit();
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2145 }
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2146 }
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2147
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2148 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2149 // CompileBroker::invoke_compiler_on_method
a61af66fc99e Initial load
duke
parents:
diff changeset
2150 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2151 // Compile a method.
a61af66fc99e Initial load
duke
parents:
diff changeset
2152 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2153 void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2154 if (PrintCompilation) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2155 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
2156 task->print_line();
a61af66fc99e Initial load
duke
parents:
diff changeset
2157 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2158 elapsedTimer time;
a61af66fc99e Initial load
duke
parents:
diff changeset
2159
a61af66fc99e Initial load
duke
parents:
diff changeset
2160 CompilerThread* thread = CompilerThread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
2161 ResourceMark rm(thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
2162
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2163 if (LogEvents) {
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2164 _compilation_log->log_compile(thread, task);
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2165 }
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2166
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2167 // Common flags.
a61af66fc99e Initial load
duke
parents:
diff changeset
2168 uint compile_id = task->compile_id();
a61af66fc99e Initial load
duke
parents:
diff changeset
2169 int osr_bci = task->osr_bci();
a61af66fc99e Initial load
duke
parents:
diff changeset
2170 bool is_osr = (osr_bci != standard_entry_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
2171 bool should_log = (thread->log() != NULL);
a61af66fc99e Initial load
duke
parents:
diff changeset
2172 bool should_break = false;
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2173 int task_level = task->comp_level();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2174 {
a61af66fc99e Initial load
duke
parents:
diff changeset
2175 // create the handle inside it's own block so it can't
a61af66fc99e Initial load
duke
parents:
diff changeset
2176 // accidentally be referenced once the thread transitions to
a61af66fc99e Initial load
duke
parents:
diff changeset
2177 // native. The NoHandleMark before the transition should catch
a61af66fc99e Initial load
duke
parents:
diff changeset
2178 // any cases where this occurs in the future.
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2179 methodHandle method(thread, task->method());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2180 should_break = check_break_at(method, compile_id, is_osr);
a61af66fc99e Initial load
duke
parents:
diff changeset
2181 if (should_log && !CompilerOracle::should_log(method)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2182 should_log = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
2183 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2184 assert(!method->is_native(), "no longer compile natives");
a61af66fc99e Initial load
duke
parents:
diff changeset
2185
a61af66fc99e Initial load
duke
parents:
diff changeset
2186 // Save information about this method in case of failure.
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2187 set_last_compile(thread, method, is_osr, task_level);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2188
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
2189 DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, compiler_name(task_level));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2190 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2191
23288
d2cd0b15957c Restore previous order of pushing and popping JNI handle blocks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22770
diff changeset
2192 // Allocate a new set of JNI handles.
d2cd0b15957c Restore previous order of pushing and popping JNI handle blocks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22770
diff changeset
2193 push_jni_handle_block();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2194 Method* target_handle = task->method();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2195 int compilable = ciEnv::MethodCompilable;
22770
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2196 const char* failure_reason = NULL;
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2197 const char* retry_message = NULL;
15463
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2198 AbstractCompiler *comp = compiler(task_level);
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2199
19321
98592ae4b1fa only record method dependencies if JVMTI hotswapping or breakpointing is enabled
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
2200 int system_dictionary_modification_counter;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2201 {
19321
98592ae4b1fa only record method dependencies if JVMTI hotswapping or breakpointing is enabled
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
2202 MutexLocker locker(Compile_lock, thread);
98592ae4b1fa only record method dependencies if JVMTI hotswapping or breakpointing is enabled
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
2203 system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
98592ae4b1fa only record method dependencies if JVMTI hotswapping or breakpointing is enabled
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
2204 }
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
2205 #if INCLUDE_JVMCI
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2206 if (comp != NULL && comp->is_jvmci()) {
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2207 JVMCICompiler* jvmci = (JVMCICompiler*) comp;
15463
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2208
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2209 TraceTime t1("compilation", &time);
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2210 EventCompilation event;
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2211
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2212 JVMCIEnv env(task, system_dictionary_modification_counter);
22730
24fd08e99b35 Backport Handle fixes from jvmci-9.
Roland Schatz <roland.schatz@oracle.com>
parents: 22719
diff changeset
2213 methodHandle method(thread, target_handle);
24fd08e99b35 Backport Handle fixes from jvmci-9.
Roland Schatz <roland.schatz@oracle.com>
parents: 22719
diff changeset
2214 jvmci->compile_method(method, osr_bci, &env);
15463
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2215
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2216 post_compile(thread, task, event, task->code() != NULL, NULL);
22770
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2217
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2218 failure_reason = env.failure_reason();
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2219 if (!env.retryable()) {
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2220 retry_message = "not retryable";
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2221 compilable = ciEnv::MethodCompilable_not_at_tier;
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2222 }
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2223
15463
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2224 } else
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
2225 #endif // INCLUDE_JVMCI
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2226 {
a61af66fc99e Initial load
duke
parents:
diff changeset
2227 NoHandleMark nhm;
a61af66fc99e Initial load
duke
parents:
diff changeset
2228 ThreadToNativeFromVM ttn(thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
2229
a61af66fc99e Initial load
duke
parents:
diff changeset
2230 ciEnv ci_env(task, system_dictionary_modification_counter);
a61af66fc99e Initial load
duke
parents:
diff changeset
2231 if (should_break) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2232 ci_env.set_break_at_compile(true);
a61af66fc99e Initial load
duke
parents:
diff changeset
2233 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2234 if (should_log) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2235 ci_env.set_log(thread->log());
a61af66fc99e Initial load
duke
parents:
diff changeset
2236 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2237 assert(thread->env() == &ci_env, "set by ci_env");
a61af66fc99e Initial load
duke
parents:
diff changeset
2238 // The thread-env() field is cleared in ~CompileTaskWrapper.
a61af66fc99e Initial load
duke
parents:
diff changeset
2239
780
c96bf21b756f 6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
kvn
parents: 0
diff changeset
2240 // Cache Jvmti state
c96bf21b756f 6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
kvn
parents: 0
diff changeset
2241 ci_env.cache_jvmti_state();
c96bf21b756f 6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
kvn
parents: 0
diff changeset
2242
c96bf21b756f 6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
kvn
parents: 0
diff changeset
2243 // Cache DTrace flags
c96bf21b756f 6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
kvn
parents: 0
diff changeset
2244 ci_env.cache_dtrace_flags();
c96bf21b756f 6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
kvn
parents: 0
diff changeset
2245
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2246 ciMethod* target = ci_env.get_method_from_handle(target_handle);
a61af66fc99e Initial load
duke
parents:
diff changeset
2247
a61af66fc99e Initial load
duke
parents:
diff changeset
2248 TraceTime t1("compilation", &time);
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2249 EventCompilation event;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2250
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2251 if (comp == NULL) {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2252 ci_env.record_method_not_compilable("no compiler", !TieredCompilation);
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2253 } else {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2254 comp->compile_method(&ci_env, target, osr_bci);
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2255 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2256
a61af66fc99e Initial load
duke
parents:
diff changeset
2257 if (!ci_env.failing() && task->code() == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2258 //assert(false, "compiler should always document failure");
a61af66fc99e Initial load
duke
parents:
diff changeset
2259 // The compiler elected, without comment, not to register a result.
a61af66fc99e Initial load
duke
parents:
diff changeset
2260 // Do not attempt further compilations of this method.
1964
22ef3370343b 7000349: Tiered reacts incorrectly to C1 compilation failures
iveresov
parents: 1783
diff changeset
2261 ci_env.record_method_not_compilable("compile failed", !TieredCompilation);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2262 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2263
4872
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2264 // Copy this bit to the enclosing block:
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2265 compilable = ci_env.compilable();
aa3d708d67c4 7141200: log some interesting information in ring buffers for crashes
never
parents: 4825
diff changeset
2266
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2267 if (ci_env.failing()) {
22770
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2268 failure_reason = ci_env.failure_reason();
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2269 retry_message = ci_env.retry_message();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2270 }
15463
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2271
a20be10ad437 made Graal work with the HotSpot compiler queue and compiler threads, enabled by -XX:-UseGraalCompilationQueue
Doug Simon <doug.simon@oracle.com>
parents: 14957
diff changeset
2272 post_compile(thread, task, event, !ci_env.failing(), &ci_env);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2273 }
23288
d2cd0b15957c Restore previous order of pushing and popping JNI handle blocks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22770
diff changeset
2274 // Remove the JNI handle block after the ciEnv destructor has run in
d2cd0b15957c Restore previous order of pushing and popping JNI handle blocks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22770
diff changeset
2275 // the previous block.
d2cd0b15957c Restore previous order of pushing and popping JNI handle blocks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22770
diff changeset
2276 pop_jni_handle_block();
22770
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2277
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2278 if (failure_reason != NULL) {
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2279 if (_compilation_log != NULL) {
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2280 _compilation_log->log_failure(thread, task, failure_reason, retry_message);
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2281 }
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2282 if (PrintCompilation) {
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2283 FormatBufferResource msg = retry_message != NULL ?
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2284 err_msg_res("COMPILE SKIPPED: %s (%s)", failure_reason, retry_message) :
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2285 err_msg_res("COMPILE SKIPPED: %s", failure_reason);
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2286 task->print_compilation(tty, msg);
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2287 }
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2288 }
1fbfcc0334d3 JVMCI PrintCompilation support should reuse CompileBroker logic
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 22764
diff changeset
2289
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2290
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2291 methodHandle method(thread, task->method());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2292
10207
e4e131b15d5c 8013532: Remove unused parameter "compiler" from DTRACE_METHOD_COMPILE* macros
roland
parents: 10206
diff changeset
2293 DTRACE_METHOD_COMPILE_END_PROBE(method, compiler_name(task_level), task->is_success());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2294
a61af66fc99e Initial load
duke
parents:
diff changeset
2295 collect_statistics(thread, time, task);
a61af66fc99e Initial load
duke
parents:
diff changeset
2296
4064
670a74b863fc 7107042: assert(no_dead_loop) failed: dead loop detected
kvn
parents: 4047
diff changeset
2297 if (PrintCompilation && PrintCompilation2) {
4047
d8cb48376797 7097546: Optimize use of CMOVE instructions
kvn
parents: 4006
diff changeset
2298 tty->print("%7d ", (int) tty->time_stamp().milliseconds()); // print timestamp
d8cb48376797 7097546: Optimize use of CMOVE instructions
kvn
parents: 4006
diff changeset
2299 tty->print("%4d ", compile_id); // print compilation number
d8cb48376797 7097546: Optimize use of CMOVE instructions
kvn
parents: 4006
diff changeset
2300 tty->print("%s ", (is_osr ? "%" : " "));
10278
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 10207
diff changeset
2301 if (task->code() != NULL) {
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 10207
diff changeset
2302 tty->print("size: %d(%d) ", task->code()->total_size(), task->code()->insts_size());
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 10207
diff changeset
2303 }
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 10207
diff changeset
2304 tty->print_cr("time: %d inlined: %d bytes", (int)time.milliseconds(), task->num_inlined_bytecodes());
4047
d8cb48376797 7097546: Optimize use of CMOVE instructions
kvn
parents: 4006
diff changeset
2305 }
d8cb48376797 7097546: Optimize use of CMOVE instructions
kvn
parents: 4006
diff changeset
2306
7595
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2307 if (PrintCodeCacheOnCompilation)
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2308 codecache_print(/* detailed= */ false);
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2309
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2310 // Disable compilation, if required.
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2311 switch (compilable) {
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2312 case ciEnv::MethodCompilable_never:
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2313 if (is_osr)
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2314 method->set_not_osr_compilable_quietly();
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2315 else
1208
cef333a48af6 6923043: failed nightly tests which use -XX:+PrintCompilation -Xcomp -XX:CompileOnly
kvn
parents: 1202
diff changeset
2316 method->set_not_compilable_quietly();
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2317 break;
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2318 case ciEnv::MethodCompilable_not_at_tier:
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2319 if (is_osr)
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2320 method->set_not_osr_compilable_quietly(task_level);
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2321 else
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2322 method->set_not_compilable_quietly(task_level);
6800
9191895df19d 7200001: failed C1 OSR compile doesn't get recompiled with C2
twisti
parents: 6735
diff changeset
2323 break;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2324 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2325
a61af66fc99e Initial load
duke
parents:
diff changeset
2326 // Note that the queued_for_compilation bits are cleared without
a61af66fc99e Initial load
duke
parents:
diff changeset
2327 // protection of a mutex. [They were set by the requester thread,
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 18009
diff changeset
2328 // when adding the task to the compile queue -- at which time the
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2329 // compile queue lock was held. Subsequently, we acquired the compile
a61af66fc99e Initial load
duke
parents:
diff changeset
2330 // queue lock to get this task off the compile queue; thus (to belabour
a61af66fc99e Initial load
duke
parents:
diff changeset
2331 // the point somewhat) our clearing of the bits must be occurring
a61af66fc99e Initial load
duke
parents:
diff changeset
2332 // only after the setting of the bits. See also 14012000 above.
a61af66fc99e Initial load
duke
parents:
diff changeset
2333 method->clear_queued_for_compilation();
a61af66fc99e Initial load
duke
parents:
diff changeset
2334
a61af66fc99e Initial load
duke
parents:
diff changeset
2335 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
2336 if (CollectedHeap::fired_fake_oom()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2337 // The current compile received a fake OOM during compilation so
a61af66fc99e Initial load
duke
parents:
diff changeset
2338 // go ahead and exit the VM since the test apparently succeeded
a61af66fc99e Initial load
duke
parents:
diff changeset
2339 tty->print_cr("*** Shutting down VM after successful fake OOM");
a61af66fc99e Initial load
duke
parents:
diff changeset
2340 vm_exit(0);
a61af66fc99e Initial load
duke
parents:
diff changeset
2341 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2342 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
2343 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2344
13074
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2345 /**
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2346 * The CodeCache is full. Print out warning and disable compilation
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2347 * or try code cache cleaning so compilation can continue later.
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2348 */
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2349 void CompileBroker::handle_full_code_cache() {
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2350 UseInterpreter = true;
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2351 if (UseCompiler || AlwaysCompileLoopMethods ) {
1728
a62d332029cf 6976372: # assert(_owner == Thread::current()) failed: invariant
never
parents: 1692
diff changeset
2352 if (xtty != NULL) {
7595
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2353 ResourceMark rm;
2482
dbccacb79c63 7036236: VM crashes assert((!inside_attrs()) || is_error_reported()) failed ...
iveresov
parents: 2447
diff changeset
2354 stringStream s;
dbccacb79c63 7036236: VM crashes assert((!inside_attrs()) || is_error_reported()) failed ...
iveresov
parents: 2447
diff changeset
2355 // Dump code cache state into a buffer before locking the tty,
dbccacb79c63 7036236: VM crashes assert((!inside_attrs()) || is_error_reported()) failed ...
iveresov
parents: 2447
diff changeset
2356 // because log_state() will use locks causing lock conflicts.
dbccacb79c63 7036236: VM crashes assert((!inside_attrs()) || is_error_reported()) failed ...
iveresov
parents: 2447
diff changeset
2357 CodeCache::log_state(&s);
dbccacb79c63 7036236: VM crashes assert((!inside_attrs()) || is_error_reported()) failed ...
iveresov
parents: 2447
diff changeset
2358 // Lock to prevent tearing
dbccacb79c63 7036236: VM crashes assert((!inside_attrs()) || is_error_reported()) failed ...
iveresov
parents: 2447
diff changeset
2359 ttyLocker ttyl;
1728
a62d332029cf 6976372: # assert(_owner == Thread::current()) failed: invariant
never
parents: 1692
diff changeset
2360 xtty->begin_elem("code_cache_full");
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 14456
diff changeset
2361 xtty->print("%s", s.as_string());
1728
a62d332029cf 6976372: # assert(_owner == Thread::current()) failed: invariant
never
parents: 1692
diff changeset
2362 xtty->stamp();
a62d332029cf 6976372: # assert(_owner == Thread::current()) failed: invariant
never
parents: 1692
diff changeset
2363 xtty->end_elem();
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2364 }
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2365
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2366 CodeCache::report_codemem_full();
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2367
1578
ca3dceda776c 6930994: Code cache is full warning should be visible in product
never
parents: 1538
diff changeset
2368 #ifndef PRODUCT
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2369 if (CompileTheWorld || ExitOnFullCodeCache) {
7595
9deda4d8e126 8005204: Code Cache Reduction: command line options implementation
vladidan
parents: 7409
diff changeset
2370 codecache_print(/* detailed= */ true);
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2371 before_exit(JavaThread::current());
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2372 exit_globals(); // will delete tty
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2373 vm_direct_exit(CompileTheWorld ? 0 : 1);
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2374 }
1578
ca3dceda776c 6930994: Code cache is full warning should be visible in product
never
parents: 1538
diff changeset
2375 #endif
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2376 if (UseCodeCacheFlushing) {
12324
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
2377 // Since code cache is full, immediately stop new compiles
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
2378 if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
2379 NMethodSweeper::log_sweep("disable_compiler");
510fbd28919c 8020151: PSR:PERF Large performance regressions when code cache is filled
anoll
parents: 12158
diff changeset
2380 }
13074
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2381 // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2382 // without having to consider the state in which the current thread is.
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2383 ThreadInVMfromUnknown in_vm;
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2384 NMethodSweeper::possibly_sweep();
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2385 } else {
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12861
diff changeset
2386 disable_compilation_forever();
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2387 }
13074
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2388
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2389 // Print warning only once
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2390 if (should_print_compiler_warning()) {
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2391 warning("CodeCache is full. Compiler has been disabled.");
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2392 warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2393 codecache_print(/* detailed= */ true);
78da3894b86f 8027593: performance drop with constrained codecache starting with hs25 b111
anoll
parents: 13016
diff changeset
2394 }
1202
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2395 }
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2396 }
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2397
5f24d0319e54 4360113: Evict nmethods when code cache gets full
kvn
parents: 1131
diff changeset
2398 // ------------------------------------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2399 // CompileBroker::set_last_compile
a61af66fc99e Initial load
duke
parents:
diff changeset
2400 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2401 // Record this compilation for debugging purposes.
a61af66fc99e Initial load
duke
parents:
diff changeset
2402 void CompileBroker::set_last_compile(CompilerThread* thread, methodHandle method, bool is_osr, int comp_level) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2403 ResourceMark rm;
a61af66fc99e Initial load
duke
parents:
diff changeset
2404 char* method_name = method->name()->as_C_string();
a61af66fc99e Initial load
duke
parents:
diff changeset
2405 strncpy(_last_method_compiled, method_name, CompileBroker::name_buffer_length);
17567
5656140324ed 8030763: Validate global memory allocation
hseigel
parents: 13074
diff changeset
2406 _last_method_compiled[CompileBroker::name_buffer_length - 1] = '\0'; // ensure null terminated
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2407 char current_method[CompilerCounters::cmname_buffer_length];
a61af66fc99e Initial load
duke
parents:
diff changeset
2408 size_t maxLen = CompilerCounters::cmname_buffer_length;
a61af66fc99e Initial load
duke
parents:
diff changeset
2409
a61af66fc99e Initial load
duke
parents:
diff changeset
2410 if (UsePerfData) {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2411 const char* class_name = method->method_holder()->name()->as_C_string();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2412
a61af66fc99e Initial load
duke
parents:
diff changeset
2413 size_t s1len = strlen(class_name);
a61af66fc99e Initial load
duke
parents:
diff changeset
2414 size_t s2len = strlen(method_name);
a61af66fc99e Initial load
duke
parents:
diff changeset
2415
a61af66fc99e Initial load
duke
parents:
diff changeset
2416 // check if we need to truncate the string
a61af66fc99e Initial load
duke
parents:
diff changeset
2417 if (s1len + s2len + 2 > maxLen) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2418
a61af66fc99e Initial load
duke
parents:
diff changeset
2419 // the strategy is to lop off the leading characters of the
a61af66fc99e Initial load
duke
parents:
diff changeset
2420 // class name and the trailing characters of the method name.
a61af66fc99e Initial load
duke
parents:
diff changeset
2421
a61af66fc99e Initial load
duke
parents:
diff changeset
2422 if (s2len + 2 > maxLen) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2423 // lop of the entire class name string, let snprintf handle
a61af66fc99e Initial load
duke
parents:
diff changeset
2424 // truncation of the method name.
a61af66fc99e Initial load
duke
parents:
diff changeset
2425 class_name += s1len; // null string
a61af66fc99e Initial load
duke
parents:
diff changeset
2426 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2427 else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2428 // lop off the extra characters from the front of the class name
a61af66fc99e Initial load
duke
parents:
diff changeset
2429 class_name += ((s1len + s2len + 2) - maxLen);
a61af66fc99e Initial load
duke
parents:
diff changeset
2430 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2431 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2432
a61af66fc99e Initial load
duke
parents:
diff changeset
2433 jio_snprintf(current_method, maxLen, "%s %s", class_name, method_name);
a61af66fc99e Initial load
duke
parents:
diff changeset
2434 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2435
a61af66fc99e Initial load
duke
parents:
diff changeset
2436 if (CICountOSR && is_osr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2437 _last_compile_type = osr_compile;
a61af66fc99e Initial load
duke
parents:
diff changeset
2438 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2439 _last_compile_type = normal_compile;
a61af66fc99e Initial load
duke
parents:
diff changeset
2440 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2441 _last_compile_level = comp_level;
a61af66fc99e Initial load
duke
parents:
diff changeset
2442
a61af66fc99e Initial load
duke
parents:
diff changeset
2443 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2444 CompilerCounters* counters = thread->counters();
a61af66fc99e Initial load
duke
parents:
diff changeset
2445 counters->set_current_method(current_method);
a61af66fc99e Initial load
duke
parents:
diff changeset
2446 counters->set_compile_type((jlong)_last_compile_type);
a61af66fc99e Initial load
duke
parents:
diff changeset
2447 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2448 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2449
a61af66fc99e Initial load
duke
parents:
diff changeset
2450
a61af66fc99e Initial load
duke
parents:
diff changeset
2451 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2452 // CompileBroker::push_jni_handle_block
a61af66fc99e Initial load
duke
parents:
diff changeset
2453 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2454 // Push on a new block of JNI handles.
a61af66fc99e Initial load
duke
parents:
diff changeset
2455 void CompileBroker::push_jni_handle_block() {
a61af66fc99e Initial load
duke
parents:
diff changeset
2456 JavaThread* thread = JavaThread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
2457
a61af66fc99e Initial load
duke
parents:
diff changeset
2458 // Allocate a new block for JNI handles.
a61af66fc99e Initial load
duke
parents:
diff changeset
2459 // Inlined code from jni_PushLocalFrame()
a61af66fc99e Initial load
duke
parents:
diff changeset
2460 JNIHandleBlock* java_handles = thread->active_handles();
a61af66fc99e Initial load
duke
parents:
diff changeset
2461 JNIHandleBlock* compile_handles = JNIHandleBlock::allocate_block(thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
2462 assert(compile_handles != NULL && java_handles != NULL, "should not be NULL");
a61af66fc99e Initial load
duke
parents:
diff changeset
2463 compile_handles->set_pop_frame_link(java_handles); // make sure java handles get gc'd.
a61af66fc99e Initial load
duke
parents:
diff changeset
2464 thread->set_active_handles(compile_handles);
a61af66fc99e Initial load
duke
parents:
diff changeset
2465 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2466
a61af66fc99e Initial load
duke
parents:
diff changeset
2467
a61af66fc99e Initial load
duke
parents:
diff changeset
2468 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2469 // CompileBroker::pop_jni_handle_block
a61af66fc99e Initial load
duke
parents:
diff changeset
2470 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2471 // Pop off the current block of JNI handles.
a61af66fc99e Initial load
duke
parents:
diff changeset
2472 void CompileBroker::pop_jni_handle_block() {
a61af66fc99e Initial load
duke
parents:
diff changeset
2473 JavaThread* thread = JavaThread::current();
a61af66fc99e Initial load
duke
parents:
diff changeset
2474
a61af66fc99e Initial load
duke
parents:
diff changeset
2475 // Release our JNI handle block
a61af66fc99e Initial load
duke
parents:
diff changeset
2476 JNIHandleBlock* compile_handles = thread->active_handles();
a61af66fc99e Initial load
duke
parents:
diff changeset
2477 JNIHandleBlock* java_handles = compile_handles->pop_frame_link();
a61af66fc99e Initial load
duke
parents:
diff changeset
2478 thread->set_active_handles(java_handles);
a61af66fc99e Initial load
duke
parents:
diff changeset
2479 compile_handles->set_pop_frame_link(NULL);
a61af66fc99e Initial load
duke
parents:
diff changeset
2480 JNIHandleBlock::release_block(compile_handles, thread); // may block
a61af66fc99e Initial load
duke
parents:
diff changeset
2481 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2482
a61af66fc99e Initial load
duke
parents:
diff changeset
2483
a61af66fc99e Initial load
duke
parents:
diff changeset
2484 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2485 // CompileBroker::check_break_at
a61af66fc99e Initial load
duke
parents:
diff changeset
2486 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2487 // Should the compilation break at the current compilation.
a61af66fc99e Initial load
duke
parents:
diff changeset
2488 bool CompileBroker::check_break_at(methodHandle method, int compile_id, bool is_osr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2489 if (CICountOSR && is_osr && (compile_id == CIBreakAtOSR)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2490 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
2491 } else if( CompilerOracle::should_break_at(method) ) { // break when compiling
a61af66fc99e Initial load
duke
parents:
diff changeset
2492 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
2493 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2494 return (compile_id == CIBreakAt);
a61af66fc99e Initial load
duke
parents:
diff changeset
2495 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2496 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2497
a61af66fc99e Initial load
duke
parents:
diff changeset
2498 // ------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
2499 // CompileBroker::collect_statistics
a61af66fc99e Initial load
duke
parents:
diff changeset
2500 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2501 // Collect statistics about the compilation.
a61af66fc99e Initial load
duke
parents:
diff changeset
2502
a61af66fc99e Initial load
duke
parents:
diff changeset
2503 void CompileBroker::collect_statistics(CompilerThread* thread, elapsedTimer time, CompileTask* task) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2504 bool success = task->is_success();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2505 methodHandle method (thread, task->method());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2506 uint compile_id = task->compile_id();
a61af66fc99e Initial load
duke
parents:
diff changeset
2507 bool is_osr = (task->osr_bci() != standard_entry_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
2508 nmethod* code = task->code();
a61af66fc99e Initial load
duke
parents:
diff changeset
2509 CompilerCounters* counters = thread->counters();
a61af66fc99e Initial load
duke
parents:
diff changeset
2510
a61af66fc99e Initial load
duke
parents:
diff changeset
2511 assert(code == NULL || code->is_locked_by_vm(), "will survive the MutexLocker");
a61af66fc99e Initial load
duke
parents:
diff changeset
2512 MutexLocker locker(CompileStatistics_lock);
a61af66fc99e Initial load
duke
parents:
diff changeset
2513
a61af66fc99e Initial load
duke
parents:
diff changeset
2514 // _perf variables are production performance counters which are
a61af66fc99e Initial load
duke
parents:
diff changeset
2515 // updated regardless of the setting of the CITime and CITimeEach flags
a61af66fc99e Initial load
duke
parents:
diff changeset
2516 //
a61af66fc99e Initial load
duke
parents:
diff changeset
2517 if (!success) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2518 _total_bailout_count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
2519 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2520 _perf_last_failed_method->set_value(counters->current_method());
a61af66fc99e Initial load
duke
parents:
diff changeset
2521 _perf_last_failed_type->set_value(counters->compile_type());
a61af66fc99e Initial load
duke
parents:
diff changeset
2522 _perf_total_bailout_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
2523 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2524 } else if (code == NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2525 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2526 _perf_last_invalidated_method->set_value(counters->current_method());
a61af66fc99e Initial load
duke
parents:
diff changeset
2527 _perf_last_invalidated_type->set_value(counters->compile_type());
a61af66fc99e Initial load
duke
parents:
diff changeset
2528 _perf_total_invalidated_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
2529 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2530 _total_invalidated_count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
2531 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2532 // Compilation succeeded
a61af66fc99e Initial load
duke
parents:
diff changeset
2533
a61af66fc99e Initial load
duke
parents:
diff changeset
2534 // update compilation ticks - used by the implementation of
a61af66fc99e Initial load
duke
parents:
diff changeset
2535 // java.lang.management.CompilationMBean
a61af66fc99e Initial load
duke
parents:
diff changeset
2536 _perf_total_compilation->inc(time.ticks());
a61af66fc99e Initial load
duke
parents:
diff changeset
2537
10405
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2538 _t_total_compilation.add(time);
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2539 _peak_compilation_time = time.milliseconds() > _peak_compilation_time ? time.milliseconds() : _peak_compilation_time;
f2110083203d 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 10394
diff changeset
2540
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2541 if (CITime) {
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2542 int bytes_compiled = method->code_size() + task->num_inlined_bytecodes();
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2543 JVMCI_ONLY(CompilerStatistics* stats = compiler(task->comp_level())->stats();)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2544 if (is_osr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2545 _t_osr_compilation.add(time);
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2546 _sum_osr_bytes_compiled += bytes_compiled;
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2547 JVMCI_ONLY(stats->_osr.update(time, bytes_compiled);)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2548 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2549 _t_standard_compilation.add(time);
a61af66fc99e Initial load
duke
parents:
diff changeset
2550 _sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2551 JVMCI_ONLY(stats->_standard.update(time, bytes_compiled);)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2552 }
21559
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2553 JVMCI_ONLY(stats->_nmethods_size += code->total_size();)
be896a1983c0 recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21527
diff changeset
2554 JVMCI_ONLY(stats->_nmethods_code_size += code->insts_size();)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2555 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2556
a61af66fc99e Initial load
duke
parents:
diff changeset
2557 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2558 // save the name of the last method compiled
a61af66fc99e Initial load
duke
parents:
diff changeset
2559 _perf_last_method->set_value(counters->current_method());
a61af66fc99e Initial load
duke
parents:
diff changeset
2560 _perf_last_compile_type->set_value(counters->compile_type());
a61af66fc99e Initial load
duke
parents:
diff changeset
2561 _perf_last_compile_size->set_value(method->code_size() +
a61af66fc99e Initial load
duke
parents:
diff changeset
2562 task->num_inlined_bytecodes());
a61af66fc99e Initial load
duke
parents:
diff changeset
2563 if (is_osr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2564 _perf_osr_compilation->inc(time.ticks());
a61af66fc99e Initial load
duke
parents:
diff changeset
2565 _perf_sum_osr_bytes_compiled->inc(method->code_size() + task->num_inlined_bytecodes());
a61af66fc99e Initial load
duke
parents:
diff changeset
2566 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2567 _perf_standard_compilation->inc(time.ticks());
a61af66fc99e Initial load
duke
parents:
diff changeset
2568 _perf_sum_standard_bytes_compiled->inc(method->code_size() + task->num_inlined_bytecodes());
a61af66fc99e Initial load
duke
parents:
diff changeset
2569 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2570 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2571
a61af66fc99e Initial load
duke
parents:
diff changeset
2572 if (CITimeEach) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2573 float bytes_per_sec = 1.0 * (method->code_size() + task->num_inlined_bytecodes()) / time.seconds();
a61af66fc99e Initial load
duke
parents:
diff changeset
2574 tty->print_cr("%3d seconds: %f bytes/sec : %f (bytes %d + %d inlined)",
a61af66fc99e Initial load
duke
parents:
diff changeset
2575 compile_id, time.seconds(), bytes_per_sec, method->code_size(), task->num_inlined_bytecodes());
a61af66fc99e Initial load
duke
parents:
diff changeset
2576 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2577
a61af66fc99e Initial load
duke
parents:
diff changeset
2578 // Collect counts of successful compilations
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1728
diff changeset
2579 _sum_nmethod_size += code->total_size();
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1728
diff changeset
2580 _sum_nmethod_code_size += code->insts_size();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2581 _total_compile_count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
2582
a61af66fc99e Initial load
duke
parents:
diff changeset
2583 if (UsePerfData) {
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1728
diff changeset
2584 _perf_sum_nmethod_size->inc( code->total_size());
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1728
diff changeset
2585 _perf_sum_nmethod_code_size->inc(code->insts_size());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2586 _perf_total_compile_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
2587 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2588
a61af66fc99e Initial load
duke
parents:
diff changeset
2589 if (is_osr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2590 if (UsePerfData) _perf_total_osr_compile_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
2591 _total_osr_compile_count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
2592 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2593 if (UsePerfData) _perf_total_standard_compile_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
2594 _total_standard_compile_count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
2595 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2596 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2597 // set the current method for the thread to null
a61af66fc99e Initial load
duke
parents:
diff changeset
2598 if (UsePerfData) counters->set_current_method("");
a61af66fc99e Initial load
duke
parents:
diff changeset
2599 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2600
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2601 const char* CompileBroker::compiler_name(int comp_level) {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2602 AbstractCompiler *comp = CompileBroker::compiler(comp_level);
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2603 if (comp == NULL) {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2604 return "no compiler";
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2605 } else {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2606 return (comp->name());
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2607 }
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2608 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2609
22298
c28cb37b2e1d Rename JVMCI to INCLUDE_JVMCI.
twisti
parents: 21559
diff changeset
2610 #if INCLUDE_JVMCI
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2611 void CompileBroker::print_times(AbstractCompiler* comp) {
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2612 CompilerStatistics* stats = comp->stats();
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2613 tty->print_cr(" %s {speed: %d bytes/s; standard: %6.3f s, %d bytes, %d methods; osr: %6.3f s, %d bytes, %d methods; nmethods_size: %d bytes; nmethods_code_size: %d bytes}",
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2614 comp->name(), stats->bytes_per_second(),
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2615 stats->_standard._time.seconds(), stats->_standard._bytes, stats->_standard._count,
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2616 stats->_osr._time.seconds(), stats->_osr._bytes, stats->_osr._count,
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2617 stats->_nmethods_size, stats->_nmethods_code_size);
17374
4a6e24a8fc2c Track code installation time
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 17166
diff changeset
2618 comp->print_timers();
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2619 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2620 #endif
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2621
13364
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2622 void CompileBroker::print_times(bool per_compiler, bool aggregate) {
22298
c28cb37b2e1d Rename JVMCI to INCLUDE_JVMCI.
twisti
parents: 21559
diff changeset
2623 #if INCLUDE_JVMCI
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2624 elapsedTimer standard_compilation;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2625 elapsedTimer total_compilation;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2626 elapsedTimer osr_compilation;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2627
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2628 int standard_bytes_compiled = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2629 int osr_bytes_compiled = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2630
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2631 int standard_compile_count = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2632 int osr_compile_count = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2633 int total_compile_count = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2634
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2635 int nmethods_size = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2636 int nmethods_code_size = 0;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2637 bool printedHeader = false;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2638
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2639 for (unsigned int i = 0; i < sizeof(_compilers) / sizeof(AbstractCompiler*); i++) {
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2640 AbstractCompiler* comp = _compilers[i];
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2641 if (comp != NULL) {
13364
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2642 if (per_compiler && aggregate && !printedHeader) {
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2643 printedHeader = true;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2644 tty->cr();
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2645 tty->print_cr("Individual compiler times (for compiled methods only)");
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2646 tty->print_cr("------------------------------------------------");
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2647 tty->cr();
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2648 }
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2649 CompilerStatistics* stats = comp->stats();
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2650
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2651 standard_compilation.add(stats->_standard._time);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2652 osr_compilation.add(stats->_osr._time);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2653
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2654 standard_bytes_compiled += stats->_standard._bytes;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2655 osr_bytes_compiled += stats->_osr._bytes;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2656
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2657 standard_compile_count += stats->_standard._count;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2658 osr_compile_count += stats->_osr._count;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2659
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2660 nmethods_size += stats->_nmethods_size;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2661 nmethods_code_size += stats->_nmethods_code_size;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2662
13364
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2663 if (per_compiler) {
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15494
diff changeset
2664 print_times(comp);
13364
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2665 }
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2666 }
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2667 }
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2668 total_compile_count = osr_compile_count + standard_compile_count;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2669 total_compilation.add(osr_compilation);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2670 total_compilation.add(standard_compilation);
18171
9bb816169777 Report code install timer in hosted mode
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18125
diff changeset
2671
23404
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
2672 if (!UseJVMCICompiler) {
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
2673 // In hosted mode, print the JVMCI compiler specific counters manually.
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
2674 JVMCICompiler::print_compilation_timers();
3ef45d0a6d77 Remove jvmci VM configuration, and backport UseJVMCICompiler flag.
Roland Schatz <roland.schatz@oracle.com>
parents: 23303
diff changeset
2675 }
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2676 #else
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2677 elapsedTimer standard_compilation = CompileBroker::_t_standard_compilation;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2678 elapsedTimer osr_compilation = CompileBroker::_t_osr_compilation;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2679 elapsedTimer total_compilation = CompileBroker::_t_total_compilation;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2680
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2681 int standard_bytes_compiled = CompileBroker::_sum_standard_bytes_compiled;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2682 int osr_bytes_compiled = CompileBroker::_sum_osr_bytes_compiled;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2683
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2684 int standard_compile_count = CompileBroker::_total_standard_compile_count;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2685 int osr_compile_count = CompileBroker::_total_osr_compile_count;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2686 int total_compile_count = CompileBroker::_total_compile_count;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2687
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2688 int nmethods_size = CompileBroker::_sum_nmethod_code_size;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2689 int nmethods_code_size = CompileBroker::_sum_nmethod_size;
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2690 #endif
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2691
13364
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2692 if (!aggregate) {
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2693 return;
5a4293f24642 added -G:PrintCompRate option for periodically printing out the current compilation rate
Doug Simon <doug.simon@oracle.com>
parents: 13107
diff changeset
2694 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2695 tty->cr();
a61af66fc99e Initial load
duke
parents:
diff changeset
2696 tty->print_cr("Accumulated compiler times (for compiled methods only)");
a61af66fc99e Initial load
duke
parents:
diff changeset
2697 tty->print_cr("------------------------------------------------");
a61af66fc99e Initial load
duke
parents:
diff changeset
2698 //0000000000111111111122222222223333333333444444444455555555556666666666
a61af66fc99e Initial load
duke
parents:
diff changeset
2699 //0123456789012345678901234567890123456789012345678901234567890123456789
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2700 tty->print_cr(" Total compilation time : %6.3f s", total_compilation.seconds());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2701 tty->print_cr(" Standard compilation : %6.3f s, Average : %2.3f",
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2702 standard_compilation.seconds(),
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2703 standard_compilation.seconds() / standard_compile_count);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2704 tty->print_cr(" On stack replacement : %6.3f s, Average : %2.3f", osr_compilation.seconds(), osr_compilation.seconds() / osr_compile_count);
1131
40e7c1d24e4a 6909153: Fix broken options on Zero
twisti
parents: 844
diff changeset
2705
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2706 AbstractCompiler *comp = compiler(CompLevel_simple);
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2707 if (comp != NULL) {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2708 comp->print_timers();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2709 }
8771
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2710 comp = compiler(CompLevel_full_optimization);
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2711 if (comp != NULL) {
75a28f465a12 8008663: [parfait] Null pointer deference in hotspot/src/share/vm/compiler/compileBroker.cpp
morris
parents: 8730
diff changeset
2712 comp->print_timers();
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1748
diff changeset
2713 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2714 tty->cr();
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2715 tty->print_cr(" Total compiled methods : %6d methods", total_compile_count);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2716 tty->print_cr(" Standard compilation : %6d methods", standard_compile_count);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2717 tty->print_cr(" On stack replacement : %6d methods", osr_compile_count);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2718 int tcb = osr_bytes_compiled + standard_bytes_compiled;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2719 tty->print_cr(" Total compiled bytecodes : %6d bytes", tcb);
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2720 tty->print_cr(" Standard compilation : %6d bytes", standard_bytes_compiled);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2721 tty->print_cr(" On stack replacement : %6d bytes", osr_bytes_compiled);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2722 double tcs = total_compilation.seconds();
7568
140d4d4ab3b9 added per-compiler compilation speed statistics for C1 and C2 (included in output produced by -XX:+CITime)
Doug Simon <doug.simon@oracle.com>
parents: 7482
diff changeset
2723 int bps = tcs == 0.0 ? 0 : (int)(tcb / tcs);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2724 tty->print_cr(" Average compilation speed: %6d bytes/s", bps);
a61af66fc99e Initial load
duke
parents:
diff changeset
2725 tty->cr();
12779
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2726 tty->print_cr(" nmethod code size : %6d bytes", nmethods_code_size);
f6c511451e4a made Graal report its compilation info under -XX:+CITime in the same format as c1 and c2
Doug Simon <doug.simon@oracle.com>
parents: 12356
diff changeset
2727 tty->print_cr(" nmethod total size : %6d bytes", nmethods_size);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
2728 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2729
a61af66fc99e Initial load
duke
parents:
diff changeset
2730 // Debugging output for failure
a61af66fc99e Initial load
duke
parents:
diff changeset
2731 void CompileBroker::print_last_compile() {
a61af66fc99e Initial load
duke
parents:
diff changeset
2732 if ( _last_compile_level != CompLevel_none &&
a61af66fc99e Initial load
duke
parents:
diff changeset
2733 compiler(_last_compile_level) != NULL &&
a61af66fc99e Initial load
duke
parents:
diff changeset
2734 _last_method_compiled != NULL &&
a61af66fc99e Initial load
duke
parents:
diff changeset
2735 _last_compile_type != no_compile) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2736 if (_last_compile_type == osr_compile) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2737 tty->print_cr("Last parse: [osr]%d+++(%d) %s",
a61af66fc99e Initial load
duke
parents:
diff changeset
2738 _osr_compilation_id, _last_compile_level, _last_method_compiled);
a61af66fc99e Initial load
duke
parents:
diff changeset
2739 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
2740 tty->print_cr("Last parse: %d+++(%d) %s",
a61af66fc99e Initial load
duke
parents:
diff changeset
2741 _compilation_id, _last_compile_level, _last_method_compiled);
a61af66fc99e Initial load
duke
parents:
diff changeset
2742 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2743 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2744 }
a61af66fc99e Initial load
duke
parents:
diff changeset
2745
a61af66fc99e Initial load
duke
parents:
diff changeset
2746
a61af66fc99e Initial load
duke
parents:
diff changeset
2747 void CompileBroker::print_compiler_threads_on(outputStream* st) {
a61af66fc99e Initial load
duke
parents:
diff changeset
2748 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
2749 st->print_cr("Compiler thread printing unimplemented.");
a61af66fc99e Initial load
duke
parents:
diff changeset
2750 st->cr();
a61af66fc99e Initial load
duke
parents:
diff changeset
2751 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
2752 }