RFR: 8277168: AArch64: Enable arraycopy partial inlining with SVE
Andrew Haley
aph at openjdk.java.net
Thu Nov 18 16:55:43 UTC 2021
On Thu, 18 Nov 2021 13:53:11 GMT, Andrew Haley <aph at openjdk.org> wrote:
> I'm baffled by what is going on.
Sorry, it looks like I managed to confuse myself. The top of the loop looks like:
10c B17: # out( B18 ) <- in( B27 ) Freq: 4.49963
10c # castLL of R2
10c sve_whilelo P0, zr, R2 # sve
110 sve_ldr V16, P0, [R0] # load vector predicated (sve)
114 sve_str [R1], P0, V16 # store vector predicated (sve)
118 B18: # out( B30 B19 ) <- in( B17 B28 B26 ) Freq: 8.99927
118
118 ldarb R10, [R23] # byte ! Field: volatile org/openjdk/jmh/runner/InfraControlL2.isDone
... and the bottom
1a0 cmp R2, #64
1a4 bls B17 # unsigned P=0.500000 C=-1.000000
1a8 B28: # out( B18 ) <- in( B27 ) Freq: 4.49963
1a8 CALL, runtime leaf nofp 0x0000ffff6d1058f8 jbyte_arraycopy
No JVM State Info
#
1b0 b B18
So only if the length is < 64 (i.e. 512 bits) do we branch back to B17 to do the `SVE WHILELO` to set the predicate. This is confusing only because the code has been rearranged so that the test for < 64 bytes is at the bottom of the loop.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6444
More information about the hotspot-compiler-dev
mailing list