RFR: 8308340: C2: Idealize Fma nodes [v2]
Vladimir Kozlov
kvn at openjdk.org
Tue Jun 27 16:09:21 UTC 2023
On Tue, 27 Jun 2023 03:18:21 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 incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision:
>
> - 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.
Looks good to me.
You need second review.
-------------
Marked as reviewed by kvn (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/14576#pullrequestreview-1501356956
More information about the hotspot-compiler-dev
mailing list