brintos

brintos / llvm-project-archived public Read only

0
0
Text · 100.4 KiB · 5dea648 Raw
3123 lines · plain
1//===-- AMDGPU.td - AMDGPU Tablegen files --------*- tablegen -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===------------------------------------------------------------===//8 9include "llvm/TableGen/SearchableTable.td"10include "llvm/Target/Target.td"11include "AMDGPUFeatures.td"12include "AMDGPUPredicateControl.td"13 14def p0 : PtrValueType<i64, 0>;15def p1 : PtrValueType<i64, 1>;16def p2 : PtrValueType<i32, 2>;17def p3 : PtrValueType<i32, 3>;18def p4 : PtrValueType<i64, 4>;19def p5 : PtrValueType<i32, 5>;20def p6 : PtrValueType<i32, 6>;21 22//===------------------------------------------------------------===//23// Subtarget Features (device properties)24//===------------------------------------------------------------===//25 26def FeatureFastFMAF32 : SubtargetFeature<"fast-fmaf",27  "FastFMAF32",28  "true",29  "Assuming f32 fma is at least as fast as mul + add"30>;31 32def FeatureFastDenormalF32 : SubtargetFeature<"fast-denormal-f32",33  "FastDenormalF32",34  "true",35  "Enabling denormals does not cause f32 instructions to run at f64 rates"36>;37 38def FeatureMIMG_R128 : SubtargetFeature<"mimg-r128",39  "MIMG_R128",40  "true",41  "Support 128-bit texture resources"42>;43 44def HalfRate64Ops : SubtargetFeature<"half-rate-64-ops",45  "HalfRate64Ops",46  "true",47  "Most fp64 instructions are half rate instead of quarter"48>;49 50def FullRate64Ops : SubtargetFeature<"full-rate-64-ops",51  "FullRate64Ops",52  "true",53  "Most fp64 instructions are full rate"54>;55 56def FeatureFlatAddressSpace : SubtargetFeature<"flat-address-space",57  "FlatAddressSpace",58  "true",59  "Support flat address space"60>;61 62def FeatureFlatInstOffsets : SubtargetFeature<"flat-inst-offsets",63  "FlatInstOffsets",64  "true",65  "Flat instructions have immediate offset addressing mode"66>;67 68def FeatureFlatGlobalInsts : SubtargetFeature<"flat-global-insts",69  "FlatGlobalInsts",70  "true",71  "Have global_* flat memory instructions",72  [FeatureFlatAddressSpace]73>;74 75def FeatureFlatScratchInsts : SubtargetFeature<"flat-scratch-insts",76  "FlatScratchInsts",77  "true",78  "Have scratch_* flat memory instructions",79  [FeatureFlatAddressSpace]80>;81 82def FeatureScalarFlatScratchInsts : SubtargetFeature<"scalar-flat-scratch-insts",83  "ScalarFlatScratchInsts",84  "true",85  "Have s_scratch_* flat memory instructions"86>;87 88def FeatureEnableFlatScratch : SubtargetFeature<"enable-flat-scratch",89  "EnableFlatScratch",90  "true",91  "Use scratch_* flat memory instructions to access scratch"92>;93 94def FeatureFlatGVSMode : SubtargetFeature<"flat-gvs-mode",95  "FlatGVSMode",96  "true",97  "Have GVS addressing mode with flat_* instructions",98  [FeatureFlatAddressSpace]99>;100 101def FeatureAddNoCarryInsts : SubtargetFeature<"add-no-carry-insts",102  "AddNoCarryInsts",103  "true",104  "Have VALU add/sub instructions without carry out"105>;106 107def FeatureUnalignedBufferAccess : SubtargetFeature<"unaligned-buffer-access",108  "UnalignedBufferAccess",109  "true",110  "Hardware supports unaligned global loads and stores"111>;112 113def FeatureTrapHandler: SubtargetFeature<"trap-handler",114  "TrapHandler",115  "true",116  "Trap handler support"117>;118 119def FeatureUnalignedScratchAccess : SubtargetFeature<"unaligned-scratch-access",120  "UnalignedScratchAccess",121  "true",122  "Support unaligned scratch loads and stores"123>;124 125def FeatureUnalignedDSAccess : SubtargetFeature<"unaligned-ds-access",126  "UnalignedDSAccess",127  "true",128  "Hardware supports unaligned local and region loads and stores"129>;130 131def FeatureRelaxedBufferOOBMode : SubtargetFeature<"relaxed-buffer-oob-mode",132  "RelaxedBufferOOBMode",133  "true",134  "Disable strict out-of-bounds buffer guarantees. An OOB access may potentially cause an adjacent access to be treated as if it were also OOB"135>;136 137def FeatureApertureRegs : SubtargetFeature<"aperture-regs",138  "HasApertureRegs",139  "true",140  "Has Memory Aperture Base and Size Registers"141>;142 143def FeatureMadMixInsts : SubtargetFeature<"mad-mix-insts",144  "HasMadMixInsts",145  "true",146  "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions"147>;148 149def FeatureFmaMixInsts : SubtargetFeature<"fma-mix-insts",150  "HasFmaMixInsts",151  "true",152  "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions"153>;154 155def FeatureFmaMixBF16Insts : SubtargetFeature<"fma-mix-bf16-insts",156  "HasFmaMixBF16Insts",157  "true",158  "Has v_fma_mix_f32_bf16, v_fma_mixlo_bf16, v_fma_mixhi_bf16 instructions"159>;160 161def FeatureIEEEMinimumMaximumInsts : SubtargetFeature<"ieee-minimum-maximum-insts",162  "HasIEEEMinimumMaximumInsts",163  "true",164  "Has v_minimum/maximum_f16/f32/f64, v_minimummaximum/maximumminimum_f16/f32 and v_pk_minimum/maximum_f16 instructions"165>;166 167def FeatureMinimum3Maximum3F32 : SubtargetFeature<"minimum3-maximum3-f32",168  "HasMinimum3Maximum3F32",169  "true",170  "Has v_minimum3_f32 and v_maximum3_f32 instructions"171>;172 173def FeatureMinimum3Maximum3F16 : SubtargetFeature<"minimum3-maximum3-f16",174  "HasMinimum3Maximum3F16",175  "true",176  "Has v_minimum3_f16 and v_maximum3_f16 instructions"177>;178 179def FeatureMin3Max3PKF16 : SubtargetFeature<"min3-max3-pkf16",180  "HasMin3Max3PKF16",181  "true",182  "Has v_pk_min3_num_f16 and v_pk_max3_num_f16 instructions"183>;184 185def FeatureMinimum3Maximum3PKF16 : SubtargetFeature<"minimum3-maximum3-pkf16",186  "HasMinimum3Maximum3PKF16",187  "true",188  "Has v_pk_minimum3_f16 and v_pk_maximum3_f16 instructions"189>;190 191def FeatureSupportsXNACK : SubtargetFeature<"xnack-support",192  "SupportsXNACK",193  "true",194  "Hardware supports XNACK"195>;196 197// XNACK is disabled if SH_MEM_CONFIG.ADDRESS_MODE = GPUVM on chips that support198// XNACK. The current default kernel driver setting is:199// - graphics ring: XNACK disabled200// - compute ring: XNACK enabled201//202// If XNACK is enabled, the VMEM latency can be worse.203// If XNACK is disabled, the 2 SGPRs can be used for general purposes.204def FeatureXNACK : SubtargetFeature<"xnack",205  "EnableXNACK",206  "true",207  "Enable XNACK support"208>;209 210def FeatureTgSplit : SubtargetFeature<"tgsplit",211  "EnableTgSplit",212  "true",213  "Enable threadgroup split execution"214>;215 216def FeatureCuMode : SubtargetFeature<"cumode",217  "EnableCuMode",218  "true",219  "Enable CU wavefront execution mode"220>;221 222def FeaturePreciseMemory223    : SubtargetFeature<"precise-memory", "EnablePreciseMemory",224                       "true", "Enable precise memory mode">;225 226def FeatureSGPRInitBug : SubtargetFeature<"sgpr-init-bug",227  "SGPRInitBug",228  "true",229  "VI SGPR initialization bug requiring a fixed SGPR allocation size"230>;231 232def FeatureUserSGPRInit16Bug : SubtargetFeature<"user-sgpr-init16-bug",233  "UserSGPRInit16Bug",234  "true",235  "Bug requiring at least 16 user+system SGPRs to be enabled"236>;237 238def FeatureLdsMisalignedBug : SubtargetFeature<"lds-misaligned-bug",239  "LDSMisalignedBug",240  "true",241  "Some GFX10 bug with multi-dword LDS and flat access that is not naturally aligned in WGP mode"242>;243 244def FeatureMFMAInlineLiteralBug : SubtargetFeature<"mfma-inline-literal-bug",245  "HasMFMAInlineLiteralBug",246  "true",247  "MFMA cannot use inline literal as SrcC"248>;249 250def FeatureVcmpxPermlaneHazard : SubtargetFeature<"vcmpx-permlane-hazard",251  "HasVcmpxPermlaneHazard",252  "true",253  "TODO: describe me"254>;255 256def FeatureVMEMtoScalarWriteHazard : SubtargetFeature<"vmem-to-scalar-write-hazard",257  "HasVMEMtoScalarWriteHazard",258  "true",259  "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution."260>;261 262def FeatureSMEMtoVectorWriteHazard : SubtargetFeature<"smem-to-vector-write-hazard",263  "HasSMEMtoVectorWriteHazard",264  "true",265  "s_load_dword followed by v_cmp page faults"266>;267 268def FeatureInstFwdPrefetchBug : SubtargetFeature<"inst-fwd-prefetch-bug",269  "HasInstFwdPrefetchBug",270  "true",271  "S_INST_PREFETCH instruction causes shader to hang"272>;273 274def FeatureVmemPrefInsts : SubtargetFeature<"vmem-pref-insts",275  "HasVmemPrefInsts",276  "true",277  "Has flat_prefect_b8 and global_prefetch_b8 instructions"278>;279 280def FeatureSafeSmemPrefetch : SubtargetFeature<"safe-smem-prefetch",281  "HasSafeSmemPrefetch",282  "true",283  "SMEM prefetches do not fail on illegal address"284>;285 286def FeatureSafeCUPrefetch : SubtargetFeature<"safe-cu-prefetch",287  "HasSafeCUPrefetch",288  "true",289  "VMEM CU scope prefetches do not fail on illegal address"290>;291 292def FeatureVcmpxExecWARHazard : SubtargetFeature<"vcmpx-exec-war-hazard",293  "HasVcmpxExecWARHazard",294  "true",295  "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)"296>;297 298def FeatureLdsBranchVmemWARHazard : SubtargetFeature<"lds-branch-vmem-war-hazard",299  "HasLdsBranchVmemWARHazard",300  "true",301  "Switching between LDS and VMEM-tex not waiting VM_VSRC=0"302>;303 304class FeatureMaxHardClauseLength<int size> : SubtargetFeature<305  "max-hard-clause-length-"#size,306  "MaxHardClauseLength",307  !cast<string>(size),308  "Maximum number of instructions in an explicit S_CLAUSE is "#size309>;310 311/// Work around a hardware bug on some chips that can be triggered312/// under certain circumstances when clauses are longer than 32 operations.313def FeatureMaxHardClauseLength32 : FeatureMaxHardClauseLength<32>;314/// While the S_CLAUSE instruction permits encoding clause lengths up to 64,315/// hardware documentation for gfx10+ indicates that 63 is the maximum316/// permitted clause length.317def FeatureMaxHardClauseLength63 : FeatureMaxHardClauseLength<63>;318 319def FeatureNSAtoVMEMBug : SubtargetFeature<"nsa-to-vmem-bug",320  "HasNSAtoVMEMBug",321  "true",322  "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero"323>;324 325def FeatureNSAClauseBug : SubtargetFeature<"nsa-clause-bug",326  "HasNSAClauseBug",327  "true",328  "MIMG-NSA in a hard clause has unpredictable results on GFX10.1"329>;330 331def FeatureFlatSegmentOffsetBug : SubtargetFeature<"flat-segment-offset-bug",332  "HasFlatSegmentOffsetBug",333  "true",334  "GFX10 bug where inst_offset is ignored when flat instructions access global memory"335>;336 337def FeatureNegativeScratchOffsetBug : SubtargetFeature<"negative-scratch-offset-bug",338  "NegativeScratchOffsetBug",339  "true",340  "Negative immediate offsets in scratch instructions with an SGPR offset page fault on GFX9"341>;342 343def FeatureNegativeUnalignedScratchOffsetBug : SubtargetFeature<"negative-unaligned-scratch-offset-bug",344  "NegativeUnalignedScratchOffsetBug",345  "true",346  "Scratch instructions with a VGPR offset and a negative immediate offset that is not a multiple of 4 read wrong memory on GFX10"347>;348 349def FeatureOffset3fBug : SubtargetFeature<"offset-3f-bug",350  "HasOffset3fBug",351  "true",352  "Branch offset of 3f hardware bug"353>;354 355def FeatureImageStoreD16Bug : SubtargetFeature<"image-store-d16-bug",356  "HasImageStoreD16Bug",357  "true",358  "Image Store D16 hardware bug"359>;360 361def FeatureImageGather4D16Bug : SubtargetFeature<"image-gather4-d16-bug",362  "HasImageGather4D16Bug",363  "true",364  "Image Gather4 D16 hardware bug"365>;366 367def FeatureMADIntraFwdBug : SubtargetFeature<"mad-intra-fwd-bug",368  "HasMADIntraFwdBug",369  "true",370  "MAD_U64/I64 intra instruction forwarding bug"371>;372 373def FeatureMSAALoadDstSelBug : SubtargetFeature<"msaa-load-dst-sel-bug",374  "HasMSAALoadDstSelBug",375  "true",376  "MSAA loads not honoring dst_sel bug"377>;378 379def FeaturePrivEnabledTrap2NopBug : SubtargetFeature<"priv-enabled-trap2-nop-bug",380  "HasPrivEnabledTrap2NopBug",381  "true",382  "Hardware that runs with PRIV=1 interpreting 's_trap 2' as a nop bug"383>;384 385class SubtargetFeatureLDSBankCount <int Value> : SubtargetFeature <386  "ldsbankcount"#Value,387  "LDSBankCount",388  !cast<string>(Value),389  "The number of LDS banks per compute unit."390>;391 392def FeatureLDSBankCount16 : SubtargetFeatureLDSBankCount<16>;393def FeatureLDSBankCount32 : SubtargetFeatureLDSBankCount<32>;394 395def FeatureGCN3Encoding : SubtargetFeature<"gcn3-encoding",396  "GCN3Encoding",397  "true",398  "Encoding format for VI"399>;400 401def FeatureCIInsts : SubtargetFeature<"ci-insts",402  "CIInsts",403  "true",404  "Additional instructions for CI+"405>;406 407def FeatureGFX8Insts : SubtargetFeature<"gfx8-insts",408  "GFX8Insts",409  "true",410  "Additional instructions for GFX8+"411>;412 413def FeatureGFX9Insts : SubtargetFeature<"gfx9-insts",414  "GFX9Insts",415  "true",416  "Additional instructions for GFX9+"417>;418 419def FeatureRequiresAlignedVGPRs : SubtargetFeature<"vgpr-align2",420  "RequiresAlignVGPR",421  "true",422  "VGPR and AGPR tuple operands require even alignment"423>;424 425def FeatureGFX90AInsts : SubtargetFeature<"gfx90a-insts",426  "GFX90AInsts",427  "true",428  "Additional instructions for GFX90A+"429  // [HasAtomicFMinFMaxF64GlobalInsts, HasAtomicFMinFMaxF64FlatInsts] // TODO430>;431 432def FeatureGFX940Insts : SubtargetFeature<"gfx940-insts",433  "GFX940Insts",434  "true",435  "Additional instructions for GFX940+"436>;437 438def FeaturePermlane16Swap : SubtargetFeature<"permlane16-swap",439  "HasPermlane16Swap",440  "true",441  "Has v_permlane16_swap_b32 instructions"442>;443 444def FeaturePermlane32Swap : SubtargetFeature<"permlane32-swap",445  "HasPermlane32Swap",446  "true",447  "Has v_permlane32_swap_b32 instructions"448>;449 450def FeatureFP8ConversionScaleInsts : SubtargetFeature<"fp8-cvt-scale-insts",451  "HasFP8ConversionScaleInsts",452  "true",453  "Has fp8 conversion scale instructions"454>;455 456def FeatureBF8ConversionScaleInsts : SubtargetFeature<"bf8-cvt-scale-insts",457  "HasBF8ConversionScaleInsts",458  "true",459  "Has bf8 conversion scale instructions"460>;461 462def FeatureFP4ConversionScaleInsts : SubtargetFeature<"fp4-cvt-scale-insts",463  "HasFP4ConversionScaleInsts",464  "true",465  "Has fp4 conversion scale instructions"466>;467 468def FeatureFP6BF6ConversionScaleInsts : SubtargetFeature<"fp6bf6-cvt-scale-insts",469  "HasFP6BF6ConversionScaleInsts",470  "true",471  "Has fp6 and bf6 conversion scale instructions"472>;473 474def FeatureF16BF16ToFP6BF6ConversionScaleInsts : SubtargetFeature<"f16bf16-to-fp6bf6-cvt-scale-insts",475  "HasF16BF16ToFP6BF6ConversionScaleInsts",476  "true",477  "Has f16bf16 to fp6bf6 conversion scale instructions"478>;479 480def FeatureF32ToF16BF16ConversionSRInsts : SubtargetFeature<"f32-to-f16bf16-cvt-sr-insts",481  "HasF32ToF16BF16ConversionSRInsts",482  "true",483  "Has f32 to f16bf16 conversion scale instructions"484>;485 486def FeatureAshrPkInsts : SubtargetFeature<"ashr-pk-insts",487  "HasAshrPkInsts",488  "true",489  "Has Arithmetic Shift Pack instructions"490>;491 492def FeatureCvtPkF16F32Inst : SubtargetFeature<"cvt-pk-f16-f32-inst",493  "HasCvtPkF16F32Inst",494  "true",495  "Has cvt_pk_f16_f32 instruction"496>;497 498def FeatureGFX950Insts : SubtargetFeature<"gfx950-insts",499  "GFX950Insts",500  "true",501  "Additional instructions for GFX950+",502  [FeaturePermlane16Swap,503   FeaturePermlane32Swap,504   FeatureAshrPkInsts,505   FeatureFP8ConversionScaleInsts,506   FeatureBF8ConversionScaleInsts,507   FeatureFP4ConversionScaleInsts,508   FeatureFP6BF6ConversionScaleInsts,509   FeatureF16BF16ToFP6BF6ConversionScaleInsts,510   FeatureF32ToF16BF16ConversionSRInsts,511   FeatureCvtPkF16F32Inst,512   FeatureMinimum3Maximum3F32,513   FeatureMinimum3Maximum3PKF16,514   ]515>;516 517def FeatureGFX10Insts : SubtargetFeature<"gfx10-insts",518  "GFX10Insts",519  "true",520  "Additional instructions for GFX10+"521>;522 523def FeatureGFX11Insts : SubtargetFeature<"gfx11-insts",524  "GFX11Insts",525  "true",526  "Additional instructions for GFX11+"527>;528 529def FeatureGFX12Insts : SubtargetFeature<"gfx12-insts",530  "GFX12Insts",531  "true",532  "Additional instructions for GFX12+"533>;534 535def FeatureGFX1250Insts : SubtargetFeature<"gfx1250-insts",536  "GFX1250Insts",537  "true",538  "Additional instructions for GFX1250+"539>;540 541def FeatureGFX10_3Insts : SubtargetFeature<"gfx10-3-insts",542  "GFX10_3Insts",543  "true",544  "Additional instructions for GFX10.3"545>;546 547def FeatureGFX7GFX8GFX9Insts : SubtargetFeature<"gfx7-gfx8-gfx9-insts",548  "GFX7GFX8GFX9Insts",549  "true",550  "Instructions shared in GFX7, GFX8, GFX9"551>;552 553def FeatureSMemRealTime : SubtargetFeature<"s-memrealtime",554  "HasSMemRealTime",555  "true",556  "Has s_memrealtime instruction"557>;558 559def FeatureInv2PiInlineImm : SubtargetFeature<"inv-2pi-inline-imm",560  "HasInv2PiInlineImm",561  "true",562  "Has 1 / (2 * pi) as inline immediate"563>;564 565def Feature16BitInsts : SubtargetFeature<"16-bit-insts",566  "Has16BitInsts",567  "true",568  "Has i16/f16 instructions"569>;570 571def FeatureTrue16BitInsts : SubtargetFeature<"true16",572  "HasTrue16BitInsts",573  "true",574  "True 16-bit operand instructions"575>;576 577def FeatureRealTrue16Insts : SubtargetFeature<"real-true16",578  "EnableRealTrue16Insts",579  "true",580  "Use true 16-bit registers"581>;582 583def FeatureD16Writes32BitVgpr : SubtargetFeature<"d16-write-vgpr32",584  "EnableD16Writes32BitVgpr",585  "true",586  "D16 instructions potentially have 32-bit data dependencies"587>;588 589def FeatureBF16TransInsts : SubtargetFeature<"bf16-trans-insts",590  "HasBF16TransInsts",591  "true",592  "Has bf16 transcendental instructions"593>;594 595def FeatureBF16ConversionInsts : SubtargetFeature<"bf16-cvt-insts",596  "HasBF16ConversionInsts",597  "true",598  "Has bf16 conversion instructions"599>;600 601def FeatureBF16PackedInsts : SubtargetFeature<"bf16-pk-insts",602  "HasBF16PackedInsts",603  "true",604  "Has bf16 packed instructions (fma, add, mul, max, min)"605>;606 607def FeatureVOP3P : SubtargetFeature<"vop3p",608  "HasVOP3PInsts",609  "true",610  "Has VOP3P packed instructions"611>;612 613def FeatureMovrel : SubtargetFeature<"movrel",614  "HasMovrel",615  "true",616  "Has v_movrel*_b32 instructions"617>;618 619def FeatureVGPRIndexMode : SubtargetFeature<"vgpr-index-mode",620  "HasVGPRIndexMode",621  "true",622  "Has VGPR mode register indexing"623>;624 625def FeatureScalarDwordx3Loads : SubtargetFeature<"scalar-dwordx3-loads",626  "HasScalarDwordx3Loads",627  "true",628  "Has 96-bit scalar load instructions"629>;630 631def FeatureScalarStores : SubtargetFeature<"scalar-stores",632  "HasScalarStores",633  "true",634  "Has store scalar memory instructions"635>;636 637def FeatureScalarAtomics : SubtargetFeature<"scalar-atomics",638  "HasScalarAtomics",639  "true",640  "Has atomic scalar memory instructions"641>;642 643def FeatureSDWA : SubtargetFeature<"sdwa",644  "HasSDWA",645  "true",646  "Support SDWA (Sub-DWORD Addressing) extension"647>;648 649def FeatureSDWAOmod : SubtargetFeature<"sdwa-omod",650  "HasSDWAOmod",651  "true",652  "Support OMod with SDWA (Sub-DWORD Addressing) extension"653>;654 655def FeatureSDWAScalar : SubtargetFeature<"sdwa-scalar",656  "HasSDWAScalar",657  "true",658  "Support scalar register with SDWA (Sub-DWORD Addressing) extension"659>;660 661def FeatureSDWASdst : SubtargetFeature<"sdwa-sdst",662  "HasSDWASdst",663  "true",664  "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension"665>;666 667def FeatureSDWAMac : SubtargetFeature<"sdwa-mav",668  "HasSDWAMac",669  "true",670  "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension"671>;672 673def FeatureSDWAOutModsVOPC : SubtargetFeature<"sdwa-out-mods-vopc",674  "HasSDWAOutModsVOPC",675  "true",676  "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension"677>;678 679def FeatureDPP : SubtargetFeature<"dpp",680  "HasDPP",681  "true",682  "Support DPP (Data Parallel Primitives) extension"683>;684 685// DPP8 allows arbitrary cross-lane swizzling within groups of 8 lanes.686def FeatureDPP8 : SubtargetFeature<"dpp8",687  "HasDPP8",688  "true",689  "Support DPP8 (Data Parallel Primitives) extension"690>;691 692def FeatureDPALU_DPP : SubtargetFeature<"dpp-64bit",693  "HasDPALU_DPP",694  "true",695  "Support DPP (Data Parallel Primitives) extension in DP ALU"696>;697 698def FeatureDPPSrc1SGPR : SubtargetFeature<"dpp-src1-sgpr",699  "HasDPPSrc1SGPR",700  "true",701  "Support SGPR for Src1 of DPP instructions"702>;703 704def FeaturePackedFP32Ops : SubtargetFeature<"packed-fp32-ops",705  "HasPackedFP32Ops",706  "true",707  "Support packed fp32 instructions"708>;709 710def FeatureR128A16 : SubtargetFeature<"r128-a16",711  "HasR128A16",712  "true",713  "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128"714>;715 716def FeatureA16 : SubtargetFeature<"a16",717  "HasA16",718  "true",719  "Support A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands"720>;721 722def FeatureG16 : SubtargetFeature<"g16",723  "HasG16",724  "true",725  "Support G16 for 16-bit gradient image operands"726>;727 728def FeatureNSAEncoding : SubtargetFeature<"nsa-encoding",729  "HasNSAEncoding",730  "true",731  "Support NSA encoding for image instructions"732>;733 734def FeaturePartialNSAEncoding : SubtargetFeature<"partial-nsa-encoding",735  "HasPartialNSAEncoding",736  "true",737  "Support partial NSA encoding for image instructions"738>;739 740def FeatureImageInsts : SubtargetFeature<"image-insts",741  "HasImageInsts",742  "true",743  "Support image instructions"744>;745 746def FeatureExtendedImageInsts : SubtargetFeature<"extended-image-insts",747  "HasExtendedImageInsts",748  "true",749  "Support mips != 0, lod != 0, gather4, and get_lod"750>;751 752def FeatureGFX10_AEncoding : SubtargetFeature<"gfx10_a-encoding",753  "GFX10_AEncoding",754  "true",755  "Has BVH ray tracing instructions"756>;757 758def FeatureGFX10_BEncoding : SubtargetFeature<"gfx10_b-encoding",759  "GFX10_BEncoding",760  "true",761  "Encoding format GFX10_B"762>;763 764def FeatureIntClamp : SubtargetFeature<"int-clamp-insts",765  "HasIntClamp",766  "true",767  "Support clamp for integer destination"768>;769 770def FeatureUnpackedD16VMem : SubtargetFeature<"unpacked-d16-vmem",771  "HasUnpackedD16VMem",772  "true",773  "Has unpacked d16 vmem instructions"774>;775 776def FeatureDLInsts : SubtargetFeature<"dl-insts",777  "HasDLInsts",778  "true",779  "Has v_fmac_f32 and v_xnor_b32 instructions"780>;781 782def FeatureFmacF64Inst : SubtargetFeature<"fmacf64-inst",783  "HasFmacF64Inst",784  "true",785  "Has v_fmac_f64 instruction"786>;787 788def FeatureDot1Insts : SubtargetFeature<"dot1-insts",789  "HasDot1Insts",790  "true",791  "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions"792>;793 794def FeatureDot2Insts : SubtargetFeature<"dot2-insts",795  "HasDot2Insts",796  "true",797  "Has v_dot2_i32_i16, v_dot2_u32_u16 instructions"798>;799 800def FeatureDot3Insts : SubtargetFeature<"dot3-insts",801  "HasDot3Insts",802  "true",803  "Has v_dot8c_i32_i4 instruction"804>;805 806def FeatureDot4Insts : SubtargetFeature<"dot4-insts",807  "HasDot4Insts",808  "true",809  "Has v_dot2c_i32_i16 instruction"810>;811 812def FeatureDot5Insts : SubtargetFeature<"dot5-insts",813  "HasDot5Insts",814  "true",815  "Has v_dot2c_f32_f16 instruction"816>;817 818def FeatureDot6Insts : SubtargetFeature<"dot6-insts",819  "HasDot6Insts",820  "true",821  "Has v_dot4c_i32_i8 instruction"822>;823 824def FeatureDot7Insts : SubtargetFeature<"dot7-insts",825  "HasDot7Insts",826  "true",827  "Has v_dot4_u32_u8, v_dot8_u32_u4 instructions"828>;829 830def FeatureDot8Insts : SubtargetFeature<"dot8-insts",831  "HasDot8Insts",832  "true",833  "Has v_dot4_i32_iu8, v_dot8_i32_iu4 instructions"834>;835 836def FeatureDot9Insts : SubtargetFeature<"dot9-insts",837  "HasDot9Insts",838  "true",839  "Has v_dot2_f16_f16, v_dot2_bf16_bf16 instructions"840>;841 842def FeatureDot10Insts : SubtargetFeature<"dot10-insts",843  "HasDot10Insts",844  "true",845  "Has v_dot2_f32_f16 instruction"846>;847 848def FeatureDot11Insts : SubtargetFeature<"dot11-insts",849  "HasDot11Insts",850  "true",851  "Has v_dot4_f32_fp8_fp8, v_dot4_f32_fp8_bf8, v_dot4_f32_bf8_fp8, v_dot4_f32_bf8_bf8 instructions"852>;853 854def FeatureDot12Insts : SubtargetFeature<"dot12-insts",855  "HasDot12Insts",856  "true",857  "Has v_dot2_f32_bf16 instructions"858>;859 860def FeatureDot13Insts : SubtargetFeature<"dot13-insts",861  "HasDot13Insts",862  "true",863  "Has v_dot2c_f32_bf16 instructions"864>;865 866 867def FeatureMAIInsts : SubtargetFeature<"mai-insts",868  "HasMAIInsts",869  "true",870  "Has mAI instructions"871>;872 873def FeatureFP8Insts : SubtargetFeature<"fp8-insts",874  "HasFP8Insts",875  "true",876  "Has fp8 and bf8 instructions"877>;878 879def FeatureFP8ConversionInsts : SubtargetFeature<"fp8-conversion-insts",880  "HasFP8ConversionInsts",881  "true",882  "Has fp8 and bf8 conversion instructions"883>;884 885def FeatureFP8E5M3Insts : SubtargetFeature<"fp8e5m3-insts",886  "HasFP8E5M3Insts",887  "true",888  "Has fp8 e5m3 format support"889>;890 891def FeatureCvtFP8VOP1Bug : SubtargetFeature<"cvt-fp8-vop1-bug",892  "HasCvtFP8Vop1Bug",893  "true",894  "FP8/BF8 VOP1 form of conversion to F32 is unreliable",895  [FeatureFP8ConversionInsts]896>;897 898def FeaturePkFmacF16Inst : SubtargetFeature<"pk-fmac-f16-inst",899  "HasPkFmacF16Inst",900  "true",901  "Has v_pk_fmac_f16 instruction"902>;903 904def FeatureCubeInsts : SubtargetFeature<"cube-insts",905  "HasCubeInsts",906  "true",907  "Has v_cube* instructions"908>; 909 910def FeatureLerpInst : SubtargetFeature<"lerp-inst",911  "HasLerpInst",912  "true",913  "Has v_lerp_u8 instruction"914>; 915 916def FeatureSadInsts : SubtargetFeature<"sad-insts",917  "HasSadInsts",918  "true",919  "Has v_sad* instructions"920>; 921 922def FeatureQsadInsts : SubtargetFeature<"qsad-insts",923  "HasQsadInsts",924  "true",925  "Has v_qsad* instructions"926>; 927 928def FeatureCvtNormInsts : SubtargetFeature<"cvt-norm-insts",929  "HasCvtNormInsts",930  "true",931  "Has v_cvt_norm* instructions"932>;933 934def FeatureCvtPkNormVOP2Insts : SubtargetFeature<"cvt-pknorm-vop2-insts",935  "HasCvtPkNormVOP2Insts",936  "true",937  "Has v_cvt_pk_norm_*f32 instructions/Has v_cvt_pk_norm_*_f16 instructions"938>;939 940def FeatureCvtPkNormVOP3Insts : SubtargetFeature<"cvt-pknorm-vop3-insts",941  "HasCvtPkNormVOP3Insts",942  "true",943  "Has v_cvt_pk_norm_*f32 instructions/Has v_cvt_pk_norm_*_f16 instructions"944>;945 946def FeatureAtomicDsPkAdd16Insts : SubtargetFeature<"atomic-ds-pk-add-16-insts",947  "HasAtomicDsPkAdd16Insts",948  "true",949  "Has ds_pk_add_bf16, ds_pk_add_f16, ds_pk_add_rtn_bf16, "950  "ds_pk_add_rtn_f16 instructions"951>;952 953def FeatureAtomicFlatPkAdd16Insts : SubtargetFeature<"atomic-flat-pk-add-16-insts",954  "HasAtomicFlatPkAdd16Insts",955  "true",956  "Has flat_atomic_pk_add_f16 and flat_atomic_pk_add_bf16 instructions"957>;958 959def FeatureAtomicFaddRtnInsts : SubtargetFeature<"atomic-fadd-rtn-insts",960  "HasAtomicFaddRtnInsts",961  "true",962  "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that "963  "return original value",964  [FeatureFlatGlobalInsts]965>;966 967def FeatureAtomicFMinFMaxF32GlobalInsts : SubtargetFeature<"atomic-fmin-fmax-global-f32",968  "HasAtomicFMinFMaxF32GlobalInsts",969  "true",970  "Has global/buffer instructions for atomicrmw fmin/fmax for float"971>;972 973def FeatureAtomicFMinFMaxF64GlobalInsts : SubtargetFeature<"atomic-fmin-fmax-global-f64",974  "HasAtomicFMinFMaxF64GlobalInsts",975  "true",976  "Has global/buffer instructions for atomicrmw fmin/fmax for float"977>;978 979def FeatureAtomicFMinFMaxF32FlatInsts : SubtargetFeature<"atomic-fmin-fmax-flat-f32",980  "HasAtomicFMinFMaxF32FlatInsts",981  "true",982  "Has flat memory instructions for atomicrmw fmin/fmax for float",983  [FeatureFlatAddressSpace]984>;985 986def FeatureAtomicFMinFMaxF64FlatInsts : SubtargetFeature<"atomic-fmin-fmax-flat-f64",987  "HasAtomicFMinFMaxF64FlatInsts",988  "true",989  "Has flat memory instructions for atomicrmw fmin/fmax for double",990  [FeatureFlatAddressSpace]991>;992 993def FeatureAtomicFaddNoRtnInsts : SubtargetFeature<"atomic-fadd-no-rtn-insts",994  "HasAtomicFaddNoRtnInsts",995  "true",996  "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that "997  "don't return original value",998  [FeatureFlatGlobalInsts]999>;1000 1001def FeatureAtomicBufferGlobalPkAddF16NoRtnInsts1002  : SubtargetFeature<"atomic-buffer-global-pk-add-f16-no-rtn-insts",1003  "HasAtomicBufferGlobalPkAddF16NoRtnInsts",1004  "true",1005  "Has buffer_atomic_pk_add_f16 and global_atomic_pk_add_f16 instructions that "1006  "don't return original value",1007  [FeatureFlatGlobalInsts]1008>;1009 1010def FeatureAtomicBufferGlobalPkAddF16Insts : SubtargetFeature<"atomic-buffer-global-pk-add-f16-insts",1011 "HasAtomicBufferGlobalPkAddF16Insts",1012 "true",1013 "Has buffer_atomic_pk_add_f16 and global_atomic_pk_add_f16 instructions that "1014 "can return original value",1015 [FeatureFlatGlobalInsts]1016>;1017 1018def FeatureAtomicGlobalPkAddBF16Inst : SubtargetFeature<"atomic-global-pk-add-bf16-inst",1019 "HasAtomicGlobalPkAddBF16Inst",1020 "true",1021 "Has global_atomic_pk_add_bf16 instruction",1022 [FeatureFlatGlobalInsts]1023>;1024 1025def FeatureAtomicBufferPkAddBF16Inst : SubtargetFeature<"atomic-buffer-pk-add-bf16-inst",1026 "HasAtomicBufferPkAddBF16Inst",1027 "true",1028 "Has buffer_atomic_pk_add_bf16 instruction"1029>;1030 1031def FeatureAtomicCSubNoRtnInsts : SubtargetFeature<"atomic-csub-no-rtn-insts",1032  "HasAtomicCSubNoRtnInsts",1033  "true",1034  "Has buffer_atomic_csub and global_atomic_csub instructions that don't "1035  "return original value"1036>;1037 1038def FeatureFlatAtomicFaddF32Inst1039  : SubtargetFeature<"flat-atomic-fadd-f32-inst",1040  "HasFlatAtomicFaddF32Inst",1041  "true",1042  "Has flat_atomic_add_f32 instruction",1043  [FeatureFlatAddressSpace]1044>;1045 1046def FeatureFlatBufferGlobalAtomicFaddF64Inst1047  : SubtargetFeature<"flat-buffer-global-fadd-f64-inst",1048  "HasFlatBufferGlobalAtomicFaddF64Inst",1049  "true",1050  "Has flat, buffer, and global instructions for f64 atomic fadd"1051>;1052 1053def FeatureMemoryAtomicFAddF32DenormalSupport1054  : SubtargetFeature<"memory-atomic-fadd-f32-denormal-support",1055  "HasMemoryAtomicFaddF32DenormalSupport",1056  "true",1057  "global/flat/buffer atomic fadd for float supports denormal handling"1058>;1059 1060def FeatureAgentScopeFineGrainedRemoteMemoryAtomics1061  : SubtargetFeature<"agent-scope-fine-grained-remote-memory-atomics",1062  "HasAgentScopeFineGrainedRemoteMemoryAtomics",1063  "true",1064  "Agent (device) scoped atomic operations, excluding those directly "1065  "supported by PCIe (i.e. integer atomic add, exchange, and "1066  "compare-and-swap), are functional for allocations in host or peer "1067  "device memory."1068>;1069 1070def FeatureEmulatedSystemScopeAtomics1071  : SubtargetFeature<"emulated-system-scope-atomics",1072  "HasEmulatedSystemScopeAtomics",1073  "true",1074  "System scope atomics unsupported by the PCI-e are emulated in HW via CAS "1075  "loop and functional."1076>;1077 1078def FeatureDefaultComponentZero : SubtargetFeature<"default-component-zero",1079  "HasDefaultComponentZero",1080  "true",1081  "BUFFER/IMAGE store instructions set unspecified components to zero (before GFX12)"1082>;1083 1084def FeatureDefaultComponentBroadcast : SubtargetFeature<"default-component-broadcast",1085  "HasDefaultComponentBroadcast",1086  "true",1087  "BUFFER/IMAGE store instructions set unspecified components to x component (GFX12)"1088>;1089 1090def FeatureSupportsSRAMECC : SubtargetFeature<"sramecc-support",1091  "SupportsSRAMECC",1092  "true",1093  "Hardware supports SRAMECC"1094>;1095 1096def FeatureSRAMECC : SubtargetFeature<"sramecc",1097  "EnableSRAMECC",1098  "true",1099  "Enable SRAMECC"1100>;1101 1102def FeatureNoSdstCMPX : SubtargetFeature<"no-sdst-cmpx",1103  "HasNoSdstCMPX",1104  "true",1105  "V_CMPX does not write VCC/SGPR in addition to EXEC"1106>;1107 1108def FeatureVscnt : SubtargetFeature<"vscnt",1109  "HasVscnt",1110  "true",1111  "Has separate store vscnt counter"1112>;1113 1114def FeatureGetWaveIdInst : SubtargetFeature<"get-wave-id-inst",1115  "HasGetWaveIdInst",1116  "true",1117  "Has s_get_waveid_in_workgroup instruction"1118>;1119 1120def FeatureSMemTimeInst : SubtargetFeature<"s-memtime-inst",1121  "HasSMemTimeInst",1122  "true",1123  "Has s_memtime instruction"1124>;1125 1126def FeatureShaderCyclesRegister : SubtargetFeature<"shader-cycles-register",1127  "HasShaderCyclesRegister",1128  "true",1129  "Has SHADER_CYCLES hardware register"1130>;1131 1132def FeatureShaderCyclesHiLoRegisters : SubtargetFeature<"shader-cycles-hi-lo-registers",1133  "HasShaderCyclesHiLoRegisters",1134  "true",1135  "Has SHADER_CYCLES_HI/LO hardware registers"1136>;1137 1138def FeatureMadMacF32Insts : SubtargetFeature<"mad-mac-f32-insts",1139  "HasMadMacF32Insts",1140  "true",1141  "Has v_mad_f32/v_mac_f32/v_madak_f32/v_madmk_f32 instructions"1142>;1143 1144def FeatureDsSrc2Insts : SubtargetFeature<"ds-src2-insts",1145  "HasDsSrc2Insts",1146  "true",1147  "Has ds_*_src2 instructions"1148>;1149 1150def FeatureVOP3Literal : SubtargetFeature<"vop3-literal",1151  "HasVOP3Literal",1152  "true",1153  "Can use one literal in VOP3"1154>;1155 1156def FeatureNoDataDepHazard : SubtargetFeature<"no-data-dep-hazard",1157  "HasNoDataDepHazard",1158  "true",1159  "Does not need SW waitstates"1160>;1161 1162// Allocate 1536 VGPRs for wave32 and 768 VGPRs for wave641163// with allocation granularity 24 for wave32 and 12 for wave641164def Feature1_5xVGPRs : SubtargetFeature<"allocate1_5xvgprs",1165  "Has1_5xVGPRs",1166  "true",1167  "Has 50% more physical VGPRs and 50% larger allocation granule"1168>;1169 1170 1171def FeatureVOPD : SubtargetFeature<"vopd",1172  "HasVOPDInsts",1173  "true",1174  "Has VOPD dual issue wave32 instructions"1175>;1176 1177def FeatureVALUTransUseHazard : SubtargetFeature<"valu-trans-use-hazard",1178  "HasVALUTransUseHazard",1179  "true",1180  "Hazard when TRANS instructions are closely followed by a use of the result"1181>;1182 1183def FeatureSALUFloatInsts : SubtargetFeature<"salu-float",1184  "HasSALUFloatInsts",1185  "true",1186  "Has SALU floating point instructions"1187>;1188 1189def FeaturePseudoScalarTrans : SubtargetFeature<"pseudo-scalar-trans",1190  "HasPseudoScalarTrans",1191  "true",1192  "Has Pseudo Scalar Transcendental instructions"1193>;1194 1195def FeatureHasRestrictedSOffset : SubtargetFeature<"restricted-soffset",1196  "HasRestrictedSOffset",1197  "true",1198  "Has restricted SOffset (immediate not supported)."1199>;1200 1201def FeatureRequiredExportPriority : SubtargetFeature<"required-export-priority",1202  "HasRequiredExportPriority",1203  "true",1204  "Export priority must be explicitly manipulated on GFX11.5"1205>;1206 1207def FeatureVmemWriteVgprInOrder : SubtargetFeature<"vmem-write-vgpr-in-order",1208  "HasVmemWriteVgprInOrder",1209  "true",1210  "VMEM instructions of the same type write VGPR results in order"1211>;1212 1213def FeatureBitOp3Insts : SubtargetFeature<"bitop3-insts",1214  "HasBitOp3Insts",1215  "true",1216  "Has v_bitop3_b32/v_bitop3_b16 instructions"1217>;1218 1219def FeatureTanhInsts : SubtargetFeature<"tanh-insts",1220  "HasTanhInsts",1221  "true",1222  "Has v_tanh_f32/f16 instructions"1223>;1224 1225def FeatureTensorCvtLutInsts : SubtargetFeature<"tensor-cvt-lut-insts",1226  "HasTensorCvtLutInsts",1227  "true",1228  "Has v_perm_pk16* instructions"1229>;1230 1231def FeatureTransposeLoadF4F6Insts : SubtargetFeature<"transpose-load-f4f6-insts",1232  "HasTransposeLoadF4F6Insts",1233  "true",1234  "Has ds_load_tr4/tr6 and global_load_tr4/tr6 instructions"1235>;1236 1237def FeaturePrngInst : SubtargetFeature<"prng-inst",1238  "HasPrngInst",1239  "true",1240  "Has v_prng_b32 instruction"1241>;1242 1243def FeatureBVHDualAndBVH8Insts : SubtargetFeature<"bvh-dual-bvh-8-insts",1244  "HasBVHDualAndBVH8Insts",1245  "true",1246  "Has image_bvh_dual_intersect_ray and image_bvh8_intersect_ray instructions"1247>;1248 1249def FeaturePointSampleAccel : SubtargetFeature<"point-sample-accel",1250  "HasPointSampleAccel",1251  "true",1252  "Has point sample acceleration feature"1253>;1254 1255def Feature64BitLiterals : SubtargetFeature<"64-bit-literals",1256  "Has64BitLiterals",1257  "true",1258  "Can use 64-bit literals with single DWORD instructions"1259>;1260 1261def Feature1024AddressableVGPRs : SubtargetFeature<"1024-addressable-vgprs",1262  "Has1024AddressableVGPRs",1263  "true",1264  "Has 1024 addressable VGPRs"1265>;1266 1267def FeatureWaitXcnt : SubtargetFeature<"wait-xcnt",1268  "HasWaitXcnt",1269  "true",1270  "Has s_wait_xcnt instruction"1271>;1272 1273def FeatureSetPrioIncWgInst : SubtargetFeature<"setprio-inc-wg-inst",1274  "HasSetPrioIncWgInst",1275  "true",1276  "Has s_setprio_inc_wg instruction."1277>;1278 1279//===------------------------------------------------------------===//1280// Subtarget Features (options and debugging)1281//===------------------------------------------------------------===//1282 1283// Ugly hack to accomodate assembling modules with mixed1284// wavesizes. Ideally we would have a mapping symbol in assembly which1285// would keep track of which sections of code should be treated as1286// wave32 and wave64. Instead what users do is assemble with both1287// wavesizes enabled. We translate this into this special mode so this1288// only influences assembler behavior and nothing else.1289def FeatureAssemblerPermissiveWavesize : SubtargetFeature<1290  "assembler-permissive-wavesize",1291  "AssemblerPermissiveWavesize",1292  "true",1293  "allow parsing wave32 and wave64 variants of instructions"1294>;1295 1296class FeatureMaxPrivateElementSize<int size> : SubtargetFeature<1297  "max-private-element-size-"#size,1298  "MaxPrivateElementSize",1299  !cast<string>(size),1300  "Maximum private access size may be "#size1301>;1302 1303def FeatureMaxPrivateElementSize4 : FeatureMaxPrivateElementSize<4>;1304def FeatureMaxPrivateElementSize8 : FeatureMaxPrivateElementSize<8>;1305def FeatureMaxPrivateElementSize16 : FeatureMaxPrivateElementSize<16>;1306 1307def FeatureDumpCode : SubtargetFeature <"DumpCode",1308  "DumpCode",1309  "true",1310  "Dump MachineInstrs in the CodeEmitter"1311>;1312 1313def FeatureDumpCodeLower : SubtargetFeature <"dumpcode",1314  "DumpCode",1315  "true",1316  "Dump MachineInstrs in the CodeEmitter"1317>;1318 1319// XXX - This should probably be removed once enabled by default1320def FeatureEnableLoadStoreOpt : SubtargetFeature <"load-store-opt",1321  "EnableLoadStoreOpt",1322  "true",1323  "Enable SI load/store optimizer pass"1324>;1325 1326// Performance debugging feature. Allow using DS instruction immediate1327// offsets even if the base pointer can't be proven to be base. On SI,1328// base pointer values that won't give the same result as a 16-bit add1329// are not safe to fold, but this will override the conservative test1330// for the base pointer.1331def FeatureEnableUnsafeDSOffsetFolding : SubtargetFeature <1332  "unsafe-ds-offset-folding",1333  "EnableUnsafeDSOffsetFolding",1334  "true",1335  "Force using DS instruction immediate offsets on SI"1336>;1337 1338def FeatureEnableSIScheduler : SubtargetFeature<"si-scheduler",1339  "EnableSIScheduler",1340  "true",1341  "Enable SI Machine Scheduler"1342>;1343 1344def FeatureEnableDS128 : SubtargetFeature<"enable-ds128",1345  "EnableDS128",1346  "true",1347  "Use ds_{read|write}_b128"1348>;1349 1350// Sparse texture support requires that all result registers are zeroed when1351// PRTStrictNull is set to true. This feature is turned on for all architectures1352// but is enabled as a feature in case there are situations where PRTStrictNull1353// is disabled by the driver.1354def FeatureEnablePRTStrictNull : SubtargetFeature<"enable-prt-strict-null",1355  "EnablePRTStrictNull",1356  "true",1357  "Enable zeroing of result registers for sparse texture fetches"1358>;1359 1360// Unless +-flat-for-global is specified, turn on FlatForGlobal for1361// all OS-es on VI and newer hardware to avoid assertion failures due1362// to missing ADDR64 variants of MUBUF instructions.1363// FIXME: moveToVALU should be able to handle converting addr64 MUBUF1364// instructions.1365 1366def FeatureFlatForGlobal : SubtargetFeature<"flat-for-global",1367  "FlatForGlobal",1368  "true",1369  "Force to generate flat instruction for global"1370>;1371 1372def FeatureAutoWaitcntBeforeBarrier : SubtargetFeature <1373  "auto-waitcnt-before-barrier",1374  "AutoWaitcntBeforeBarrier",1375  "true",1376  "Hardware automatically inserts waitcnt before barrier"1377>;1378 1379def FeatureBackOffBarrier : SubtargetFeature <"back-off-barrier",1380  "BackOffBarrier",1381  "true",1382  "Hardware supports backing off s_barrier if an exception occurs"1383>;1384 1385def FeatureTrigReducedRange : SubtargetFeature<"trig-reduced-range",1386  "HasTrigReducedRange",1387  "true",1388  "Requires use of fract on arguments to trig instructions"1389>;1390 1391def FeatureKernargPreload : SubtargetFeature <"kernarg-preload",1392  "KernargPreload",1393  "true",1394  "Hardware supports preloading of kernel arguments in user SGPRs."1395>;1396 1397// Alignment enforcement is controlled by a configuration register:1398// SH_MEM_CONFIG.alignment_mode1399def FeatureUnalignedAccessMode : SubtargetFeature<"unaligned-access-mode",1400  "UnalignedAccessMode",1401  "true",1402  "Enable unaligned global, local and region loads and stores if the hardware"1403  " supports it"1404>;1405 1406def FeaturePackedTID : SubtargetFeature<"packed-tid",1407  "HasPackedTID",1408  "true",1409  "Workitem IDs are packed into v0 at kernel launch"1410>;1411 1412def FeatureArchitectedFlatScratch : SubtargetFeature<"architected-flat-scratch",1413  "HasArchitectedFlatScratch",1414  "true",1415  "Flat Scratch register is a readonly SPI initialized architected register"1416>;1417 1418def FeatureArchitectedSGPRs : SubtargetFeature<"architected-sgprs",1419  "HasArchitectedSGPRs",1420  "true",1421  "Enable the architected SGPRs"1422>;1423 1424def FeatureGDS : SubtargetFeature<"gds",1425  "HasGDS",1426  "true",1427  "Has Global Data Share"1428>;1429 1430def FeatureGWS : SubtargetFeature<"gws",1431  "HasGWS",1432  "true",1433  "Has Global Wave Sync"1434>;1435 1436def FeatureRequiresCOV6 : SubtargetFeature<"requires-cov6",1437  "RequiresCOV6",1438  "true",1439  "Target Requires Code Object V6"1440>;1441 1442def FeatureXF32Insts : SubtargetFeature<"xf32-insts",1443   "HasXF32Insts",1444   "true",1445   "Has instructions that support xf32 format, such as "1446   "v_mfma_f32_16x16x8_xf32 and v_mfma_f32_32x32x4_xf32"1447 >;1448 1449def FeatureGloballyAddressableScratch : SubtargetFeature<1450  "globally-addressable-scratch",1451  "HasGloballyAddressableScratch",1452  "true",1453  "FLAT instructions can access scratch memory for any thread in any wave"1454>;1455 1456// Enable the use of SCRATCH_STORE/LOAD_BLOCK instructions for saving and1457// restoring the callee-saved registers.1458def FeatureUseBlockVGPROpsForCSR : SubtargetFeature<"block-vgpr-csr",1459  "UseBlockVGPROpsForCSR",1460  "true",1461  "Use block load/store for VGPR callee saved registers"1462>;1463 1464def FeatureLshlAddU64Inst1465    : SubtargetFeature<"lshl-add-u64-inst", "HasLshlAddU64Inst", "true",1466                       "Has v_lshl_add_u64 instruction">;1467 1468def FeatureAddSubU64Insts1469    : SubtargetFeature<"add-sub-u64-insts", "HasAddSubU64Insts", "true",1470                       "Has v_add_u64 and v_sub_u64 instructions">;1471 1472def FeatureMadU32Inst : SubtargetFeature<"mad-u32-inst", "HasMadU32Inst",1473                                         "true", "Has v_mad_u32 instruction">;1474 1475def FeatureAddMinMaxInsts : SubtargetFeature<"add-min-max-insts",1476  "HasAddMinMaxInsts",1477  "true",1478  "Has v_add_{min|max}_{i|u}32 instructions"1479>;1480 1481def FeaturePkAddMinMaxInsts : SubtargetFeature<"pk-add-min-max-insts",1482  "HasPkAddMinMaxInsts",1483  "true",1484  "Has v_pk_add_{min|max}_{i|u}16 instructions"1485>;1486 1487def FeatureMemToLDSLoad : SubtargetFeature<"vmem-to-lds-load-insts",1488  "HasVMemToLDSLoad",1489  "true",1490  "The platform has memory to lds instructions (global_load w/lds bit set, buffer_load w/lds bit set or global_load_lds. This does not include scratch_load_lds."1491>;1492 1493def FeatureLdsBarrierArriveAtomic : SubtargetFeature< "lds-barrier-arrive-atomic",1494  "HasLdsBarrierArriveAtomic",1495  "true",1496  "Has LDS barrier-arrive atomic instructions"1497>;1498 1499def Feature45BitNumRecordsBufferResource : SubtargetFeature< "45-bit-num-records-buffer-resource",1500  "Has45BitNumRecordsBufferResource",1501  "true",1502  "The buffer resource (V#) supports 45-bit num_records"1503>;1504 1505def FeatureClusters : SubtargetFeature< "clusters",1506  "HasClusters",1507  "true",1508  "Has clusters of workgroups support"1509>;1510 1511def FeatureWaitsBeforeSystemScopeStores : SubtargetFeature<1512  "waits-before-system-scope-stores",1513  "RequiresWaitsBeforeSystemScopeStores",1514  "true",1515  "Target requires waits for loads and atomics before system scope stores"1516>;1517 1518// Dummy feature used to disable assembler instructions.1519def FeatureDisable : SubtargetFeature<"",1520  "FeatureDisable","true",1521  "Dummy feature to disable assembler instructions"1522>;1523 1524//===----------------------------------------------------------------------===//1525 1526class GCNSubtargetFeatureGeneration <string Value,1527                                     string FeatureName,1528                                     list<SubtargetFeature> Implies> :1529        SubtargetFeatureGeneration <Value, FeatureName, "GCNSubtarget", Implies>;1530 1531def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS",1532    "southern-islands",1533  [FeatureFP64, FeatureAddressableLocalMemorySize32768, FeatureMIMG_R128,1534  FeatureWavefrontSize64, FeatureSMemTimeInst, FeatureMadMacF32Insts,1535  FeatureDsSrc2Insts, FeatureLDSBankCount32, FeatureMovrel,1536  FeatureTrigReducedRange, FeatureExtendedImageInsts, FeatureImageInsts,1537  FeatureGDS, FeatureGWS, FeatureDefaultComponentZero,1538  FeatureAtomicFMinFMaxF32GlobalInsts, FeatureAtomicFMinFMaxF64GlobalInsts,1539  FeatureVmemWriteVgprInOrder, FeatureCubeInsts, FeatureLerpInst,1540  FeatureSadInsts, FeatureCvtPkNormVOP2Insts1541  ]1542>;1543 1544def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS",1545    "sea-islands",1546  [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,1547  FeatureWavefrontSize64, FeatureFlatAddressSpace,1548  FeatureCIInsts, FeatureMovrel, FeatureTrigReducedRange,1549  FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts,1550  FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureUnalignedBufferAccess,1551  FeatureImageInsts, FeatureGDS, FeatureGWS, FeatureDefaultComponentZero,1552  FeatureAtomicFMinFMaxF32GlobalInsts, FeatureAtomicFMinFMaxF64GlobalInsts,1553  FeatureAtomicFMinFMaxF32FlatInsts, FeatureAtomicFMinFMaxF64FlatInsts,1554  FeatureVmemWriteVgprInOrder, FeatureCubeInsts, FeatureLerpInst,1555  FeatureSadInsts, FeatureQsadInsts, FeatureCvtPkNormVOP2Insts1556  ]1557>;1558 1559def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS",1560  "volcanic-islands",1561  [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,1562   FeatureWavefrontSize64, FeatureFlatAddressSpace,1563   FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts,1564   FeatureSMemRealTime, FeatureVGPRIndexMode, FeatureMovrel,1565   FeatureScalarStores, FeatureInv2PiInlineImm,1566   FeatureSDWA, FeatureSDWAOutModsVOPC, FeatureSDWAMac, FeatureDPP,1567   FeatureIntClamp, FeatureTrigReducedRange, FeatureGFX8Insts,1568   FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts,1569   FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureFastDenormalF32,1570   FeatureUnalignedBufferAccess, FeatureImageInsts, FeatureGDS, FeatureGWS,1571   FeatureDefaultComponentZero, FeatureVmemWriteVgprInOrder, FeatureCubeInsts, 1572   FeatureLerpInst, FeatureSadInsts, FeatureQsadInsts, 1573   FeatureCvtPkNormVOP2Insts1574  ]1575>;1576 1577def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9",1578  "gfx9",1579  [FeatureFP64,1580   FeatureWavefrontSize64, FeatureFlatAddressSpace,1581   FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts,1582   FeatureSMemRealTime, FeatureScalarStores, FeatureInv2PiInlineImm,1583   FeatureApertureRegs, FeatureGFX9Insts, FeatureVOP3P, FeatureVGPRIndexMode,1584   FeatureFastFMAF32, FeatureDPP, FeatureIntClamp,1585   FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst,1586   FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts,1587   FeatureAddNoCarryInsts, FeatureGFX8Insts, FeatureGFX7GFX8GFX9Insts,1588   FeatureScalarFlatScratchInsts, FeatureScalarAtomics, FeatureR128A16,1589   FeatureA16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureSupportsXNACK,1590   FeatureUnalignedBufferAccess, FeatureUnalignedScratchAccess,1591   FeatureUnalignedDSAccess, FeatureNegativeScratchOffsetBug, FeatureGWS,1592   FeatureDefaultComponentZero,FeatureVmemWriteVgprInOrder, FeatureMemToLDSLoad,1593   FeatureCubeInsts, FeatureLerpInst, FeatureSadInsts, FeatureQsadInsts, 1594   FeatureCvtNormInsts, FeatureCvtPkNormVOP2Insts, 1595   FeatureCvtPkNormVOP3Insts1596  ]1597>;1598 1599def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10",1600  "gfx10",1601  [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,1602   FeatureFlatAddressSpace,1603   FeatureCIInsts, Feature16BitInsts,1604   FeatureSMemRealTime, FeatureInv2PiInlineImm,1605   FeatureApertureRegs, FeatureGFX9Insts, FeatureGFX10Insts, FeatureVOP3P,1606   FeatureMovrel, FeatureFastFMAF32, FeatureDPP, FeatureIntClamp,1607   FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst,1608   FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts,1609   FeatureAddNoCarryInsts, FeatureFmaMixInsts, FeatureGFX8Insts,1610   FeatureNoSdstCMPX, FeatureVscnt,1611   FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts,1612   FeatureNoDataDepHazard, FeaturePkFmacF16Inst,1613   FeatureA16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureG16,1614   FeatureUnalignedBufferAccess, FeatureUnalignedScratchAccess,1615   FeatureUnalignedDSAccess, FeatureImageInsts, FeatureGDS, FeatureGWS,1616   FeatureDefaultComponentZero, FeatureMaxHardClauseLength63,1617   FeatureAtomicFMinFMaxF32GlobalInsts, FeatureAtomicFMinFMaxF64GlobalInsts,1618   FeatureAtomicFMinFMaxF32FlatInsts, FeatureAtomicFMinFMaxF64FlatInsts,1619   FeatureVmemWriteVgprInOrder, FeatureMemToLDSLoad, FeatureCubeInsts, 1620   FeatureLerpInst, FeatureSadInsts, FeatureQsadInsts, 1621   FeatureCvtNormInsts, FeatureCvtPkNormVOP2Insts, 1622   FeatureCvtPkNormVOP3Insts1623  ]1624>;1625 1626def FeatureGFX11 : GCNSubtargetFeatureGeneration<"GFX11",1627  "gfx11",1628  [FeatureFP64, FeatureAddressableLocalMemorySize65536, FeatureMIMG_R128,1629   FeatureFlatAddressSpace, Feature16BitInsts,1630   FeatureInv2PiInlineImm, FeatureApertureRegs,1631   FeatureCIInsts, FeatureGFX8Insts, FeatureGFX9Insts, FeatureGFX10Insts,1632   FeatureGFX10_AEncoding, FeatureGFX10_BEncoding, FeatureGFX10_3Insts,1633   FeatureGFX11Insts, FeatureVOP3P, FeatureVOPD, FeatureTrue16BitInsts,1634   FeatureMovrel, FeatureFastFMAF32, FeatureDPP, FeatureIntClamp,1635   FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts,1636   FeatureAddNoCarryInsts, FeatureFmaMixInsts,1637   FeatureNoSdstCMPX, FeatureVscnt,1638   FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts,1639   FeatureNoDataDepHazard, FeaturePkFmacF16Inst,1640   FeatureA16, FeatureFastDenormalF32, FeatureG16,1641   FeatureUnalignedBufferAccess, FeatureUnalignedScratchAccess,1642   FeatureUnalignedDSAccess, FeatureGDS, FeatureGWS,1643   FeatureDefaultComponentZero, FeatureMaxHardClauseLength32,1644   FeatureAtomicFMinFMaxF32GlobalInsts, FeatureAtomicFMinFMaxF32FlatInsts,1645   FeatureVmemWriteVgprInOrder, FeatureCubeInsts, FeatureLerpInst,1646   FeatureSadInsts, FeatureQsadInsts, FeatureCvtNormInsts, 1647   FeatureCvtPkNormVOP2Insts, FeatureCvtPkNormVOP3Insts1648  ]1649>;1650 1651def FeatureGFX12 : GCNSubtargetFeatureGeneration<"GFX12",1652  "gfx12",1653  [FeatureFP64, FeatureMIMG_R128,1654   FeatureFlatAddressSpace, Feature16BitInsts,1655   FeatureInv2PiInlineImm, FeatureApertureRegs,1656   FeatureCIInsts, FeatureGFX8Insts, FeatureGFX9Insts, FeatureGFX10Insts,1657   FeatureGFX10_AEncoding, FeatureGFX10_BEncoding, FeatureGFX10_3Insts,1658   FeatureGFX11Insts, FeatureGFX12Insts, FeatureVOP3P, FeatureVOPD,1659   FeatureMovrel, FeatureFastFMAF32, FeatureDPP, FeatureIntClamp,1660   FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts,1661   FeatureAddNoCarryInsts, FeatureFmaMixInsts,1662   FeatureNoSdstCMPX, FeatureVscnt,1663   FeatureVOP3Literal, FeatureDPP8,1664   FeatureNoDataDepHazard, FeaturePkFmacF16Inst,1665   FeatureA16, FeatureFastDenormalF32, FeatureG16,1666   FeatureUnalignedBufferAccess, FeatureUnalignedScratchAccess,1667   FeatureUnalignedDSAccess, FeatureTrue16BitInsts,1668   FeatureDefaultComponentBroadcast, FeatureMaxHardClauseLength32,1669   FeatureAtomicFMinFMaxF32GlobalInsts, FeatureAtomicFMinFMaxF32FlatInsts,1670   FeatureIEEEMinimumMaximumInsts, FeatureMinimum3Maximum3F32,1671   FeatureMinimum3Maximum3F16, FeatureAgentScopeFineGrainedRemoteMemoryAtomics1672  ]1673>;1674 1675//===----------------------------------------------------------------------===//1676 1677class FeatureSet<list<SubtargetFeature> Features_> {1678  list<SubtargetFeature> Features = Features_;1679}1680 1681def FeatureISAVersion6_0_0 : FeatureSet<[FeatureSouthernIslands,1682   FeatureFastFMAF32,1683   HalfRate64Ops,1684   FeatureLDSBankCount32]>;1685 1686def FeatureISAVersion6_0_1 : FeatureSet<1687  [FeatureSouthernIslands,1688   FeatureLDSBankCount32]>;1689 1690def FeatureISAVersion6_0_2 : FeatureSet<1691  [FeatureSouthernIslands,1692   FeatureLDSBankCount32]>;1693 1694def FeatureISAVersion7_0_0 : FeatureSet<1695  [FeatureSeaIslands,1696   FeatureLDSBankCount32]>;1697 1698def FeatureISAVersion7_0_1 : FeatureSet<1699  [FeatureSeaIslands,1700   HalfRate64Ops,1701   FeatureLDSBankCount32,1702   FeatureFastFMAF32]>;1703 1704def FeatureISAVersion7_0_2 : FeatureSet<1705  [FeatureSeaIslands,1706   FeatureLDSBankCount16,1707   FeatureFastFMAF32]>;1708 1709def FeatureISAVersion7_0_3 : FeatureSet<1710  [FeatureSeaIslands,1711   FeatureLDSBankCount16]>;1712 1713def FeatureISAVersion7_0_4 : FeatureSet<1714  [FeatureSeaIslands,1715   FeatureLDSBankCount32]>;1716 1717def FeatureISAVersion7_0_5 : FeatureSet<1718  [FeatureSeaIslands,1719   FeatureLDSBankCount16]>;1720 1721def FeatureISAVersion8_0_Common : FeatureSet<1722  [FeatureVolcanicIslands,1723   FeatureLDSBankCount32,1724   FeatureUnpackedD16VMem]>;1725 1726def FeatureISAVersion8_0_1 : FeatureSet<1727  !listconcat(FeatureISAVersion8_0_Common.Features,1728    [FeatureFastFMAF32,1729     HalfRate64Ops,1730     FeatureSupportsXNACK])>;1731 1732def FeatureISAVersion8_0_2 : FeatureSet<1733  !listconcat(FeatureISAVersion8_0_Common.Features,1734    [FeatureSGPRInitBug])>;1735 1736def FeatureISAVersion8_0_3 : FeatureSet<1737  !listconcat(FeatureISAVersion8_0_Common.Features,1738    [])>;1739 1740def FeatureISAVersion8_0_5 : FeatureSet<1741  !listconcat(FeatureISAVersion8_0_Common.Features,1742    [FeatureSGPRInitBug])>;1743 1744def FeatureISAVersion8_1_0 : FeatureSet<1745  [FeatureVolcanicIslands,1746   FeatureLDSBankCount16,1747   FeatureSupportsXNACK,1748   FeatureImageStoreD16Bug,1749   FeatureImageGather4D16Bug]>;1750 1751def FeatureISAVersion9_0_Common : FeatureSet<1752  [FeatureGFX9,1753   FeatureAddressableLocalMemorySize65536,1754   FeatureLDSBankCount32,1755   FeatureImageInsts,1756   FeatureMadMacF32Insts]>;1757 1758def FeatureISAVersion9_0_Consumer_Common : FeatureSet<1759  !listconcat(FeatureISAVersion9_0_Common.Features,1760    [FeatureImageGather4D16Bug,1761     FeatureDsSrc2Insts,1762     FeatureExtendedImageInsts,1763     FeatureGDS])>;1764 1765def FeatureISAVersion9_Generic : FeatureSet<1766  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1767    [FeatureRequiresCOV6])>;1768 1769def FeatureISAVersion9_0_MI_Common : FeatureSet<1770  !listconcat(FeatureISAVersion9_0_Common.Features,1771    [FeatureFmaMixInsts,1772     FeatureDLInsts,1773     FeatureDot1Insts,1774     FeatureDot2Insts,1775     FeatureDot3Insts,1776     FeatureDot4Insts,1777     FeatureDot5Insts,1778     FeatureDot6Insts,1779     FeatureDot7Insts,1780     FeatureDot10Insts,1781     FeatureMAIInsts,1782     FeaturePkFmacF16Inst,1783     FeatureAtomicFaddNoRtnInsts,1784     FeatureSupportsSRAMECC])>;1785 1786def FeatureISAVersion9_0_0 : FeatureSet<1787  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1788    [FeatureMadMixInsts])>;1789 1790def FeatureISAVersion9_0_2 : FeatureSet<1791  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1792    [FeatureMadMixInsts])>;1793 1794def FeatureISAVersion9_0_4 : FeatureSet<1795  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1796    [FeatureFmaMixInsts])>;1797 1798def FeatureISAVersion9_0_6 : FeatureSet<1799  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1800    [HalfRate64Ops,1801     FeatureFmaMixInsts,1802     FeatureDLInsts,1803     FeatureDot1Insts,1804     FeatureDot2Insts,1805     FeatureDot7Insts,1806     FeatureDot10Insts,1807     FeatureSupportsSRAMECC])>;1808 1809def FeatureISAVersion9_0_8 : FeatureSet<1810  !listconcat(FeatureISAVersion9_0_MI_Common.Features,1811    [FeatureGDS,1812     HalfRate64Ops,1813     FeatureDsSrc2Insts,1814     FeatureExtendedImageInsts,1815     FeatureAtomicBufferGlobalPkAddF16NoRtnInsts,1816     FeatureMFMAInlineLiteralBug,1817     FeatureImageGather4D16Bug])>;1818 1819def FeatureISAVersion9_0_9 : FeatureSet<1820  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1821    [FeatureMadMixInsts])>;1822 1823def FeatureISAVersion9_0_A : FeatureSet<1824  !listconcat(FeatureISAVersion9_0_MI_Common.Features,1825    [FeatureGFX90AInsts,1826     FeatureRequiresAlignedVGPRs,1827     FeatureFmacF64Inst,1828     FeatureDPALU_DPP,1829     FeaturePackedFP32Ops,1830     FeatureAtomicFaddRtnInsts,1831     FeatureAtomicBufferGlobalPkAddF16Insts,1832     FeaturePackedTID,1833     FullRate64Ops,1834     FeatureBackOffBarrier,1835     FeatureKernargPreload,1836     FeatureAtomicFMinFMaxF64GlobalInsts,1837     FeatureAtomicFMinFMaxF64FlatInsts,1838     FeatureFlatBufferGlobalAtomicFaddF64Inst1839     ])>;1840 1841def FeatureISAVersion9_0_C : FeatureSet<1842  !listconcat(FeatureISAVersion9_0_Consumer_Common.Features,1843    [FeatureMadMixInsts])>;1844 1845def FeatureISAVersion9_4_Common : FeatureSet<1846  [FeatureGFX9,1847   FeatureGFX90AInsts,1848   FeatureGFX940Insts,1849   FeatureRequiresAlignedVGPRs,1850   FeatureFmaMixInsts,1851   FeatureLDSBankCount32,1852   FeatureDLInsts,1853   FeatureFmacF64Inst,1854   FeatureDot1Insts,1855   FeatureDot2Insts,1856   FeatureDot3Insts,1857   FeatureDot4Insts,1858   FeatureDot5Insts,1859   FeatureDot6Insts,1860   FeatureDot7Insts,1861   FeatureDot10Insts,1862   FeatureAtomicDsPkAdd16Insts,1863   FeatureAtomicFlatPkAdd16Insts,1864   FeatureDPALU_DPP,1865   FeaturePackedFP32Ops,1866   FeatureMAIInsts,1867   FeaturePkFmacF16Inst,1868   FeatureAtomicFaddRtnInsts,1869   FeatureAtomicFaddNoRtnInsts,1870   FeatureAtomicBufferGlobalPkAddF16Insts,1871   FeatureAtomicGlobalPkAddBF16Inst,1872   FeatureFlatAtomicFaddF32Inst,1873   FeatureSupportsSRAMECC,1874   FeaturePackedTID,1875   FeatureArchitectedFlatScratch,1876   FullRate64Ops,1877   FeatureBackOffBarrier,1878   FeatureKernargPreload,1879   FeatureAtomicFMinFMaxF64GlobalInsts,1880   FeatureAtomicFMinFMaxF64FlatInsts,1881   FeatureAgentScopeFineGrainedRemoteMemoryAtomics,1882   FeatureMemoryAtomicFAddF32DenormalSupport,1883   FeatureFlatBufferGlobalAtomicFaddF64Inst,1884   FeatureLshlAddU64Inst,1885   ]>;1886 1887def FeatureISAVersion9_5_Common : FeatureSet<1888  !listconcat(FeatureISAVersion9_4_Common.Features,1889  [FeatureAddressableLocalMemorySize163840,1890   FeatureFP8Insts,1891   FeatureFP8ConversionInsts,1892   FeatureGFX950Insts,1893   FeaturePrngInst,1894   FeatureBF16ConversionInsts,1895   FeatureBitOp3Insts,1896   FeatureFP8ConversionScaleInsts,1897   FeatureBF8ConversionScaleInsts,1898   FeatureFP4ConversionScaleInsts,1899   FeatureFP6BF6ConversionScaleInsts,1900   FeatureDot12Insts,1901   FeatureDot13Insts,1902   FeatureAtomicBufferPkAddBF16Inst1903   ])>;1904 1905def FeatureISAVersion9_4_2 : FeatureSet<1906  !listconcat(FeatureISAVersion9_4_Common.Features,1907    [1908      FeatureAddressableLocalMemorySize65536,1909      FeatureFP8Insts,1910      FeatureFP8ConversionInsts,1911      FeatureCvtFP8VOP1Bug,1912      FeatureXF32Insts1913    ])>;1914 1915def FeatureISAVersion9_4_Generic : FeatureSet<1916  !listconcat(FeatureISAVersion9_4_Common.Features,1917    [FeatureAddressableLocalMemorySize65536,1918     FeatureRequiresCOV6])>;1919 1920def FeatureISAVersion9_5_0 : FeatureSet<FeatureISAVersion9_5_Common.Features>;1921 1922def FeatureISAVersion10_Common : FeatureSet<1923  [FeatureGFX10,1924   FeatureLDSBankCount32,1925   FeatureDLInsts,1926   FeatureNSAEncoding,1927   FeatureBackOffBarrier]>;1928 1929def FeatureISAVersion10_1_Common : FeatureSet<1930  !listconcat(FeatureISAVersion10_Common.Features,1931    [FeatureScalarStores,1932     FeatureScalarAtomics,1933     FeatureScalarFlatScratchInsts,1934     FeatureGetWaveIdInst,1935     FeatureMadMacF32Insts,1936     FeatureDsSrc2Insts,1937     FeatureLdsMisalignedBug,1938     FeatureSupportsXNACK,1939     // gfx101x bugs1940     FeatureVcmpxPermlaneHazard,1941     FeatureVMEMtoScalarWriteHazard,1942     FeatureSMEMtoVectorWriteHazard,1943     FeatureInstFwdPrefetchBug,1944     FeatureVcmpxExecWARHazard,1945     FeatureLdsBranchVmemWARHazard,1946     FeatureNSAtoVMEMBug,1947     FeatureNSAClauseBug,1948     FeatureOffset3fBug,1949     FeatureFlatSegmentOffsetBug,1950     FeatureNegativeUnalignedScratchOffsetBug])>;1951 1952def FeatureISAVersion10_1_Generic : FeatureSet<1953  !listconcat(FeatureISAVersion10_1_Common.Features,1954    [FeatureRequiresCOV6])>;1955 1956def FeatureISAVersion10_1_0 : FeatureSet<1957  !listconcat(FeatureISAVersion10_1_Common.Features,1958    [])>;1959 1960def FeatureISAVersion10_1_1 : FeatureSet<1961  !listconcat(FeatureISAVersion10_1_Common.Features,1962    [FeatureDot1Insts,1963     FeatureDot2Insts,1964     FeatureDot5Insts,1965     FeatureDot6Insts,1966     FeatureDot7Insts,1967     FeatureDot10Insts])>;1968 1969def FeatureISAVersion10_1_2 : FeatureSet<1970  !listconcat(FeatureISAVersion10_1_Common.Features,1971    [FeatureDot1Insts,1972     FeatureDot2Insts,1973     FeatureDot5Insts,1974     FeatureDot6Insts,1975     FeatureDot7Insts,1976     FeatureDot10Insts])>;1977 1978def FeatureISAVersion10_1_3 : FeatureSet<1979  !listconcat(FeatureISAVersion10_1_Common.Features,1980    [FeatureGFX10_AEncoding])>;1981 1982def FeatureISAVersion10_3_0 : FeatureSet<1983  !listconcat(FeatureISAVersion10_Common.Features,1984    [FeatureGFX10_AEncoding,1985     FeatureGFX10_BEncoding,1986     FeatureGFX10_3Insts,1987     FeatureDot1Insts,1988     FeatureDot2Insts,1989     FeatureDot5Insts,1990     FeatureDot6Insts,1991     FeatureDot7Insts,1992     FeatureDot10Insts,1993     FeatureShaderCyclesRegister])>;1994 1995def FeatureISAVersion10_3_Generic: FeatureSet<1996  !listconcat(FeatureISAVersion10_3_0.Features,1997    [FeatureRequiresCOV6])>;1998 1999def FeatureISAVersion11_Common : FeatureSet<2000  [FeatureGFX11,2001   FeatureBackOffBarrier,2002   FeatureLDSBankCount32,2003   FeatureDLInsts,2004   FeatureDot5Insts,2005   FeatureDot7Insts,2006   FeatureDot8Insts,2007   FeatureDot9Insts,2008   FeatureDot10Insts,2009   FeatureDot12Insts,2010   FeatureNSAEncoding,2011   FeaturePartialNSAEncoding,2012   FeatureShaderCyclesRegister,2013   FeatureArchitectedFlatScratch,2014   FeatureAtomicFaddRtnInsts,2015   FeatureAtomicFaddNoRtnInsts,2016   FeatureFlatAtomicFaddF32Inst,2017   FeatureImageInsts,2018   FeaturePackedTID,2019   FeatureVcmpxPermlaneHazard,2020   FeatureMemoryAtomicFAddF32DenormalSupport,2021   FeatureRealTrue16Insts,2022   FeatureD16Writes32BitVgpr,2023]>;2024 2025// There are few workarounds that need to be2026// added to all targets. This pessimizes codegen2027// a bit on the generic GFX11 target.2028def FeatureISAVersion11_Generic: FeatureSet<2029  !listconcat(FeatureISAVersion11_Common.Features,2030    [FeatureMSAALoadDstSelBug,2031     FeatureVALUTransUseHazard,2032     FeatureUserSGPRInit16Bug,2033     FeatureMADIntraFwdBug,2034     FeaturePrivEnabledTrap2NopBug,2035     FeatureRequiresCOV6,2036     FeatureRequiredExportPriority])>;2037 2038def FeatureISAVersion11_0_Common : FeatureSet<2039  !listconcat(FeatureISAVersion11_Common.Features,2040    [FeatureMSAALoadDstSelBug,2041     FeatureVALUTransUseHazard,2042     FeatureMADIntraFwdBug,2043     FeaturePrivEnabledTrap2NopBug])>;2044 2045def FeatureISAVersion11_0_0 : FeatureSet<2046  !listconcat(FeatureISAVersion11_0_Common.Features,2047    [Feature1_5xVGPRs,2048     FeatureUserSGPRInit16Bug])>;2049 2050def FeatureISAVersion11_0_1 : FeatureSet<2051  !listconcat(FeatureISAVersion11_0_Common.Features,2052    [Feature1_5xVGPRs])>;2053 2054def FeatureISAVersion11_0_2 : FeatureSet<2055  !listconcat(FeatureISAVersion11_0_Common.Features,2056    [FeatureUserSGPRInit16Bug])>;2057 2058def FeatureISAVersion11_0_3 : FeatureSet<2059  !listconcat(FeatureISAVersion11_0_Common.Features,2060    [])>;2061 2062def FeatureISAVersion11_5_Common : FeatureSet<2063  !listconcat(FeatureISAVersion11_Common.Features,2064    [FeatureSALUFloatInsts,2065     FeatureDPPSrc1SGPR,2066     FeatureRequiredExportPriority])>;2067 2068def FeatureISAVersion11_5_0 : FeatureSet<2069  !listconcat(FeatureISAVersion11_5_Common.Features,2070    [FeaturePointSampleAccel])>;2071 2072def FeatureISAVersion11_5_1 : FeatureSet<2073  !listconcat(FeatureISAVersion11_5_Common.Features,2074    [Feature1_5xVGPRs,2075     FeaturePointSampleAccel])>;2076 2077def FeatureISAVersion11_5_2 : FeatureSet<2078  !listconcat(FeatureISAVersion11_5_Common.Features,2079    [FeaturePointSampleAccel])>;2080 2081def FeatureISAVersion11_5_3 : FeatureSet<2082  !listconcat(FeatureISAVersion11_5_Common.Features,2083    [])>;2084 2085def FeatureISAVersion12 : FeatureSet<2086  [FeatureGFX12,2087   FeatureBackOffBarrier,2088   FeatureAddressableLocalMemorySize65536,2089   FeatureLDSBankCount32,2090   FeatureDLInsts,2091   FeatureDot7Insts,2092   FeatureDot8Insts,2093   FeatureDot9Insts,2094   FeatureDot10Insts,2095   FeatureDot11Insts,2096   FeatureDot12Insts,2097   FeatureNSAEncoding,2098   FeaturePartialNSAEncoding,2099   FeatureShaderCyclesHiLoRegisters,2100   FeatureArchitectedFlatScratch,2101   FeatureArchitectedSGPRs,2102   FeatureAtomicFaddRtnInsts,2103   FeatureAtomicFaddNoRtnInsts,2104   FeatureAtomicDsPkAdd16Insts,2105   FeatureAtomicFlatPkAdd16Insts,2106   FeatureAtomicBufferGlobalPkAddF16Insts,2107   FeatureAtomicGlobalPkAddBF16Inst,2108   FeatureAtomicBufferPkAddBF16Inst,2109   FeatureFlatAtomicFaddF32Inst,2110   FeatureImageInsts,2111   FeatureExtendedImageInsts,2112   FeatureFP8ConversionInsts,2113   FeatureIEEEMinimumMaximumInsts,2114   FeaturePackedTID,2115   FeatureVcmpxPermlaneHazard,2116   FeatureSALUFloatInsts,2117   FeaturePseudoScalarTrans,2118   FeatureHasRestrictedSOffset,2119   FeatureScalarDwordx3Loads,2120   FeatureDPPSrc1SGPR,2121   FeatureMaxHardClauseLength32,2122   Feature1_5xVGPRs,2123   FeatureMemoryAtomicFAddF32DenormalSupport,2124   FeatureBVHDualAndBVH8Insts,2125   FeatureWaitsBeforeSystemScopeStores,2126   FeatureD16Writes32BitVgpr,2127   FeatureCubeInsts, 2128   FeatureLerpInst, 2129   FeatureSadInsts,2130   FeatureQsadInsts, 2131   FeatureCvtNormInsts, 2132   FeatureCvtPkNormVOP2Insts, 2133   FeatureCvtPkNormVOP3Insts2134   ]>;2135 2136def FeatureISAVersion12_50_Common : FeatureSet<2137  [FeatureGFX12,2138   FeatureGFX1250Insts,2139   FeatureRequiresAlignedVGPRs,2140   FeatureAddressableLocalMemorySize327680,2141   FeatureCuMode,2142   Feature1024AddressableVGPRs,2143   Feature64BitLiterals,2144   FeatureLDSBankCount32,2145   FeatureDLInsts,2146   FeatureFmacF64Inst,2147   FeaturePackedFP32Ops,2148   FeatureDot7Insts,2149   FeatureDot8Insts,2150   FeatureWavefrontSize32,2151   FeatureShaderCyclesHiLoRegisters,2152   FeatureArchitectedFlatScratch,2153   FeatureArchitectedSGPRs,2154   FeatureFlatGVSMode,2155   FeatureAtomicFaddRtnInsts,2156   FeatureAtomicFaddNoRtnInsts,2157   FeatureAtomicDsPkAdd16Insts,2158   FeatureAtomicFlatPkAdd16Insts,2159   FeatureAtomicBufferGlobalPkAddF16Insts,2160   FeatureAtomicGlobalPkAddBF16Inst,2161   FeatureAtomicBufferPkAddBF16Inst,2162   FeatureFlatAtomicFaddF32Inst,2163   FeatureFP8ConversionInsts,2164   FeatureFP8E5M3Insts,2165   FeaturePackedTID,2166   FeatureVcmpxPermlaneHazard,2167   FeatureSALUFloatInsts,2168   FeaturePseudoScalarTrans,2169   FeatureHasRestrictedSOffset,2170   FeatureScalarDwordx3Loads,2171   FeatureDPPSrc1SGPR,2172   FeatureBitOp3Insts,2173   FeatureTanhInsts,2174   FeatureTensorCvtLutInsts,2175   FeatureTransposeLoadF4F6Insts,2176   FeatureBF16TransInsts,2177   FeatureBF16ConversionInsts,2178   FeatureBF16PackedInsts,2179   FeatureCvtPkF16F32Inst,2180   FeatureFmaMixBF16Insts,2181   FeatureMin3Max3PKF16,2182   FeatureMinimum3Maximum3PKF16,2183   FeaturePrngInst,2184   FeaturePermlane16Swap,2185   FeatureAshrPkInsts,2186   FeatureSupportsSRAMECC,2187   FeatureMaxHardClauseLength63,2188   FeatureWaitXcnt,2189   FeatureAtomicFMinFMaxF64GlobalInsts,2190   FeatureAtomicFMinFMaxF64FlatInsts,2191   FeatureFlatBufferGlobalAtomicFaddF64Inst,2192   FeatureMemoryAtomicFAddF32DenormalSupport,2193   FeatureEmulatedSystemScopeAtomics,2194   FeatureGloballyAddressableScratch,2195   FeatureKernargPreload,2196   FeatureVmemPrefInsts,2197   FeatureLshlAddU64Inst,2198   FeatureAddSubU64Insts,2199   FeatureMadU32Inst,2200   FeatureAddMinMaxInsts,2201   FeaturePkAddMinMaxInsts,2202   FeatureLdsBarrierArriveAtomic,2203   FeatureSetPrioIncWgInst,2204   Feature45BitNumRecordsBufferResource,2205   FeatureSupportsXNACK,2206   FeatureXNACK,2207   FeatureClusters,2208   FeatureD16Writes32BitVgpr,2209]>;2210 2211def FeatureISAVersion12_50 : FeatureSet<2212  !listconcat(FeatureISAVersion12_50_Common.Features,2213  [FeatureCubeInsts, 2214   FeatureLerpInst, 2215   FeatureSadInsts, 2216   FeatureQsadInsts, 2217   FeatureCvtNormInsts, 2218   FeatureCvtPkNormVOP2Insts, 2219   FeatureCvtPkNormVOP3Insts])>;2220 2221def FeatureISAVersion12_51 : FeatureSet<2222  !listconcat(FeatureISAVersion12_50.Features,2223  [FeatureDPALU_DPP])>;2224 2225def FeatureISAVersion12_Generic: FeatureSet<2226  !listconcat(FeatureISAVersion12.Features,2227    [FeatureRequiresCOV6])>;2228 2229//===----------------------------------------------------------------------===//2230 2231def AMDGPUInstrInfo : InstrInfo {2232  let guessInstructionProperties = 1;2233}2234 2235def AMDGPUAsmParser : AsmParser {2236  // Some of the R600 registers have the same name, so this crashes.2237  // For example T0_XYZW and T0_XY both have the asm name T0.2238  let ShouldEmitMatchRegisterName = 0;2239 2240  // Call the custom operand parser for all operands.2241  let OperandParserMethod = "parseCustomOperand";2242  let CallCustomParserForAllOperands = true;2243}2244 2245def AMDGPUAsmWriter : AsmWriter {2246  int PassSubtarget = 1;2247}2248 2249def AMDGPUAsmVariants {2250  string Default = "Default";2251  int Default_ID = 0;2252  string VOP3 = "VOP3";2253  int VOP3_ID = 1;2254  string SDWA = "SDWA";2255  int SDWA_ID = 2;2256  string SDWA9 = "SDWA9";2257  int SDWA9_ID = 3;2258  string DPP = "DPP";2259  int DPP_ID = 4;2260  string VOP3_DPP = "VOP3_DPP";2261  int VOP3_DPP_ID = 5;2262  string Disable = "Disable";2263  int Disable_ID = 6;2264}2265 2266def DefaultAMDGPUAsmParserVariant : AsmParserVariant {2267  let Variant = AMDGPUAsmVariants.Default_ID;2268  let Name = AMDGPUAsmVariants.Default;2269}2270 2271def VOP3AsmParserVariant : AsmParserVariant {2272  let Variant = AMDGPUAsmVariants.VOP3_ID;2273  let Name = AMDGPUAsmVariants.VOP3;2274}2275 2276def SDWAAsmParserVariant : AsmParserVariant {2277  let Variant = AMDGPUAsmVariants.SDWA_ID;2278  let Name = AMDGPUAsmVariants.SDWA;2279}2280 2281def SDWA9AsmParserVariant : AsmParserVariant {2282  let Variant = AMDGPUAsmVariants.SDWA9_ID;2283  let Name = AMDGPUAsmVariants.SDWA9;2284}2285 2286def DPPAsmParserVariant : AsmParserVariant {2287  let Variant = AMDGPUAsmVariants.DPP_ID;2288  let Name = AMDGPUAsmVariants.DPP;2289}2290 2291def VOP3_DPPAsmParserVariant : AsmParserVariant {2292  let Variant = AMDGPUAsmVariants.VOP3_DPP_ID;2293  let Name = AMDGPUAsmVariants.VOP3_DPP;2294}2295 2296def AMDGPU : Target {2297  // Pull in Instruction Info:2298  let InstructionSet = AMDGPUInstrInfo;2299  let AssemblyParsers = [AMDGPUAsmParser];2300  let AssemblyParserVariants = [DefaultAMDGPUAsmParserVariant,2301                                VOP3AsmParserVariant,2302                                SDWAAsmParserVariant,2303                                SDWA9AsmParserVariant,2304                                DPPAsmParserVariant,2305                                VOP3_DPPAsmParserVariant];2306  let AssemblyWriters = [AMDGPUAsmWriter];2307  let AllowRegisterRenaming = 1;2308}2309 2310// Dummy Instruction itineraries for pseudo instructions2311def ALU_NULL : FuncUnit;2312def NullALU : InstrItinClass;2313 2314//===----------------------------------------------------------------------===//2315// Predicate helper class2316//===----------------------------------------------------------------------===//2317 2318def isGFX6 :2319  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS">,2320  AssemblerPredicate<(all_of FeatureSouthernIslands)>;2321 2322def isGFX6GFX7 :2323  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"2324            "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS">,2325  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), (not FeatureGFX10Insts))>;2326 2327def isGFX6GFX7GFX10 :2328  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"2329            "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2330            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2331  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), (not FeatureGFX11Insts))>;2332 2333def isGFX6GFX7GFX10Plus :2334  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"2335            "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2336            "Subtarget->getGeneration() >= AMDGPUSubtarget::GFX10">,2337  AssemblerPredicate<(all_of (not FeatureGCN3Encoding))>;2338 2339def isGFX7Only :2340  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS">,2341  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts, (not FeatureGFX10Insts))>;2342 2343def isGFX7GFX10 :2344  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2345            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2346  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts, (not FeatureGFX11Insts))>;2347 2348def isGFX7GFX10GFX11 :2349  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2350            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10 ||"2351            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX11">,2352  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts)>;2353 2354def isGFX7GFX8GFX9 :2355  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2356            "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2357            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">,2358  AssemblerPredicate<(all_of FeatureGFX7GFX8GFX9Insts)>;2359 2360def isGFX6GFX7GFX8GFX9 :2361  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"2362            "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2363            "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2364            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">,2365  AssemblerPredicate<(all_of (not FeatureGFX10Insts))>;2366 2367def isGFX6GFX7GFX8GFX9NotGFX90A :2368  Predicate<"!Subtarget->hasGFX90AInsts() &&"2369            "(Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"2370            " Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2371            " Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2372            " Subtarget->getGeneration() == AMDGPUSubtarget::GFX9)">,2373  AssemblerPredicate<(all_of (not FeatureGFX10Insts), (not FeatureGFX90AInsts))>;2374 2375def isGFX6GFX7GFX8GFX9GFX10 :2376  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"2377            "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2378            "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2379            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||"2380            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2381  AssemblerPredicate<(all_of (not FeatureGFX11Insts))>;2382 2383def isNotGFX12Plus :2384  Predicate<"Subtarget->getGeneration() <= AMDGPUSubtarget::GFX11">,2385  AssemblerPredicate<(all_of (not FeatureGFX12Insts))>;2386 2387def isGFX7GFX8GFX9GFX10 :2388  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||"2389            "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2390            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||"2391            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2392  AssemblerPredicate<(all_of FeatureCIInsts, (not FeatureGFX11Insts))>;2393 2394def isGFX8GFX9GFX10GFX11 :2395  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2396            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||"2397            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10 ||"2398            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX11">,2399  AssemblerPredicate<(all_of FeatureGFX8Insts, (not FeatureGFX12Insts))>;2400 2401def isGFX7Plus :2402  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::SEA_ISLANDS">,2403  AssemblerPredicate<(all_of FeatureCIInsts)>;2404 2405def isGFX8Plus :2406  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS">,2407  AssemblerPredicate<(all_of FeatureGFX8Insts)>;2408 2409def isGFX8Only : Predicate<"Subtarget->getGeneration() =="2410                           "AMDGPUSubtarget::VOLCANIC_ISLANDS">,2411  AssemblerPredicate <(all_of FeatureVolcanicIslands)>;2412 2413def isGFX9Plus :2414  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">,2415  AssemblerPredicate<(all_of FeatureGFX9Insts)>;2416 2417def isNotGFX9Plus :2418  Predicate<"Subtarget->getGeneration() < AMDGPUSubtarget::GFX9">;2419 2420def isGFX9Only : Predicate <2421  "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">,2422  AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureGFX9Insts)>;2423 2424def isGCN3ExcludingGFX90A :2425  Predicate<"Subtarget->isGCN3Encoding() && !Subtarget->hasGFX90AInsts()">,2426  AssemblerPredicate<(all_of FeatureGCN3Encoding, (not FeatureGFX90AInsts))>;2427 2428def isGFX90APlus :2429  Predicate<"Subtarget->hasGFX90AInsts()">,2430  AssemblerPredicate<(all_of FeatureGFX90AInsts)>;2431 2432def isNotGFX90APlus :2433  Predicate<"!Subtarget->hasGFX90AInsts()">,2434  AssemblerPredicate<(all_of (not FeatureGFX90AInsts))>;2435 2436def isGFX8GFX9NotGFX90A :2437  Predicate<"!Subtarget->hasGFX90AInsts() &&"2438            "(Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2439            " Subtarget->getGeneration() == AMDGPUSubtarget::GFX9)">,2440  AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding, (not FeatureGFX90AInsts))>;2441 2442def isGFX90AOnly :2443  Predicate<"Subtarget->hasGFX90AInsts() && !Subtarget->hasGFX940Insts()">,2444  AssemblerPredicate<(all_of FeatureGFX90AInsts, (not FeatureGFX940Insts))>;2445 2446def isGFX908orGFX90A :2447  Predicate<"Subtarget->hasMAIInsts() && !Subtarget->hasGFX940Insts()">,2448  AssemblerPredicate<(all_of FeatureMAIInsts, (not FeatureGFX940Insts))>;2449 2450def isGFX940Plus :2451  Predicate<"Subtarget->hasGFX940Insts()">,2452  AssemblerPredicate<(all_of FeatureGFX940Insts)>;2453 2454def isNotGFX940Plus :2455  Predicate<"!Subtarget->hasGFX940Insts()">,2456  AssemblerPredicate<(all_of (not FeatureGFX940Insts))>;2457 2458def HasGFX950Insts :2459  Predicate<"Subtarget->hasGFX950Insts()">,2460  AssemblerPredicate<(all_of FeatureGFX950Insts)>;2461 2462def HasPermlane16Swap :2463  Predicate<"Subtarget->hasPermlane16Swap()">,2464  AssemblerPredicate<(all_of FeaturePermlane16Swap)>;2465 2466def HasPermlane32Swap :2467  Predicate<"Subtarget->hasPermlane32Swap()">,2468  AssemblerPredicate<(all_of FeaturePermlane32Swap)>;2469 2470def isGFX8GFX9NotGFX940 :2471  Predicate<"!Subtarget->hasGFX940Insts() &&"2472            "(Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2473            " Subtarget->getGeneration() == AMDGPUSubtarget::GFX9)">,2474  AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding, (not FeatureGFX940Insts))>;2475 2476def isGFX8GFX9 :2477  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2478            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">,2479  AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding)>;2480 2481def isGFX10Only :2482  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2483  AssemblerPredicate<(all_of FeatureGFX10Insts, (not FeatureGFX11Insts))>;2484 2485def isGFX10Plus :2486  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX10">,2487  AssemblerPredicate<(all_of FeatureGFX10Insts)>;2488 2489def isGFX10GFX11 :2490  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX10 ||"2491            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX11">,2492  AssemblerPredicate<(all_of FeatureGFX10Insts, (not FeatureGFX12Insts))>;2493 2494def isGFX10Before1030 :2495  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX10 &&"2496            "!Subtarget->hasGFX10_3Insts()">,2497  AssemblerPredicate<(all_of FeatureGFX10Insts,(not FeatureGFX10_3Insts))>;2498 2499def isGFX9GFX10 :2500  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||"2501            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2502  AssemblerPredicate<(all_of FeatureGFX9Insts, (not FeatureGFX11Insts))>;2503 2504def isGFX9GFX10GFX11 :2505  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9 &&"2506            "Subtarget->getGeneration() < AMDGPUSubtarget::GFX12">,2507  AssemblerPredicate<(all_of FeatureGFX9Insts, (not FeatureGFX12Insts))>;2508 2509def isGFX8GFX9GFX10 :2510  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||"2511            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||"2512            "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">,2513  AssemblerPredicate<(all_of FeatureGFX8Insts, (not FeatureGFX11Insts))>;2514 2515def isGFX11Only :2516  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX11">,2517  AssemblerPredicate<(all_of FeatureGFX11Insts, (not FeatureGFX12Insts))>;2518 2519def isGFX11Plus :2520  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX11">,2521  AssemblerPredicate<(all_of FeatureGFX11Insts)>;2522 2523def isGFX12Only :2524  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX12">,2525  AssemblerPredicate<(all_of FeatureGFX12Insts)>;2526 2527def isGFX12Not12_50 :2528  Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX12 && !Subtarget->hasGFX1250Insts()">,2529  AssemblerPredicate<(all_of FeatureGFX12Insts, (not FeatureGFX1250Insts))>;2530 2531def isGFX12Plus :2532  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX12">,2533  AssemblerPredicate<(all_of FeatureGFX12Insts)>;2534 2535def isGFX12PlusNot12_50 :2536  Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX12 && !Subtarget->hasGFX1250Insts()">,2537  AssemblerPredicate<(all_of FeatureGFX12Insts, (not FeatureGFX1250Insts))>;2538 2539def isGFX125xOnly :2540  Predicate<"Subtarget->hasGFX1250Insts()">,2541  AssemblerPredicate<(all_of FeatureGFX1250Insts)>;2542 2543def isGFX1250Plus :2544  Predicate<"Subtarget->hasGFX1250Insts()">,2545  AssemblerPredicate<(all_of FeatureGFX1250Insts)>;2546 2547def isNotGFX1250Plus :2548  Predicate<"!Subtarget->hasGFX1250Insts()">,2549  AssemblerPredicate<(all_of (not FeatureGFX1250Insts))>;2550 2551def isGFX940orGFX1250 :2552  Predicate<"Subtarget->hasGFX940Insts() || Subtarget->hasGFX1250Insts()">,2553  AssemblerPredicate<(any_of FeatureGFX940Insts, FeatureGFX1250Insts)>;2554 2555def HasIEEEMinimumMaximumInsts :2556  Predicate<"Subtarget->hasIEEEMinimumMaximumInsts()">,2557  AssemblerPredicate<(all_of FeatureIEEEMinimumMaximumInsts)>;2558 2559def HasMinimum3Maximum3F32 :2560  Predicate<"Subtarget->hasMinimum3Maximum3F32()">,2561  AssemblerPredicate<(all_of FeatureMinimum3Maximum3F32)>;2562 2563def HasMinimum3Maximum3F16 :2564  Predicate<"Subtarget->hasMinimum3Maximum3F16()">,2565  AssemblerPredicate<(all_of FeatureMinimum3Maximum3F16)>;2566 2567def HasMin3Max3PKF16 :2568  Predicate<"Subtarget->hasMin3Max3PKF16()">,2569  AssemblerPredicate<(all_of FeatureMin3Max3PKF16)>;2570 2571def HasMinimum3Maximum3PKF16 :2572  Predicate<"Subtarget->hasMinimum3Maximum3PKF16()">,2573  AssemblerPredicate<(all_of FeatureMinimum3Maximum3PKF16)>;2574 2575 2576def HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">,2577  AssemblerPredicate<(all_of FeatureFlatAddressSpace)>;2578 2579def HasFlatBufferGlobalAtomicFaddF64Inst :2580  Predicate<"Subtarget->hasFlatBufferGlobalAtomicFaddF64Inst()">,2581  AssemblerPredicate<(any_of FeatureFlatBufferGlobalAtomicFaddF64Inst)>;2582 2583def HasAtomicFMinFMaxF32GlobalInsts :2584  Predicate<"Subtarget->hasAtomicFMinFMaxF32GlobalInsts()">,2585  AssemblerPredicate<(any_of FeatureAtomicFMinFMaxF32GlobalInsts)>;2586 2587def HasAtomicFMinFMaxF64GlobalInsts :2588  Predicate<"Subtarget->hasAtomicFMinFMaxF64GlobalInsts()">,2589  AssemblerPredicate<(any_of FeatureAtomicFMinFMaxF64GlobalInsts)>;2590 2591def HasAtomicFMinFMaxF32FlatInsts :2592  Predicate<"Subtarget->hasAtomicFMinFMaxF32FlatInsts()">,2593  AssemblerPredicate<(any_of FeatureAtomicFMinFMaxF32FlatInsts)>;2594 2595def HasAtomicFMinFMaxF64FlatInsts :2596  Predicate<"Subtarget->hasAtomicFMinFMaxF64FlatInsts()">,2597  AssemblerPredicate<(any_of FeatureAtomicFMinFMaxF64FlatInsts)>;2598 2599def HasLdsAtomicAddF64 :2600  Predicate<"Subtarget->hasLdsAtomicAddF64()">,2601  AssemblerPredicate<(any_of FeatureGFX90AInsts, FeatureGFX1250Insts)>;2602 2603def HasFlatGlobalInsts : Predicate<"Subtarget->hasFlatGlobalInsts()">,2604  AssemblerPredicate<(all_of FeatureFlatGlobalInsts)>;2605def HasFlatScratchInsts : Predicate<"Subtarget->hasFlatScratchInsts()">,2606  AssemblerPredicate<(all_of FeatureFlatScratchInsts)>;2607def HasScalarFlatScratchInsts : Predicate<"Subtarget->hasScalarFlatScratchInsts()">,2608  AssemblerPredicate<(all_of FeatureScalarFlatScratchInsts)>;2609def HasD16LoadStore : Predicate<"Subtarget->hasD16LoadStore()">,2610  AssemblerPredicate<(all_of FeatureGFX9Insts)>;2611 2612def HasFlatScratchSTMode : Predicate<"Subtarget->hasFlatScratchSTMode()">,2613  AssemblerPredicate<(any_of FeatureGFX10_3Insts, FeatureGFX940Insts)>;2614def HasFlatScratchSVSMode : Predicate<"Subtarget->hasFlatScratchSVSMode()">,2615  AssemblerPredicate<(any_of FeatureGFX940Insts, FeatureGFX11Insts)>;2616 2617def HasFlatGVSMode : Predicate<"Subtarget->hasFlatGVSMode()">,2618  AssemblerPredicate<(all_of FeatureFlatGVSMode)>;2619 2620def HasGFX10_AEncoding : Predicate<"Subtarget->hasGFX10_AEncoding()">,2621  AssemblerPredicate<(all_of FeatureGFX10_AEncoding)>;2622 2623def HasGFX10_BEncoding : Predicate<"Subtarget->hasGFX10_BEncoding()">,2624  AssemblerPredicate<(all_of FeatureGFX10_BEncoding)>;2625 2626def HasUnpackedD16VMem : Predicate<"Subtarget->hasUnpackedD16VMem()">,2627  AssemblerPredicate<(all_of FeatureUnpackedD16VMem)>;2628def HasPackedD16VMem : Predicate<"!Subtarget->hasUnpackedD16VMem()">,2629  AssemblerPredicate<(all_of (not FeatureUnpackedD16VMem))>;2630 2631def HasRestrictedSOffset : Predicate<"Subtarget->hasRestrictedSOffset()">,2632  AssemblerPredicate<(all_of FeatureHasRestrictedSOffset)>;2633def HasUnrestrictedSOffset : Predicate<"!Subtarget->hasRestrictedSOffset()">,2634  AssemblerPredicate<(all_of (not FeatureHasRestrictedSOffset))>;2635 2636def D16PreservesUnusedBits :2637  Predicate<"Subtarget->d16PreservesUnusedBits()">,2638  AssemblerPredicate<(all_of FeatureGFX9Insts, (not FeatureSRAMECC))>;2639 2640def LDSRequiresM0Init : Predicate<"Subtarget->ldsRequiresM0Init()">;2641def NotLDSRequiresM0Init : Predicate<"!Subtarget->ldsRequiresM0Init()">;2642 2643def HasMTBUFInsts : Predicate<"Subtarget->hasMTBUFInsts()">,2644  AssemblerPredicate<(all_of (not FeatureGFX1250Insts))>;2645 2646def HasFormattedMUBUFInsts : Predicate<"Subtarget->hasFormattedMUBUFInsts()">,2647  AssemblerPredicate<(all_of (not FeatureGFX1250Insts))>;2648 2649def HasExportInsts : Predicate<"Subtarget->hasExportInsts()">,2650  AssemblerPredicate<(all_of (not FeatureGFX90AInsts), (not FeatureGFX1250Insts))>;2651 2652def HasVINTERPEncoding : Predicate<"Subtarget->hasVINTERPEncoding()">,2653  AssemblerPredicate<(all_of FeatureGFX11Insts, (not FeatureGFX1250Insts))>;2654 2655def HasDSAddTid : Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">,2656  AssemblerPredicate<(all_of FeatureGFX9Insts)>;2657 2658def HasLDSFPAtomicAddF32 : Predicate<"Subtarget->hasLDSFPAtomicAddF32()">,2659  AssemblerPredicate<(all_of FeatureGFX8Insts)>;2660 2661def HasAddNoCarryInsts : Predicate<"Subtarget->hasAddNoCarry()">,2662  AssemblerPredicate<(all_of FeatureAddNoCarryInsts)>;2663 2664def NotHasAddNoCarryInsts : Predicate<"!Subtarget->hasAddNoCarry()">;2665 2666def HasXNACKEnabled : Predicate<"Subtarget->isXNACKEnabled()">;2667 2668def Has16BitInsts : Predicate<"Subtarget->has16BitInsts()">,2669  AssemblerPredicate<(all_of Feature16BitInsts)>;2670 2671def HasTrue16BitInsts : Predicate<"Subtarget->hasTrue16BitInsts()">,2672  AssemblerPredicate<(all_of FeatureTrue16BitInsts)>;2673def NotHasTrue16BitInsts : True16PredicateClass<"!Subtarget->hasTrue16BitInsts()">,2674  AssemblerPredicate<(all_of (not FeatureTrue16BitInsts))>;2675 2676// Control use of True16 instructions. The real True16 instructions are2677// True16 instructions as they are defined in the ISA. Fake True162678// instructions have the same encoding as real ones but syntactically2679// only allow 32-bit registers in operands and use low halves thereof.2680def UseRealTrue16Insts : True16PredicateClass<"Subtarget->useRealTrue16Insts()">,2681  AssemblerPredicate<(all_of FeatureTrue16BitInsts, FeatureRealTrue16Insts)>;2682def NotUseRealTrue16Insts : True16PredicateClass<"!Subtarget->useRealTrue16Insts()">,2683  AssemblerPredicate<(not (all_of FeatureTrue16BitInsts, FeatureRealTrue16Insts))>;2684def UseFakeTrue16Insts : True16PredicateClass<"Subtarget->hasTrue16BitInsts() && "2685                                              "!Subtarget->useRealTrue16Insts()">,2686  AssemblerPredicate<(all_of FeatureTrue16BitInsts)>;2687  // FIXME When we default to RealTrue16 instead of Fake, change the line as follows.2688  // AssemblerPredicate<(all_of FeatureTrue16BitInsts, (not FeatureRealTrue16Insts))>;2689 2690def UseTrue16WithSramECC : True16PredicateClass<"Subtarget->useRealTrue16Insts() && "2691                                                "!Subtarget->d16PreservesUnusedBits()">;2692 2693def HasD16Writes32BitVgpr: Predicate<"Subtarget->hasD16Writes32BitVgpr()">,2694  AssemblerPredicate<(all_of FeatureTrue16BitInsts, FeatureRealTrue16Insts, FeatureD16Writes32BitVgpr)>;2695def NotHasD16Writes32BitVgpr: Predicate<"!Subtarget->hasD16Writes32BitVgpr()">,2696  AssemblerPredicate<(all_of FeatureTrue16BitInsts, FeatureRealTrue16Insts, (not FeatureD16Writes32BitVgpr))>;2697 2698def HasBF16TransInsts : Predicate<"Subtarget->hasBF16TransInsts()">,2699  AssemblerPredicate<(all_of FeatureBF16TransInsts)>;2700 2701def HasBF16ConversionInsts : Predicate<"Subtarget->hasBF16ConversionInsts()">,2702  AssemblerPredicate<(all_of FeatureBF16ConversionInsts)>;2703 2704def HasBF16PackedInsts : Predicate<"Subtarget->hasBF16PackedInsts()">,2705  AssemblerPredicate<(all_of FeatureBF16PackedInsts)>;2706 2707def HasVOP3PInsts : Predicate<"Subtarget->hasVOP3PInsts()">,2708  AssemblerPredicate<(all_of FeatureVOP3P)>;2709 2710def NotHasMed3_16 : Predicate<"!Subtarget->hasMed3_16()">;2711def HasMed3_16 : Predicate<"Subtarget->hasMed3_16()">;2712 2713def HasMinMaxDenormModes : Predicate<"Subtarget->supportsMinMaxDenormModes()">;2714def NotHasMinMaxDenormModes : Predicate<"!Subtarget->supportsMinMaxDenormModes()">;2715 2716def HasFminFmaxLegacy : Predicate<"Subtarget->hasFminFmaxLegacy()">;2717 2718def HasSDWA : Predicate<"Subtarget->hasSDWA()">;2719 2720def HasSDWA8 : Predicate<"Subtarget->hasSDWA()">,2721  AssemblerPredicate<(all_of (not FeatureGFX9Insts), FeatureSDWA)>;2722 2723def HasSDWA9 :2724  Predicate<"Subtarget->hasSDWA()">,2725  AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureGFX9Insts,FeatureSDWA)>;2726 2727def HasSDWA10 :2728  Predicate<"Subtarget->hasSDWA()">,2729  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureSDWA)>;2730 2731def HasDPP : Predicate<"Subtarget->hasDPP()">,2732  AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureDPP)>;2733 2734def HasDPP8 : Predicate<"Subtarget->hasDPP8()">,2735  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureDPP8)>;2736 2737def HasDPALU_DPP : Predicate<"Subtarget->hasDPALU_DPP()">,2738  AssemblerPredicate<(all_of FeatureDPALU_DPP)>;2739 2740def HasPackedFP32Ops : Predicate<"Subtarget->hasPackedFP32Ops()">,2741  AssemblerPredicate<(all_of FeaturePackedFP32Ops)>;2742 2743def HasPkMovB32 : Predicate<"Subtarget->hasPkMovB32()">,2744  AssemblerPredicate<(all_of FeatureGFX90AInsts)>;2745 2746def HasFmaakFmamkF32Insts :2747  Predicate<"Subtarget->hasFmaakFmamkF32Insts()">,2748  AssemblerPredicate<(any_of FeatureGFX10Insts, FeatureGFX940Insts)>;2749 2750def HasFmaakFmamkF64Insts :2751  Predicate<"Subtarget->hasFmaakFmamkF64Insts()">,2752  AssemblerPredicate<(any_of FeatureGFX1250Insts)>;2753 2754def HasAddMinMaxInsts :2755  Predicate<"Subtarget->hasAddMinMaxInsts()">,2756  AssemblerPredicate<(any_of FeatureAddMinMaxInsts)>;2757 2758def HasPkAddMinMaxInsts :2759  Predicate<"Subtarget->hasPkAddMinMaxInsts()">,2760  AssemblerPredicate<(any_of FeaturePkAddMinMaxInsts)>;2761 2762def HasPkMinMax3Insts :2763  Predicate<"Subtarget->hasPkMinMax3Insts()">,2764  AssemblerPredicate<(any_of FeatureGFX1250Insts)>;2765 2766def HasSGetShaderCyclesInst :2767  Predicate<"Subtarget->hasSGetShaderCyclesInst()">,2768  AssemblerPredicate<(any_of FeatureGFX1250Insts)>;2769 2770def HasImageInsts : Predicate<"Subtarget->hasImageInsts()">,2771  AssemblerPredicate<(all_of FeatureImageInsts)>;2772 2773def HasExtendedImageInsts : Predicate<"Subtarget->hasExtendedImageInsts()">,2774  AssemblerPredicate<(all_of FeatureExtendedImageInsts)>;2775 2776def HasR128A16 : Predicate<"Subtarget->hasR128A16()">,2777  AssemblerPredicate<(all_of FeatureR128A16)>;2778 2779def HasA16 : Predicate<"Subtarget->hasA16()">,2780  AssemblerPredicate<(all_of FeatureA16)>;2781 2782def HasG16 : Predicate<"Subtarget->hasG16()">,2783  AssemblerPredicate<(all_of FeatureG16)>;2784 2785def HasDPP16 : Predicate<"Subtarget->hasDPP()">,2786  AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureDPP)>;2787 2788def HasIntClamp : Predicate<"Subtarget->hasIntClamp()">,2789  AssemblerPredicate<(all_of FeatureIntClamp)>;2790 2791def HasMadMixInsts : Predicate<"Subtarget->hasMadMixInsts()">,2792  AssemblerPredicate<(all_of FeatureMadMixInsts)>;2793 2794def HasScalarStores : Predicate<"Subtarget->hasScalarStores()">,2795  AssemblerPredicate<(all_of FeatureScalarStores)>;2796 2797def HasScalarAtomics : Predicate<"Subtarget->hasScalarAtomics()">,2798  AssemblerPredicate<(all_of FeatureScalarAtomics)>;2799 2800def HasNoSdstCMPX : Predicate<"Subtarget->hasNoSdstCMPX()">,2801  AssemblerPredicate<(all_of FeatureNoSdstCMPX)>;2802 2803def HasSdstCMPX : Predicate<"!Subtarget->hasNoSdstCMPX()">,2804  AssemblerPredicate<(all_of (not FeatureNoSdstCMPX))>;2805 2806def has16BankLDS : Predicate<"Subtarget->getLDSBankCount() == 16">;2807def has32BankLDS : Predicate<"Subtarget->getLDSBankCount() == 32">;2808def HasVGPRIndexMode : Predicate<"Subtarget->hasVGPRIndexMode()">,2809                      AssemblerPredicate<(all_of FeatureVGPRIndexMode)>;2810def HasMovrel : Predicate<"Subtarget->hasMovrel()">,2811                AssemblerPredicate<(all_of FeatureMovrel)>;2812 2813def HasFmaMixInsts : Predicate<"Subtarget->hasFmaMixInsts()">,2814  AssemblerPredicate<(all_of FeatureFmaMixInsts)>;2815 2816def HasFmaMixBF16Insts : Predicate<"Subtarget->hasFmaMixBF16Insts()">,2817  AssemblerPredicate<(all_of FeatureFmaMixBF16Insts)>;2818 2819def HasDLInsts : Predicate<"Subtarget->hasDLInsts()">,2820  AssemblerPredicate<(all_of FeatureDLInsts)>;2821 2822def HasFmacF64Inst : Predicate<"Subtarget->hasFmacF64Inst()">,2823  AssemblerPredicate<(all_of FeatureFmacF64Inst)>;2824 2825def HasDot1Insts : Predicate<"Subtarget->hasDot1Insts()">,2826  AssemblerPredicate<(all_of FeatureDot1Insts)>;2827 2828def HasDot2Insts : Predicate<"Subtarget->hasDot2Insts()">,2829  AssemblerPredicate<(all_of FeatureDot2Insts)>;2830 2831def HasDot3Insts : Predicate<"Subtarget->hasDot3Insts()">,2832  AssemblerPredicate<(all_of FeatureDot3Insts)>;2833 2834def HasDot4Insts : Predicate<"Subtarget->hasDot4Insts()">,2835  AssemblerPredicate<(all_of FeatureDot4Insts)>;2836 2837def HasDot5Insts : Predicate<"Subtarget->hasDot5Insts()">,2838  AssemblerPredicate<(all_of FeatureDot5Insts)>;2839 2840def HasDot6Insts : Predicate<"Subtarget->hasDot6Insts()">,2841  AssemblerPredicate<(all_of FeatureDot6Insts)>;2842 2843def HasDot7Insts : Predicate<"Subtarget->hasDot7Insts()">,2844  AssemblerPredicate<(all_of FeatureDot7Insts)>;2845 2846def HasDot8Insts : Predicate<"Subtarget->hasDot8Insts()">,2847  AssemblerPredicate<(all_of FeatureDot8Insts)>;2848 2849def HasDot9Insts : Predicate<"Subtarget->hasDot9Insts()">,2850  AssemblerPredicate<(all_of FeatureDot9Insts)>;2851 2852def HasDot10Insts : Predicate<"Subtarget->hasDot10Insts()">,2853  AssemblerPredicate<(all_of FeatureDot10Insts)>;2854 2855def HasDot11Insts : Predicate<"Subtarget->hasDot11Insts()">,2856  AssemblerPredicate<(all_of FeatureDot11Insts)>;2857 2858def HasDot12Insts : Predicate<"Subtarget->hasDot12Insts()">,2859  AssemblerPredicate<(all_of FeatureDot12Insts)>;2860 2861def HasDot13Insts : Predicate<"Subtarget->hasDot13Insts()">,2862  AssemblerPredicate<(all_of FeatureDot13Insts)>;2863 2864def HasGetWaveIdInst : Predicate<"Subtarget->hasGetWaveIdInst()">,2865  AssemblerPredicate<(all_of FeatureGetWaveIdInst)>;2866 2867def HasMAIInsts : Predicate<"Subtarget->hasMAIInsts()">,2868  AssemblerPredicate<(all_of FeatureMAIInsts)>;2869 2870def NotHasMAIInsts : Predicate<"!Subtarget->hasMAIInsts()">,2871  AssemblerPredicate<(all_of (not FeatureMAIInsts))>;2872 2873def HasSMemRealTime : Predicate<"Subtarget->hasSMemRealTime()">,2874  AssemblerPredicate<(all_of FeatureSMemRealTime)>;2875 2876def HasSMemTimeInst : Predicate<"Subtarget->hasSMemTimeInst()">,2877  AssemblerPredicate<(all_of FeatureSMemTimeInst)>;2878 2879def HasShaderCyclesRegister : Predicate<"Subtarget->hasShaderCyclesRegister()">,2880  AssemblerPredicate<(all_of FeatureShaderCyclesRegister)>;2881 2882def HasShaderCyclesHiLoRegisters : Predicate<"Subtarget->hasShaderCyclesHiLoRegisters()">;2883 2884def HasFP8Insts : Predicate<"Subtarget->hasFP8Insts()">,2885  AssemblerPredicate<(all_of FeatureFP8Insts)>;2886 2887def HasFP8ConversionInsts : Predicate<"Subtarget->hasFP8ConversionInsts()">,2888  AssemblerPredicate<(all_of FeatureFP8ConversionInsts)>;2889 2890def HasCubeInsts : Predicate<"Subtarget->hasCubeInsts()">,2891  AssemblerPredicate<(all_of FeatureCubeInsts)>;2892 2893def HasLerpInst : Predicate<"Subtarget->hasLerpInst()">,2894  AssemblerPredicate<(all_of FeatureLerpInst)>;2895 2896def HasSadInsts : Predicate<"Subtarget->hasSadInsts()">,2897  AssemblerPredicate<(all_of FeatureSadInsts)>;2898 2899def HasQsadInsts : Predicate<"Subtarget->hasQsadInsts()">,2900  AssemblerPredicate<(all_of FeatureQsadInsts)>;2901 2902def HasCvtNormInsts : Predicate<"Subtarget->hasCvtNormInsts()">,2903  AssemblerPredicate<(all_of FeatureCvtNormInsts)>;2904 2905def HasCvtPkNormVOP2Insts : Predicate<"Subtarget->hasCvtPkNormVOP2Insts()">,2906  AssemblerPredicate<(all_of FeatureCvtPkNormVOP2Insts)>;2907 2908def HasCvtPkNormVOP3Insts : Predicate<"Subtarget->hasCvtPkNormVOP3Insts()">,2909  AssemblerPredicate<(all_of FeatureCvtPkNormVOP3Insts)>;2910 2911def HasFP8E5M3Insts : Predicate<"Subtarget->hasFP8E5M3Insts()">,2912  AssemblerPredicate<(all_of FeatureFP8E5M3Insts)>;2913 2914def NotHasFP8E5M3Insts : Predicate<"!Subtarget->hasFP8E5M3Insts()">,2915  AssemblerPredicate<(all_of (not FeatureFP8E5M3Insts))>;2916 2917def HasPkFmacF16Inst : Predicate<"Subtarget->hasPkFmacF16Inst()">,2918  AssemblerPredicate<(all_of FeaturePkFmacF16Inst)>;2919 2920def HasMadMacF32Insts : Predicate<"Subtarget->hasMadMacF32Insts()">,2921  AssemblerPredicate<(all_of FeatureMadMacF32Insts)>;2922 2923def HasFmaLegacy32 : Predicate<"Subtarget->hasGFX10_3Insts()">,2924  AssemblerPredicate<(any_of FeatureGFX10_3Insts)>;2925 2926def HasAtomicDsPkAdd16Insts : Predicate<"Subtarget->hasAtomicDsPkAdd16Insts()">,2927  AssemblerPredicate<(any_of FeatureAtomicDsPkAdd16Insts)>;2928 2929def HasAtomicFlatPkAdd16Insts : Predicate<"Subtarget->hasAtomicFlatPkAdd16Insts()">,2930  AssemblerPredicate<(any_of FeatureAtomicFlatPkAdd16Insts)>;2931 2932def HasAtomicFaddRtnInsts : Predicate<"Subtarget->hasAtomicFaddRtnInsts()">,2933  AssemblerPredicate<(all_of FeatureAtomicFaddRtnInsts)>;2934def HasAtomicFaddNoRtnInsts : Predicate<"Subtarget->hasAtomicFaddNoRtnInsts()">,2935  AssemblerPredicate<(all_of FeatureAtomicFaddNoRtnInsts)>;2936def HasAtomicBufferGlobalPkAddF16NoRtnInsts2937  : Predicate<"Subtarget->hasAtomicBufferGlobalPkAddF16NoRtnInsts() || Subtarget->hasAtomicBufferGlobalPkAddF16Insts()">,2938  AssemblerPredicate<(any_of FeatureAtomicBufferGlobalPkAddF16NoRtnInsts, FeatureAtomicBufferGlobalPkAddF16Insts)>;2939def HasAtomicBufferGlobalPkAddF16Insts2940  : Predicate<"Subtarget->hasAtomicBufferGlobalPkAddF16Insts()">,2941  AssemblerPredicate<(all_of FeatureAtomicBufferGlobalPkAddF16Insts)>;2942def HasAtomicGlobalPkAddBF16Inst2943  : Predicate<"Subtarget->hasAtomicGlobalPkAddBF16Inst()">,2944    AssemblerPredicate<(all_of FeatureAtomicGlobalPkAddBF16Inst)>;2945def HasAtomicBufferPkAddBF16Inst2946  : Predicate<"Subtarget->hasAtomicBufferPkAddBF16Inst()">,2947    AssemblerPredicate<(all_of FeatureAtomicBufferPkAddBF16Inst)>;2948def HasFlatAtomicFaddF32Inst2949  : Predicate<"Subtarget->hasFlatAtomicFaddF32Inst()">,2950  AssemblerPredicate<(all_of FeatureFlatAtomicFaddF32Inst)>;2951 2952def HasDefaultComponentZero2953  : Predicate<"Subtarget->hasDefaultComponentZero()">,2954  AssemblerPredicate<(all_of FeatureDefaultComponentZero)>;2955def HasDefaultComponentBroadcast2956  : Predicate<"Subtarget->hasDefaultComponentBroadcast()">,2957  AssemblerPredicate<(all_of FeatureDefaultComponentBroadcast)>;2958 2959def HasDsSrc2Insts : Predicate<"!Subtarget->hasDsSrc2Insts()">,2960  AssemblerPredicate<(all_of FeatureDsSrc2Insts)>;2961 2962def HasAddPC64Inst : Predicate<"Subtarget->hasAddPC64Inst()">,2963  AssemblerPredicate<(any_of FeatureGFX1250Insts)>;2964 2965def EnableFlatScratch : Predicate<"Subtarget->enableFlatScratch()">;2966 2967def DisableFlatScratch : Predicate<"!Subtarget->enableFlatScratch()">;2968 2969def HasUnalignedAccessMode : Predicate<"Subtarget->hasUnalignedAccessMode()">,2970  AssemblerPredicate<(all_of FeatureUnalignedAccessMode)>;2971 2972def HasMADIntraFwdBug : Predicate<"Subtarget->hasMADIntraFwdBug()">;2973 2974def HasNotMADIntraFwdBug : Predicate<"!Subtarget->hasMADIntraFwdBug()">;2975 2976def HasSALUFloatInsts : Predicate<"Subtarget->hasSALUFloatInsts()">,2977  AssemblerPredicate<(all_of FeatureSALUFloatInsts)>;2978 2979def NotHasSALUFloatInsts : Predicate<"!Subtarget->hasSALUFloatInsts()">,2980  AssemblerPredicate<(all_of (not FeatureSALUFloatInsts))>;2981 2982def HasPseudoScalarTrans : Predicate<"Subtarget->hasPseudoScalarTrans()">,2983  AssemblerPredicate<(all_of FeaturePseudoScalarTrans)>;2984 2985def HasBitOp3Insts : Predicate<"Subtarget->hasBitOp3Insts()">,2986  AssemblerPredicate<(all_of FeatureBitOp3Insts)>;2987 2988def HasTanhInsts : Predicate<"Subtarget->hasTanhInsts()">,2989  AssemblerPredicate<(all_of FeatureTanhInsts)>;2990 2991def HasTensorCvtLutInsts : Predicate<"Subtarget->hasTensorCvtLutInsts()">,2992  AssemblerPredicate<(all_of FeatureTensorCvtLutInsts)>;2993 2994def HasTransposeLoadF4F6Insts : Predicate<"Subtarget->hasTransposeLoadF4F6Insts()">,2995  AssemblerPredicate<(all_of FeatureTransposeLoadF4F6Insts)>;2996 2997def HasPrngInst : Predicate<"Subtarget->hasPrngInst()">,2998  AssemblerPredicate<(all_of FeaturePrngInst)>;2999 3000def HasBVHDualAndBVH8Insts : Predicate<"Subtarget->hasBVHDualAndBVH8Insts()">,3001  AssemblerPredicate<(all_of FeatureBVHDualAndBVH8Insts)>;3002 3003def Has64BitLiterals : Predicate<"Subtarget->has64BitLiterals()">,3004  AssemblerPredicate<(all_of Feature64BitLiterals)>;3005 3006def Has1024AddressableVGPRs : Predicate<"Subtarget->has1024AddressableVGPRs()">,3007  AssemblerPredicate<(all_of Feature1024AddressableVGPRs)>;3008 3009def HasWaitXcnt : Predicate<"Subtarget->hasWaitXcnt()">,3010  AssemblerPredicate<(all_of FeatureWaitXcnt)>;3011 3012def HasFP8ConversionScaleInsts : Predicate<"Subtarget->hasFP8ConversionScaleInsts()">,3013  AssemblerPredicate<(all_of FeatureFP8ConversionScaleInsts)>;3014 3015def HasBF8ConversionScaleInsts : Predicate<"Subtarget->hasBF8ConversionScaleInsts()">,3016  AssemblerPredicate<(all_of FeatureBF8ConversionScaleInsts)>;3017 3018def HasFP4ConversionScaleInsts : Predicate<"Subtarget->hasFP4ConversionScaleInsts()">,3019  AssemblerPredicate<(all_of FeatureFP4ConversionScaleInsts)>;3020 3021def HasFP6BF6ConversionScaleInsts : Predicate<"Subtarget->hasFP6BF6ConversionScaleInsts()">,3022  AssemblerPredicate<(all_of FeatureFP6BF6ConversionScaleInsts)>;3023 3024def HasF16BF16ToFP6BF6ConversionScaleInsts : Predicate<"Subtarget->hasF16BF16ToFP6BF6ConversionScaleInsts()">,3025  AssemblerPredicate<(all_of FeatureF16BF16ToFP6BF6ConversionScaleInsts)>;3026 3027def HasCvtPkF16F32Inst : Predicate<"Subtarget->hasCvtPkF16F32Inst()">,3028  AssemblerPredicate<(all_of FeatureCvtPkF16F32Inst)>;3029 3030def HasF32ToF16BF16ConversionSRInsts : Predicate<"Subtarget->hasF32ToF16BF16ConversionSRInsts()">,3031  AssemblerPredicate<(all_of FeatureF32ToF16BF16ConversionSRInsts)>;3032 3033def HasGDS : Predicate<"Subtarget->hasGDS()">;3034 3035def HasGWS : Predicate<"Subtarget->hasGWS()">;3036 3037def HasCvtFP8VOP1Bug : Predicate<"Subtarget->hasCvtFP8VOP1Bug()">;3038def HasNoCvtFP8VOP1Bug : Predicate<"!Subtarget->hasCvtFP8VOP1Bug()">;3039 3040def HasAtomicCSubNoRtnInsts : Predicate<"Subtarget->hasAtomicCSubNoRtnInsts()">;3041 3042def HasScalarDwordx3Loads : Predicate<"Subtarget->hasScalarDwordx3Loads()">;3043 3044def HasXF32Insts : Predicate<"Subtarget->hasXF32Insts()">,3045   AssemblerPredicate<(all_of FeatureXF32Insts)>;3046 3047def HasVmemPrefInsts : Predicate<"Subtarget->hasVmemPrefInsts()">,3048  AssemblerPredicate<(all_of FeatureVmemPrefInsts)>;3049 3050def HasAshrPkInsts : Predicate<"Subtarget->hasAshrPkInsts()">,3051  AssemblerPredicate<(all_of FeatureAshrPkInsts)>;3052 3053def HasLshlAddU64Inst : Predicate<"Subtarget->hasLshlAddU64Inst()">,3054                        AssemblerPredicate<(all_of FeatureLshlAddU64Inst)>;3055 3056def HasAddSubU64Insts : Predicate<"Subtarget->hasAddSubU64Insts()">,3057                        AssemblerPredicate<(all_of FeatureAddSubU64Insts)>;3058 3059def HasMadU32Inst : Predicate<"Subtarget->hasMadU32Inst()">,3060                    AssemblerPredicate<(all_of FeatureMadU32Inst)>;3061 3062def HasLdsBarrierArriveAtomic : Predicate<"Subtarget->hasLdsBarrierArriveAtomic()">,3063  AssemblerPredicate<(all_of FeatureLdsBarrierArriveAtomic)>;3064 3065def HasSetPrioIncWgInst : Predicate<"Subtarget->hasSetPrioIncWgInst()">,3066 AssemblerPredicate<(all_of FeatureSetPrioIncWgInst)>;3067 3068def NeedsAlignedVGPRs : Predicate<"Subtarget->needsAlignedVGPRs()">,3069                      AssemblerPredicate<(all_of FeatureRequiresAlignedVGPRs)>;3070 3071def NotNeedsAlignedVGPRs : Predicate<"!Subtarget->needsAlignedVGPRs()">,3072                      AssemblerPredicate<(all_of (not FeatureRequiresAlignedVGPRs))>;3073 3074def isWave32 : Predicate<"Subtarget->isWave32()">,3075  AssemblerPredicate <(any_of FeatureWavefrontSize32,3076                              FeatureAssemblerPermissiveWavesize)>;3077def isWave64 : Predicate<"Subtarget->isWave64()">,3078  AssemblerPredicate <(any_of FeatureWavefrontSize64,3079                              FeatureAssemblerPermissiveWavesize)>;3080 3081def isWave32Strict : Predicate<"Subtarget->isWave32()">,3082  AssemblerPredicate <(all_of FeatureWavefrontSize32)>;3083def isWave64Strict : Predicate<"Subtarget->isWave64()">,3084  AssemblerPredicate <(all_of FeatureWavefrontSize64)>;3085 3086//===----------------------------------------------------------------------===//3087// HwModes3088//===----------------------------------------------------------------------===//3089 3090defvar DefaultMode_Wave64 = DefaultMode;3091defvar DefaultMode_Wave32 = HwMode<[isWave32, NotNeedsAlignedVGPRs]>;3092 3093// gfx90a-gfx950. Has AGPRs, and also the align2 VGPR/AGPR requirement. Implied3094// wave64.3095def AVAlign2LoadStoreMode : HwMode<[HasMAIInsts, NeedsAlignedVGPRs]>;3096 3097// gfx1250, has alignment requirement but no AGPRs.3098def AlignedVGPRNoAGPRMode_Wave32 : HwMode<[NotHasMAIInsts, NeedsAlignedVGPRs, isWave32Strict]>;3099def AlignedVGPRNoAGPRMode_Wave64 : HwMode<[NotHasMAIInsts, NeedsAlignedVGPRs, isWave64Strict]>;3100 3101// FIXME: This should be able to only define a separate hwmode that3102// only depends on wavesize for just ValueTypes. These use different3103// HwMode namespaces. If we don't define the full set of modes used3104// for RegClassByHwMode, tablegen crashes for some reason3105def WaveSizeVT : ValueTypeByHwMode<[3106  DefaultMode_Wave64,3107  AVAlign2LoadStoreMode,3108  AlignedVGPRNoAGPRMode_Wave64,3109  DefaultMode_Wave32,3110  AlignedVGPRNoAGPRMode_Wave32], [i64, i64, i64, i32, i32]>;3111 3112 3113// Include AMDGPU TD files3114include "SISchedule.td"3115include "GCNProcessors.td"3116include "AMDGPUInstrInfo.td"3117include "SIRegisterInfo.td"3118include "AMDGPURegisterBanks.td"3119include "AMDGPUInstructions.td"3120include "SIInstrInfo.td"3121include "AMDGPUCallingConv.td"3122include "AMDGPUSearchableTables.td"3123