Changes from Git (git http://labmaster3.local/git/llvm-project.git)


  1. [X86] Add support for STRICT_FP_ROUND/STRICT_FP_EXTEND from/to fp128 (details)
  2. [LegalizeTypes] Remove code to create ISD::FP_TO_FP16 from (details)
Commit c43b8ec735e88472593ca420a5c6a17630f94066 by craig.topper
[X86] Add support for STRICT_FP_ROUND/STRICT_FP_EXTEND from/to fp128
to/from f32/f64/f80 in 64-bit mode.
These need to emit a libcall like we do for the non-strict version.
32-bit mode needs to SoftenFloat support to be implemented for strict FP
Differential Revision:
The file was addedllvm/test/CodeGen/X86/fp128-cast-strict.ll
The file was modifiedllvm/lib/Target/X86/X86ISelLowering.cpp
Commit 3dc7c5f7d83c61fdbce5ad2ab5aad716dd6d1d1e by craig.topper
[LegalizeTypes] Remove code to create ISD::FP_TO_FP16 from
There seems to have been a misunderstanding of what ISD::FTRUNC
represents. ISD::FTRUNC is equivalent to llvm.trunc which takes a
floating point value, truncates it without changing the size of the
value and returns it.
Despite its similar name, its different than the fptrunc instruction in
IR which changes a floating point value to a smaller floating point
value. fptrunc is represented by ISD::FP_ROUND in SelectionDAG.
Since the ISD::FP_TO_FP16 node takes a floating point value and converts
it to f16 its more similar to ISD::FP_ROUND. In fact there is identical
code to what is being removed here in SoftenFloatRes_FP_ROUND.
I assume this bug was never encountered because it would require f16 to
be legalized by softening rather than the default of promoting.
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp