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