RFR: 8272446 C1: Raw version of UnsafeGet generates load barriers

Stefan Karlsson stefank at openjdk.java.net
Fri Aug 13 12:30:43 UTC 2021


Please review this patch to remove load barriers from the "raw" version of UnsafeGet.

After rebasing the ZGC Generational code to latest openjdk/jdk we hit a crash because a load barrier was generated for some oops that are not supposed to have a load barrier. In upstream ZGC this isn't a problem because these load barriers are just redundant and will find healed good oops. However, in the Generational version un-barriered roots (e.g. thread stacks) have no metadata bits, and we should never perform normal load barriers on them (they are handled by stack watermarks and nmethod barriers).

This load barrier was introduced with:
JDK-8266746: C1: Replace UnsafeGetRaw with UnsafeGet when setting up OSR entry block

which makes UnsafeGet _also_ handle "raw" loads. However, the "raw" path introduced a load barrier. Note that "raw" is often used to denote a function that loads/stores values without using a barrier.

I've tested this with tier1-3 and have had some initial set of eyes looking over the patch, but it would be good to scrutinize this patch and the usage of UnsafeGet in GraphBuilder::setup_osr_entry_block.

@TheRealMDoerr could you check if this patch works with PPC?

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

Commit messages:
 - 8272446 C1: Raw version of UnsafeGet performs load barriers

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

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


More information about the hotspot-compiler-dev mailing list