| //===- TargetMachine.h ----------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef MCLD_CODEGEN_TARGETMACHINE_H |
| #define MCLD_CODEGEN_TARGETMACHINE_H |
| #include <llvm/Support/CodeGen.h> |
| #include <string> |
| |
| namespace llvm { |
| |
| class Target; |
| class TargetData; |
| class TargetMachine; |
| class MCContext; |
| class raw_ostream; |
| class formatted_raw_ostream; |
| namespace legacy { |
| class PassManagerBase; |
| } // namepsace legacy |
| } // namespace llvm |
| |
| namespace mcld { |
| |
| class Module; |
| class Target; |
| class FileHandle; |
| class LinkerConfig; |
| class ToolOutputFile; |
| |
| enum CodeGenFileType { |
| CGFT_ASMFile, |
| CGFT_OBJFile, |
| CGFT_DSOFile, |
| CGFT_EXEFile, |
| CGFT_PARTIAL, |
| CGFT_BINARY, |
| CGFT_NULLFile |
| }; |
| |
| |
| /** \class mcld::MCLDTargetMachine |
| * \brief mcld::MCLDTargetMachine is a object adapter of LLVMTargetMachine. |
| */ |
| class MCLDTargetMachine |
| { |
| public: |
| /// Adapter of llvm::TargetMachine |
| /// |
| MCLDTargetMachine(llvm::TargetMachine& pTM, |
| const llvm::Target& pLLMVTarget, |
| const mcld::Target& pMCLDTarget, |
| const std::string& pTriple); |
| |
| virtual ~MCLDTargetMachine(); |
| |
| /// getTarget - adapt llvm::TargetMachine::getTarget |
| const mcld::Target& getTarget() const; |
| |
| /// getTM - return adapted the llvm::TargetMachine. |
| const llvm::TargetMachine& getTM() const { return m_TM; } |
| llvm::TargetMachine& getTM() { return m_TM; } |
| |
| /// appPassesToEmitFile - The target function which we has to modify as |
| /// upstreaming. |
| bool addPassesToEmitFile(llvm::legacy::PassManagerBase &, |
| mcld::ToolOutputFile& pOutput, |
| mcld::CodeGenFileType, |
| llvm::CodeGenOpt::Level, |
| mcld::Module& pModule, |
| mcld::LinkerConfig& pConfig, |
| bool DisableVerify = true); |
| |
| private: |
| /// addCommonCodeGenPasses - Add standard LLVM codegen passes used for |
| /// both emitting to assembly files or machine code output. |
| bool addCommonCodeGenPasses(llvm::legacy::PassManagerBase &, |
| mcld::CodeGenFileType, |
| llvm::CodeGenOpt::Level, |
| bool DisableVerify, |
| llvm::MCContext *&OutCtx); |
| |
| bool addCompilerPasses(llvm::legacy::PassManagerBase &pPM, |
| llvm::formatted_raw_ostream &pOutput, |
| llvm::MCContext *&OutCtx); |
| |
| bool addAssemblerPasses(llvm::legacy::PassManagerBase &pPM, |
| llvm::raw_ostream &pOutput, |
| llvm::MCContext *&OutCtx); |
| |
| bool addLinkerPasses(llvm::legacy::PassManagerBase &pPM, |
| mcld::LinkerConfig& pConfig, |
| mcld::Module& pModule, |
| mcld::FileHandle& pFileHandle, |
| llvm::MCContext *&OutCtx); |
| |
| private: |
| llvm::TargetMachine &m_TM; |
| const llvm::Target *m_pLLVMTarget; |
| const mcld::Target *m_pMCLDTarget; |
| const std::string& m_Triple; |
| }; |
| |
| } // namespace of mcld |
| |
| #endif |
| |