src/share/vm/opto/doCall.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6614597 Cdiff src/share/vm/opto/doCall.cpp

src/share/vm/opto/doCall.cpp

Print this page

        

*** 180,209 **** next_hit_cg = NULL; } } } CallGenerator* miss_cg; if (( profile.morphism() == 1 || (profile.morphism() == 2 && next_hit_cg != NULL) ) && ! ! !too_many_traps(Deoptimization::Reason_class_check) ! ! // Check only total number of traps per method to allow ! // the transition from monomorphic to bimorphic case between ! // compilations without falling into virtual call. ! // A monomorphic case may have the class_check trap flag is set ! // due to the time gap between the uncommon trap processing ! // when flags are set in MDO and the call site bytecode execution ! // in Interpreter when MDO counters are updated. ! // There was also class_check trap in monomorphic case due to ! // the bug 6225440. ! ) { // Generate uncommon trap for class check failure path // in case of monomorphic or bimorphic virtual call site. ! miss_cg = CallGenerator::for_uncommon_trap(call_method, ! Deoptimization::Reason_class_check, Deoptimization::Action_maybe_recompile); } else { // Generate virtual call for class check failure path // in case of polymorphic virtual call site. miss_cg = CallGenerator::for_virtual_call(call_method, vtable_index); --- 180,199 ---- next_hit_cg = NULL; } } } CallGenerator* miss_cg; + Deoptimization::DeoptReason reason = (profile.morphism() == 2) ? + Deoptimization::Reason_bimorphic : + Deoptimization::Reason_class_check; if (( profile.morphism() == 1 || (profile.morphism() == 2 && next_hit_cg != NULL) ) && ! !too_many_traps(jvms->method(), jvms->bci(), reason) ) { // Generate uncommon trap for class check failure path // in case of monomorphic or bimorphic virtual call site. ! miss_cg = CallGenerator::for_uncommon_trap(call_method, reason, Deoptimization::Action_maybe_recompile); } else { // Generate virtual call for class check failure path // in case of polymorphic virtual call site. miss_cg = CallGenerator::for_virtual_call(call_method, vtable_index);
src/share/vm/opto/doCall.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File