hg: valhalla/valhalla: Lworld C2 fixes

Tobias Hartmann tobias.hartmann at oracle.com
Wed Apr 25 12:38:53 UTC 2018

Looks great, thanks Roland!

Best regards,

On 25.04.2018 14:36, Roland Westrelin wrote:
> I fixed some issues with Lworld support:
> - A merge of values and non values or of values of different types
>   requires a buffered value. The existing code didn't handle all case
>   (it works if a non value is seen first but not if a value is seen
>   first). I fixed it by relying on types reported by type flow analysis.
> - Still at a merge point: allocating to buffer a value can cause an
>   exception but I found handling exceptions there would sometimes break
>   so, instead, a failure to allocate now causes a deoptimization
> - Still at a merge point: when a buffered value is created, the code now
>   uses a ValueTypePtrNode so useless allocations have a better change of
>   being optimized out
> - I wrote some test cases that attempt to store a null constant in a
>   flattenable value type field. That requires extra checks at a store
>   and at a merge point to deoptimize if a value is null.
> - I also added a check for null at the return of a call (that returns a
>   value). Deoptimization needs to resume execution at the bytecode after
>   the call so I had to move the logic that builds a new ValueTypeNode
>   around.
> Roland.

More information about the valhalla-dev mailing list