[SVE] Only combine (fneg (fma)) => FNMLA with nsz
authorPeter Waller <peter.waller@arm.com>
Wed, 8 Dec 2021 15:54:06 +0000 (15:54 +0000)
committerPeter Waller <peter.waller@arm.com>
Mon, 13 Dec 2021 11:33:07 +0000 (11:33 +0000)
commit921e89c59a71ca3487e175164afba15e76ae2e09
treec9bde3ddb52a16f1313f795fb05e19192f64d545
parent41def32040787e917b52279cc30231b27f2f02f7
[SVE] Only combine (fneg (fma)) => FNMLA with nsz

-(Za + Zm * Zn) != (-Za + Zm * (-Zn))
when the FMA produces a zero output (e.g. all zero inputs can produce -0
output)

Add a PatFrag to check presence of nsz on the fneg, add tests which
ensure the combine does not fire in the absense of nsz.

See https://reviews.llvm.org/D90901 for a similar discussion on X86.

Differential Revision: https://reviews.llvm.org/D109525
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
llvm/test/CodeGen/AArch64/sve-fp-combine.ll