RFR: 8308340: C2: Idealize Fma nodes [v6]
Emanuel Peter
epeter at openjdk.org
Mon Aug 14 13:10:59 UTC 2023
On Mon, 14 Aug 2023 07:42:07 GMT, Fei Gao <fgao at openjdk.org> wrote:
>> 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 commutative, 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.
>
> 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.
@fg1417 fair enough. the checks may be too complex. I'll approve it now :)
-------------
Marked as reviewed by epeter (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/14576#pullrequestreview-1576783457
More information about the hotspot-compiler-dev
mailing list