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 22class BoolToList<bit Value> { 23 list<int> ret = !if(Value, [1]<int>, []<int>); 24} 25 26//===------------------------------------------------------------===// 27// Subtarget Features (device properties) 28//===------------------------------------------------------------===// 29 30def FeatureFastFMAF32 : SubtargetFeature<"fast-fmaf", 31 "FastFMAF32", 32 "true", 33 "Assuming f32 fma is at least as fast as mul + add" 34>; 35 36def FeatureFastDenormalF32 : SubtargetFeature<"fast-denormal-f32", 37 "FastDenormalF32", 38 "true", 39 "Enabling denormals does not cause f32 instructions to run at f64 rates" 40>; 41 42def FeatureMIMG_R128 : SubtargetFeature<"mimg-r128", 43 "MIMG_R128", 44 "true", 45 "Support 128-bit texture resources" 46>; 47 48def HalfRate64Ops : SubtargetFeature<"half-rate-64-ops", 49 "HalfRate64Ops", 50 "true", 51 "Most fp64 instructions are half rate instead of quarter" 52>; 53 54def FeatureFlatAddressSpace : SubtargetFeature<"flat-address-space", 55 "FlatAddressSpace", 56 "true", 57 "Support flat address space" 58>; 59 60def FeatureFlatInstOffsets : SubtargetFeature<"flat-inst-offsets", 61 "FlatInstOffsets", 62 "true", 63 "Flat instructions have immediate offset addressing mode" 64>; 65 66def FeatureFlatGlobalInsts : SubtargetFeature<"flat-global-insts", 67 "FlatGlobalInsts", 68 "true", 69 "Have global_* flat memory instructions" 70>; 71 72def FeatureFlatScratchInsts : SubtargetFeature<"flat-scratch-insts", 73 "FlatScratchInsts", 74 "true", 75 "Have scratch_* flat memory instructions" 76>; 77 78def FeatureScalarFlatScratchInsts : SubtargetFeature<"scalar-flat-scratch-insts", 79 "ScalarFlatScratchInsts", 80 "true", 81 "Have s_scratch_* flat memory instructions" 82>; 83 84def FeatureAddNoCarryInsts : SubtargetFeature<"add-no-carry-insts", 85 "AddNoCarryInsts", 86 "true", 87 "Have VALU add/sub instructions without carry out" 88>; 89 90def FeatureUnalignedBufferAccess : SubtargetFeature<"unaligned-buffer-access", 91 "UnalignedBufferAccess", 92 "true", 93 "Hardware supports unaligned global loads and stores" 94>; 95 96def FeatureTrapHandler: SubtargetFeature<"trap-handler", 97 "TrapHandler", 98 "true", 99 "Trap handler support" 100>; 101 102def FeatureUnalignedScratchAccess : SubtargetFeature<"unaligned-scratch-access", 103 "UnalignedScratchAccess", 104 "true", 105 "Support unaligned scratch loads and stores" 106>; 107 108def FeatureUnalignedDSAccess : SubtargetFeature<"unaligned-ds-access", 109 "UnalignedDSAccess", 110 "true", 111 "Hardware supports unaligned local and region loads and stores" 112>; 113 114def FeatureApertureRegs : SubtargetFeature<"aperture-regs", 115 "HasApertureRegs", 116 "true", 117 "Has Memory Aperture Base and Size Registers" 118>; 119 120def FeatureMadMixInsts : SubtargetFeature<"mad-mix-insts", 121 "HasMadMixInsts", 122 "true", 123 "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions" 124>; 125 126def FeatureFmaMixInsts : SubtargetFeature<"fma-mix-insts", 127 "HasFmaMixInsts", 128 "true", 129 "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions" 130>; 131 132def FeatureDoesNotSupportXNACK : SubtargetFeature<"no-xnack-support", 133 "DoesNotSupportXNACK", 134 "true", 135 "Hardware does not support XNACK" 136>; 137 138// XNACK is disabled if SH_MEM_CONFIG.ADDRESS_MODE = GPUVM on chips that support 139// XNACK. The current default kernel driver setting is: 140// - graphics ring: XNACK disabled 141// - compute ring: XNACK enabled 142// 143// If XNACK is enabled, the VMEM latency can be worse. 144// If XNACK is disabled, the 2 SGPRs can be used for general purposes. 145def FeatureXNACK : SubtargetFeature<"xnack", 146 "EnableXNACK", 147 "true", 148 "Enable XNACK support" 149>; 150 151def FeatureCuMode : SubtargetFeature<"cumode", 152 "EnableCuMode", 153 "true", 154 "Enable CU wavefront execution mode" 155>; 156 157def FeatureSGPRInitBug : SubtargetFeature<"sgpr-init-bug", 158 "SGPRInitBug", 159 "true", 160 "VI SGPR initialization bug requiring a fixed SGPR allocation size" 161>; 162 163def FeatureLdsMisalignedBug : SubtargetFeature<"lds-misaligned-bug", 164 "LDSMisalignedBug", 165 "true", 166 "Some GFX10 bug with multi-dword LDS and flat access that is not naturally aligned in WGP mode" 167>; 168 169def FeatureMFMAInlineLiteralBug : SubtargetFeature<"mfma-inline-literal-bug", 170 "HasMFMAInlineLiteralBug", 171 "true", 172 "MFMA cannot use inline literal as SrcC" 173>; 174 175def FeatureVcmpxPermlaneHazard : SubtargetFeature<"vcmpx-permlane-hazard", 176 "HasVcmpxPermlaneHazard", 177 "true", 178 "TODO: describe me" 179>; 180 181def FeatureVMEMtoScalarWriteHazard : SubtargetFeature<"vmem-to-scalar-write-hazard", 182 "HasVMEMtoScalarWriteHazard", 183 "true", 184 "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution." 185>; 186 187def FeatureSMEMtoVectorWriteHazard : SubtargetFeature<"smem-to-vector-write-hazard", 188 "HasSMEMtoVectorWriteHazard", 189 "true", 190 "s_load_dword followed by v_cmp page faults" 191>; 192 193def FeatureInstFwdPrefetchBug : SubtargetFeature<"inst-fwd-prefetch-bug", 194 "HasInstFwdPrefetchBug", 195 "true", 196 "S_INST_PREFETCH instruction causes shader to hang" 197>; 198 199def FeatureVcmpxExecWARHazard : SubtargetFeature<"vcmpx-exec-war-hazard", 200 "HasVcmpxExecWARHazard", 201 "true", 202 "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)" 203>; 204 205def FeatureLdsBranchVmemWARHazard : SubtargetFeature<"lds-branch-vmem-war-hazard", 206 "HasLdsBranchVmemWARHazard", 207 "true", 208 "Switching between LDS and VMEM-tex not waiting VM_VSRC=0" 209>; 210 211def FeatureNSAtoVMEMBug : SubtargetFeature<"nsa-to-vmem-bug", 212 "HasNSAtoVMEMBug", 213 "true", 214 "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero" 215>; 216 217def FeatureFlatSegmentOffsetBug : SubtargetFeature<"flat-segment-offset-bug", 218 "HasFlatSegmentOffsetBug", 219 "true", 220 "GFX10 bug, inst_offset ignored in flat segment" 221>; 222 223def FeatureOffset3fBug : SubtargetFeature<"offset-3f-bug", 224 "HasOffset3fBug", 225 "true", 226 "Branch offset of 3f hardware bug" 227>; 228 229class SubtargetFeatureLDSBankCount <int Value> : SubtargetFeature < 230 "ldsbankcount"#Value, 231 "LDSBankCount", 232 !cast<string>(Value), 233 "The number of LDS banks per compute unit." 234>; 235 236def FeatureLDSBankCount16 : SubtargetFeatureLDSBankCount<16>; 237def FeatureLDSBankCount32 : SubtargetFeatureLDSBankCount<32>; 238 239def FeatureGCN3Encoding : SubtargetFeature<"gcn3-encoding", 240 "GCN3Encoding", 241 "true", 242 "Encoding format for VI" 243>; 244 245def FeatureCIInsts : SubtargetFeature<"ci-insts", 246 "CIInsts", 247 "true", 248 "Additional instructions for CI+" 249>; 250 251def FeatureGFX8Insts : SubtargetFeature<"gfx8-insts", 252 "GFX8Insts", 253 "true", 254 "Additional instructions for GFX8+" 255>; 256 257def FeatureGFX9Insts : SubtargetFeature<"gfx9-insts", 258 "GFX9Insts", 259 "true", 260 "Additional instructions for GFX9+" 261>; 262 263def FeatureGFX10Insts : SubtargetFeature<"gfx10-insts", 264 "GFX10Insts", 265 "true", 266 "Additional instructions for GFX10+" 267>; 268 269def FeatureGFX10_3Insts : SubtargetFeature<"gfx10-3-insts", 270 "GFX10_3Insts", 271 "true", 272 "Additional instructions for GFX10.3" 273>; 274 275def FeatureGFX7GFX8GFX9Insts : SubtargetFeature<"gfx7-gfx8-gfx9-insts", 276 "GFX7GFX8GFX9Insts", 277 "true", 278 "Instructions shared in GFX7, GFX8, GFX9" 279>; 280 281def FeatureSMemRealTime : SubtargetFeature<"s-memrealtime", 282 "HasSMemRealTime", 283 "true", 284 "Has s_memrealtime instruction" 285>; 286 287def FeatureInv2PiInlineImm : SubtargetFeature<"inv-2pi-inline-imm", 288 "HasInv2PiInlineImm", 289 "true", 290 "Has 1 / (2 * pi) as inline immediate" 291>; 292 293def Feature16BitInsts : SubtargetFeature<"16-bit-insts", 294 "Has16BitInsts", 295 "true", 296 "Has i16/f16 instructions" 297>; 298 299def FeatureVOP3P : SubtargetFeature<"vop3p", 300 "HasVOP3PInsts", 301 "true", 302 "Has VOP3P packed instructions" 303>; 304 305def FeatureMovrel : SubtargetFeature<"movrel", 306 "HasMovrel", 307 "true", 308 "Has v_movrel*_b32 instructions" 309>; 310 311def FeatureVGPRIndexMode : SubtargetFeature<"vgpr-index-mode", 312 "HasVGPRIndexMode", 313 "true", 314 "Has VGPR mode register indexing" 315>; 316 317def FeatureScalarStores : SubtargetFeature<"scalar-stores", 318 "HasScalarStores", 319 "true", 320 "Has store scalar memory instructions" 321>; 322 323def FeatureScalarAtomics : SubtargetFeature<"scalar-atomics", 324 "HasScalarAtomics", 325 "true", 326 "Has atomic scalar memory instructions" 327>; 328 329def FeatureSDWA : SubtargetFeature<"sdwa", 330 "HasSDWA", 331 "true", 332 "Support SDWA (Sub-DWORD Addressing) extension" 333>; 334 335def FeatureSDWAOmod : SubtargetFeature<"sdwa-omod", 336 "HasSDWAOmod", 337 "true", 338 "Support OMod with SDWA (Sub-DWORD Addressing) extension" 339>; 340 341def FeatureSDWAScalar : SubtargetFeature<"sdwa-scalar", 342 "HasSDWAScalar", 343 "true", 344 "Support scalar register with SDWA (Sub-DWORD Addressing) extension" 345>; 346 347def FeatureSDWASdst : SubtargetFeature<"sdwa-sdst", 348 "HasSDWASdst", 349 "true", 350 "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension" 351>; 352 353def FeatureSDWAMac : SubtargetFeature<"sdwa-mav", 354 "HasSDWAMac", 355 "true", 356 "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension" 357>; 358 359def FeatureSDWAOutModsVOPC : SubtargetFeature<"sdwa-out-mods-vopc", 360 "HasSDWAOutModsVOPC", 361 "true", 362 "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension" 363>; 364 365def FeatureDPP : SubtargetFeature<"dpp", 366 "HasDPP", 367 "true", 368 "Support DPP (Data Parallel Primitives) extension" 369>; 370 371// DPP8 allows arbitrary cross-lane swizzling withing groups of 8 lanes. 372def FeatureDPP8 : SubtargetFeature<"dpp8", 373 "HasDPP8", 374 "true", 375 "Support DPP8 (Data Parallel Primitives) extension" 376>; 377 378def FeatureR128A16 : SubtargetFeature<"r128-a16", 379 "HasR128A16", 380 "true", 381 "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128" 382>; 383 384def FeatureGFX10A16 : SubtargetFeature<"a16", 385 "HasGFX10A16", 386 "true", 387 "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands" 388>; 389 390def FeatureG16 : SubtargetFeature<"g16", 391 "HasG16", 392 "true", 393 "Support G16 for 16-bit gradient image operands" 394>; 395 396def FeatureNSAEncoding : SubtargetFeature<"nsa-encoding", 397 "HasNSAEncoding", 398 "true", 399 "Support NSA encoding for image instructions" 400>; 401 402def FeatureGFX10_BEncoding : SubtargetFeature<"gfx10_b-encoding", 403 "GFX10_BEncoding", 404 "true", 405 "Encoding format GFX10_B" 406>; 407 408def FeatureIntClamp : SubtargetFeature<"int-clamp-insts", 409 "HasIntClamp", 410 "true", 411 "Support clamp for integer destination" 412>; 413 414def FeatureUnpackedD16VMem : SubtargetFeature<"unpacked-d16-vmem", 415 "HasUnpackedD16VMem", 416 "true", 417 "Has unpacked d16 vmem instructions" 418>; 419 420def FeatureDLInsts : SubtargetFeature<"dl-insts", 421 "HasDLInsts", 422 "true", 423 "Has v_fmac_f32 and v_xnor_b32 instructions" 424>; 425 426def FeatureDot1Insts : SubtargetFeature<"dot1-insts", 427 "HasDot1Insts", 428 "true", 429 "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions" 430>; 431 432def FeatureDot2Insts : SubtargetFeature<"dot2-insts", 433 "HasDot2Insts", 434 "true", 435 "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions" 436>; 437 438def FeatureDot3Insts : SubtargetFeature<"dot3-insts", 439 "HasDot3Insts", 440 "true", 441 "Has v_dot8c_i32_i4 instruction" 442>; 443 444def FeatureDot4Insts : SubtargetFeature<"dot4-insts", 445 "HasDot4Insts", 446 "true", 447 "Has v_dot2c_i32_i16 instruction" 448>; 449 450def FeatureDot5Insts : SubtargetFeature<"dot5-insts", 451 "HasDot5Insts", 452 "true", 453 "Has v_dot2c_f32_f16 instruction" 454>; 455 456def FeatureDot6Insts : SubtargetFeature<"dot6-insts", 457 "HasDot6Insts", 458 "true", 459 "Has v_dot4c_i32_i8 instruction" 460>; 461 462def FeatureMAIInsts : SubtargetFeature<"mai-insts", 463 "HasMAIInsts", 464 "true", 465 "Has mAI instructions" 466>; 467 468def FeaturePkFmacF16Inst : SubtargetFeature<"pk-fmac-f16-inst", 469 "HasPkFmacF16Inst", 470 "true", 471 "Has v_pk_fmac_f16 instruction" 472>; 473 474def FeatureAtomicFaddInsts : SubtargetFeature<"atomic-fadd-insts", 475 "HasAtomicFaddInsts", 476 "true", 477 "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, " 478 "global_atomic_pk_add_f16 instructions", 479 [FeatureFlatGlobalInsts] 480>; 481 482def FeatureDoesNotSupportSRAMECC : SubtargetFeature<"no-sram-ecc-support", 483 "DoesNotSupportSRAMECC", 484 "true", 485 "Hardware does not support SRAM ECC" 486>; 487 488def FeatureSRAMECC : SubtargetFeature<"sram-ecc", 489 "EnableSRAMECC", 490 "true", 491 "Enable SRAM ECC" 492>; 493 494def FeatureNoSdstCMPX : SubtargetFeature<"no-sdst-cmpx", 495 "HasNoSdstCMPX", 496 "true", 497 "V_CMPX does not write VCC/SGPR in addition to EXEC" 498>; 499 500def FeatureVscnt : SubtargetFeature<"vscnt", 501 "HasVscnt", 502 "true", 503 "Has separate store vscnt counter" 504>; 505 506def FeatureGetWaveIdInst : SubtargetFeature<"get-wave-id-inst", 507 "HasGetWaveIdInst", 508 "true", 509 "Has s_get_waveid_in_workgroup instruction" 510>; 511 512def FeatureSMemTimeInst : SubtargetFeature<"s-memtime-inst", 513 "HasSMemTimeInst", 514 "true", 515 "Has s_memtime instruction" 516>; 517 518def FeatureMadMacF32Insts : SubtargetFeature<"mad-mac-f32-insts", 519 "HasMadMacF32Insts", 520 "true", 521 "Has v_mad_f32/v_mac_f32/v_madak_f32/v_madmk_f32 instructions" 522>; 523 524def FeatureDsSrc2Insts : SubtargetFeature<"ds-src2-insts", 525 "HasDsSrc2Insts", 526 "true", 527 "Has ds_*_src2 instructions" 528>; 529 530def FeatureRegisterBanking : SubtargetFeature<"register-banking", 531 "HasRegisterBanking", 532 "true", 533 "Has register banking" 534>; 535 536def FeatureVOP3Literal : SubtargetFeature<"vop3-literal", 537 "HasVOP3Literal", 538 "true", 539 "Can use one literal in VOP3" 540>; 541 542def FeatureNoDataDepHazard : SubtargetFeature<"no-data-dep-hazard", 543 "HasNoDataDepHazard", 544 "true", 545 "Does not need SW waitstates" 546>; 547 548//===------------------------------------------------------------===// 549// Subtarget Features (options and debugging) 550//===------------------------------------------------------------===// 551 552class FeatureMaxPrivateElementSize<int size> : SubtargetFeature< 553 "max-private-element-size-"#size, 554 "MaxPrivateElementSize", 555 !cast<string>(size), 556 "Maximum private access size may be "#size 557>; 558 559def FeatureMaxPrivateElementSize4 : FeatureMaxPrivateElementSize<4>; 560def FeatureMaxPrivateElementSize8 : FeatureMaxPrivateElementSize<8>; 561def FeatureMaxPrivateElementSize16 : FeatureMaxPrivateElementSize<16>; 562 563def FeatureDumpCode : SubtargetFeature <"DumpCode", 564 "DumpCode", 565 "true", 566 "Dump MachineInstrs in the CodeEmitter" 567>; 568 569def FeatureDumpCodeLower : SubtargetFeature <"dumpcode", 570 "DumpCode", 571 "true", 572 "Dump MachineInstrs in the CodeEmitter" 573>; 574 575// XXX - This should probably be removed once enabled by default 576def FeatureEnableLoadStoreOpt : SubtargetFeature <"load-store-opt", 577 "EnableLoadStoreOpt", 578 "true", 579 "Enable SI load/store optimizer pass" 580>; 581 582// Performance debugging feature. Allow using DS instruction immediate 583// offsets even if the base pointer can't be proven to be base. On SI, 584// base pointer values that won't give the same result as a 16-bit add 585// are not safe to fold, but this will override the conservative test 586// for the base pointer. 587def FeatureEnableUnsafeDSOffsetFolding : SubtargetFeature < 588 "unsafe-ds-offset-folding", 589 "EnableUnsafeDSOffsetFolding", 590 "true", 591 "Force using DS instruction immediate offsets on SI" 592>; 593 594def FeatureEnableSIScheduler : SubtargetFeature<"si-scheduler", 595 "EnableSIScheduler", 596 "true", 597 "Enable SI Machine Scheduler" 598>; 599 600def FeatureEnableDS128 : SubtargetFeature<"enable-ds128", 601 "EnableDS128", 602 "true", 603 "Use ds_{read|write}_b128" 604>; 605 606// Sparse texture support requires that all result registers are zeroed when 607// PRTStrictNull is set to true. This feature is turned on for all architectures 608// but is enabled as a feature in case there are situations where PRTStrictNull 609// is disabled by the driver. 610def FeatureEnablePRTStrictNull : SubtargetFeature<"enable-prt-strict-null", 611 "EnablePRTStrictNull", 612 "true", 613 "Enable zeroing of result registers for sparse texture fetches" 614>; 615 616// Unless +-flat-for-global is specified, turn on FlatForGlobal for 617// all OS-es on VI and newer hardware to avoid assertion failures due 618// to missing ADDR64 variants of MUBUF instructions. 619// FIXME: moveToVALU should be able to handle converting addr64 MUBUF 620// instructions. 621 622def FeatureFlatForGlobal : SubtargetFeature<"flat-for-global", 623 "FlatForGlobal", 624 "true", 625 "Force to generate flat instruction for global" 626>; 627 628def FeatureAutoWaitcntBeforeBarrier : SubtargetFeature < 629 "auto-waitcnt-before-barrier", 630 "AutoWaitcntBeforeBarrier", 631 "true", 632 "Hardware automatically inserts waitcnt before barrier" 633>; 634 635def FeatureCodeObjectV3 : SubtargetFeature < 636 "code-object-v3", 637 "CodeObjectV3", 638 "true", 639 "Generate code object version 3" 640>; 641 642def FeatureTrigReducedRange : SubtargetFeature<"trig-reduced-range", 643 "HasTrigReducedRange", 644 "true", 645 "Requires use of fract on arguments to trig instructions" 646>; 647 648// Alignment enforcement is controlled by a configuration register: 649// SH_MEM_CONFIG.alignment_mode 650def FeatureUnalignedAccessMode : SubtargetFeature<"unaligned-access-mode", 651 "UnalignedAccessMode", 652 "true", 653 "Enable unaligned global, local and region loads and stores if the hardware" 654 " supports it" 655>; 656 657// Dummy feature used to disable assembler instructions. 658def FeatureDisable : SubtargetFeature<"", 659 "FeatureDisable","true", 660 "Dummy feature to disable assembler instructions" 661>; 662 663class GCNSubtargetFeatureGeneration <string Value, 664 string FeatureName, 665 list<SubtargetFeature> Implies> : 666 SubtargetFeatureGeneration <Value, FeatureName, "GCNSubtarget", Implies>; 667 668def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS", 669 "southern-islands", 670 [FeatureFP64, FeatureLocalMemorySize32768, FeatureMIMG_R128, 671 FeatureWavefrontSize64, FeatureSMemTimeInst, FeatureMadMacF32Insts, 672 FeatureDsSrc2Insts, FeatureLDSBankCount32, FeatureMovrel, 673 FeatureTrigReducedRange, FeatureDoesNotSupportSRAMECC, 674 FeatureDoesNotSupportXNACK] 675>; 676 677def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS", 678 "sea-islands", 679 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 680 FeatureWavefrontSize64, FeatureFlatAddressSpace, 681 FeatureCIInsts, FeatureMovrel, FeatureTrigReducedRange, 682 FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts, 683 FeatureDsSrc2Insts, FeatureDoesNotSupportSRAMECC, 684 FeatureUnalignedBufferAccess] 685>; 686 687def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS", 688 "volcanic-islands", 689 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 690 FeatureWavefrontSize64, FeatureFlatAddressSpace, 691 FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts, 692 FeatureSMemRealTime, FeatureVGPRIndexMode, FeatureMovrel, 693 FeatureScalarStores, FeatureInv2PiInlineImm, 694 FeatureSDWA, FeatureSDWAOutModsVOPC, FeatureSDWAMac, FeatureDPP, 695 FeatureIntClamp, FeatureTrigReducedRange, FeatureGFX8Insts, 696 FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts, 697 FeatureDsSrc2Insts, FeatureDoesNotSupportSRAMECC, FeatureFastDenormalF32, 698 FeatureUnalignedBufferAccess 699 ] 700>; 701 702def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9", 703 "gfx9", 704 [FeatureFP64, FeatureLocalMemorySize65536, 705 FeatureWavefrontSize64, FeatureFlatAddressSpace, 706 FeatureGCN3Encoding, FeatureCIInsts, Feature16BitInsts, 707 FeatureSMemRealTime, FeatureScalarStores, FeatureInv2PiInlineImm, 708 FeatureApertureRegs, FeatureGFX9Insts, FeatureVOP3P, FeatureVGPRIndexMode, 709 FeatureFastFMAF32, FeatureDPP, FeatureIntClamp, 710 FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst, 711 FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts, 712 FeatureAddNoCarryInsts, FeatureGFX8Insts, FeatureGFX7GFX8GFX9Insts, 713 FeatureScalarFlatScratchInsts, FeatureScalarAtomics, FeatureR128A16, 714 FeatureSMemTimeInst, FeatureMadMacF32Insts, FeatureDsSrc2Insts, 715 FeatureFastDenormalF32, FeatureUnalignedBufferAccess, 716 FeatureUnalignedDSAccess 717 ] 718>; 719 720def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10", 721 "gfx10", 722 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128, 723 FeatureFlatAddressSpace, 724 FeatureCIInsts, Feature16BitInsts, 725 FeatureSMemRealTime, FeatureInv2PiInlineImm, 726 FeatureApertureRegs, FeatureGFX9Insts, FeatureGFX10Insts, FeatureVOP3P, 727 FeatureMovrel, FeatureFastFMAF32, FeatureDPP, FeatureIntClamp, 728 FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst, 729 FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts, 730 FeatureAddNoCarryInsts, FeatureFmaMixInsts, FeatureGFX8Insts, 731 FeatureNoSdstCMPX, FeatureVscnt, FeatureRegisterBanking, 732 FeatureVOP3Literal, FeatureDPP8, 733 FeatureNoDataDepHazard, FeaturePkFmacF16Inst, FeatureDoesNotSupportSRAMECC, 734 FeatureGFX10A16, FeatureFastDenormalF32, FeatureG16, 735 FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess 736 ] 737>; 738 739class FeatureSet<list<SubtargetFeature> Features_> { 740 list<SubtargetFeature> Features = Features_; 741} 742 743def FeatureISAVersion6_0_0 : FeatureSet<[FeatureSouthernIslands, 744 FeatureFastFMAF32, 745 HalfRate64Ops, 746 FeatureLDSBankCount32, 747 FeatureDoesNotSupportXNACK, 748 FeatureCodeObjectV3]>; 749 750def FeatureISAVersion6_0_1 : FeatureSet< 751 [FeatureSouthernIslands, 752 FeatureLDSBankCount32, 753 FeatureDoesNotSupportXNACK, 754 FeatureCodeObjectV3]>; 755 756def FeatureISAVersion7_0_0 : FeatureSet< 757 [FeatureSeaIslands, 758 FeatureLDSBankCount32, 759 FeatureDoesNotSupportXNACK, 760 FeatureCodeObjectV3]>; 761 762def FeatureISAVersion7_0_1 : FeatureSet< 763 [FeatureSeaIslands, 764 HalfRate64Ops, 765 FeatureLDSBankCount32, 766 FeatureFastFMAF32, 767 FeatureDoesNotSupportXNACK, 768 FeatureCodeObjectV3]>; 769 770def FeatureISAVersion7_0_2 : FeatureSet< 771 [FeatureSeaIslands, 772 FeatureLDSBankCount16, 773 FeatureFastFMAF32, 774 FeatureDoesNotSupportXNACK, 775 FeatureCodeObjectV3]>; 776 777def FeatureISAVersion7_0_3 : FeatureSet< 778 [FeatureSeaIslands, 779 FeatureLDSBankCount16, 780 FeatureDoesNotSupportXNACK, 781 FeatureCodeObjectV3]>; 782 783def FeatureISAVersion7_0_4 : FeatureSet< 784 [FeatureSeaIslands, 785 FeatureLDSBankCount32, 786 FeatureDoesNotSupportXNACK, 787 FeatureCodeObjectV3]>; 788 789def FeatureISAVersion8_0_1 : FeatureSet< 790 [FeatureVolcanicIslands, 791 FeatureFastFMAF32, 792 HalfRate64Ops, 793 FeatureLDSBankCount32, 794 FeatureXNACK, 795 FeatureUnpackedD16VMem, 796 FeatureCodeObjectV3]>; 797 798def FeatureISAVersion8_0_2 : FeatureSet< 799 [FeatureVolcanicIslands, 800 FeatureLDSBankCount32, 801 FeatureSGPRInitBug, 802 FeatureUnpackedD16VMem, 803 FeatureDoesNotSupportXNACK, 804 FeatureCodeObjectV3]>; 805 806def FeatureISAVersion8_0_3 : FeatureSet< 807 [FeatureVolcanicIslands, 808 FeatureLDSBankCount32, 809 FeatureUnpackedD16VMem, 810 FeatureDoesNotSupportXNACK, 811 FeatureCodeObjectV3]>; 812 813def FeatureISAVersion8_1_0 : FeatureSet< 814 [FeatureVolcanicIslands, 815 FeatureLDSBankCount16, 816 FeatureXNACK, 817 FeatureCodeObjectV3]>; 818 819def FeatureISAVersion9_0_0 : FeatureSet< 820 [FeatureGFX9, 821 FeatureMadMixInsts, 822 FeatureLDSBankCount32, 823 FeatureCodeObjectV3, 824 FeatureDoesNotSupportXNACK, 825 FeatureDoesNotSupportSRAMECC]>; 826 827def FeatureISAVersion9_0_2 : FeatureSet< 828 [FeatureGFX9, 829 FeatureMadMixInsts, 830 FeatureLDSBankCount32, 831 FeatureXNACK, 832 FeatureDoesNotSupportSRAMECC, 833 FeatureCodeObjectV3]>; 834 835def FeatureISAVersion9_0_4 : FeatureSet< 836 [FeatureGFX9, 837 FeatureLDSBankCount32, 838 FeatureFmaMixInsts, 839 FeatureDoesNotSupportXNACK, 840 FeatureDoesNotSupportSRAMECC, 841 FeatureCodeObjectV3]>; 842 843def FeatureISAVersion9_0_6 : FeatureSet< 844 [FeatureGFX9, 845 HalfRate64Ops, 846 FeatureFmaMixInsts, 847 FeatureLDSBankCount32, 848 FeatureDLInsts, 849 FeatureDot1Insts, 850 FeatureDot2Insts, 851 FeatureDoesNotSupportXNACK, 852 FeatureCodeObjectV3]>; 853 854def FeatureISAVersion9_0_8 : FeatureSet< 855 [FeatureGFX9, 856 HalfRate64Ops, 857 FeatureFmaMixInsts, 858 FeatureLDSBankCount32, 859 FeatureDLInsts, 860 FeatureDot1Insts, 861 FeatureDot2Insts, 862 FeatureDot3Insts, 863 FeatureDot4Insts, 864 FeatureDot5Insts, 865 FeatureDot6Insts, 866 FeatureMAIInsts, 867 FeaturePkFmacF16Inst, 868 FeatureAtomicFaddInsts, 869 FeatureSRAMECC, 870 FeatureMFMAInlineLiteralBug, 871 FeatureCodeObjectV3]>; 872 873def FeatureISAVersion9_0_9 : FeatureSet< 874 [FeatureGFX9, 875 FeatureMadMixInsts, 876 FeatureLDSBankCount32, 877 FeatureXNACK, 878 FeatureCodeObjectV3]>; 879 880// TODO: Organize more features into groups. 881def FeatureGroup { 882 // Bugs present on gfx10.1. 883 list<SubtargetFeature> GFX10_1_Bugs = [ 884 FeatureVcmpxPermlaneHazard, 885 FeatureVMEMtoScalarWriteHazard, 886 FeatureSMEMtoVectorWriteHazard, 887 FeatureInstFwdPrefetchBug, 888 FeatureVcmpxExecWARHazard, 889 FeatureLdsBranchVmemWARHazard, 890 FeatureNSAtoVMEMBug, 891 FeatureOffset3fBug, 892 FeatureFlatSegmentOffsetBug 893 ]; 894} 895 896def FeatureISAVersion10_1_0 : FeatureSet< 897 !listconcat(FeatureGroup.GFX10_1_Bugs, 898 [FeatureGFX10, 899 FeatureLDSBankCount32, 900 FeatureDLInsts, 901 FeatureNSAEncoding, 902 FeatureWavefrontSize32, 903 FeatureScalarStores, 904 FeatureScalarAtomics, 905 FeatureScalarFlatScratchInsts, 906 FeatureGetWaveIdInst, 907 FeatureSMemTimeInst, 908 FeatureMadMacF32Insts, 909 FeatureDsSrc2Insts, 910 FeatureLdsMisalignedBug, 911 FeatureDoesNotSupportXNACK, 912 FeatureCodeObjectV3])>; 913 914def FeatureISAVersion10_1_1 : FeatureSet< 915 !listconcat(FeatureGroup.GFX10_1_Bugs, 916 [FeatureGFX10, 917 FeatureLDSBankCount32, 918 FeatureDLInsts, 919 FeatureDot1Insts, 920 FeatureDot2Insts, 921 FeatureDot5Insts, 922 FeatureDot6Insts, 923 FeatureNSAEncoding, 924 FeatureWavefrontSize32, 925 FeatureScalarStores, 926 FeatureScalarAtomics, 927 FeatureScalarFlatScratchInsts, 928 FeatureGetWaveIdInst, 929 FeatureSMemTimeInst, 930 FeatureMadMacF32Insts, 931 FeatureDsSrc2Insts, 932 FeatureLdsMisalignedBug, 933 FeatureDoesNotSupportXNACK, 934 FeatureCodeObjectV3])>; 935 936def FeatureISAVersion10_1_2 : FeatureSet< 937 !listconcat(FeatureGroup.GFX10_1_Bugs, 938 [FeatureGFX10, 939 FeatureLDSBankCount32, 940 FeatureDLInsts, 941 FeatureDot1Insts, 942 FeatureDot2Insts, 943 FeatureDot5Insts, 944 FeatureDot6Insts, 945 FeatureNSAEncoding, 946 FeatureWavefrontSize32, 947 FeatureScalarStores, 948 FeatureScalarAtomics, 949 FeatureScalarFlatScratchInsts, 950 FeatureGetWaveIdInst, 951 FeatureSMemTimeInst, 952 FeatureMadMacF32Insts, 953 FeatureDsSrc2Insts, 954 FeatureLdsMisalignedBug, 955 FeatureDoesNotSupportXNACK, 956 FeatureCodeObjectV3])>; 957 958def FeatureISAVersion10_3_0 : FeatureSet< 959 [FeatureGFX10, 960 FeatureGFX10_BEncoding, 961 FeatureGFX10_3Insts, 962 FeatureLDSBankCount32, 963 FeatureDLInsts, 964 FeatureDot1Insts, 965 FeatureDot2Insts, 966 FeatureDot5Insts, 967 FeatureDot6Insts, 968 FeatureNSAEncoding, 969 FeatureWavefrontSize32, 970 FeatureDoesNotSupportXNACK, 971 FeatureCodeObjectV3]>; 972 973//===----------------------------------------------------------------------===// 974 975def AMDGPUInstrInfo : InstrInfo { 976 let guessInstructionProperties = 1; 977 let noNamedPositionallyEncodedOperands = 1; 978} 979 980def AMDGPUAsmParser : AsmParser { 981 // Some of the R600 registers have the same name, so this crashes. 982 // For example T0_XYZW and T0_XY both have the asm name T0. 983 let ShouldEmitMatchRegisterName = 0; 984} 985 986def AMDGPUAsmWriter : AsmWriter { 987 int PassSubtarget = 1; 988} 989 990def AMDGPUAsmVariants { 991 string Default = "Default"; 992 int Default_ID = 0; 993 string VOP3 = "VOP3"; 994 int VOP3_ID = 1; 995 string SDWA = "SDWA"; 996 int SDWA_ID = 2; 997 string SDWA9 = "SDWA9"; 998 int SDWA9_ID = 3; 999 string DPP = "DPP"; 1000 int DPP_ID = 4; 1001 string Disable = "Disable"; 1002 int Disable_ID = 5; 1003} 1004 1005def DefaultAMDGPUAsmParserVariant : AsmParserVariant { 1006 let Variant = AMDGPUAsmVariants.Default_ID; 1007 let Name = AMDGPUAsmVariants.Default; 1008} 1009 1010def VOP3AsmParserVariant : AsmParserVariant { 1011 let Variant = AMDGPUAsmVariants.VOP3_ID; 1012 let Name = AMDGPUAsmVariants.VOP3; 1013} 1014 1015def SDWAAsmParserVariant : AsmParserVariant { 1016 let Variant = AMDGPUAsmVariants.SDWA_ID; 1017 let Name = AMDGPUAsmVariants.SDWA; 1018} 1019 1020def SDWA9AsmParserVariant : AsmParserVariant { 1021 let Variant = AMDGPUAsmVariants.SDWA9_ID; 1022 let Name = AMDGPUAsmVariants.SDWA9; 1023} 1024 1025 1026def DPPAsmParserVariant : AsmParserVariant { 1027 let Variant = AMDGPUAsmVariants.DPP_ID; 1028 let Name = AMDGPUAsmVariants.DPP; 1029} 1030 1031def AMDGPU : Target { 1032 // Pull in Instruction Info: 1033 let InstructionSet = AMDGPUInstrInfo; 1034 let AssemblyParsers = [AMDGPUAsmParser]; 1035 let AssemblyParserVariants = [DefaultAMDGPUAsmParserVariant, 1036 VOP3AsmParserVariant, 1037 SDWAAsmParserVariant, 1038 SDWA9AsmParserVariant, 1039 DPPAsmParserVariant]; 1040 let AssemblyWriters = [AMDGPUAsmWriter]; 1041 let AllowRegisterRenaming = 1; 1042} 1043 1044// Dummy Instruction itineraries for pseudo instructions 1045def ALU_NULL : FuncUnit; 1046def NullALU : InstrItinClass; 1047 1048//===----------------------------------------------------------------------===// 1049// Predicate helper class 1050//===----------------------------------------------------------------------===// 1051 1052def isGFX6 : 1053 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS">, 1054 AssemblerPredicate<(all_of FeatureSouthernIslands)>; 1055 1056def isGFX6GFX7 : 1057 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1058 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS">, 1059 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), (not FeatureGFX10Insts))>; 1060 1061def isGFX6GFX7GFX10 : 1062 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1063 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1064 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1065 AssemblerPredicate<(all_of (not FeatureGCN3Encoding))>; 1066 1067def isGFX7Only : 1068 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS">, 1069 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts, (not FeatureGFX10Insts))>; 1070 1071def isGFX7GFX10 : 1072 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1073 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX10">, 1074 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureCIInsts)>; 1075 1076def isGFX7GFX8 : 1077 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1078 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS">, 1079 AssemblerPredicate<(all_of FeatureSouthernIslands, FeatureCIInsts)>; 1080 1081def isGFX7GFX8GFX9 : 1082 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1083 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1084 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1085 AssemblerPredicate<(all_of FeatureGFX7GFX8GFX9Insts)>; 1086 1087def isGFX6GFX7GFX8GFX9 : 1088 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||" 1089 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS ||" 1090 "Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1091 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1092 AssemblerPredicate<(all_of (not FeatureGFX10Insts))>; 1093 1094def isGFX7Plus : 1095 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::SEA_ISLANDS">, 1096 AssemblerPredicate<(all_of FeatureCIInsts)>; 1097 1098def isGFX8Plus : 1099 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS">, 1100 AssemblerPredicate<(all_of FeatureGFX8Insts)>; 1101 1102def isGFX8Only : Predicate<"Subtarget->getGeneration() ==" 1103 "AMDGPUSubtarget::VOLCANIC_ISLANDS">, 1104 AssemblerPredicate <(all_of FeatureVolcanicIslands)>; 1105 1106def isGFX9Plus : 1107 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">, 1108 AssemblerPredicate<(all_of FeatureGFX9Insts)>; 1109 1110def isGFX9Only : Predicate < 1111 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1112 AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureGFX9Insts)>; 1113 1114def isGFX8GFX9 : 1115 Predicate<"Subtarget->getGeneration() == AMDGPUSubtarget::VOLCANIC_ISLANDS ||" 1116 "Subtarget->getGeneration() == AMDGPUSubtarget::GFX9">, 1117 AssemblerPredicate<(all_of FeatureGFX8Insts, FeatureGCN3Encoding)>; 1118 1119def isGFX10Plus : 1120 Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX10">, 1121 AssemblerPredicate<(all_of FeatureGFX10Insts)>; 1122 1123def HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">, 1124 AssemblerPredicate<(all_of FeatureFlatAddressSpace)>; 1125 1126def HasFlatGlobalInsts : Predicate<"Subtarget->hasFlatGlobalInsts()">, 1127 AssemblerPredicate<(all_of FeatureFlatGlobalInsts)>; 1128def HasFlatScratchInsts : Predicate<"Subtarget->hasFlatScratchInsts()">, 1129 AssemblerPredicate<(all_of FeatureFlatScratchInsts)>; 1130def HasScalarFlatScratchInsts : Predicate<"Subtarget->hasScalarFlatScratchInsts()">, 1131 AssemblerPredicate<(all_of FeatureScalarFlatScratchInsts)>; 1132def HasD16LoadStore : Predicate<"Subtarget->hasD16LoadStore()">, 1133 AssemblerPredicate<(all_of FeatureGFX9Insts)>; 1134 1135def HasGFX10_BEncoding : Predicate<"Subtarget->hasGFX10_BEncoding()">, 1136 AssemblerPredicate<(all_of FeatureGFX10_BEncoding)>; 1137 1138def HasUnpackedD16VMem : Predicate<"Subtarget->hasUnpackedD16VMem()">, 1139 AssemblerPredicate<(all_of FeatureUnpackedD16VMem)>; 1140def HasPackedD16VMem : Predicate<"!Subtarget->hasUnpackedD16VMem()">, 1141 AssemblerPredicate<(all_of (not FeatureUnpackedD16VMem))>; 1142 1143def D16PreservesUnusedBits : 1144 Predicate<"Subtarget->d16PreservesUnusedBits()">, 1145 AssemblerPredicate<(all_of FeatureGFX9Insts, (not FeatureSRAMECC))>; 1146 1147def LDSRequiresM0Init : Predicate<"Subtarget->ldsRequiresM0Init()">; 1148def NotLDSRequiresM0Init : Predicate<"!Subtarget->ldsRequiresM0Init()">; 1149 1150def HasDSAddTid : Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">, 1151 AssemblerPredicate<(all_of FeatureGFX9Insts)>; 1152 1153def HasLDSFPAtomics : Predicate<"Subtarget->hasLDSFPAtomics()">, 1154 AssemblerPredicate<(all_of FeatureGFX8Insts)>; 1155 1156def HasAddNoCarryInsts : Predicate<"Subtarget->hasAddNoCarry()">, 1157 AssemblerPredicate<(all_of FeatureAddNoCarryInsts)>; 1158 1159def NotHasAddNoCarryInsts : Predicate<"!Subtarget->hasAddNoCarry()">; 1160 1161def Has16BitInsts : Predicate<"Subtarget->has16BitInsts()">, 1162 AssemblerPredicate<(all_of Feature16BitInsts)>; 1163def HasVOP3PInsts : Predicate<"Subtarget->hasVOP3PInsts()">, 1164 AssemblerPredicate<(all_of FeatureVOP3P)>; 1165 1166def HasMinMaxDenormModes : Predicate<"Subtarget->supportsMinMaxDenormModes()">; 1167def NotHasMinMaxDenormModes : Predicate<"!Subtarget->supportsMinMaxDenormModes()">; 1168 1169def HasSDWA : Predicate<"Subtarget->hasSDWA()">, 1170 AssemblerPredicate<(all_of FeatureSDWA, FeatureVolcanicIslands)>; 1171 1172def HasSDWA9 : 1173 Predicate<"Subtarget->hasSDWA()">, 1174 AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureGFX9Insts,FeatureSDWA)>; 1175 1176def HasSDWA10 : 1177 Predicate<"Subtarget->hasSDWA()">, 1178 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureSDWA)>; 1179 1180def HasDPP : Predicate<"Subtarget->hasDPP()">, 1181 AssemblerPredicate<(all_of FeatureGCN3Encoding, FeatureDPP)>; 1182 1183def HasDPP8 : Predicate<"Subtarget->hasDPP8()">, 1184 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureDPP8)>; 1185 1186def HasR128A16 : Predicate<"Subtarget->hasR128A16()">, 1187 AssemblerPredicate<(all_of FeatureR128A16)>; 1188 1189def HasGFX10A16 : Predicate<"Subtarget->hasGFX10A16()">, 1190 AssemblerPredicate<(all_of FeatureGFX10A16)>; 1191 1192def HasG16 : Predicate<"Subtarget->hasG16()">, 1193 AssemblerPredicate<(all_of FeatureG16)>; 1194 1195def HasDPP16 : Predicate<"Subtarget->hasDPP()">, 1196 AssemblerPredicate<(all_of (not FeatureGCN3Encoding), FeatureGFX10Insts, FeatureDPP)>; 1197 1198def HasIntClamp : Predicate<"Subtarget->hasIntClamp()">, 1199 AssemblerPredicate<(all_of FeatureIntClamp)>; 1200 1201def HasMadMixInsts : Predicate<"Subtarget->hasMadMixInsts()">, 1202 AssemblerPredicate<(all_of FeatureMadMixInsts)>; 1203 1204def HasScalarStores : Predicate<"Subtarget->hasScalarStores()">, 1205 AssemblerPredicate<(all_of FeatureScalarStores)>; 1206 1207def HasScalarAtomics : Predicate<"Subtarget->hasScalarAtomics()">, 1208 AssemblerPredicate<(all_of FeatureScalarAtomics)>; 1209 1210def HasNoSdstCMPX : Predicate<"Subtarget->hasNoSdstCMPX()">, 1211 AssemblerPredicate<(all_of FeatureNoSdstCMPX)>; 1212 1213def HasSdstCMPX : Predicate<"!Subtarget->hasNoSdstCMPX()">, 1214 AssemblerPredicate<(all_of (not FeatureNoSdstCMPX))>; 1215 1216def has16BankLDS : Predicate<"Subtarget->getLDSBankCount() == 16">; 1217def has32BankLDS : Predicate<"Subtarget->getLDSBankCount() == 32">; 1218def HasVGPRIndexMode : Predicate<"Subtarget->hasVGPRIndexMode()">, 1219 AssemblerPredicate<(all_of FeatureVGPRIndexMode)>; 1220def HasMovrel : Predicate<"Subtarget->hasMovrel()">, 1221 AssemblerPredicate<(all_of FeatureMovrel)>; 1222 1223def HasFmaMixInsts : Predicate<"Subtarget->hasFmaMixInsts()">, 1224 AssemblerPredicate<(all_of FeatureFmaMixInsts)>; 1225 1226def HasDLInsts : Predicate<"Subtarget->hasDLInsts()">, 1227 AssemblerPredicate<(all_of FeatureDLInsts)>; 1228 1229def HasDot1Insts : Predicate<"Subtarget->hasDot1Insts()">, 1230 AssemblerPredicate<(all_of FeatureDot1Insts)>; 1231 1232def HasDot2Insts : Predicate<"Subtarget->hasDot2Insts()">, 1233 AssemblerPredicate<(all_of FeatureDot2Insts)>; 1234 1235def HasDot3Insts : Predicate<"Subtarget->hasDot3Insts()">, 1236 AssemblerPredicate<(all_of FeatureDot3Insts)>; 1237 1238def HasDot4Insts : Predicate<"Subtarget->hasDot4Insts()">, 1239 AssemblerPredicate<(all_of FeatureDot4Insts)>; 1240 1241def HasDot5Insts : Predicate<"Subtarget->hasDot5Insts()">, 1242 AssemblerPredicate<(all_of FeatureDot5Insts)>; 1243 1244def HasDot6Insts : Predicate<"Subtarget->hasDot6Insts()">, 1245 AssemblerPredicate<(all_of FeatureDot6Insts)>; 1246 1247def HasGetWaveIdInst : Predicate<"Subtarget->hasGetWaveIdInst()">, 1248 AssemblerPredicate<(all_of FeatureGetWaveIdInst)>; 1249 1250def HasMAIInsts : Predicate<"Subtarget->hasMAIInsts()">, 1251 AssemblerPredicate<(all_of FeatureMAIInsts)>; 1252 1253def HasSMemTimeInst : Predicate<"Subtarget->hasSMemTimeInst()">, 1254 AssemblerPredicate<(all_of FeatureSMemTimeInst)>; 1255 1256def HasNoSMemTimeInst : Predicate<"!Subtarget->hasSMemTimeInst()">; 1257 1258def HasPkFmacF16Inst : Predicate<"Subtarget->hasPkFmacF16Inst()">, 1259 AssemblerPredicate<(all_of FeaturePkFmacF16Inst)>; 1260 1261def HasMadMacF32Insts : Predicate<"Subtarget->hasMadMacF32Insts()">, 1262 AssemblerPredicate<(all_of FeatureMadMacF32Insts)>; 1263 1264def HasAtomicFaddInsts : Predicate<"Subtarget->hasAtomicFaddInsts()">, 1265 AssemblerPredicate<(all_of FeatureAtomicFaddInsts)>; 1266 1267def HasNoMadMacF32Insts : Predicate<"!Subtarget->hasMadMacF32Insts()">, 1268 AssemblerPredicate<(all_of (not FeatureMadMacF32Insts))>; 1269 1270def HasDsSrc2Insts : Predicate<"!Subtarget->hasDsSrc2Insts()">, 1271 AssemblerPredicate<(all_of FeatureDsSrc2Insts)>; 1272 1273def HasOffset3fBug : Predicate<"!Subtarget->hasOffset3fBug()">, 1274 AssemblerPredicate<(all_of FeatureOffset3fBug)>; 1275 1276def EnableLateCFGStructurize : Predicate< 1277 "EnableLateStructurizeCFG">; 1278 1279// Include AMDGPU TD files 1280include "SISchedule.td" 1281include "GCNProcessors.td" 1282include "AMDGPUInstrInfo.td" 1283include "SIRegisterInfo.td" 1284include "AMDGPURegisterBanks.td" 1285include "AMDGPUInstructions.td" 1286include "SIInstrInfo.td" 1287include "AMDGPUCallingConv.td" 1288include "AMDGPUSearchableTables.td" 1289