MipsTargetMachine.h revision 218893
1249259Sdim//===-- MipsTargetMachine.h - Define TargetMachine for Mips -00--*- C++ -*-===//
2249259Sdim//
3249259Sdim//                     The LLVM Compiler Infrastructure
4249259Sdim//
5249259Sdim// This file is distributed under the University of Illinois Open Source
6249259Sdim// License. See LICENSE.TXT for details.
7249259Sdim//
8249259Sdim//===----------------------------------------------------------------------===//
9249259Sdim//
10249259Sdim// This file declares the Mips specific subclass of TargetMachine.
11249259Sdim//
12249259Sdim//===----------------------------------------------------------------------===//
13249259Sdim
14249259Sdim#ifndef MIPSTARGETMACHINE_H
15249259Sdim#define MIPSTARGETMACHINE_H
16249259Sdim
17249259Sdim#include "MipsSubtarget.h"
18249259Sdim#include "MipsInstrInfo.h"
19249259Sdim#include "MipsISelLowering.h"
20249259Sdim#include "MipsFrameLowering.h"
21249259Sdim#include "MipsSelectionDAGInfo.h"
22249259Sdim#include "llvm/Target/TargetMachine.h"
23249259Sdim#include "llvm/Target/TargetData.h"
24249259Sdim#include "llvm/Target/TargetFrameLowering.h"
25249259Sdim
26249259Sdimnamespace llvm {
27249259Sdim  class formatted_raw_ostream;
28249259Sdim
29249259Sdim  class MipsTargetMachine : public LLVMTargetMachine {
30249259Sdim    MipsSubtarget       Subtarget;
31249259Sdim    const TargetData    DataLayout; // Calculates type size & alignment
32249259Sdim    MipsInstrInfo       InstrInfo;
33249259Sdim    MipsFrameLowering   FrameLowering;
34249259Sdim    MipsTargetLowering  TLInfo;
35249259Sdim    MipsSelectionDAGInfo TSInfo;
36249259Sdim  public:
37249259Sdim    MipsTargetMachine(const Target &T, const std::string &TT,
38249259Sdim                      const std::string &FS, bool isLittle);
39249259Sdim
40249259Sdim    virtual const MipsInstrInfo   *getInstrInfo()     const
41249259Sdim    { return &InstrInfo; }
42249259Sdim    virtual const TargetFrameLowering *getFrameLowering()     const
43249259Sdim    { return &FrameLowering; }
44249259Sdim    virtual const MipsSubtarget   *getSubtargetImpl() const
45249259Sdim    { return &Subtarget; }
46249259Sdim    virtual const TargetData      *getTargetData()    const
47249259Sdim    { return &DataLayout;}
48249259Sdim
49249259Sdim    virtual const MipsRegisterInfo *getRegisterInfo()  const {
50249259Sdim      return &InstrInfo.getRegisterInfo();
51249259Sdim    }
52249259Sdim
53249259Sdim    virtual const MipsTargetLowering *getTargetLowering() const {
54249259Sdim      return &TLInfo;
55249259Sdim    }
56249259Sdim
57249259Sdim    virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const {
58249259Sdim      return &TSInfo;
59249259Sdim    }
60249259Sdim
61249259Sdim    // Pass Pipeline Configuration
62249259Sdim    virtual bool addInstSelector(PassManagerBase &PM,
63249259Sdim                                 CodeGenOpt::Level OptLevel);
64249259Sdim    virtual bool addPreEmitPass(PassManagerBase &PM,
65249259Sdim                                CodeGenOpt::Level OptLevel);
66249259Sdim  };
67249259Sdim
68249259Sdim/// MipselTargetMachine - Mipsel target machine.
69249259Sdim///
70249259Sdimclass MipselTargetMachine : public MipsTargetMachine {
71249259Sdimpublic:
72249259Sdim  MipselTargetMachine(const Target &T, const std::string &TT,
73249259Sdim                      const std::string &FS);
74249259Sdim};
75249259Sdim
76249259Sdim} // End llvm namespace
77249259Sdim
78249259Sdim#endif
79249259Sdim