]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/clang/include/clang/CodeGen/ModuleBuilder.h
MFC r355940:
[FreeBSD/FreeBSD.git] / contrib / llvm-project / clang / 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
18 namespace llvm {
19   class Constant;
20   class LLVMContext;
21   class Module;
22   class StringRef;
23 }
24
25 namespace 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
35 namespace 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.
43 class CodeGenerator : public ASTConsumer {
44   virtual void anchor();
45
46 public:
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 decl, bool isForDefinition);
86
87   /// Create a new \c llvm::Module after calling HandleTranslationUnit. This
88   /// enable codegen in interactive processing environments.
89   llvm::Module* StartModule(llvm::StringRef ModuleName, llvm::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.
95 CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
96                                  llvm::StringRef ModuleName,
97                                  const HeaderSearchOptions &HeaderSearchOpts,
98                                  const PreprocessorOptions &PreprocessorOpts,
99                                  const CodeGenOptions &CGO,
100                                  llvm::LLVMContext& C,
101                                  CoverageSourceInfo *CoverageInfo = nullptr);
102
103 } // end namespace clang
104
105 #endif