Mercurial > hg > graal-compiler
comparison src/share/vm/opto/bytecodeInfo.cpp @ 6972:bd7a7ce2e264
6830717: replay of compilations would help with debugging
Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method.
Reviewed-by: kvn, twisti, sspitsyn
Contributed-by: yumin.qi@oracle.com
author | minqi |
---|---|
date | Mon, 12 Nov 2012 14:03:53 -0800 |
parents | d804e148cff8 |
children | 2cb439954abf ad5dd04754ee |
comparison
equal
deleted
inserted
replaced
6965:3be318ecfae5 | 6972:bd7a7ce2e264 |
---|---|
21 * questions. | 21 * questions. |
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #include "precompiled.hpp" | 25 #include "precompiled.hpp" |
26 #include "ci/ciReplay.hpp" | |
26 #include "classfile/systemDictionary.hpp" | 27 #include "classfile/systemDictionary.hpp" |
27 #include "classfile/vmSymbols.hpp" | 28 #include "classfile/vmSymbols.hpp" |
28 #include "compiler/compileBroker.hpp" | 29 #include "compiler/compileBroker.hpp" |
29 #include "compiler/compileLog.hpp" | 30 #include "compiler/compileLog.hpp" |
30 #include "interpreter/linkResolver.hpp" | 31 #include "interpreter/linkResolver.hpp" |
148 tty->cr(); | 149 tty->cr(); |
149 } | 150 } |
150 } else { | 151 } else { |
151 // Not hot. Check for medium-sized pre-existing nmethod at cold sites. | 152 // Not hot. Check for medium-sized pre-existing nmethod at cold sites. |
152 if (callee_method->has_compiled_code() && | 153 if (callee_method->has_compiled_code() && |
153 callee_method->instructions_size(CompLevel_full_optimization) > inline_small_code_size) | 154 callee_method->instructions_size() > inline_small_code_size) |
154 return "already compiled into a medium method"; | 155 return "already compiled into a medium method"; |
155 } | 156 } |
156 if (size > max_inline_size) { | 157 if (size > max_inline_size) { |
157 if (max_inline_size > default_max_inline_size) | 158 if (max_inline_size > default_max_inline_size) |
158 return "hot method too big"; | 159 return "hot method too big"; |
190 wci_result->set_profit(wci_result->profit() * 0.1); | 191 wci_result->set_profit(wci_result->profit() * 0.1); |
191 } | 192 } |
192 } | 193 } |
193 | 194 |
194 if (callee_method->has_compiled_code() && | 195 if (callee_method->has_compiled_code() && |
195 callee_method->instructions_size(CompLevel_full_optimization) > InlineSmallCode) { | 196 callee_method->instructions_size() > InlineSmallCode) { |
196 wci_result->set_profit(wci_result->profit() * 0.1); | 197 wci_result->set_profit(wci_result->profit() * 0.1); |
197 // %%% adjust wci_result->size()? | 198 // %%% adjust wci_result->size()? |
198 } | 199 } |
199 | 200 |
200 return NULL; | 201 return NULL; |
214 } | 215 } |
215 | 216 |
216 // Now perform checks which are heuristic | 217 // Now perform checks which are heuristic |
217 | 218 |
218 if (callee_method->has_compiled_code() && | 219 if (callee_method->has_compiled_code() && |
219 callee_method->instructions_size(CompLevel_full_optimization) > InlineSmallCode) { | 220 callee_method->instructions_size() > InlineSmallCode) { |
220 return "already compiled into a big method"; | 221 return "already compiled into a big method"; |
221 } | 222 } |
222 | 223 |
223 // don't inline exception code unless the top method belongs to an | 224 // don't inline exception code unless the top method belongs to an |
224 // exception class | 225 // exception class |
232 } | 233 } |
233 | 234 |
234 if (callee_method->should_not_inline()) { | 235 if (callee_method->should_not_inline()) { |
235 return "disallowed by CompilerOracle"; | 236 return "disallowed by CompilerOracle"; |
236 } | 237 } |
238 | |
239 #ifndef PRODUCT | |
240 if (ciReplay::should_not_inline(callee_method)) { | |
241 return "disallowed by ciReplay"; | |
242 } | |
243 #endif | |
237 | 244 |
238 if (UseStringCache) { | 245 if (UseStringCache) { |
239 // Do not inline StringCache::profile() method used only at the beginning. | 246 // Do not inline StringCache::profile() method used only at the beginning. |
240 if (callee_method->name() == ciSymbol::profile_name() && | 247 if (callee_method->name() == ciSymbol::profile_name() && |
241 callee_method->holder()->name() == ciSymbol::java_lang_StringCache()) { | 248 callee_method->holder()->name() == ciSymbol::java_lang_StringCache()) { |