RFR: 8328528: C2 should optimize long-typed parallel iv in an int counted loop [v24]
Christian Hagedorn
chagedorn at openjdk.org
Mon Oct 21 06:58:38 UTC 2024
On Mon, 21 Oct 2024 06:32:58 GMT, Kangcheng Xu <kxu at openjdk.org> wrote:
>> src/hotspot/share/opto/loopnode.cpp line 3973:
>>
>>> 3971: // conversions are required:
>>> 3972: //
>>> 3973: // long iv2 = ((long) phi * stride_con2 / stride_con) + (init2 - ((long) init * stride_con2 / stride_con))
>>
>> Thanks for updating the example. I guess we should use `iv` consistently - missed that to do in my example before:
>> Suggestion:
>>
>> // int a = init2;
>> // for (int iv = init; iv < limit; iv += stride_con) {
>> // a += stride_con2;
>> // }
>> //
>> // and transforms it to:
>> //
>> // int iv2 = init2
>> // int iv = init
>> // loop:
>> // if ( iv >= limit ) goto exit
>> // iv += stride_con
>> // iv2 = init2 + (iv - init) * (stride_con2 / stride_con)
>> // goto loop
>> // exit:
>> // ...
>> //
>> // Such transformation introduces more optimization opportunities. In this
>> // particular example, the loop can be eliminated entirely given that
>> // `stride_con2 / stride_con` is exact (i.e., no remainder). Checks are in
>> // place to only perform this optimization if such a division is exact. This
>> // example will be transformed into its semantic equivalence:
>> //
>> // int iv2 = (iv * stride_con2 / stride_con) + (init2 - (init * stride_con2 / stride_con))
>> //
>> // which corresponds to the structure of transformed subgraph.
>> //
>> // However, if there is a mismatch between types of the loop and the parallel
>> // induction variable (e.g., a long-typed IV in an int-typed loop), type
>> // conversions are required:
>> //
>> // long iv2 = ((long) iv * stride_con2 / stride_con) + (init2 - ((long) init * stride_con2 / stride_con))
>
> Sorry I thought you were only refering to transform code in that last review. Yes, it's better to keep names consistent across. Thanks for pointing out!
Was first my intention. But when reading it again, I think it's better to go with `iv` everywhere.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18489#discussion_r1808198822
More information about the hotspot-compiler-dev
mailing list