xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
10b57cec5SDimitry Andric//===-- AMDGPUFeatures.td - AMDGPU Feature Definitions -----*- tablegen -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
90b57cec5SDimitry Andricdef FeatureFP64 : SubtargetFeature<"fp64",
100b57cec5SDimitry Andric  "FP64",
110b57cec5SDimitry Andric  "true",
120b57cec5SDimitry Andric  "Enable double precision operations"
130b57cec5SDimitry Andric>;
140b57cec5SDimitry Andric
150b57cec5SDimitry Andricdef FeatureFMA : SubtargetFeature<"fmaf",
160b57cec5SDimitry Andric  "FMA",
170b57cec5SDimitry Andric  "true",
180b57cec5SDimitry Andric  "Enable single precision FMA (not as fast as mul+add, but fused)"
190b57cec5SDimitry Andric>;
200b57cec5SDimitry Andric
210b57cec5SDimitry Andricclass SubtargetFeatureLocalMemorySize <int Value> : SubtargetFeature<
220b57cec5SDimitry Andric  "localmemorysize"#Value,
230b57cec5SDimitry Andric  "LocalMemorySize",
240b57cec5SDimitry Andric  !cast<string>(Value),
250b57cec5SDimitry Andric  "The size of local memory in bytes"
260b57cec5SDimitry Andric>;
270b57cec5SDimitry Andric
280b57cec5SDimitry Andricdef FeatureLocalMemorySize32768 : SubtargetFeatureLocalMemorySize<32768>;
290b57cec5SDimitry Andricdef FeatureLocalMemorySize65536 : SubtargetFeatureLocalMemorySize<65536>;
300b57cec5SDimitry Andric
31*5ffd83dbSDimitry Andricclass SubtargetFeatureWavefrontSize <int ValueLog2> : SubtargetFeature<
32*5ffd83dbSDimitry Andric  "wavefrontsize"#!shl(1, ValueLog2),
33*5ffd83dbSDimitry Andric  "WavefrontSizeLog2",
34*5ffd83dbSDimitry Andric  !cast<string>(ValueLog2),
350b57cec5SDimitry Andric  "The number of threads per wavefront"
360b57cec5SDimitry Andric>;
370b57cec5SDimitry Andric
38*5ffd83dbSDimitry Andricdef FeatureWavefrontSize16 : SubtargetFeatureWavefrontSize<4>;
39*5ffd83dbSDimitry Andricdef FeatureWavefrontSize32 : SubtargetFeatureWavefrontSize<5>;
40*5ffd83dbSDimitry Andricdef FeatureWavefrontSize64 : SubtargetFeatureWavefrontSize<6>;
410b57cec5SDimitry Andric
420b57cec5SDimitry Andricclass SubtargetFeatureGeneration <string Value, string FeatureName,
430b57cec5SDimitry Andric                                 string Subtarget,
440b57cec5SDimitry Andric                                  list<SubtargetFeature> Implies> :
450b57cec5SDimitry Andric        SubtargetFeature <FeatureName, "Gen", Subtarget#"::"#Value,
460b57cec5SDimitry Andric                          Value#" GPU generation", Implies>;
470b57cec5SDimitry Andric
480b57cec5SDimitry Andricdef FeaturePromoteAlloca : SubtargetFeature <"promote-alloca",
490b57cec5SDimitry Andric  "EnablePromoteAlloca",
500b57cec5SDimitry Andric  "true",
510b57cec5SDimitry Andric  "Enable promote alloca pass"
520b57cec5SDimitry Andric>;
530b57cec5SDimitry Andric
54