Clang Project

clang_source_code/include/clang/CodeGen/ModuleBuilder.h
1//===--- CodeGen/ModuleBuilder.h - Build LLVM from ASTs ---------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//  This file defines the ModuleBuilder interface.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CLANG_CODEGEN_MODULEBUILDER_H
14#define LLVM_CLANG_CODEGEN_MODULEBUILDER_H
15
16#include "clang/AST/ASTConsumer.h"
17
18namespace llvm {
19  class Constant;
20  class LLVMContext;
21  class Module;
22  class StringRef;
23}
24
25namespace clang {
26  class CodeGenOptions;
27  class CoverageSourceInfo;
28  class Decl;
29  class DiagnosticsEngine;
30  class GlobalDecl;
31  class HeaderSearchOptions;
32  class LangOptions;
33  class PreprocessorOptions;
34
35namespace CodeGen {
36  class CodeGenModule;
37  class CGDebugInfo;
38}
39
40/// The primary public interface to the Clang code generator.
41///
42/// This is not really an abstract interface.
43class CodeGenerator : public ASTConsumer {
44  virtual void anchor();
45
46public:
47  /// Return an opaque reference to the CodeGenModule object, which can
48  /// be used in various secondary APIs.  It is valid as long as the
49  /// CodeGenerator exists.
50  CodeGen::CodeGenModule &CGM();
51
52  /// Return the module that this code generator is building into.
53  ///
54  /// This may return null after HandleTranslationUnit is called;
55  /// this signifies that there was an error generating code.  A
56  /// diagnostic will have been generated in this case, and the module
57  /// will be deleted.
58  ///
59  /// It will also return null if the module is released.
60  llvm::Module *GetModule();
61
62  /// Release ownership of the module to the caller.
63  ///
64  /// It is illegal to call methods other than GetModule on the
65  /// CodeGenerator after releasing its module.
66  llvm::Module *ReleaseModule();
67
68  /// Return debug info code generator.
69  CodeGen::CGDebugInfo *getCGDebugInfo();
70
71  /// Given a mangled name, return a declaration which mangles that way
72  /// which has been added to this code generator via a Handle method.
73  ///
74  /// This may return null if there was no matching declaration.
75  const Decl *GetDeclForMangledName(llvm::StringRef MangledName);
76
77  /// Return the LLVM address of the given global entity.
78  ///
79  /// \param isForDefinition If true, the caller intends to define the
80  ///   entity; the object returned will be an llvm::GlobalValue of
81  ///   some sort.  If false, the caller just intends to use the entity;
82  ///   the object returned may be any sort of constant value, and the
83  ///   code generator will schedule the entity for emission if a
84  ///   definition has been registered with this code generator.
85  llvm::Constant *GetAddrOfGlobal(GlobalDecl declbool isForDefinition);
86
87  /// Create a new \c llvm::Module after calling HandleTranslationUnit. This
88  /// enable codegen in interactive processing environments.
89  llvm::ModuleStartModule(llvm::StringRef ModuleNamellvm::LLVMContext &C);
90};
91
92/// CreateLLVMCodeGen - Create a CodeGenerator instance.
93/// It is the responsibility of the caller to call delete on
94/// the allocated CodeGenerator instance.
95CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
96                                 llvm::StringRef ModuleName,
97                                 const HeaderSearchOptions &HeaderSearchOpts,
98                                 const PreprocessorOptions &PreprocessorOpts,
99                                 const CodeGenOptions &CGO,
100                                 llvm::LLVMContextC,
101                                 CoverageSourceInfo *CoverageInfo = nullptr);
102
103// end namespace clang
104
105#endif
106
clang::CodeGenerator::anchor
clang::CodeGenerator::CGM
clang::CodeGenerator::GetModule
clang::CodeGenerator::ReleaseModule
clang::CodeGenerator::getCGDebugInfo
clang::CodeGenerator::GetDeclForMangledName
clang::CodeGenerator::GetAddrOfGlobal
clang::CodeGenerator::StartModule