RFR(S): 8211231: BarrierSetC1::generate_referent_check() confuses register allocator
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu Sep 27 19:15:27 UTC 2018
Good.
thanks,
Vladimir
On 9/27/18 7:36 AM, Roland Westrelin 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.
>
More information about the hotspot-compiler-dev
mailing list