Current Path : /compat/linux/proc/68247/root/usr/src/contrib/llvm/tools/clang/include/clang/CodeGen/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //compat/linux/proc/68247/root/usr/src/contrib/llvm/tools/clang/include/clang/CodeGen/CodeGenAction.h |
//===--- CodeGenAction.h - LLVM Code Generation Frontend Action -*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_CODEGEN_CODE_GEN_ACTION_H #define LLVM_CLANG_CODEGEN_CODE_GEN_ACTION_H #include "clang/Frontend/FrontendAction.h" #include "llvm/ADT/OwningPtr.h" namespace llvm { class LLVMContext; class Module; } namespace clang { class BackendConsumer; class CodeGenAction : public ASTFrontendAction { private: unsigned Act; OwningPtr<llvm::Module> TheModule; llvm::Module *LinkModule; llvm::LLVMContext *VMContext; bool OwnsVMContext; protected: /// Create a new code generation action. If the optional \arg _VMContext /// parameter is supplied, the action uses it without taking ownership, /// otherwise it creates a fresh LLVM context and takes ownership. CodeGenAction(unsigned _Act, llvm::LLVMContext *_VMContext = 0); virtual bool hasIRSupport() const; virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI, StringRef InFile); virtual void ExecuteAction(); virtual void EndSourceFileAction(); public: ~CodeGenAction(); /// setLinkModule - Set the link module to be used by this action. If a link /// module is not provided, and CodeGenOptions::LinkBitcodeFile is non-empty, /// the action will load it from the specified file. void setLinkModule(llvm::Module *Mod) { LinkModule = Mod; } /// takeModule - Take the generated LLVM module, for use after the action has /// been run. The result may be null on failure. llvm::Module *takeModule(); /// Take the LLVM context used by this action. llvm::LLVMContext *takeLLVMContext(); BackendConsumer *BEConsumer; }; class EmitAssemblyAction : public CodeGenAction { virtual void anchor(); public: EmitAssemblyAction(llvm::LLVMContext *_VMContext = 0); }; class EmitBCAction : public CodeGenAction { virtual void anchor(); public: EmitBCAction(llvm::LLVMContext *_VMContext = 0); }; class EmitLLVMAction : public CodeGenAction { virtual void anchor(); public: EmitLLVMAction(llvm::LLVMContext *_VMContext = 0); }; class EmitLLVMOnlyAction : public CodeGenAction { virtual void anchor(); public: EmitLLVMOnlyAction(llvm::LLVMContext *_VMContext = 0); }; class EmitCodeGenOnlyAction : public CodeGenAction { virtual void anchor(); public: EmitCodeGenOnlyAction(llvm::LLVMContext *_VMContext = 0); }; class EmitObjAction : public CodeGenAction { virtual void anchor(); public: EmitObjAction(llvm::LLVMContext *_VMContext = 0); }; } #endif