548 WB_END
549
550 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
551 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
552 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
553 MutexLockerEx mu(Compile_lock);
554 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
555 return mh->queued_for_compilation();
556 WB_END
557
558 WB_ENTRY(jboolean, WB_IsIntrinsicAvailable(JNIEnv* env, jobject o, jobject method, jobject compilation_context, jint compLevel))
559 if (compLevel < CompLevel_none || compLevel > CompLevel_highest_tier) {
560 return false; // Intrinsic is not available on a non-existent compilation level.
561 }
562 jmethodID method_id, compilation_context_id;
563 method_id = reflected_method_to_jmid(thread, env, method);
564 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
565 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(method_id));
566
567 DirectiveSet* directive;
568 if (compilation_context != NULL) {
569 compilation_context_id = reflected_method_to_jmid(thread, env, compilation_context);
570 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
571 methodHandle cch(THREAD, Method::checked_resolve_jmethod_id(compilation_context_id));
572 directive = DirectivesStack::getMatchingDirective(cch, CompileBroker::compiler((int)compLevel));
573 } else {
574 // Calling with NULL matches default directive
575 directive = DirectivesStack::getDefaultDirective(CompileBroker::compiler((int)compLevel));
576 }
577 bool result = CompileBroker::compiler(compLevel)->is_intrinsic_available(mh, directive);
578 DirectivesStack::release(directive);
579 return result;
580 WB_END
581
582 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
583 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
584 CHECK_JNI_EXCEPTION_(env, CompLevel_none);
585 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
586 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
587 return (code != NULL ? code->comp_level() : CompLevel_none);
588 WB_END
589
590 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
591 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
592 CHECK_JNI_EXCEPTION(env);
593 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
594 if (is_osr) {
595 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
|
548 WB_END
549
550 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
551 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
552 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
553 MutexLockerEx mu(Compile_lock);
554 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
555 return mh->queued_for_compilation();
556 WB_END
557
558 WB_ENTRY(jboolean, WB_IsIntrinsicAvailable(JNIEnv* env, jobject o, jobject method, jobject compilation_context, jint compLevel))
559 if (compLevel < CompLevel_none || compLevel > CompLevel_highest_tier) {
560 return false; // Intrinsic is not available on a non-existent compilation level.
561 }
562 jmethodID method_id, compilation_context_id;
563 method_id = reflected_method_to_jmid(thread, env, method);
564 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
565 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(method_id));
566
567 DirectiveSet* directive;
568 AbstractCompiler* comp = CompileBroker::compiler((int)compLevel);
569 if (compilation_context != NULL) {
570 compilation_context_id = reflected_method_to_jmid(thread, env, compilation_context);
571 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
572 methodHandle cch(THREAD, Method::checked_resolve_jmethod_id(compilation_context_id));
573 directive = DirectivesStack::getMatchingDirective(cch, comp);
574 } else {
575 // Calling with NULL matches default directive
576 directive = DirectivesStack::getDefaultDirective(comp);
577 }
578 bool result = CompileBroker::compiler(compLevel)->is_intrinsic_available(mh, directive);
579 DirectivesStack::release(directive);
580 return result;
581 WB_END
582
583 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
584 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
585 CHECK_JNI_EXCEPTION_(env, CompLevel_none);
586 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
587 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
588 return (code != NULL ? code->comp_level() : CompLevel_none);
589 WB_END
590
591 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
592 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
593 CHECK_JNI_EXCEPTION(env);
594 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
595 if (is_osr) {
596 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
|