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