TargetMachine.h revision 87f34658dec9097d987d254a990ea7f311bfc95f
1//===- TargetMachine.h ----------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_CODEGEN_TARGETMACHINE_H 10#define MCLD_CODEGEN_TARGETMACHINE_H 11#include <llvm/Support/CodeGen.h> 12#include <string> 13 14namespace llvm { 15 16class Target; 17class TargetData; 18class TargetMachine; 19class MCContext; 20class raw_ostream; 21class formatted_raw_ostream; 22namespace legacy { 23class PassManagerBase; 24} // namepsace legacy 25} // namespace llvm 26 27namespace mcld { 28 29class Module; 30class Target; 31class FileHandle; 32class LinkerConfig; 33class ToolOutputFile; 34 35enum CodeGenFileType { 36 CGFT_ASMFile, 37 CGFT_OBJFile, 38 CGFT_DSOFile, 39 CGFT_EXEFile, 40 CGFT_PARTIAL, 41 CGFT_BINARY, 42 CGFT_NULLFile 43}; 44 45 46/** \class mcld::MCLDTargetMachine 47 * \brief mcld::MCLDTargetMachine is a object adapter of LLVMTargetMachine. 48 */ 49class MCLDTargetMachine 50{ 51public: 52 /// Adapter of llvm::TargetMachine 53 /// 54 MCLDTargetMachine(llvm::TargetMachine& pTM, 55 const llvm::Target& pLLMVTarget, 56 const mcld::Target& pMCLDTarget, 57 const std::string& pTriple); 58 59 virtual ~MCLDTargetMachine(); 60 61 /// getTarget - adapt llvm::TargetMachine::getTarget 62 const mcld::Target& getTarget() const; 63 64 /// getTM - return adapted the llvm::TargetMachine. 65 const llvm::TargetMachine& getTM() const { return m_TM; } 66 llvm::TargetMachine& getTM() { return m_TM; } 67 68 /// appPassesToEmitFile - The target function which we has to modify as 69 /// upstreaming. 70 bool addPassesToEmitFile(llvm::legacy::PassManagerBase &, 71 mcld::ToolOutputFile& pOutput, 72 mcld::CodeGenFileType, 73 llvm::CodeGenOpt::Level, 74 mcld::Module& pModule, 75 mcld::LinkerConfig& pConfig, 76 bool DisableVerify = true); 77 78private: 79 /// addCommonCodeGenPasses - Add standard LLVM codegen passes used for 80 /// both emitting to assembly files or machine code output. 81 bool addCommonCodeGenPasses(llvm::legacy::PassManagerBase &, 82 mcld::CodeGenFileType, 83 llvm::CodeGenOpt::Level, 84 bool DisableVerify, 85 llvm::MCContext *&OutCtx); 86 87 bool addCompilerPasses(llvm::legacy::PassManagerBase &pPM, 88 llvm::formatted_raw_ostream &pOutput, 89 llvm::MCContext *&OutCtx); 90 91 bool addAssemblerPasses(llvm::legacy::PassManagerBase &pPM, 92 llvm::raw_ostream &pOutput, 93 llvm::MCContext *&OutCtx); 94 95 bool addLinkerPasses(llvm::legacy::PassManagerBase &pPM, 96 mcld::LinkerConfig& pConfig, 97 mcld::Module& pModule, 98 mcld::FileHandle& pFileHandle, 99 llvm::MCContext *&OutCtx); 100 101private: 102 llvm::TargetMachine &m_TM; 103 const llvm::Target *m_pLLVMTarget; 104 const mcld::Target *m_pMCLDTarget; 105 const std::string& m_Triple; 106}; 107 108} // namespace of mcld 109 110#endif 111 112