RFR: 8259316: [REDO] C1/C2 compiler support for blackholes

Igor Ignatyev iignatyev at openjdk.java.net
Wed Apr 21 17:46:36 UTC 2021


On Wed, 21 Apr 2021 10:27:56 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> This reworks the compiler support for blackholes. The key difference against the last version (#1203) is that blackholes are only acceptable as empty static methods, which both simplifies the implementation and eliminates a few compatibility questions.
>> 
>> JMH uses the `Blackhole::consume` methods to avoid dead-code elimination of the code that produces benchmark values. It now relies on producing opaque side-effects and breaking inlining. While it was proved useful for many years, it unfortunately comes with several major drawbacks. 
>> 
>> Instead of introducing public APIs or special-casing JMH methods in JVM, we can hook a new command to compiler control, and let JMH sign up its `Blackhole` methods for it with `-XX:CompileCommand=blackhole,org.openjdk.jmh.infra.Blackhole::consume`. See CSR and related discussion for alternatives and future plans.
>> 
>> C1 code is platform-independent, and it handles blackhole via the intrinsics paths, lowering it to nothing.
>> 
>> C2 makes the `Blackhole` the subclass of `MemBar`, and use the same `Matcher` path as `Op_MemCPUOrder`: it does not match to anything, but it survives until matching, and keeps arguments alive. Additionally, C1 and C2 hooks are now using the synthetic `_blackhole` intrinsic, similarly to existing `_compiledLambdaForm`. It avoids introducing new nodes in C1. It also seems to require the least fiddling with C2 internals.
>
> CSR is approved, I would appreciate some code reviews.

@shipilev , as your tests ignore external vm flags you should add `@requires vm.flagless` so we won't waste time on running them with different GC, JITs, etc. 

to restore the balance in test descriptions, you might want to delete `@build compiler.blackhole.BlackholeTarget` as there is a statically detectable dependency b/w `compiler.blackhole.*Test` and `BlackholeTarget` hence jtreg/javac will build it while building `compiler.blackhole.*Test`

Thanks,
-- Igor

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

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


More information about the hotspot-dev mailing list