RFR: 8281453: New optimization: convert `~x` into `-1-x` when `~x` is used in an arithmetic expression
Vladimir Kozlov
kvn at openjdk.org
Fri Sep 16 22:05:46 UTC 2022
On Wed, 9 Feb 2022 16:12:30 GMT, Quan Anh Mai <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
>
> Since `~x == -1 - x` and these 2 operations' costs are essentially the same. It would be much easier if you just check whether the not result is used in an arithmetic operation and transform the former to the latter. The reverse is also true, if you find a `-1 - x` being fed into a bitwise just transform it to a `~x` then.
> Thanks.
@merykitty can review it since he gave initial comment.
-------------
PR: https://git.openjdk.org/jdk/pull/7376
More information about the hotspot-compiler-dev
mailing list