1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDGPUTargetMachine.h - AMDGPU TargetMachine Interface --*- C++ -*-===// 2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// The LLVM Compiler Infrastructure 4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source 6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details. 7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===// 9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 10fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard// The AMDGPU TargetMachine interface definition for hw codgen targets. 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===// 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#ifndef AMDGPU_TARGET_MACHINE_H 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define AMDGPU_TARGET_MACHINE_H 16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDGPUInstrInfo.h" 18cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard#include "AMDGPUSubtarget.h" 1949fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard#include "AMDILFrameLowering.h" 2049fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard#include "AMDILIntrinsicInfo.h" 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "R600ISelLowering.h" 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/ADT/OwningPtr.h" 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/Target/TargetData.h" 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardnamespace llvm { 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom StellardMCAsmInfo* createMCAsmInfo(const Target &T, StringRef TT); 28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 2949fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellardclass AMDGPUTargetMachine : public LLVMTargetMachine { 3049fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard 31cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard AMDGPUSubtarget Subtarget; 3249fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard const TargetData DataLayout; 332f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard AMDGPUFrameLowering FrameLowering; 342f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard AMDGPUIntrinsicInfo IntrinsicInfo; 3549fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard const AMDGPUInstrInfo * InstrInfo; 3649fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard AMDGPUTargetLowering * TLInfo; 37cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard const InstrItineraryData* InstrItins; 3849fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard bool mDump; 39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardpublic: 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard AMDGPUTargetMachine(const Target &T, StringRef TT, StringRef FS, 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard StringRef CPU, 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard TargetOptions Options, 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard Reloc::Model RM, CodeModel::Model CM, 45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard CodeGenOpt::Level OL); 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard ~AMDGPUTargetMachine(); 472f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard virtual const AMDGPUFrameLowering* getFrameLowering() const { 4849fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard return &FrameLowering; 4949fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard } 502f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard virtual const AMDGPUIntrinsicInfo* getIntrinsicInfo() const { 5149fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard return &IntrinsicInfo; 5249fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard } 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard virtual const AMDGPUInstrInfo *getInstrInfo() const {return InstrInfo;} 54cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard virtual const AMDGPUSubtarget *getSubtargetImpl() const {return &Subtarget; } 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard virtual const AMDGPURegisterInfo *getRegisterInfo() const { 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return &InstrInfo->getRegisterInfo(); 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard virtual AMDGPUTargetLowering * getTargetLowering() const { 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return TLInfo; 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 61cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard virtual const InstrItineraryData* getInstrItineraryData() const { 62cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard return InstrItins; 63cd287301ec598d2811f3f85c03d23bae01be2359Tom Stellard } 6449fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellard virtual const TargetData* getTargetData() const { return &DataLayout; } 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard virtual TargetPassConfig *createPassConfig(PassManagerBase &PM); 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}; 67a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 68bcfc97dbf40c256ed59c2424e0c55b845f0f2569Tom Stellard} // End namespace llvm 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 70bcfc97dbf40c256ed59c2424e0c55b845f0f2569Tom Stellard#endif // AMDGPU_TARGET_MACHINE_H 71