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