There's a folding pattern in DAGCombine:
(fsub x, (fma y, z, (fmul u, v))) -> (fma (fneg y), z, (fma (fneg u), v, x))
However, since -0-0=-0; -0+0=+0, if yz=1, uv=-1, x=-0:
x-(yz+uv) = -0 -yz+(-uv+x) = +0
So this requires nsz.
| Paths 
 |  Differential  D76419  
[DAGCombiner] Add nsz constraint to aggressive fma folding ClosedPublic Authored by qiucf on Mar 19 2020, 2:13 AM. 
Details 
 Summary There's a folding pattern in DAGCombine: (fsub x, (fma y, z, (fmul u, v))) -> (fma (fneg y), z, (fma (fneg u), v, x)) However, since -0-0=-0; -0+0=+0, if yz=1, uv=-1, x=-0: x-(yz+uv) = -0 -yz+(-uv+x) = +0 So this requires nsz. 
Diff Detail 
 Event Timeline
 Comment Actions LGTM 
 This revision is now accepted and ready to land.Mar 20 2020, 9:42 AM qiucf added inline comments. 
 Closed by commit rG763871053cc0: [DAGCombiner] Require nsz for aggressive fma fold (authored by qiucf).  ·  Explain WhyMar 22 2020, 8:31 AM This revision was automatically updated to reflect the committed changes. 
 
Revision Contents 
 
 
Diff 251891 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
 
 llvm/test/CodeGen/AMDGPU/fma-combine.ll
 llvm/test/CodeGen/AMDGPU/mad-combine.ll
 llvm/test/CodeGen/PowerPC/fma-assoc.ll
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
It would be better to fix this RUN line (or better: add IR-level FMF to the changed test).