Home | History | Annotate | Download | only in CodeGen
      1 //===--- CodeGen/ModuleBuilder.h - Build LLVM from ASTs ---------*- 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 file defines the ModuleBuilder interface.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CLANG_CODEGEN_MODULEBUILDER_H
     15 #define LLVM_CLANG_CODEGEN_MODULEBUILDER_H
     16 
     17 #include "clang/AST/ASTConsumer.h"
     18 
     19 namespace llvm {
     20   class Constant;
     21   class LLVMContext;
     22   class Module;
     23   class StringRef;
     24 }
     25 
     26 namespace clang {
     27   class CodeGenOptions;
     28   class CoverageSourceInfo;
     29   class Decl;
     30   class DiagnosticsEngine;
     31   class GlobalDecl;
     32   class HeaderSearchOptions;
     33   class LangOptions;
     34   class PreprocessorOptions;
     35 
     36 namespace CodeGen {
     37   class CodeGenModule;
     38   class CGDebugInfo;
     39 }
     40 
     41 /// The primary public interface to the Clang code generator.
     42 ///
     43 /// This is not really an abstract interface.
     44 class CodeGenerator : public ASTConsumer {
     45   virtual void anchor();
     46 
     47 public:
     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();
     52 
     53   /// Return the module that this code generator is building into.
     54   ///
     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
     58   /// will be deleted.
     59   ///
     60   /// It will also return null if the module is released.
     61   llvm::Module *GetModule();
     62 
     63   /// Release ownership of the module to the caller.
     64   ///
     65   /// It is illegal to call methods other than GetModule on the
     66   /// CodeGenerator after releasing its module.
     67   llvm::Module *ReleaseModule();
     68 
     69   /// Return debug info code generator.
     70   CodeGen::CGDebugInfo *getCGDebugInfo();
     71 
     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.
     74   ///
     75   /// This may return null if there was no matching declaration.
     76   const Decl *GetDeclForMangledName(llvm::StringRef MangledName);
     77 
     78   /// Return the LLVM address of the given global entity.
     79   ///
     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);
     87 };
     88 
     89 /// CreateLLVMCodeGen - Create a CodeGenerator instance.
     90 /// It is the responsibility of the caller to call delete on
     91 /// the allocated CodeGenerator instance.
     92 CodeGenerator *CreateLLVMCodeGen(DiagnosticsEngine &Diags,
     93                                  llvm::StringRef ModuleName,
     94                                  const HeaderSearchOptions &HeaderSearchOpts,
     95                                  const PreprocessorOptions &PreprocessorOpts,
     96                                  const CodeGenOptions &CGO,
     97                                  llvm::LLVMContext& C,
     98                                  CoverageSourceInfo *CoverageInfo = nullptr);
     99 
    100 } // end namespace clang
    101 
    102 #endif
    103