[clang] [CIR] Add framework for CIR to LLVM IR lowering (PR #124650)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 28 11:10:30 PST 2025
================
@@ -44,7 +44,7 @@ class CIRGenerator : public clang::ASTConsumer {
const clang::CodeGenOptions &codeGenOpts;
protected:
- std::unique_ptr<mlir::MLIRContext> mlirContext;
+ std::shared_ptr<mlir::MLIRContext> mlirContext;
----------------
andykaylor wrote:
Sorry, I thought shared pointer was what you were suggesting.
Here's what I'm seeing. CIRGenerator::Initialize creates the mlirContext and uses it. That function also passes it, as a raw pointer, to CIRGenModule, which keeps a copy of the pointer throughout its lifetime. CIRGenerator doesn't use it again, and was previously handing it off in CIRGenConsumer::handleTranslationUnit() via takeContext(). CIRGenConsumer::handleTranslationUnit(), in turn, passes it to a few calls as a raw pointer (in the incubator, not yet here) before handing it off, as a unique pointer, to lowerFromCIRToLLVMIR() which hands it, as a unique pointer, to lowerFromCIRToMLIRToLLVMIR() in the incubator implementation. There it is used as a raw pointer.
All of the uses after the call to takeContext() have lifetimes that should be limited to the scope of CIRGenConsumer::handleTranslationUnit(), so I think we should be able to just use it as a raw pointer here instead of taking it and leaving CIRGenerator with a null pointer, but CIRGenerator shouldn't need it again either.
@bcardosolopes Have I misunderstood anything here? What's your recommendation?
https://github.com/llvm/llvm-project/pull/124650
More information about the cfe-commits
mailing list