< prev index next > src/hotspot/share/code/nmethod.hpp
Print this page
// Sets this nmethod as strongly claimed (as part of N|SD -> X|SD and N|SR -> X|SD
// transitions).
void oops_do_set_strong_done(nmethod* old_head);
public:
! enum class ChangeReason : u1 {
! C1_codepatch,
! C1_deoptimize,
! C1_deoptimize_for_patching,
! C1_predicate_failed_trap,
! CI_replay,
! JVMCI_invalidate_nmethod,
! JVMCI_invalidate_nmethod_mirror,
! JVMCI_materialize_virtual_object,
! JVMCI_new_installation,
! JVMCI_register_method,
! JVMCI_replacing_with_new_code,
! JVMCI_reprofile,
! marked_for_deoptimization,
! missing_exception_handler,
! not_used,
! OSR_invalidation_back_branch,
! OSR_invalidation_for_compiling_with_C1,
! OSR_invalidation_of_lower_level,
! set_native_function,
! uncommon_trap,
! whitebox_deoptimization,
! zombie,
};
! static const char* change_reason_to_string(ChangeReason change_reason) {
! switch (change_reason) {
! case ChangeReason::C1_codepatch:
return "C1 code patch";
! case ChangeReason::C1_deoptimize:
return "C1 deoptimized";
! case ChangeReason::C1_deoptimize_for_patching:
return "C1 deoptimize for patching";
! case ChangeReason::C1_predicate_failed_trap:
return "C1 predicate failed trap";
! case ChangeReason::CI_replay:
return "CI replay";
! case ChangeReason::JVMCI_invalidate_nmethod:
! return "JVMCI invalidate nmethod";
! case ChangeReason::JVMCI_invalidate_nmethod_mirror:
- return "JVMCI invalidate nmethod mirror";
- case ChangeReason::JVMCI_materialize_virtual_object:
return "JVMCI materialize virtual object";
! case ChangeReason::JVMCI_new_installation:
! return "JVMCI new installation";
! case ChangeReason::JVMCI_register_method:
- return "JVMCI register method";
- case ChangeReason::JVMCI_replacing_with_new_code:
- return "JVMCI replacing with new code";
- case ChangeReason::JVMCI_reprofile:
return "JVMCI reprofile";
! case ChangeReason::marked_for_deoptimization:
return "marked for deoptimization";
! case ChangeReason::missing_exception_handler:
return "missing exception handler";
! case ChangeReason::not_used:
return "not used";
! case ChangeReason::OSR_invalidation_back_branch:
return "OSR invalidation back branch";
! case ChangeReason::OSR_invalidation_for_compiling_with_C1:
return "OSR invalidation for compiling with C1";
! case ChangeReason::OSR_invalidation_of_lower_level:
return "OSR invalidation of lower level";
! case ChangeReason::set_native_function:
return "set native function";
! case ChangeReason::uncommon_trap:
return "uncommon trap";
! case ChangeReason::whitebox_deoptimization:
return "whitebox deoptimization";
! case ChangeReason::zombie:
return "zombie";
default: {
assert(false, "Unhandled reason");
return "Unknown";
}
// Sets this nmethod as strongly claimed (as part of N|SD -> X|SD and N|SR -> X|SD
// transitions).
void oops_do_set_strong_done(nmethod* old_head);
public:
! // If you change anything in this enum please patch
! // vmStructs_jvmci.cpp accordingly.
! enum class InvalidationReason : s1 {
! NOT_INVALIDATED = -1,
! C1_CODEPATCH,
! C1_DEOPTIMIZE,
! C1_DEOPTIMIZE_FOR_PATCHING,
! C1_PREDICATE_FAILED_TRAP,
! CI_REPLAY,
! UNLOADING,
! UNLOADING_COLD,
! JVMCI_INVALIDATE,
! JVMCI_MATERIALIZE_VIRTUAL_OBJECT,
! JVMCI_REPLACED_WITH_NEW_CODE,
! JVMCI_REPROFILE,
! MARKED_FOR_DEOPTIMIZATION,
! MISSING_EXCEPTION_HANDLER,
! NOT_USED,
! OSR_INVALIDATION_BACK_BRANCH,
! OSR_INVALIDATION_FOR_COMPILING_WITH_C1,
! OSR_INVALIDATION_OF_LOWER_LEVEL,
! SET_NATIVE_FUNCTION,
! UNCOMMON_TRAP,
+ WHITEBOX_DEOPTIMIZATION,
+ ZOMBIE,
+ INVALIDATION_REASONS_COUNT
};
! static const char* invalidation_reason_to_string(InvalidationReason invalidation_reason) {
! switch (invalidation_reason) {
! case InvalidationReason::C1_CODEPATCH:
return "C1 code patch";
! case InvalidationReason::C1_DEOPTIMIZE:
return "C1 deoptimized";
! case InvalidationReason::C1_DEOPTIMIZE_FOR_PATCHING:
return "C1 deoptimize for patching";
! case InvalidationReason::C1_PREDICATE_FAILED_TRAP:
return "C1 predicate failed trap";
! case InvalidationReason::CI_REPLAY:
return "CI replay";
! case InvalidationReason::JVMCI_INVALIDATE:
! return "JVMCI invalidate";
! case InvalidationReason::JVMCI_MATERIALIZE_VIRTUAL_OBJECT:
return "JVMCI materialize virtual object";
! case InvalidationReason::JVMCI_REPLACED_WITH_NEW_CODE:
! return "JVMCI replaced with new code";
! case InvalidationReason::JVMCI_REPROFILE:
return "JVMCI reprofile";
! case InvalidationReason::MARKED_FOR_DEOPTIMIZATION:
return "marked for deoptimization";
! case InvalidationReason::MISSING_EXCEPTION_HANDLER:
return "missing exception handler";
! case InvalidationReason::NOT_USED:
return "not used";
! case InvalidationReason::OSR_INVALIDATION_BACK_BRANCH:
return "OSR invalidation back branch";
! case InvalidationReason::OSR_INVALIDATION_FOR_COMPILING_WITH_C1:
return "OSR invalidation for compiling with C1";
! case InvalidationReason::OSR_INVALIDATION_OF_LOWER_LEVEL:
return "OSR invalidation of lower level";
! case InvalidationReason::SET_NATIVE_FUNCTION:
return "set native function";
! case InvalidationReason::UNCOMMON_TRAP:
return "uncommon trap";
! case InvalidationReason::WHITEBOX_DEOPTIMIZATION:
return "whitebox deoptimization";
! case InvalidationReason::ZOMBIE:
return "zombie";
default: {
assert(false, "Unhandled reason");
return "Unknown";
}
}
// Make the nmethod non entrant. The nmethod will continue to be
// alive. It is used when an uncommon trap happens. Returns true
// if this thread changed the state of the nmethod or false if
// another thread performed the transition.
! bool make_not_entrant(ChangeReason change_reason);
! bool make_not_used() { return make_not_entrant(ChangeReason::not_used); }
bool is_marked_for_deoptimization() const { return deoptimization_status() != not_marked; }
bool has_been_deoptimized() const { return deoptimization_status() == deoptimize_done; }
void set_deoptimized_done();
}
// Make the nmethod non entrant. The nmethod will continue to be
// alive. It is used when an uncommon trap happens. Returns true
// if this thread changed the state of the nmethod or false if
// another thread performed the transition.
! bool make_not_entrant(InvalidationReason invalidation_reason);
! bool make_not_used() { return make_not_entrant(InvalidationReason::NOT_USED); }
bool is_marked_for_deoptimization() const { return deoptimization_status() != not_marked; }
bool has_been_deoptimized() const { return deoptimization_status() == deoptimize_done; }
void set_deoptimized_done();
void print_on_with_msg(outputStream* st, const char* msg) const;
// Logging
void log_identity(xmlStream* log) const;
void log_new_nmethod() const;
! void log_state_change(ChangeReason change_reason) const;
// Prints block-level comments, including nmethod specific block labels:
void print_nmethod_labels(outputStream* stream, address block_begin, bool print_section_labels=true) const;
const char* nmethod_section_label(address pos) const;
void print_on_with_msg(outputStream* st, const char* msg) const;
// Logging
void log_identity(xmlStream* log) const;
void log_new_nmethod() const;
! void log_state_change(InvalidationReason invalidation_reason) const;
// Prints block-level comments, including nmethod specific block labels:
void print_nmethod_labels(outputStream* stream, address block_begin, bool print_section_labels=true) const;
const char* nmethod_section_label(address pos) const;
< prev index next >