diff options
| author | Nagy Mostafa <nagy.mostafa@gmail.com> | 2019-08-08 18:29:23 -0700 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-08-08 18:29:48 -0700 |
| commit | 48fdc8d7a301aff6ade00f2a5263628937b529f3 (patch) | |
| tree | 50c8aa0a928e39ecbf95393fc2d7624ec62d02d8 /mlir/lib/Target/LLVMIR | |
| parent | 96371d25c388cba4716a3d389c011b404b22c270 (diff) | |
| download | bcm5719-llvm-48fdc8d7a301aff6ade00f2a5263628937b529f3.tar.gz bcm5719-llvm-48fdc8d7a301aff6ade00f2a5263628937b529f3.zip | |
Add support for floating-point comparison 'fcmp' to the LLVM dialect.
This adds support for fcmp to the LLVM dialect and adds any necessary lowerings, as well as support for EDSCs.
Closes tensorflow/mlir#69
PiperOrigin-RevId: 262475255
Diffstat (limited to 'mlir/lib/Target/LLVMIR')
| -rw-r--r-- | mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index 8b18c56e21e..08255b47f9f 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -140,6 +140,45 @@ static llvm::CmpInst::Predicate getLLVMCmpPredicate(ICmpPredicate p) { } } +static llvm::CmpInst::Predicate getLLVMCmpPredicate(FCmpPredicate p) { + switch (p) { + case LLVM::FCmpPredicate::_false: + return llvm::CmpInst::Predicate::FCMP_FALSE; + case LLVM::FCmpPredicate::oeq: + return llvm::CmpInst::Predicate::FCMP_OEQ; + case LLVM::FCmpPredicate::ogt: + return llvm::CmpInst::Predicate::FCMP_OGT; + case LLVM::FCmpPredicate::oge: + return llvm::CmpInst::Predicate::FCMP_OGE; + case LLVM::FCmpPredicate::olt: + return llvm::CmpInst::Predicate::FCMP_OLT; + case LLVM::FCmpPredicate::ole: + return llvm::CmpInst::Predicate::FCMP_OLE; + case LLVM::FCmpPredicate::one: + return llvm::CmpInst::Predicate::FCMP_ONE; + case LLVM::FCmpPredicate::ord: + return llvm::CmpInst::Predicate::FCMP_ORD; + case LLVM::FCmpPredicate::ueq: + return llvm::CmpInst::Predicate::FCMP_UEQ; + case LLVM::FCmpPredicate::ugt: + return llvm::CmpInst::Predicate::FCMP_UGT; + case LLVM::FCmpPredicate::uge: + return llvm::CmpInst::Predicate::FCMP_UGE; + case LLVM::FCmpPredicate::ult: + return llvm::CmpInst::Predicate::FCMP_ULT; + case LLVM::FCmpPredicate::ule: + return llvm::CmpInst::Predicate::FCMP_ULE; + case LLVM::FCmpPredicate::une: + return llvm::CmpInst::Predicate::FCMP_UNE; + case LLVM::FCmpPredicate::uno: + return llvm::CmpInst::Predicate::FCMP_UNO; + case LLVM::FCmpPredicate::_true: + return llvm::CmpInst::Predicate::FCMP_TRUE; + default: + llvm_unreachable("incorrect comparison predicate"); + } +} + // A helper to look up remapped operands in the value remapping table. template <typename Range> SmallVector<llvm::Value *, 8> ModuleTranslation::lookupValues(Range &&values) { |

