[clang] [llvm] clang/AMDGPU: Use feature bitset instead of ArchAttr (PR #216674)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 17 02:50:14 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Convert from the legacy getArchAttrAMDGCN manual bitmask checks to using
the new generated bitset. These are the easy cases. sramecc and xnack
require more supporting work so will be done later.
Co-authored-by: Claude (Claude-Opus-4.8)
---
Full diff: https://github.com/llvm/llvm-project/pull/216674.diff
5 Files Affected:
- (modified) clang/lib/Basic/Targets/AMDGPU.cpp (+6-2)
- (modified) clang/lib/Basic/Targets/AMDGPU.h (+4-2)
- (modified) clang/lib/Driver/ToolChains/AMDGPU.cpp (+11-9)
- (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+2-2)
- (modified) llvm/lib/Target/AMDGPU/AMDGPU.td (+2-1)
``````````diff
diff --git a/clang/lib/Basic/Targets/AMDGPU.cpp b/clang/lib/Basic/Targets/AMDGPU.cpp
index fce626031147e..04e4f4b670994 100644
--- a/clang/lib/Basic/Targets/AMDGPU.cpp
+++ b/clang/lib/Basic/Targets/AMDGPU.cpp
@@ -215,7 +215,10 @@ AMDGPUTargetInfo::AMDGPUTargetInfo(const llvm::Triple &Triple,
// should just be assumed true for the dummy target.
HasFastHalfType = true;
HasFloat16 = true;
- WavefrontSize = (GPUFeatures & llvm::AMDGPU::FEATURE_WAVE32) ? 32 : 64;
+ WavefrontSize = llvm::AMDGPU::getFeatureBitset(GPUKind).test(
+ llvm::AMDGPU::FEAT_SUPPORTS_WAVE32)
+ ? 32
+ : 64;
// Set pointer width and alignment for the generic address space.
PointerWidth = PointerAlign = getPointerWidthV(LangAS::Default);
@@ -229,7 +232,8 @@ AMDGPUTargetInfo::AMDGPUTargetInfo(const llvm::Triple &Triple,
}
MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
- CUMode = !(GPUFeatures & llvm::AMDGPU::FEATURE_WGP);
+ CUMode = !llvm::AMDGPU::getFeatureBitset(GPUKind).test(
+ llvm::AMDGPU::FEAT_SUPPORTS_WGP);
for (auto F : {"image-insts", "gws", "vmem-to-lds-load-insts", "supports-wgp",
"supports-wave32", "xnack-support", "sramecc-support",
diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h
index f8933ebee8ffd..b2d287abfe52c 100644
--- a/clang/lib/Basic/Targets/AMDGPU.h
+++ b/clang/lib/Basic/Targets/AMDGPU.h
@@ -55,7 +55,8 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo {
/// Has fast fma f32
bool hasFastFMAF() const {
return getTriple().isAMDGCN() &&
- !!(GPUFeatures & llvm::AMDGPU::FEATURE_FAST_FMA_F32);
+ llvm::AMDGPU::getFeatureBitset(GPUKind).test(
+ llvm::AMDGPU::FEAT_FAST_FMAF);
}
/// Has fast fma f64
@@ -68,7 +69,8 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo {
bool hasFullRateDenormalsF32() const {
return getTriple().isAMDGCN() &&
- !!(GPUFeatures & llvm::AMDGPU::FEATURE_FAST_DENORMAL_F32);
+ llvm::AMDGPU::getFeatureBitset(GPUKind).test(
+ llvm::AMDGPU::FEAT_FAST_DENORMAL_F32);
}
bool hasLDEXPF() const { return getTriple().isAMDGCN(); }
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 82f9158a69f04..50eacfc2f1baf 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -44,11 +44,12 @@ RocmInstallationDetector::CommonBitcodeLibsPreferences::
: ABIVer(DeviceLibABIVersion::fromCodeObjectVersion(
tools::getAMDGPUCodeObjectVersion(D, DriverArgs))) {
const auto Kind = llvm::AMDGPU::parseArchAMDGCN(GPUArch);
- const unsigned ArchAttr = llvm::AMDGPU::getArchAttrAMDGCN(Kind);
+ const llvm::AMDGPU::AMDGPUFeatureBitset &Features =
+ llvm::AMDGPU::getFeatureBitset(Kind);
IsOpenMP = DeviceOffloadingKind == Action::OFK_OpenMP;
- const bool HasWave32 = (ArchAttr & llvm::AMDGPU::FEATURE_WAVE32);
+ const bool HasWave32 = Features.test(llvm::AMDGPU::FEAT_SUPPORTS_WAVE32);
Wave64 =
!HasWave32 || DriverArgs.hasFlag(options::OPT_mwavefrontsize64,
options::OPT_mno_wavefrontsize64, false);
@@ -61,8 +62,8 @@ RocmInstallationDetector::CommonBitcodeLibsPreferences::
const bool DefaultDAZ =
(Kind == llvm::AMDGPU::GK_NONE)
? false
- : !((ArchAttr & llvm::AMDGPU::FEATURE_FAST_FMA_F32) &&
- (ArchAttr & llvm::AMDGPU::FEATURE_FAST_DENORMAL_F32));
+ : !(Features.test(llvm::AMDGPU::FEAT_FAST_FMAF) &&
+ Features.test(llvm::AMDGPU::FEAT_FAST_DENORMAL_F32));
// TODO: There are way too many flags that change this. Do we need to
// check them all?
DAZ = IsKnownOffloading
@@ -861,13 +862,14 @@ bool AMDGPUToolChain::getDefaultDenormsAreZeroForTarget(
if (Kind == llvm::AMDGPU::GK_NONE)
return false;
- const unsigned ArchAttr = llvm::AMDGPU::getArchAttrAMDGCN(Kind);
+ const llvm::AMDGPU::AMDGPUFeatureBitset &Features =
+ llvm::AMDGPU::getFeatureBitset(Kind);
// Default to enabling f32 denormals by default on subtargets where fma is
// fast with denormals
const bool BothDenormAndFMAFast =
- (ArchAttr & llvm::AMDGPU::FEATURE_FAST_FMA_F32) &&
- (ArchAttr & llvm::AMDGPU::FEATURE_FAST_DENORMAL_F32);
+ Features.test(llvm::AMDGPU::FEAT_FAST_FMAF) &&
+ Features.test(llvm::AMDGPU::FEAT_FAST_DENORMAL_F32);
return !BothDenormAndFMAFast;
}
@@ -909,8 +911,8 @@ llvm::DenormalMode AMDGPUToolChain::getDefaultDenormalModeForType(
bool AMDGPUToolChain::isWave64(const llvm::opt::ArgList &DriverArgs,
llvm::AMDGPU::GPUKind Kind) {
- const unsigned ArchAttr = llvm::AMDGPU::getArchAttrAMDGCN(Kind);
- bool HasWave32 = (ArchAttr & llvm::AMDGPU::FEATURE_WAVE32);
+ bool HasWave32 = llvm::AMDGPU::getFeatureBitset(Kind).test(
+ llvm::AMDGPU::FEAT_SUPPORTS_WAVE32);
return !HasWave32 || DriverArgs.hasFlag(
options::OPT_mwavefrontsize64, options::OPT_mno_wavefrontsize64, false);
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index a76f4aa6ae853..e1c07fb94ea76 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -382,8 +382,8 @@ static bool shouldIgnoreUnsupportedTargetFeature(const Arg &TargetFeatureArg,
if (!T.isAMDGCN())
return false;
llvm::AMDGPU::GPUKind GPUKind = llvm::AMDGPU::parseArchAMDGCN(Processor);
- unsigned GPUFeatures = llvm::AMDGPU::getArchAttrAMDGCN(GPUKind);
- if (GPUFeatures & llvm::AMDGPU::FEATURE_WGP)
+ if (llvm::AMDGPU::getFeatureBitset(GPUKind).test(
+ llvm::AMDGPU::FEAT_SUPPORTS_WGP))
return false;
return TargetFeatureArg.getOption().matches(options::OPT_mno_cumode);
}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
index 213d9fc1393de..4806e1e9901ef 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
@@ -3122,7 +3122,8 @@ def AMDGPUFrontendVisibleFeatures {
FeatureTanhInsts, FeatureTensorCvtLutInsts, FeatureTransposeLoadF4F6Insts,
FeatureVMemToLDSLoad, FeatureVmemPrefInsts, FeatureWMMA128bInsts,
FeatureWMMA256bInsts, FeatureXF32Insts,
- FeatureWavefrontSize32, FeatureWavefrontSize64
+ FeatureWavefrontSize32, FeatureWavefrontSize64, FeatureSupportsWGP,
+ FeatureSupportsWave32, FeatureFastFMAF32, FeatureFastDenormalF32
];
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/216674
More information about the llvm-commits
mailing list