RFR: 8324655: Identify integer minimum and maximum patterns created with if statements

Jasmine Karthikeyan jkarthikeyan at openjdk.org
Thu Jan 25 18:23:53 UTC 2024


Hi all, I've created this patch which aims to convert common integer mininum and maximum patterns created using if statements into Min and Max nodes. These patterns are usually in the form of `a > b ? a : b` and similar, as well as patterns such as `if (a > b) b = a;`. While this transform doesn't generally improve code generation it's own, it simplifies control flow and creates new opportunities for vectorization.

I've created a benchmark for the PR, and I've attached some data from my (Zen 3) machine:

                                                Baseline                     Patch            Improvement
Benchmark                   Mode   Cnt  Score      Error  Units    Score       Error  Units
IfMinMax.testReductionInt   avgt   15  500.307 ±  16.687  ns/op    509.383 ±  32.645  ns/op   (no change)*
IfMinMax.testReductionLong  avgt   15  493.184 ±  17.596  ns/op    513.587 ±  28.339  ns/op   (no change)*
IfMinMax.testSingleInt      avgt   15    3.588 ±   0.540  ns/op      2.965 ±   1.380  ns/op   (no change)
IfMinMax.testSingleLong     avgt   15    3.673 ±   0.128  ns/op      3.506 ±   0.590  ns/op   (no change)
IfMinMax.testVectorInt      avgt   15  340.425 ±  13.123  ns/op     59.689 ±   7.509  ns/op   + 5.7x
IfMinMax.testVectorLong     avgt   15  326.420 ±  15.554  ns/op    117.190 ±   5.622  ns/op   + 2.8x


* After writing this benchmark I discovered that the compiler doesn't seem to create some simple min/max reductions, even when using Math.min/max() directly. Is this known or should I create a followup RFE for this?

The patch passes tier 1-3 testing on linux x64. Reviews or comments would be appreciated!

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

Commit messages:
 - Convert integer min/max patterns to Min/Max nodes

Changes: https://git.openjdk.org/jdk/pull/17574/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17574&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8324655
  Stats: 387 lines in 4 files changed: 381 ins; 0 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/17574.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17574/head:pull/17574

PR: https://git.openjdk.org/jdk/pull/17574


More information about the hotspot-compiler-dev mailing list