MipsTargetMachine.h revision a430cb613b6e93c05f128b04323c57acfd08686d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- MipsTargetMachine.h - Define TargetMachine for Mips -----*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 105e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)// This file declares the Mips specific subclass of TargetMachine. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef MIPSTARGETMACHINE_H 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MIPSTARGETMACHINE_H 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MipsFrameLowering.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MipsISelLowering.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MipsInstrInfo.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MipsJITInfo.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MipsSelectionDAGInfo.h" 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "MipsSubtarget.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/OwningPtr.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/CodeGen/Passes.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/CodeGen/SelectionDAGISel.h" 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "llvm/IR/DataLayout.h" 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "llvm/Target/TargetFrameLowering.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "llvm/Target/TargetMachine.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace llvm { 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass formatted_raw_ostream; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MipsRegisterInfo; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MipsTargetMachine : public LLVMTargetMachine { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsSubtarget Subtarget; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DataLayout DL; // Calculates type size & alignment 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningPtr<const MipsInstrInfo> InstrInfo; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OwningPtr<const MipsFrameLowering> FrameLowering; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningPtr<const MipsTargetLowering> TLInfo; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningPtr<const MipsInstrInfo> InstrInfo16; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningPtr<const MipsFrameLowering> FrameLowering16; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OwningPtr<const MipsTargetLowering> TLInfo16; 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OwningPtr<const MipsInstrInfo> InstrInfoSE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningPtr<const MipsFrameLowering> FrameLoweringSE; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwningPtr<const MipsTargetLowering> TLInfoSE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MipsSelectionDAGInfo TSInfo; 47 MipsJITInfo JITInfo; 48 49public: 50 MipsTargetMachine(const Target &T, StringRef TT, 51 StringRef CPU, StringRef FS, const TargetOptions &Options, 52 Reloc::Model RM, CodeModel::Model CM, 53 CodeGenOpt::Level OL, 54 bool isLittle); 55 56 virtual ~MipsTargetMachine() {} 57 58 virtual void addAnalysisPasses(PassManagerBase &PM); 59 60 virtual const MipsInstrInfo *getInstrInfo() const 61 { return InstrInfo.get(); } 62 virtual const TargetFrameLowering *getFrameLowering() const 63 { return FrameLowering.get(); } 64 virtual const MipsSubtarget *getSubtargetImpl() const 65 { return &Subtarget; } 66 virtual const DataLayout *getDataLayout() const 67 { return &DL;} 68 virtual MipsJITInfo *getJITInfo() 69 { return &JITInfo; } 70 71 virtual const MipsRegisterInfo *getRegisterInfo() const { 72 return &InstrInfo->getRegisterInfo(); 73 } 74 75 virtual const MipsTargetLowering *getTargetLowering() const { 76 return TLInfo.get(); 77 } 78 79 virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const { 80 return &TSInfo; 81 } 82 83 // Pass Pipeline Configuration 84 virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 85 virtual bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE); 86 87 // Set helper classes 88 void setHelperClassesMips16(); 89 90 void setHelperClassesMipsSE(); 91 92 93}; 94 95/// MipsebTargetMachine - Mips32/64 big endian target machine. 96/// 97class MipsebTargetMachine : public MipsTargetMachine { 98 virtual void anchor(); 99public: 100 MipsebTargetMachine(const Target &T, StringRef TT, 101 StringRef CPU, StringRef FS, const TargetOptions &Options, 102 Reloc::Model RM, CodeModel::Model CM, 103 CodeGenOpt::Level OL); 104}; 105 106/// MipselTargetMachine - Mips32/64 little endian target machine. 107/// 108class MipselTargetMachine : public MipsTargetMachine { 109 virtual void anchor(); 110public: 111 MipselTargetMachine(const Target &T, StringRef TT, 112 StringRef CPU, StringRef FS, const TargetOptions &Options, 113 Reloc::Model RM, CodeModel::Model CM, 114 CodeGenOpt::Level OL); 115}; 116 117} // End llvm namespace 118 119#endif 120