hg: valhalla/valhalla: Lworld C2 fixes (original) (raw)

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