RFR: 8341781: Improve Min/Max node identities [v4]
Christian Hagedorn
chagedorn at openjdk.org
Wed Nov 27 11:37:40 UTC 2024
On Mon, 4 Nov 2024 04:25:07 GMT, Jasmine Karthikeyan <jkarthikeyan at openjdk.org> wrote:
>> Hi all,
>> This patch implements some missing identities for Min/Max nodes. It adds static type-based operand choosing for MinI/MaxI, such as the ones that MinL/MaxL use. In addition, it adds simplification for patterns such as `Max(A, Max(A, B))` to `Max(A, B)` and `Max(A, Min(A, B))` to `A`. These simplifications stem from the [lattice identity rules](https://en.wikipedia.org/wiki/Lattice_(order)#As_algebraic_structure). The main place I've seen this pattern is with MinL/MaxL nodes created during loop optimizations. Some examples of where this occurs include BigInteger addition/subtraction, and regex code. I've run some of the existing benchmarks and found some nice improvements:
>>
>> Baseline Patch
>> Benchmark Mode Cnt Score Error Units Score Error Units Improvement
>> BigIntegers.testAdd avgt 15 25.096 ± 3.936 ns/op 19.214 ± 0.521 ns/op (+ 26.5%)
>> PatternBench.charPatternCompile avgt 8 453.727 ± 117.265 ns/op 370.054 ± 26.106 ns/op (+ 20.3%)
>> PatternBench.charPatternMatch avgt 8 917.604 ± 121.766 ns/op 810.560 ± 38.437 ns/op (+ 12.3%)
>> PatternBench.charPatternMatchWithCompile avgt 8 1477.703 ± 255.783 ns/op 1224.460 ± 28.220 ns/op (+ 18.7%)
>> PatternBench.longStringGraphemeMatches avgt 8 860.909 ± 124.661 ns/op 743.729 ± 22.877 ns/op (+ 14.6%)
>> PatternBench.splitFlags avgt 8 420.506 ± 76.252 ns/op 321.911 ± 11.661 ns/op (+ 26.6%)
>>
>> I've added some IR tests, and tier 1 testing passes on my linux machine. Reviews would be appreciated!
>
> Jasmine Karthikeyan has updated the pull request incrementally with one additional commit since the last revision:
>
> Make long tests check IR
The IR rule updates look good. Maybe you want to wait with integrating this until after the fork next Thursday. So, this only goes into JDK 25.
-------------
Marked as reviewed by chagedorn (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/21439#pullrequestreview-2464765125
More information about the hotspot-compiler-dev
mailing list