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-exception 6// 7//===------------------------------------------------------------===// 8 9include "llvm/TableGen/SearchableTable.td" 10include "llvm/Target/Target.td" 11include "AMDGPUFeatures.td" 12 13def p0 : PtrValueType<i64, 0>; 14def p1 : PtrValueType<i64, 1>; 15def p2 : PtrValueType<i32, 2>; 16def p3 : PtrValueType<i32, 3>; 17def p4 : PtrValueType<i64, 4>; 18def p5 : PtrValueType<i32, 5>; 19def p6 : PtrValueType<i32, 6>; 20 21class BoolToList<bit Value> { 22 list<int> ret = !if(Value, [1]<int>, []<int>); 23} 24 25//===------------------------------------------------------------===// 26// Subtarget Features (device properties) 27//===------------------------------------------------------------===// 28 29def FeatureFastFMAF32 : SubtargetFeature<"fast-fmaf", 30 "FastFMAF32", 31 "true", 32 "Assuming f32 fma is at least as fast as mul + add" 33>; 34 35def FeatureFastDenormalF32 : SubtargetFeature<"fast-denormal-f32", 36 "FastDenormalF32", 37 "true", 38 "Enabling denormals does not cause f32 instructions to run at f64 rates" 39>; 40 41def FeatureMIMG_R128 : SubtargetFeature<"mimg-r128", 42 "MIMG_R128", 43 "true", 44 "Support 128-bit texture resources" 45>; 46 47def HalfRate64Ops : SubtargetFeature<"half-rate-64-ops", 48 "HalfRate64Ops", 49 "true", 50 "Most fp64 instructions are half rate instead of quarter" 51>; 52 53def FullRate64Ops : SubtargetFeature<"full-rate-64-ops", 54 "FullRate64Ops", 55 "true", 56 "Most fp64 instructions are full rate" 57>; 58 59def FeatureFlatAddressSpace : SubtargetFeature<"flat-address-space", 60 "FlatAddressSpace", 61 "true", 62 "Support flat address space" 63>; 64 65def FeatureFlatInstOffsets : SubtargetFeature<"flat-inst-offsets", 66 "FlatInstOffsets", 67 "true", 68 "Flat instructions have immediate offset addressing mode" 69>; 70 71def FeatureFlatGlobalInsts : SubtargetFeature<"flat-global-insts", 72 "FlatGlobalInsts", 73 "true", 74 "Have global_* flat memory instructions" 75>; 76 77def FeatureFlatScratchInsts : SubtargetFeature<"flat-scratch-insts", 78 "FlatScratchInsts", 79 "true", 80 "Have scratch_* flat memory instructions" 81>; 82 83def FeatureScalarFlatScratchInsts : SubtargetFeature<"scalar-flat-scratch-insts", 84 "ScalarFlatScratchInsts", 85 "true", 86 "Have s_scratch_* flat memory instructions" 87>; 88 89def FeatureEnableFlatScratch : SubtargetFeature<"enable-flat-scratch", 90 "EnableFlatScratch", 91 "true", 92 "Use scratch_* flat memory instructions to access scratch" 93>; 94 95def FeatureAddNoCarryInsts : SubtargetFeature<"add-no-carry-insts", 96 "AddNoCarryInsts", 97 "true", 98 "Have VALU add/sub instructions without carry out" 99>; 100 101def FeatureUnalignedBufferAccess : SubtargetFeature<"unaligned-buffer-access", 102 "UnalignedBufferAccess", 103 "true", 104 "Hardware supports unaligned global loads and stores" 105>; 106 107def FeatureTrapHandler: SubtargetFeature<"trap-handler", 108 "TrapHandler", 109 "true", 110 "Trap handler support" 111>; 112 113def FeatureUnalignedScratchAccess : SubtargetFeature<"unaligned-scratch-access", 114 "UnalignedScratchAccess", 115 "true", 116 "Support unaligned scratch loads and stores" 117>; 118 119def FeatureUnalignedDSAccess : SubtargetFeature<"unaligned-ds-access", 120 "UnalignedDSAccess", 121 "true", 122 "Hardware supports unaligned local and region loads and stores" 123>; 124 125def FeatureApertureRegs : SubtargetFeature<"aperture-regs", 126 "HasApertureRegs", 127 "true", 128 "Has Memory Aperture Base and Size Registers" 129>; 130 131def FeatureMadMixInsts : SubtargetFeature<"mad-mix-insts", 132 "HasMadMixInsts", 133 "true", 134 "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions" 135>; 136 137def FeatureFmaMixInsts : SubtargetFeature<"fma-mix-insts", 138 "HasFmaMixInsts", 139 "true", 140 "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions" 141>; 142 143def FeatureSupportsXNACK : SubtargetFeature<"xnack-support", 144 "SupportsXNACK", 145 "true", 146 "Hardware supports XNACK" 147>; 148 149// XNACK is disabled if SH_MEM_CONFIG.ADDRESS_MODE = GPUVM on chips that support 150// XNACK. The current default kernel driver setting is: 151// - graphics ring: XNACK disabled 152// - compute ring: XNACK enabled 153// 154// If XNACK is enabled, the VMEM latency can be worse. 155// If XNACK is disabled, the 2 SGPRs can be used for general purposes. 156def FeatureXNACK : SubtargetFeature<"xnack", 157 "EnableXNACK", 158 "true", 159 "Enable XNACK support" 160>; 161 162def FeatureTgSplit : SubtargetFeature<"tgsplit", 163 "EnableTgSplit", 164 "true", 165 "Enable threadgroup split execution" 166>; 167 168def FeatureCuMode : SubtargetFeature<"cumode", 169 "EnableCuMode", 170 "true", 171 "Enable CU wavefront execution mode" 172>; 173 174def FeatureSGPRInitBug : SubtargetFeature<"sgpr-init-bug", 175 "SGPRInitBug", 176 "true", 177 "VI SGPR initialization bug requiring a fixed SGPR allocation size" 178>; 179 180def FeatureUserSGPRInit16Bug : SubtargetFeature<"user-sgpr-init16-bug", 181 "UserSGPRInit16Bug", 182 "true", 183 "Bug requiring at least 16 user+system SGPRs to be enabled" 184>; 185 186def FeatureLdsMisalignedBug : SubtargetFeature<"lds-misaligned-bug", 187 "LDSMisalignedBug", 188 "true", 189 "Some GFX10 bug with multi-dword LDS and flat access that is not naturally aligned in WGP mode" 190>; 191 192def FeatureMFMAInlineLiteralBug : SubtargetFeature<"mfma-inline-literal-bug", 193 "HasMFMAInlineLiteralBug", 194 "true", 195 "MFMA cannot use inline literal as SrcC" 196>; 197 198def FeatureVcmpxPermlaneHazard : SubtargetFeature<"vcmpx-permlane-hazard", 199 "HasVcmpxPermlaneHazard", 200 "true", 201 "TODO: describe me" 202>; 203 204def FeatureVMEMtoScalarWriteHazard : SubtargetFeature<"vmem-to-scalar-write-hazard", 205 "HasVMEMtoScalarWriteHazard", 206 "true", 207 "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution." 208>; 209 210def FeatureSMEMtoVectorWriteHazard : SubtargetFeature<"smem-to-vector-write-hazard", 211 "HasSMEMtoVectorWriteHazard", 212 "true", 213 "s_load_dword followed by v_cmp page faults" 214>; 215 216def FeatureInstFwdPrefetchBug : SubtargetFeature<"inst-fwd-prefetch-bug", 217 "HasInstFwdPrefetchBug", 218 "true", 219 "S_INST_PREFETCH instruction causes shader to hang" 220>; 221 222def FeatureVcmpxExecWARHazard : SubtargetFeature<"vcmpx-exec-war-hazard", 223 "HasVcmpxExecWARHazard", 224 "true", 225 "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)" 226>; 227 228def FeatureLdsBranchVmemWARHazard : SubtargetFeature<"lds-branch-vmem-war-hazard", 229 "HasLdsBranchVmemWARHazard", 230 "true", 231 "Switching between LDS and VMEM-tex not waiting VM_VSRC=0" 232>; 233 234def FeatureNSAtoVMEMBug : SubtargetFeature<"nsa-to-vmem-bug", 235 "HasNSAtoVMEMBug", 236 "true", 237 "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero" 238>; 239 240def FeatureNSAClauseBug : SubtargetFeature<"nsa-clause-bug", 241 "HasNSAClauseBug", 242 "true", 243 "MIMG-NSA in a hard clause has unpredictable results on GFX10.1" 244>; 245 246def FeatureFlatSegmentOffsetBug : SubtargetFeature<"flat-segment-offset-bug", 247 "HasFlatSegmentOffsetBug", 248 "true", 249 "GFX10 bug where inst_offset is ignored when flat instructions access global memory" 250>; 251 252def FeatureNegativeScratchOffsetBug : SubtargetFeature<"negative-scratch-offset-bug", 253 "NegativeScratchOffsetBug", 254 "true", 255 "Negative immediate offsets in scratch instructions with an SGPR offset page fault on GFX9" 256>; 257 258def FeatureNegativeUnalignedScratchOffsetBug : SubtargetFeature<"negative-unaligned-scratch-offset-bug", 259 "NegativeUnalignedScratchOffsetBug", 260 "true", 261 "Scratch instructions with a VGPR offset and a negative immediate offset that is not a multiple of 4 read wrong memory on GFX10" 262>; 263 264def FeatureOffset3fBug : SubtargetFeature<"offset-3f-bug", 265 "HasOffset3fBug", 266 "true", 267 "Branch offset of 3f hardware bug" 268>; 269 270def FeatureImageStoreD16Bug : SubtargetFeature<"image-store-d16-bug", 271 "HasImageStoreD16Bug", 272 "true", 273 "Image Store D16 hardware bug" 274>; 275 276def FeatureImageGather4D16Bug : SubtargetFeature<"image-gather4-d16-bug", 277 "HasImageGather4D16Bug", 278 "true", 279 "Image Gather4 D16 hardware bug" 280>; 281 282class SubtargetFeatureLDSBankCount <int Value> : SubtargetFeature < 283 "ldsbankcount"#Value, 284 "LDSBankCount", 285 !cast<string>(Value), 286 "The number of LDS banks per compute unit." 287>; 288 289def FeatureLDSBankCount16 : SubtargetFeatureLDSBankCount<16>; 290def FeatureLDSBankCount32 : SubtargetFeatureLDSBankCount<32>; 291 292def FeatureGCN3Encoding : SubtargetFeature<"gcn3-encoding", 293 "GCN3Encoding", 294 "true", 295 "Encoding format for VI" 296>; 297 298def FeatureCIInsts : SubtargetFeature<"ci-insts", 299 "CIInsts", 300 "true", 301 "Additional instructions for CI+" 302>; 303 304def FeatureGFX8Insts : SubtargetFeature<"gfx8-insts", 305 "GFX8Insts", 306 "true", 307 "Additional instructions for GFX8+" 308>; 309 310def FeatureGFX9Insts : SubtargetFeature<"gfx9-insts", 311 "GFX9Insts", 312 "true", 313 "Additional instructions for GFX9+" 314>; 315 316def FeatureGFX90AInsts : SubtargetFeature<"gfx90a-insts", 317 "GFX90AInsts", 318 "true", 319 "Additional instructions for GFX90A+" 320>; 321 322def FeatureGFX940Insts : SubtargetFeature<"gfx940-insts", 323 "GFX940Insts", 324 "true", 325 "Additional instructions for GFX940+" 326>; 327 328def FeatureGFX10Insts : SubtargetFeature<"gfx10-insts", 329 "GFX10Insts", 330 "true", 331 "Additional instructions for GFX10+" 332>; 333 334def FeatureGFX11Insts : SubtargetFeature<"gfx11-insts", 335 "GFX11Insts", 336 "true", 337 "Additional instructions for GFX11+" 338>; 339 340def FeatureGFX10_3Insts : SubtargetFeature<"gfx10-3-insts", 341 "GFX10_3Insts", 342 "true", 343 "Additional instructions for GFX10.3" 344>; 345 346def FeatureGFX7GFX8GFX9Insts : SubtargetFeature<"gfx7-gfx8-gfx9-insts", 347 "GFX7GFX8GFX9Insts", 348 "true", 349 "Instructions shared in GFX7, GFX8, GFX9" 350>; 351 352def FeatureSMemRealTime : SubtargetFeature<"s-memrealtime", 353 "HasSMemRealTime", 354 "true", 355 "Has s_memrealtime instruction" 356>; 357 358def FeatureInv2PiInlineImm : SubtargetFeature<"inv-2pi-inline-imm", 359 "HasInv2PiInlineImm", 360 "true", 361 "Has 1 / (2 * pi) as inline immediate" 362>; 363 364def Feature16BitInsts : SubtargetFeature<"16-bit-insts", 365 "Has16BitInsts", 366 "true", 367 "Has i16/f16 instructions" 368>; 369 370def FeatureTrue16BitInsts : SubtargetFeature<"true16", 371 "HasTrue16BitInsts", 372 "true", 373 "True 16-bit operand instructions" 374>; 375 376def FeatureVOP3P : SubtargetFeature<"vop3p", 377 "HasVOP3PInsts", 378 "true", 379 "Has VOP3P packed instructions" 380>; 381 382def FeatureMovrel : SubtargetFeature<"movrel", 383 "HasMovrel", 384 "true", 385 "Has v_movrel*_b32 instructions" 386>; 387 388def FeatureVGPRIndexMode : SubtargetFeature<"vgpr-index-mode", 389 "HasVGPRIndexMode", 390 "true", 391 "Has VGPR mode register indexing" 392>; 393 394def FeatureScalarStores : SubtargetFeature<"scalar-stores", 395 "HasScalarStores", 396 "true", 397 "Has store scalar memory instructions" 398>; 399 400def FeatureScalarAtomics : SubtargetFeature<"scalar-atomics", 401 "HasScalarAtomics", 402 "true", 403 "Has atomic scalar memory instructions" 404>; 405 406def FeatureSDWA : SubtargetFeature<"sdwa", 407 "HasSDWA", 408 "true", 409 "Support SDWA (Sub-DWORD Addressing) extension" 410>; 411 412def FeatureSDWAOmod : SubtargetFeature<"sdwa-omod", 413 "HasSDWAOmod", 414 "true", 415 "Support OMod with SDWA (Sub-DWORD Addressing) extension" 416>; 417 418def FeatureSDWAScalar : SubtargetFeature<"sdwa-scalar", 419 "HasSDWAScalar", 420 "true", 421 "Support scalar register with SDWA (Sub-DWORD Addressing) extension" 422>; 423 424def FeatureSDWASdst : SubtargetFeature<"sdwa-sdst", 425 "HasSDWASdst", 426 "true", 427 "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension" 428>; 429 430def FeatureSDWAMac : SubtargetFeature<"sdwa-mav", 431 "HasSDWAMac", 432 "true", 433 "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension" 434>; 435 436def FeatureSDWAOutModsVOPC : SubtargetFeature<"sdwa-out-mods-vopc", 437 "HasSDWAOutModsVOPC", 438 "true", 439 "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension" 440>; 441 442def FeatureDPP : SubtargetFeature<"dpp", 443 "HasDPP", 444 "true", 445 "Support DPP (Data Parallel Primitives) extension" 446>; 447 448// DPP8 allows arbitrary cross-lane swizzling within groups of 8 lanes. 449def FeatureDPP8 : SubtargetFeature<"dpp8", 450 "HasDPP8", 451 "true", 452 "Support DPP8 (Data Parallel Primitives) extension" 453>; 454 455def Feature64BitDPP : SubtargetFeature<"dpp-64bit", 456 "Has64BitDPP", 457 "true", 458 "Support DPP (Data Parallel Primitives) extension" 459>; 460 461def FeaturePackedFP32Ops : SubtargetFeature<"packed-fp32-ops", 462 "HasPackedFP32Ops", 463 "true", 464 "Support packed fp32 instructions" 465>; 466 467def FeatureR128A16 : SubtargetFeature<"r128-a16", 468 "HasR128A16", 469 "true", 470 "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128" 471>; 472 473def FeatureGFX10A16 : SubtargetFeature<"a16", 474 "HasGFX10A16", 475 "true", 476 "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands" 477>; 478 479def FeatureG16 : SubtargetFeature<"g16", 480 "HasG16", 481 "true", 482 "Support G16 for 16-bit gradient image operands" 483>; 484 485def FeatureNSAEncoding : SubtargetFeature<"nsa-encoding", 486 "HasNSAEncoding", 487 "true", 488 "Support NSA encoding for image instructions" 489>; 490 491def FeatureImageInsts : SubtargetFeature<"image-insts", 492 "HasImageInsts", 493 "true", 494 "Support image instructions" 495>; 496 497def FeatureExtendedImageInsts : SubtargetFeature<"extended-image-insts", 498 "HasExtendedImageInsts", 499 "true", 500 "Support mips != 0, lod != 0, gather4, and get_lod" 501>; 502 503def FeatureGFX10_AEncoding : SubtargetFeature<"gfx10_a-encoding", 504 "GFX10_AEncoding", 505 "true", 506 "Has BVH ray tracing instructions" 507>; 508 509def FeatureGFX10_BEncoding : SubtargetFeature<"gfx10_b-encoding", 510 "GFX10_BEncoding", 511 "true", 512 "Encoding format GFX10_B" 513>; 514 515def FeatureIntClamp : SubtargetFeature<"int-clamp-insts", 516 "HasIntClamp", 517 "true", 518 "Support clamp for integer destination" 519>; 520 521def FeatureUnpackedD16VMem : SubtargetFeature<"unpacked-d16-vmem", 522 "HasUnpackedD16VMem", 523 "true", 524 "Has unpacked d16 vmem instructions" 525>; 526 527def FeatureDLInsts : SubtargetFeature<"dl-insts", 528 "HasDLInsts", 529 "true", 530 "Has v_fmac_f32 and v_xnor_b32 instructions" 531>; 532 533def FeatureDot1Insts : SubtargetFeature<"dot1-insts", 534 "HasDot1Insts", 535 "true", 536 "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions" 537>; 538 539def FeatureDot2Insts : SubtargetFeature<"dot2-insts", 540 "HasDot2Insts", 541 "true", 542 "Has v_dot2_i32_i16, v_dot2_u32_u16 instructions" 543>; 544 545def FeatureDot3Insts : SubtargetFeature<"dot3-insts", 546 "HasDot3Insts", 547 "true", 548 "Has v_dot8c_i32_i4 instruction" 549>; 550 551def FeatureDot4Insts : SubtargetFeature<"dot4-insts", 552 "HasDot4Insts", 553 "true", 554 "Has v_dot2c_i32_i16 instruction" 555>; 556 557def FeatureDot5Insts : SubtargetFeature<"dot5-insts", 558 "HasDot5Insts", 559 "true", 560 "Has v_dot2c_f32_f16 instruction" 561>; 562 563def FeatureDot6Insts : SubtargetFeature<"dot6-insts", 564 "HasDot6Insts", 565 "true", 566 "Has v_dot4c_i32_i8 instruction" 567>; 568 569def FeatureDot7Insts : SubtargetFeature<"dot7-insts", 570 "HasDot7Insts", 571 "true", 572 "Has v_dot2_f32_f16, v_dot4_u32_u8, v_dot8_u32_u4 instructions" 573>; 574 575def FeatureDot8Insts : SubtargetFeature<"dot8-insts", 576 "HasDot8Insts", 577 "true", 578 "Has v_dot2_f16_f16, v_dot2_bf16_bf16, v_dot2_f32_bf16, " 579 "v_dot4_i32_iu8, v_dot8_i32_iu4 instructions" 580>; 581 582def FeatureMAIInsts : SubtargetFeature<"mai-insts", 583 "HasMAIInsts", 584 "true", 585 "Has mAI instructions" 586>; 587 588def FeaturePkFmacF16Inst : SubtargetFeature<"pk-fmac-f16-inst", 589 "HasPkFmacF16Inst", 590 "true", 591 "Has v_pk_fmac_f16 instruction" 592>; 593 594def FeatureAtomicFaddRtnInsts : SubtargetFeature<"atomic-fadd-rtn-insts", 595 "HasAtomicFaddRtnInsts", 596 "true", 597 "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that " 598 "return original value", 599 [FeatureFlatGlobalInsts] 600>; 601 602def FeatureAtomicFaddNoRtnInsts : SubtargetFeature<"atomic-fadd-no-rtn-insts", 603 "HasAtomicFaddNoRtnInsts", 604 "true", 605 "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that " 606 "don't return original value", 607 [FeatureFlatGlobalInsts] 608>; 609 610def FeatureAtomicPkFaddNoRtnInsts 611 : SubtargetFeature<"atomic-pk-fadd-no-rtn-insts", 612 "HasAtomicPkFaddNoRtnInsts", 613 "true", 614 "Has buffer_atomic_pk_add_f16 and global_atomic_pk_add_f16 instructions that " 615 "don't return original value", 616 [FeatureFlatGlobalInsts] 617>; 618 619def FeatureSupportsSRAMECC : SubtargetFeature<"sramecc-support", 620 "SupportsSRAMECC", 621 "true", 622 "Hardware supports SRAMECC" 623>; 624 625def FeatureSRAMECC : SubtargetFeature<"sramecc", 626 "EnableSRAMECC", 627 "true", 628 "Enable SRAMECC" 629>; 630 631def FeatureNoSdstCMPX : SubtargetFeature<"no-sdst-cmpx", 632 "HasNoSdstCMPX", 633 "true", 634 "V_CMPX does not write VCC/SGPR in addition to EXEC" 635>; 636 637def FeatureVscnt : SubtargetFeature<"vscnt", 638 "HasVscnt", 639 "true", 640 "Has separate store vscnt counter" 641>; 642 643def FeatureGetWaveIdInst : SubtargetFeature<"get-wave-id-inst", 644 "HasGetWaveIdInst", 645 "true", 646 "Has s_get_waveid_in_workgroup instruction" 647>; 648 649def FeatureSMemTimeInst : SubtargetFeature<"s-memtime-inst", 650 "HasSMemTimeInst", 651 "true", 652 "Has s_memtime instruction" 653>; 654 655def FeatureShaderCyclesRegister : SubtargetFeature<"shader-cycles-register", 656 "HasShaderCyclesRegister", 657 "true", 658 "Has SHADER_CYCLES hardware register" 659>; 660 661def FeatureMadMacF32Insts : SubtargetFeature<"mad-mac-f32-insts", 662 "HasMadMacF32Insts", 663 "true", 664 "Has v_mad_f32/v_mac_f32/v_madak_f32/v_madmk_f32 instructions" 665>; 666 667def FeatureDsSrc2Insts : SubtargetFeature<"ds-src2-insts", 668 "HasDsSrc2Insts", 669 "true", 670 "Has ds_*_src2 instructions" 671>; 672 673def FeatureVOP3Literal : SubtargetFeature<"vop3-literal", 674 "HasVOP3Literal", 675 "true", 676 "Can use one literal in VOP3" 677>; 678 679def FeatureNoDataDepHazard : SubtargetFeature<"no-data-dep-hazard", 680 "HasNoDataDepHazard", 681 "true", 682 "Does not need SW waitstates" 683>; 684 685class SubtargetFeatureNSAMaxSize <int Value> : SubtargetFeature < 686 "nsa-max-size-"#Value, 687 "NSAMaxSize", 688 !cast<string>(Value), 689 "The maximum non-sequential address size in VGPRs." 690>; 691 692def FeatureNSAMaxSize5 : SubtargetFeatureNSAMaxSize<5>; 693def FeatureNSAMaxSize13 : SubtargetFeatureNSAMaxSize<13>; 694 695def FeatureVOPD : SubtargetFeature<"vopd", 696 "HasVOPDInsts", 697 "true", 698 "Has VOPD dual issue wave32 instructions" 699>; 700 701//===------------------------------------------------------------===// 702// Subtarget Features (options and debugging) 703//===------------------------------------------------------------===// 704 705class FeatureMaxPrivateElementSize<int size> : SubtargetFeature< 706 "max-private-element-size-"#size, 707 "MaxPrivateElementSize", 708 !cast<string>(size), 709 "Maximum private access size may be "#size 710>; 711 712def FeatureMaxPrivateElementSize4 : FeatureMaxPrivateElementSize<4>; 713def FeatureMaxPrivateElementSize8 : FeatureMaxPrivateElementSize<8>; 714def FeatureMaxPrivateElementSize16 : FeatureMaxPrivateElementSize<16>; 715 716def FeatureDumpCode : SubtargetFeature <"DumpCode", 717 "DumpCode", 718 "true", 719 "Dump MachineInstrs in the CodeEmitter" 720>; 721 722def FeatureDumpCodeLower : SubtargetFeature <"dumpcode", 723 "DumpCode", 724 "true", 725 "Dump MachineInstrs in the CodeEmitter" 726>; 727 728// XXX - This should probably be removed once enabled by default 729def FeatureEnableLoadStoreOpt : SubtargetFeature <"load-store-opt", 730 "EnableLoadStoreOpt", 731 "true", 732 "Enable SI load/store optimizer pass" 733>; 734 735// Performance debugging feature. Allow using DS instruction immediate 736// offsets even if the base pointer can't be proven to be base. On SI, 737// base pointer values that won't give the same result as a 16-bit add 738// are not safe to fold, but this will override the conservative test 739// for the base pointer. 740def FeatureEnableUnsafeDSOffsetFolding : SubtargetFeature < 741 "unsafe-ds-offset-folding", 742 "EnableUnsafeDSOffsetFolding", 743 "true", 744 "Force using DS instruction immediate offsets on SI" 745>; 746 747def FeatureEnableSIScheduler : SubtargetFeature<"si-scheduler", 748 "EnableSIScheduler", 749 "true", 750 "Enable SI Machine Scheduler" 751>; 752 753def FeatureEnableDS128 : SubtargetFeature<"enable-ds128", 754 "EnableDS128", 755 "true", 756 "Use ds_{read|write}_b128" 757>; 758 759// Sparse texture support requires that all result registers are zeroed when 760// PRTStrictNull is set to true. This feature is turned on for all architectures 761// but is enabled as a feature in case there are situations where PRTStrictNull 762// is disabled by the driver. 763def FeatureEnablePRTStrictNull : SubtargetFeature<"enable-prt-strict-null", 764 "EnablePRTStrictNull", 765 "true", 766 "Enable zeroing of result registers for sparse texture fetches" 767>; 768 769// Unless +-flat-for-global is specified, turn on FlatForGlobal for 770// all OS-es on VI and newer hardware to avoid assertion failures due 771// to missing ADDR64 variants of MUBUF instructions. 772// FIXME: moveToVALU should be able to handle converting addr64 MUBUF 773// instructions. 774 775def FeatureFlatForGlobal : SubtargetFeature<"flat-for-global", 776 "FlatForGlobal", 777 "true", 778 "Force to generate flat instruction for global" 779>; 780 781def FeatureAutoWaitcntBeforeBarrier : SubtargetFeature < 782 "auto-waitcnt-before-barrier", 783 "AutoWaitcntBeforeBarrier", 784 "true", 785 "Hardware automatically inserts waitcnt before barrier" 786>; 787 788def FeatureTrigReducedRange : SubtargetFeature<"trig-reduced-range", 789 "HasTrigReducedRange", 790 "true", 791 "Requires use of fract on arguments to trig instructions" 792>; 793 794// Alignment enforcement is controlled by a configuration register: 795// SH_MEM_CONFIG.alignment_mode 796def FeatureUnalignedAccessMode : SubtargetFeature<"unaligned-access-mode", 797 "UnalignedAccessMode", 798 "true", 799 "Enable unaligned global, local and region loads and stores if the hardware" 800 " supports it" 801>; 802 803def FeaturePackedTID : SubtargetFeature<"packed-tid", 804 "HasPackedTID", 805 "true", 806 "Workitem IDs are packed into v0 at kernel launch" 807>; 808 809def FeatureArchitectedFlatScratch : SubtargetFeature<"architected-flat-scratch", 810 "HasArchitectedFlatScratch", 811 "true", 812 "Flat Scratch register is a readonly SPI initialized architected register" 813>; 814 815// Dummy feature used to disable assembler instructions. 816def FeatureDisable : SubtargetFeature<"", 817 "FeatureDisable","true", 818 "Dummy feature to disable assembler instructions" 819>; 820 821class GCNSubtargetFeatureGeneration <string Value, 822 string FeatureName, 823 list<SubtargetFeature> Implies> : 824 SubtargetFeatureGeneration <Value, FeatureName, "GCNSubtarget", Implies>; 825 826def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS", 827 "southern-islands", 828 [FeatureFP64, FeatureLocalMemorySize32768, FeatureMIMG_R128, 829 FeatureWavefrontSize64, FeatureSMemTimeInst, FeatureMadMacF32Insts, 830 FeatureDsSrc2Insts, FeatureLDSBankCount32, FeatureMovrel, 831 FeatureTrigReducedRange, FeatureExtendedImageInsts, FeatureImageInsts 832 ] 833>; 834 835def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS", 836 "sea-islands", 837 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 838 FeatureWavefrontSize64, FeatureFlatAddressSpace, 839 FeatureCIInsts, FeatureMovrel, FeatureTrigReducedRange, 840 FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts, 841 FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureUnalignedBufferAccess, 842 FeatureImageInsts 843 ] 844>; 845 846def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS", 847 "volcanic-islands", 848 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 849 FeatureWavefrontSize64, FeatureFlatAddressSpace, 850 FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts, 851 FeatureSMemRealTime, FeatureVGPRIndexMode, FeatureMovrel, 852 FeatureScalarStores, FeatureInv2PiInlineImm, 853 FeatureSDWA, FeatureSDWAOutModsVOPC, FeatureSDWAMac, FeatureDPP, 854 FeatureIntClamp, FeatureTrigReducedRange, FeatureGFX8Insts, 855 FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts, 856 FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureFastDenormalF32, 857 FeatureUnalignedBufferAccess, FeatureImageInsts 858 ] 859>; 860 861def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9", 862 "gfx9", 863 [FeatureFP64, FeatureLocalMemorySize65536, 864 FeatureWavefrontSize64, FeatureFlatAddressSpace, 865 FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts, 866 FeatureSMemRealTime, FeatureScalarStores, FeatureInv2PiInlineImm, 867 FeatureApertureRegs, FeatureGFX9Insts, FeatureVOP3P, FeatureVGPRIndexMode, 868 FeatureFastFMAF32, FeatureDPP, FeatureIntClamp, 869 FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst, 870 FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts, 871 FeatureAddNoCarryInsts, FeatureGFX8Insts, FeatureGFX7GFX8GFX9Insts, 872 FeatureScalarFlatScratchInsts, FeatureScalarAtomics, FeatureR128A16, 873 FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureSupportsXNACK, 874 FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess, 875 FeatureNegativeScratchOffsetBug 876 ] 877>; 878 879def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10", 880 "gfx10", 881 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 882 FeatureFlatAddressSpace, 883 FeatureCIInsts, Feature16BitInsts, 884 FeatureSMemRealTime, FeatureInv2PiInlineImm, 885 FeatureApertureRegs, FeatureGFX9Insts, FeatureGFX10Insts, FeatureVOP3P, 886 FeatureMovrel, FeatureFastFMAF32, FeatureDPP, FeatureIntClamp, 887 FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst, 888 FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts, 889 FeatureAddNoCarryInsts, FeatureFmaMixInsts, FeatureGFX8Insts, 890 FeatureNoSdstCMPX, FeatureVscnt, 891 FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts, 892 FeatureNoDataDepHazard, FeaturePkFmacF16Inst, 893 FeatureGFX10A16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureG16, 894 FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess, FeatureImageInsts 895 ] 896>; 897 898def FeatureGFX11 : GCNSubtargetFeatureGeneration<"GFX11", 899 "gfx11", 900 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 901 FeatureFlatAddressSpace, Feature16BitInsts, 902 FeatureInv2PiInlineImm, FeatureApertureRegs, 903 FeatureCIInsts, FeatureGFX8Insts, FeatureGFX9Insts, FeatureGFX10Insts, 904 FeatureGFX10_AEncoding, FeatureGFX10_BEncoding, FeatureGFX10_3Insts, 905 FeatureGFX11Insts, FeatureVOP3P, FeatureVOPD, FeatureTrue16BitInsts, 906 FeatureMovrel, FeatureFastFMAF32, FeatureDPP, FeatureIntClamp, 907 FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts, 908 FeatureAddNoCarryInsts, FeatureFmaMixInsts, 909 FeatureNoSdstCMPX, FeatureVscnt, 910 FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts, 911 FeatureNoDataDepHazard, FeaturePkFmacF16Inst, 912 FeatureGFX10A16, FeatureFastDenormalF32, FeatureG16, 913 FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess 914 ] 915>; 916 917class FeatureSet<list<SubtargetFeature> Features_> { 918 list<SubtargetFeature> Features = Features_; 919} 920 921def FeatureISAVersion6_0_0 : FeatureSet<[FeatureSouthernIslands, 922 FeatureFastFMAF32, 923 HalfRate64Ops, 924 FeatureLDSBankCount32]>; 925 926def FeatureISAVersion6_0_1 : FeatureSet< 927 [FeatureSouthernIslands, 928 FeatureLDSBankCount32]>; 929 930def FeatureISAVersion6_0_2 : FeatureSet< 931 [FeatureSouthernIslands, 932 FeatureLDSBankCount32]>; 933 934def FeatureISAVersion7_0_0 : FeatureSet< 935 [FeatureSeaIslands, 936 FeatureLDSBankCount32]>; 937 938def FeatureISAVersion7_0_1 : FeatureSet< 939 [FeatureSeaIslands, 940 HalfRate64Ops, 941 FeatureLDSBankCount32, 942 FeatureFastFMAF32]>; 943 944def FeatureISAVersion7_0_2 : FeatureSet< 945 [FeatureSeaIslands, 946 FeatureLDSBankCount16, 947 FeatureFastFMAF32]>; 948 949def FeatureISAVersion7_0_3 : FeatureSet< 950 [FeatureSeaIslands, 951 FeatureLDSBankCount16]>; 952 953def FeatureISAVersion7_0_4 : FeatureSet< 954 [FeatureSeaIslands, 955 FeatureLDSBankCount32]>; 956 957def FeatureISAVersion7_0_5 : FeatureSet< 958 [FeatureSeaIslands, 959 FeatureLDSBankCount16]>; 960 961def FeatureISAVersion8_0_1 : FeatureSet< 962 [FeatureVolcanicIslands, 963 FeatureFastFMAF32, 964 HalfRate64Ops, 965 FeatureLDSBankCount32, 966 FeatureSupportsXNACK, 967 FeatureUnpackedD16VMem]>; 968 969def FeatureISAVersion8_0_2 : FeatureSet< 970 [FeatureVolcanicIslands, 971 FeatureLDSBankCount32, 972 FeatureSGPRInitBug, 973 FeatureUnpackedD16VMem]>; 974 975def FeatureISAVersion8_0_3 : FeatureSet< 976 [FeatureVolcanicIslands, 977 FeatureLDSBankCount32, 978 FeatureUnpackedD16VMem]>; 979 980def FeatureISAVersion8_0_5 : FeatureSet< 981 [FeatureVolcanicIslands, 982 FeatureLDSBankCount32, 983 FeatureSGPRInitBug, 984 FeatureUnpackedD16VMem]>; 985 986def FeatureISAVersion8_1_0 : FeatureSet< 987 [FeatureVolcanicIslands, 988 FeatureLDSBankCount16, 989 FeatureSupportsXNACK, 990 FeatureImageStoreD16Bug, 991 FeatureImageGather4D16Bug]>; 992 993def FeatureISAVersion9_0_0 : FeatureSet< 994 [FeatureGFX9, 995 FeatureMadMixInsts, 996 FeatureLDSBankCount32, 997 FeatureDsSrc2Insts, 998 FeatureExtendedImageInsts, 999 FeatureImageInsts, 1000 FeatureMadMacF32Insts, 1001 FeatureImageGather4D16Bug]>; 1002 1003def FeatureISAVersion9_0_2 : FeatureSet< 1004 [FeatureGFX9, 1005 FeatureMadMixInsts, 1006 FeatureLDSBankCount32, 1007 FeatureDsSrc2Insts, 1008 FeatureExtendedImageInsts, 1009 FeatureImageInsts, 1010 FeatureMadMacF32Insts, 1011 FeatureImageGather4D16Bug]>; 1012 1013def FeatureISAVersion9_0_4 : FeatureSet< 1014 [FeatureGFX9, 1015 FeatureLDSBankCount32, 1016 FeatureDsSrc2Insts, 1017 FeatureExtendedImageInsts, 1018 FeatureImageInsts, 1019 FeatureMadMacF32Insts, 1020 FeatureFmaMixInsts, 1021 FeatureImageGather4D16Bug]>; 1022 1023def FeatureISAVersion9_0_6 : FeatureSet< 1024 [FeatureGFX9, 1025 HalfRate64Ops, 1026 FeatureFmaMixInsts, 1027 FeatureLDSBankCount32, 1028 FeatureDsSrc2Insts, 1029 FeatureExtendedImageInsts, 1030 FeatureImageInsts, 1031 FeatureMadMacF32Insts, 1032 FeatureDLInsts, 1033 FeatureDot1Insts, 1034 FeatureDot2Insts, 1035 FeatureDot7Insts, 1036 FeatureSupportsSRAMECC, 1037 FeatureImageGather4D16Bug]>; 1038 1039def FeatureISAVersion9_0_8 : FeatureSet< 1040 [FeatureGFX9, 1041 HalfRate64Ops, 1042 FeatureFmaMixInsts, 1043 FeatureLDSBankCount32, 1044 FeatureDsSrc2Insts, 1045 FeatureExtendedImageInsts, 1046 FeatureImageInsts, 1047 FeatureMadMacF32Insts, 1048 FeatureDLInsts, 1049 FeatureDot1Insts, 1050 FeatureDot2Insts, 1051 FeatureDot3Insts, 1052 FeatureDot4Insts, 1053 FeatureDot5Insts, 1054 FeatureDot6Insts, 1055 FeatureDot7Insts, 1056 FeatureMAIInsts, 1057 FeaturePkFmacF16Inst, 1058 FeatureAtomicFaddNoRtnInsts, 1059 FeatureAtomicPkFaddNoRtnInsts, 1060 FeatureSupportsSRAMECC, 1061 FeatureMFMAInlineLiteralBug, 1062 FeatureImageGather4D16Bug]>; 1063 1064def FeatureISAVersion9_0_9 : FeatureSet< 1065 [FeatureGFX9, 1066 FeatureMadMixInsts, 1067 FeatureLDSBankCount32, 1068 FeatureDsSrc2Insts, 1069 FeatureExtendedImageInsts, 1070 FeatureImageInsts, 1071 FeatureMadMacF32Insts, 1072 FeatureImageGather4D16Bug]>; 1073 1074def FeatureISAVersion9_0_A : FeatureSet< 1075 [FeatureGFX9, 1076 FeatureGFX90AInsts, 1077 FeatureFmaMixInsts, 1078 FeatureLDSBankCount32, 1079 FeatureDLInsts, 1080 FeatureDot1Insts, 1081 FeatureDot2Insts, 1082 FeatureDot3Insts, 1083 FeatureDot4Insts, 1084 FeatureDot5Insts, 1085 FeatureDot6Insts, 1086 FeatureDot7Insts, 1087 Feature64BitDPP, 1088 FeaturePackedFP32Ops, 1089 FeatureMAIInsts, 1090 FeaturePkFmacF16Inst, 1091 FeatureAtomicFaddRtnInsts, 1092 FeatureAtomicFaddNoRtnInsts, 1093 FeatureAtomicPkFaddNoRtnInsts, 1094 FeatureImageInsts, 1095 FeatureMadMacF32Insts, 1096 FeatureSupportsSRAMECC, 1097 FeaturePackedTID, 1098 FullRate64Ops]>; 1099 1100def FeatureISAVersion9_0_C : FeatureSet< 1101 [FeatureGFX9, 1102 FeatureMadMixInsts, 1103 FeatureLDSBankCount32, 1104 FeatureDsSrc2Insts, 1105 FeatureExtendedImageInsts, 1106 FeatureImageInsts, 1107 FeatureMadMacF32Insts, 1108 FeatureImageGather4D16Bug]>; 1109 1110def FeatureISAVersion9_4_0 : FeatureSet< 1111 [FeatureGFX9, 1112 FeatureGFX90AInsts, 1113 FeatureGFX940Insts, 1114 FeatureFmaMixInsts, 1115 FeatureLDSBankCount32, 1116 FeatureDLInsts, 1117 FeatureDot1Insts, 1118 FeatureDot2Insts, 1119 FeatureDot3Insts, 1120 FeatureDot4Insts, 1121 FeatureDot5Insts, 1122 FeatureDot6Insts, 1123 FeatureDot7Insts, 1124 Feature64BitDPP, 1125 FeaturePackedFP32Ops, 1126 FeatureMAIInsts, 1127 FeaturePkFmacF16Inst, 1128 FeatureAtomicFaddRtnInsts, 1129 FeatureAtomicFaddNoRtnInsts, 1130 FeatureAtomicPkFaddNoRtnInsts, 1131 FeatureSupportsSRAMECC, 1132 FeaturePackedTID, 1133 FeatureArchitectedFlatScratch, 1134 FullRate64Ops]>; 1135 1136// TODO: Organize more features into groups. 1137def FeatureGroup { 1138 // Bugs present on gfx10.1. 1139 list<SubtargetFeature> GFX10_1_Bugs = [ 1140 FeatureVcmpxPermlaneHazard, 1141 FeatureVMEMtoScalarWriteHazard, 1142 FeatureSMEMtoVectorWriteHazard, 1143 FeatureInstFwdPrefetchBug, 1144 FeatureVcmpxExecWARHazard, 1145 FeatureLdsBranchVmemWARHazard, 1146 FeatureNSAtoVMEMBug, 1147 FeatureNSAClauseBug, 1148 FeatureOffset3fBug, 1149 FeatureFlatSegmentOffsetBug, 1150 FeatureNegativeUnalignedScratchOffsetBug 1151 ]; 1152} 1153 1154def FeatureISAVersion10_1_0 : FeatureSet< 1155 !listconcat(FeatureGroup.GFX10_1_Bugs, 1156 [FeatureGFX10, 1157 FeatureLDSBankCount32, 1158 FeatureDLInsts, 1159 FeatureNSAEncoding, 1160 FeatureNSAMaxSize5, 1161 FeatureWavefrontSize32, 1162 FeatureScalarStores, 1163 FeatureScalarAtomics, 1164 FeatureScalarFlatScratchInsts, 1165 FeatureGetWaveIdInst, 1166 FeatureMadMacF32Insts, 1167 FeatureDsSrc2Insts, 1168 FeatureLdsMisalignedBug, 1169 FeatureSupportsXNACK])>; 1170 1171def FeatureISAVersion10_1_1 : FeatureSet< 1172 !listconcat(FeatureGroup.GFX10_1_Bugs, 1173 [FeatureGFX10, 1174 FeatureLDSBankCount32, 1175 FeatureDLInsts, 1176 FeatureDot1Insts, 1177 FeatureDot2Insts, 1178 FeatureDot5Insts, 1179 FeatureDot6Insts, 1180 FeatureDot7Insts, 1181 FeatureNSAEncoding, 1182 FeatureNSAMaxSize5, 1183 FeatureWavefrontSize32, 1184 FeatureScalarStores, 1185 FeatureScalarAtomics, 1186 FeatureScalarFlatScratchInsts, 1187 FeatureGetWaveIdInst, 1188 FeatureMadMacF32Insts, 1189 FeatureDsSrc2Insts, 1190 FeatureLdsMisalignedBug, 1191 FeatureSupportsXNACK])>; 1192 1193def FeatureISAVersion10_1_2 : FeatureSet< 1194 !listconcat(FeatureGroup.GFX10_1_Bugs, 1195 [FeatureGFX10, 1196 FeatureLDSBankCount32, 1197 FeatureDLInsts, 1198 FeatureDot1Insts, 1199 FeatureDot2Insts, 1200 FeatureDot5Insts, 1201 FeatureDot6Insts, 1202 FeatureDot7Insts, 1203 FeatureNSAEncoding, 1204 FeatureNSAMaxSize5, 1205 FeatureWavefrontSize32, 1206 FeatureScalarStores, 1207 FeatureScalarAtomics, 1208 FeatureScalarFlatScratchInsts, 1209 FeatureGetWaveIdInst, 1210 FeatureMadMacF32Insts, 1211 FeatureDsSrc2Insts, 1212 FeatureLdsMisalignedBug, 1213 FeatureSupportsXNACK])>; 1214 1215def FeatureISAVersion10_1_3 : FeatureSet< 1216 !listconcat(FeatureGroup.GFX10_1_Bugs, 1217 [FeatureGFX10, 1218 FeatureGFX10_AEncoding, 1219 FeatureLDSBankCount32, 1220 FeatureDLInsts, 1221 FeatureNSAEncoding, 1222 FeatureNSAMaxSize5, 1223 FeatureWavefrontSize32, 1224 FeatureScalarStores, 1225 FeatureScalarAtomics, 1226 FeatureScalarFlatScratchInsts, 1227 FeatureGetWaveIdInst, 1228 FeatureMadMacF32Insts, 1229 FeatureDsSrc2Insts, 1230 FeatureLdsMisalignedBug, 1231 FeatureSupportsXNACK])>; 1232 1233def FeatureISAVersion10_3_0 : FeatureSet< 1234 [FeatureGFX10, 1235 FeatureGFX10_AEncoding, 1236 FeatureGFX10_BEncoding, 1237 FeatureGFX10_3Insts, 1238 FeatureLDSBankCount32, 1239 FeatureDLInsts, 1240 FeatureDot1Insts, 1241 FeatureDot2Insts, 1242 FeatureDot5Insts, 1243 FeatureDot6Insts, 1244 FeatureDot7Insts, 1245 FeatureNSAEncoding, 1246 FeatureNSAMaxSize13, 1247 FeatureWavefrontSize32, 1248 FeatureShaderCyclesRegister]>; 1249 1250def FeatureISAVersion11_Common : FeatureSet< 1251 [FeatureGFX11, 1252 FeatureLDSBankCount32, 1253 FeatureDLInsts, 1254 FeatureDot5Insts, 1255 FeatureDot7Insts, 1256 FeatureDot8Insts, 1257 FeatureNSAEncoding, 1258 FeatureNSAMaxSize5, 1259 FeatureWavefrontSize32, 1260 FeatureShaderCyclesRegister, 1261 FeatureArchitectedFlatScratch, 1262 FeatureAtomicFaddRtnInsts, 1263 FeatureAtomicFaddNoRtnInsts, 1264 FeatureImageInsts, 1265 FeaturePackedTID, 1266 FeatureVcmpxPermlaneHazard]>; 1267 1268// Features for GFX 11.0.0 and 11.0.1 1269def FeatureISAVersion11_0 : FeatureSet< 1270 !listconcat(FeatureISAVersion11_Common.Features, 1271 [FeatureUserSGPRInit16Bug])>; 1272 1273def FeatureISAVersion11_0_2 : FeatureSet< 1274 !listconcat(FeatureISAVersion11_Common.Features, 1275 [FeatureUserSGPRInit16Bug])>; 1276 1277//===----------------------------------------------------------------------===// 1278 1279def AMDGPUInstrInfo : InstrInfo { 1280 let guessInstructionProperties = 1; 1281 let noNamedPositionallyEncodedOperands = 1; 1282} 1283 1284def AMDGPUAsmParser : AsmParser { 1285 // Some of the R600 registers have the same name, so this crashes. 1286 // For example T0_XYZW and T0_XY both have the asm name T0. 1287 let ShouldEmitMatchRegisterName = 0; 1288} 1289 1290def AMDGPUAsmWriter : AsmWriter { 1291 int PassSubtarget = 1; 1292} 1293 1294def AMDGPUAsmVariants { 1295 string Default = "Default"; 1296 int Default_ID = 0; 1297 string VOP3 = "VOP3"; 1298 int VOP3_ID = 1; 1299 string SDWA = "SDWA"; 1300 int SDWA_ID = 2; 1301 string SDWA9 = "SDWA9"; 1302 int SDWA9_ID = 3; 1303 string DPP = "DPP"; 1304 int DPP_ID = 4; 1305 string VOP3_DPP = "VOP3_DPP"; 1306 int VOP3_DPP_ID = 5; 1307 string Disable = "Disable"; 1308 int Disable_ID = 6; 1309} 1310 1311def DefaultAMDGPUAsmParserVariant : AsmParserVariant { 1312 let Variant = AMDGPUAsmVariants.Default_ID; 1313 let Name = AMDGPUAsmVariants.Default; 1314} 1315 1316def VOP3AsmParserVariant : AsmParserVariant { 1317 let Variant = AMDGPUAsmVariants.VOP3_ID; 1318 let Name = AMDGPUAsmVariants.VOP3; 1319} 1320 1321def SDWAAsmParserVariant : AsmParserVariant { 1322 let Variant = AMDGPUAsmVariants.SDWA_ID; 1323 let Name = AMDGPUAsmVariants.SDWA; 1324} 1325 1326def SDWA9AsmParserVariant : AsmParserVariant { 1327 let Variant = AMDGPUAsmVariants.SDWA9_ID; 1328 let Name = AMDGPUAsmVariants.SDWA9; 1329} 1330 1331def DPPAsmParserVariant : AsmParserVariant { 1332 let Variant = AMDGPUAsmVariants.DPP_ID; 1333 let Name = AMDGPUAsmVariants.DPP; 1334} 1335 1336def VOP3_DPPAsmParserVariant : AsmParserVariant { 1337 let Variant = AMDGPUAsmVariants.VOP3_DPP_ID; 1338 let Name = AMDGPUAsmVariants.VOP3_DPP; 1339} 1340 1341def AMDGPU : Target { 1342 // Pull in Instruction Info: 1343 let InstructionSet = AMDGPUInstrInfo; 1344 let AssemblyParsers = [AMDGPUAsmParser]; 1345 let AssemblyParserVariants = [DefaultAMDGPUAsmParserVariant, 1346 VOP3AsmParserVariant, 1347 SDWAAsmParserVariant, 1348 SDWA9AsmParserVariant, 1349 DPPAsmParserVariant, 1350 VOP3_DPPAsmParserVariant]; 1351 let AssemblyWriters = [AMDGPUAsmWriter]; 1352 let AllowRegisterRenaming = 1; 1353} 1354 1355// Dummy Instruction itineraries for pseudo instructions 1356def ALU_NULL : FuncUnit; 1357def NullALU : InstrItinClass; 1358 1359//===----------------------------------------------------------------------===// 1360// Predicate helper class 1361//===----------------------------------------------------------------------===// 1362 1363def isGFX6 : 1364 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS">, 1365 AssemblerPredicate<(all_of FeatureSouthernIslands)>; 1366 1367def isGFX6GFX7 : 1368 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1369 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS">, 1370 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), (not FeatureGFX10Insts))>; 1371 1372def isGFX6GFX7GFX10 : 1373 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1374 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1375 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1376 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), (not FeatureGFX11Insts))>; 1377 1378def isGFX6GFX7GFX10Plus : 1379 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1380 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1381 "Subtarget->getGeneration() >= AMDGPUSubtarget::GFX10">, 1382 AssemblerPredicate<(all_of (not FeatureGCN3Encoding))>; 1383 1384def isGFX7Only : 1385 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS">, 1386 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts, (not FeatureGFX10Insts))>; 1387 1388def isGFX7GFX10 : 1389 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1390 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1391 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts, (not FeatureGFX11Insts))>; 1392 1393def isGFX7GFX10GFX11 : 1394 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1395 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10 ||" 1396 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX11">, 1397 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts)>; 1398 1399def isGFX7GFX8GFX9 : 1400 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1401 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1402 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1403 AssemblerPredicate<(all_of FeatureGFX7GFX8GFX9Insts)>; 1404 1405def isGFX6GFX7GFX8GFX9 : 1406 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1407 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1408 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1409 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1410 AssemblerPredicate<(all_of (not FeatureGFX10Insts))>; 1411 1412def isGFX6GFX7GFX8GFX9NotGFX90A : 1413 Predicate<"!Subtarget->hasGFX90AInsts() &&" 1414 "(Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1415 " Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1416 " Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1417 " Subtarget->getGeneration() == AMDGPUSubtarget::GFX9)">, 1418 AssemblerPredicate<(all_of (not FeatureGFX10Insts), (not FeatureGFX90AInsts))>; 1419 1420def isGFX6GFX7GFX8GFX9GFX10 : 1421 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1422 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1423 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1424 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||" 1425 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1426 AssemblerPredicate<(all_of (not FeatureGFX11Insts))>; 1427 1428def isGFX7GFX8GFX9GFX10 : 1429 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1430 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1431 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||" 1432 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1433 AssemblerPredicate<(all_of FeatureCIInsts, (not FeatureGFX11Insts))>; 1434 1435def isGFX7Plus : 1436 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::SEA_ISLANDS">, 1437 AssemblerPredicate<(all_of FeatureCIInsts)>; 1438 1439def isGFX8Plus : 1440 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS">, 1441 AssemblerPredicate<(all_of FeatureGFX8Insts)>; 1442 1443def isGFX8Only : Predicate<"Subtarget->getGeneration() ==" 1444 "AMDGPUSubtarget::VOLCANIC_ISLANDS">, 1445 AssemblerPredicate <(all_of FeatureVolcanicIslands)>; 1446 1447def isGFX9Plus : 1448 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">, 1449 AssemblerPredicate<(all_of FeatureGFX9Insts)>; 1450 1451def isGFX9Only : Predicate < 1452 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1453 AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureGFX9Insts)>; 1454 1455def isGCN3ExcludingGFX90A : 1456 Predicate<"Subtarget->isGCN3Encoding() && !Subtarget->hasGFX90AInsts()">, 1457 AssemblerPredicate<(all_of FeatureGCN3Encoding, (not FeatureGFX90AInsts))>; 1458 1459def isGFX90APlus : 1460 Predicate<"Subtarget->hasGFX90AInsts()">, 1461 AssemblerPredicate<(all_of FeatureGFX90AInsts)>; 1462 1463def isNotGFX90APlus : 1464 Predicate<"!Subtarget->hasGFX90AInsts()">, 1465 AssemblerPredicate<(all_of (not FeatureGFX90AInsts))>; 1466 1467def isGFX8GFX9NotGFX90A : 1468 Predicate<"!Subtarget->hasGFX90AInsts() &&" 1469 "(Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1470 " Subtarget->getGeneration() == AMDGPUSubtarget::GFX9)">, 1471 AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding, (not FeatureGFX90AInsts))>; 1472 1473def isGFX90AOnly : 1474 Predicate<"Subtarget->hasGFX90AInsts() && !Subtarget->hasGFX940Insts()">, 1475 AssemblerPredicate<(all_of FeatureGFX90AInsts, (not FeatureGFX940Insts))>; 1476 1477def isGFX908orGFX90A : 1478 Predicate<"Subtarget->hasMAIInsts() && !Subtarget->hasGFX940Insts()">, 1479 AssemblerPredicate<(all_of FeatureMAIInsts, (not FeatureGFX940Insts))>; 1480 1481def isGFX940Plus : 1482 Predicate<"Subtarget->hasGFX940Insts()">, 1483 AssemblerPredicate<(all_of FeatureGFX940Insts)>; 1484 1485def isGFX940GFX11Plus : 1486 Predicate<"Subtarget->hasGFX940Insts() ||" 1487 "Subtarget->getGeneration() >= AMDGPUSubtarget::GFX11">, 1488 AssemblerPredicate<(any_of FeatureGFX940Insts, FeatureGFX11Insts)>; 1489 1490def isGFX8GFX9NotGFX940 : 1491 Predicate<"!Subtarget->hasGFX940Insts() &&" 1492 "(Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1493 " Subtarget->getGeneration() == AMDGPUSubtarget::GFX9)">, 1494 AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding, (not FeatureGFX940Insts))>; 1495 1496def isGFX8GFX9 : 1497 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1498 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1499 AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding)>; 1500 1501def isGFX10Only : 1502 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1503 AssemblerPredicate<(all_of FeatureGFX10Insts, (not FeatureGFX11Insts))>; 1504 1505def isGFX10Plus : 1506 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX10">, 1507 AssemblerPredicate<(all_of FeatureGFX10Insts)>; 1508 1509def isGFX10Before1030 : 1510 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX10 &&" 1511 "!Subtarget->hasGFX10_3Insts()">, 1512 AssemblerPredicate<(all_of FeatureGFX10Insts,(not FeatureGFX10_3Insts))>; 1513 1514def isGFX9GFX10 : 1515 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||" 1516 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1517 AssemblerPredicate<(all_of FeatureGFX9Insts, (not FeatureGFX11Insts))>; 1518 1519def isGFX8GFX9GFX10 : 1520 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1521 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9 ||" 1522 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1523 AssemblerPredicate<(all_of FeatureGFX8Insts, (not FeatureGFX11Insts))>; 1524 1525def isGFX11Only : 1526 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::GFX11">, 1527 AssemblerPredicate<(all_of FeatureGFX11Insts)>; 1528 1529def isGFX11Plus : 1530 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX11">, 1531 AssemblerPredicate<(all_of FeatureGFX11Insts)>; 1532 1533def HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">, 1534 AssemblerPredicate<(all_of FeatureFlatAddressSpace)>; 1535 1536def HasFlatGlobalInsts : Predicate<"Subtarget->hasFlatGlobalInsts()">, 1537 AssemblerPredicate<(all_of FeatureFlatGlobalInsts)>; 1538def HasFlatScratchInsts : Predicate<"Subtarget->hasFlatScratchInsts()">, 1539 AssemblerPredicate<(all_of FeatureFlatScratchInsts)>; 1540def HasScalarFlatScratchInsts : Predicate<"Subtarget->hasScalarFlatScratchInsts()">, 1541 AssemblerPredicate<(all_of FeatureScalarFlatScratchInsts)>; 1542def HasD16LoadStore : Predicate<"Subtarget->hasD16LoadStore()">, 1543 AssemblerPredicate<(all_of FeatureGFX9Insts)>; 1544 1545def HasFlatScratchSTMode : Predicate<"Subtarget->hasFlatScratchSTMode()">, 1546 AssemblerPredicate<(any_of FeatureGFX10_3Insts, FeatureGFX940Insts)>; 1547def HasFlatScratchSVSMode : Predicate<"Subtarget->hasFlatScratchSVSMode()">, 1548 AssemblerPredicate<(any_of FeatureGFX940Insts, FeatureGFX11Insts)>; 1549 1550def HasGFX10_AEncoding : Predicate<"Subtarget->hasGFX10_AEncoding()">, 1551 AssemblerPredicate<(all_of FeatureGFX10_AEncoding)>; 1552 1553def HasGFX10_BEncoding : Predicate<"Subtarget->hasGFX10_BEncoding()">, 1554 AssemblerPredicate<(all_of FeatureGFX10_BEncoding)>; 1555 1556def HasUnpackedD16VMem : Predicate<"Subtarget->hasUnpackedD16VMem()">, 1557 AssemblerPredicate<(all_of FeatureUnpackedD16VMem)>; 1558def HasPackedD16VMem : Predicate<"!Subtarget->hasUnpackedD16VMem()">, 1559 AssemblerPredicate<(all_of (not FeatureUnpackedD16VMem))>; 1560 1561def D16PreservesUnusedBits : 1562 Predicate<"Subtarget->d16PreservesUnusedBits()">, 1563 AssemblerPredicate<(all_of FeatureGFX9Insts, (not FeatureSRAMECC))>; 1564 1565def LDSRequiresM0Init : Predicate<"Subtarget->ldsRequiresM0Init()">; 1566def NotLDSRequiresM0Init : Predicate<"!Subtarget->ldsRequiresM0Init()">; 1567 1568def HasDSAddTid : Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">, 1569 AssemblerPredicate<(all_of FeatureGFX9Insts)>; 1570 1571def HasLDSFPAtomicAdd : Predicate<"Subtarget->hasLDSFPAtomicAdd()">, 1572 AssemblerPredicate<(all_of FeatureGFX8Insts)>; 1573 1574def HasAddNoCarryInsts : Predicate<"Subtarget->hasAddNoCarry()">, 1575 AssemblerPredicate<(all_of FeatureAddNoCarryInsts)>; 1576 1577def NotHasAddNoCarryInsts : Predicate<"!Subtarget->hasAddNoCarry()">; 1578 1579def Has16BitInsts : Predicate<"Subtarget->has16BitInsts()">, 1580 AssemblerPredicate<(all_of Feature16BitInsts)>; 1581 1582def HasTrue16BitInsts : Predicate<"Subtarget->hasTrue16BitInsts()">, 1583 AssemblerPredicate<(all_of FeatureTrue16BitInsts)>; 1584def NotHasTrue16BitInsts : Predicate<"!Subtarget->hasTrue16BitInsts()">; 1585 1586def HasVOP3PInsts : Predicate<"Subtarget->hasVOP3PInsts()">, 1587 AssemblerPredicate<(all_of FeatureVOP3P)>; 1588 1589def HasMinMaxDenormModes : Predicate<"Subtarget->supportsMinMaxDenormModes()">; 1590def NotHasMinMaxDenormModes : Predicate<"!Subtarget->supportsMinMaxDenormModes()">; 1591 1592def HasSDWA : Predicate<"Subtarget->hasSDWA()">, 1593 AssemblerPredicate<(all_of FeatureSDWA, FeatureVolcanicIslands)>; 1594 1595def HasSDWA9 : 1596 Predicate<"Subtarget->hasSDWA()">, 1597 AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureGFX9Insts,FeatureSDWA)>; 1598 1599def HasSDWA10 : 1600 Predicate<"Subtarget->hasSDWA()">, 1601 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureSDWA)>; 1602 1603def HasDPP : Predicate<"Subtarget->hasDPP()">, 1604 AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureDPP)>; 1605 1606def HasDPP8 : Predicate<"Subtarget->hasDPP8()">, 1607 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureDPP8)>; 1608 1609def Has64BitDPP : Predicate<"Subtarget->has64BitDPP()">, 1610 AssemblerPredicate<(all_of Feature64BitDPP)>; 1611 1612def HasPackedFP32Ops : Predicate<"Subtarget->hasPackedFP32Ops()">, 1613 AssemblerPredicate<(all_of FeaturePackedFP32Ops)>; 1614 1615def HasFmaakFmamkF32Insts : 1616 Predicate<"Subtarget->hasFmaakFmamkF32Insts()">, 1617 AssemblerPredicate<(any_of FeatureGFX10Insts, FeatureGFX940Insts)>; 1618 1619def HasImageInsts : Predicate<"Subtarget->hasImageInsts()">, 1620 AssemblerPredicate<(all_of FeatureImageInsts)>; 1621 1622def HasExtendedImageInsts : Predicate<"Subtarget->hasExtendedImageInsts()">, 1623 AssemblerPredicate<(all_of FeatureExtendedImageInsts)>; 1624 1625def HasR128A16 : Predicate<"Subtarget->hasR128A16()">, 1626 AssemblerPredicate<(all_of FeatureR128A16)>; 1627 1628def HasGFX10A16 : Predicate<"Subtarget->hasGFX10A16()">, 1629 AssemblerPredicate<(all_of FeatureGFX10A16)>; 1630 1631def HasG16 : Predicate<"Subtarget->hasG16()">, 1632 AssemblerPredicate<(all_of FeatureG16)>; 1633 1634def HasDPP16 : Predicate<"Subtarget->hasDPP()">, 1635 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureDPP)>; 1636 1637def HasIntClamp : Predicate<"Subtarget->hasIntClamp()">, 1638 AssemblerPredicate<(all_of FeatureIntClamp)>; 1639 1640def HasMadMixInsts : Predicate<"Subtarget->hasMadMixInsts()">, 1641 AssemblerPredicate<(all_of FeatureMadMixInsts)>; 1642 1643def HasScalarStores : Predicate<"Subtarget->hasScalarStores()">, 1644 AssemblerPredicate<(all_of FeatureScalarStores)>; 1645 1646def HasScalarAtomics : Predicate<"Subtarget->hasScalarAtomics()">, 1647 AssemblerPredicate<(all_of FeatureScalarAtomics)>; 1648 1649def HasNoSdstCMPX : Predicate<"Subtarget->hasNoSdstCMPX()">, 1650 AssemblerPredicate<(all_of FeatureNoSdstCMPX)>; 1651 1652def HasSdstCMPX : Predicate<"!Subtarget->hasNoSdstCMPX()">, 1653 AssemblerPredicate<(all_of (not FeatureNoSdstCMPX))>; 1654 1655def has16BankLDS : Predicate<"Subtarget->getLDSBankCount() == 16">; 1656def has32BankLDS : Predicate<"Subtarget->getLDSBankCount() == 32">; 1657def HasVGPRIndexMode : Predicate<"Subtarget->hasVGPRIndexMode()">, 1658 AssemblerPredicate<(all_of FeatureVGPRIndexMode)>; 1659def HasMovrel : Predicate<"Subtarget->hasMovrel()">, 1660 AssemblerPredicate<(all_of FeatureMovrel)>; 1661 1662def HasFmaMixInsts : Predicate<"Subtarget->hasFmaMixInsts()">, 1663 AssemblerPredicate<(all_of FeatureFmaMixInsts)>; 1664 1665def HasDLInsts : Predicate<"Subtarget->hasDLInsts()">, 1666 AssemblerPredicate<(all_of FeatureDLInsts)>; 1667 1668def HasDot1Insts : Predicate<"Subtarget->hasDot1Insts()">, 1669 AssemblerPredicate<(all_of FeatureDot1Insts)>; 1670 1671def HasDot2Insts : Predicate<"Subtarget->hasDot2Insts()">, 1672 AssemblerPredicate<(all_of FeatureDot2Insts)>; 1673 1674def HasDot3Insts : Predicate<"Subtarget->hasDot3Insts()">, 1675 AssemblerPredicate<(all_of FeatureDot3Insts)>; 1676 1677def HasDot4Insts : Predicate<"Subtarget->hasDot4Insts()">, 1678 AssemblerPredicate<(all_of FeatureDot4Insts)>; 1679 1680def HasDot5Insts : Predicate<"Subtarget->hasDot5Insts()">, 1681 AssemblerPredicate<(all_of FeatureDot5Insts)>; 1682 1683def HasDot6Insts : Predicate<"Subtarget->hasDot6Insts()">, 1684 AssemblerPredicate<(all_of FeatureDot6Insts)>; 1685 1686def HasDot7Insts : Predicate<"Subtarget->hasDot7Insts()">, 1687 AssemblerPredicate<(all_of FeatureDot7Insts)>; 1688 1689def HasDot8Insts : Predicate<"Subtarget->hasDot8Insts()">, 1690 AssemblerPredicate<(all_of FeatureDot8Insts)>; 1691 1692def HasGetWaveIdInst : Predicate<"Subtarget->hasGetWaveIdInst()">, 1693 AssemblerPredicate<(all_of FeatureGetWaveIdInst)>; 1694 1695def HasMAIInsts : Predicate<"Subtarget->hasMAIInsts()">, 1696 AssemblerPredicate<(all_of FeatureMAIInsts)>; 1697 1698def HasSMemRealTime : Predicate<"Subtarget->hasSMemRealTime()">, 1699 AssemblerPredicate<(all_of FeatureSMemRealTime)>; 1700 1701def HasSMemTimeInst : Predicate<"Subtarget->hasSMemTimeInst()">, 1702 AssemblerPredicate<(all_of FeatureSMemTimeInst)>; 1703 1704def HasShaderCyclesRegister : Predicate<"Subtarget->hasShaderCyclesRegister()">, 1705 AssemblerPredicate<(all_of FeatureShaderCyclesRegister)>; 1706 1707def HasPkFmacF16Inst : Predicate<"Subtarget->hasPkFmacF16Inst()">, 1708 AssemblerPredicate<(all_of FeaturePkFmacF16Inst)>; 1709 1710def HasMadMacF32Insts : Predicate<"Subtarget->hasMadMacF32Insts()">, 1711 AssemblerPredicate<(all_of FeatureMadMacF32Insts)>; 1712 1713def HasFmaLegacy32 : Predicate<"Subtarget->hasGFX10_3Insts()">, 1714 AssemblerPredicate<(any_of FeatureGFX10_3Insts)>; 1715 1716def HasAtomicFaddRtnInsts : Predicate<"Subtarget->hasAtomicFaddRtnInsts()">, 1717 AssemblerPredicate<(all_of FeatureAtomicFaddRtnInsts)>; 1718def HasAtomicFaddNoRtnInsts : Predicate<"Subtarget->hasAtomicFaddNoRtnInsts()">, 1719 AssemblerPredicate<(all_of FeatureAtomicFaddNoRtnInsts)>; 1720def HasAtomicPkFaddNoRtnInsts 1721 : Predicate<"Subtarget->hasAtomicPkFaddNoRtnInsts()">, 1722 AssemblerPredicate<(all_of FeatureAtomicPkFaddNoRtnInsts)>; 1723 1724def HasDsSrc2Insts : Predicate<"!Subtarget->hasDsSrc2Insts()">, 1725 AssemblerPredicate<(all_of FeatureDsSrc2Insts)>; 1726 1727def EnableLateCFGStructurize : Predicate< 1728 "EnableLateStructurizeCFG">; 1729 1730def EnableFlatScratch : Predicate<"Subtarget->enableFlatScratch()">; 1731 1732def DisableFlatScratch : Predicate<"!Subtarget->enableFlatScratch()">; 1733 1734def HasUnalignedAccessMode : Predicate<"Subtarget->hasUnalignedAccessMode()">, 1735 AssemblerPredicate<(all_of FeatureUnalignedAccessMode)>; 1736 1737// Include AMDGPU TD files 1738include "SISchedule.td" 1739include "GCNProcessors.td" 1740include "AMDGPUInstrInfo.td" 1741include "SIRegisterInfo.td" 1742include "AMDGPURegisterBanks.td" 1743include "AMDGPUInstructions.td" 1744include "SIInstrInfo.td" 1745include "AMDGPUCallingConv.td" 1746include "AMDGPUSearchableTables.td" 1747