RFR: 8244523: Shenandoah: Remove null-handling in LRB expansion
Roman Kennke
rkennke at redhat.com
Wed May 6 14:26:45 UTC 2020
See discussion in:
https://bugs.openjdk.java.net/browse/JDK-8244523
Webrev:
http://cr.openjdk.java.net/~rkennke/JDK-8244523/webrev.00/
It gets rid of the whole block before expansion that finds and shuffles
surrounding null-checks, the extra null-check before cset-check, the
cloning of surrounding null-check to where the resolve-path has been
(before the slowpath-call).
It also removes the ideal-handling for CmpP. This attempted to eliminate
barriers when doing if (obj == null), but this is already dealt-with in
is_redundant(), and it also adds a case to is_redundant() to eliminate
LRB when the only consumer is the uncommon-trap of a NULL-check (in the
CallStaticJava case). Both are needed to avoid accidentally keeping an
explicit null-check for what should become an implicit null-check instead.
It also changes the in/out type of the runtime call to be the exact same
type of the original value, instead of some bottom/notnull type with
cast-to-original-type.
Testing: hotspot_gc_shenandoah, specjbb and specjvm does not show
regressions, some benchmarks seem to benefit a little. Manual inspection
of generated assembly looks ok.
Can I please get a review?
More information about the hotspot-gc-dev
mailing list