Some platforms, like aarch64, ppc, and riscv, support match rules to fuse `match(Set dst (FmaF src3 (Binary (NegF src1) src2)));`. Since `Fma` is partially communitive, we need to generate partially symmetric rules like:
```
match(Set dst (FmaF src3 (Binary (NegF src1) src2)));
match(Set dst (FmaF src3 (Binary src1 (NegF src2))));
```
If we could idealize these fma nodes in gvn phase, making them canonical, duplicate rules can be removed. Suppose it could help reduce code size.
```
match(Set dst (FmaF src3 (Binary (NegF src1) src2)));
match(Set dst (FmaF src3 (Binary src1 (NegF src2))));
```
If we could idealize these fma nodes in gvn phase, making them canonical, duplicate rules can be removed. Suppose it could help reduce code size.