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 29namespace 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 Reloc::Model RM, CodeModel::Model CM); 47 48 virtual const MBlazeInstrInfo *getInstrInfo() const 49 { return &InstrInfo; } 50 51 virtual const InstrItineraryData *getInstrItineraryData() const 52 { return &InstrItins; } 53 54 virtual const TargetFrameLowering *getFrameLowering() const 55 { return &FrameLowering; } 56 57 virtual const MBlazeSubtarget *getSubtargetImpl() const 58 { return &Subtarget; } 59 60 virtual const TargetData *getTargetData() const 61 { return &DataLayout;} 62 63 virtual const MBlazeRegisterInfo *getRegisterInfo() const 64 { return &InstrInfo.getRegisterInfo(); } 65 66 virtual const MBlazeTargetLowering *getTargetLowering() const 67 { return &TLInfo; } 68 69 virtual const MBlazeSelectionDAGInfo* getSelectionDAGInfo() const 70 { return &TSInfo; } 71 72 const TargetIntrinsicInfo *getIntrinsicInfo() const 73 { return &IntrinsicInfo; } 74 75 virtual const MBlazeELFWriterInfo *getELFWriterInfo() const { 76 return &ELFWriterInfo; 77 } 78 79 // Pass Pipeline Configuration 80 virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level Opt); 81 virtual bool addPreEmitPass(PassManagerBase &PM,CodeGenOpt::Level Opt); 82 }; 83} // End llvm namespace 84 85#endif 86