RFR(S): 8211231: BarrierSetC1::generate_referent_check() confuses register allocator
Igor Veresov
igor.veresov at oracle.com
Thu Sep 27 15:40:13 UTC 2018
Looks good to me.
igor
> On Sep 27, 2018, at 7:36 AM, Roland Westrelin <rwestrel at redhat.com> wrote:
>
>
> http://cr.openjdk.java.net/~roland/8211231/webrev.00/
>
> With Shenandoah, we had a crash in compiled code because a value was
> restored from a spill in a branch that's not always executed in
> BarrierSetC1::generate_referent_check(). That method generates code with
> control flow within a basic block. The register allocator is not aware
> of that control flow. So if a value that was spilled before is needed in
> a branch, the register allocator may decide to restore it and then
> assume it's live in a register from there. The fix I propose is to
> assign a temp register to that value and load it before any control
> flow.
>
> Details (intermediate representation and generated code) are here:
>
> http://mail.openjdk.java.net/pipermail/shenandoah-dev/2018-September/007605.html
>
> Roland.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20180927/28ed215b/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list