Integrated: 8279607: Existing optimization "~x+1" -> "-x" can be generalized to "~x+c" -> "(c-1)-x".

Zhiqiang Zang duke at openjdk.java.net
Thu Jan 20 07:41:55 UTC 2022


On Thu, 16 Dec 2021 00:02:12 GMT, Zhiqiang Zang <duke at openjdk.java.net> wrote:

> 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.

This pull request has now been integrated.

Changeset: 0bf95a1a
Author:    Zhiqiang Zang <zhiqiang.zang at utexas.edu>
Committer: Tobias Hartmann <thartmann at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/0bf95a1a7327cc4899863143e2dfdf3d87dbdf0c
Stats:     505 lines in 4 files changed: 487 ins; 2 del; 16 mod

8279607: Existing optimization "~x+1" -> "-x" can be generalized to "~x+c" -> "(c-1)-x".

Reviewed-by: thartmann, kvn

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

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


More information about the hotspot-compiler-dev mailing list