1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//=====-- AMDGPUSubtarget.h - Define Subtarget for the AMDIL ---*- C++ -*-====// 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 AMDGPU specific subclass of TargetSubtarget. 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_TARGET_R600_AMDGPUSUBTARGET_H 1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_TARGET_R600_AMDGPUSUBTARGET_H 173ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard#include "AMDGPU.h" 1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "AMDGPUFrameLowering.h" 19c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines#include "AMDGPUInstrInfo.h" 2037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "AMDGPUIntrinsicInfo.h" 2137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "AMDGPUSubtarget.h" 2237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "R600ISelLowering.h" 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/ADT/StringExtras.h" 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/ADT/StringRef.h" 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/Target/TargetSubtargetInfo.h" 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define GET_SUBTARGETINFO_HEADER 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenSubtargetInfo.inc" 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 30f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesclass SIMachineFunctionInfo; 33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 34f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass AMDGPUSubtarget : public AMDGPUGenSubtargetInfo { 35c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 363ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardpublic: 373ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard enum Generation { 383ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard R600 = 0, 393ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard R700, 403ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard EVERGREEN, 413ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard NORTHERN_ISLANDS, 4254328c772c5519e56c13667c2b1d1e830580c44dTom Stellard SOUTHERN_ISLANDS, 43ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SEA_ISLANDS, 44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines VOLCANIC_ISLANDS, 453ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard }; 463ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard 474c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar enum { 484c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar FIXED_SGPR_COUNT_FOR_INIT_BUG = 80 494c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar }; 504c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 51f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardprivate: 52f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard std::string DevName; 53f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool Is64bit; 54f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool DumpCode; 55f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard bool R600ALUInst; 56631591e6f3e5119d8a8b1c853279bc4ac7ace4a0Vincent Lejeune bool HasVertexCache; 57dcfcf1d1ffe72d9c25564a2b8b53763a28648e97Vincent Lejeune short TexVTXClauseSize; 58c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Generation Gen; 593ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard bool FP64; 6037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool FP64Denormals; 6137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool FP32Denormals; 62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool FastFMAF32; 633ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard bool CaymanISA; 6437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool FlatAddressSpace; 65de28bdadff78ceea6bb05e23dc3b4cc92fa359edTom Stellard bool EnableIRStructurizer; 6637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool EnablePromoteAlloca; 67ef37e453c407675ab5934d2f6bcec706b7810878Tom Stellard bool EnableIfCvt; 6837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool EnableLoadStoreOpt; 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned WavefrontSize; 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool CFALUBug; 71c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines int LocalMemorySize; 72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool EnableVGPRSpilling; 734c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar bool SGPRInitBug; 742c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar bool IsGCN; 752c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar bool GCN1Encoding; 762c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar bool GCN3Encoding; 77f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 7837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines AMDGPUFrameLowering FrameLowering; 7937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines std::unique_ptr<AMDGPUTargetLowering> TLInfo; 8037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines std::unique_ptr<AMDGPUInstrInfo> InstrInfo; 81f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard InstrItineraryData InstrItins; 82ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Triple TargetTriple; 83f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 84f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardpublic: 8537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines AMDGPUSubtarget(StringRef TT, StringRef CPU, StringRef FS, TargetMachine &TM); 86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines AMDGPUSubtarget &initializeSubtargetDependencies(StringRef TT, StringRef GPU, 87ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines StringRef FS); 88f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 8937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines const AMDGPUFrameLowering *getFrameLowering() const override { 9037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return &FrameLowering; 9137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 9237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines const AMDGPUInstrInfo *getInstrInfo() const override { 93c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return InstrInfo.get(); 94c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 9537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines const AMDGPURegisterInfo *getRegisterInfo() const override { 9637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return &InstrInfo->getRegisterInfo(); 9737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 9837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines AMDGPUTargetLowering *getTargetLowering() const override { 9937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return TLInfo.get(); 10037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 10137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines const InstrItineraryData *getInstrItineraryData() const override { 10237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return &InstrItins; 103c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 104c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 106f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 107c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool is64bit() const { 108c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return Is64bit; 109c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 110c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 111c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool hasVertexCache() const { 112c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return HasVertexCache; 113c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 114c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 115c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines short getTexVTXClauseSize() const { 11637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return TexVTXClauseSize; 117c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 118c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 119c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines Generation getGeneration() const { 120c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return Gen; 121c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 122c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 123c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool hasHWFP64() const { 124c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return FP64; 125c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 126c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 127c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool hasCaymanISA() const { 128c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return CaymanISA; 129c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 13036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 13137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool hasFP32Denormals() const { 13237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return FP32Denormals; 13337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 13437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 13537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool hasFP64Denormals() const { 13637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return FP64Denormals; 13737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 13837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 139ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool hasFastFMAF32() const { 140ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return FastFMAF32; 141ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 142ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 14337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool hasFlatAddressSpace() const { 14437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return FlatAddressSpace; 14537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 14637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 14736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool hasBFE() const { 14836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return (getGeneration() >= EVERGREEN); 14936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 15036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 151c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool hasBFI() const { 152c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return (getGeneration() >= EVERGREEN); 153c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 154c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 15536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool hasBFM() const { 15636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return hasBFE(); 15736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 15836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 159c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool hasBCNT(unsigned Size) const { 160c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines if (Size == 32) 161c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return (getGeneration() >= EVERGREEN); 162c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 16337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines if (Size == 64) 16437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return (getGeneration() >= SOUTHERN_ISLANDS); 16537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 16637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return false; 167c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 168c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 169dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool hasMulU24() const { 170dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return (getGeneration() >= EVERGREEN); 171dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 172dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 173dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool hasMulI24() const { 174dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines return (getGeneration() >= SOUTHERN_ISLANDS || 175dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines hasCaymanISA()); 176dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines } 177dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 17837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool hasFFBL() const { 17937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return (getGeneration() >= EVERGREEN); 18037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 18137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 18237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool hasFFBH() const { 18337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return (getGeneration() >= EVERGREEN); 18437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 18537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 186c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool IsIRStructurizerEnabled() const { 187c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return EnableIRStructurizer; 188c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 189c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 19037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool isPromoteAllocaEnabled() const { 19137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return EnablePromoteAlloca; 19237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 19337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 194c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool isIfCvtEnabled() const { 195c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return EnableIfCvt; 196c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 197c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 19837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines bool loadStoreOptEnabled() const { 19937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return EnableLoadStoreOpt; 20037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 20137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 202c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines unsigned getWavefrontSize() const { 203c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return WavefrontSize; 204c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 205c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 20636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned getStackEntrySize() const; 207c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 208c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool hasCFAluBug() const { 209c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines assert(getGeneration() <= NORTHERN_ISLANDS); 210c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return CFALUBug; 211c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 212c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 213c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines int getLocalMemorySize() const { 214c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return LocalMemorySize; 215c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 216f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 2174c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar bool hasSGPRInitBug() const { 2184c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return SGPRInitBug; 2194c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar } 2204c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar 221ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines unsigned getAmdKernelCodeChipID() const; 222ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 223dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines bool enableMachineScheduler() const override { 224ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return true; 225f45edcc3818757234c20d4d5975c0b992bf1f95eAndrew Trick } 226f45edcc3818757234c20d4d5975c0b992bf1f95eAndrew Trick 227ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines void overrideSchedPolicy(MachineSchedPolicy &Policy, 228ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MachineInstr *begin, MachineInstr *end, 229ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines unsigned NumRegionInstrs) const override; 230ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 231f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard // Helper functions to simplify if statements 232c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool isTargetELF() const { 233c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return false; 234c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 235f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 236c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines StringRef getDeviceName() const { 237c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return DevName; 238c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 239c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines 240c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool dumpCode() const { 241c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return DumpCode; 242c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 243c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines bool r600ALUEncoding() const { 244c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines return R600ALUInst; 245c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines } 246ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool isAmdHsaOS() const { 247ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return TargetTriple.getOS() == Triple::AMDHSA; 248ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 249ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool isVGPRSpillingEnabled(const SIMachineFunctionInfo *MFI) const; 250ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 251ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines unsigned getMaxWavesPerCU() const { 252ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (getGeneration() >= AMDGPUSubtarget::SOUTHERN_ISLANDS) 253ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return 10; 254ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 255ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FIXME: Not sure what this is for other subtagets. 256ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines llvm_unreachable("do not know max waves per CU for this subtarget."); 257ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 258ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 259ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool enableSubRegLiveness() const override { 260ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return false; 261ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 262f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 263f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 264f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm 265f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 26637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif 267