RFR: 8336759: C2: int counted loop with long limit not recognized as counted loop [v3]
Kangcheng Xu
kxu at openjdk.org
Wed Dec 4 16:11:58 UTC 2024
> This patch implements [JDK-8336759](https://bugs.openjdk.org/browse/JDK-8336759) that recognizes int counted loops with long limits.
>
> Currently, patterns like `for ( int i =...; i < long_limit; ...)` where int `i` is implicitly promoted to long (i.e., `(long) i < long_limit`) is not recognized as (int) counted loop. This patch speculatively and optimistically converts long limits to ints and deoptimize if the limit is outside int range, allowing more optimization opportunities.
>
> In other words, it transforms
>
>
> for (int i = 0; (long) i < long_limit; i++) {...}
>
>
> to
>
>
> if (int_min <= long_limit && long_limit <= int_max ) {
> for (int i = 0; i < (int) long_limit; i++) {...}
> } else {
> trap: loop_limit_check
> }
>
>
> This could benefit calls to APIs like `long MemorySegment#byteSize()` when iterating over a long limit.
Kangcheng Xu has updated the pull request incrementally with three additional commits since the last revision:
- Update src/hotspot/share/opto/loopnode.cpp
Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>
- Update src/hotspot/share/opto/loopnode.cpp
Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>
- Update src/hotspot/share/opto/loopnode.cpp
Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/22449/files
- new: https://git.openjdk.org/jdk/pull/22449/files/79d8c146..de847318
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=22449&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=22449&range=01-02
Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/22449.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22449/head:pull/22449
PR: https://git.openjdk.org/jdk/pull/22449
More information about the hotspot-compiler-dev
mailing list