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