[jdk16] RFR: 8255763: C2: OSR miscompilation caused by invalid memory instruction placement [v2]

Christian Hagedorn chagedorn at openjdk.java.net
Mon Dec 21 13:06:58 UTC 2020


On Fri, 18 Dec 2020 10:58:40 GMT, Roberto Castañeda Lozano <rcastanedalo at openjdk.org> wrote:

>> Disable GCM hoisting of memory-writing nodes for irreducible CFGs. This prevents GCM from wrongly "hoisting" stores into descendants of their original loop. Such an "inverted hoisting" can happen due to `CFGLoop::compute_freq()`'s inaccurate estimation of frequencies for irreducible CFGs.
>> 
>> Extend CFG verification code by checking that memory-writing nodes are placed in either their original loop or an ancestor.
>> 
>> Add tests for the reducible and irreducible cases. The former was already handled correctly before the change (the frequency estimation model prevents "inverted hoisting" for reducible CFGs), and is just added for coverage.
>> 
>> This change addresses the specific miscompilation issue in a conservative way, for simplicity and safety. Future work includes investigating if only the illegal blocks can be discarded as candidates for GCM hoisting, and refining frequency estimation for irreducible CFGs.
>
> Roberto Castañeda Lozano has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Move asterisk in pointer declaration for consistency

Marked as reviewed by chagedorn (Reviewer).

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

PR: https://git.openjdk.java.net/jdk16/pull/22


More information about the hotspot-compiler-dev mailing list