clang
20.0.0git
include
clang
CodeGen
ModuleBuilder.h
Go to the documentation of this file.
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
#include "
clang/Basic/LLVM.h
"
18
#include "llvm/ADT/StringRef.h"
19
20
namespace
llvm
{
21
class
Constant;
22
class
LLVMContext;
23
class
Module
;
24
class
StringRef;
25
26
namespace
vfs {
27
class
FileSystem;
28
}
29
}
30
31
// Prefix of the name of the artificial inline frame.
32
inline
constexpr
llvm::StringRef
ClangTrapPrefix
=
"__clang_trap_msg"
;
33
34
namespace
clang
{
35
class
CodeGenOptions;
36
class
CoverageSourceInfo;
37
class
Decl;
38
class
DiagnosticsEngine;
39
class
GlobalDecl;
40
class
HeaderSearchOptions;
41
class
LangOptions;
42
class
PreprocessorOptions;
43
44
namespace
CodeGen {
45
class
CodeGenModule;
46
class
CGDebugInfo;
47
}
48
49
/// The primary public interface to the Clang code generator.
50
///
51
/// This is not really an abstract interface.
52
class
CodeGenerator
:
public
ASTConsumer
{
53
virtual
void
anchor();
54
55
public
:
56
/// Return an opaque reference to the CodeGenModule object, which can
57
/// be used in various secondary APIs. It is valid as long as the
58
/// CodeGenerator exists.
59
CodeGen::CodeGenModule
&
CGM
();
60
61
/// Return the module that this code generator is building into.
62
///
63
/// This may return null after HandleTranslationUnit is called;
64
/// this signifies that there was an error generating code. A
65
/// diagnostic will have been generated in this case, and the module
66
/// will be deleted.
67
///
68
/// It will also return null if the module is released.
69
llvm::Module *
GetModule
();
70
71
/// Release ownership of the module to the caller.
72
///
73
/// It is illegal to call methods other than GetModule on the
74
/// CodeGenerator after releasing its module.
75
llvm::Module *
ReleaseModule
();
76
77
/// Return debug info code generator.
78
CodeGen::CGDebugInfo
*
getCGDebugInfo
();
79
80
/// Given a mangled name, return a declaration which mangles that way
81
/// which has been added to this code generator via a Handle method.
82
///
83
/// This may return null if there was no matching declaration.
84
const
Decl
*
GetDeclForMangledName
(llvm::StringRef MangledName);
85
86
/// Given a global declaration, return a mangled name for this declaration
87
/// which has been added to this code generator via a Handle method.
88
llvm::StringRef
GetMangledName
(
GlobalDecl
GD);
89
90
/// Return the LLVM address of the given global entity.
91
///
92
/// \param isForDefinition If true, the caller intends to define the
93
/// entity; the object returned will be an llvm::GlobalValue of
94
/// some sort. If false, the caller just intends to use the entity;
95
/// the object returned may be any sort of constant value, and the
96
/// code generator will schedule the entity for emission if a
97
/// definition has been registered with this code generator.
98
llvm::Constant *
GetAddrOfGlobal
(
GlobalDecl
decl
,
bool
isForDefinition);
99
100
/// Create a new \c llvm::Module after calling HandleTranslationUnit. This
101
/// enable codegen in interactive processing environments.
102
llvm::Module*
StartModule
(llvm::StringRef ModuleName, llvm::LLVMContext &
C
);
103
};
104
105
/// CreateLLVMCodeGen - Create a CodeGenerator instance.
106
/// It is the responsibility of the caller to call delete on
107
/// the allocated CodeGenerator instance.
108
CodeGenerator
*
CreateLLVMCodeGen
(
DiagnosticsEngine
&Diags,
109
llvm::StringRef ModuleName,
110
IntrusiveRefCntPtr<llvm::vfs::FileSystem>
FS,
111
const
HeaderSearchOptions
&HeaderSearchOpts,
112
const
PreprocessorOptions
&PreprocessorOpts,
113
const
CodeGenOptions
&CGO,
114
llvm::LLVMContext &