diff options
Diffstat (limited to 'lib/Target/Mips/MipsTargetMachine.h')
-rw-r--r-- | lib/Target/Mips/MipsTargetMachine.h | 56 |
1 files changed, 24 insertions, 32 deletions
diff --git a/lib/Target/Mips/MipsTargetMachine.h b/lib/Target/Mips/MipsTargetMachine.h index a0e7d43..1349f82 100644 --- a/lib/Target/Mips/MipsTargetMachine.h +++ b/lib/Target/Mips/MipsTargetMachine.h @@ -11,8 +11,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MIPSTARGETMACHINE_H -#define MIPSTARGETMACHINE_H +#ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H +#define LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H #include "MipsSubtarget.h" #include "llvm/CodeGen/Passes.h" @@ -25,48 +25,40 @@ class formatted_raw_ostream; class MipsRegisterInfo; class MipsTargetMachine : public LLVMTargetMachine { - MipsSubtarget Subtarget; + bool isLittle; + std::unique_ptr<TargetLoweringObjectFile> TLOF; + MipsSubtarget *Subtarget; + MipsSubtarget DefaultSubtarget; + MipsSubtarget NoMips16Subtarget; + MipsSubtarget Mips16Subtarget; + + mutable StringMap<std::unique_ptr<MipsSubtarget>> SubtargetMap; 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); - - virtual ~MipsTargetMachine() {} + ~MipsTargetMachine() override; void addAnalysisPasses(PassManagerBase &PM) override; - const MipsInstrInfo *getInstrInfo() const override { - return getSubtargetImpl()->getInstrInfo(); - } - const TargetFrameLowering *getFrameLowering() const override { - return getSubtargetImpl()->getFrameLowering(); - } - const MipsSubtarget *getSubtargetImpl() const override { return &Subtarget; } - const InstrItineraryData *getInstrItineraryData() const override { - return Subtarget.inMips16Mode() - ? nullptr - : &getSubtargetImpl()->getInstrItineraryData(); - } - MipsJITInfo *getJITInfo() override { - return Subtarget.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(); + const MipsSubtarget *getSubtargetImpl() const override { + if (Subtarget) + return Subtarget; + return &DefaultSubtarget; } + const MipsSubtarget *getSubtargetImpl(const Function &F) const override; + + /// \brief Reset the subtarget for the Mips target. + void resetSubtarget(MachineFunction *MF); + // Pass Pipeline Configuration TargetPassConfig *createPassConfig(PassManagerBase &PM) override; - bool addCodeEmitter(PassManagerBase &PM, JITCodeEmitter &JCE) override; + + TargetLoweringObjectFile *getObjFileLowering() const override { + return TLOF.get(); + } }; /// MipsebTargetMachine - Mips32/64 big endian target machine. |