1 //===-- MBlazeTargetMachine.h - Define TargetMachine for MBlaze -*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares the MBlaze specific subclass of TargetMachine. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef MBLAZE_TARGETMACHINE_H 15 #define MBLAZE_TARGETMACHINE_H 16 17 #include "MBlazeSubtarget.h" 18 #include "MBlazeInstrInfo.h" 19 #include "MBlazeISelLowering.h" 20 #include "MBlazeSelectionDAGInfo.h" 21 #include "MBlazeIntrinsicInfo.h" 22 #include "MBlazeFrameLowering.h" 23 #include "MBlazeELFWriterInfo.h" 24 #include "llvm/MC/MCStreamer.h" 25 #include "llvm/Target/TargetMachine.h" 26 #include "llvm/Target/TargetData.h" 27 #include "llvm/Target/TargetFrameLowering.h" 28 29 namespace llvm { 30 class formatted_raw_ostream; 31 32 class MBlazeTargetMachine : public LLVMTargetMachine { 33 MBlazeSubtarget Subtarget; 34 const TargetData DataLayout; // Calculates type size & alignment 35 MBlazeInstrInfo InstrInfo; 36 MBlazeFrameLowering FrameLowering; 37 MBlazeTargetLowering TLInfo; 38 MBlazeSelectionDAGInfo TSInfo; 39 MBlazeIntrinsicInfo IntrinsicInfo; 40 MBlazeELFWriterInfo ELFWriterInfo; 41 InstrItineraryData InstrItins; 42 43 public: 44 MBlazeTargetMachine(const Target &T, StringRef TT, 45 StringRef CPU, StringRef FS, 46 const TargetOptions &Options, 47 Reloc::Model RM, CodeModel::Model CM, 48 CodeGenOpt::Level OL); 49 getInstrInfo()50 virtual const MBlazeInstrInfo *getInstrInfo() const 51 { return &InstrInfo; } 52 getInstrItineraryData()53 virtual const InstrItineraryData *getInstrItineraryData() const 54 { return &InstrItins; } 55 getFrameLowering()56 virtual const TargetFrameLowering *getFrameLowering() const 57 { return &FrameLowering; } 58 getSubtargetImpl()59 virtual const MBlazeSubtarget *getSubtargetImpl() const 60 { return &Subtarget; } 61 getTargetData()62 virtual const TargetData *getTargetData() const 63 { return &DataLayout;} 64 getRegisterInfo()65 virtual const MBlazeRegisterInfo *getRegisterInfo() const 66 { return &InstrInfo.getRegisterInfo(); } 67 getTargetLowering()68 virtual const MBlazeTargetLowering *getTargetLowering() const 69 { return &TLInfo; } 70 getSelectionDAGInfo()71 virtual const MBlazeSelectionDAGInfo* getSelectionDAGInfo() const 72 { return &TSInfo; } 73 getIntrinsicInfo()74 const TargetIntrinsicInfo *getIntrinsicInfo() const 75 { return &IntrinsicInfo; } 76 getELFWriterInfo()77 virtual const MBlazeELFWriterInfo *getELFWriterInfo() const { 78 return &ELFWriterInfo; 79 } 80 81 // Pass Pipeline Configuration 82 virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 83 }; 84 } // End llvm namespace 85 86 #endif 87