MipsTargetMachine.h revision 239462
1234353Sdim//===-- MipsTargetMachine.h - Define TargetMachine for Mips -----*- C++ -*-===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// This file declares the Mips specific subclass of TargetMachine. 11193323Sed// 12193323Sed//===----------------------------------------------------------------------===// 13193323Sed 14193323Sed#ifndef MIPSTARGETMACHINE_H 15193323Sed#define MIPSTARGETMACHINE_H 16193323Sed 17234353Sdim#include "MipsFrameLowering.h" 18193323Sed#include "MipsInstrInfo.h" 19193323Sed#include "MipsISelLowering.h" 20234353Sdim#include "MipsJITInfo.h" 21208599Srdivacky#include "MipsSelectionDAGInfo.h" 22234353Sdim#include "MipsSubtarget.h" 23193323Sed#include "llvm/Target/TargetMachine.h" 24193323Sed#include "llvm/Target/TargetData.h" 25218893Sdim#include "llvm/Target/TargetFrameLowering.h" 26193323Sed 27193323Sednamespace llvm { 28239462Sdimclass formatted_raw_ostream; 29239462Sdimclass MipsRegisterInfo; 30218893Sdim 31239462Sdimclass MipsTargetMachine : public LLVMTargetMachine { 32239462Sdim MipsSubtarget Subtarget; 33239462Sdim const TargetData DataLayout; // Calculates type size & alignment 34239462Sdim const MipsInstrInfo *InstrInfo; 35239462Sdim const MipsFrameLowering *FrameLowering; 36239462Sdim MipsTargetLowering TLInfo; 37239462Sdim MipsSelectionDAGInfo TSInfo; 38239462Sdim MipsJITInfo JITInfo; 39226633Sdim 40239462Sdimpublic: 41239462Sdim MipsTargetMachine(const Target &T, StringRef TT, 42239462Sdim StringRef CPU, StringRef FS, const TargetOptions &Options, 43239462Sdim Reloc::Model RM, CodeModel::Model CM, 44239462Sdim CodeGenOpt::Level OL, 45239462Sdim bool isLittle); 46218893Sdim 47239462Sdim virtual ~MipsTargetMachine() { delete InstrInfo; } 48193323Sed 49239462Sdim virtual const MipsInstrInfo *getInstrInfo() const 50239462Sdim { return InstrInfo; } 51239462Sdim virtual const TargetFrameLowering *getFrameLowering() const 52239462Sdim { return FrameLowering; } 53239462Sdim virtual const MipsSubtarget *getSubtargetImpl() const 54239462Sdim { return &Subtarget; } 55239462Sdim virtual const TargetData *getTargetData() const 56239462Sdim { return &DataLayout;} 57239462Sdim virtual MipsJITInfo *getJITInfo() 58239462Sdim { return &JITInfo; } 59226633Sdim 60239462Sdim virtual const MipsRegisterInfo *getRegisterInfo() const { 61239462Sdim return &InstrInfo->getRegisterInfo(); 62239462Sdim } 63193323Sed 64239462Sdim virtual const MipsTargetLowering *getTargetLowering() const { 65239462Sdim return &TLInfo; 66239462Sdim } 67193323Sed 68239462Sdim virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const { 69239462Sdim return &TSInfo; 70239462Sdim } 71208599Srdivacky 72239462Sdim // Pass Pipeline Configuration 73239462Sdim virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 74239462Sdim virtual bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE); 75239462Sdim}; 76226633Sdim 77239462Sdim/// MipsebTargetMachine - Mips32/64 big endian target machine. 78193323Sed/// 79226633Sdimclass MipsebTargetMachine : public MipsTargetMachine { 80234353Sdim virtual void anchor(); 81226633Sdimpublic: 82226633Sdim MipsebTargetMachine(const Target &T, StringRef TT, 83234353Sdim StringRef CPU, StringRef FS, const TargetOptions &Options, 84234353Sdim Reloc::Model RM, CodeModel::Model CM, 85234353Sdim CodeGenOpt::Level OL); 86226633Sdim}; 87226633Sdim 88239462Sdim/// MipselTargetMachine - Mips32/64 little endian target machine. 89226633Sdim/// 90193323Sedclass MipselTargetMachine : public MipsTargetMachine { 91234353Sdim virtual void anchor(); 92193323Sedpublic: 93226633Sdim MipselTargetMachine(const Target &T, StringRef TT, 94234353Sdim StringRef CPU, StringRef FS, const TargetOptions &Options, 95234353Sdim Reloc::Model RM, CodeModel::Model CM, 96234353Sdim CodeGenOpt::Level OL); 97193323Sed}; 98193323Sed 99193323Sed} // End llvm namespace 100193323Sed 101193323Sed#endif 102