https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/216674
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) >From 8861fc68bbaafb0dd39c6c4ef60ce97ce5613c86 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Wed, 29 Jul 2026 08:07:59 +0200 Subject: [PATCH] clang/AMDGPU: Use feature bitset instead of ArchAttr 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) --- clang/lib/Basic/Targets/AMDGPU.cpp | 8 ++++++-- clang/lib/Basic/Targets/AMDGPU.h | 6 ++++-- clang/lib/Driver/ToolChains/AMDGPU.cpp | 20 +++++++++++--------- clang/lib/Driver/ToolChains/CommonArgs.cpp | 4 ++-- llvm/lib/Target/AMDGPU/AMDGPU.td | 3 ++- 5 files changed, 25 insertions(+), 16 deletions(-) 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 ]; } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
