[clang] [CIR] Initial implementation of CIR-to-LLVM IR lowering pass (PR #125260)

Andy Kaylor via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 31 15:58:44 PST 2025


================
@@ -22,16 +34,156 @@ using namespace llvm;
 namespace cir {
 namespace direct {
 
+struct ConvertCIRToLLVMPass
+    : public mlir::PassWrapper<ConvertCIRToLLVMPass,
+                               mlir::OperationPass<mlir::ModuleOp>> {
+  void getDependentDialects(mlir::DialectRegistry &registry) const override {
+    registry.insert<mlir::BuiltinDialect, mlir::DLTIDialect,
+                    mlir::LLVM::LLVMDialect, mlir::func::FuncDialect>();
+  }
+  void runOnOperation() final;
+
+  StringRef getDescription() const override {
+    return "Convert the prepared CIR dialect module to LLVM dialect";
+  }
+
+  StringRef getArgument() const override { return "cir-flat-to-llvm"; }
+};
+
+// This pass requires the CIR to be in a "flat" state. All blocks in each
----------------
andykaylor wrote:

Actually, this is a comment I added in response to Erich's question about what "flat" meant in the pass argument string. It feels like there should be some way of enforcing this constraint, assuming we might eventually be in a situation where non-clang clients are pulling CIR passes into their own pipeline. That could eventually happen, right?

https://github.com/llvm/llvm-project/pull/125260


More information about the cfe-commits mailing list