blob: a0e7d4355558ea86beea4e2429e2449c93feb448 [file] [log] [blame]
Jia Liudd6c1cd2012-02-17 01:23:50 +00001//===-- MipsTargetMachine.h - Define TargetMachine for Mips -----*- C++ -*-===//
Bruno Cardoso Lopes35e43c42007-06-06 07:42:06 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-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 Lopes35e43c42007-06-06 07:42:06 +00007//
Akira Hatanakae2489122011-04-15 21:51:11 +00008//===----------------------------------------------------------------------===//
Bruno Cardoso Lopes35e43c42007-06-06 07:42:06 +00009//
10// This file declares the Mips specific subclass of TargetMachine.
11//
Akira Hatanakae2489122011-04-15 21:51:11 +000012//===----------------------------------------------------------------------===//
Bruno Cardoso Lopes35e43c42007-06-06 07:42:06 +000013
14#ifndef MIPSTARGETMACHINE_H
15#define MIPSTARGETMACHINE_H
16
Craig Topperb25fda92012-03-17 18:46:09 +000017#include "MipsSubtarget.h"
Reed Kotler1595f362013-04-09 19:46:01 +000018#include "llvm/CodeGen/Passes.h"
19#include "llvm/CodeGen/SelectionDAGISel.h"
Anton Korobeynikov2f931282011-01-10 12:39:04 +000020#include "llvm/Target/TargetFrameLowering.h"
Chandler Carruth802d7552012-12-04 07:12:27 +000021#include "llvm/Target/TargetMachine.h"
Bruno Cardoso Lopes35e43c42007-06-06 07:42:06 +000022
23namespace llvm {
Akira Hatanakab7fa3c92012-07-31 21:49:49 +000024class formatted_raw_ostream;
25class MipsRegisterInfo;
Anton Korobeynikovf7183ed2010-11-15 00:06:54 +000026
Akira Hatanaka30651802012-07-31 21:39:17 +000027class MipsTargetMachine : public LLVMTargetMachine {
28 MipsSubtarget Subtarget;
Bruno Cardoso Lopesd1d9c782011-07-21 16:28:51 +000029
Akira Hatanaka30651802012-07-31 21:39:17 +000030public:
Eric Christopherdaa9dbb2014-07-03 00:10:24 +000031 MipsTargetMachine(const Target &T, StringRef TT, StringRef CPU, StringRef FS,
32 const TargetOptions &Options, Reloc::Model RM,
33 CodeModel::Model CM, CodeGenOpt::Level OL, bool isLittle);
Anton Korobeynikovf7183ed2010-11-15 00:06:54 +000034
Akira Hatanaka7bc144c2012-12-12 20:09:58 +000035 virtual ~MipsTargetMachine() {}
Akira Hatanakab7fa3c92012-07-31 21:49:49 +000036
Craig Topper56c590a2014-04-29 07:58:02 +000037 void addAnalysisPasses(PassManagerBase &PM) override;
Reed Kotler1595f362013-04-09 19:46:01 +000038
Eric Christopherdaa9dbb2014-07-03 00:10:24 +000039 const MipsInstrInfo *getInstrInfo() const override {
40 return getSubtargetImpl()->getInstrInfo();
41 }
42 const TargetFrameLowering *getFrameLowering() const override {
43 return getSubtargetImpl()->getFrameLowering();
44 }
45 const MipsSubtarget *getSubtargetImpl() const override { return &Subtarget; }
Craig Topper56c590a2014-04-29 07:58:02 +000046 const InstrItineraryData *getInstrItineraryData() const override {
Eric Christopher4407dde2014-07-02 00:54:07 +000047 return Subtarget.inMips16Mode()
48 ? nullptr
49 : &getSubtargetImpl()->getInstrItineraryData();
Akira Hatanaka66bc4192013-07-12 23:33:22 +000050 }
Eric Christopher1f51ddd2014-07-02 00:54:12 +000051 MipsJITInfo *getJITInfo() override {
52 return Subtarget.getJITInfo();
53 }
Craig Topper56c590a2014-04-29 07:58:02 +000054 const MipsRegisterInfo *getRegisterInfo() const override {
Eric Christopherdaa9dbb2014-07-03 00:10:24 +000055 return getSubtargetImpl()->getRegisterInfo();
Akira Hatanaka30651802012-07-31 21:39:17 +000056 }
Craig Topper56c590a2014-04-29 07:58:02 +000057 const MipsTargetLowering *getTargetLowering() const override {
Eric Christopherdaa9dbb2014-07-03 00:10:24 +000058 return getSubtargetImpl()->getTargetLowering();
Akira Hatanaka30651802012-07-31 21:39:17 +000059 }
Eric Christopher5f9fd212014-07-02 21:29:23 +000060 const DataLayout *getDataLayout() const override {
61 return getSubtargetImpl()->getDataLayout();
62 }
Craig Topper56c590a2014-04-29 07:58:02 +000063 const MipsSelectionDAGInfo* getSelectionDAGInfo() const override {
Eric Christopher5f9fd212014-07-02 21:29:23 +000064 return getSubtargetImpl()->getSelectionDAGInfo();
Akira Hatanaka30651802012-07-31 21:39:17 +000065 }
Bruno Cardoso Lopes35e43c42007-06-06 07:42:06 +000066
Akira Hatanaka30651802012-07-31 21:39:17 +000067 // Pass Pipeline Configuration
Craig Topper56c590a2014-04-29 07:58:02 +000068 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
69 bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE) override;
Akira Hatanaka30651802012-07-31 21:39:17 +000070};
Dan Gohmanbb919df2010-05-11 17:31:57 +000071
Akira Hatanaka30651802012-07-31 21:39:17 +000072/// MipsebTargetMachine - Mips32/64 big endian target machine.
Akira Hatanaka3d673cc2011-09-21 03:00:58 +000073///
74class MipsebTargetMachine : public MipsTargetMachine {
David Blaikiea379b1812011-12-20 02:50:00 +000075 virtual void anchor();
Akira Hatanaka3d673cc2011-09-21 03:00:58 +000076public:
77 MipsebTargetMachine(const Target &T, StringRef TT,
Nick Lewycky50f02cb2011-12-02 22:16:29 +000078 StringRef CPU, StringRef FS, const TargetOptions &Options,
Evan Chengecb29082011-11-16 08:38:26 +000079 Reloc::Model RM, CodeModel::Model CM,
80 CodeGenOpt::Level OL);
Akira Hatanaka3d673cc2011-09-21 03:00:58 +000081};
82
Akira Hatanaka30651802012-07-31 21:39:17 +000083/// MipselTargetMachine - Mips32/64 little endian target machine.
Bruno Cardoso Lopes326a0372008-06-04 01:45:25 +000084///
85class MipselTargetMachine : public MipsTargetMachine {
David Blaikiea379b1812011-12-20 02:50:00 +000086 virtual void anchor();
Bruno Cardoso Lopes326a0372008-06-04 01:45:25 +000087public:
Evan Cheng2129f592011-07-19 06:37:02 +000088 MipselTargetMachine(const Target &T, StringRef TT,
Nick Lewycky50f02cb2011-12-02 22:16:29 +000089 StringRef CPU, StringRef FS, const TargetOptions &Options,
Evan Chengecb29082011-11-16 08:38:26 +000090 Reloc::Model RM, CodeModel::Model CM,
91 CodeGenOpt::Level OL);
Bruno Cardoso Lopes326a0372008-06-04 01:45:25 +000092};
93
Bruno Cardoso Lopes35e43c42007-06-06 07:42:06 +000094} // End llvm namespace
95
96#endif