RFR: 8279607: Existing optimization "~x+1" -> "-x" can be generalized to "~x+c" -> "(c-1)-x".
Zhiqiang Zang
duke at openjdk.java.net
Fri Jan 7 17:28:55 UTC 2022
Hi all,
Existing optimization `~x+1 -> -x` can be generalized to `~x+c -> (c-1)-x`. I included both microbenchmark and jtreg tests.
// Convert (~x+c) into (c-1)-x. Note there isn't a bitwise not
// bytecode, "~x" would typically represented as "x^(-1)", so (~x+c)
// will be (x^(-1))+c.
if (op1 == Op_Xor(bt) &&
(in2->Opcode() == Op_ConI || in2->Opcode() == Op_ConL) &&
phase->type(in1->in(2)) == TypeInteger::minus_1(bt)) {
Node* c_minus_one = phase->makecon(add_ring(phase->type(in(2)), TypeInteger::minus_1(bt)));
return SubNode::make(c_minus_one, in1->in(1), bt);
}
Thank you for reviewing.
-------------
Commit messages:
- Merge branch 'master'.
- fix copyright year.
- update copyright year to 2022.
- update copyright year.
- update benchmark.
- Merge branch 'master' of https://github.com/openjdk/jdk into addnode-PAddSub1202
- update microbenchmark.
- replace normal jtreg test with ir test.
- icrease the number of iterations in microbenmark tests to reduce errors.
- add the associated microbenchmark test.
- ... and 4 more: https://git.openjdk.java.net/jdk/compare/a741b927...ccbb3b9d
Changes: https://git.openjdk.java.net/jdk/pull/6858/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6858&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8279607
Stats: 312 lines in 4 files changed: 306 ins; 0 del; 6 mod
Patch: https://git.openjdk.java.net/jdk/pull/6858.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/6858/head:pull/6858
PR: https://git.openjdk.java.net/jdk/pull/6858
More information about the hotspot-compiler-dev
mailing list