From 9db9dd709b92422752d9852377c652fcf1983b3a Mon Sep 17 00:00:00 2001 From: Tina Jung Date: Wed, 29 May 2024 14:49:22 +0200 Subject: [PATCH] Add missing cmpf predicate conversion (#193) --- mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp | 7 ++++--- .../Conversion/ArithToEmitC/arith-to-emitc.mlir | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp b/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp index 93637d02b1f0e5..c864a8aeacbd5b 100644 --- a/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp +++ b/mlir/lib/Conversion/ArithToEmitC/ArithToEmitC.cpp @@ -125,6 +125,10 @@ class CmpFOpConversion : public OpConversionPattern { unordered = false; predicate = emitc::CmpPredicate::lt; break; + case arith::CmpFPredicate::OLE: + unordered = false; + predicate = emitc::CmpPredicate::le; + break; case arith::CmpFPredicate::ONE: unordered = false; predicate = emitc::CmpPredicate::ne; @@ -179,9 +183,6 @@ class CmpFOpConversion : public OpConversionPattern { rewriter.replaceOp(op, constant); return success(); } - default: - return rewriter.notifyMatchFailure(op.getLoc(), - "cannot match predicate "); } // Compare the values naively diff --git a/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir b/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir index 55bbb0245c2955..7a6dc7bfc5809c 100644 --- a/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir +++ b/mlir/test/Conversion/ArithToEmitC/arith-to-emitc.mlir @@ -337,6 +337,21 @@ func.func @arith_cmpf_olt(%arg0: f32, %arg1: f32) -> i1 { // ----- +func.func @arith_cmpf_ole(%arg0: f32, %arg1: f32) -> i1 { + // CHECK-LABEL: arith_cmpf_ole + // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32) + // CHECK-DAG: [[LT:[^ ]*]] = emitc.cmp le, [[Arg0]], [[Arg1]] : (f32, f32) -> i1 + // CHECK-DAG: [[NaNArg0:[^ ]*]] = emitc.cmp eq, [[Arg0]], [[Arg0]] : (f32, f32) -> i1 + // CHECK-DAG: [[NaNArg1:[^ ]*]] = emitc.cmp eq, [[Arg1]], [[Arg1]] : (f32, f32) -> i1 + // CHECK-DAG: [[Ordered:[^ ]*]] = emitc.logical_and [[NaNArg0]], [[NaNArg1]] : i1, i1 + // CHECK-DAG: [[OLE:[^ ]*]] = emitc.logical_and [[Ordered]], [[LT]] : i1, i1 + %ole = arith.cmpf ole, %arg0, %arg1 : f32 + // CHECK: return [[OLE]] + return %ole: i1 +} + +// ----- + func.func @arith_cmpf_one(%arg0: f32, %arg1: f32) -> i1 { // CHECK-LABEL: arith_cmpf_one // CHECK-SAME: ([[Arg0:[^ ]*]]: f32, [[Arg1:[^ ]*]]: f32)