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