Changes

Summary

  1. [FPEnv] Constrained FCmp intrinsics (details)
Commit 9db13b5a7d43096a9ab5f7cef6e1b7e2dc9c9c63 by ulrich.weigand
[FPEnv] Constrained FCmp intrinsics
This adds support for constrained floating-point comparison intrinsics.
Specifically, we add:
      declare <ty2>
     @llvm.experimental.constrained.fcmp(<type> <op1>, <type> <op2>,
                                         metadata <condition code>,
                                         metadata <exception behavior>)
     declare <ty2>
     @llvm.experimental.constrained.fcmps(<type> <op1>, <type> <op2>,
                                          metadata <condition code>,
                                          metadata <exception behavior>)
The first variant implements an IEEE "quiet" comparison (i.e. we only
get an invalid FP exception if either argument is a SNaN), while the
second variant implements an IEEE "signaling" comparison (i.e. we get an
invalid FP exception if either argument is any NaN).
The condition code is implemented as a metadata string.  The same set of
predicates as for the fcmp instruction is supported (except for the
"true" and "false" predicates).
These new intrinsics are mapped by SelectionDAG codegen onto two new ISD
opcodes, ISD::STRICT_FSETCC and ISD::STRICT_FSETCCS, again representing
quiet vs. signaling comparison operations.  Otherwise those nodes look
like SETCC nodes, with an additional chain argument and result as usual
for strict FP nodes.  The patch includes support for the common
legalization operations for those nodes.
The patch also includes full SystemZ back-end support for the new ISD
nodes, mapping them to all available SystemZ instruction to fully
implement strict semantics (scalar and vector).
Differential Revision: https://reviews.llvm.org/D69281
The file was modifiedllvm/include/llvm/CodeGen/TargetLowering.h
The file was addedllvm/test/CodeGen/SystemZ/vec-strict-cmp-02.ll
The file was modifiedllvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmps-03.ll
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmps-05.ll
The file was modifiedllvm/include/llvm/CodeGen/ISDOpcodes.h
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmps-06.ll
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmps-02.ll
The file was modifiedllvm/lib/Target/SystemZ/SystemZOperators.td
The file was modifiedllvm/lib/Target/SystemZ/SystemZISelLowering.h
The file was modifiedllvm/lib/IR/IntrinsicInst.cpp
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmps-04.ll
The file was modifiedllvm/docs/LangRef.rst
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmp-06.ll
The file was addedllvm/test/CodeGen/SystemZ/vec-strict-cmps-01.ll
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
The file was modifiedllvm/lib/Target/SystemZ/SystemZInstrVector.td
The file was modifiedllvm/include/llvm/IR/Intrinsics.td
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
The file was modifiedllvm/include/llvm/IR/ConstrainedOps.def
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmp-01.ll
The file was modifiedllvm/include/llvm/IR/IntrinsicInst.h
The file was modifiedllvm/lib/Target/SystemZ/SystemZISelLowering.cpp
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmp-02.ll
The file was modifiedllvm/lib/IR/Verifier.cpp
The file was modifiedllvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
The file was modifiedllvm/lib/Target/SystemZ/SystemZInstrFP.td
The file was modifiedllvm/lib/Target/SystemZ/SystemZPatterns.td
The file was addedllvm/test/CodeGen/SystemZ/vec-strict-cmp-03.ll
The file was addedllvm/test/CodeGen/SystemZ/vec-strict-cmps-03.ll
The file was modifiedllvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
The file was modifiedllvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmp-05.ll
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmp-04.ll
The file was modifiedllvm/lib/Target/SystemZ/SystemZElimCompare.cpp
The file was addedllvm/test/CodeGen/SystemZ/vec-strict-cmp-01.ll
The file was modifiedllvm/lib/Target/SystemZ/SystemZShortenInst.cpp
The file was addedllvm/test/CodeGen/SystemZ/vec-strict-cmps-02.ll
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmp-03.ll
The file was addedllvm/test/CodeGen/SystemZ/fp-strict-cmps-01.ll