[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 11:08:48 PST 2025
================
@@ -22,13 +34,127 @@ using namespace llvm;
namespace cir {
namespace direct {
+struct ConvertCIRToLLVMPass
+ : public mlir::PassWrapper<ConvertCIRToLLVMPass,
+ mlir::OperationPass<mlir::ModuleOp>> {
+ void getDependentDialects(mlir::DialectRegistry ®istry) 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"; }
----------------
andykaylor wrote:
When control flow and scopes implemented in CIR, there will be nested regions describing that structure. When that happens another pass will be run before this one that flattens the CIR by inlining the nested regions to create a situation where all blocks in a function belong to the parent region.
Here's a simple example showing what that looks like: https://godbolt.org/z/Ta5dTMfPn
https://github.com/llvm/llvm-project/pull/125260
More information about the cfe-commits
mailing list