RFR: 8336759: C2: int counted loop with long limit not recognized as counted loop [v2]

Kangcheng Xu kxu at openjdk.org
Tue Dec 3 21:48:59 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 one additional commit since the last revision:

  implement suggested changes from @chhagedorn's review

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/22449/files
  - new: https://git.openjdk.org/jdk/pull/22449/files/4a7d03fe..79d8c146

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=22449&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=22449&range=00-01

  Stats: 76 lines in 3 files changed: 27 ins; 11 del; 38 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