1 //===-- AMDGPUSubtarget.cpp - AMDGPU Subtarget Information ----------------===// 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 /// \file 11 /// \brief Implements the AMDGPU specific subclass of TargetSubtarget. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "AMDGPUSubtarget.h" 16 #include "R600InstrInfo.h" 17 #include "SIInstrInfo.h" 18 19 using namespace llvm; 20 21 #define DEBUG_TYPE "amdgpu-subtarget" 22 23 #define GET_SUBTARGETINFO_ENUM 24 #define GET_SUBTARGETINFO_TARGET_DESC 25 #define GET_SUBTARGETINFO_CTOR 26 #include "AMDGPUGenSubtargetInfo.inc" 27 28 AMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS) : 29 AMDGPUGenSubtargetInfo(TT, GPU, FS), 30 DevName(GPU), 31 Is64bit(false), 32 DumpCode(false), 33 R600ALUInst(false), 34 HasVertexCache(false), 35 TexVTXClauseSize(0), 36 Gen(AMDGPUSubtarget::R600), 37 FP64(false), 38 CaymanISA(false), 39 EnableIRStructurizer(true), 40 EnableIfCvt(true), 41 WavefrontSize(0), 42 CFALUBug(false), 43 LocalMemorySize(0), 44 InstrItins(getInstrItineraryForCPU(GPU)) { 45 ParseSubtargetFeatures(GPU, FS); 46 47 if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) { 48 InstrInfo.reset(new R600InstrInfo(*this)); 49 } else { 50 InstrInfo.reset(new SIInstrInfo(*this)); 51 } 52 } 53 54 unsigned AMDGPUSubtarget::getStackEntrySize() const { 55 assert(getGeneration() <= NORTHERN_ISLANDS); 56 switch(getWavefrontSize()) { 57 case 16: 58 return 8; 59 case 32: 60 return hasCaymanISA() ? 4 : 8; 61 case 64: 62 return 4; 63 default: 64 llvm_unreachable("Illegal wavefront size."); 65 } 66 } 67