123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- CodeGen/ModuleBuilder.h - Build LLVM from ASTs ---------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file defines the ModuleBuilder interface.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_CODEGEN_MODULEBUILDER_H
- #define LLVM_CLANG_CODEGEN_MODULEBUILDER_H
- #include "clang/AST/ASTConsumer.h"
- #include "clang/Basic/LLVM.h"
- namespace llvm {
- class Constant;
- class LLVMContext;
- class Module;
- class StringRef;
- namespace vfs {
- class FileSystem;
- }
- }
- namespace clang {
- class CodeGenOptions;
- class CoverageSourceInfo;
- class Decl;
- class DiagnosticsEngine;
- class GlobalDecl;
- class HeaderSearchOptions;
- class LangOptions;
- class PreprocessorOptions;
- namespace CodeGen {
- class CodeGenModule;
- class CGDebugInfo;
- }
- /// The primary public interface to the Clang code generator.
- ///
- /// This is not really an abstract interface.
- class CodeGenerator : public ASTConsumer {
- virtual void anchor();
- public:
- /// Return an opaque reference to the CodeGenModule object, which can
- /// be used in various secondary APIs. It is valid as long as the
- /// CodeGenerator exists.
- CodeGen::CodeGenModule &CGM();
- /// Return the module that this code generator is building into.
- ///
- /// This may return null after HandleTranslationUnit is called;
- /// this signifies that there was an error generating code. A
- /// diagnostic will have been generated in this case, and the module
- /// will be deleted.
- ///
- /// It will also return null if the module is released.
- llvm::Module *GetModule();
- /// Release ownership of the module to the caller.
- ///
- /// It is illegal to call methods other than GetModule on the
- /// CodeGenerator after releasing its module.
- llvm::Module *ReleaseModule();
- /// Return debug info code generator.
- CodeGen::CGDebugInfo *getCGDebugInfo();
- /// Given a mangled name, return a declaration which mangles that way
- /// which has been added to this code generator via a Handle method.
- ///
- /// This may return null if there was no matching declaration.
- const Decl *GetDeclForMangledName(llvm::StringRef MangledName);
- /// Given a global declaration, return a mangled name for this declaration
- /// which has been added to this code generator via a Handle method.
- llvm::StringRef GetMangledName(GlobalDecl GD);
- /// Return the LLVM address of the given global entity.
- ///
- /// \param isForDefinition If true, the caller intends to define the
- /// entity; the object returned will be an llvm::GlobalValue of
- /// some sort. If false, the caller just intends to use the entity;
- /// the object returned may be any sort of constant value, and the
- /// code generator will schedule the entity for emission if a
- /// definition has been registered with this code generator.
- llvm::Constant *GetAddrOfGlobal(GlobalDecl decl, bool isForDefinition);
- /// Create a new \c llvm::Module after calling HandleTranslationUnit. This
- /// enable codegen in interactive processing environments.
- llvm::Module* StartModule(llvm::StringRef ModuleName, llvm::LLVMContext &C);
- };
- /// CreateLLVMCodeGen - Create a CodeGenerator instance.
- /// It is the responsibility of the caller to call delete on
- /// the allocated CodeGenerator instance.
- CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
- llvm::StringRef ModuleName,
- IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS,
- const HeaderSearchOptions &HeaderSearchOpts,
- const PreprocessorOptions &PreprocessorOpts,
- const CodeGenOptions &CGO,
- llvm::LLVMContext &C,
- CoverageSourceInfo *CoverageInfo = nullptr);
- } // end namespace clang
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|