1*9880d681SAndroid Build Coastguard Worker//===-- AMDGPU.td - AMDGPU Tablegen files --------*- tablegen -*-===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerinclude "llvm/Target/Target.td" 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker//===------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker// Subtarget Features (device properties) 14*9880d681SAndroid Build Coastguard Worker//===------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdef FeatureFP64 : SubtargetFeature<"fp64", 17*9880d681SAndroid Build Coastguard Worker "FP64", 18*9880d681SAndroid Build Coastguard Worker "true", 19*9880d681SAndroid Build Coastguard Worker "Enable double precision operations" 20*9880d681SAndroid Build Coastguard Worker>; 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdef FeatureFastFMAF32 : SubtargetFeature<"fast-fmaf", 23*9880d681SAndroid Build Coastguard Worker "FastFMAF32", 24*9880d681SAndroid Build Coastguard Worker "true", 25*9880d681SAndroid Build Coastguard Worker "Assuming f32 fma is at least as fast as mul + add" 26*9880d681SAndroid Build Coastguard Worker>; 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdef HalfRate64Ops : SubtargetFeature<"half-rate-64-ops", 29*9880d681SAndroid Build Coastguard Worker "HalfRate64Ops", 30*9880d681SAndroid Build Coastguard Worker "true", 31*9880d681SAndroid Build Coastguard Worker "Most fp64 instructions are half rate instead of quarter" 32*9880d681SAndroid Build Coastguard Worker>; 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdef FeatureR600ALUInst : SubtargetFeature<"R600ALUInst", 35*9880d681SAndroid Build Coastguard Worker "R600ALUInst", 36*9880d681SAndroid Build Coastguard Worker "false", 37*9880d681SAndroid Build Coastguard Worker "Older version of ALU instructions encoding" 38*9880d681SAndroid Build Coastguard Worker>; 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdef FeatureVertexCache : SubtargetFeature<"HasVertexCache", 41*9880d681SAndroid Build Coastguard Worker "HasVertexCache", 42*9880d681SAndroid Build Coastguard Worker "true", 43*9880d681SAndroid Build Coastguard Worker "Specify use of dedicated vertex cache" 44*9880d681SAndroid Build Coastguard Worker>; 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdef FeatureCaymanISA : SubtargetFeature<"caymanISA", 47*9880d681SAndroid Build Coastguard Worker "CaymanISA", 48*9880d681SAndroid Build Coastguard Worker "true", 49*9880d681SAndroid Build Coastguard Worker "Use Cayman ISA" 50*9880d681SAndroid Build Coastguard Worker>; 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdef FeatureCFALUBug : SubtargetFeature<"cfalubug", 53*9880d681SAndroid Build Coastguard Worker "CFALUBug", 54*9880d681SAndroid Build Coastguard Worker "true", 55*9880d681SAndroid Build Coastguard Worker "GPU has CF_ALU bug" 56*9880d681SAndroid Build Coastguard Worker>; 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdef FeatureFlatAddressSpace : SubtargetFeature<"flat-address-space", 59*9880d681SAndroid Build Coastguard Worker "FlatAddressSpace", 60*9880d681SAndroid Build Coastguard Worker "true", 61*9880d681SAndroid Build Coastguard Worker "Support flat address space" 62*9880d681SAndroid Build Coastguard Worker>; 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdef FeatureUnalignedBufferAccess : SubtargetFeature<"unaligned-buffer-access", 65*9880d681SAndroid Build Coastguard Worker "UnalignedBufferAccess", 66*9880d681SAndroid Build Coastguard Worker "true", 67*9880d681SAndroid Build Coastguard Worker "Support unaligned global loads and stores" 68*9880d681SAndroid Build Coastguard Worker>; 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdef FeatureXNACK : SubtargetFeature<"xnack", 71*9880d681SAndroid Build Coastguard Worker "EnableXNACK", 72*9880d681SAndroid Build Coastguard Worker "true", 73*9880d681SAndroid Build Coastguard Worker "Enable XNACK support" 74*9880d681SAndroid Build Coastguard Worker>; 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdef FeatureSGPRInitBug : SubtargetFeature<"sgpr-init-bug", 77*9880d681SAndroid Build Coastguard Worker "SGPRInitBug", 78*9880d681SAndroid Build Coastguard Worker "true", 79*9880d681SAndroid Build Coastguard Worker "VI SGPR initilization bug requiring a fixed SGPR allocation size" 80*9880d681SAndroid Build Coastguard Worker>; 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerclass SubtargetFeatureFetchLimit <string Value> : 83*9880d681SAndroid Build Coastguard Worker SubtargetFeature <"fetch"#Value, 84*9880d681SAndroid Build Coastguard Worker "TexVTXClauseSize", 85*9880d681SAndroid Build Coastguard Worker Value, 86*9880d681SAndroid Build Coastguard Worker "Limit the maximum number of fetches in a clause to "#Value 87*9880d681SAndroid Build Coastguard Worker>; 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdef FeatureFetchLimit8 : SubtargetFeatureFetchLimit <"8">; 90*9880d681SAndroid Build Coastguard Workerdef FeatureFetchLimit16 : SubtargetFeatureFetchLimit <"16">; 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerclass SubtargetFeatureWavefrontSize <int Value> : SubtargetFeature< 93*9880d681SAndroid Build Coastguard Worker "wavefrontsize"#Value, 94*9880d681SAndroid Build Coastguard Worker "WavefrontSize", 95*9880d681SAndroid Build Coastguard Worker !cast<string>(Value), 96*9880d681SAndroid Build Coastguard Worker "The number of threads per wavefront" 97*9880d681SAndroid Build Coastguard Worker>; 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdef FeatureWavefrontSize16 : SubtargetFeatureWavefrontSize<16>; 100*9880d681SAndroid Build Coastguard Workerdef FeatureWavefrontSize32 : SubtargetFeatureWavefrontSize<32>; 101*9880d681SAndroid Build Coastguard Workerdef FeatureWavefrontSize64 : SubtargetFeatureWavefrontSize<64>; 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerclass SubtargetFeatureLDSBankCount <int Value> : SubtargetFeature < 104*9880d681SAndroid Build Coastguard Worker "ldsbankcount"#Value, 105*9880d681SAndroid Build Coastguard Worker "LDSBankCount", 106*9880d681SAndroid Build Coastguard Worker !cast<string>(Value), 107*9880d681SAndroid Build Coastguard Worker "The number of LDS banks per compute unit." 108*9880d681SAndroid Build Coastguard Worker>; 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerdef FeatureLDSBankCount16 : SubtargetFeatureLDSBankCount<16>; 111*9880d681SAndroid Build Coastguard Workerdef FeatureLDSBankCount32 : SubtargetFeatureLDSBankCount<32>; 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerclass SubtargetFeatureISAVersion <int Major, int Minor, int Stepping> 114*9880d681SAndroid Build Coastguard Worker : SubtargetFeature < 115*9880d681SAndroid Build Coastguard Worker "isaver"#Major#"."#Minor#"."#Stepping, 116*9880d681SAndroid Build Coastguard Worker "IsaVersion", 117*9880d681SAndroid Build Coastguard Worker "ISAVersion"#Major#"_"#Minor#"_"#Stepping, 118*9880d681SAndroid Build Coastguard Worker "Instruction set version number" 119*9880d681SAndroid Build Coastguard Worker>; 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdef FeatureISAVersion7_0_0 : SubtargetFeatureISAVersion <7,0,0>; 122*9880d681SAndroid Build Coastguard Workerdef FeatureISAVersion7_0_1 : SubtargetFeatureISAVersion <7,0,1>; 123*9880d681SAndroid Build Coastguard Workerdef FeatureISAVersion8_0_0 : SubtargetFeatureISAVersion <8,0,0>; 124*9880d681SAndroid Build Coastguard Workerdef FeatureISAVersion8_0_1 : SubtargetFeatureISAVersion <8,0,1>; 125*9880d681SAndroid Build Coastguard Workerdef FeatureISAVersion8_0_3 : SubtargetFeatureISAVersion <8,0,3>; 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerclass SubtargetFeatureLocalMemorySize <int Value> : SubtargetFeature< 128*9880d681SAndroid Build Coastguard Worker "localmemorysize"#Value, 129*9880d681SAndroid Build Coastguard Worker "LocalMemorySize", 130*9880d681SAndroid Build Coastguard Worker !cast<string>(Value), 131*9880d681SAndroid Build Coastguard Worker "The size of local memory in bytes" 132*9880d681SAndroid Build Coastguard Worker>; 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdef FeatureGCN : SubtargetFeature<"gcn", 135*9880d681SAndroid Build Coastguard Worker "IsGCN", 136*9880d681SAndroid Build Coastguard Worker "true", 137*9880d681SAndroid Build Coastguard Worker "GCN or newer GPU" 138*9880d681SAndroid Build Coastguard Worker>; 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Workerdef FeatureGCN1Encoding : SubtargetFeature<"gcn1-encoding", 141*9880d681SAndroid Build Coastguard Worker "GCN1Encoding", 142*9880d681SAndroid Build Coastguard Worker "true", 143*9880d681SAndroid Build Coastguard Worker "Encoding format for SI and CI" 144*9880d681SAndroid Build Coastguard Worker>; 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerdef FeatureGCN3Encoding : SubtargetFeature<"gcn3-encoding", 147*9880d681SAndroid Build Coastguard Worker "GCN3Encoding", 148*9880d681SAndroid Build Coastguard Worker "true", 149*9880d681SAndroid Build Coastguard Worker "Encoding format for VI" 150*9880d681SAndroid Build Coastguard Worker>; 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerdef FeatureCIInsts : SubtargetFeature<"ci-insts", 153*9880d681SAndroid Build Coastguard Worker "CIInsts", 154*9880d681SAndroid Build Coastguard Worker "true", 155*9880d681SAndroid Build Coastguard Worker "Additional intstructions for CI+" 156*9880d681SAndroid Build Coastguard Worker>; 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerdef FeatureSMemRealTime : SubtargetFeature<"s-memrealtime", 159*9880d681SAndroid Build Coastguard Worker "HasSMemRealTime", 160*9880d681SAndroid Build Coastguard Worker "true", 161*9880d681SAndroid Build Coastguard Worker "Has s_memrealtime instruction" 162*9880d681SAndroid Build Coastguard Worker>; 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerdef Feature16BitInsts : SubtargetFeature<"16-bit-insts", 165*9880d681SAndroid Build Coastguard Worker "Has16BitInsts", 166*9880d681SAndroid Build Coastguard Worker "true", 167*9880d681SAndroid Build Coastguard Worker "Has i16/f16 instructions" 168*9880d681SAndroid Build Coastguard Worker>; 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker//===------------------------------------------------------------===// 171*9880d681SAndroid Build Coastguard Worker// Subtarget Features (options and debugging) 172*9880d681SAndroid Build Coastguard Worker//===------------------------------------------------------------===// 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker// Some instructions do not support denormals despite this flag. Using 175*9880d681SAndroid Build Coastguard Worker// fp32 denormals also causes instructions to run at the double 176*9880d681SAndroid Build Coastguard Worker// precision rate for the device. 177*9880d681SAndroid Build Coastguard Workerdef FeatureFP32Denormals : SubtargetFeature<"fp32-denormals", 178*9880d681SAndroid Build Coastguard Worker "FP32Denormals", 179*9880d681SAndroid Build Coastguard Worker "true", 180*9880d681SAndroid Build Coastguard Worker "Enable single precision denormal handling" 181*9880d681SAndroid Build Coastguard Worker>; 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Workerdef FeatureFP64Denormals : SubtargetFeature<"fp64-denormals", 184*9880d681SAndroid Build Coastguard Worker "FP64Denormals", 185*9880d681SAndroid Build Coastguard Worker "true", 186*9880d681SAndroid Build Coastguard Worker "Enable double precision denormal handling", 187*9880d681SAndroid Build Coastguard Worker [FeatureFP64] 188*9880d681SAndroid Build Coastguard Worker>; 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerdef FeatureFPExceptions : SubtargetFeature<"fp-exceptions", 191*9880d681SAndroid Build Coastguard Worker "FPExceptions", 192*9880d681SAndroid Build Coastguard Worker "true", 193*9880d681SAndroid Build Coastguard Worker "Enable floating point exceptions" 194*9880d681SAndroid Build Coastguard Worker>; 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerclass FeatureMaxPrivateElementSize<int size> : SubtargetFeature< 197*9880d681SAndroid Build Coastguard Worker "max-private-element-size-"#size, 198*9880d681SAndroid Build Coastguard Worker "MaxPrivateElementSize", 199*9880d681SAndroid Build Coastguard Worker !cast<string>(size), 200*9880d681SAndroid Build Coastguard Worker "Maximum private access size may be "#size 201*9880d681SAndroid Build Coastguard Worker>; 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerdef FeatureMaxPrivateElementSize4 : FeatureMaxPrivateElementSize<4>; 204*9880d681SAndroid Build Coastguard Workerdef FeatureMaxPrivateElementSize8 : FeatureMaxPrivateElementSize<8>; 205*9880d681SAndroid Build Coastguard Workerdef FeatureMaxPrivateElementSize16 : FeatureMaxPrivateElementSize<16>; 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdef FeatureVGPRSpilling : SubtargetFeature<"vgpr-spilling", 208*9880d681SAndroid Build Coastguard Worker "EnableVGPRSpilling", 209*9880d681SAndroid Build Coastguard Worker "true", 210*9880d681SAndroid Build Coastguard Worker "Enable spilling of VGPRs to scratch memory" 211*9880d681SAndroid Build Coastguard Worker>; 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdef FeatureDumpCode : SubtargetFeature <"DumpCode", 214*9880d681SAndroid Build Coastguard Worker "DumpCode", 215*9880d681SAndroid Build Coastguard Worker "true", 216*9880d681SAndroid Build Coastguard Worker "Dump MachineInstrs in the CodeEmitter" 217*9880d681SAndroid Build Coastguard Worker>; 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerdef FeatureDumpCodeLower : SubtargetFeature <"dumpcode", 220*9880d681SAndroid Build Coastguard Worker "DumpCode", 221*9880d681SAndroid Build Coastguard Worker "true", 222*9880d681SAndroid Build Coastguard Worker "Dump MachineInstrs in the CodeEmitter" 223*9880d681SAndroid Build Coastguard Worker>; 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Workerdef FeaturePromoteAlloca : SubtargetFeature <"promote-alloca", 226*9880d681SAndroid Build Coastguard Worker "EnablePromoteAlloca", 227*9880d681SAndroid Build Coastguard Worker "true", 228*9880d681SAndroid Build Coastguard Worker "Enable promote alloca pass" 229*9880d681SAndroid Build Coastguard Worker>; 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Worker// XXX - This should probably be removed once enabled by default 232*9880d681SAndroid Build Coastguard Workerdef FeatureEnableLoadStoreOpt : SubtargetFeature <"load-store-opt", 233*9880d681SAndroid Build Coastguard Worker "EnableLoadStoreOpt", 234*9880d681SAndroid Build Coastguard Worker "true", 235*9880d681SAndroid Build Coastguard Worker "Enable SI load/store optimizer pass" 236*9880d681SAndroid Build Coastguard Worker>; 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker// Performance debugging feature. Allow using DS instruction immediate 239*9880d681SAndroid Build Coastguard Worker// offsets even if the base pointer can't be proven to be base. On SI, 240*9880d681SAndroid Build Coastguard Worker// base pointer values that won't give the same result as a 16-bit add 241*9880d681SAndroid Build Coastguard Worker// are not safe to fold, but this will override the conservative test 242*9880d681SAndroid Build Coastguard Worker// for the base pointer. 243*9880d681SAndroid Build Coastguard Workerdef FeatureEnableUnsafeDSOffsetFolding : SubtargetFeature < 244*9880d681SAndroid Build Coastguard Worker "unsafe-ds-offset-folding", 245*9880d681SAndroid Build Coastguard Worker "EnableUnsafeDSOffsetFolding", 246*9880d681SAndroid Build Coastguard Worker "true", 247*9880d681SAndroid Build Coastguard Worker "Force using DS instruction immediate offsets on SI" 248*9880d681SAndroid Build Coastguard Worker>; 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdef FeatureEnableSIScheduler : SubtargetFeature<"si-scheduler", 251*9880d681SAndroid Build Coastguard Worker "EnableSIScheduler", 252*9880d681SAndroid Build Coastguard Worker "true", 253*9880d681SAndroid Build Coastguard Worker "Enable SI Machine Scheduler" 254*9880d681SAndroid Build Coastguard Worker>; 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Workerdef FeatureFlatForGlobal : SubtargetFeature<"flat-for-global", 257*9880d681SAndroid Build Coastguard Worker "FlatForGlobal", 258*9880d681SAndroid Build Coastguard Worker "true", 259*9880d681SAndroid Build Coastguard Worker "Force to generate flat instruction for global" 260*9880d681SAndroid Build Coastguard Worker>; 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Worker// Dummy feature used to disable assembler instructions. 263*9880d681SAndroid Build Coastguard Workerdef FeatureDisable : SubtargetFeature<"", 264*9880d681SAndroid Build Coastguard Worker "FeatureDisable","true", 265*9880d681SAndroid Build Coastguard Worker "Dummy feature to disable assembler instructions" 266*9880d681SAndroid Build Coastguard Worker>; 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerclass SubtargetFeatureGeneration <string Value, 269*9880d681SAndroid Build Coastguard Worker list<SubtargetFeature> Implies> : 270*9880d681SAndroid Build Coastguard Worker SubtargetFeature <Value, "Gen", "AMDGPUSubtarget::"#Value, 271*9880d681SAndroid Build Coastguard Worker Value#" GPU generation", Implies>; 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Workerdef FeatureLocalMemorySize0 : SubtargetFeatureLocalMemorySize<0>; 274*9880d681SAndroid Build Coastguard Workerdef FeatureLocalMemorySize32768 : SubtargetFeatureLocalMemorySize<32768>; 275*9880d681SAndroid Build Coastguard Workerdef FeatureLocalMemorySize65536 : SubtargetFeatureLocalMemorySize<65536>; 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdef FeatureR600 : SubtargetFeatureGeneration<"R600", 278*9880d681SAndroid Build Coastguard Worker [FeatureR600ALUInst, FeatureFetchLimit8, FeatureLocalMemorySize0] 279*9880d681SAndroid Build Coastguard Worker>; 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Workerdef FeatureR700 : SubtargetFeatureGeneration<"R700", 282*9880d681SAndroid Build Coastguard Worker [FeatureFetchLimit16, FeatureLocalMemorySize0] 283*9880d681SAndroid Build Coastguard Worker>; 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Workerdef FeatureEvergreen : SubtargetFeatureGeneration<"EVERGREEN", 286*9880d681SAndroid Build Coastguard Worker [FeatureFetchLimit16, FeatureLocalMemorySize32768] 287*9880d681SAndroid Build Coastguard Worker>; 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Workerdef FeatureNorthernIslands : SubtargetFeatureGeneration<"NORTHERN_ISLANDS", 290*9880d681SAndroid Build Coastguard Worker [FeatureFetchLimit16, FeatureWavefrontSize64, 291*9880d681SAndroid Build Coastguard Worker FeatureLocalMemorySize32768] 292*9880d681SAndroid Build Coastguard Worker>; 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Workerdef FeatureSouthernIslands : SubtargetFeatureGeneration<"SOUTHERN_ISLANDS", 295*9880d681SAndroid Build Coastguard Worker [FeatureFP64, FeatureLocalMemorySize32768, 296*9880d681SAndroid Build Coastguard Worker FeatureWavefrontSize64, FeatureGCN, FeatureGCN1Encoding, 297*9880d681SAndroid Build Coastguard Worker FeatureLDSBankCount32] 298*9880d681SAndroid Build Coastguard Worker>; 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Workerdef FeatureSeaIslands : SubtargetFeatureGeneration<"SEA_ISLANDS", 301*9880d681SAndroid Build Coastguard Worker [FeatureFP64, FeatureLocalMemorySize65536, 302*9880d681SAndroid Build Coastguard Worker FeatureWavefrontSize64, FeatureGCN, FeatureFlatAddressSpace, 303*9880d681SAndroid Build Coastguard Worker FeatureGCN1Encoding, FeatureCIInsts] 304*9880d681SAndroid Build Coastguard Worker>; 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Workerdef FeatureVolcanicIslands : SubtargetFeatureGeneration<"VOLCANIC_ISLANDS", 307*9880d681SAndroid Build Coastguard Worker [FeatureFP64, FeatureLocalMemorySize65536, 308*9880d681SAndroid Build Coastguard Worker FeatureWavefrontSize64, FeatureFlatAddressSpace, FeatureGCN, 309*9880d681SAndroid Build Coastguard Worker FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts, 310*9880d681SAndroid Build Coastguard Worker FeatureSMemRealTime 311*9880d681SAndroid Build Coastguard Worker ] 312*9880d681SAndroid Build Coastguard Worker>; 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 315*9880d681SAndroid Build Coastguard Worker// Debugger related subtarget features. 316*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard Workerdef FeatureDebuggerInsertNops : SubtargetFeature< 319*9880d681SAndroid Build Coastguard Worker "amdgpu-debugger-insert-nops", 320*9880d681SAndroid Build Coastguard Worker "DebuggerInsertNops", 321*9880d681SAndroid Build Coastguard Worker "true", 322*9880d681SAndroid Build Coastguard Worker "Insert one nop instruction for each high level source statement" 323*9880d681SAndroid Build Coastguard Worker>; 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdef FeatureDebuggerReserveRegs : SubtargetFeature< 326*9880d681SAndroid Build Coastguard Worker "amdgpu-debugger-reserve-regs", 327*9880d681SAndroid Build Coastguard Worker "DebuggerReserveRegs", 328*9880d681SAndroid Build Coastguard Worker "true", 329*9880d681SAndroid Build Coastguard Worker "Reserve registers for debugger usage" 330*9880d681SAndroid Build Coastguard Worker>; 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Workerdef FeatureDebuggerEmitPrologue : SubtargetFeature< 333*9880d681SAndroid Build Coastguard Worker "amdgpu-debugger-emit-prologue", 334*9880d681SAndroid Build Coastguard Worker "DebuggerEmitPrologue", 335*9880d681SAndroid Build Coastguard Worker "true", 336*9880d681SAndroid Build Coastguard Worker "Emit debugger prologue" 337*9880d681SAndroid Build Coastguard Worker>; 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerdef AMDGPUInstrInfo : InstrInfo { 342*9880d681SAndroid Build Coastguard Worker let guessInstructionProperties = 1; 343*9880d681SAndroid Build Coastguard Worker let noNamedPositionallyEncodedOperands = 1; 344*9880d681SAndroid Build Coastguard Worker} 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Workerdef AMDGPUAsmParser : AsmParser { 347*9880d681SAndroid Build Coastguard Worker // Some of the R600 registers have the same name, so this crashes. 348*9880d681SAndroid Build Coastguard Worker // For example T0_XYZW and T0_XY both have the asm name T0. 349*9880d681SAndroid Build Coastguard Worker let ShouldEmitMatchRegisterName = 0; 350*9880d681SAndroid Build Coastguard Worker} 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Workerdef AMDGPU : Target { 353*9880d681SAndroid Build Coastguard Worker // Pull in Instruction Info: 354*9880d681SAndroid Build Coastguard Worker let InstructionSet = AMDGPUInstrInfo; 355*9880d681SAndroid Build Coastguard Worker let AssemblyParsers = [AMDGPUAsmParser]; 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Worker// Dummy Instruction itineraries for pseudo instructions 359*9880d681SAndroid Build Coastguard Workerdef ALU_NULL : FuncUnit; 360*9880d681SAndroid Build Coastguard Workerdef NullALU : InstrItinClass; 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 363*9880d681SAndroid Build Coastguard Worker// Predicate helper class 364*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 365*9880d681SAndroid Build Coastguard Worker 366*9880d681SAndroid Build Coastguard Workerdef TruePredicate : Predicate<"true">; 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Workerdef isSICI : Predicate< 369*9880d681SAndroid Build Coastguard Worker "Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 370*9880d681SAndroid Build Coastguard Worker "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS" 371*9880d681SAndroid Build Coastguard Worker>, AssemblerPredicate<"FeatureGCN1Encoding">; 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Workerdef isVI : Predicate < 374*9880d681SAndroid Build Coastguard Worker "Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS">, 375*9880d681SAndroid Build Coastguard Worker AssemblerPredicate<"FeatureGCN3Encoding">; 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Workerdef isCIVI : Predicate < 378*9880d681SAndroid Build Coastguard Worker "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS || " 379*9880d681SAndroid Build Coastguard Worker "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS" 380*9880d681SAndroid Build Coastguard Worker>, AssemblerPredicate<"FeatureCIInsts">; 381*9880d681SAndroid Build Coastguard Worker 382*9880d681SAndroid Build Coastguard Workerdef HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">; 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Workerclass PredicateControl { 385*9880d681SAndroid Build Coastguard Worker Predicate SubtargetPredicate; 386*9880d681SAndroid Build Coastguard Worker Predicate SIAssemblerPredicate = isSICI; 387*9880d681SAndroid Build Coastguard Worker Predicate VIAssemblerPredicate = isVI; 388*9880d681SAndroid Build Coastguard Worker list<Predicate> AssemblerPredicates = []; 389*9880d681SAndroid Build Coastguard Worker Predicate AssemblerPredicate = TruePredicate; 390*9880d681SAndroid Build Coastguard Worker list<Predicate> OtherPredicates = []; 391*9880d681SAndroid Build Coastguard Worker list<Predicate> Predicates = !listconcat([SubtargetPredicate, AssemblerPredicate], 392*9880d681SAndroid Build Coastguard Worker AssemblerPredicates, 393*9880d681SAndroid Build Coastguard Worker OtherPredicates); 394*9880d681SAndroid Build Coastguard Worker} 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Worker// Include AMDGPU TD files 397*9880d681SAndroid Build Coastguard Workerinclude "R600Schedule.td" 398*9880d681SAndroid Build Coastguard Workerinclude "SISchedule.td" 399*9880d681SAndroid Build Coastguard Workerinclude "Processors.td" 400*9880d681SAndroid Build Coastguard Workerinclude "AMDGPUInstrInfo.td" 401*9880d681SAndroid Build Coastguard Workerinclude "AMDGPUIntrinsics.td" 402*9880d681SAndroid Build Coastguard Workerinclude "AMDGPURegisterInfo.td" 403*9880d681SAndroid Build Coastguard Workerinclude "AMDGPUInstructions.td" 404*9880d681SAndroid Build Coastguard Workerinclude "AMDGPUCallingConv.td" 405