RFR: 8324655: Identify integer minimum and maximum patterns created with if statements [v2]
Jasmine Karthikeyan
jkarthikeyan at openjdk.org
Fri Jan 26 16:05:45 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!
Jasmine Karthikeyan has updated the pull request incrementally with one additional commit since the last revision:
Don't transform highly predictable branches
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/17574/files
- new: https://git.openjdk.org/jdk/pull/17574/files/8c85ab6a..bafabad2
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=17574&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=17574&range=00-01
Stats: 10 lines in 1 file changed: 8 ins; 0 del; 2 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