================ @@ -0,0 +1,201 @@ +//====- LowerCIRToMLIR.cpp - Lowering from CIR to MLIR --------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements lowering of CIR operations to MLIR. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/BuiltinDialect.h" +#include "mlir/Pass/Pass.h" +#include "mlir/Pass/PassManager.h" +#include "mlir/Transforms/DialectConversion.h" +#include "clang/CIR/Dialect/IR/CIRDialect.h" +#include "clang/CIR/Dialect/IR/CIRTypes.h" +#include "clang/CIR/LowerToLLVM.h" +#include "clang/CIR/MissingFeatures.h" +#include "llvm/ADT/TypeSwitch.h" +#include "llvm/Support/TimeProfiler.h" + +using namespace cir; +using namespace llvm; + +namespace cir { + +struct ConvertCIRToMLIRPass + : public mlir::PassWrapper<ConvertCIRToMLIRPass, + mlir::OperationPass<mlir::ModuleOp>> { + void getDependentDialects(mlir::DialectRegistry ®istry) const override { + registry.insert<mlir::BuiltinDialect, mlir::memref::MemRefDialect>(); + } + void runOnOperation() final; + + StringRef getDescription() const override { + return "Convert the CIR dialect module to MLIR standard dialects"; + } + + StringRef getArgument() const override { return "cir-to-mlir"; } +}; + +class CIRGlobalOpLowering : public mlir::OpConversionPattern<cir::GlobalOp> { +public: + using OpConversionPattern<cir::GlobalOp>::OpConversionPattern; + mlir::LogicalResult + matchAndRewrite(cir::GlobalOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const override { + auto moduleOp = op->getParentOfType<mlir::ModuleOp>(); + if (!moduleOp) + return mlir::failure(); + + mlir::OpBuilder b(moduleOp.getContext()); + + const auto cirSymType = op.getSymType(); + assert(!cir::MissingFeatures::convertTypeForMemory()); + auto convertedType = getTypeConverter()->convertType(cirSymType); + if (!convertedType) + return mlir::failure(); + auto memrefType = dyn_cast<mlir::MemRefType>(convertedType); ---------------- AaronBallman wrote:
`auto *`, right? https://github.com/llvm/llvm-project/pull/127835 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits