RFR: 8341781: Improve Min/Max node identities [v3]
Jasmine Karthikeyan
jkarthikeyan at openjdk.org
Thu Oct 31 16:53:57 UTC 2024
> 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 with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
- Add platform checks to IR
- Merge branch 'master' into minmax_identities
- Suggestions from review
- Min/Max identities
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/21439/files
- new: https://git.openjdk.org/jdk/pull/21439/files/b4b96143..39f7d047
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=21439&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=21439&range=01-02
Stats: 292091 lines in 2825 files changed: 243748 ins; 34186 del; 14157 mod
Patch: https://git.openjdk.org/jdk/pull/21439.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21439/head:pull/21439
PR: https://git.openjdk.org/jdk/pull/21439
More information about the hotspot-compiler-dev
mailing list