diff --git a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp index ed5fae18e707..ee0f33ae4428 100644 --- a/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp +++ b/clang/lib/CIR/Lowering/ThroughMLIR/LowerCIRToMLIR.cpp @@ -275,172 +275,52 @@ class CIRStoreOpLowering : public mlir::OpConversionPattern { } }; -class CIRACosOpLowering : public mlir::OpConversionPattern { -public: - using OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::ACosOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRATanOpLowering : public mlir::OpConversionPattern { -public: - using OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::ATanOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRCosOpLowering : public mlir::OpConversionPattern { -public: - using OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::CosOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRTanOpLowering : public mlir::OpConversionPattern { -public: - using OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::TanOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRSqrtOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; +/// Converts CIR unary math ops (e.g., cir::SinOp) to their MLIR equivalents +/// (e.g., math::SinOp) using a generic template to avoid redundant boilerplate +/// matchAndRewrite definitions. - mlir::LogicalResult - matchAndRewrite(cir::SqrtOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRFAbsOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::FAbsOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; -class CIRAbsOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::AbsOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRFloorOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::FloorOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRCeilOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::CeilOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRLog10OpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::Log10Op op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRLogOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::LogOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRLog2OpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::Log2Op op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRRoundOpLowering : public mlir::OpConversionPattern { +template +class CIRUnaryMathOpLowering : public mlir::OpConversionPattern { public: - using mlir::OpConversionPattern::OpConversionPattern; + using mlir::OpConversionPattern::OpConversionPattern; mlir::LogicalResult - matchAndRewrite(cir::RoundOp op, OpAdaptor adaptor, + matchAndRewrite(CIROp op, + typename mlir::OpConversionPattern::OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); + rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); return mlir::LogicalResult::success(); } }; -class CIRExpOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::ExpOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; +using CIRASinOpLowering = + CIRUnaryMathOpLowering; +using CIRSinOpLowering = CIRUnaryMathOpLowering; +using CIRExp2OpLowering = + CIRUnaryMathOpLowering; +using CIRExpOpLowering = CIRUnaryMathOpLowering; +using CIRRoundOpLowering = + CIRUnaryMathOpLowering; +using CIRLog2OpLowering = + CIRUnaryMathOpLowering; +using CIRLogOpLowering = CIRUnaryMathOpLowering; +using CIRLog10OpLowering = + CIRUnaryMathOpLowering; +using CIRCeilOpLowering = + CIRUnaryMathOpLowering; +using CIRFloorOpLowering = + CIRUnaryMathOpLowering; +using CIRAbsOpLowering = CIRUnaryMathOpLowering; +using CIRFAbsOpLowering = + CIRUnaryMathOpLowering; +using CIRSqrtOpLowering = + CIRUnaryMathOpLowering; +using CIRCosOpLowering = CIRUnaryMathOpLowering; +using CIRATanOpLowering = + CIRUnaryMathOpLowering; +using CIRACosOpLowering = + CIRUnaryMathOpLowering; +using CIRTanOpLowering = CIRUnaryMathOpLowering; class CIRShiftOpLowering : public mlir::OpConversionPattern { public: @@ -475,42 +355,6 @@ class CIRShiftOpLowering : public mlir::OpConversionPattern { } }; -class CIRExp2OpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::Exp2Op op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRSinOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::SinOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - -class CIRASinOpLowering : public mlir::OpConversionPattern { -public: - using mlir::OpConversionPattern::OpConversionPattern; - - mlir::LogicalResult - matchAndRewrite(cir::ASinOp op, OpAdaptor adaptor, - mlir::ConversionPatternRewriter &rewriter) const override { - rewriter.replaceOpWithNewOp(op, adaptor.getSrc()); - return mlir::LogicalResult::success(); - } -}; - template class CIRCountZerosBitOpLowering : public mlir::OpConversionPattern { public: