1 //===-- AMDGPU.td - AMDGPU Tablegen files --------*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===------------------------------------------------------------===//
10 include "llvm/TableGen/SearchableTable.td"
11 include "llvm/Target/Target.td"
12 include "AMDGPUFeatures.td"
14 class BoolToList<bit Value> {
15 list<int> ret = !if(Value, [1]<int>, []<int>);
18 //===------------------------------------------------------------===//
19 // Subtarget Features (device properties)
20 //===------------------------------------------------------------===//
22 def FeatureFastFMAF32 : SubtargetFeature<"fast-fmaf",
25 "Assuming f32 fma is at least as fast as mul + add"
28 def FeatureMIMG_R128 : SubtargetFeature<"mimg-r128",
31 "Support 128-bit texture resources"
34 def HalfRate64Ops : SubtargetFeature<"half-rate-64-ops",
37 "Most fp64 instructions are half rate instead of quarter"
40 def FeatureFlatAddressSpace : SubtargetFeature<"flat-address-space",
43 "Support flat address space"
46 def FeatureFlatInstOffsets : SubtargetFeature<"flat-inst-offsets",
49 "Flat instructions have immediate offset addressing mode"
52 def FeatureFlatGlobalInsts : SubtargetFeature<"flat-global-insts",
55 "Have global_* flat memory instructions"
58 def FeatureFlatScratchInsts : SubtargetFeature<"flat-scratch-insts",
61 "Have scratch_* flat memory instructions"
64 def FeatureAddNoCarryInsts : SubtargetFeature<"add-no-carry-insts",
67 "Have VALU add/sub instructions without carry out"
70 def FeatureUnalignedBufferAccess : SubtargetFeature<"unaligned-buffer-access",
71 "UnalignedBufferAccess",
73 "Support unaligned global loads and stores"
76 def FeatureTrapHandler: SubtargetFeature<"trap-handler",
79 "Trap handler support"
82 def FeatureUnalignedScratchAccess : SubtargetFeature<"unaligned-scratch-access",
83 "UnalignedScratchAccess",
85 "Support unaligned scratch loads and stores"
88 def FeatureApertureRegs : SubtargetFeature<"aperture-regs",
91 "Has Memory Aperture Base and Size Registers"
94 def FeatureMadMixInsts : SubtargetFeature<"mad-mix-insts",
97 "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions"
100 def FeatureFmaMixInsts : SubtargetFeature<"fma-mix-insts",
103 "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions"
106 // XNACK is disabled if SH_MEM_CONFIG.ADDRESS_MODE = GPUVM on chips that support
107 // XNACK. The current default kernel driver setting is:
108 // - graphics ring: XNACK disabled
109 // - compute ring: XNACK enabled
111 // If XNACK is enabled, the VMEM latency can be worse.
112 // If XNACK is disabled, the 2 SGPRs can be used for general purposes.
113 def FeatureXNACK : SubtargetFeature<"xnack",
116 "Enable XNACK support"
119 def FeatureSGPRInitBug : SubtargetFeature<"sgpr-init-bug",
122 "VI SGPR initialization bug requiring a fixed SGPR allocation size"
125 class SubtargetFeatureLDSBankCount <int Value> : SubtargetFeature <
126 "ldsbankcount"#Value,
128 !cast<string>(Value),
129 "The number of LDS banks per compute unit."
132 def FeatureLDSBankCount16 : SubtargetFeatureLDSBankCount<16>;
133 def FeatureLDSBankCount32 : SubtargetFeatureLDSBankCount<32>;
135 def FeatureGCN3Encoding : SubtargetFeature<"gcn3-encoding",
138 "Encoding format for VI"
141 def FeatureCIInsts : SubtargetFeature<"ci-insts",
144 "Additional instructions for CI+"
147 def FeatureVIInsts : SubtargetFeature<"vi-insts",
150 "Additional instructions for VI+"
153 def FeatureGFX9Insts : SubtargetFeature<"gfx9-insts",
156 "Additional instructions for GFX9+"
159 def FeatureSMemRealTime : SubtargetFeature<"s-memrealtime",
162 "Has s_memrealtime instruction"
165 def FeatureInv2PiInlineImm : SubtargetFeature<"inv-2pi-inline-imm",
166 "HasInv2PiInlineImm",
168 "Has 1 / (2 * pi) as inline immediate"
171 def Feature16BitInsts : SubtargetFeature<"16-bit-insts",
174 "Has i16/f16 instructions"
177 def FeatureVOP3P : SubtargetFeature<"vop3p",
180 "Has VOP3P packed instructions"
183 def FeatureMovrel : SubtargetFeature<"movrel",
186 "Has v_movrel*_b32 instructions"
189 def FeatureVGPRIndexMode : SubtargetFeature<"vgpr-index-mode",
192 "Has VGPR mode register indexing"
195 def FeatureScalarStores : SubtargetFeature<"scalar-stores",
198 "Has store scalar memory instructions"
201 def FeatureScalarAtomics : SubtargetFeature<"scalar-atomics",
204 "Has atomic scalar memory instructions"
207 def FeatureSDWA : SubtargetFeature<"sdwa",
210 "Support SDWA (Sub-DWORD Addressing) extension"
213 def FeatureSDWAOmod : SubtargetFeature<"sdwa-omod",
216 "Support OMod with SDWA (Sub-DWORD Addressing) extension"
219 def FeatureSDWAScalar : SubtargetFeature<"sdwa-scalar",
222 "Support scalar register with SDWA (Sub-DWORD Addressing) extension"
225 def FeatureSDWASdst : SubtargetFeature<"sdwa-sdst",
228 "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension"
231 def FeatureSDWAMac : SubtargetFeature<"sdwa-mav",
234 "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension"
237 def FeatureSDWAOutModsVOPC : SubtargetFeature<"sdwa-out-mods-vopc",
238 "HasSDWAOutModsVOPC",
240 "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension"
243 def FeatureDPP : SubtargetFeature<"dpp",
246 "Support DPP (Data Parallel Primitives) extension"
249 def FeatureR128A16 : SubtargetFeature<"r128-a16",
252 "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9"
255 def FeatureIntClamp : SubtargetFeature<"int-clamp-insts",
258 "Support clamp for integer destination"
261 def FeatureUnpackedD16VMem : SubtargetFeature<"unpacked-d16-vmem",
262 "HasUnpackedD16VMem",
264 "Has unpacked d16 vmem instructions"
267 def FeatureDLInsts : SubtargetFeature<"dl-insts",
270 "Has v_fmac_f32 and v_xnor_b32 instructions"
273 def FeatureDotInsts : SubtargetFeature<"dot-insts",
276 "Has v_dot* instructions"
279 def FeatureSRAMECC : SubtargetFeature<"sram-ecc",
285 //===------------------------------------------------------------===//
286 // Subtarget Features (options and debugging)
287 //===------------------------------------------------------------===//
289 // Denormal handling for fp64 and fp16 is controlled by the same
290 // config register when fp16 supported.
291 // TODO: Do we need a separate f16 setting when not legal?
292 def FeatureFP64FP16Denormals : SubtargetFeature<"fp64-fp16-denormals",
295 "Enable double and half precision denormal handling",
299 def FeatureFP64Denormals : SubtargetFeature<"fp64-denormals",
302 "Enable double and half precision denormal handling",
303 [FeatureFP64, FeatureFP64FP16Denormals]
306 def FeatureFP16Denormals : SubtargetFeature<"fp16-denormals",
309 "Enable half precision denormal handling",
310 [FeatureFP64FP16Denormals]
313 def FeatureFPExceptions : SubtargetFeature<"fp-exceptions",
316 "Enable floating point exceptions"
319 class FeatureMaxPrivateElementSize<int size> : SubtargetFeature<
320 "max-private-element-size-"#size,
321 "MaxPrivateElementSize",
323 "Maximum private access size may be "#size
326 def FeatureMaxPrivateElementSize4 : FeatureMaxPrivateElementSize<4>;
327 def FeatureMaxPrivateElementSize8 : FeatureMaxPrivateElementSize<8>;
328 def FeatureMaxPrivateElementSize16 : FeatureMaxPrivateElementSize<16>;
330 def FeatureEnableHugePrivateBuffer : SubtargetFeature<
331 "huge-private-buffer",
332 "EnableHugePrivateBuffer",
334 "Enable private/scratch buffer sizes greater than 128 GB"
337 def FeatureDumpCode : SubtargetFeature <"DumpCode",
340 "Dump MachineInstrs in the CodeEmitter"
343 def FeatureDumpCodeLower : SubtargetFeature <"dumpcode",
346 "Dump MachineInstrs in the CodeEmitter"
349 // XXX - This should probably be removed once enabled by default
350 def FeatureEnableLoadStoreOpt : SubtargetFeature <"load-store-opt",
351 "EnableLoadStoreOpt",
353 "Enable SI load/store optimizer pass"
356 // Performance debugging feature. Allow using DS instruction immediate
357 // offsets even if the base pointer can't be proven to be base. On SI,
358 // base pointer values that won't give the same result as a 16-bit add
359 // are not safe to fold, but this will override the conservative test
360 // for the base pointer.
361 def FeatureEnableUnsafeDSOffsetFolding : SubtargetFeature <
362 "unsafe-ds-offset-folding",
363 "EnableUnsafeDSOffsetFolding",
365 "Force using DS instruction immediate offsets on SI"
368 def FeatureEnableSIScheduler : SubtargetFeature<"si-scheduler",
371 "Enable SI Machine Scheduler"
374 def FeatureEnableDS128 : SubtargetFeature<"enable-ds128",
377 "Use ds_{read|write}_b128"
380 // Sparse texture support requires that all result registers are zeroed when
381 // PRTStrictNull is set to true. This feature is turned on for all architectures
382 // but is enabled as a feature in case there are situations where PRTStrictNull
383 // is disabled by the driver.
384 def FeatureEnablePRTStrictNull : SubtargetFeature<"enable-prt-strict-null",
385 "EnablePRTStrictNull",
387 "Enable zeroing of result registers for sparse texture fetches"
390 // Unless +-flat-for-global is specified, turn on FlatForGlobal for
391 // all OS-es on VI and newer hardware to avoid assertion failures due
392 // to missing ADDR64 variants of MUBUF instructions.
393 // FIXME: moveToVALU should be able to handle converting addr64 MUBUF
396 def FeatureFlatForGlobal : SubtargetFeature<"flat-for-global",
399 "Force to generate flat instruction for global"
402 def FeatureAutoWaitcntBeforeBarrier : SubtargetFeature <
403 "auto-waitcnt-before-barrier",
404 "AutoWaitcntBeforeBarrier",
406 "Hardware automatically inserts waitcnt before barrier"
409 def FeatureCodeObjectV3 : SubtargetFeature <
413 "Generate code object version 3"
416 def FeatureTrigReducedRange : SubtargetFeature<"trig-reduced-range",
417 "HasTrigReducedRange",
419 "Requires use of fract on arguments to trig instructions"
422 // Dummy feature used to disable assembler instructions.
423 def FeatureDisable : SubtargetFeature<"",
424 "FeatureDisable","true",
425 "Dummy feature to disable assembler instructions"
428 def FeatureGCN : SubtargetFeature<"gcn",
434 class GCNSubtargetFeatureGeneration <string Value,
435 list<SubtargetFeature> Implies> :
436 SubtargetFeatureGeneration <Value, "GCNSubtarget", Implies>;
438 def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS",
439 [FeatureFP64, FeatureLocalMemorySize32768, FeatureMIMG_R128,
440 FeatureWavefrontSize64, FeatureGCN,
441 FeatureLDSBankCount32, FeatureMovrel, FeatureTrigReducedRange]
444 def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS",
445 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128,
446 FeatureWavefrontSize64, FeatureGCN, FeatureFlatAddressSpace,
447 FeatureCIInsts, FeatureMovrel, FeatureTrigReducedRange]
450 def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS",
451 [FeatureFP64, FeatureLocalMemorySize65536, FeatureMIMG_R128,
452 FeatureWavefrontSize64, FeatureFlatAddressSpace, FeatureGCN,
453 FeatureGCN3Encoding, FeatureCIInsts, FeatureVIInsts, Feature16BitInsts,
454 FeatureSMemRealTime, FeatureVGPRIndexMode, FeatureMovrel,
455 FeatureScalarStores, FeatureInv2PiInlineImm,
456 FeatureSDWA, FeatureSDWAOutModsVOPC, FeatureSDWAMac, FeatureDPP,
457 FeatureIntClamp, FeatureTrigReducedRange
461 def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9",
462 [FeatureFP64, FeatureLocalMemorySize65536,
463 FeatureWavefrontSize64, FeatureFlatAddressSpace, FeatureGCN,
464 FeatureGCN3Encoding, FeatureCIInsts, FeatureVIInsts, Feature16BitInsts,
465 FeatureSMemRealTime, FeatureScalarStores, FeatureInv2PiInlineImm,
466 FeatureApertureRegs, FeatureGFX9Insts, FeatureVOP3P, FeatureVGPRIndexMode,
467 FeatureFastFMAF32, FeatureDPP, FeatureIntClamp,
468 FeatureSDWA, FeatureSDWAOmod, FeatureSDWAScalar, FeatureSDWASdst,
469 FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts,
470 FeatureAddNoCarryInsts, FeatureScalarAtomics, FeatureR128A16
474 class SubtargetFeatureISAVersion <int Major, int Minor, int Stepping,
475 list<SubtargetFeature> Implies>
477 "isaver"#Major#"."#Minor#"."#Stepping,
479 "ISAVersion"#Major#"_"#Minor#"_"#Stepping,
480 "Instruction set version number",
484 def FeatureISAVersion6_0_0 : SubtargetFeatureISAVersion <6,0,0,
485 [FeatureSouthernIslands,
488 FeatureLDSBankCount32,
489 FeatureCodeObjectV3]>;
491 def FeatureISAVersion6_0_1 : SubtargetFeatureISAVersion <6,0,1,
492 [FeatureSouthernIslands,
493 FeatureLDSBankCount32,
494 FeatureCodeObjectV3]>;
496 def FeatureISAVersion7_0_0 : SubtargetFeatureISAVersion <7,0,0,
498 FeatureLDSBankCount32,
499 FeatureCodeObjectV3]>;
501 def FeatureISAVersion7_0_1 : SubtargetFeatureISAVersion <7,0,1,
504 FeatureLDSBankCount32,
506 FeatureCodeObjectV3]>;
508 def FeatureISAVersion7_0_2 : SubtargetFeatureISAVersion <7,0,2,
510 FeatureLDSBankCount16,
512 FeatureCodeObjectV3]>;
514 def FeatureISAVersion7_0_3 : SubtargetFeatureISAVersion <7,0,3,
516 FeatureLDSBankCount16,
517 FeatureCodeObjectV3]>;
519 def FeatureISAVersion7_0_4 : SubtargetFeatureISAVersion <7,0,4,
521 FeatureLDSBankCount32,
522 FeatureCodeObjectV3]>;
524 def FeatureISAVersion8_0_1 : SubtargetFeatureISAVersion <8,0,1,
525 [FeatureVolcanicIslands,
528 FeatureLDSBankCount32,
530 FeatureUnpackedD16VMem,
531 FeatureCodeObjectV3]>;
533 def FeatureISAVersion8_0_2 : SubtargetFeatureISAVersion <8,0,2,
534 [FeatureVolcanicIslands,
535 FeatureLDSBankCount32,
537 FeatureUnpackedD16VMem,
538 FeatureCodeObjectV3]>;
540 def FeatureISAVersion8_0_3 : SubtargetFeatureISAVersion <8,0,3,
541 [FeatureVolcanicIslands,
542 FeatureLDSBankCount32,
543 FeatureUnpackedD16VMem,
544 FeatureCodeObjectV3]>;
546 def FeatureISAVersion8_1_0 : SubtargetFeatureISAVersion <8,1,0,
547 [FeatureVolcanicIslands,
548 FeatureLDSBankCount16,
550 FeatureCodeObjectV3]>;
552 def FeatureISAVersion9_0_0 : SubtargetFeatureISAVersion <9,0,0,
555 FeatureLDSBankCount32,
556 FeatureCodeObjectV3]>;
558 def FeatureISAVersion9_0_2 : SubtargetFeatureISAVersion <9,0,2,
561 FeatureLDSBankCount32,
563 FeatureCodeObjectV3]>;
565 def FeatureISAVersion9_0_4 : SubtargetFeatureISAVersion <9,0,4,
567 FeatureLDSBankCount32,
569 FeatureCodeObjectV3]>;
571 def FeatureISAVersion9_0_6 : SubtargetFeatureISAVersion <9,0,6,
575 FeatureLDSBankCount32,
579 FeatureCodeObjectV3]>;
581 def FeatureISAVersion9_0_9 : SubtargetFeatureISAVersion <9,0,9,
584 FeatureLDSBankCount32,
586 FeatureCodeObjectV3]>;
588 //===----------------------------------------------------------------------===//
589 // Debugger related subtarget features.
590 //===----------------------------------------------------------------------===//
592 def FeatureDebuggerInsertNops : SubtargetFeature<
593 "amdgpu-debugger-insert-nops",
594 "DebuggerInsertNops",
596 "Insert one nop instruction for each high level source statement"
599 def FeatureDebuggerEmitPrologue : SubtargetFeature<
600 "amdgpu-debugger-emit-prologue",
601 "DebuggerEmitPrologue",
603 "Emit debugger prologue"
606 //===----------------------------------------------------------------------===//
608 def AMDGPUInstrInfo : InstrInfo {
609 let guessInstructionProperties = 1;
610 let noNamedPositionallyEncodedOperands = 1;
613 def AMDGPUAsmParser : AsmParser {
614 // Some of the R600 registers have the same name, so this crashes.
615 // For example T0_XYZW and T0_XY both have the asm name T0.
616 let ShouldEmitMatchRegisterName = 0;
619 def AMDGPUAsmWriter : AsmWriter {
620 int PassSubtarget = 1;
623 def AMDGPUAsmVariants {
624 string Default = "Default";
626 string VOP3 = "VOP3";
628 string SDWA = "SDWA";
630 string SDWA9 = "SDWA9";
634 string Disable = "Disable";
638 def DefaultAMDGPUAsmParserVariant : AsmParserVariant {
639 let Variant = AMDGPUAsmVariants.Default_ID;
640 let Name = AMDGPUAsmVariants.Default;
643 def VOP3AsmParserVariant : AsmParserVariant {
644 let Variant = AMDGPUAsmVariants.VOP3_ID;
645 let Name = AMDGPUAsmVariants.VOP3;
648 def SDWAAsmParserVariant : AsmParserVariant {
649 let Variant = AMDGPUAsmVariants.SDWA_ID;
650 let Name = AMDGPUAsmVariants.SDWA;
653 def SDWA9AsmParserVariant : AsmParserVariant {
654 let Variant = AMDGPUAsmVariants.SDWA9_ID;
655 let Name = AMDGPUAsmVariants.SDWA9;
659 def DPPAsmParserVariant : AsmParserVariant {
660 let Variant = AMDGPUAsmVariants.DPP_ID;
661 let Name = AMDGPUAsmVariants.DPP;
664 def AMDGPU : Target {
665 // Pull in Instruction Info:
666 let InstructionSet = AMDGPUInstrInfo;
667 let AssemblyParsers = [AMDGPUAsmParser];
668 let AssemblyParserVariants = [DefaultAMDGPUAsmParserVariant,
669 VOP3AsmParserVariant,
670 SDWAAsmParserVariant,
671 SDWA9AsmParserVariant,
672 DPPAsmParserVariant];
673 let AssemblyWriters = [AMDGPUAsmWriter];
674 let AllowRegisterRenaming = 1;
677 // Dummy Instruction itineraries for pseudo instructions
678 def ALU_NULL : FuncUnit;
679 def NullALU : InstrItinClass;
681 //===----------------------------------------------------------------------===//
682 // Predicate helper class
683 //===----------------------------------------------------------------------===//
685 def isSICI : Predicate<
686 "Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS ||"
687 "Subtarget->getGeneration() == AMDGPUSubtarget::SEA_ISLANDS"
688 >, AssemblerPredicate<"!FeatureGCN3Encoding">;
690 def isVI : Predicate <
691 "Subtarget->getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS">,
692 AssemblerPredicate<"FeatureGCN3Encoding">;
694 def isGFX9 : Predicate <
695 "Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">,
696 AssemblerPredicate<"FeatureGFX9Insts">;
698 // TODO: Either the name to be changed or we simply use IsCI!
699 def isCIVI : Predicate <
700 "Subtarget->getGeneration() >= AMDGPUSubtarget::SEA_ISLANDS">,
701 AssemblerPredicate<"FeatureCIInsts">;
703 def HasFlatAddressSpace : Predicate<"Subtarget->hasFlatAddressSpace()">,
704 AssemblerPredicate<"FeatureFlatAddressSpace">;
706 def HasFlatGlobalInsts : Predicate<"Subtarget->hasFlatGlobalInsts()">,
707 AssemblerPredicate<"FeatureFlatGlobalInsts">;
708 def HasFlatScratchInsts : Predicate<"Subtarget->hasFlatScratchInsts()">,
709 AssemblerPredicate<"FeatureFlatScratchInsts">;
710 def HasD16LoadStore : Predicate<"Subtarget->hasD16LoadStore()">,
711 AssemblerPredicate<"FeatureGFX9Insts">;
713 def HasUnpackedD16VMem : Predicate<"Subtarget->hasUnpackedD16VMem()">,
714 AssemblerPredicate<"FeatureUnpackedD16VMem">;
715 def HasPackedD16VMem : Predicate<"!Subtarget->hasUnpackedD16VMem()">,
716 AssemblerPredicate<"!FeatureUnpackedD16VMem">;
718 def D16PreservesUnusedBits :
719 Predicate<"Subtarget->hasD16LoadStore() && !Subtarget->isSRAMECCEnabled()">,
720 AssemblerPredicate<"FeatureGFX9Insts,!FeatureSRAMECC">;
722 def LDSRequiresM0Init : Predicate<"Subtarget->ldsRequiresM0Init()">;
723 def NotLDSRequiresM0Init : Predicate<"!Subtarget->ldsRequiresM0Init()">;
725 def HasDSAddTid : Predicate<"Subtarget->getGeneration() >= AMDGPUSubtarget::GFX9">,
726 AssemblerPredicate<"FeatureGFX9Insts">;
728 def HasAddNoCarryInsts : Predicate<"Subtarget->hasAddNoCarry()">,
729 AssemblerPredicate<"FeatureAddNoCarryInsts">;
731 def NotHasAddNoCarryInsts : Predicate<"!Subtarget->hasAddNoCarry()">,
732 AssemblerPredicate<"!FeatureAddNoCarryInsts">;
734 def Has16BitInsts : Predicate<"Subtarget->has16BitInsts()">,
735 AssemblerPredicate<"Feature16BitInsts">;
736 def HasVOP3PInsts : Predicate<"Subtarget->hasVOP3PInsts()">,
737 AssemblerPredicate<"FeatureVOP3P">;
739 def NotHasVOP3PInsts : Predicate<"!Subtarget->hasVOP3PInsts()">,
740 AssemblerPredicate<"!FeatureVOP3P">;
742 def HasSDWA : Predicate<"Subtarget->hasSDWA()">,
743 AssemblerPredicate<"FeatureSDWA,FeatureVolcanicIslands">;
745 def HasSDWA9 : Predicate<"Subtarget->hasSDWA()">,
746 AssemblerPredicate<"FeatureSDWA,FeatureGFX9">;
748 def HasDPP : Predicate<"Subtarget->hasDPP()">,
749 AssemblerPredicate<"FeatureDPP">;
751 def HasR128A16 : Predicate<"Subtarget->hasR128A16()">,
752 AssemblerPredicate<"FeatureR128A16">;
754 def HasIntClamp : Predicate<"Subtarget->hasIntClamp()">,
755 AssemblerPredicate<"FeatureIntClamp">;
757 def HasMadMixInsts : Predicate<"Subtarget->hasMadMixInsts()">,
758 AssemblerPredicate<"FeatureMadMixInsts">;
760 def HasScalarAtomics : Predicate<"Subtarget->hasScalarAtomics()">,
761 AssemblerPredicate<"FeatureScalarAtomics">;
763 def has16BankLDS : Predicate<"Subtarget->getLDSBankCount() == 16">;
764 def has32BankLDS : Predicate<"Subtarget->getLDSBankCount() == 32">;
765 def HasVGPRIndexMode : Predicate<"Subtarget->hasVGPRIndexMode()">,
766 AssemblerPredicate<"FeatureVGPRIndexMode">;
767 def HasMovrel : Predicate<"Subtarget->hasMovrel()">,
768 AssemblerPredicate<"FeatureMovrel">;
770 def HasFmaMixInsts : Predicate<"Subtarget->hasFmaMixInsts()">,
771 AssemblerPredicate<"FeatureFmaMixInsts">;
773 def HasDLInsts : Predicate<"Subtarget->hasDLInsts()">,
774 AssemblerPredicate<"FeatureDLInsts">;
776 def HasDotInsts : Predicate<"Subtarget->hasDotInsts()">,
777 AssemblerPredicate<"FeatureDotInsts">;
780 def EnableLateCFGStructurize : Predicate<
781 "EnableLateStructurizeCFG">;
783 // Include AMDGPU TD files
784 include "SISchedule.td"
785 include "GCNProcessors.td"
786 include "AMDGPUInstrInfo.td"
787 include "SIIntrinsics.td"
788 include "AMDGPURegisterInfo.td"
789 include "AMDGPURegisterBanks.td"
790 include "AMDGPUInstructions.td"
791 include "SIInstrInfo.td"
792 include "AMDGPUCallingConv.td"
793 include "AMDGPUSearchableTables.td"