18
18
#include " mlir/IR/TypeUtilities.h"
19
19
#include " mlir/Pass/Pass.h"
20
20
21
+ #include " llvm/ADT/FloatingPointMode.h"
22
+
21
23
namespace mlir {
22
24
#define GEN_PASS_DEF_CONVERTMATHTOLLVMPASS
23
25
#include " mlir/Conversion/Passes.h.inc"
@@ -286,6 +288,40 @@ struct RsqrtOpLowering : public ConvertOpToLLVMPattern<math::RsqrtOp> {
286
288
}
287
289
};
288
290
291
+ struct IsNaNOpLowering : public ConvertOpToLLVMPattern <math::IsNaNOp> {
292
+ using ConvertOpToLLVMPattern<math::IsNaNOp>::ConvertOpToLLVMPattern;
293
+
294
+ LogicalResult
295
+ matchAndRewrite (math::IsNaNOp op, OpAdaptor adaptor,
296
+ ConversionPatternRewriter &rewriter) const override {
297
+ auto operandType = adaptor.getOperand ().getType ();
298
+
299
+ if (!operandType || !LLVM::isCompatibleType (operandType))
300
+ return failure ();
301
+
302
+ rewriter.replaceOpWithNewOp <LLVM::IsFPClass>(
303
+ op, op.getType (), adaptor.getOperand (), llvm::fcNan);
304
+ return success ();
305
+ }
306
+ };
307
+
308
+ struct IsFiniteOpLowering : public ConvertOpToLLVMPattern <math::IsFiniteOp> {
309
+ using ConvertOpToLLVMPattern<math::IsFiniteOp>::ConvertOpToLLVMPattern;
310
+
311
+ LogicalResult
312
+ matchAndRewrite (math::IsFiniteOp op, OpAdaptor adaptor,
313
+ ConversionPatternRewriter &rewriter) const override {
314
+ auto operandType = adaptor.getOperand ().getType ();
315
+
316
+ if (!operandType || !LLVM::isCompatibleType (operandType))
317
+ return failure ();
318
+
319
+ rewriter.replaceOpWithNewOp <LLVM::IsFPClass>(
320
+ op, op.getType (), adaptor.getOperand (), llvm::fcFinite);
321
+ return success ();
322
+ }
323
+ };
324
+
289
325
struct ConvertMathToLLVMPass
290
326
: public impl::ConvertMathToLLVMPassBase<ConvertMathToLLVMPass> {
291
327
using Base::Base;
@@ -309,6 +345,8 @@ void mlir::populateMathToLLVMConversionPatterns(
309
345
patterns.add <Log1pOpLowering>(converter, benefit);
310
346
// clang-format off
311
347
patterns.add <
348
+ IsNaNOpLowering,
349
+ IsFiniteOpLowering,
312
350
AbsFOpLowering,
313
351
AbsIOpLowering,
314
352
CeilOpLowering,
0 commit comments