Mercurial > hg > truffle
comparison src/share/vm/opto/doCall.cpp @ 7421:ad5dd04754ee
8005031: Some cleanup in c2 to prepare for incremental inlining support
Summary: collection of small changes to prepare for incremental inlining.
Reviewed-by: twisti, kvn
author | roland |
---|---|
date | Tue, 18 Dec 2012 14:55:25 +0100 |
parents | beebba0acc11 |
children | d092d1b31229 |
comparison
equal
deleted
inserted
replaced
7420:18d56ca3e901 | 7421:ad5dd04754ee |
---|---|
38 #include "opto/runtime.hpp" | 38 #include "opto/runtime.hpp" |
39 #include "opto/subnode.hpp" | 39 #include "opto/subnode.hpp" |
40 #include "prims/nativeLookup.hpp" | 40 #include "prims/nativeLookup.hpp" |
41 #include "runtime/sharedRuntime.hpp" | 41 #include "runtime/sharedRuntime.hpp" |
42 | 42 |
43 void trace_type_profile(ciMethod *method, int depth, int bci, ciMethod *prof_method, ciKlass *prof_klass, int site_count, int receiver_count) { | 43 void trace_type_profile(Compile* C, ciMethod *method, int depth, int bci, ciMethod *prof_method, ciKlass *prof_klass, int site_count, int receiver_count) { |
44 if (TraceTypeProfile || PrintInlining NOT_PRODUCT(|| PrintOptoInlining)) { | 44 if (TraceTypeProfile || PrintInlining NOT_PRODUCT(|| PrintOptoInlining)) { |
45 outputStream* out = tty; | |
45 if (!PrintInlining) { | 46 if (!PrintInlining) { |
46 if (NOT_PRODUCT(!PrintOpto &&) !PrintCompilation) { | 47 if (NOT_PRODUCT(!PrintOpto &&) !PrintCompilation) { |
47 method->print_short_name(); | 48 method->print_short_name(); |
48 tty->cr(); | 49 tty->cr(); |
49 } | 50 } |
50 CompileTask::print_inlining(prof_method, depth, bci); | 51 CompileTask::print_inlining(prof_method, depth, bci); |
51 } | 52 } else { |
52 CompileTask::print_inline_indent(depth); | 53 out = C->print_inlining_stream(); |
53 tty->print(" \\-> TypeProfile (%d/%d counts) = ", receiver_count, site_count); | 54 } |
54 prof_klass->name()->print_symbol(); | 55 CompileTask::print_inline_indent(depth, out); |
55 tty->cr(); | 56 out->print(" \\-> TypeProfile (%d/%d counts) = ", receiver_count, site_count); |
57 stringStream ss; | |
58 prof_klass->name()->print_symbol_on(&ss); | |
59 out->print(ss.as_string()); | |
60 out->cr(); | |
56 } | 61 } |
57 } | 62 } |
58 | 63 |
59 CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool call_is_virtual, | 64 CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool call_is_virtual, |
60 JVMState* jvms, bool allow_inline, | 65 JVMState* jvms, bool allow_inline, |
231 // in case of polymorphic virtual call site. | 236 // in case of polymorphic virtual call site. |
232 miss_cg = CallGenerator::for_virtual_call(callee, vtable_index); | 237 miss_cg = CallGenerator::for_virtual_call(callee, vtable_index); |
233 } | 238 } |
234 if (miss_cg != NULL) { | 239 if (miss_cg != NULL) { |
235 if (next_hit_cg != NULL) { | 240 if (next_hit_cg != NULL) { |
236 trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), next_receiver_method, profile.receiver(1), site_count, profile.receiver_count(1)); | 241 trace_type_profile(C, jvms->method(), jvms->depth() - 1, jvms->bci(), next_receiver_method, profile.receiver(1), site_count, profile.receiver_count(1)); |
237 // We don't need to record dependency on a receiver here and below. | 242 // We don't need to record dependency on a receiver here and below. |
238 // Whenever we inline, the dependency is added by Parse::Parse(). | 243 // Whenever we inline, the dependency is added by Parse::Parse(). |
239 miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX); | 244 miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX); |
240 } | 245 } |
241 if (miss_cg != NULL) { | 246 if (miss_cg != NULL) { |
242 trace_type_profile(jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count); | 247 trace_type_profile(C, jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count); |
243 CallGenerator* cg = CallGenerator::for_predicted_call(profile.receiver(0), miss_cg, hit_cg, profile.receiver_prob(0)); | 248 CallGenerator* cg = CallGenerator::for_predicted_call(profile.receiver(0), miss_cg, hit_cg, profile.receiver_prob(0)); |
244 if (cg != NULL) return cg; | 249 if (cg != NULL) return cg; |
245 } | 250 } |
246 } | 251 } |
247 } | 252 } |