RFR: 8281453: New optimization: convert "c-(~x)" into "x+(c+1)" and "~(c-x)" into "x+(-c-1)" [v3]

Zhiqiang Zang duke at openjdk.java.net
Tue Mar 22 22:58:16 UTC 2022


> Similar to `(~x)+c` -> `(c-1)-x` and `~(x+c)` -> `(-c-1)-x` in #6858, we can also introduce similar optimizations for subtraction, `c-(~x)` -> `x+(c+1)` and `~(c-x)` -> `x+(-c-1)`.
> 
> The results of the microbenchmark are as follows:
> 
> Baseline:                                                                                                                                         
> Benchmark                        Mode  Cnt  Score   Error  Units
> SubIdealCMinusNotX.baselineInt   avgt   60  0.504 ± 0.011  ns/op
> SubIdealCMinusNotX.baselineLong  avgt   60  0.484 ± 0.004  ns/op
> SubIdealCMinusNotX.testInt1      avgt   60  0.779 ± 0.004  ns/op
> SubIdealCMinusNotX.testInt2      avgt   60  0.896 ± 0.004  ns/op
> SubIdealCMinusNotX.testLong1     avgt   60  0.722 ± 0.004  ns/op
> SubIdealCMinusNotX.testLong2     avgt   60  0.720 ± 0.005  ns/op
> 
> Patch:
> Benchmark                        Mode  Cnt  Score   Error  Units
> SubIdealCMinusNotX.baselineInt   avgt   60  0.487 ± 0.009  ns/op
> SubIdealCMinusNotX.baselineLong  avgt   60  0.486 ± 0.009  ns/op
> SubIdealCMinusNotX.testInt1      avgt   60  0.372 ± 0.010  ns/op
> SubIdealCMinusNotX.testInt2      avgt   60  0.365 ± 0.003  ns/op
> SubIdealCMinusNotX.testLong1     avgt   60  0.369 ± 0.004  ns/op
> SubIdealCMinusNotX.testLong2     avgt   60  0.399 ± 0.016  ns/op

Zhiqiang Zang 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 five additional commits since the last revision:

 - Merge branch 'master'.
 - convert ~x into -1-x when ~x is part of Add and Sub.
 - include bug id.
 - include a microbenmark.
 - Convert c-(~x) into x+(c+1) in SubNode and convert ~(c-x) into x+(-c-1) in XorNode.

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/7376/files
  - new: https://git.openjdk.java.net/jdk/pull/7376/files/76bde38e..51c98b5f

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=7376&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=7376&range=01-02

  Stats: 113586 lines in 2379 files changed: 67898 ins; 35769 del; 9919 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7376.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7376/head:pull/7376

PR: https://git.openjdk.java.net/jdk/pull/7376


More information about the hotspot-compiler-dev mailing list