RFR: 8252848: Optimize small primitive arrayCopy operations through partial inlining using AVX-512 masked instructions [v3]
Jatin Bhateja
jbhateja at openjdk.java.net
Fri Oct 16 18:09:11 UTC 2020
On Fri, 16 Oct 2020 14:35:11 GMT, Nils Eliasson <neliasso at openjdk.org> wrote:
>> Jatin Bhateja has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Replacing explicit type checks with existing type checking routines
>
> src/hotspot/share/opto/cfgnode.cpp line 423:
>
>> 421: // If a two input non-loop region has dead input
>> 422: // edge[s] degenerate any phi node contained within it.
>> 423: bool RegionNode::try_phi_disintegration(PhaseGVN *phase) {
>
> RegionNode::try_phi_disintegration - is it a requirement for this enhancement? or a separate issue?
>
> Also - I know we already remove phis that only have one input. If the input is set to top - PhiNode::Ideal should
> reduce the phi. If you have found a case where this doesn't happen - we should investigate and fix.
This transformation is being done during RegionNode idealization, A phi may be intact (have both valid inputs), but if
its parent region has one control edge connected to top() in that case the phi-input corresponding to top() edge is
being removed and phi is disintegrated. Currently for dead loops all its phi nodes are replaced by top()
https://github.com/openjdk/jdk/blob/master/src/hotspot/share/opto/cfgnode.cpp#L575
For partial in-lining I introduced a mem phi node at the convergence of fast and slow path during node expansion which
was getting replaced by top() during RegionNode idealization in case of a dead loop. This mem_phi had a user outside
loop.
while ( ) { // dead loop detection
if ( len < 32 )
fast_path
else
slow_path
mem_Phi = Memory(fast_path, slow_path)
}
memory = MemMerge(mem_Phi);
-------------
PR: https://git.openjdk.java.net/jdk/pull/302
More information about the hotspot-compiler-dev
mailing list