This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. yaxunl marked 2 inline comments as done. Closed by commit rGe8fd998e6194: [HIP] support --offload-arch=native (authored by yaxunl). Herald added a project: clang.
Changed prior to commit: https://reviews.llvm.org/D139045?vs=482240&id=482463#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D139045/new/ https://reviews.llvm.org/D139045 Files: clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChains/AMDGPU.h Index: clang/lib/Driver/ToolChains/AMDGPU.h =================================================================== --- clang/lib/Driver/ToolChains/AMDGPU.h +++ clang/lib/Driver/ToolChains/AMDGPU.h @@ -107,6 +107,9 @@ llvm::Error getSystemGPUArch(const llvm::opt::ArgList &Args, std::string &GPUArch) const; + llvm::Error detectSystemGPUs(const llvm::opt::ArgList &Args, + SmallVector<std::string, 1> &GPUArchs) const; + protected: /// Check and diagnose invalid target ID specified by -mcpu. virtual void checkTargetID(const llvm::opt::ArgList &DriverArgs) const; @@ -126,8 +129,6 @@ /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; - llvm::Error detectSystemGPUs(const llvm::opt::ArgList &Args, - SmallVector<std::string, 1> &GPUArchs) const; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -3067,6 +3067,17 @@ if (A->getOption().matches(options::OPT_no_offload_arch_EQ) && ArchStr == "all") { GpuArchs.clear(); + } else if (ArchStr == "native" && + ToolChains.front()->getTriple().isAMDGPU()) { + auto *TC = static_cast<const toolchains::HIPAMDToolChain *>( + ToolChains.front()); + SmallVector<std::string, 1> GPUs; + auto Err = TC->detectSystemGPUs(Args, GPUs); + if (!Err) { + for (auto GPU : GPUs) + GpuArchs.insert(Args.MakeArgString(GPU)); + } else + llvm::consumeError(std::move(Err)); } else { ArchStr = getCanonicalOffloadArch(ArchStr); if (ArchStr.empty()) {
Index: clang/lib/Driver/ToolChains/AMDGPU.h =================================================================== --- clang/lib/Driver/ToolChains/AMDGPU.h +++ clang/lib/Driver/ToolChains/AMDGPU.h @@ -107,6 +107,9 @@ llvm::Error getSystemGPUArch(const llvm::opt::ArgList &Args, std::string &GPUArch) const; + llvm::Error detectSystemGPUs(const llvm::opt::ArgList &Args, + SmallVector<std::string, 1> &GPUArchs) const; + protected: /// Check and diagnose invalid target ID specified by -mcpu. virtual void checkTargetID(const llvm::opt::ArgList &DriverArgs) const; @@ -126,8 +129,6 @@ /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; - llvm::Error detectSystemGPUs(const llvm::opt::ArgList &Args, - SmallVector<std::string, 1> &GPUArchs) const; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -3067,6 +3067,17 @@ if (A->getOption().matches(options::OPT_no_offload_arch_EQ) && ArchStr == "all") { GpuArchs.clear(); + } else if (ArchStr == "native" && + ToolChains.front()->getTriple().isAMDGPU()) { + auto *TC = static_cast<const toolchains::HIPAMDToolChain *>( + ToolChains.front()); + SmallVector<std::string, 1> GPUs; + auto Err = TC->detectSystemGPUs(Args, GPUs); + if (!Err) { + for (auto GPU : GPUs) + GpuArchs.insert(Args.MakeArgString(GPU)); + } else + llvm::consumeError(std::move(Err)); } else { ArchStr = getCanonicalOffloadArch(ArchStr); if (ArchStr.empty()) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits