diff options
| author | SpencerAbson <Spencer.Abson@arm.com> | 2024-08-20 14:01:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-20 14:01:36 +0100 |
| commit | 5f3c0b23759faa80b0be59531f7e6643f9c95d32 (patch) | |
| tree | 71dc7cbe7275fddf73884b3893f84f7bc619745c /lldb/source/Plugins/ScriptInterpreter/Python/Interfaces/ScriptedProcessPythonInterface | |
| parent | 34e15adb5a725a5ecc7c0d5ef5571d307d751a93 (diff) | |
[AArch64][NEON] Extend faminmax patterns with fminnm/fmaxnm (#104766)
Patterns were previously added to allow the following reductions
- fminimum(abs(a), abs(b)) -> famin(a, b)
- fmaximum(abs(a), abs(b)) -> famax(a, b)
- https://github.com/llvm/llvm-project/pull/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.
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/Interfaces/ScriptedProcessPythonInterface')
0 files changed, 0 insertions, 0 deletions
