1 //===--- CodeGen/ModuleBuilder.h - Build LLVM from ASTs ---------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the ModuleBuilder interface.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CLANG_CODEGEN_MODULEBUILDER_H
15 #define LLVM_CLANG_CODEGEN_MODULEBUILDER_H
17 #include "clang/AST/ASTConsumer.h"
28 class CoverageSourceInfo;
30 class DiagnosticsEngine;
32 class HeaderSearchOptions;
34 class PreprocessorOptions;
41 /// The primary public interface to the Clang code generator.
43 /// This is not really an abstract interface.
44 class CodeGenerator : public ASTConsumer {
45 virtual void anchor();
48 /// Return an opaque reference to the CodeGenModule object, which can
49 /// be used in various secondary APIs. It is valid as long as the
50 /// CodeGenerator exists.
51 CodeGen::CodeGenModule &CGM();
53 /// Return the module that this code generator is building into.
55 /// This may return null after HandleTranslationUnit is called;
56 /// this signifies that there was an error generating code. A
57 /// diagnostic will have been generated in this case, and the module
60 /// It will also return null if the module is released.
61 llvm::Module *GetModule();
63 /// Release ownership of the module to the caller.
65 /// It is illegal to call methods other than GetModule on the
66 /// CodeGenerator after releasing its module.
67 llvm::Module *ReleaseModule();
69 /// Return debug info code generator.
70 CodeGen::CGDebugInfo *getCGDebugInfo();
72 /// Given a mangled name, return a declaration which mangles that way
73 /// which has been added to this code generator via a Handle method.
75 /// This may return null if there was no matching declaration.
76 const Decl *GetDeclForMangledName(llvm::StringRef MangledName);
78 /// Return the LLVM address of the given global entity.
80 /// \param isForDefinition If true, the caller intends to define the
81 /// entity; the object returned will be an llvm::GlobalValue of
82 /// some sort. If false, the caller just intends to use the entity;
83 /// the object returned may be any sort of constant value, and the
84 /// code generator will schedule the entity for emission if a
85 /// definition has been registered with this code generator.
86 llvm::Constant *GetAddrOfGlobal(GlobalDecl decl, bool isForDefinition);
88 /// Create a new \c llvm::Module after calling HandleTranslationUnit. This
89 /// enable codegen in interactive processing environments.
90 llvm::Module* StartModule(llvm::StringRef ModuleName, llvm::LLVMContext &C);
93 /// CreateLLVMCodeGen - Create a CodeGenerator instance.
94 /// It is the responsibility of the caller to call delete on
95 /// the allocated CodeGenerator instance.
96 CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
97 llvm::StringRef ModuleName,
98 const HeaderSearchOptions &HeaderSearchOpts,
99 const PreprocessorOptions &PreprocessorOpts,
100 const CodeGenOptions &CGO,
101 llvm::LLVMContext& C,
102 CoverageSourceInfo *CoverageInfo = nullptr);
104 } // end namespace clang