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 25namespace llvm { 26 27/// SPUTargetMachine 28/// 29class SPUTargetMachine : public LLVMTargetMachine { 30 SPUSubtarget Subtarget; 31 const TargetData DataLayout; 32 SPUInstrInfo InstrInfo; 33 SPUFrameLowering FrameLowering; 34 SPUTargetLowering TLInfo; 35 SPUSelectionDAGInfo TSInfo; 36 InstrItineraryData InstrItins; 37public: 38 SPUTargetMachine(const Target &T, StringRef TT, 39 StringRef CPU, StringRef FS, const TargetOptions &Options, 40 Reloc::Model RM, CodeModel::Model CM, 41 CodeGenOpt::Level OL); 42 43 /// Return the subtarget implementation object 44 virtual const SPUSubtarget *getSubtargetImpl() const { 45 return &Subtarget; 46 } 47 virtual const SPUInstrInfo *getInstrInfo() const { 48 return &InstrInfo; 49 } 50 virtual const SPUFrameLowering *getFrameLowering() const { 51 return &FrameLowering; 52 } 53 /*! 54 \note Cell SPU does not support JIT today. It could support JIT at some 55 point. 56 */ 57 virtual TargetJITInfo *getJITInfo() { 58 return NULL; 59 } 60 61 virtual const SPUTargetLowering *getTargetLowering() const { 62 return &TLInfo; 63 } 64 65 virtual const SPUSelectionDAGInfo* getSelectionDAGInfo() const { 66 return &TSInfo; 67 } 68 69 virtual const SPURegisterInfo *getRegisterInfo() const { 70 return &InstrInfo.getRegisterInfo(); 71 } 72 73 virtual const TargetData *getTargetData() const { 74 return &DataLayout; 75 } 76 77 virtual const InstrItineraryData *getInstrItineraryData() const { 78 return &InstrItins; 79 } 80 81 // Pass Pipeline Configuration 82 virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 83}; 84 85} // end namespace llvm 86 87#endif 88