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