xref: /llvm-project/clang/lib/CIR/CodeGen/CIRGenerator.cpp (revision 7eb73b95cb336cde14d5c755a09cd880bd3d5df9)
11bb52e94SNathan Lanza //===--- CIRGenerator.cpp - Emit CIR from ASTs ----------------------------===//
21bb52e94SNathan Lanza //
31bb52e94SNathan Lanza // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
41bb52e94SNathan Lanza // See https://llvm.org/LICENSE.txt for license information.
51bb52e94SNathan Lanza // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
61bb52e94SNathan Lanza //
71bb52e94SNathan Lanza //===----------------------------------------------------------------------===//
81bb52e94SNathan Lanza //
91bb52e94SNathan Lanza // This builds an AST and converts it to CIR.
101bb52e94SNathan Lanza //
111bb52e94SNathan Lanza //===----------------------------------------------------------------------===//
121bb52e94SNathan Lanza 
131bb52e94SNathan Lanza #include "CIRGenModule.h"
141bb52e94SNathan Lanza 
15c695a325SDavid Olsen #include "mlir/IR/MLIRContext.h"
16c695a325SDavid Olsen 
171bb52e94SNathan Lanza #include "clang/AST/DeclGroup.h"
181bb52e94SNathan Lanza #include "clang/CIR/CIRGenerator.h"
19c695a325SDavid Olsen #include "clang/CIR/Dialect/IR/CIRDialect.h"
201bb52e94SNathan Lanza 
211bb52e94SNathan Lanza using namespace cir;
221bb52e94SNathan Lanza using namespace clang;
231bb52e94SNathan Lanza 
241bb52e94SNathan Lanza void CIRGenerator::anchor() {}
251bb52e94SNathan Lanza 
261bb52e94SNathan Lanza CIRGenerator::CIRGenerator(clang::DiagnosticsEngine &diags,
271bb52e94SNathan Lanza                            llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> vfs,
281bb52e94SNathan Lanza                            const CodeGenOptions &cgo)
291bb52e94SNathan Lanza     : diags(diags), fs(std::move(vfs)), codeGenOpts{cgo} {}
301bb52e94SNathan Lanza CIRGenerator::~CIRGenerator() = default;
311bb52e94SNathan Lanza 
32*7eb73b95SDavid Olsen void CIRGenerator::Initialize(ASTContext &astContext) {
331bb52e94SNathan Lanza   using namespace llvm;
341bb52e94SNathan Lanza 
35*7eb73b95SDavid Olsen   this->astContext = &astContext;
361bb52e94SNathan Lanza 
37*7eb73b95SDavid Olsen   mlirContext = std::make_unique<mlir::MLIRContext>();
38*7eb73b95SDavid Olsen   mlirContext->loadDialect<cir::CIRDialect>();
39*7eb73b95SDavid Olsen   cgm = std::make_unique<clang::CIRGen::CIRGenModule>(
40*7eb73b95SDavid Olsen       *mlirContext.get(), astContext, codeGenOpts, diags);
411bb52e94SNathan Lanza }
421bb52e94SNathan Lanza 
43c695a325SDavid Olsen mlir::ModuleOp CIRGenerator::getModule() const { return cgm->getModule(); }
44c695a325SDavid Olsen 
451bb52e94SNathan Lanza bool CIRGenerator::HandleTopLevelDecl(DeclGroupRef group) {
461bb52e94SNathan Lanza 
471bb52e94SNathan Lanza   for (Decl *decl : group)
481791b25fSShoaib Meenai     cgm->emitTopLevelDecl(decl);
491bb52e94SNathan Lanza 
501bb52e94SNathan Lanza   return true;
511bb52e94SNathan Lanza }
52