You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[AArch64][NEON] Extend faminmax patterns with fminnm/fmaxnm
Patterns were previously added to allow the following reduction
- fminimum(abs(a), abs(b)) -> famin(a, b)
- fmaximum(abs(a), abs(b)) -> famax(a, b)
- (llvm#103027)
It was suggested by @davemgreen that the following reductions are also possible
- fminnum[nnan](abs(a), abs(b)) -> famin(a, b)
- fmaxnum[nnan](abs(a), abs(b)) -> famax(a, b)
('nnan' documenatation: https://llvm.org/docs/LangRef.html#fast-math-flags)
The 'no NaNs' flag allows optimisations to assume that neither argument is a Nan,
and so the differing NaN propagation semantics of llvm.maxnum/llvm.minnum and
FAMAX/FAMIN can be ignored in this reduction.
(llvm.maxnum/llvm.minnum: https://llvm.org/docs/LangRef.html#llvm-minnum-intrinsic)
- Changes to LLVM
- lib/target/AArch64/AArch64InstrInfo.td
- add 'fminnm_nnan' and 'fmaxnm_nnan'; patfrags on fminnm/fmaxnm
that are predicated on the instrinsic call having the 'nnan' flag.
- add AArch64famin and AArch64famax patfrags, containing the new and
existing reductions.
- test/CodeGen/AArch64/aarch64-neon-faminmax.ll
- add positive and negative tests for the new reduction, based on the
presence of 'nnan' in the IR intrinsic call.
0 commit comments