> # Issue > IR checks of `testCompareAndExchange`, `testCompareAndSwap` and > `testGetAndSet` of `compiler/gcbarriers/TestImplicitNullChecks.java` fail > because they expect no `NULL_CHECK` in the final code graph but it > encounters a few in each test instead. > > # Cause > The tests in question simply call 3 different `VarHandle` functions (one > each) but these don't get inlined as intrinsics directly. They instead rely > on inline methods (with some conditional statements) that eventually call a > method that gets intrinsified. Unfortunately the compilation of some of the > inlined code can result in null-checks after being compiled. > For instance `testCompareAndExchange` inlines > `Unsafe::compareAndExchangeReference` > https://github.com/openjdk/valhalla/blob/1ecd2e95a158c80186d4334ca3f0673f660d5042/src/java.base/share/classes/jdk/internal/misc/Unsafe.java#L1723-L1742 > which calls `compareAndSetReference` or `compareAndExchangeReference` but `if > (valueType.isValue() || isValueObject(expected))` adds a null-check for > `valueType`. > This happens only in Valhalla because of a Valhalla-specific value-type > checks (see [JDK-8351569](https://bugs.openjdk.org/browse/JDK-8351569)). > > # Fix > The goal of the tests is to make sure that there are no null-checks with > compare-and-exchange operations with ZGC and G1. Instead of relying on > `VarHandle` compare-and-exchange-related methods we can use the equivalent > `Unsafe` methods that are intrinsified directly. > > # Testing > Tier 1-3+
Damon Fenacci has updated the pull request incrementally with one additional commit since the last revision: JDK-8367338: remove unused VarHandle ------------- Changes: - all: https://git.openjdk.org/valhalla/pull/1626/files - new: https://git.openjdk.org/valhalla/pull/1626/files/41c0733f..cb9e02c9 Webrevs: - full: https://webrevs.openjdk.org/?repo=valhalla&pr=1626&range=01 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=1626&range=00-01 Stats: 14 lines in 1 file changed: 0 ins; 14 del; 0 mod Patch: https://git.openjdk.org/valhalla/pull/1626.diff Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1626/head:pull/1626 PR: https://git.openjdk.org/valhalla/pull/1626
