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