RFR: 8359064: Expose reason for marking nmethod non-entrant to JVMCI client [v7]

Doug Simon dnsimon at openjdk.org
Wed Jun 18 16:56:36 UTC 2025


On Mon, 16 Jun 2025 22:22:48 GMT, Cesar Soares Lucas <cslucas at openjdk.org> wrote:

>> We recently introduced a way to set the reason why a nmethod was being marked as `not entrant`, see [here](https://github.com/openjdk/jdk/pull/23980) and [here](https://github.com/openjdk/jdk/pull/25338).
>> 
>> This PR is to expose in the JVMCI interface the reason why the nmethod was flagged as `not entrant`. This will allow JVMCI-based compilers to implement heuristics to handle re-compilations differently based on what happened to earlier versions of a method, for instance, this will likely be used to address this [RFE in Truffle](https://github.com/oracle/graal/issues/11045
>> ). 
>> 
>> Tested on Linux x86_64, ARM with JTREG tier 1-3.
>
> Cesar Soares Lucas has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Prevent overriding invalidation reason.

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp line 1408:

> 1406: 
> 1407: C2V_VMENTRY(void, invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize, jint invalidation_reason))
> 1408: #ifdef ASSERT

We prefer runtime checks and throwing Java exceptions than assertions in this JVMCI code:

  int first = static_cast<int>(nmethod::InvalidationReason::UNKNOWN);
  int last = static_cast<int>(nmethod::InvalidationReason::LAST_REASON);
  if (invalidation_reason < first || invalidation_reason >= last) {
    JVMCI_THROW_MSG(IllegalArgumentException, err_msg("Invalid invalidation_reason: %d", invalidation_reason ));
  }

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25706#discussion_r2155092025


More information about the graal-dev mailing list