Add new ISD nodes: ISD::FMINNAN and ISD::FMAXNAN
authorJames Molloy <james.molloy@arm.com>
Tue, 11 Aug 2015 09:13:05 +0000 (09:13 +0000)
committerJames Molloy <james.molloy@arm.com>
Tue, 11 Aug 2015 09:13:05 +0000 (09:13 +0000)
commit01cdeccdc7e7db09fd51539a48ebb50039b0c88c
treefa3f30dc181a28d5ff99feb64cd81fbf5e14a76c
parent134bec27226ab1d37cff44b04cef73b67321601b
Add new ISD nodes: ISD::FMINNAN and ISD::FMAXNAN

The intention of these is to be a corollary to ISD::FMINNUM/FMAXNUM,
differing only on how NaNs are treated. FMINNUM returns the non-NaN
input (when given one NaN and one non-NaN), FMINNAN returns the NaN
input instead.

This patch includes support for scalarizing, widening and splitting
vectors, but not expansion or softening. The reason is that these
should never be needed - FMINNAN nodes are only going to be created
in one place (SDAGBuilder::visitSelect) and there we'll check if the
node is legal or custom. I could preemptively add expand and soften
code, but I'm fairly opposed to adding code I can't test. It's bad
enough I can't create tests with this patch, but at least this code
will be exercised by the ARM and AArch64 backends fairly shortly.

llvm-svn: 244581
llvm/include/llvm/CodeGen/ISDOpcodes.h
llvm/include/llvm/CodeGen/SelectionDAG.h
llvm/include/llvm/Target/TargetSelectionDAG.td
llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
llvm/lib/CodeGen/TargetLoweringBase.cpp