src/share/vm/classfile/classFileParser.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8076112 Cdiff src/share/vm/classfile/classFileParser.cpp
src/share/vm/classfile/classFileParser.cpp
Print this page
*** 1752,1761 ****
--- 1752,1765 ----
return _method_LambdaForm_Compiled;
case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_LambdaForm_Hidden_signature):
if (_location != _in_method) break; // only allow for methods
if (!privileged) break; // only allow in privileged code
return _method_LambdaForm_Hidden;
+ case vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_internal_HotSpotIntrinsicCandidate_signature):
+ if (_location != _in_method) break; // only allow for methods
+ if (!privileged) break; // only allow in privileged code
+ return _method_HotSpotIntrinsicCandidate;
case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_Stable_signature):
if (_location != _in_field) break; // only allow for fields
if (!privileged) break; // only allow in privileged code
return _field_Stable;
case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_misc_Contended_signature):
*** 1791,1800 ****
--- 1795,1806 ----
m->set_has_injected_profile(true);
if (has_annotation(_method_LambdaForm_Compiled) && m->intrinsic_id() == vmIntrinsics::_none)
m->set_intrinsic_id(vmIntrinsics::_compiledLambdaForm);
if (has_annotation(_method_LambdaForm_Hidden))
m->set_hidden(true);
+ if (has_annotation(_method_HotSpotIntrinsicCandidate) && !m->is_synthetic())
+ m->set_intrinsic_candidate(true);
}
void ClassFileParser::ClassAnnotationCollector::apply_to(instanceKlassHandle k) {
k->set_is_contended(is_contended());
}
*** 4135,4147 ****
// Set up Method*::intrinsic_id as soon as we know the names of methods.
// (We used to do this lazily, but now we query it in Rewriter,
// which is eagerly done for every method, so we might as well do it now,
// when everything is fresh in memory.)
! if (Method::klass_id_for_intrinsics(this_klass()) != vmSymbols::NO_SID) {
for (int j = 0; j < methods->length(); j++) {
! methods->at(j)->init_intrinsic_id();
}
}
if (cached_class_file != NULL) {
// JVMTI: we have an InstanceKlass now, tell it about the cached bytes
--- 4141,4222 ----
// Set up Method*::intrinsic_id as soon as we know the names of methods.
// (We used to do this lazily, but now we query it in Rewriter,
// which is eagerly done for every method, so we might as well do it now,
// when everything is fresh in memory.)
! vmSymbols::SID klass_id = Method::klass_id_for_intrinsics(this_klass());
! if (klass_id != vmSymbols::NO_SID) {
! for (int j = 0; j < methods->length(); j++) {
! Method* method = methods->at(j);
! method->init_intrinsic_id();
!
! if (CheckIntrinsics) {
! // Check if an intrinsic is defined for method 'method',
! // but the method is not annotated with @HotSpotIntrinsicCandidate.
! if (method->intrinsic_id() != vmIntrinsics::_none &&
! !method->intrinsic_candidate()) {
! tty->print("Compiler intrinsic is defined for method [%s], "
! "but the method is not annotated with @HotSpotIntrinsicCandidate.%s",
! method->name_and_sig_as_C_string(),
! NOT_DEBUG(" Method will not be inlined.") DEBUG_ONLY(" Exiting.")
! );
! tty->cr();
! DEBUG_ONLY(vm_exit(1));
! }
! // Check is the method 'method' is annotated with @HotSpotIntrinsicCandidate,
! // but there is no intrinsic available for it.
! if (method->intrinsic_candidate() &&
! method->intrinsic_id() == vmIntrinsics::_none) {
! tty->print("Method [%s] is annotated with @HotSpotIntrinsicCandidate, "
! "but no compiler intrinsic is defined for the method.%s",
! method->name_and_sig_as_C_string(),
! NOT_DEBUG("") DEBUG_ONLY(" Exiting.")
! );
! tty->cr();
! DEBUG_ONLY(vm_exit(1));
! }
! }
! }
!
! if (CheckIntrinsics) {
! // Check for orphan methods in the current class. A method m
! // of a class C is orphan if an intrinsic is defined for method m,
! // but class C does not declare m.
!
! for (int id = vmIntrinsics::FIRST_ID; id < (int)vmIntrinsics::ID_LIMIT; id++) {
! if (id == vmIntrinsics::_compiledLambdaForm) {
! // The _compiledLamdbdaForm intrinsic is a special marker for bytecode
! // generated for the JVM from a LambdaForm and therefore no method
! // is defined for it.
! continue;
! }
!
! if (vmIntrinsics::class_for(vmIntrinsics::ID_from(id)) == klass_id) {
! // Check if the current class contains a method with the same
! // name, flags, signature.
! bool match = false;
for (int j = 0; j < methods->length(); j++) {
! Method* method = methods->at(j);
! if (id == method->intrinsic_id()) {
! match = true;
! break;
! }
! }
!
! if (!match) {
! char buf[1000];
! tty->print("Compiler intrinsic is defined for method [%s], "
! "but the method is not available in class [%s].%s",
! vmIntrinsics::short_name_as_C_string(vmIntrinsics::ID_from(id), buf, sizeof(buf)),
! this_klass->name()->as_C_string(),
! NOT_DEBUG("") DEBUG_ONLY(" Exiting.")
! );
! tty->cr();
! DEBUG_ONLY(vm_exit(1));
! }
! }
! }
}
}
if (cached_class_file != NULL) {
// JVMTI: we have an InstanceKlass now, tell it about the cached bytes
src/share/vm/classfile/classFileParser.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File