mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
8031752: Failed speculative optimizations should be reattempted when root of compilation is different
Support for speculative traps that keep track of the root of the compilation in which a trap occurs. Reviewed-by: kvn, twisti
This commit is contained in:
parent
532b570e81
commit
493557fc90
16 changed files with 772 additions and 164 deletions
|
@ -59,6 +59,7 @@ class Deoptimization : AllStatic {
|
|||
Reason_age, // nmethod too old; tier threshold reached
|
||||
Reason_predicate, // compiler generated predicate failed
|
||||
Reason_loop_limit_check, // compiler generated loop limits check failed
|
||||
Reason_speculate_class_check, // saw unexpected object class from type speculation
|
||||
Reason_LIMIT,
|
||||
// Note: Keep this enum in sync. with _trap_reason_name.
|
||||
Reason_RECORDED_LIMIT = Reason_bimorphic // some are not recorded per bc
|
||||
|
@ -311,10 +312,23 @@ class Deoptimization : AllStatic {
|
|||
return reason;
|
||||
else if (reason == Reason_div0_check) // null check due to divide-by-zero?
|
||||
return Reason_null_check; // recorded per BCI as a null check
|
||||
else if (reason == Reason_speculate_class_check)
|
||||
return Reason_class_check;
|
||||
else
|
||||
return Reason_none;
|
||||
}
|
||||
|
||||
static bool reason_is_speculate(int reason) {
|
||||
if (reason == Reason_speculate_class_check) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static uint per_method_trap_limit(int reason) {
|
||||
return reason_is_speculate(reason) ? (uint)PerMethodSpecTrapLimit : (uint)PerMethodTrapLimit;
|
||||
}
|
||||
|
||||
static const char* trap_reason_name(int reason);
|
||||
static const char* trap_action_name(int action);
|
||||
// Format like reason='foo' action='bar' index='123'.
|
||||
|
@ -337,6 +351,7 @@ class Deoptimization : AllStatic {
|
|||
static ProfileData* query_update_method_data(MethodData* trap_mdo,
|
||||
int trap_bci,
|
||||
DeoptReason reason,
|
||||
Method* compiled_method,
|
||||
//outputs:
|
||||
uint& ret_this_trap_count,
|
||||
bool& ret_maybe_prior_trap,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue