1 //===-- SPUTargetMachine.h - Define TargetMachine for Cell SPU ----*- 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 CellSPU-specific subclass of TargetMachine. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef SPU_TARGETMACHINE_H 15 #define SPU_TARGETMACHINE_H 16 17 #include "SPUSubtarget.h" 18 #include "SPUInstrInfo.h" 19 #include "SPUISelLowering.h" 20 #include "SPUSelectionDAGInfo.h" 21 #include "SPUFrameLowering.h" 22 #include "llvm/Target/TargetMachine.h" 23 #include "llvm/Target/TargetData.h" 24 25 namespace llvm { 26 class PassManager; 27 class GlobalValue; 28 class TargetFrameLowering; 29 30 /// SPUTargetMachine 31 /// 32 class SPUTargetMachine : public LLVMTargetMachine { 33 SPUSubtarget Subtarget; 34 const TargetData DataLayout; 35 SPUInstrInfo InstrInfo; 36 SPUFrameLowering FrameLowering; 37 SPUTargetLowering TLInfo; 38 SPUSelectionDAGInfo TSInfo; 39 InstrItineraryData InstrItins; 40 public: 41 SPUTargetMachine(const Target &T, StringRef TT, 42 StringRef CPU, StringRef FS, 43 Reloc::Model RM, CodeModel::Model CM); 44 45 /// Return the subtarget implementation object getSubtargetImpl()46 virtual const SPUSubtarget *getSubtargetImpl() const { 47 return &Subtarget; 48 } getInstrInfo()49 virtual const SPUInstrInfo *getInstrInfo() const { 50 return &InstrInfo; 51 } getFrameLowering()52 virtual const SPUFrameLowering *getFrameLowering() const { 53 return &FrameLowering; 54 } 55 /*! 56 \note Cell SPU does not support JIT today. It could support JIT at some 57 point. 58 */ getJITInfo()59 virtual TargetJITInfo *getJITInfo() { 60 return NULL; 61 } 62 getTargetLowering()63 virtual const SPUTargetLowering *getTargetLowering() const { 64 return &TLInfo; 65 } 66 getSelectionDAGInfo()67 virtual const SPUSelectionDAGInfo* getSelectionDAGInfo() const { 68 return &TSInfo; 69 } 70 getRegisterInfo()71 virtual const SPURegisterInfo *getRegisterInfo() const { 72 return &InstrInfo.getRegisterInfo(); 73 } 74 getTargetData()75 virtual const TargetData *getTargetData() const { 76 return &DataLayout; 77 } 78 getInstrItineraryData()79 virtual const InstrItineraryData *getInstrItineraryData() const { 80 return &InstrItins; 81 } 82 83 // Pass Pipeline Configuration 84 virtual bool addInstSelector(PassManagerBase &PM, 85 CodeGenOpt::Level OptLevel); 86 virtual bool addPreEmitPass(PassManagerBase &, CodeGenOpt::Level); 87 }; 88 89 } // end namespace llvm 90 91 #endif 92