summaryrefslogtreecommitdiffstats
path: root/mlir/lib/Target/LLVMIR
diff options
context:
space:
mode:
authorNagy Mostafa <nagy.mostafa@gmail.com>2019-08-08 18:29:23 -0700
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-08-08 18:29:48 -0700
commit48fdc8d7a301aff6ade00f2a5263628937b529f3 (patch)
tree50c8aa0a928e39ecbf95393fc2d7624ec62d02d8 /mlir/lib/Target/LLVMIR
parent96371d25c388cba4716a3d389c011b404b22c270 (diff)
downloadbcm5719-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.cpp39
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) {
OpenPOWER on IntegriCloud