NVPTXTargetMachine.h revision 245431
1234285Sdim//===-- NVPTXTargetMachine.h - Define TargetMachine for NVPTX ---*- C++ -*-===// 2234285Sdim// 3234285Sdim// The LLVM Compiler Infrastructure 4234285Sdim// 5234285Sdim// This file is distributed under the University of Illinois Open Source 6234285Sdim// License. See LICENSE.TXT for details. 7234285Sdim// 8234285Sdim//===----------------------------------------------------------------------===// 9234285Sdim// 10234285Sdim// This file declares the NVPTX specific subclass of TargetMachine. 11249423Sdim// 12249423Sdim//===----------------------------------------------------------------------===// 13249423Sdim 14234285Sdim 15234285Sdim#ifndef NVPTX_TARGETMACHINE_H 16234285Sdim#define NVPTX_TARGETMACHINE_H 17234285Sdim 18234285Sdim#include "NVPTXInstrInfo.h" 19234285Sdim#include "NVPTXISelLowering.h" 20234285Sdim#include "NVPTXRegisterInfo.h" 21234285Sdim#include "NVPTXSubtarget.h" 22234285Sdim#include "NVPTXFrameLowering.h" 23234285Sdim#include "ManagedStringPool.h" 24234285Sdim#include "llvm/DataLayout.h" 25234285Sdim#include "llvm/Target/TargetFrameLowering.h" 26234285Sdim#include "llvm/Target/TargetMachine.h" 27234285Sdim#include "llvm/Target/TargetSelectionDAGInfo.h" 28234285Sdim#include "llvm/Target/TargetTransformImpl.h" 29234285Sdim 30234285Sdimnamespace llvm { 31234285Sdim 32234285Sdim/// NVPTXTargetMachine 33234285Sdim/// 34234285Sdimclass NVPTXTargetMachine : public LLVMTargetMachine { 35234285Sdim NVPTXSubtarget Subtarget; 36234285Sdim const DataLayout DL; // Calculates type size & alignment 37234285Sdim NVPTXInstrInfo InstrInfo; 38234285Sdim NVPTXTargetLowering TLInfo; 39234285Sdim TargetSelectionDAGInfo TSInfo; 40234285Sdim 41234285Sdim // NVPTX does not have any call stack frame, but need a NVPTX specific 42234285Sdim // FrameLowering class because TargetFrameLowering is abstract. 43234285Sdim NVPTXFrameLowering FrameLowering; 44234285Sdim 45234285Sdim // Hold Strings that can be free'd all together with NVPTXTargetMachine 46234285Sdim ManagedStringPool ManagedStrPool; 47234285Sdim 48234285Sdim ScalarTargetTransformImpl STTI; 49234285Sdim VectorTargetTransformImpl VTTI; 50249423Sdim 51249423Sdim //bool addCommonCodeGenPasses(PassManagerBase &, CodeGenOpt::Level, 52234285Sdim // bool DisableVerify, MCContext *&OutCtx); 53234285Sdim 54234285Sdimpublic: 55234285Sdim NVPTXTargetMachine(const Target &T, StringRef TT, StringRef CPU, 56234285Sdim StringRef FS, const TargetOptions &Options, 57234285Sdim Reloc::Model RM, CodeModel::Model CM, 58234285Sdim CodeGenOpt::Level OP, 59234285Sdim bool is64bit); 60234285Sdim 61234285Sdim virtual const TargetFrameLowering *getFrameLowering() const { 62234285Sdim return &FrameLowering; 63234285Sdim } 64234285Sdim virtual const NVPTXInstrInfo *getInstrInfo() const { return &InstrInfo; } 65234285Sdim virtual const DataLayout *getDataLayout() const { return &DL;} 66234285Sdim virtual const NVPTXSubtarget *getSubtargetImpl() const { return &Subtarget;} 67234285Sdim 68234285Sdim virtual const NVPTXRegisterInfo *getRegisterInfo() const { 69234285Sdim return &(InstrInfo.getRegisterInfo()); 70234285Sdim } 71234285Sdim 72234285Sdim virtual NVPTXTargetLowering *getTargetLowering() const { 73234285Sdim return const_cast<NVPTXTargetLowering*>(&TLInfo); 74234285Sdim } 75234285Sdim 76234285Sdim virtual const TargetSelectionDAGInfo *getSelectionDAGInfo() const { 77234285Sdim return &TSInfo; 78234285Sdim } 79234285Sdim virtual const ScalarTargetTransformInfo *getScalarTargetTransformInfo()const { 80234285Sdim return &STTI; 81234285Sdim } 82234285Sdim virtual const VectorTargetTransformInfo *getVectorTargetTransformInfo()const { 83234285Sdim return &VTTI; 84234285Sdim } 85234285Sdim 86234285Sdim //virtual bool addInstSelector(PassManagerBase &PM, 87234285Sdim // CodeGenOpt::Level OptLevel); 88234285Sdim 89234285Sdim //virtual bool addPreRegAlloc(PassManagerBase &, CodeGenOpt::Level); 90234285Sdim 91234285Sdim ManagedStringPool *getManagedStrPool() const { 92234285Sdim return const_cast<ManagedStringPool*>(&ManagedStrPool); 93234285Sdim } 94234285Sdim 95234285Sdim virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 96234285Sdim 97234285Sdim // Emission of machine code through JITCodeEmitter is not supported. 98234285Sdim virtual bool addPassesToEmitMachineCode(PassManagerBase &, 99234285Sdim JITCodeEmitter &, 100234285Sdim bool = true) { 101234285Sdim return true; 102234285Sdim } 103234285Sdim 104249423Sdim // Emission of machine code through MCJIT is not supported. 105234285Sdim virtual bool addPassesToEmitMC(PassManagerBase &, 106234285Sdim MCContext *&, 107234285Sdim raw_ostream &, 108234285Sdim bool = true) { 109234285Sdim return true; 110249423Sdim } 111234285Sdim 112249423Sdim}; // NVPTXTargetMachine. 113234285Sdim 114243830Sdimclass NVPTXTargetMachine32 : public NVPTXTargetMachine { 115243830Sdim virtual void anchor(); 116234285Sdimpublic: 117243830Sdim NVPTXTargetMachine32(const Target &T, StringRef TT, StringRef CPU, 118234285Sdim StringRef FS, const TargetOptions &Options, 119234285Sdim Reloc::Model RM, CodeModel::Model CM, 120234285Sdim CodeGenOpt::Level OL); 121234285Sdim}; 122234285Sdim 123234285Sdimclass NVPTXTargetMachine64 : public NVPTXTargetMachine { 124234285Sdim virtual void anchor(); 125234285Sdimpublic: 126234285Sdim NVPTXTargetMachine64(const Target &T, StringRef TT, StringRef CPU, 127234285Sdim StringRef FS, const TargetOptions &Options, 128234285Sdim Reloc::Model RM, CodeModel::Model CM, 129234285Sdim CodeGenOpt::Level OL); 130234285Sdim}; 131234285Sdim 132234285Sdim 133234285Sdim} // end namespace llvm 134234285Sdim 135234285Sdim#endif 136234285Sdim