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