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