RFR: 8265518: C1: Intrinsic support for Preconditions.checkIndex [v5]
Daniel Fuchs
dfuchs at openjdk.java.net
Thu Apr 29 10:16:20 UTC 2021
On Thu, 29 Apr 2021 10:13:16 GMT, Yi Yang <yyang at openjdk.org> wrote:
>> The JDK codebase re-created many variants of checkIndex(`grep -I -r 'cehckIndex' jdk/`). A notable variant is java.nio.Buffer.checkIndex, which annotated with @IntrinsicCandidate and it only has a corresponding C1 intrinsic version.
>>
>> In fact, there is an utility method `jdk.internal.util.Preconditions.checkIndex`(wrapped by java.lang.Objects.checkIndex) that behaves the same as these variants of checkIndex, we can replace these re-created variants of checkIndex by Objects.checkIndex, it would significantly reduce duplicated code and enjoys performance improvement because Preconditions.checkIndex is @IntrinsicCandidate and it has a corresponding intrinsic method in HotSpot.
>>
>> But, the problem is currently HotSpot only implements the C2 version of Preconditions.checkIndex. To reuse it global-widely in JDK code, I think we can firstly implement its C1 counterpart. There are also a few kinds of stuff we can do later:
>>
>> 1. Replace all variants of checkIndex by Objects.checkIndex in the whole JDK codebase.
>> 2. Remove Buffer.checkIndex and obsolete/deprecate InlineNIOCheckIndex flag
>>
>> Testing: cds, compiler and jdk
>
> Yi Yang has updated the pull request incrementally with one additional commit since the last revision:
>
> AssertionError when expected exception was not thrown
test/hotspot/jtreg/compiler/c1/TestCheckIndexC1Intrinsic.java line 86:
> 84: // read fields
> 85: Preconditions.checkIndex(limit + 1, limit, (s, integers) -> new MyException("Reason:" + s + "::" + integers));
> 86: throw new AssertionError("Expected IndexOutOfBoundsException not thrown");
nit: well maybe here it should be:
throw new AssertionError("Expected MyException not thrown");
test/hotspot/jtreg/compiler/c1/TestCheckIndexC1Intrinsic.java line 94:
> 92: static void check1(int i) {
> 93: try {
> 94: Preconditions.checkIndex(i, 9999, (s, integers) -> new RuntimeException("ex"));
I believe
throw new AssertionError("Expected IndexOutOfBoundsException not thrown");
should be added in `check1`...`check4` as well...
-------------
PR: https://git.openjdk.java.net/jdk/pull/3615
More information about the nio-dev
mailing list