From 0fe2ade36c21c0cb72a25f2c430012ba3cc5a358 Mon Sep 17 00:00:00 2001 From: Gao Xiang Date: Mon, 6 May 2024 14:34:40 +0800 Subject: [PATCH 1/4] lowering sin operation to mlir --- .../Lowering/ThroughMLIR/LowerCIRToMLIR.cpp | 15 +++++++++- clang/test/CIR/Lowering/ThroughMLIR/sin.cir | 30 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 clang/test/CIR/Lowering/ThroughMLIR/sin.cir diff --git a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp index 886610516e2b..5c19f74b16aa 100644 --- a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp +++ b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp @@ -32,6 +32,7 @@ #include "mlir/IR/BuiltinTypes.h" #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassManager.h" +#include "mlir/Support/LogicalResult.h" #include "mlir/Target/LLVMIR/Dialect/Builtin/BuiltinToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h" #include "mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h" @@ -153,6 +154,18 @@ class CIRCosOpLowering : public mlir::OpConversionPattern { } }; +class CIRSinOpLowering : public mlir::OpConversionPattern { +public: + using mlir::OpConversionPattern::OpConversionPattern; + + mlir::LogicalResult + matchAndRewrite(mlir::cir::SinOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const override { + rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); + return mlir::LogicalResult::success(); + } +}; + class CIRConstantOpLowering : public mlir::OpConversionPattern { public: @@ -847,7 +860,7 @@ void populateCIRToMLIRConversionPatterns(mlir::RewritePatternSet &patterns, CIRStoreOpLowering, CIRAllocaOpLowering, CIRFuncOpLowering, CIRScopeOpLowering, CIRBrCondOpLowering, CIRTernaryOpLowering, CIRYieldOpLowering, CIRCosOpLowering, CIRGlobalOpLowering, - CIRGetGlobalOpLowering, CIRCastOpLowering>( + CIRGetGlobalOpLowering, CIRCastOpLowering, CIRSinOpLowering>( converter, patterns.getContext()); } diff --git a/clang/test/CIR/Lowering/ThroughMLIR/sin.cir b/clang/test/CIR/Lowering/ThroughMLIR/sin.cir new file mode 100644 index 000000000000..1db2613066e0 --- /dev/null +++ b/clang/test/CIR/Lowering/ThroughMLIR/sin.cir @@ -0,0 +1,30 @@ +// RUN: cir-opt %s -cir-to-mlir -o %t.mlir +// RUN: FileCheck %s --input-file %t.mlir + +module { + cir.func @foo() { + %1 = cir.const #cir.fp<1.0> : !cir.float + %2 = cir.const #cir.fp<1.0> : !cir.double + %3 = cir.const #cir.fp<1.0> : !cir.long_double + %4 = cir.const #cir.fp<1.0> : !cir.long_double + %5 = cir.sin %1 : !cir.float + %6 = cir.sin %2 : !cir.double + %7 = cir.sin %3 : !cir.long_double + %8 = cir.sin %4 : !cir.long_double + cir.return + } +} + +// CHECK: module { +// CHECK-NEXT: func.func @foo() { +// CHECK-NEXT: %[[C0:.+]] = arith.constant 1.000000e+00 : f32 +// CHECK-NEXT: %[[C1:.+]] = arith.constant 1.000000e+00 : f64 +// CHECK-NEXT: %[[C2:.+]] = arith.constant 1.000000e+00 : f80 +// CHECK-NEXT: %[[C3:.+]] = arith.constant 1.000000e+00 : f64 +// CHECK-NEXT: %{{.+}} = math.sin %[[C0]] : f32 +// CHECK-NEXT: %{{.+}} = math.sin %[[C1]] : f64 +// CHECK-NEXT: %{{.+}} = math.sin %[[C2]] : f80 +// CHECK-NEXT: %{{.+}} = math.sin %[[C3]] : f64 +// CHECK-NEXT: return +// CHECK-NEXT: } +// CHECK-NEXT: } \ No newline at end of file From 53bb69b7c11f70d4b6a0d37accbfc7f057eb9f6e Mon Sep 17 00:00:00 2001 From: GaoXiangYa Date: Tue, 7 May 2024 14:26:10 +0800 Subject: [PATCH 2/4] code format --- clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp index d3ab86cfb8b1..75e83828a020 100644 --- a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp +++ b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp @@ -1006,8 +1006,7 @@ void populateCIRToMLIRConversionPatterns(mlir::RewritePatternSet &patterns, CIRScopeOpLowering, CIRBrCondOpLowering, CIRTernaryOpLowering, CIRYieldOpLowering, CIRCosOpLowering, CIRGlobalOpLowering, CIRGetGlobalOpLowering, CIRCastOpLowering, CIRPtrStrideOpLowering, - CIRSinOpLowering>( - converter, patterns.getContext()); + CIRSinOpLowering>(converter, patterns.getContext()); } static mlir::TypeConverter prepareTypeConverter() { From 70faf57d53585ab11b443ed9098acdc600d82dd6 Mon Sep 17 00:00:00 2001 From: GaoXiangYa Date: Wed, 8 May 2024 09:13:23 +0800 Subject: [PATCH 3/4] format code based an clang format --- clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp index 75e83828a020..e2b41d027955 100644 --- a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp +++ b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp @@ -1005,8 +1005,9 @@ void populateCIRToMLIRConversionPatterns(mlir::RewritePatternSet &patterns, CIRStoreOpLowering, CIRAllocaOpLowering, CIRFuncOpLowering, CIRScopeOpLowering, CIRBrCondOpLowering, CIRTernaryOpLowering, CIRYieldOpLowering, CIRCosOpLowering, CIRGlobalOpLowering, - CIRGetGlobalOpLowering, CIRCastOpLowering, CIRPtrStrideOpLowering, - CIRSinOpLowering>(converter, patterns.getContext()); + CIRGetGlobalOpLowering, CIRCastOpLowering, + CIRPtrStrideOpLowering, CIRSinOpLowering>(converter, + patterns.getContext()); } static mlir::TypeConverter prepareTypeConverter() { From 50fd662e506be5d5a04cf80a6bc64a572ed45c54 Mon Sep 17 00:00:00 2001 From: GaoXiangYa Date: Wed, 8 May 2024 21:23:05 +0800 Subject: [PATCH 4/4] add a newline in sin.cir --- clang/test/CIR/Lowering/ThroughMLIR/sin.cir | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/CIR/Lowering/ThroughMLIR/sin.cir b/clang/test/CIR/Lowering/ThroughMLIR/sin.cir index 1db2613066e0..c433b52e105c 100644 --- a/clang/test/CIR/Lowering/ThroughMLIR/sin.cir +++ b/clang/test/CIR/Lowering/ThroughMLIR/sin.cir @@ -27,4 +27,4 @@ module { // CHECK-NEXT: %{{.+}} = math.sin %[[C3]] : f64 // CHECK-NEXT: return // CHECK-NEXT: } -// CHECK-NEXT: } \ No newline at end of file +// CHECK-NEXT: }