RFR: 8183137: [MVT] C2 doesn't eliminate redundant value type allocations inside loops
vladimir.x.ivanov at oracle.com
Tue Jul 11 18:02:48 UTC 2017
On 7/10/17 7:28 PM, Roland Westrelin wrote:
> This change adds a new ValueTypePtrNode that behaves similarly to
> ValueTypeNode. A ValueTypePtrNode is added to the graph where we're
> forced to allocate because C2 expects an __Value. That ValueTypePtrNode
> has all the fields of the value as input (like ValueTypeNode) and its
> oop input is the new allocation. Like ValueTypeNode, a
> Phi(ValueTypePtrNode#1 ValueTypePtrNode#2 ...) is transformed to
> ValueTypePtrNode(Phi(Oop#1, Oop#2 ..) Phi(Field#1, Field#2 ...)). Like
> ValueTypeNode, a ValueTypePtrNode referenced in the debug info at a
> safepoint is converted to a SafePointScalarObjectNode and field
> values. A Load of a field from a ValueTypePtrNode is optimized to that
> field from the ValueTypePtrNode.
> The implementation of the new node shares a lot of code with the
> existing ValueTypeNode so most of that change is refactoring, boiler
> plate code and new tests.
> There are tests such as test95/test96 for which the allocation is still
> not eliminated but could be by improving this further.
More information about the valhalla-dev