15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- TargetMachine.h ----------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 9f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#ifndef MCLD_CODEGEN_TARGETMACHINE_H 10f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#define MCLD_CODEGEN_TARGETMACHINE_H 11f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/Support/CodeGen.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace llvm { 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Target; 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass TargetData; 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass TargetMachine; 19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesclass MCContext; 20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesclass raw_ostream; 21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesclass formatted_raw_ostream; 22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesnamespace legacy { 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass PassManagerBase; 24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} // namepsace legacy 25f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} // namespace llvm 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Module; 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Target; 31f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesclass FileHandle; 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig; 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ToolOutputFile; 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoenum CodeGenFileType { 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CGFT_ASMFile, 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CGFT_OBJFile, 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CGFT_DSOFile, 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CGFT_EXEFile, 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao CGFT_PARTIAL, 41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao CGFT_BINARY, 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao CGFT_NULLFile 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class mcld::MCLDTargetMachine 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao * \brief mcld::MCLDTargetMachine is a object adapter of LLVMTargetMachine. 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MCLDTargetMachine 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// Adapter of llvm::TargetMachine 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// 54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines MCLDTargetMachine(llvm::TargetMachine& pTM, 55f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const llvm::Target& pLLMVTarget, 56f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const mcld::Target& pMCLDTarget, 57f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const std::string& pTriple); 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao virtual ~MCLDTargetMachine(); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// getTarget - adapt llvm::TargetMachine::getTarget 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const mcld::Target& getTarget() const; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// getTM - return adapted the llvm::TargetMachine. 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const llvm::TargetMachine& getTM() const { return m_TM; } 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::TargetMachine& getTM() { return m_TM; } 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// appPassesToEmitFile - The target function which we has to modify as 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// upstreaming. 70f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines bool addPassesToEmitFile(llvm::legacy::PassManagerBase &, 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao mcld::ToolOutputFile& pOutput, 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao mcld::CodeGenFileType, 73f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::CodeGenOpt::Level, 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao mcld::Module& pModule, 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao mcld::LinkerConfig& pConfig, 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool DisableVerify = true); 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// addCommonCodeGenPasses - Add standard LLVM codegen passes used for 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao /// both emitting to assembly files or machine code output. 81f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines bool addCommonCodeGenPasses(llvm::legacy::PassManagerBase &, 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao mcld::CodeGenFileType, 83f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::CodeGenOpt::Level, 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool DisableVerify, 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::MCContext *&OutCtx); 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 87f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines bool addCompilerPasses(llvm::legacy::PassManagerBase &pPM, 8822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::formatted_raw_ostream &pOutput, 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::MCContext *&OutCtx); 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 91f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines bool addAssemblerPasses(llvm::legacy::PassManagerBase &pPM, 9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao llvm::raw_ostream &pOutput, 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::MCContext *&OutCtx); 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 95f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines bool addLinkerPasses(llvm::legacy::PassManagerBase &pPM, 96f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines mcld::LinkerConfig& pConfig, 97f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines mcld::Module& pModule, 98f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines mcld::FileHandle& pFileHandle, 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::MCContext *&OutCtx); 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::TargetMachine &m_TM; 103f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const llvm::Target *m_pLLVMTarget; 104f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const mcld::Target *m_pMCLDTarget; 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const std::string& m_Triple; 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 112