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