RFR: 8263781: C2: Cannot hoist independent load above arraycopy

Vladimir Kozlov kvn at openjdk.java.net
Fri Mar 19 16:36:41 UTC 2021


On Thu, 18 Mar 2021 09:31:35 GMT, Richard Reingruber <rrich at openjdk.org> wrote:

> This change adds the following comment to the method LoadNode::find_previous_arraycopy()
> 
> // Find an arraycopy ac that produces the memory state represented by parameter mem.
> // Return ac if
> // (a) can_see_stored_value=true  and ac must have set the value for this load or if
> // (b) can_see_stored_value=false and ac could have set the value for this load or if
> // (c) can_see_stored_value=false and ac cannot have set the value for this load.
> // In (c) also change the parameter mem to the memory input of ac.
> // Otherwise return NULL.
> 
> It also repairs case (c) to let it return ac again as this was lost in previous refactoring (see issue).
> 
> The fix passed our CI testing: JCK and JTREG, also in Xcomp mode, SPECjvm2008, SPECjbb2015, Renaissance Suite,
> SAP specific tests with fastdebug and release builds on all platforms

src/hotspot/share/opto/memnode.cpp line 536:

> 534: // (b) can_see_stored_value=false and ac could have set the value for this load or if
> 535: // (c) can_see_stored_value=false and ac cannot have set the value for this load.
> 536: // In (c) also change the parameter mem to the memory input of ac.

I suggest to modify last line to something like to make it clear why we do that:
`In (c) case change the parameter mem to the memory input of ac to skip it when searching stored value.`

-------------

PR: https://git.openjdk.java.net/jdk/pull/3070


More information about the hotspot-compiler-dev mailing list