[foreign-memaccess] RFR 8237082: Workaround C2 limitations when working with long loops
Jorn Vernee
jorn.vernee at oracle.com
Wed Jan 15 10:34:28 UTC 2020
Looks good!
Thanks,
Jorn
On 14/01/2020 18:45, Maurizio Cimadamore wrote:
> Addressed all comments:
>
> http://cr.openjdk.java.net/~mcimadamore/panama/8237082_v3
>
> I've also added a new benchmark (LoopOverNew), as well as fixed the
> JNI code which went out of sync after the package renaming.
>
> Maurizio
>
> On 14/01/2020 15:06, Maurizio Cimadamore wrote:
>> Hi,
>> both C2 and Graal do not like for loops with long computations inside
>> - in C2, the bound-check-elimination code (BCE) is extremely
>> sensitive to which opcodes are used when putting together offsets in
>> a linear expression [1]. So, whenever C2 sees a long opcode being
>> used (e.g. LMUL, or LADD) the BCE logic bails out, which means that
>> in such cases we get no bounds check hoisting.
>>
>> The medium/long term solution is, obviously, to fix C2 [2], so that
>> it works on long loops as well as with int loops - after all, this is
>> where many of the new APIs we are designing are headed.
>>
>> As a short term boost, I've put together a patch which classifies
>> segments as either small or large; if a segment is small, then we can
>> use some trickery to force int opcodes to be used in offset
>> computations instead of their long counterparts. Doing so removes
>> most of the performance bottlenecks associated with indexed var
>> handle access, some of which were visible in the synthetic benchmarks
>> (see LoopOverNonConstant [3]).
>>
>> Webrev:
>>
>> http://cr.openjdk.java.net/~mcimadamore/panama/8237082_v2/
>>
>> Cheers
>> Maurizio
>>
>> [1] -
>> http://hg.openjdk.java.net/panama/dev/file/b94889c7e153/src/hotspot/share/opto/loopnode.cpp
>> [2] - https://bugs.openjdk.java.net/browse/JDK-8223051
>> [3] -
>> http://hg.openjdk.java.net/panama/dev/file/fb3c9c52fdff/test/micro/org/openjdk/bench/jdk/incubator/foreign/LoopOverNonConstant.java
>>
>>
More information about the panama-dev
mailing list