X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FMips%2FMipsTargetMachine.h;h=1651457dd7c78c3a996d2e09513f5ac3df387590;hp=a949ef35f1ccb46517f703c6e832cce058bcbc6a;hb=f9799dbe51e8a846f66ae167ffb5f92f8be38ef5;hpb=b889e0cd2fea4afee623d5be603b912b955a2eca diff --git a/lib/Target/Mips/MipsTargetMachine.h b/lib/Target/Mips/MipsTargetMachine.h index a949ef35f1c..1651457dd7c 100644 --- a/lib/Target/Mips/MipsTargetMachine.h +++ b/lib/Target/Mips/MipsTargetMachine.h @@ -14,70 +14,73 @@ #ifndef MIPSTARGETMACHINE_H #define MIPSTARGETMACHINE_H -#include "MipsFrameLowering.h" -#include "MipsInstrInfo.h" -#include "MipsISelLowering.h" -#include "MipsJITInfo.h" -#include "MipsSelectionDAGInfo.h" #include "MipsSubtarget.h" -#include "MipsELFWriterInfo.h" -#include "llvm/Target/TargetMachine.h" -#include "llvm/Target/TargetData.h" +#include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/SelectionDAGISel.h" #include "llvm/Target/TargetFrameLowering.h" +#include "llvm/Target/TargetMachine.h" namespace llvm { class formatted_raw_ostream; class MipsRegisterInfo; class MipsTargetMachine : public LLVMTargetMachine { - MipsSubtarget Subtarget; - const TargetData DataLayout; // Calculates type size & alignment - const MipsInstrInfo *InstrInfo; - const MipsFrameLowering *FrameLowering; - MipsTargetLowering TLInfo; - MipsSelectionDAGInfo TSInfo; - MipsJITInfo JITInfo; - MipsELFWriterInfo ELFWriterInfo; + MipsSubtarget *Subtarget; + MipsSubtarget DefaultSubtarget; + MipsSubtarget NoMips16Subtarget; + MipsSubtarget Mips16Subtarget; public: - MipsTargetMachine(const Target &T, StringRef TT, - StringRef CPU, StringRef FS, const TargetOptions &Options, - Reloc::Model RM, CodeModel::Model CM, - CodeGenOpt::Level OL, - bool isLittle); + MipsTargetMachine(const Target &T, StringRef TT, StringRef CPU, StringRef FS, + const TargetOptions &Options, Reloc::Model RM, + CodeModel::Model CM, CodeGenOpt::Level OL, bool isLittle); - virtual ~MipsTargetMachine() { delete InstrInfo; } + virtual ~MipsTargetMachine() {} - virtual const MipsInstrInfo *getInstrInfo() const - { return InstrInfo; } - virtual const TargetFrameLowering *getFrameLowering() const - { return FrameLowering; } - virtual const MipsSubtarget *getSubtargetImpl() const - { return &Subtarget; } - virtual const TargetData *getTargetData() const - { return &DataLayout;} - virtual MipsJITInfo *getJITInfo() - { return &JITInfo; } + void addAnalysisPasses(PassManagerBase &PM) override; - virtual const MipsRegisterInfo *getRegisterInfo() const { - return &InstrInfo->getRegisterInfo(); + const MipsInstrInfo *getInstrInfo() const override { + return getSubtargetImpl()->getInstrInfo(); } - - virtual const MipsTargetLowering *getTargetLowering() const { - return &TLInfo; + const TargetFrameLowering *getFrameLowering() const override { + return getSubtargetImpl()->getFrameLowering(); } - - virtual const MipsSelectionDAGInfo* getSelectionDAGInfo() const { - return &TSInfo; + const MipsSubtarget *getSubtargetImpl() const override { + if (Subtarget) + return Subtarget; + return &DefaultSubtarget; } - - virtual const MipsELFWriterInfo *getELFWriterInfo() const { - return &ELFWriterInfo; + MipsSubtarget *getSubtargetImpl() override { + if (Subtarget) + return Subtarget; + return &DefaultSubtarget; + } + const InstrItineraryData *getInstrItineraryData() const override { + return Subtarget->inMips16Mode() + ? nullptr + : &getSubtargetImpl()->getInstrItineraryData(); + } + MipsJITInfo *getJITInfo() override { + return getSubtargetImpl()->getJITInfo(); + } + const MipsRegisterInfo *getRegisterInfo() const override { + return getSubtargetImpl()->getRegisterInfo(); + } + const MipsTargetLowering *getTargetLowering() const override { + return getSubtargetImpl()->getTargetLowering(); + } + const DataLayout *getDataLayout() const override { + return getSubtargetImpl()->getDataLayout(); + } + const MipsSelectionDAGInfo* getSelectionDAGInfo() const override { + return getSubtargetImpl()->getSelectionDAGInfo(); } + /// \brief Reset the subtarget for the Mips target. + void resetSubtarget(MachineFunction *MF); // Pass Pipeline Configuration - virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); - virtual bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE); + TargetPassConfig *createPassConfig(PassManagerBase &PM) override; + bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE) override; }; /// MipsebTargetMachine - Mips32/64 big endian target machine.