RFR: 8265518: C1: Intrinsic support for Preconditions.checkIndex [v12]
Yi Yang
yyang at openjdk.java.net
Wed Jun 9 08:17:40 UTC 2021
> 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 two additional commits since the last revision:
- c1 can not handle 0 constant value when using cmp
- fix
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/3615/files
- new: https://git.openjdk.java.net/jdk/pull/3615/files/289d752c..63f1c30d
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3615&range=11
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3615&range=10-11
Stats: 51 lines in 1 file changed: 23 ins; 17 del; 11 mod
Patch: https://git.openjdk.java.net/jdk/pull/3615.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3615/head:pull/3615
PR: https://git.openjdk.java.net/jdk/pull/3615
More information about the nio-dev
mailing list