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