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