RFR: 8281453: New optimization: convert `~x` into `-1-x` when `~x` is used in an arithmetic expression [v9]
Quan Anh Mai
duke at openjdk.org
Mon Sep 19 03:25:40 UTC 2022
On Thu, 15 Sep 2022 16:53:44 GMT, Zhiqiang Zang <duke at openjdk.org> wrote:
>> 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)`.
>>
>> To generalize, I convert `~x` into `-1-x` when `~x` is used in an arithmetic expression. For example, `c-(~x)` will be converted into `c-(-1-x)` which will match other pattern and will be transformed again in next iteration and finally become `x+(c+1)`.
>>
>> The results of the microbenchmark are as follows:
>>
>> Baseline:
>> Benchmark Mode Cnt Score Error Units
>> NotOpTransformation.baselineInt avgt 60 0.439 ± 0.001 ns/op
>> NotOpTransformation.baselineLong avgt 60 0.439 ± 0.001 ns/op
>> NotOpTransformation.testInt1 avgt 60 0.603 ± 0.001 ns/op
>> NotOpTransformation.testInt2 avgt 60 0.603 ± 0.001 ns/op
>> NotOpTransformation.testLong1 avgt 60 0.658 ± 0.001 ns/op
>> NotOpTransformation.testLong2 avgt 60 0.658 ± 0.001 ns/op
>>
>> Patch:
>> Benchmark Mode Cnt Score Error Units
>> NotOpTransformation.baselineInt avgt 60 0.439 ± 0.001 ns/op
>> NotOpTransformation.baselineLong avgt 60 0.439 ± 0.001 ns/op
>> NotOpTransformation.testInt1 avgt 60 0.329 ± 0.001 ns/op
>> NotOpTransformation.testInt2 avgt 60 0.329 ± 0.001 ns/op
>> NotOpTransformation.testLong1 avgt 60 0.329 ± 0.001 ns/op
>> NotOpTransformation.testLong2 avgt 60 0.329 ± 0.001 ns/op
>
> Zhiqiang Zang has updated the pull request incrementally with one additional commit since the last revision:
>
> include microbenchmark.
Consider there are 2 statements:
int x = ~a + b;
int y = ~a | c;
Your transformation would duplicate the `~a` as it is transformed into `(-a - 1)` in the calculation of `x` but not in the calculation of `y`.
Thanks.
-------------
PR: https://git.openjdk.org/jdk/pull/7376
More information about the hotspot-compiler-dev
mailing list