1 //===-- MipsTargetMachine.h - Define TargetMachine for Mips -----*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares the Mips specific subclass of TargetMachine. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef MIPSTARGETMACHINE_H 15 #define MIPSTARGETMACHINE_H 16 17 #include "MipsSubtarget.h" 18 #include "MipsInstrInfo.h" 19 #include "MipsISelLowering.h" 20 #include "MipsFrameLowering.h" 21 #include "MipsSelectionDAGInfo.h" 22 #include "llvm/Target/TargetMachine.h" 23 #include "llvm/Target/TargetData.h" 24 #include "llvm/Target/TargetFrameLowering.h" 25 #include "MipsJITInfo.h" 26 27 namespace llvm { 28 class formatted_raw_ostream; 29 30 class MipsTargetMachine : public LLVMTargetMachine { 31 MipsSubtarget Subtarget; 32 const TargetData DataLayout; // Calculates type size & alignment 33 MipsInstrInfo InstrInfo; 34 MipsFrameLowering FrameLowering; 35 MipsTargetLowering TLInfo; 36 MipsSelectionDAGInfo TSInfo; 37 MipsJITInfo JITInfo; 38 39 public: 40 MipsTargetMachine(const Target &T, StringRef TT, 41 StringRef CPU, StringRef FS, const TargetOptions &Options, 42 Reloc::Model RM, CodeModel::Model CM, 43 CodeGenOpt::Level OL, 44 bool isLittle); 45 46 virtual const MipsInstrInfo *getInstrInfo() const 47 { return &InstrInfo; } 48 virtual const TargetFrameLowering *getFrameLowering() const 49 { return &FrameLowering; } 50 virtual const MipsSubtarget *getSubtargetImpl() const 51 { return &Subtarget; } 52 virtual const TargetData *getTargetData() const 53 { return &DataLayout;} 54 virtual MipsJITInfo *getJITInfo() 55 { return &JITInfo; } 56 57 58 virtual const MipsRegisterInfo *getRegisterInfo() const { 59 return &InstrInfo.getRegisterInfo(); 60 } 61 62 virtual const MipsTargetLowering *getTargetLowering() const { 63 return &TLInfo; 64 } 65 66 virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const { 67 return &TSInfo; 68 } 69 70 // Pass Pipeline Configuration 71 virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 72 virtual bool addCodeEmitter(PassManagerBase &PM, 73 JITCodeEmitter &JCE); 74 75 }; 76 77 /// MipsebTargetMachine - Mips32 big endian target machine. 78 /// 79 class MipsebTargetMachine : public MipsTargetMachine { 80 virtual void anchor(); 81 public: 82 MipsebTargetMachine(const Target &T, StringRef TT, 83 StringRef CPU, StringRef FS, const TargetOptions &Options, 84 Reloc::Model RM, CodeModel::Model CM, 85 CodeGenOpt::Level OL); 86 }; 87 88 /// MipselTargetMachine - Mips32 little endian target machine. 89 /// 90 class MipselTargetMachine : public MipsTargetMachine { 91 virtual void anchor(); 92 public: 93 MipselTargetMachine(const Target &T, StringRef TT, 94 StringRef CPU, StringRef FS, const TargetOptions &Options, 95 Reloc::Model RM, CodeModel::Model CM, 96 CodeGenOpt::Level OL); 97 }; 98 99 /// Mips64ebTargetMachine - Mips64 big endian target machine. 100 /// 101 class Mips64ebTargetMachine : public MipsTargetMachine { 102 virtual void anchor(); 103 public: 104 Mips64ebTargetMachine(const Target &T, StringRef TT, 105 StringRef CPU, StringRef FS, 106 const TargetOptions &Options, 107 Reloc::Model RM, CodeModel::Model CM, 108 CodeGenOpt::Level OL); 109 }; 110 111 /// Mips64elTargetMachine - Mips64 little endian target machine. 112 /// 113 class Mips64elTargetMachine : public MipsTargetMachine { 114 virtual void anchor(); 115 public: 116 Mips64elTargetMachine(const Target &T, StringRef TT, 117 StringRef CPU, StringRef FS, 118 const TargetOptions &Options, 119 Reloc::Model RM, CodeModel::Model CM, 120 CodeGenOpt::Level OL); 121 }; 122 } // End llvm namespace 123 124 #endif 125