RFR: 8332670: C1 clone intrinsic needs memory barriers
Andrew Haley
aph at openjdk.org
Tue Jun 4 08:37:03 UTC 2024
On Tue, 4 Jun 2024 08:10:59 GMT, Galder Zamarreño <galder at openjdk.org> wrote:
> Adds a storestore barrier after copying the contents in the primitive array intrinsic (credit @shipilev). The barrier is a no-op in platforms where not needed so no need for an ifdef.
>
> The barrier after new array creation is only added if zeroing the array on aarch64 (credit @dean-long). Since the primitive array clone intrinsic does not zero the array, that means there's a single barrier added for this use case.
>
> There's no barrier added on x86 c1 macro assembler for nothing to do there.
>
> I've run the following tests:
> * tier 1 on darwin/aarch64
> * tier 1 on linux/x86_64
> * `hotspot_compiler` tests on darwin/aarch64
> * `copy.clone.arrays` jcstress tests on darwin/aarch64.
>
> I tried but was unable to create a standalone test for the jdk source tree that would fail.
>
> FYI @bulasevich @TheRealMDoerr @RealFYang @RealLucy similar platform specific c1 macro assembler changes might be required for other platforms.
src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp line 309:
> 307: // Only add membar if zeroing the array.
> 308: // If not zeroing, subsequent instructions should populate the array (e.g. copy contents),
> 309: // and the membar should be set after the array has been populated accordingly.
Strengthen the language:
Suggestion:
// Only add membar if zeroing the array.
// If not zeroing, subsequent instructions must fully populate the array (e.g. copy contents),
// and a membar must be emitted after the array has been populated accordingly. See
// GraphBuilder::append_alloc_array_copy.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19538#discussion_r1625598080
More information about the hotspot-compiler-dev
mailing list