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