[clang] [CIR] Initial implementation of lowering CIR to MLIR (PR #127835)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 21 05:50:58 PST 2025
================
@@ -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:
Ah, good to know, thank you!
https://github.com/llvm/llvm-project/pull/127835
More information about the cfe-commits
mailing list