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,
Tobias
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