MipsTargetMachine.h revision d140af6c2374e29ab29caef11d888a358717572c
143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//===-- MipsTargetMachine.h - Define TargetMachine for Mips -----*- C++ -*-===//
243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//
343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//                     The LLVM Compiler Infrastructure
443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//
543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source
643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// License. See LICENSE.TXT for details.
743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//
843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//===----------------------------------------------------------------------===//
943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//
1043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// This file declares the Mips specific subclass of TargetMachine.
1143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//
1243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//===----------------------------------------------------------------------===//
1343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis
1443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#ifndef MIPSTARGETMACHINE_H
15ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek#define MIPSTARGETMACHINE_H
16769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
17d1e5a89226da79f7e6f43d40facc46abda9e5245Jordy Rose#include "MipsFrameLowering.h"
18769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis#include "MipsInstrInfo.h"
199fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "MipsISelLowering.h"
2043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "MipsJITInfo.h"
2143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "MipsSelectionDAGInfo.h"
2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "MipsSubtarget.h"
2343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "MipsELFWriterInfo.h"
24d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis#include "llvm/Target/TargetMachine.h"
25d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis#include "llvm/DataLayout.h"
26d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis#include "llvm/Target/TargetFrameLowering.h"
27d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis#include "llvm/Target/TargetTransformImpl.h"
28d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
29d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidisnamespace llvm {
30d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidisclass formatted_raw_ostream;
31d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidisclass MipsRegisterInfo;
32d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis
33d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidisclass MipsTargetMachine : public LLVMTargetMachine {
34d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis  MipsSubtarget       Subtarget;
35d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis  const DataLayout    DL; // Calculates type size & alignment
36d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis  const MipsInstrInfo *InstrInfo;
37dff6ef903ff4fcb43b5ea292ecd772e381393b5dAnna Zaks  const MipsFrameLowering *FrameLowering;
38dff6ef903ff4fcb43b5ea292ecd772e381393b5dAnna Zaks  MipsTargetLowering  TLInfo;
39d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis  MipsSelectionDAGInfo TSInfo;
40d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis  MipsJITInfo JITInfo;
41deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis  MipsELFWriterInfo   ELFWriterInfo;
42deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis  ScalarTargetTransformImpl STTI;
43deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis
44deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidispublic:
45deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis  MipsTargetMachine(const Target &T, StringRef TT,
46deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis                    StringRef CPU, StringRef FS, const TargetOptions &Options,
47deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis                    Reloc::Model RM, CodeModel::Model CM,
48deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis                    CodeGenOpt::Level OL,
49deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis                    bool isLittle);
50deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis
51769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  virtual ~MipsTargetMachine() { delete InstrInfo; }
52769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
53769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  virtual const MipsInstrInfo *getInstrInfo() const
54769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  { return InstrInfo; }
559fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual const TargetFrameLowering *getFrameLowering() const
569fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  { return FrameLowering; }
579fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual const MipsSubtarget *getSubtargetImpl() const
589fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  { return &Subtarget; }
599fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual const DataLayout *getDataLayout()    const
609fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  { return &DL;}
619fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual MipsJITInfo *getJITInfo()
629fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  { return &JITInfo; }
639fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
649fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual const MipsRegisterInfo *getRegisterInfo()  const {
659fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    return &InstrInfo->getRegisterInfo();
669fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  }
679fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
689fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual const MipsTargetLowering *getTargetLowering() const {
699fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    return &TLInfo;
70769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  }
719fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
729fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const {
739fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis    return &TSInfo;
749fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  }
759fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
76769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  virtual const MipsELFWriterInfo *getELFWriterInfo() const {
77769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis    return &ELFWriterInfo;
789fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  }
799fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis
809fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  // Pass Pipeline Configuration
819fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);
829fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis  virtual bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE);
839fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis};
84769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
85769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis/// MipsebTargetMachine - Mips32/64 big endian target machine.
86769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis///
87769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisclass MipsebTargetMachine : public MipsTargetMachine {
88769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  virtual void anchor();
89769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidispublic:
90769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  MipsebTargetMachine(const Target &T, StringRef TT,
91769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis                      StringRef CPU, StringRef FS, const TargetOptions &Options,
92769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis                      Reloc::Model RM, CodeModel::Model CM,
93c2e0db82139c70c0eac9d5c165b6bf3250af5bedArgyrios Kyrtzidis                      CodeGenOpt::Level OL);
94c2e0db82139c70c0eac9d5c165b6bf3250af5bedArgyrios Kyrtzidis};
95cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis
968ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks/// MipselTargetMachine - Mips32/64 little endian target machine.
978ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks///
988ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaksclass MipselTargetMachine : public MipsTargetMachine {
99769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis  virtual void anchor();
100e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidispublic:
101e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis  MipselTargetMachine(const Target &T, StringRef TT,
102e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis                      StringRef CPU, StringRef FS, const TargetOptions &Options,
103769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis                      Reloc::Model RM, CodeModel::Model CM,
104769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis                      CodeGenOpt::Level OL);
105769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis};
106769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis
107cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis} // End llvm namespace
108cd50e136ad7dc721822f5e6350769a37c216612dArgyrios Kyrtzidis
109769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis#endif
110e1bfb7ae0dd0762c88e1fd94746e973c37f2e04eArgyrios Kyrtzidis