• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  //===--- CodeGenModule.h - Per-Module state for LLVM CodeGen ----*- C++ -*-===//
2  //
3  //                     The LLVM Compiler Infrastructure
4  //
5  // This file is distributed under the University of Illinois Open Source
6  // License. See LICENSE.TXT for details.
7  //
8  //===----------------------------------------------------------------------===//
9  //
10  // This is the internal per-translation-unit state used for llvm translation.
11  //
12  //===----------------------------------------------------------------------===//
13  
14  #ifndef LLVM_CLANG_LIB_CODEGEN_CODEGENMODULE_H
15  #define LLVM_CLANG_LIB_CODEGEN_CODEGENMODULE_H
16  
17  #include "CGVTables.h"
18  #include "CodeGenTypeCache.h"
19  #include "CodeGenTypes.h"
20  #include "SanitizerMetadata.h"
21  #include "clang/AST/Attr.h"
22  #include "clang/AST/DeclCXX.h"
23  #include "clang/AST/DeclObjC.h"
24  #include "clang/AST/DeclOpenMP.h"
25  #include "clang/AST/GlobalDecl.h"
26  #include "clang/AST/Mangle.h"
27  #include "clang/Basic/ABI.h"
28  #include "clang/Basic/LangOptions.h"
29  #include "clang/Basic/Module.h"
30  #include "clang/Basic/SanitizerBlacklist.h"
31  #include "llvm/ADT/DenseMap.h"
32  #include "llvm/ADT/SetVector.h"
33  #include "llvm/ADT/SmallPtrSet.h"
34  #include "llvm/ADT/StringMap.h"
35  #include "llvm/IR/Module.h"
36  #include "llvm/IR/ValueHandle.h"
37  #include "llvm/Transforms/Utils/SanitizerStats.h"
38  
39  namespace llvm {
40  class Module;
41  class Constant;
42  class ConstantInt;
43  class Function;
44  class GlobalValue;
45  class DataLayout;
46  class FunctionType;
47  class LLVMContext;
48  class IndexedInstrProfReader;
49  }
50  
51  namespace clang {
52  class ASTContext;
53  class AtomicType;
54  class FunctionDecl;
55  class IdentifierInfo;
56  class ObjCMethodDecl;
57  class ObjCImplementationDecl;
58  class ObjCCategoryImplDecl;
59  class ObjCProtocolDecl;
60  class ObjCEncodeExpr;
61  class BlockExpr;
62  class CharUnits;
63  class Decl;
64  class Expr;
65  class Stmt;
66  class InitListExpr;
67  class StringLiteral;
68  class NamedDecl;
69  class ValueDecl;
70  class VarDecl;
71  class LangOptions;
72  class CodeGenOptions;
73  class HeaderSearchOptions;
74  class PreprocessorOptions;
75  class DiagnosticsEngine;
76  class AnnotateAttr;
77  class CXXDestructorDecl;
78  class Module;
79  class CoverageSourceInfo;
80  
81  namespace CodeGen {
82  
83  class CallArgList;
84  class CodeGenFunction;
85  class CodeGenTBAA;
86  class CGCXXABI;
87  class CGDebugInfo;
88  class CGObjCRuntime;
89  class CGOpenCLRuntime;
90  class CGOpenMPRuntime;
91  class CGCUDARuntime;
92  class BlockFieldFlags;
93  class FunctionArgList;
94  class CoverageMappingModuleGen;
95  class TargetCodeGenInfo;
96  
97  struct OrderGlobalInits {
98    unsigned int priority;
99    unsigned int lex_order;
OrderGlobalInitsOrderGlobalInits100    OrderGlobalInits(unsigned int p, unsigned int l)
101        : priority(p), lex_order(l) {}
102  
103    bool operator==(const OrderGlobalInits &RHS) const {
104      return priority == RHS.priority && lex_order == RHS.lex_order;
105    }
106  
107    bool operator<(const OrderGlobalInits &RHS) const {
108      return std::tie(priority, lex_order) <
109             std::tie(RHS.priority, RHS.lex_order);
110    }
111  };
112  
113  struct ObjCEntrypoints {
ObjCEntrypointsObjCEntrypoints114    ObjCEntrypoints() { memset(this, 0, sizeof(*this)); }
115  
116      /// void objc_autoreleasePoolPop(void*);
117    llvm::Constant *objc_autoreleasePoolPop;
118  
119    /// void *objc_autoreleasePoolPush(void);
120    llvm::Constant *objc_autoreleasePoolPush;
121  
122    /// id objc_autorelease(id);
123    llvm::Constant *objc_autorelease;
124  
125    /// id objc_autoreleaseReturnValue(id);
126    llvm::Constant *objc_autoreleaseReturnValue;
127  
128    /// void objc_copyWeak(id *dest, id *src);
129    llvm::Constant *objc_copyWeak;
130  
131    /// void objc_destroyWeak(id*);
132    llvm::Constant *objc_destroyWeak;
133  
134    /// id objc_initWeak(id*, id);
135    llvm::Constant *objc_initWeak;
136  
137    /// id objc_loadWeak(id*);
138    llvm::Constant *objc_loadWeak;
139  
140    /// id objc_loadWeakRetained(id*);
141    llvm::Constant *objc_loadWeakRetained;
142  
143    /// void objc_moveWeak(id *dest, id *src);
144    llvm::Constant *objc_moveWeak;
145  
146    /// id objc_retain(id);
147    llvm::Constant *objc_retain;
148  
149    /// id objc_retainAutorelease(id);
150    llvm::Constant *objc_retainAutorelease;
151  
152    /// id objc_retainAutoreleaseReturnValue(id);
153    llvm::Constant *objc_retainAutoreleaseReturnValue;
154  
155    /// id objc_retainAutoreleasedReturnValue(id);
156    llvm::Constant *objc_retainAutoreleasedReturnValue;
157  
158    /// id objc_retainBlock(id);
159    llvm::Constant *objc_retainBlock;
160  
161    /// void objc_release(id);
162    llvm::Constant *objc_release;
163  
164    /// id objc_storeStrong(id*, id);
165    llvm::Constant *objc_storeStrong;
166  
167    /// id objc_storeWeak(id*, id);
168    llvm::Constant *objc_storeWeak;
169  
170    /// id objc_unsafeClaimAutoreleasedReturnValue(id);
171    llvm::Constant *objc_unsafeClaimAutoreleasedReturnValue;
172  
173    /// A void(void) inline asm to use to mark that the return value of
174    /// a call will be immediately retain.
175    llvm::InlineAsm *retainAutoreleasedReturnValueMarker;
176  
177    /// void clang.arc.use(...);
178    llvm::Constant *clang_arc_use;
179  };
180  
181  /// This class records statistics on instrumentation based profiling.
182  class InstrProfStats {
183    uint32_t VisitedInMainFile;
184    uint32_t MissingInMainFile;
185    uint32_t Visited;
186    uint32_t Missing;
187    uint32_t Mismatched;
188  
189  public:
InstrProfStats()190    InstrProfStats()
191        : VisitedInMainFile(0), MissingInMainFile(0), Visited(0), Missing(0),
192          Mismatched(0) {}
193    /// Record that we've visited a function and whether or not that function was
194    /// in the main source file.
addVisited(bool MainFile)195    void addVisited(bool MainFile) {
196      if (MainFile)
197        ++VisitedInMainFile;
198      ++Visited;
199    }
200    /// Record that a function we've visited has no profile data.
addMissing(bool MainFile)201    void addMissing(bool MainFile) {
202      if (MainFile)
203        ++MissingInMainFile;
204      ++Missing;
205    }
206    /// Record that a function we've visited has mismatched profile data.
addMismatched(bool MainFile)207    void addMismatched(bool MainFile) { ++Mismatched; }
208    /// Whether or not the stats we've gathered indicate any potential problems.
hasDiagnostics()209    bool hasDiagnostics() { return Missing || Mismatched; }
210    /// Report potential problems we've found to \c Diags.
211    void reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile);
212  };
213  
214  /// A pair of helper functions for a __block variable.
215  class BlockByrefHelpers : public llvm::FoldingSetNode {
216    // MSVC requires this type to be complete in order to process this
217    // header.
218  public:
219    llvm::Constant *CopyHelper;
220    llvm::Constant *DisposeHelper;
221  
222    /// The alignment of the field.  This is important because
223    /// different offsets to the field within the byref struct need to
224    /// have different helper functions.
225    CharUnits Alignment;
226  
BlockByrefHelpers(CharUnits alignment)227    BlockByrefHelpers(CharUnits alignment) : Alignment(alignment) {}
228    BlockByrefHelpers(const BlockByrefHelpers &) = default;
229    virtual ~BlockByrefHelpers();
230  
Profile(llvm::FoldingSetNodeID & id)231    void Profile(llvm::FoldingSetNodeID &id) const {
232      id.AddInteger(Alignment.getQuantity());
233      profileImpl(id);
234    }
235    virtual void profileImpl(llvm::FoldingSetNodeID &id) const = 0;
236  
needsCopy()237    virtual bool needsCopy() const { return true; }
238    virtual void emitCopy(CodeGenFunction &CGF, Address dest, Address src) = 0;
239  
needsDispose()240    virtual bool needsDispose() const { return true; }
241    virtual void emitDispose(CodeGenFunction &CGF, Address field) = 0;
242  };
243  
244  /// This class organizes the cross-function state that is used while generating
245  /// LLVM code.
246  class CodeGenModule : public CodeGenTypeCache {
247    CodeGenModule(const CodeGenModule &) = delete;
248    void operator=(const CodeGenModule &) = delete;
249  
250  public:
251    struct Structor {
StructorStructor252      Structor() : Priority(0), Initializer(nullptr), AssociatedData(nullptr) {}
StructorStructor253      Structor(int Priority, llvm::Constant *Initializer,
254               llvm::Constant *AssociatedData)
255          : Priority(Priority), Initializer(Initializer),
256            AssociatedData(AssociatedData) {}
257      int Priority;
258      llvm::Constant *Initializer;
259      llvm::Constant *AssociatedData;
260    };
261  
262    typedef std::vector<Structor> CtorList;
263  
264  private:
265    ASTContext &Context;
266    const LangOptions &LangOpts;
267    const HeaderSearchOptions &HeaderSearchOpts; // Only used for debug info.
268    const PreprocessorOptions &PreprocessorOpts; // Only used for debug info.
269    const CodeGenOptions &CodeGenOpts;
270    llvm::Module &TheModule;
271    DiagnosticsEngine &Diags;
272    const TargetInfo &Target;
273    std::unique_ptr<CGCXXABI> ABI;
274    llvm::LLVMContext &VMContext;
275  
276    std::unique_ptr<CodeGenTBAA> TBAA;
277  
278    mutable std::unique_ptr<TargetCodeGenInfo> TheTargetCodeGenInfo;
279  
280    // This should not be moved earlier, since its initialization depends on some
281    // of the previous reference members being already initialized and also checks
282    // if TheTargetCodeGenInfo is NULL
283    CodeGenTypes Types;
284  
285    /// Holds information about C++ vtables.
286    CodeGenVTables VTables;
287  
288    std::unique_ptr<CGObjCRuntime> ObjCRuntime;
289    std::unique_ptr<CGOpenCLRuntime> OpenCLRuntime;
290    std::unique_ptr<CGOpenMPRuntime> OpenMPRuntime;
291    std::unique_ptr<CGCUDARuntime> CUDARuntime;
292    std::unique_ptr<CGDebugInfo> DebugInfo;
293    std::unique_ptr<ObjCEntrypoints> ObjCData;
294    llvm::MDNode *NoObjCARCExceptionsMetadata = nullptr;
295    std::unique_ptr<llvm::IndexedInstrProfReader> PGOReader;
296    InstrProfStats PGOStats;
297    std::unique_ptr<llvm::SanitizerStatReport> SanStats;
298  
299    // A set of references that have only been seen via a weakref so far. This is
300    // used to remove the weak of the reference if we ever see a direct reference
301    // or a definition.
302    llvm::SmallPtrSet<llvm::GlobalValue*, 10> WeakRefReferences;
303  
304    /// This contains all the decls which have definitions but/ which are deferred
305    /// for emission and therefore should only be output if they are actually
306    /// used. If a decl is in this, then it is known to have not been referenced
307    /// yet.
308    std::map<StringRef, GlobalDecl> DeferredDecls;
309  
310    /// This is a list of deferred decls which we have seen that *are* actually
311    /// referenced. These get code generated when the module is done.
312    struct DeferredGlobal {
DeferredGlobalDeferredGlobal313      DeferredGlobal(llvm::GlobalValue *GV, GlobalDecl GD) : GV(GV), GD(GD) {}
314      llvm::TrackingVH<llvm::GlobalValue> GV;
315      GlobalDecl GD;
316    };
317    std::vector<DeferredGlobal> DeferredDeclsToEmit;
addDeferredDeclToEmit(llvm::GlobalValue * GV,GlobalDecl GD)318    void addDeferredDeclToEmit(llvm::GlobalValue *GV, GlobalDecl GD) {
319      DeferredDeclsToEmit.emplace_back(GV, GD);
320    }
321  
322    /// List of alias we have emitted. Used to make sure that what they point to
323    /// is defined once we get to the end of the of the translation unit.
324    std::vector<GlobalDecl> Aliases;
325  
326    typedef llvm::StringMap<llvm::TrackingVH<llvm::Constant> > ReplacementsTy;
327    ReplacementsTy Replacements;
328  
329    /// List of global values to be replaced with something else. Used when we
330    /// want to replace a GlobalValue but can't identify it by its mangled name
331    /// anymore (because the name is already taken).
332    llvm::SmallVector<std::pair<llvm::GlobalValue *, llvm::Constant *>, 8>
333      GlobalValReplacements;
334  
335    /// Set of global decls for which we already diagnosed mangled name conflict.
336    /// Required to not issue a warning (on a mangling conflict) multiple times
337    /// for the same decl.
338    llvm::DenseSet<GlobalDecl> DiagnosedConflictingDefinitions;
339  
340    /// A queue of (optional) vtables to consider emitting.
341    std::vector<const CXXRecordDecl*> DeferredVTables;
342  
343    /// List of global values which are required to be present in the object file;
344    /// bitcast to i8*. This is used for forcing visibility of symbols which may
345    /// otherwise be optimized out.
346    std::vector<llvm::WeakVH> LLVMUsed;
347    std::vector<llvm::WeakVH> LLVMCompilerUsed;
348  
349    /// Store the list of global constructors and their respective priorities to
350    /// be emitted when the translation unit is complete.
351    CtorList GlobalCtors;
352  
353    /// Store the list of global destructors and their respective priorities to be
354    /// emitted when the translation unit is complete.
355    CtorList GlobalDtors;
356  
357    /// An ordered map of canonical GlobalDecls to their mangled names.
358    llvm::MapVector<GlobalDecl, StringRef> MangledDeclNames;
359    llvm::StringMap<GlobalDecl, llvm::BumpPtrAllocator> Manglings;
360  
361    /// Global annotations.
362    std::vector<llvm::Constant*> Annotations;
363  
364    /// Map used to get unique annotation strings.
365    llvm::StringMap<llvm::Constant*> AnnotationStrings;
366  
367    llvm::StringMap<llvm::GlobalVariable *> CFConstantStringMap;
368  
369    llvm::DenseMap<llvm::Constant *, llvm::GlobalVariable *> ConstantStringMap;
370    llvm::DenseMap<const Decl*, llvm::Constant *> StaticLocalDeclMap;
371    llvm::DenseMap<const Decl*, llvm::GlobalVariable*> StaticLocalDeclGuardMap;
372    llvm::DenseMap<const Expr*, llvm::Constant *> MaterializedGlobalTemporaryMap;
373  
374    llvm::DenseMap<QualType, llvm::Constant *> AtomicSetterHelperFnMap;
375    llvm::DenseMap<QualType, llvm::Constant *> AtomicGetterHelperFnMap;
376  
377    /// Map used to get unique type descriptor constants for sanitizers.
378    llvm::DenseMap<QualType, llvm::Constant *> TypeDescriptorMap;
379  
380    /// Map used to track internal linkage functions declared within
381    /// extern "C" regions.
382    typedef llvm::MapVector<IdentifierInfo *,
383                            llvm::GlobalValue *> StaticExternCMap;
384    StaticExternCMap StaticExternCValues;
385  
386    /// \brief thread_local variables defined or used in this TU.
387    std::vector<const VarDecl *> CXXThreadLocals;
388  
389    /// \brief thread_local variables with initializers that need to run
390    /// before any thread_local variable in this TU is odr-used.
391    std::vector<llvm::Function *> CXXThreadLocalInits;
392    std::vector<const VarDecl *> CXXThreadLocalInitVars;
393  
394    /// Global variables with initializers that need to run before main.
395    std::vector<llvm::Function *> CXXGlobalInits;
396  
397    /// When a C++ decl with an initializer is deferred, null is
398    /// appended to CXXGlobalInits, and the index of that null is placed
399    /// here so that the initializer will be performed in the correct
400    /// order. Once the decl is emitted, the index is replaced with ~0U to ensure
401    /// that we don't re-emit the initializer.
402    llvm::DenseMap<const Decl*, unsigned> DelayedCXXInitPosition;
403  
404    typedef std::pair<OrderGlobalInits, llvm::Function*> GlobalInitData;
405  
406    struct GlobalInitPriorityCmp {
operatorGlobalInitPriorityCmp407      bool operator()(const GlobalInitData &LHS,
408                      const GlobalInitData &RHS) const {
409        return LHS.first.priority < RHS.first.priority;
410      }
411    };
412  
413    /// Global variables with initializers whose order of initialization is set by
414    /// init_priority attribute.
415    SmallVector<GlobalInitData, 8> PrioritizedCXXGlobalInits;
416  
417    /// Global destructor functions and arguments that need to run on termination.
418    std::vector<std::pair<llvm::WeakVH,llvm::Constant*> > CXXGlobalDtors;
419  
420    /// \brief The complete set of modules that has been imported.
421    llvm::SetVector<clang::Module *> ImportedModules;
422  
423    /// \brief A vector of metadata strings.
424    SmallVector<llvm::Metadata *, 16> LinkerOptionsMetadata;
425  
426    /// @name Cache for Objective-C runtime types
427    /// @{
428  
429    /// Cached reference to the class for constant strings. This value has type
430    /// int * but is actually an Obj-C class pointer.
431    llvm::WeakVH CFConstantStringClassRef;
432  
433    /// Cached reference to the class for constant strings. This value has type
434    /// int * but is actually an Obj-C class pointer.
435    llvm::WeakVH ConstantStringClassRef;
436  
437    /// \brief The LLVM type corresponding to NSConstantString.
438    llvm::StructType *NSConstantStringType = nullptr;
439  
440    /// \brief The type used to describe the state of a fast enumeration in
441    /// Objective-C's for..in loop.
442    QualType ObjCFastEnumerationStateType;
443  
444    /// @}
445  
446    /// Lazily create the Objective-C runtime
447    void createObjCRuntime();
448  
449    void createOpenCLRuntime();
450    void createOpenMPRuntime();
451    void createCUDARuntime();
452  
453    bool isTriviallyRecursive(const FunctionDecl *F);
454    bool shouldEmitFunction(GlobalDecl GD);
455  
456    /// @name Cache for Blocks Runtime Globals
457    /// @{
458  
459    llvm::Constant *NSConcreteGlobalBlock = nullptr;
460    llvm::Constant *NSConcreteStackBlock = nullptr;
461  
462    llvm::Constant *BlockObjectAssign = nullptr;
463    llvm::Constant *BlockObjectDispose = nullptr;
464  
465    llvm::Type *BlockDescriptorType = nullptr;
466    llvm::Type *GenericBlockLiteralType = nullptr;
467  
468    struct {
469      int GlobalUniqueCount;
470    } Block;
471  
472    /// void @llvm.lifetime.start(i64 %size, i8* nocapture <ptr>)
473    llvm::Constant *LifetimeStartFn = nullptr;
474  
475    /// void @llvm.lifetime.end(i64 %size, i8* nocapture <ptr>)
476    llvm::Constant *LifetimeEndFn = nullptr;
477  
478    GlobalDecl initializedGlobalDecl;
479  
480    std::unique_ptr<SanitizerMetadata> SanitizerMD;
481  
482    /// @}
483  
484    llvm::DenseMap<const Decl *, bool> DeferredEmptyCoverageMappingDecls;
485  
486    std::unique_ptr<CoverageMappingModuleGen> CoverageMapping;
487  
488    /// Mapping from canonical types to their metadata identifiers. We need to
489    /// maintain this mapping because identifiers may be formed from distinct
490    /// MDNodes.
491    llvm::DenseMap<QualType, llvm::Metadata *> MetadataIdMap;
492  
493  public:
494    CodeGenModule(ASTContext &C, const HeaderSearchOptions &headersearchopts,
495                  const PreprocessorOptions &ppopts,
496                  const CodeGenOptions &CodeGenOpts, llvm::Module &M,
497                  DiagnosticsEngine &Diags,
498                  CoverageSourceInfo *CoverageInfo = nullptr);
499  
500    ~CodeGenModule();
501  
502    void clear();
503  
504    /// Finalize LLVM code generation.
505    void Release();
506  
507    /// Return a reference to the configured Objective-C runtime.
getObjCRuntime()508    CGObjCRuntime &getObjCRuntime() {
509      if (!ObjCRuntime) createObjCRuntime();
510      return *ObjCRuntime;
511    }
512  
513    /// Return true iff an Objective-C runtime has been configured.
hasObjCRuntime()514    bool hasObjCRuntime() { return !!ObjCRuntime; }
515  
516    /// Return a reference to the configured OpenCL runtime.
getOpenCLRuntime()517    CGOpenCLRuntime &getOpenCLRuntime() {
518      assert(OpenCLRuntime != nullptr);
519      return *OpenCLRuntime;
520    }
521  
522    /// Return a reference to the configured OpenMP runtime.
getOpenMPRuntime()523    CGOpenMPRuntime &getOpenMPRuntime() {
524      assert(OpenMPRuntime != nullptr);
525      return *OpenMPRuntime;
526    }
527  
528    /// Return a reference to the configured CUDA runtime.
getCUDARuntime()529    CGCUDARuntime &getCUDARuntime() {
530      assert(CUDARuntime != nullptr);
531      return *CUDARuntime;
532    }
533  
getObjCEntrypoints()534    ObjCEntrypoints &getObjCEntrypoints() const {
535      assert(ObjCData != nullptr);
536      return *ObjCData;
537    }
538  
getPGOStats()539    InstrProfStats &getPGOStats() { return PGOStats; }
getPGOReader()540    llvm::IndexedInstrProfReader *getPGOReader() const { return PGOReader.get(); }
541  
getCoverageMapping()542    CoverageMappingModuleGen *getCoverageMapping() const {
543      return CoverageMapping.get();
544    }
545  
getStaticLocalDeclAddress(const VarDecl * D)546    llvm::Constant *getStaticLocalDeclAddress(const VarDecl *D) {
547      return StaticLocalDeclMap[D];
548    }
setStaticLocalDeclAddress(const VarDecl * D,llvm::Constant * C)549    void setStaticLocalDeclAddress(const VarDecl *D,
550                                   llvm::Constant *C) {
551      StaticLocalDeclMap[D] = C;
552    }
553  
554    llvm::Constant *
555    getOrCreateStaticVarDecl(const VarDecl &D,
556                             llvm::GlobalValue::LinkageTypes Linkage);
557  
getStaticLocalDeclGuardAddress(const VarDecl * D)558    llvm::GlobalVariable *getStaticLocalDeclGuardAddress(const VarDecl *D) {
559      return StaticLocalDeclGuardMap[D];
560    }
setStaticLocalDeclGuardAddress(const VarDecl * D,llvm::GlobalVariable * C)561    void setStaticLocalDeclGuardAddress(const VarDecl *D,
562                                        llvm::GlobalVariable *C) {
563      StaticLocalDeclGuardMap[D] = C;
564    }
565  
566    bool lookupRepresentativeDecl(StringRef MangledName,
567                                  GlobalDecl &Result) const;
568  
getAtomicSetterHelperFnMap(QualType Ty)569    llvm::Constant *getAtomicSetterHelperFnMap(QualType Ty) {
570      return AtomicSetterHelperFnMap[Ty];
571    }
setAtomicSetterHelperFnMap(QualType Ty,llvm::Constant * Fn)572    void setAtomicSetterHelperFnMap(QualType Ty,
573                              llvm::Constant *Fn) {
574      AtomicSetterHelperFnMap[Ty] = Fn;
575    }
576  
getAtomicGetterHelperFnMap(QualType Ty)577    llvm::Constant *getAtomicGetterHelperFnMap(QualType Ty) {
578      return AtomicGetterHelperFnMap[Ty];
579    }
setAtomicGetterHelperFnMap(QualType Ty,llvm::Constant * Fn)580    void setAtomicGetterHelperFnMap(QualType Ty,
581                              llvm::Constant *Fn) {
582      AtomicGetterHelperFnMap[Ty] = Fn;
583    }
584  
getTypeDescriptorFromMap(QualType Ty)585    llvm::Constant *getTypeDescriptorFromMap(QualType Ty) {
586      return TypeDescriptorMap[Ty];
587    }
setTypeDescriptorInMap(QualType Ty,llvm::Constant * C)588    void setTypeDescriptorInMap(QualType Ty, llvm::Constant *C) {
589      TypeDescriptorMap[Ty] = C;
590    }
591  
getModuleDebugInfo()592    CGDebugInfo *getModuleDebugInfo() { return DebugInfo.get(); }
593  
getNoObjCARCExceptionsMetadata()594    llvm::MDNode *getNoObjCARCExceptionsMetadata() {
595      if (!NoObjCARCExceptionsMetadata)
596        NoObjCARCExceptionsMetadata = llvm::MDNode::get(getLLVMContext(), None);
597      return NoObjCARCExceptionsMetadata;
598    }
599  
getContext()600    ASTContext &getContext() const { return Context; }
getLangOpts()601    const LangOptions &getLangOpts() const { return LangOpts; }
getHeaderSearchOpts()602    const HeaderSearchOptions &getHeaderSearchOpts()
603      const { return HeaderSearchOpts; }
getPreprocessorOpts()604    const PreprocessorOptions &getPreprocessorOpts()
605      const { return PreprocessorOpts; }
getCodeGenOpts()606    const CodeGenOptions &getCodeGenOpts() const { return CodeGenOpts; }
getModule()607    llvm::Module &getModule() const { return TheModule; }
getDiags()608    DiagnosticsEngine &getDiags() const { return Diags; }
getDataLayout()609    const llvm::DataLayout &getDataLayout() const {
610      return TheModule.getDataLayout();
611    }
getTarget()612    const TargetInfo &getTarget() const { return Target; }
613    const llvm::Triple &getTriple() const;
614    bool supportsCOMDAT() const;
615    void maybeSetTrivialComdat(const Decl &D, llvm::GlobalObject &GO);
616  
getCXXABI()617    CGCXXABI &getCXXABI() const { return *ABI; }
getLLVMContext()618    llvm::LLVMContext &getLLVMContext() { return VMContext; }
619  
shouldUseTBAA()620    bool shouldUseTBAA() const { return TBAA != nullptr; }
621  
622    const TargetCodeGenInfo &getTargetCodeGenInfo();
623  
getTypes()624    CodeGenTypes &getTypes() { return Types; }
625  
getVTables()626    CodeGenVTables &getVTables() { return VTables; }
627  
getItaniumVTableContext()628    ItaniumVTableContext &getItaniumVTableContext() {
629      return VTables.getItaniumVTableContext();
630    }
631  
getMicrosoftVTableContext()632    MicrosoftVTableContext &getMicrosoftVTableContext() {
633      return VTables.getMicrosoftVTableContext();
634    }
635  
getGlobalCtors()636    CtorList &getGlobalCtors() { return GlobalCtors; }
getGlobalDtors()637    CtorList &getGlobalDtors() { return GlobalDtors; }
638  
639    llvm::MDNode *getTBAAInfo(QualType QTy);
640    llvm::MDNode *getTBAAInfoForVTablePtr();
641    llvm::MDNode *getTBAAStructInfo(QualType QTy);
642    /// Return the path-aware tag for given base type, access node and offset.
643    llvm::MDNode *getTBAAStructTagInfo(QualType BaseTy, llvm::MDNode *AccessN,
644                                       uint64_t O);
645  
646    bool isTypeConstant(QualType QTy, bool ExcludeCtorDtor);
647  
648    bool isPaddedAtomicType(QualType type);
649    bool isPaddedAtomicType(const AtomicType *type);
650  
651    /// Decorate the instruction with a TBAA tag. For scalar TBAA, the tag
652    /// is the same as the type. For struct-path aware TBAA, the tag
653    /// is different from the type: base type, access type and offset.
654    /// When ConvertTypeToTag is true, we create a tag based on the scalar type.
655    void DecorateInstructionWithTBAA(llvm::Instruction *Inst,
656                                     llvm::MDNode *TBAAInfo,
657                                     bool ConvertTypeToTag = true);
658  
659    /// Adds !invariant.barrier !tag to instruction
660    void DecorateInstructionWithInvariantGroup(llvm::Instruction *I,
661                                               const CXXRecordDecl *RD);
662  
663    /// Emit the given number of characters as a value of type size_t.
664    llvm::ConstantInt *getSize(CharUnits numChars);
665  
666    /// Set the visibility for the given LLVM GlobalValue.
667    void setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const;
668  
669    /// Set the TLS mode for the given LLVM GlobalValue for the thread-local
670    /// variable declaration D.
671    void setTLSMode(llvm::GlobalValue *GV, const VarDecl &D) const;
672  
GetLLVMVisibility(Visibility V)673    static llvm::GlobalValue::VisibilityTypes GetLLVMVisibility(Visibility V) {
674      switch (V) {
675      case DefaultVisibility:   return llvm::GlobalValue::DefaultVisibility;
676      case HiddenVisibility:    return llvm::GlobalValue::HiddenVisibility;
677      case ProtectedVisibility: return llvm::GlobalValue::ProtectedVisibility;
678      }
679      llvm_unreachable("unknown visibility!");
680    }
681  
682    llvm::Constant *GetAddrOfGlobal(GlobalDecl GD, bool IsForDefinition = false);
683  
684    /// Will return a global variable of the given type. If a variable with a
685    /// different type already exists then a new  variable with the right type
686    /// will be created and all uses of the old variable will be replaced with a
687    /// bitcast to the new variable.
688    llvm::GlobalVariable *
689    CreateOrReplaceCXXRuntimeVariable(StringRef Name, llvm::Type *Ty,
690                                      llvm::GlobalValue::LinkageTypes Linkage);
691  
692    llvm::Function *
693    CreateGlobalInitOrDestructFunction(llvm::FunctionType *ty, const Twine &name,
694                                       const CGFunctionInfo &FI,
695                                       SourceLocation Loc = SourceLocation(),
696                                       bool TLS = false);
697  
698    /// Return the address space of the underlying global variable for D, as
699    /// determined by its declaration. Normally this is the same as the address
700    /// space of D's type, but in CUDA, address spaces are associated with
701    /// declarations, not types.
702    unsigned GetGlobalVarAddressSpace(const VarDecl *D, unsigned AddrSpace);
703  
704    /// Return the llvm::Constant for the address of the given global variable.
705    /// If Ty is non-null and if the global doesn't exist, then it will be created
706    /// with the specified type instead of whatever the normal requested type
707    /// would be. If IsForDefinition is true, it is guranteed that an actual
708    /// global with type Ty will be returned, not conversion of a variable with
709    /// the same mangled name but some other type.
710    llvm::Constant *GetAddrOfGlobalVar(const VarDecl *D,
711                                       llvm::Type *Ty = nullptr,
712                                       bool IsForDefinition = false);
713  
714    /// Return the address of the given function. If Ty is non-null, then this
715    /// function will use the specified type if it has to create it.
716    llvm::Constant *GetAddrOfFunction(GlobalDecl GD, llvm::Type *Ty = nullptr,
717                                      bool ForVTable = false,
718                                      bool DontDefer = false,
719                                      bool IsForDefinition = false);
720  
721    /// Get the address of the RTTI descriptor for the given type.
722    llvm::Constant *GetAddrOfRTTIDescriptor(QualType Ty, bool ForEH = false);
723  
724    /// Get the address of a uuid descriptor .
725    ConstantAddress GetAddrOfUuidDescriptor(const CXXUuidofExpr* E);
726  
727    /// Get the address of the thunk for the given global decl.
728    llvm::Constant *GetAddrOfThunk(GlobalDecl GD, const ThunkInfo &Thunk);
729  
730    /// Get a reference to the target of VD.
731    ConstantAddress GetWeakRefReference(const ValueDecl *VD);
732  
733    /// Returns the assumed alignment of an opaque pointer to the given class.
734    CharUnits getClassPointerAlignment(const CXXRecordDecl *CD);
735  
736    /// Returns the assumed alignment of a virtual base of a class.
737    CharUnits getVBaseAlignment(CharUnits DerivedAlign,
738                                const CXXRecordDecl *Derived,
739                                const CXXRecordDecl *VBase);
740  
741    /// Given a class pointer with an actual known alignment, and the
742    /// expected alignment of an object at a dynamic offset w.r.t that
743    /// pointer, return the alignment to assume at the offset.
744    CharUnits getDynamicOffsetAlignment(CharUnits ActualAlign,
745                                        const CXXRecordDecl *Class,
746                                        CharUnits ExpectedTargetAlign);
747  
748    CharUnits
749    computeNonVirtualBaseClassOffset(const CXXRecordDecl *DerivedClass,
750                                     CastExpr::path_const_iterator Start,
751                                     CastExpr::path_const_iterator End);
752  
753    /// Returns the offset from a derived class to  a class. Returns null if the
754    /// offset is 0.
755    llvm::Constant *
756    GetNonVirtualBaseClassOffset(const CXXRecordDecl *ClassDecl,
757                                 CastExpr::path_const_iterator PathBegin,
758                                 CastExpr::path_const_iterator PathEnd);
759  
760    llvm::FoldingSet<BlockByrefHelpers> ByrefHelpersCache;
761  
762    /// Fetches the global unique block count.
getUniqueBlockCount()763    int getUniqueBlockCount() { return ++Block.GlobalUniqueCount; }
764  
765    /// Fetches the type of a generic block descriptor.
766    llvm::Type *getBlockDescriptorType();
767  
768    /// The type of a generic block literal.
769    llvm::Type *getGenericBlockLiteralType();
770  
771    /// Gets the address of a block which requires no captures.
772    llvm::Constant *GetAddrOfGlobalBlock(const BlockExpr *BE, const char *);
773  
774    /// Return a pointer to a constant CFString object for the given string.
775    ConstantAddress GetAddrOfConstantCFString(const StringLiteral *Literal);
776  
777    /// Return a pointer to a constant NSString object for the given string. Or a
778    /// user defined String object as defined via
779    /// -fconstant-string-class=class_name option.
780    ConstantAddress GetAddrOfConstantString(const StringLiteral *Literal);
781  
782    /// Return a constant array for the given string.
783    llvm::Constant *GetConstantArrayFromStringLiteral(const StringLiteral *E);
784  
785    /// Return a pointer to a constant array for the given string literal.
786    ConstantAddress
787    GetAddrOfConstantStringFromLiteral(const StringLiteral *S,
788                                       StringRef Name = ".str");
789  
790    /// Return a pointer to a constant array for the given ObjCEncodeExpr node.
791    ConstantAddress
792    GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *);
793  
794    /// Returns a pointer to a character array containing the literal and a
795    /// terminating '\0' character. The result has pointer to array type.
796    ///
797    /// \param GlobalName If provided, the name to use for the global (if one is
798    /// created).
799    ConstantAddress
800    GetAddrOfConstantCString(const std::string &Str,
801                             const char *GlobalName = nullptr);
802  
803    /// Returns a pointer to a constant global variable for the given file-scope
804    /// compound literal expression.
805    ConstantAddress GetAddrOfConstantCompoundLiteral(const CompoundLiteralExpr*E);
806  
807    /// \brief Returns a pointer to a global variable representing a temporary
808    /// with static or thread storage duration.
809    ConstantAddress GetAddrOfGlobalTemporary(const MaterializeTemporaryExpr *E,
810                                             const Expr *Inner);
811  
812    /// \brief Retrieve the record type that describes the state of an
813    /// Objective-C fast enumeration loop (for..in).
814    QualType getObjCFastEnumerationStateType();
815  
816    // Produce code for this constructor/destructor. This method doesn't try
817    // to apply any ABI rules about which other constructors/destructors
818    // are needed or if they are alias to each other.
819    llvm::Function *codegenCXXStructor(const CXXMethodDecl *MD,
820                                       StructorType Type);
821  
822    /// Return the address of the constructor/destructor of the given type.
823    llvm::Constant *
824    getAddrOfCXXStructor(const CXXMethodDecl *MD, StructorType Type,
825                         const CGFunctionInfo *FnInfo = nullptr,
826                         llvm::FunctionType *FnType = nullptr,
827                         bool DontDefer = false, bool IsForDefinition = false);
828  
829    /// Given a builtin id for a function like "__builtin_fabsf", return a
830    /// Function* for "fabsf".
831    llvm::Value *getBuiltinLibFunction(const FunctionDecl *FD,
832                                       unsigned BuiltinID);
833  
834    llvm::Function *getIntrinsic(unsigned IID, ArrayRef<llvm::Type*> Tys = None);
835  
836    /// Emit code for a single top level declaration.
837    void EmitTopLevelDecl(Decl *D);
838  
839    /// \brief Stored a deferred empty coverage mapping for an unused
840    /// and thus uninstrumented top level declaration.
841    void AddDeferredUnusedCoverageMapping(Decl *D);
842  
843    /// \brief Remove the deferred empty coverage mapping as this
844    /// declaration is actually instrumented.
845    void ClearUnusedCoverageMapping(const Decl *D);
846  
847    /// \brief Emit all the deferred coverage mappings
848    /// for the uninstrumented functions.
849    void EmitDeferredUnusedCoverageMappings();
850  
851    /// Tell the consumer that this variable has been instantiated.
852    void HandleCXXStaticMemberVarInstantiation(VarDecl *VD);
853  
854    /// \brief If the declaration has internal linkage but is inside an
855    /// extern "C" linkage specification, prepare to emit an alias for it
856    /// to the expected name.
857    template<typename SomeDecl>
858    void MaybeHandleStaticInExternC(const SomeDecl *D, llvm::GlobalValue *GV);
859  
860    /// Add a global to a list to be added to the llvm.used metadata.
861    void addUsedGlobal(llvm::GlobalValue *GV);
862  
863    /// Add a global to a list to be added to the llvm.compiler.used metadata.
864    void addCompilerUsedGlobal(llvm::GlobalValue *GV);
865  
866    /// Add a destructor and object to add to the C++ global destructor function.
AddCXXDtorEntry(llvm::Constant * DtorFn,llvm::Constant * Object)867    void AddCXXDtorEntry(llvm::Constant *DtorFn, llvm::Constant *Object) {
868      CXXGlobalDtors.emplace_back(DtorFn, Object);
869    }
870  
871    /// Create a new runtime function with the specified type and name.
872    llvm::Constant *CreateRuntimeFunction(llvm::FunctionType *Ty,
873                                          StringRef Name,
874                                          llvm::AttributeSet ExtraAttrs =
875                                            llvm::AttributeSet());
876    /// Create a new compiler builtin function with the specified type and name.
877    llvm::Constant *CreateBuiltinFunction(llvm::FunctionType *Ty,
878                                          StringRef Name,
879                                          llvm::AttributeSet ExtraAttrs =
880                                            llvm::AttributeSet());
881    /// Create a new runtime global variable with the specified type and name.
882    llvm::Constant *CreateRuntimeVariable(llvm::Type *Ty,
883                                          StringRef Name);
884  
885    ///@name Custom Blocks Runtime Interfaces
886    ///@{
887  
888    llvm::Constant *getNSConcreteGlobalBlock();
889    llvm::Constant *getNSConcreteStackBlock();
890    llvm::Constant *getBlockObjectAssign();
891    llvm::Constant *getBlockObjectDispose();
892  
893    ///@}
894  
895    llvm::Constant *getLLVMLifetimeStartFn();
896    llvm::Constant *getLLVMLifetimeEndFn();
897  
898    // Make sure that this type is translated.
899    void UpdateCompletedType(const TagDecl *TD);
900  
901    llvm::Constant *getMemberPointerConstant(const UnaryOperator *e);
902  
903    /// Try to emit the initializer for the given declaration as a constant;
904    /// returns 0 if the expression cannot be emitted as a constant.
905    llvm::Constant *EmitConstantInit(const VarDecl &D,
906                                     CodeGenFunction *CGF = nullptr);
907  
908    /// Try to emit the given expression as a constant; returns 0 if the
909    /// expression cannot be emitted as a constant.
910    llvm::Constant *EmitConstantExpr(const Expr *E, QualType DestType,
911                                     CodeGenFunction *CGF = nullptr);
912  
913    /// Emit the given constant value as a constant, in the type's scalar
914    /// representation.
915    llvm::Constant *EmitConstantValue(const APValue &Value, QualType DestType,
916                                      CodeGenFunction *CGF = nullptr);
917  
918    /// Emit the given constant value as a constant, in the type's memory
919    /// representation.
920    llvm::Constant *EmitConstantValueForMemory(const APValue &Value,
921                                               QualType DestType,
922                                               CodeGenFunction *CGF = nullptr);
923  
924    /// \brief Emit type info if type of an expression is a variably modified
925    /// type. Also emit proper debug info for cast types.
926    void EmitExplicitCastExprType(const ExplicitCastExpr *E,
927                                  CodeGenFunction *CGF = nullptr);
928  
929    /// Return the result of value-initializing the given type, i.e. a null
930    /// expression of the given type.  This is usually, but not always, an LLVM
931    /// null constant.
932    llvm::Constant *EmitNullConstant(QualType T);
933  
934    /// Return a null constant appropriate for zero-initializing a base class with
935    /// the given type. This is usually, but not always, an LLVM null constant.
936    llvm::Constant *EmitNullConstantForBase(const CXXRecordDecl *Record);
937  
938    /// Emit a general error that something can't be done.
939    void Error(SourceLocation loc, StringRef error);
940  
941    /// Print out an error that codegen doesn't support the specified stmt yet.
942    void ErrorUnsupported(const Stmt *S, const char *Type);
943  
944    /// Print out an error that codegen doesn't support the specified decl yet.
945    void ErrorUnsupported(const Decl *D, const char *Type);
946  
947    /// Set the attributes on the LLVM function for the given decl and function
948    /// info. This applies attributes necessary for handling the ABI as well as
949    /// user specified attributes like section.
950    void SetInternalFunctionAttributes(const Decl *D, llvm::Function *F,
951                                       const CGFunctionInfo &FI);
952  
953    /// Set the LLVM function attributes (sext, zext, etc).
954    void SetLLVMFunctionAttributes(const Decl *D,
955                                   const CGFunctionInfo &Info,
956                                   llvm::Function *F);
957  
958    /// Set the LLVM function attributes which only apply to a function
959    /// definition.
960    void SetLLVMFunctionAttributesForDefinition(const Decl *D, llvm::Function *F);
961  
962    /// Return true iff the given type uses 'sret' when used as a return type.
963    bool ReturnTypeUsesSRet(const CGFunctionInfo &FI);
964  
965    /// Return true iff the given type uses an argument slot when 'sret' is used
966    /// as a return type.
967    bool ReturnSlotInterferesWithArgs(const CGFunctionInfo &FI);
968  
969    /// Return true iff the given type uses 'fpret' when used as a return type.
970    bool ReturnTypeUsesFPRet(QualType ResultType);
971  
972    /// Return true iff the given type uses 'fp2ret' when used as a return type.
973    bool ReturnTypeUsesFP2Ret(QualType ResultType);
974  
975    /// Get the LLVM attributes and calling convention to use for a particular
976    /// function type.
977    ///
978    /// \param Name - The function name.
979    /// \param Info - The function type information.
980    /// \param CalleeInfo - The callee information these attributes are being
981    /// constructed for. If valid, the attributes applied to this decl may
982    /// contribute to the function attributes and calling convention.
983    /// \param PAL [out] - On return, the attribute list to use.
984    /// \param CallingConv [out] - On return, the LLVM calling convention to use.
985    void ConstructAttributeList(StringRef Name, const CGFunctionInfo &Info,
986                                CGCalleeInfo CalleeInfo, AttributeListType &PAL,
987                                unsigned &CallingConv, bool AttrOnCallSite);
988  
989    // Fills in the supplied string map with the set of target features for the
990    // passed in function.
991    void getFunctionFeatureMap(llvm::StringMap<bool> &FeatureMap,
992                               const FunctionDecl *FD);
993  
994    StringRef getMangledName(GlobalDecl GD);
995    StringRef getBlockMangledName(GlobalDecl GD, const BlockDecl *BD);
996  
997    void EmitTentativeDefinition(const VarDecl *D);
998  
999    void EmitVTable(CXXRecordDecl *Class);
1000  
1001    void RefreshTypeCacheForClass(const CXXRecordDecl *Class);
1002  
1003    /// \brief Appends Opts to the "Linker Options" metadata value.
1004    void AppendLinkerOptions(StringRef Opts);
1005  
1006    /// \brief Appends a detect mismatch command to the linker options.
1007    void AddDetectMismatch(StringRef Name, StringRef Value);
1008  
1009    /// \brief Appends a dependent lib to the "Linker Options" metadata value.
1010    void AddDependentLib(StringRef Lib);
1011  
1012    llvm::GlobalVariable::LinkageTypes getFunctionLinkage(GlobalDecl GD);
1013  
setFunctionLinkage(GlobalDecl GD,llvm::Function * F)1014    void setFunctionLinkage(GlobalDecl GD, llvm::Function *F) {
1015      F->setLinkage(getFunctionLinkage(GD));
1016    }
1017  
1018    /// Set the DLL storage class on F.
1019    void setFunctionDLLStorageClass(GlobalDecl GD, llvm::Function *F);
1020  
1021    /// Return the appropriate linkage for the vtable, VTT, and type information
1022    /// of the given class.
1023    llvm::GlobalVariable::LinkageTypes getVTableLinkage(const CXXRecordDecl *RD);
1024  
1025    /// Return the store size, in character units, of the given LLVM type.
1026    CharUnits GetTargetTypeStoreSize(llvm::Type *Ty) const;
1027  
1028    /// Returns LLVM linkage for a declarator.
1029    llvm::GlobalValue::LinkageTypes
1030    getLLVMLinkageForDeclarator(const DeclaratorDecl *D, GVALinkage Linkage,
1031                                bool IsConstantVariable);
1032  
1033    /// Returns LLVM linkage for a declarator.
1034    llvm::GlobalValue::LinkageTypes
1035    getLLVMLinkageVarDefinition(const VarDecl *VD, bool IsConstant);
1036  
1037    /// Emit all the global annotations.
1038    void EmitGlobalAnnotations();
1039  
1040    /// Emit an annotation string.
1041    llvm::Constant *EmitAnnotationString(StringRef Str);
1042  
1043    /// Emit the annotation's translation unit.
1044    llvm::Constant *EmitAnnotationUnit(SourceLocation Loc);
1045  
1046    /// Emit the annotation line number.
1047    llvm::Constant *EmitAnnotationLineNo(SourceLocation L);
1048  
1049    /// Generate the llvm::ConstantStruct which contains the annotation
1050    /// information for a given GlobalValue. The annotation struct is
1051    /// {i8 *, i8 *, i8 *, i32}. The first field is a constant expression, the
1052    /// GlobalValue being annotated. The second field is the constant string
1053    /// created from the AnnotateAttr's annotation. The third field is a constant
1054    /// string containing the name of the translation unit. The fourth field is
1055    /// the line number in the file of the annotated value declaration.
1056    llvm::Constant *EmitAnnotateAttr(llvm::GlobalValue *GV,
1057                                     const AnnotateAttr *AA,
1058                                     SourceLocation L);
1059  
1060    /// Add global annotations that are set on D, for the global GV. Those
1061    /// annotations are emitted during finalization of the LLVM code.
1062    void AddGlobalAnnotations(const ValueDecl *D, llvm::GlobalValue *GV);
1063  
1064    bool isInSanitizerBlacklist(llvm::Function *Fn, SourceLocation Loc) const;
1065  
1066    bool isInSanitizerBlacklist(llvm::GlobalVariable *GV, SourceLocation Loc,
1067                                QualType Ty,
1068                                StringRef Category = StringRef()) const;
1069  
getSanitizerMetadata()1070    SanitizerMetadata *getSanitizerMetadata() {
1071      return SanitizerMD.get();
1072    }
1073  
addDeferredVTable(const CXXRecordDecl * RD)1074    void addDeferredVTable(const CXXRecordDecl *RD) {
1075      DeferredVTables.push_back(RD);
1076    }
1077  
1078    /// Emit code for a singal global function or var decl. Forward declarations
1079    /// are emitted lazily.
1080    void EmitGlobal(GlobalDecl D);
1081  
1082    bool TryEmitDefinitionAsAlias(GlobalDecl Alias, GlobalDecl Target,
1083                                  bool InEveryTU);
1084    bool TryEmitBaseDestructorAsAlias(const CXXDestructorDecl *D);
1085  
1086    /// Set attributes for a global definition.
1087    void setFunctionDefinitionAttributes(const FunctionDecl *D,
1088                                         llvm::Function *F);
1089  
1090    llvm::GlobalValue *GetGlobalValue(StringRef Ref);
1091  
1092    /// Set attributes which are common to any form of a global definition (alias,
1093    /// Objective-C method, function, global variable).
1094    ///
1095    /// NOTE: This should only be called for definitions.
1096    void SetCommonAttributes(const Decl *D, llvm::GlobalValue *GV);
1097  
1098    /// Set attributes which must be preserved by an alias. This includes common
1099    /// attributes (i.e. it includes a call to SetCommonAttributes).
1100    ///
1101    /// NOTE: This should only be called for definitions.
1102    void setAliasAttributes(const Decl *D, llvm::GlobalValue *GV);
1103  
1104    void addReplacement(StringRef Name, llvm::Constant *C);
1105  
1106    void addGlobalValReplacement(llvm::GlobalValue *GV, llvm::Constant *C);
1107  
1108    /// \brief Emit a code for threadprivate directive.
1109    /// \param D Threadprivate declaration.
1110    void EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D);
1111  
1112    /// \brief Emit a code for declare reduction construct.
1113    void EmitOMPDeclareReduction(const OMPDeclareReductionDecl *D,
1114                                 CodeGenFunction *CGF = nullptr);
1115  
1116    /// Returns whether the given record has hidden LTO visibility and therefore
1117    /// may participate in (single-module) CFI and whole-program vtable
1118    /// optimization.
1119    bool HasHiddenLTOVisibility(const CXXRecordDecl *RD);
1120  
1121    /// Emit type metadata for the given vtable using the given layout.
1122    void EmitVTableTypeMetadata(llvm::GlobalVariable *VTable,
1123                                const VTableLayout &VTLayout);
1124  
1125    /// Generate a cross-DSO type identifier for MD.
1126    llvm::ConstantInt *CreateCrossDsoCfiTypeId(llvm::Metadata *MD);
1127  
1128    /// Create a metadata identifier for the given type. This may either be an
1129    /// MDString (for external identifiers) or a distinct unnamed MDNode (for
1130    /// internal identifiers).
1131    llvm::Metadata *CreateMetadataIdentifierForType(QualType T);
1132  
1133    /// Create and attach type metadata to the given function.
1134    void CreateFunctionTypeMetadata(const FunctionDecl *FD, llvm::Function *F);
1135  
1136    /// Returns whether this module needs the "all-vtables" type identifier.
1137    bool NeedAllVtablesTypeId() const;
1138  
1139    /// Create and attach type metadata for the given vtable.
1140    void AddVTableTypeMetadata(llvm::GlobalVariable *VTable, CharUnits Offset,
1141                               const CXXRecordDecl *RD);
1142  
1143    /// \breif Get the declaration of std::terminate for the platform.
1144    llvm::Constant *getTerminateFn();
1145  
1146    llvm::SanitizerStatReport &getSanStats();
1147  
1148  private:
1149    llvm::Constant *
1150    GetOrCreateLLVMFunction(StringRef MangledName, llvm::Type *Ty, GlobalDecl D,
1151                            bool ForVTable, bool DontDefer = false,
1152                            bool IsThunk = false,
1153                            llvm::AttributeSet ExtraAttrs = llvm::AttributeSet(),
1154                            bool IsForDefinition = false);
1155  
1156    llvm::Constant *GetOrCreateLLVMGlobal(StringRef MangledName,
1157                                          llvm::PointerType *PTy,
1158                                          const VarDecl *D,
1159                                          bool IsForDefinition = false);
1160  
1161    void setNonAliasAttributes(const Decl *D, llvm::GlobalObject *GO);
1162  
1163    /// Set function attributes for a function declaration.
1164    void SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
1165                               bool IsIncompleteFunction, bool IsThunk);
1166  
1167    void EmitGlobalDefinition(GlobalDecl D, llvm::GlobalValue *GV = nullptr);
1168  
1169    void EmitGlobalFunctionDefinition(GlobalDecl GD, llvm::GlobalValue *GV);
1170    void EmitGlobalVarDefinition(const VarDecl *D, bool IsTentative = false);
1171    void EmitAliasDefinition(GlobalDecl GD);
1172    void emitIFuncDefinition(GlobalDecl GD);
1173    void EmitObjCPropertyImplementations(const ObjCImplementationDecl *D);
1174    void EmitObjCIvarInitializations(ObjCImplementationDecl *D);
1175  
1176    // C++ related functions.
1177  
1178    void EmitNamespace(const NamespaceDecl *D);
1179    void EmitLinkageSpec(const LinkageSpecDecl *D);
1180    void CompleteDIClassType(const CXXMethodDecl* D);
1181  
1182    /// \brief Emit the function that initializes C++ thread_local variables.
1183    void EmitCXXThreadLocalInitFunc();
1184  
1185    /// Emit the function that initializes C++ globals.
1186    void EmitCXXGlobalInitFunc();
1187  
1188    /// Emit the function that destroys C++ globals.
1189    void EmitCXXGlobalDtorFunc();
1190  
1191    /// Emit the function that initializes the specified global (if PerformInit is
1192    /// true) and registers its destructor.
1193    void EmitCXXGlobalVarDeclInitFunc(const VarDecl *D,
1194                                      llvm::GlobalVariable *Addr,
1195                                      bool PerformInit);
1196  
1197    void EmitPointerToInitFunc(const VarDecl *VD, llvm::GlobalVariable *Addr,
1198                               llvm::Function *InitFunc, InitSegAttr *ISA);
1199  
1200    // FIXME: Hardcoding priority here is gross.
1201    void AddGlobalCtor(llvm::Function *Ctor, int Priority = 65535,
1202                       llvm::Constant *AssociatedData = nullptr);
1203    void AddGlobalDtor(llvm::Function *Dtor, int Priority = 65535);
1204  
1205    /// Generates a global array of functions and priorities using the given list
1206    /// and name. This array will have appending linkage and is suitable for use
1207    /// as a LLVM constructor or destructor array.
1208    void EmitCtorList(const CtorList &Fns, const char *GlobalName);
1209  
1210    /// Emit any needed decls for which code generation was deferred.
1211    void EmitDeferred();
1212  
1213    /// Call replaceAllUsesWith on all pairs in Replacements.
1214    void applyReplacements();
1215  
1216    /// Call replaceAllUsesWith on all pairs in GlobalValReplacements.
1217    void applyGlobalValReplacements();
1218  
1219    void checkAliases();
1220  
1221    /// Emit any vtables which we deferred and still have a use for.
1222    void EmitDeferredVTables();
1223  
1224    /// Emit the llvm.used and llvm.compiler.used metadata.
1225    void emitLLVMUsed();
1226  
1227    /// \brief Emit the link options introduced by imported modules.
1228    void EmitModuleLinkOptions();
1229  
1230    /// \brief Emit aliases for internal-linkage declarations inside "C" language
1231    /// linkage specifications, giving them the "expected" name where possible.
1232    void EmitStaticExternCAliases();
1233  
1234    void EmitDeclMetadata();
1235  
1236    /// \brief Emit the Clang version as llvm.ident metadata.
1237    void EmitVersionIdentMetadata();
1238  
1239    /// Emits target specific Metadata for global declarations.
1240    void EmitTargetMetadata();
1241  
1242    /// Emit the llvm.gcov metadata used to tell LLVM where to emit the .gcno and
1243    /// .gcda files in a way that persists in .bc files.
1244    void EmitCoverageFile();
1245  
1246    /// Emits the initializer for a uuidof string.
1247    llvm::Constant *EmitUuidofInitializer(StringRef uuidstr);
1248  
1249    /// Determine whether the definition must be emitted; if this returns \c
1250    /// false, the definition can be emitted lazily if it's used.
1251    bool MustBeEmitted(const ValueDecl *D);
1252  
1253    /// Determine whether the definition can be emitted eagerly, or should be
1254    /// delayed until the end of the translation unit. This is relevant for
1255    /// definitions whose linkage can change, e.g. implicit function instantions
1256    /// which may later be explicitly instantiated.
1257    bool MayBeEmittedEagerly(const ValueDecl *D);
1258  
1259    /// Check whether we can use a "simpler", more core exceptions personality
1260    /// function.
1261    void SimplifyPersonality();
1262  };
1263  }  // end namespace CodeGen
1264  }  // end namespace clang
1265  
1266  #endif // LLVM_CLANG_LIB_CODEGEN_CODEGENMODULE_H
1267