https://github.com/shiltian created https://github.com/llvm/llvm-project/pull/131379
This is an extension of #131357. Hopefully this would be the last one. >From 59bc234d4a5c343e093417150688a3231a230961 Mon Sep 17 00:00:00 2001 From: Shilei Tian <i...@tianshilei.me> Date: Fri, 14 Mar 2025 15:06:30 -0400 Subject: [PATCH] [NFC][AMDGPU] Replace more direct arch comparison with isAMDGCN() This is an extension of #131357. Hopefully this would be the last one. --- clang/include/clang/Driver/ToolChain.h | 2 +- clang/lib/Basic/Targets/AMDGPU.h | 18 ++++++++---------- clang/lib/Driver/Driver.cpp | 5 ++--- clang/lib/Driver/ToolChains/HIPAMD.cpp | 2 +- clang/lib/Frontend/CompilerInvocation.cpp | 2 +- flang/lib/Frontend/CompilerInvocation.cpp | 2 +- llvm/include/llvm/TargetParser/Triple.h | 4 +--- llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | 3 +-- .../AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 6 +++--- .../lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp | 2 +- 10 files changed, 20 insertions(+), 26 deletions(-) diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index 7d1d8feebf35e..90004c64a694a 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -821,7 +821,7 @@ class ToolChain { return llvm::Triple("nvptx-nvidia-cuda"); if (TT.getArch() == llvm::Triple::nvptx64) return llvm::Triple("nvptx64-nvidia-cuda"); - if (TT.getArch() == llvm::Triple::amdgcn) + if (TT.isAMDGCN()) return llvm::Triple("amdgcn-amd-amdhsa"); } return TT; diff --git a/clang/lib/Basic/Targets/AMDGPU.h b/clang/lib/Basic/Targets/AMDGPU.h index 3d6778fb5a76f..9bee541cfdd5f 100644 --- a/clang/lib/Basic/Targets/AMDGPU.h +++ b/clang/lib/Basic/Targets/AMDGPU.h @@ -52,7 +52,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { std::string TargetID; bool hasFP64() const { - return getTriple().getArch() == llvm::Triple::amdgcn || + return getTriple().isAMDGCN() || !!(GPUFeatures & llvm::AMDGPU::FEATURE_FP64); } @@ -63,11 +63,11 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { /// Has fast fma f64 bool hasFastFMA() const { - return getTriple().getArch() == llvm::Triple::amdgcn; + return getTriple().isAMDGCN(); } bool hasFMAF() const { - return getTriple().getArch() == llvm::Triple::amdgcn || + return getTriple().isAMDGCN() || !!(GPUFeatures & llvm::AMDGPU::FEATURE_FMA); } @@ -76,13 +76,11 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { } bool hasLDEXPF() const { - return getTriple().getArch() == llvm::Triple::amdgcn || + return getTriple().isAMDGCN() || !!(GPUFeatures & llvm::AMDGPU::FEATURE_LDEXP); } - static bool isAMDGCN(const llvm::Triple &TT) { - return TT.getArch() == llvm::Triple::amdgcn; - } + static bool isAMDGCN(const llvm::Triple &TT) { return TT.isAMDGCN(); } static bool isR600(const llvm::Triple &TT) { return TT.getArch() == llvm::Triple::r600; @@ -125,7 +123,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { } uint64_t getMaxPointerWidth() const override { - return getTriple().getArch() == llvm::Triple::amdgcn ? 64 : 32; + return getTriple().isAMDGCN() ? 64 : 32; } bool hasBFloat16Type() const override { return isAMDGCN(getTriple()); } @@ -269,7 +267,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { } bool isValidCPUName(StringRef Name) const override { - if (getTriple().getArch() == llvm::Triple::amdgcn) + if (getTriple().isAMDGCN()) return llvm::AMDGPU::parseArchAMDGCN(Name) != llvm::AMDGPU::GK_NONE; return llvm::AMDGPU::parseArchR600(Name) != llvm::AMDGPU::GK_NONE; } @@ -277,7 +275,7 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo { void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override; bool setCPU(const std::string &Name) override { - if (getTriple().getArch() == llvm::Triple::amdgcn) { + if (getTriple().isAMDGCN()) { GPUKind = llvm::AMDGPU::parseArchAMDGCN(Name); GPUFeatures = llvm::AMDGPU::getArchAttrAMDGCN(GPUKind); } else { diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 848b27012976d..0ae61fdd0d328 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -158,8 +158,7 @@ getHIPOffloadTargetTriple(const Driver &D, const ArgList &Args) { auto TT = getOffloadTargetTriple(D, Args); if (!TT) return std::nullopt; - if (TT->getArch() == llvm::Triple::amdgcn && - TT->getVendor() == llvm::Triple::AMD && + if (TT->isAMDGCN() && TT->getVendor() == llvm::Triple::AMD && TT->getOS() == llvm::Triple::AMDHSA) return TT; if (TT->getArch() == llvm::Triple::spirv64) @@ -3410,7 +3409,7 @@ class OffloadingActionBuilder final { const ToolChain *HostTC = C.getSingleOffloadToolChain<Action::OFK_Host>(); assert(HostTC && "No toolchain for host compilation."); if (HostTC->getTriple().isNVPTX() || - HostTC->getTriple().getArch() == llvm::Triple::amdgcn) { + HostTC->getTriple().isAMDGCN()) { // We do not support targeting NVPTX/AMDGCN for host compilation. Throw // an error and abort pipeline construction early so we don't trip // asserts that assume device-side compilation. diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index 271626ed54aed..55a8f2ca87de0 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -296,7 +296,7 @@ HIPAMDToolChain::TranslateArgs(const llvm::opt::DerivedArgList &Args, } Tool *HIPAMDToolChain::buildLinker() const { - assert(getTriple().getArch() == llvm::Triple::amdgcn || + assert(getTriple().isAMDGCN() || getTriple().getArch() == llvm::Triple::spirv64); return new tools::AMDGCN::Linker(*this); } diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 4eb743acf327f..8c38acad0c20a 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -4323,7 +4323,7 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, TT.getArch() == llvm::Triple::loongarch64 || TT.getArch() == llvm::Triple::nvptx || TT.getArch() == llvm::Triple::nvptx64 || - TT.getArch() == llvm::Triple::amdgcn || + TT.isAMDGCN() || TT.getArch() == llvm::Triple::x86 || TT.getArch() == llvm::Triple::x86_64)) Diags.Report(diag::err_drv_invalid_omp_target) << A->getValue(i); diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index edf738785fb97..de8a3bfb8b48c 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -1175,7 +1175,7 @@ static bool parseOpenMPArgs(CompilerInvocation &res, llvm::opt::ArgList &args, tt.getArch() == llvm::Triple::systemz || tt.getArch() == llvm::Triple::nvptx || tt.getArch() == llvm::Triple::nvptx64 || - tt.getArch() == llvm::Triple::amdgcn || + tt.isAMDGCN() || tt.getArch() == llvm::Triple::x86 || tt.getArch() == llvm::Triple::x86_64)) diags.Report(clang::diag::err_drv_invalid_omp_target) diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 390ed7fbab8c0..da5b05632f2ec 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -888,9 +888,7 @@ class Triple { /// Tests whether the target is AMDGCN bool isAMDGCN() const { return getArch() == Triple::amdgcn; } - bool isAMDGPU() const { - return getArch() == Triple::r600 || getArch() == Triple::amdgcn; - } + bool isAMDGPU() const { return getArch() == Triple::r600 || isAMDGCN(); } /// Tests whether the target is Thumb (little and big endian). bool isThumb() const { diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp index 746e9e4f65099..5e4ac35224a7b 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp @@ -454,8 +454,7 @@ void AMDGPUDAGToDAGISel::SelectBuildVector(SDNode *N, unsigned RegClassID) { // 1 = Vector Register Class SmallVector<SDValue, 32 * 2 + 1> RegSeqArgs(NumVectorElts * 2 + 1); - bool IsGCN = CurDAG->getSubtarget().getTargetTriple().getArch() == - Triple::amdgcn; + bool IsGCN = CurDAG->getSubtarget().getTargetTriple().isAMDGCN(); RegSeqArgs[0] = CurDAG->getTargetConstant(RegClassID, DL, MVT::i32); bool IsRegSeq = true; unsigned NOps = N->getNumOperands(); diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index 54ed3789326cb..82e310d73b69a 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -5463,7 +5463,7 @@ bool AMDGPUAsmParser::ParseAsAbsoluteExpression(uint32_t &Ret) { } bool AMDGPUAsmParser::ParseDirectiveAMDGCNTarget() { - if (getSTI().getTargetTriple().getArch() != Triple::amdgcn) + if (!getSTI().getTargetTriple().isAMDGCN()) return TokError("directive only supported for amdgcn architecture"); std::string TargetIDDirective; @@ -5550,7 +5550,7 @@ bool AMDGPUAsmParser::calculateGPRBlocks( } bool AMDGPUAsmParser::ParseDirectiveAMDHSAKernel() { - if (getSTI().getTargetTriple().getArch() != Triple::amdgcn) + if (!getSTI().getTargetTriple().isAMDGCN()) return TokError("directive only supported for amdgcn architecture"); if (!isHsaAbi(getSTI())) @@ -6142,7 +6142,7 @@ bool AMDGPUAsmParser::ParseDirectiveAMDGPUHsaKernel() { } bool AMDGPUAsmParser::ParseDirectiveISAVersion() { - if (getSTI().getTargetTriple().getArch() != Triple::amdgcn) { + if (!getSTI().getTargetTriple().isAMDGCN()) { return Error(getLoc(), ".amd_amdgpu_isa directive is not available on non-amdgcn " "architectures"); diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp index ac6b07bad3e35..cf3413d1f8bfb 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp @@ -1004,7 +1004,7 @@ unsigned getEUsPerCU(const MCSubtargetInfo *STI) { unsigned getMaxWorkGroupsPerCU(const MCSubtargetInfo *STI, unsigned FlatWorkGroupSize) { assert(FlatWorkGroupSize != 0); - if (STI->getTargetTriple().getArch() != Triple::amdgcn) + if (!STI->getTargetTriple().isAMDGCN()) return 8; unsigned MaxWaves = getMaxWavesPerEU(STI) * getEUsPerCU(STI); unsigned N = getWavesPerWorkGroup(STI, FlatWorkGroupSize); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits