hg: valhalla/valhalla: Lworld C2 fixes
Roland Westrelin
rwestrel at redhat.com
Wed Apr 25 12:36:29 UTC 2018
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