RFR: 8325495: C2: implement optimization for series of Add of unique value
Kangcheng Xu
kxu at openjdk.org
Fri Aug 30 14:28:21 UTC 2024
On Thu, 29 Aug 2024 19:29:30 GMT, Dean Long <dlong at openjdk.org> wrote:
>> This pull request resolves [JDK-8325495](https://bugs.openjdk.org/browse/JDK-8325495) by converting series of additions of the same operand into multiplications. I.e., `a + a + ... + a + a + a => n*a`.
>>
>> As an added benefit, it also converts `C * a + a` into `(C+1) * a` and `a << C + a` into `(2^C + 1) * a` (with respect to constant `C`). This is actually a side effect of IGVN being iterative: at converting the `i`-th addition, the previous `i-1` additions would have already been optimized to multiplication (and thus, further into bit shifts and additions/subtractions if possible).
>>
>> Some notable examples of this transformation include:
>> - `a + a + a` => `a*3` => `(a<<1) + a`
>> - `a + a + a + a` => `a*4` => `a<<2`
>> - `a*3 + a` => `a*4` => `a<<2`
>> - `(a << 1) + a + a` => `a*2 + a + a` => `a*3 + a` => `a*4 => a<<2`
>>
>> See included IR unit tests for more.
>
> Can we redistrute the repeated terms and turn `a + x + a + y + a` into `a*3 + x + y`?
@dean-long No it cannot, although I agree this is a fairly tempting feature to have. Maybe this can be looked into with another issue, but I believe re-ordering addition is out-of-scope for this one.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20754#issuecomment-2321430562
More information about the hotspot-compiler-dev
mailing list