RFR: 8281518: New optimization: convert "(x|y)-(x^y)" into "x&y"

Zhiqiang Zang duke at openjdk.java.net
Wed Feb 9 15:55:37 UTC 2022


Convert `(x|y)-(x^y)` into `x&y`, in `SubINode::Ideal` and `SubLNode::Ideal`.

The results of the microbenchmark are as follows:

Baseline:                                                                                                                                         
Benchmark                                Mode  Cnt  Score   Error  Units
SubIdeal_XOrY_Minus_XXorY_.baselineInt   avgt   60  0.481 ± 0.003  ns/op
SubIdeal_XOrY_Minus_XXorY_.baselineLong  avgt   60  0.482 ± 0.004  ns/op
SubIdeal_XOrY_Minus_XXorY_.testInt       avgt   60  0.901 ± 0.007  ns/op
SubIdeal_XOrY_Minus_XXorY_.testLong      avgt   60  0.894 ± 0.004  ns/op

Patch:
Benchmark                                Mode  Cnt  Score   Error  Units
SubIdeal_XOrY_Minus_XXorY_.baselineInt   avgt   60  0.480 ± 0.003  ns/op
SubIdeal_XOrY_Minus_XXorY_.baselineLong  avgt   60  0.483 ± 0.005  ns/op
SubIdeal_XOrY_Minus_XXorY_.testInt       avgt   60  0.600 ± 0.004  ns/op
SubIdeal_XOrY_Minus_XXorY_.testLong      avgt   60  0.602 ± 0.004  ns/op

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

Commit messages:
 - include ir test.
 - include the microbenchmark.
 - incude source that converts "(x|y)-(x^y)" into "x&y" in SubINode::Ideal and SubLNode::Ideal.

Changes: https://git.openjdk.java.net/jdk/pull/7395/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7395&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8281518
  Stats: 188 lines in 4 files changed: 188 ins; 0 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7395.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7395/head:pull/7395

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


More information about the hotspot-compiler-dev mailing list