annotate src/share/vm/runtime/simpleThresholdPolicy.cpp @ 2607:008adfd6d850

Fixed the stateBefore of invokes and monitorenter instructions to include the arguments of the instruction. This is necessary to ensure correct continuation in the interpreter when the stateBefore is used as a deoptimization point.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Fri, 06 May 2011 17:47:17 +0200
parents 72d6c57d0658
children 97b64f73103b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
1 /*
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
4 *
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
7 * published by the Free Software Foundation.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
8 *
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
13 * accompanied this code).
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
14 *
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
18 *
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
21 * questions.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
22 *
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
23 */
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1964
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1964
diff changeset
26 #include "compiler/compileBroker.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1964
diff changeset
27 #include "memory/resourceArea.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1964
diff changeset
28 #include "runtime/arguments.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1964
diff changeset
29 #include "runtime/simpleThresholdPolicy.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1964
diff changeset
30 #include "runtime/simpleThresholdPolicy.inline.hpp"
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
31 #include "code/scopeDesc.hpp"
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
32
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
33 // Print an event.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
34 void SimpleThresholdPolicy::print_event(EventType type, methodHandle mh, methodHandle imh,
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
35 int bci, CompLevel level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
36 bool inlinee_event = mh() != imh();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
37
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
38 ttyLocker tty_lock;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
39 tty->print("%lf: [", os::elapsedTime());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
40
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
41 int invocation_count = mh->invocation_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
42 int backedge_count = mh->backedge_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
43 switch(type) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
44 case CALL:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
45 tty->print("call");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
46 break;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
47 case LOOP:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
48 tty->print("loop");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
49 break;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
50 case COMPILE:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
51 tty->print("compile");
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
52 break;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
53 case KILL:
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
54 tty->print("kill");
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
55 break;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
56 case UPDATE:
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
57 tty->print("update");
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
58 break;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
59 case REPROFILE:
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
60 tty->print("reprofile");
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
61 break;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
62 default:
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
63 tty->print("unknown");
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
64 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
65
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
66 tty->print(" level: %d ", level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
67
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
68 ResourceMark rm;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
69 char *method_name = mh->name_and_sig_as_C_string();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
70 tty->print("[%s", method_name);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
71 // We can have an inlinee, although currently we don't generate any notifications for the inlined methods.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
72 if (inlinee_event) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
73 char *inlinee_name = imh->name_and_sig_as_C_string();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
74 tty->print(" [%s]] ", inlinee_name);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
75 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
76 else tty->print("] ");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
77 tty->print("@%d queues: %d,%d", bci, CompileBroker::queue_size(CompLevel_full_profile),
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
78 CompileBroker::queue_size(CompLevel_full_optimization));
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
79
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
80 print_specific(type, mh, imh, bci, level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
81
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
82 if (type != COMPILE) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
83 methodDataHandle mdh = mh->method_data();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
84 int mdo_invocations = 0, mdo_backedges = 0;
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
85 int mdo_invocations_start = 0, mdo_backedges_start = 0;
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
86 if (mdh() != NULL) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
87 mdo_invocations = mdh->invocation_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
88 mdo_backedges = mdh->backedge_count();
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
89 mdo_invocations_start = mdh->invocation_count_start();
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
90 mdo_backedges_start = mdh->backedge_count_start();
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
91 }
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
92 tty->print(" total: %d,%d mdo: %d(%d),%d(%d)",
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
93 invocation_count, backedge_count,
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
94 mdo_invocations, mdo_invocations_start,
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
95 mdo_backedges, mdo_backedges_start);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
96 tty->print(" max levels: %d,%d",
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
97 mh->highest_comp_level(), mh->highest_osr_comp_level());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
98 if (inlinee_event) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
99 tty->print(" inlinee max levels: %d,%d", imh->highest_comp_level(), imh->highest_osr_comp_level());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
100 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
101 tty->print(" compilable: ");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
102 bool need_comma = false;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
103 if (!mh->is_not_compilable(CompLevel_full_profile)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
104 tty->print("c1");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
105 need_comma = true;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
106 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
107 if (!mh->is_not_compilable(CompLevel_full_optimization)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
108 if (need_comma) tty->print(", ");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
109 tty->print("c2");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
110 need_comma = true;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
111 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
112 if (!mh->is_not_osr_compilable()) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
113 if (need_comma) tty->print(", ");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
114 tty->print("osr");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
115 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
116 tty->print(" status:");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
117 if (mh->queued_for_compilation()) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
118 tty->print(" in queue");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
119 } else tty->print(" idle");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
120 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
121 tty->print_cr("]");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
122 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
123
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
124 void SimpleThresholdPolicy::initialize() {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
125 if (FLAG_IS_DEFAULT(CICompilerCount)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
126 FLAG_SET_DEFAULT(CICompilerCount, 3);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
127 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
128 int count = CICompilerCount;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
129 if (CICompilerCountPerCPU) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
130 count = MAX2(log2_intptr(os::active_processor_count()), 1) * 3 / 2;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
131 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
132 set_c1_count(MAX2(count / 3, 1));
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
133 set_c2_count(MAX2(count - count / 3, 1));
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
134 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
135
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
136 void SimpleThresholdPolicy::set_carry_if_necessary(InvocationCounter *counter) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
137 if (!counter->carry() && counter->count() > InvocationCounter::count_limit / 2) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
138 counter->set_carry_flag();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
139 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
140 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
141
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
142 // Set carry flags on the counters if necessary
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
143 void SimpleThresholdPolicy::handle_counter_overflow(methodOop method) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
144 set_carry_if_necessary(method->invocation_counter());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
145 set_carry_if_necessary(method->backedge_counter());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
146 methodDataOop mdo = method->method_data();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
147 if (mdo != NULL) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
148 set_carry_if_necessary(mdo->invocation_counter());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
149 set_carry_if_necessary(mdo->backedge_counter());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
150 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
151 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
152
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
153 // Called with the queue locked and with at least one element
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
154 CompileTask* SimpleThresholdPolicy::select_task(CompileQueue* compile_queue) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
155 return compile_queue->first();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
156 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
157
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
158 void SimpleThresholdPolicy::reprofile(ScopeDesc* trap_scope, bool is_osr) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
159 for (ScopeDesc* sd = trap_scope;; sd = sd->sender()) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
160 if (PrintTieredEvents) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
161 methodHandle mh(sd->method());
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
162 print_event(REPROFILE, mh, mh, InvocationEntryBci, CompLevel_none);
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
163 }
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
164 methodDataOop mdo = sd->method()->method_data();
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
165 if (mdo != NULL) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
166 mdo->reset_start_counters();
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
167 }
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
168 if (sd->is_top()) break;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
169 }
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
170 }
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
171
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
172 nmethod* SimpleThresholdPolicy::event(methodHandle method, methodHandle inlinee,
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
173 int branch_bci, int bci, CompLevel comp_level, TRAPS) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
174 if (comp_level == CompLevel_none &&
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
175 JvmtiExport::can_post_interpreter_events()) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
176 assert(THREAD->is_Java_thread(), "Should be java thread");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
177 if (((JavaThread*)THREAD)->is_interp_only_mode()) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
178 return NULL;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
179 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
180 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
181 nmethod *osr_nm = NULL;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
182
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
183 handle_counter_overflow(method());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
184 if (method() != inlinee()) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
185 handle_counter_overflow(inlinee());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
186 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
187
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
188 if (PrintTieredEvents) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
189 print_event(bci == InvocationEntryBci ? CALL : LOOP, method, inlinee, bci, comp_level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
190 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
191
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
192 if (bci == InvocationEntryBci) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
193 method_invocation_event(method, inlinee, comp_level, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
194 } else {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
195 method_back_branch_event(method, inlinee, bci, comp_level, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
196 int highest_level = method->highest_osr_comp_level();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
197 if (highest_level > comp_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
198 osr_nm = method->lookup_osr_nmethod_for(bci, highest_level, false);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
199 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
200 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
201 return osr_nm;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
202 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
203
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
204 // Check if the method can be compiled, change level if necessary
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
205 void SimpleThresholdPolicy::compile(methodHandle mh, int bci, CompLevel level, TRAPS) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
206 // Take the given ceiling into the account.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
207 // NOTE: You can set it to 1 to get a pure C1 version.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
208 if ((CompLevel)TieredStopAtLevel < level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
209 level = (CompLevel)TieredStopAtLevel;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
210 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
211 if (level == CompLevel_none) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
212 return;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
213 }
1964
22ef3370343b 7000349: Tiered reacts incorrectly to C1 compilation failures
iveresov
parents: 1783
diff changeset
214 // Check if the method can be compiled. If it cannot be compiled with C1, continue profiling
22ef3370343b 7000349: Tiered reacts incorrectly to C1 compilation failures
iveresov
parents: 1783
diff changeset
215 // in the interpreter and then compile with C2 (the transition function will request that,
22ef3370343b 7000349: Tiered reacts incorrectly to C1 compilation failures
iveresov
parents: 1783
diff changeset
216 // see common() ). If the method cannot be compiled with C2 but still can with C1, compile it with
22ef3370343b 7000349: Tiered reacts incorrectly to C1 compilation failures
iveresov
parents: 1783
diff changeset
217 // pure C1.
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
218 if (!can_be_compiled(mh, level)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
219 if (level == CompLevel_full_optimization && can_be_compiled(mh, CompLevel_simple)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
220 compile(mh, bci, CompLevel_simple, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
221 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
222 return;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
223 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
224 if (bci != InvocationEntryBci && mh->is_not_osr_compilable()) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
225 return;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
226 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
227 if (PrintTieredEvents) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
228 print_event(COMPILE, mh, mh, bci, level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
229 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
230 if (!CompileBroker::compilation_is_in_queue(mh, bci)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
231 submit_compile(mh, bci, level, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
232 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
233 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
234
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
235 // Tell the broker to compile the method
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
236 void SimpleThresholdPolicy::submit_compile(methodHandle mh, int bci, CompLevel level, TRAPS) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
237 int hot_count = (bci == InvocationEntryBci) ? mh->invocation_count() : mh->backedge_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
238 CompileBroker::compile_method(mh, bci, level, mh, hot_count, "tiered", THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
239 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
240
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
241 // Call and loop predicates determine whether a transition to a higher
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
242 // compilation level should be performed (pointers to predicate functions
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
243 // are passed to common() transition function).
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
244 bool SimpleThresholdPolicy::loop_predicate(int i, int b, CompLevel cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
245 switch(cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
246 case CompLevel_none:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
247 case CompLevel_limited_profile: {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
248 return loop_predicate_helper<CompLevel_none>(i, b, 1.0);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
249 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
250 case CompLevel_full_profile: {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
251 return loop_predicate_helper<CompLevel_full_profile>(i, b, 1.0);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
252 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
253 default:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
254 return true;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
255 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
256 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
257
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
258 bool SimpleThresholdPolicy::call_predicate(int i, int b, CompLevel cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
259 switch(cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
260 case CompLevel_none:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
261 case CompLevel_limited_profile: {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
262 return call_predicate_helper<CompLevel_none>(i, b, 1.0);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
263 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
264 case CompLevel_full_profile: {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
265 return call_predicate_helper<CompLevel_full_profile>(i, b, 1.0);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
266 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
267 default:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
268 return true;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
269 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
270 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
271
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
272 // Determine is a method is mature.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
273 bool SimpleThresholdPolicy::is_mature(methodOop method) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
274 if (is_trivial(method)) return true;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
275 methodDataOop mdo = method->method_data();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
276 if (mdo != NULL) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
277 int i = mdo->invocation_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
278 int b = mdo->backedge_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
279 double k = ProfileMaturityPercentage / 100.0;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
280 return call_predicate_helper<CompLevel_full_profile>(i, b, k) ||
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
281 loop_predicate_helper<CompLevel_full_profile>(i, b, k);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
282 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
283 return false;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
284 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
285
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
286 // Common transition function. Given a predicate determines if a method should transition to another level.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
287 CompLevel SimpleThresholdPolicy::common(Predicate p, methodOop method, CompLevel cur_level) {
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
288 if (is_trivial(method)) return CompLevel_simple;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
289
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
290 CompLevel next_level = cur_level;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
291 int i = method->invocation_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
292 int b = method->backedge_count();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
293
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
294 switch(cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
295 case CompLevel_none:
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
296 // If we were at full profile level, would we switch to full opt?
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
297 if (common(p, method, CompLevel_full_profile) == CompLevel_full_optimization) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
298 next_level = CompLevel_full_optimization;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
299 } else if ((this->*p)(i, b, cur_level)) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
300 next_level = CompLevel_full_profile;
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
301 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
302 break;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
303 case CompLevel_limited_profile:
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
304 case CompLevel_full_profile:
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
305 {
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
306 methodDataOop mdo = method->method_data();
2252
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
307 if (mdo != NULL) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
308 if (mdo->would_profile()) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
309 int mdo_i = mdo->invocation_count_delta();
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
310 int mdo_b = mdo->backedge_count_delta();
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
311 if ((this->*p)(mdo_i, mdo_b, cur_level)) {
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
312 next_level = CompLevel_full_optimization;
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
313 }
72d6c57d0658 7017434: Tiered needs to support reprofiling
iveresov
parents: 1972
diff changeset
314 } else {
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
315 next_level = CompLevel_full_optimization;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
316 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
317 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
318 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
319 break;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
320 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
321 return next_level;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
322 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
323
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
324 // Determine if a method should be compiled with a normal entry point at a different level.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
325 CompLevel SimpleThresholdPolicy::call_event(methodOop method, CompLevel cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
326 CompLevel osr_level = (CompLevel) method->highest_osr_comp_level();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
327 CompLevel next_level = common(&SimpleThresholdPolicy::call_predicate, method, cur_level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
328
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
329 // If OSR method level is greater than the regular method level, the levels should be
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
330 // equalized by raising the regular method level in order to avoid OSRs during each
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
331 // invocation of the method.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
332 if (osr_level == CompLevel_full_optimization && cur_level == CompLevel_full_profile) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
333 methodDataOop mdo = method->method_data();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
334 guarantee(mdo != NULL, "MDO should not be NULL");
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
335 if (mdo->invocation_count() >= 1) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
336 next_level = CompLevel_full_optimization;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
337 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
338 } else {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
339 next_level = MAX2(osr_level, next_level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
340 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
341
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
342 return next_level;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
343 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
344
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
345 // Determine if we should do an OSR compilation of a given method.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
346 CompLevel SimpleThresholdPolicy::loop_event(methodOop method, CompLevel cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
347 if (cur_level == CompLevel_none) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
348 // If there is a live OSR method that means that we deopted to the interpreter
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
349 // for the transition.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
350 CompLevel osr_level = (CompLevel)method->highest_osr_comp_level();
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
351 if (osr_level > CompLevel_none) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
352 return osr_level;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
353 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
354 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
355 return common(&SimpleThresholdPolicy::loop_predicate, method, cur_level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
356 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
357
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
358
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
359 // Handle the invocation event.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
360 void SimpleThresholdPolicy::method_invocation_event(methodHandle mh, methodHandle imh,
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
361 CompLevel level, TRAPS) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
362 if (is_compilation_enabled() && !CompileBroker::compilation_is_in_queue(mh, InvocationEntryBci)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
363 CompLevel next_level = call_event(mh(), level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
364 if (next_level != level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
365 compile(mh, InvocationEntryBci, next_level, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
366 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
367 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
368 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
369
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
370 // Handle the back branch event. Notice that we can compile the method
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
371 // with a regular entry from here.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
372 void SimpleThresholdPolicy::method_back_branch_event(methodHandle mh, methodHandle imh,
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
373 int bci, CompLevel level, TRAPS) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
374 // If the method is already compiling, quickly bail out.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
375 if (is_compilation_enabled() && !CompileBroker::compilation_is_in_queue(mh, bci)) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
376 // Use loop event as an opportinity to also check there's been
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
377 // enough calls.
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
378 CompLevel cur_level = comp_level(mh());
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
379 CompLevel next_level = call_event(mh(), cur_level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
380 CompLevel next_osr_level = loop_event(mh(), level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
381
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
382 next_level = MAX2(next_level,
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
383 next_osr_level < CompLevel_full_optimization ? next_osr_level : cur_level);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
384 bool is_compiling = false;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
385 if (next_level != cur_level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
386 compile(mh, InvocationEntryBci, next_level, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
387 is_compiling = true;
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
388 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
389
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
390 // Do the OSR version
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
391 if (!is_compiling && next_osr_level != level) {
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
392 compile(mh, bci, next_osr_level, THREAD);
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
393 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
394 }
d5d065957597 6953144: Tiered compilation
iveresov
parents:
diff changeset
395 }