RFR: 8285394: Compiler blackholes can be eliminated due to stale ciMethod::intrinsic_id()

Aleksey Shipilev shade at openjdk.java.net
Thu Apr 21 17:12:06 UTC 2022


This is seen in some tests: if blackhole method is deemed hot for inlining, then at least C2 would inline it without looking back at its intrinsic status. Which silently breaks blackholes.

The cause is that there are *two* places where intrinsic ID is recorded. Current blackhole code only writes down blackhole intrinsic ID in `Method::intrinsic_id()`, but we should also set it in `ciMethod::intrinsic_id()`, which is used from C2 inlining code. `ciMethod` is normally populated from `Method::intrinsic_id()`, but it happens too early, before setting up blackhole intrinsic. 

Additional testing:
 - [x] Linux x86_64 {fastdebug,release}, wew test fails before the patch, passes with it
 - [x] Linux x86_64 {fastdebug,release} `compiler/blackhole`
 - [ ] Linux x86_64 fastdebug, sanity microbenchmark corpus run with the patch

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

Commit messages:
 - Fix

Changes: https://git.openjdk.java.net/jdk/pull/8344/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8344&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8285394
  Stats: 93 lines in 2 files changed: 90 ins; 3 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8344.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8344/head:pull/8344

PR: https://git.openjdk.java.net/jdk/pull/8344


More information about the hotspot-compiler-dev mailing list