RFR: 8308340: C2: Idealize Fma nodes [v6]

Fei Gao fgao at openjdk.org
Mon Aug 14 07:42:29 UTC 2023


On Thu, 10 Aug 2023 13:19:06 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

>> Fei Gao has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains eight commits:
>> 
>>  - Improve comments and add assertions
>>  - Merge branch 'master' into fg8308340
>>  - Merge branch 'master' into fg8308340
>>  - Merge branch 'master' into fg8308340
>>  - Merge branch 'master' into fg8308340
>>  - Move check for UseFMA from c2compiler.cpp to Matcher::match_rule_supported in .ad files
>>  - Merge branch 'master' into fg8308340
>>  - 8308340: C2: Idealize Fma nodes
>>    
>>    Some platforms, like aarch64, ppc, and riscv, support fusing
>>    `Math.fma(-a, b, c)` or `Math.fma(a, -b, c)` by generating
>>    partially symmetric match rules like:
>>    
>>    ```
>>      match(Set dst (FmaF src3 (Binary (NegF src1) src2)));
>>      match(Set dst (FmaF src3 (Binary src1 (NegF src2))));
>>    ```
>>    
>>    Since `Fma` is partially communitive, the patch is to convert
>>    `Math.fma(-a, b, c)` to `Math.fma(b, -a, c)` in gvn phase,
>>    making node patterns canonical. Then we can remove redundant
>>    rules.
>>    
>>    Also, we should guarantee that C2 generates `Fma` nodes only on
>>    platforms supporting `Fma` instructions before matcher, so we
>>    can remove all `predicate(UseFMA)` for all `Fma` rules.
>>    
>>    After the patch, the code size of libjvm.so on aarch64 platform
>>    decreased by 63.4k.
>>    
>>    The patch passed all tier 1 - 3 on aarch64 and x86 platforms.
>
> src/hotspot/cpu/x86/x86.ad line 3975:
> 
>> 3973: // a * b + c
>> 3974: instruct fmaF_reg(regF a, regF b, regF c) %{
>> 3975:   predicate(UseFMA);
> 
> You could add an assert to the encoding code. Just to ensure that we do not generate bad code, even if it is never executed during testing.

Yes, thanks for your suggestion! Updated in the new commit.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/14576#discussion_r1293070879


More information about the hotspot-compiler-dev mailing list