1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-- AMDGPUSubtarget.cpp - AMDGPU Subtarget Information ----------------===// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief Implements the AMDGPU specific subclass of TargetSubtarget. 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUSubtarget.h" 16cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "R600InstrInfo.h" 17cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "SIInstrInfo.h" 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 19f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardusing namespace llvm; 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "amdgpu-subtarget" 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_SUBTARGETINFO_ENUM 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_SUBTARGETINFO_TARGET_DESC 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_SUBTARGETINFO_CTOR 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenSubtargetInfo.inc" 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesAMDGPUSubtarget::AMDGPUSubtarget(StringRef TT, StringRef GPU, StringRef FS) : 29cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines AMDGPUGenSubtargetInfo(TT, GPU, FS), 30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines DevName(GPU), 31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Is64bit(false), 32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines DumpCode(false), 33cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines R600ALUInst(false), 34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines HasVertexCache(false), 35cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines TexVTXClauseSize(0), 36cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Gen(AMDGPUSubtarget::R600), 37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines FP64(false), 38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines CaymanISA(false), 39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EnableIRStructurizer(true), 40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EnableIfCvt(true), 41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines WavefrontSize(0), 42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines CFALUBug(false), 43cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines LocalMemorySize(0), 44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines InstrItins(getInstrItineraryForCPU(GPU)) { 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard ParseSubtargetFeatures(GPU, FS); 46f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 47cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines if (getGeneration() <= AMDGPUSubtarget::NORTHERN_ISLANDS) { 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines InstrInfo.reset(new R600InstrInfo(*this)); 49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } else { 50cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines InstrInfo.reset(new SIInstrInfo(*this)); 51cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 53cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 54cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesunsigned AMDGPUSubtarget::getStackEntrySize() const { 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines assert(getGeneration() <= NORTHERN_ISLANDS); 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines switch(getWavefrontSize()) { 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case 16: 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return 8; 5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case 32: 60cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return hasCaymanISA() ? 4 : 8; 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines case 64: 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return 4; 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines default: 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines llvm_unreachable("Illegal wavefront size."); 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 67