Commit Graph

6 Commits

Author SHA1 Message Date
Nikita Popov 8e69c3cde8 [DAGCombiner] Fold fmin/fmax with INF / FLT_MAX
Similar to D87415, this folds the various float min/max opcodes
with a constant INF or -INF operand, or FLT_MAX / -FLT_MAX operand
if the ninf flag is set. Some of the folds are only possible under
nnan.

The fminnum(X, INF) with nnan and fmaxnum(X, -INF) with nnan cases
are needed to improve the VECREDUCE_FMIN/FMAX lowerings on X86,
the rest is here for the sake of completeness.

Differential Revision: https://reviews.llvm.org/D87571
2020-09-14 19:59:33 +02:00
Nikita Popov cb3e1dd6c3 [ARM] Add some fmin/fmax tests with commuted operands (NFC)
As well as vector commuted operands.
2020-09-13 22:30:07 +02:00
Nikita Popov 2c85f5e642 [ARM] Add tests for fmin/max with largest/smallest float (NFC) 2020-09-13 17:05:58 +02:00
Nikita Popov c2f8bc986f [ARM] Add tests for fmin/max + inf folds (NFC) 2020-09-13 00:22:03 +02:00
Nikita Popov 0a5dc7effb [DAGCombiner] Fold fmin/fmax of NaN
fminnum(X, NaN) is X, fminimum(X, NaN) is NaN. This mirrors the
behavior of existing InstSimplify folds.

This is expected to improve the reduction lowerings in D87391,
which use NaN as a neutral element.

Differential Revision: https://reviews.llvm.org/D87415
2020-09-09 23:53:32 +02:00
Nikita Popov 5a4a05c811 [ARM] Add additional fmin/fmax with nan tests (NFC)
Adding these to ARM which has both FMINNUM and FMINIMUM.
2020-09-09 23:53:32 +02:00