blob: a542ef68209377438c6530eeadeea339c883a755 [file] [log] [blame]
Jia Liu8f5e8c12012-02-17 01:23:50 +00001//===-- MipsTargetMachine.h - Define TargetMachine for Mips -----*- C++ -*-===//
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +00007//
Akira Hatanaka4552c9a2011-04-15 21:51:11 +00008//===----------------------------------------------------------------------===//
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +00009//
10// This file declares the Mips specific subclass of TargetMachine.
11//
Akira Hatanaka4552c9a2011-04-15 21:51:11 +000012//===----------------------------------------------------------------------===//
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000013
14#ifndef MIPSTARGETMACHINE_H
15#define MIPSTARGETMACHINE_H
16
Craig Topper79aa3412012-03-17 18:46:09 +000017#include "MipsFrameLowering.h"
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000018#include "MipsInstrInfo.h"
19#include "MipsISelLowering.h"
Craig Topper79aa3412012-03-17 18:46:09 +000020#include "MipsJITInfo.h"
Dan Gohmanff7a5622010-05-11 17:31:57 +000021#include "MipsSelectionDAGInfo.h"
Craig Topper79aa3412012-03-17 18:46:09 +000022#include "MipsSubtarget.h"
Akira Hatanakab889e0c2012-08-17 21:28:04 +000023#include "MipsELFWriterInfo.h"
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000024#include "llvm/Target/TargetMachine.h"
25#include "llvm/Target/TargetData.h"
Anton Korobeynikov16c29b52011-01-10 12:39:04 +000026#include "llvm/Target/TargetFrameLowering.h"
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000027
28namespace llvm {
Akira Hatanaka0bc1adb2012-07-31 21:49:49 +000029class formatted_raw_ostream;
30class MipsRegisterInfo;
Anton Korobeynikov33464912010-11-15 00:06:54 +000031
Akira Hatanakab4f921b2012-07-31 21:39:17 +000032class MipsTargetMachine : public LLVMTargetMachine {
33 MipsSubtarget Subtarget;
34 const TargetData DataLayout; // Calculates type size & alignment
Akira Hatanaka0bc1adb2012-07-31 21:49:49 +000035 const MipsInstrInfo *InstrInfo;
Akira Hatanakacdb3ba72012-07-31 22:50:19 +000036 const MipsFrameLowering *FrameLowering;
Akira Hatanakab4f921b2012-07-31 21:39:17 +000037 MipsTargetLowering TLInfo;
38 MipsSelectionDAGInfo TSInfo;
39 MipsJITInfo JITInfo;
Akira Hatanakab889e0c2012-08-17 21:28:04 +000040 MipsELFWriterInfo ELFWriterInfo;
Bruno Cardoso Lopesdca6cdd2011-07-21 16:28:51 +000041
Akira Hatanakab4f921b2012-07-31 21:39:17 +000042public:
43 MipsTargetMachine(const Target &T, StringRef TT,
44 StringRef CPU, StringRef FS, const TargetOptions &Options,
45 Reloc::Model RM, CodeModel::Model CM,
46 CodeGenOpt::Level OL,
47 bool isLittle);
Anton Korobeynikov33464912010-11-15 00:06:54 +000048
Akira Hatanaka0bc1adb2012-07-31 21:49:49 +000049 virtual ~MipsTargetMachine() { delete InstrInfo; }
50
Akira Hatanakab4f921b2012-07-31 21:39:17 +000051 virtual const MipsInstrInfo *getInstrInfo() const
Akira Hatanaka0bc1adb2012-07-31 21:49:49 +000052 { return InstrInfo; }
Akira Hatanakab4f921b2012-07-31 21:39:17 +000053 virtual const TargetFrameLowering *getFrameLowering() const
Akira Hatanakacdb3ba72012-07-31 22:50:19 +000054 { return FrameLowering; }
Akira Hatanakab4f921b2012-07-31 21:39:17 +000055 virtual const MipsSubtarget *getSubtargetImpl() const
56 { return &Subtarget; }
57 virtual const TargetData *getTargetData() const
58 { return &DataLayout;}
59 virtual MipsJITInfo *getJITInfo()
60 { return &JITInfo; }
Bruno Cardoso Lopesdca6cdd2011-07-21 16:28:51 +000061
Akira Hatanakab4f921b2012-07-31 21:39:17 +000062 virtual const MipsRegisterInfo *getRegisterInfo() const {
Akira Hatanaka0bc1adb2012-07-31 21:49:49 +000063 return &InstrInfo->getRegisterInfo();
Akira Hatanakab4f921b2012-07-31 21:39:17 +000064 }
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000065
Akira Hatanakab4f921b2012-07-31 21:39:17 +000066 virtual const MipsTargetLowering *getTargetLowering() const {
67 return &TLInfo;
68 }
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000069
Akira Hatanakab4f921b2012-07-31 21:39:17 +000070 virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const {
71 return &TSInfo;
72 }
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +000073
Akira Hatanakab889e0c2012-08-17 21:28:04 +000074 virtual const MipsELFWriterInfo *getELFWriterInfo() const {
Akira Hatanakab862f092012-08-20 17:53:24 +000075 return &ELFWriterInfo;
Akira Hatanakab889e0c2012-08-17 21:28:04 +000076 }
77
Akira Hatanakab4f921b2012-07-31 21:39:17 +000078 // Pass Pipeline Configuration
79 virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);
80 virtual bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE);
81};
Dan Gohmanff7a5622010-05-11 17:31:57 +000082
Akira Hatanakab4f921b2012-07-31 21:39:17 +000083/// MipsebTargetMachine - Mips32/64 big endian target machine.
Akira Hatanaka24648102011-09-21 03:00:58 +000084///
85class MipsebTargetMachine : public MipsTargetMachine {
David Blaikie2d24e2a2011-12-20 02:50:00 +000086 virtual void anchor();
Akira Hatanaka24648102011-09-21 03:00:58 +000087public:
88 MipsebTargetMachine(const Target &T, StringRef TT,
Nick Lewycky8a8d4792011-12-02 22:16:29 +000089 StringRef CPU, StringRef FS, const TargetOptions &Options,
Evan Chengb95fc312011-11-16 08:38:26 +000090 Reloc::Model RM, CodeModel::Model CM,
91 CodeGenOpt::Level OL);
Akira Hatanaka24648102011-09-21 03:00:58 +000092};
93
Akira Hatanakab4f921b2012-07-31 21:39:17 +000094/// MipselTargetMachine - Mips32/64 little endian target machine.
Bruno Cardoso Lopesd2947ee2008-06-04 01:45:25 +000095///
96class MipselTargetMachine : public MipsTargetMachine {
David Blaikie2d24e2a2011-12-20 02:50:00 +000097 virtual void anchor();
Bruno Cardoso Lopesd2947ee2008-06-04 01:45:25 +000098public:
Evan Cheng43966132011-07-19 06:37:02 +000099 MipselTargetMachine(const Target &T, StringRef TT,
Nick Lewycky8a8d4792011-12-02 22:16:29 +0000100 StringRef CPU, StringRef FS, const TargetOptions &Options,
Evan Chengb95fc312011-11-16 08:38:26 +0000101 Reloc::Model RM, CodeModel::Model CM,
102 CodeGenOpt::Level OL);
Bruno Cardoso Lopesd2947ee2008-06-04 01:45:25 +0000103};
104
Bruno Cardoso Lopes972f5892007-06-06 07:42:06 +0000105} // End llvm namespace
106
107#endif