[X86] Custom isel floating point X86ISD::CMP on pre-CMOV targets. Eliminate ConvertCm...
authorCraig Topper <craig.topper@intel.com>
Thu, 6 Feb 2020 18:42:11 +0000 (10:42 -0800)
committerCraig Topper <craig.topper@intel.com>
Thu, 6 Feb 2020 18:43:06 +0000 (10:43 -0800)
commit4175d7e22e1c70c0d2c8ff4a70235e8ec3461e5e
treecff7578f67962297ae0fec76d93da8215f425089
parent8d19af685c9b1ba50df0ed739dbfffd0aa7686ee
[X86] Custom isel floating point X86ISD::CMP on pre-CMOV targets. Eliminate ConvertCmpIfNecessary

If we don't have cmov, X87 compares write to FPSW and we need to
move the bits to EFLAGS to use as JCC/SETCC/CMOV conditions.

Previously this was done by calling ConvertCmpIfNecessary in
multiple places which would emit the extra code for the FNSTSW,
a shift, a truncate, and a SAHF instructions. Isel would then
select trunc+X86ISD::CMP to a FUCOM instruction that produces FPSW.

This patch centralizes all of the handling into a single custom
isel handler. This allows us to remove ConvertCmpIfNecessary and
a couple target specific ISD opcodes.

Differential Revision: https://reviews.llvm.org/D73863
llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86ISelLowering.h
llvm/lib/Target/X86/X86InstrFPStack.td
llvm/lib/Target/X86/X86InstrInfo.td