< prev index next >

src/hotspot/share/opto/doCall.cpp

Print this page

        

*** 200,212 **** } } } // Try using the type profile. ! if (call_does_dispatch && site_count > 0 && receiver_count > 0) { // The major receiver's count >= TypeProfileMajorReceiverPercent of site_count. ! bool have_major_receiver = (100.*profile.receiver_prob(0) >= (float)TypeProfileMajorReceiverPercent); ciMethod* receiver_method = NULL; int morphism = profile.morphism(); if (speculative_receiver_type != NULL) { if (!too_many_traps(caller, bci, Deoptimization::Reason_speculate_class_check)) { --- 200,212 ---- } } } // Try using the type profile. ! if (call_does_dispatch && site_count > 0 && UseTypeProfile) { // The major receiver's count >= TypeProfileMajorReceiverPercent of site_count. ! bool have_major_receiver = profile.has_receiver(0) && (100.*profile.receiver_prob(0) >= (float)TypeProfileMajorReceiverPercent); ciMethod* receiver_method = NULL; int morphism = profile.morphism(); if (speculative_receiver_type != NULL) { if (!too_many_traps(caller, bci, Deoptimization::Reason_speculate_class_check)) {
*** 256,267 **** next_hit_cg = NULL; } } } CallGenerator* miss_cg; ! Deoptimization::DeoptReason reason = morphism == 2 ? ! Deoptimization::Reason_bimorphic : Deoptimization::reason_class_check(speculative_receiver_type != NULL); if ((morphism == 1 || (morphism == 2 && next_hit_cg != NULL)) && !too_many_traps(caller, bci, reason) ) { // Generate uncommon trap for class check failure path // in case of monomorphic or bimorphic virtual call site. --- 256,268 ---- next_hit_cg = NULL; } } } CallGenerator* miss_cg; ! Deoptimization::DeoptReason reason = (morphism == 2 ! ? Deoptimization::Reason_bimorphic ! : Deoptimization::reason_class_check(speculative_receiver_type != NULL)); if ((morphism == 1 || (morphism == 2 && next_hit_cg != NULL)) && !too_many_traps(caller, bci, reason) ) { // Generate uncommon trap for class check failure path // in case of monomorphic or bimorphic virtual call site.
*** 279,290 **** // We don't need to record dependency on a receiver here and below. // Whenever we inline, the dependency is added by Parse::Parse(). miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX); } if (miss_cg != NULL) { - trace_type_profile(C, jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, profile.receiver(0), site_count, receiver_count); ciKlass* k = speculative_receiver_type != NULL ? speculative_receiver_type : profile.receiver(0); float hit_prob = speculative_receiver_type != NULL ? 1.0 : profile.receiver_prob(0); CallGenerator* cg = CallGenerator::for_predicted_call(k, miss_cg, hit_cg, hit_prob); if (cg != NULL) return cg; } } --- 280,291 ---- // We don't need to record dependency on a receiver here and below. // Whenever we inline, the dependency is added by Parse::Parse(). miss_cg = CallGenerator::for_predicted_call(profile.receiver(1), miss_cg, next_hit_cg, PROB_MAX); } if (miss_cg != NULL) { ciKlass* k = speculative_receiver_type != NULL ? speculative_receiver_type : profile.receiver(0); + trace_type_profile(C, jvms->method(), jvms->depth() - 1, jvms->bci(), receiver_method, k, site_count, receiver_count); float hit_prob = speculative_receiver_type != NULL ? 1.0 : profile.receiver_prob(0); CallGenerator* cg = CallGenerator::for_predicted_call(k, miss_cg, hit_cg, hit_prob); if (cg != NULL) return cg; } }
< prev index next >