https://github.com/sarnex updated https://github.com/llvm/llvm-project/pull/126956
>From 967dec47f3d369effa0defdc0d39547a173aca67 Mon Sep 17 00:00:00 2001 From: "Sarnie, Nick" <nick.sar...@intel.com> Date: Wed, 12 Feb 2025 11:03:34 -0800 Subject: [PATCH 1/3] [LLVM][Triple][NFCI] Add function to test for GPU offloading triples Signed-off-by: Sarnie, Nick <nick.sar...@intel.com> --- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 7 +++---- clang/lib/CodeGen/CodeGenModule.cpp | 2 +- clang/lib/CodeGen/CodeGenModule.h | 3 +-- clang/lib/Driver/Driver.cpp | 7 +++---- clang/lib/Driver/ToolChains/Clang.cpp | 6 ++---- clang/lib/Driver/ToolChains/CommonArgs.cpp | 4 ++-- clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 2 +- llvm/include/llvm/TargetParser/Triple.h | 5 +++++ llvm/include/llvm/Transforms/IPO/Attributor.h | 4 +--- llvm/lib/Transforms/IPO/Attributor.cpp | 4 ++-- .../Transforms/Instrumentation/SanitizerBinaryMetadata.cpp | 2 +- 11 files changed, 22 insertions(+), 24 deletions(-) diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index b679d63874b3b..32cba453b3d10 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -2624,9 +2624,8 @@ void CGOpenMPRuntime::emitDistributeStaticInit( emitUpdateLocation(CGF, Loc, OMP_IDENT_WORK_DISTRIBUTE); llvm::Value *ThreadId = getThreadID(CGF, Loc); llvm::FunctionCallee StaticInitFunction; - bool isGPUDistribute = - CGM.getLangOpts().OpenMPIsTargetDevice && - (CGM.getTriple().isAMDGCN() || CGM.getTriple().isNVPTX()); + bool isGPUDistribute = CGM.getLangOpts().OpenMPIsTargetDevice && + CGM.getTriple().isOffloadingTargetGPU(); StaticInitFunction = OMPBuilder.createForStaticInitFunction( Values.IVSize, Values.IVSigned, isGPUDistribute); @@ -2656,7 +2655,7 @@ void CGOpenMPRuntime::emitForStaticFinish(CodeGenFunction &CGF, auto DL = ApplyDebugLocation::CreateDefaultArtificial(CGF, Loc); if (isOpenMPDistributeDirective(DKind) && CGM.getLangOpts().OpenMPIsTargetDevice && - (CGM.getTriple().isAMDGCN() || CGM.getTriple().isNVPTX())) + CGM.getTriple().isOffloadingTargetGPU()) CGF.EmitRuntimeCall( OMPBuilder.getOrCreateRuntimeFunction( CGM.getModule(), OMPRTL___kmpc_distribute_static_fini), diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 7924c32fcf633..99c8f6e547e87 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -842,7 +842,7 @@ static void setVisibilityFromDLLStorageClass(const clang::LangOptions &LO, static bool isStackProtectorOn(const LangOptions &LangOpts, const llvm::Triple &Triple, clang::LangOptions::StackProtectorMode Mode) { - if (Triple.isAMDGPU() || Triple.isNVPTX()) + if (Triple.isOffloadingTargetGPU()) return false; return LangOpts.getStackProtector() == Mode; } diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index c6f6fd5b9a7bd..f197c420f6d44 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -1067,8 +1067,7 @@ class CodeGenModule : public CodeGenTypeCache { bool shouldEmitRTTI(bool ForEH = false) { return (ForEH || getLangOpts().RTTI) && !getLangOpts().CUDAIsDevice && !(getLangOpts().OpenMP && getLangOpts().OpenMPIsTargetDevice && - (getTriple().isNVPTX() || getTriple().isAMDGPU() || - getTriple().isSPIRV())); + getTriple().isOffloadingTargetGPU()); } /// Get the address of the RTTI descriptor for the given type. diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 50941d2aaa429..b1847322add16 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -3351,10 +3351,9 @@ 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) { - // We do not support targeting NVPTX/AMDGCN for host compilation. Throw - // an error and abort pipeline construction early so we don't trip + if (HostTC->getTriple().isOffloadingTargetGPU()) { + // We do not support targeting offloading GPUs for host compilation. + // Throw an error and abort pipeline construction early so we don't trip // asserts that assume device-side compilation. C.getDriver().Diag(diag::err_drv_cuda_host_arch) << HostTC->getTriple().getArchName(); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 5deafa2ad0f4a..b25a15338d9ca 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1133,8 +1133,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, if (JA.isDeviceOffloading(Action::OFK_OpenMP) && !Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nogpuinc) && - (getToolChain().getTriple().isNVPTX() || - getToolChain().getTriple().isAMDGCN())) { + getToolChain().getTriple().isOffloadingTargetGPU()) { if (!Args.hasArg(options::OPT_nobuiltininc)) { // Add openmp_wrappers/* to our system include path. This lets us wrap // standard library headers. @@ -1321,8 +1320,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, // Without an offloading language we will include these headers directly. // Offloading languages will instead only use the declarations stored in // the resource directory at clang/lib/Headers/llvm_libc_wrappers. - if ((getToolChain().getTriple().isNVPTX() || - getToolChain().getTriple().isAMDGCN()) && + if (getToolChain().getTriple().isOffloadingTargetGPU() && C.getActiveOffloadKinds() == Action::OFK_None) { SmallString<128> P(llvm::sys::path::parent_path(D.Dir)); llvm::sys::path::append(P, "include"); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 9a4d3f55c911c..b73cd86579e20 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -2973,8 +2973,8 @@ void tools::addMCModel(const Driver &D, const llvm::opt::ArgList &Args, } else if (Triple.getArch() == llvm::Triple::x86_64) { Ok = llvm::is_contained({"small", "kernel", "medium", "large", "tiny"}, CM); - } else if (Triple.isNVPTX() || Triple.isAMDGPU() || Triple.isSPIRV()) { - // NVPTX/AMDGPU/SPIRV does not care about the code model and will accept + } else if (Triple.isOffloadingTargetGPU()) { + // Offloading GPU targets do not care about the code model and will accept // whatever works for the host. Ok = true; } else if (Triple.isSPARC64()) { diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index aa43b2f5f2a1b..99e2c99759a94 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -512,7 +512,7 @@ Expected<StringRef> clang(ArrayRef<StringRef> InputFiles, const ArgList &Args) { CmdArgs.push_back(InputFile); // If this is CPU offloading we copy the input libraries. - if (!Triple.isAMDGPU() && !Triple.isNVPTX() && !Triple.isSPIRV()) { + if (!Triple.isOffloadingTargetGPU()) { CmdArgs.push_back("-Wl,-Bsymbolic"); CmdArgs.push_back("-shared"); ArgStringList LinkerArgs; diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 09c0d223d9b4d..0885d2a44245a 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -1109,6 +1109,11 @@ class Triple { Env == llvm::Triple::EABIHF; } + /// Tests if the target represents a GPU which can be offloaded to. + bool isOffloadingTargetGPU() const { + return isAMDGPU() || isNVPTX() || isSPIRV(); + } + /// Tests whether the target supports comdat bool supportsCOMDAT() const { return !(isOSBinFormatMachO() || isOSBinFormatXCOFF() || diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h index 995ee54a73ce4..5c2c707e24a14 100644 --- a/llvm/include/llvm/Transforms/IPO/Attributor.h +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h @@ -1338,9 +1338,7 @@ struct InformationCache { bool stackIsAccessibleByOtherThreads() { return !targetIsGPU(); } /// Return true if the target is a GPU. - bool targetIsGPU() { - return TargetTriple.isAMDGPU() || TargetTriple.isNVPTX(); - } + bool targetIsGPU() { return TargetTriple.isOffloadingTargetGPU(); } /// Return all functions that might be called indirectly, only valid for /// closed world modules (see isClosedWorldModule). diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index a1e1a51b201b0..ba9148d2aedc7 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -199,7 +199,7 @@ ChangeStatus &llvm::operator&=(ChangeStatus &L, ChangeStatus R) { bool AA::isGPU(const Module &M) { Triple T(M.getTargetTriple()); - return T.isAMDGPU() || T.isNVPTX(); + return T.isOffloadingTargetGPU(); } bool AA::isNoSyncInst(Attributor &A, const Instruction &I, @@ -3296,7 +3296,7 @@ InformationCache::getIndirectlyCallableFunctions(Attributor &A) const { } std::optional<unsigned> InformationCache::getFlatAddressSpace() const { - if (TargetTriple.isAMDGPU() || TargetTriple.isNVPTX()) + if (TargetTriple.isOffloadingTargetGPU()) return 0; return std::nullopt; } diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp index 1759b95ddbc30..85cfff005cb53 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp @@ -133,7 +133,7 @@ class SanitizerBinaryMetadata { VersionStr(utostr(getVersion())), IRB(M.getContext()) { // FIXME: Make it work with other formats. assert(TargetTriple.isOSBinFormatELF() && "ELF only"); - assert(!(TargetTriple.isNVPTX() || TargetTriple.isAMDGPU()) && + assert(!(TargetTriple.isOffloadingTargetGPU()) && "Device targets are not supported"); } >From e42fbd4f9c1c0f07197e49a204c3b81992586fa9 Mon Sep 17 00:00:00 2001 From: "Sarnie, Nick" <nick.sar...@intel.com> Date: Thu, 13 Feb 2025 07:15:33 -0800 Subject: [PATCH 2/3] rename function Signed-off-by: Sarnie, Nick <nick.sar...@intel.com> --- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 4 ++-- clang/lib/CodeGen/CodeGenModule.cpp | 2 +- clang/lib/CodeGen/CodeGenModule.h | 2 +- clang/lib/Driver/Driver.cpp | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 4 ++-- clang/lib/Driver/ToolChains/CommonArgs.cpp | 2 +- clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp | 2 +- llvm/include/llvm/TargetParser/Triple.h | 2 +- llvm/include/llvm/Transforms/IPO/Attributor.h | 2 +- llvm/lib/Transforms/IPO/Attributor.cpp | 4 ++-- .../Transforms/Instrumentation/SanitizerBinaryMetadata.cpp | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 32cba453b3d10..246b1981652a6 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -2625,7 +2625,7 @@ void CGOpenMPRuntime::emitDistributeStaticInit( llvm::Value *ThreadId = getThreadID(CGF, Loc); llvm::FunctionCallee StaticInitFunction; bool isGPUDistribute = CGM.getLangOpts().OpenMPIsTargetDevice && - CGM.getTriple().isOffloadingTargetGPU(); + CGM.getTriple().isOffloadingTarget(); StaticInitFunction = OMPBuilder.createForStaticInitFunction( Values.IVSize, Values.IVSigned, isGPUDistribute); @@ -2655,7 +2655,7 @@ void CGOpenMPRuntime::emitForStaticFinish(CodeGenFunction &CGF, auto DL = ApplyDebugLocation::CreateDefaultArtificial(CGF, Loc); if (isOpenMPDistributeDirective(DKind) && CGM.getLangOpts().OpenMPIsTargetDevice && - CGM.getTriple().isOffloadingTargetGPU()) + CGM.getTriple().isOffloadingTarget()) CGF.EmitRuntimeCall( OMPBuilder.getOrCreateRuntimeFunction( CGM.getModule(), OMPRTL___kmpc_distribute_static_fini), diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 99c8f6e547e87..53529726a2ac9 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -842,7 +842,7 @@ static void setVisibilityFromDLLStorageClass(const clang::LangOptions &LO, static bool isStackProtectorOn(const LangOptions &LangOpts, const llvm::Triple &Triple, clang::LangOptions::StackProtectorMode Mode) { - if (Triple.isOffloadingTargetGPU()) + if (Triple.isOffloadingTarget()) return false; return LangOpts.getStackProtector() == Mode; } diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index f197c420f6d44..ec26a1bfa6011 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -1067,7 +1067,7 @@ class CodeGenModule : public CodeGenTypeCache { bool shouldEmitRTTI(bool ForEH = false) { return (ForEH || getLangOpts().RTTI) && !getLangOpts().CUDAIsDevice && !(getLangOpts().OpenMP && getLangOpts().OpenMPIsTargetDevice && - getTriple().isOffloadingTargetGPU()); + getTriple().isOffloadingTarget()); } /// Get the address of the RTTI descriptor for the given type. diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index b1847322add16..3014e7f77e43e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -3351,7 +3351,7 @@ class OffloadingActionBuilder final { const ToolChain *HostTC = C.getSingleOffloadToolChain<Action::OFK_Host>(); assert(HostTC && "No toolchain for host compilation."); - if (HostTC->getTriple().isOffloadingTargetGPU()) { + if (HostTC->getTriple().isOffloadingTarget()) { // We do not support targeting offloading GPUs 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/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index b25a15338d9ca..8642ca9e8ebfd 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1133,7 +1133,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, if (JA.isDeviceOffloading(Action::OFK_OpenMP) && !Args.hasArg(options::OPT_nostdinc) && !Args.hasArg(options::OPT_nogpuinc) && - getToolChain().getTriple().isOffloadingTargetGPU()) { + getToolChain().getTriple().isOffloadingTarget()) { if (!Args.hasArg(options::OPT_nobuiltininc)) { // Add openmp_wrappers/* to our system include path. This lets us wrap // standard library headers. @@ -1320,7 +1320,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, // Without an offloading language we will include these headers directly. // Offloading languages will instead only use the declarations stored in // the resource directory at clang/lib/Headers/llvm_libc_wrappers. - if (getToolChain().getTriple().isOffloadingTargetGPU() && + if (getToolChain().getTriple().isOffloadingTarget() && C.getActiveOffloadKinds() == Action::OFK_None) { SmallString<128> P(llvm::sys::path::parent_path(D.Dir)); llvm::sys::path::append(P, "include"); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index b73cd86579e20..9d0728bd24438 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -2973,7 +2973,7 @@ void tools::addMCModel(const Driver &D, const llvm::opt::ArgList &Args, } else if (Triple.getArch() == llvm::Triple::x86_64) { Ok = llvm::is_contained({"small", "kernel", "medium", "large", "tiny"}, CM); - } else if (Triple.isOffloadingTargetGPU()) { + } else if (Triple.isOffloadingTarget()) { // Offloading GPU targets do not care about the code model and will accept // whatever works for the host. Ok = true; diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 99e2c99759a94..3dbeb1691568c 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -512,7 +512,7 @@ Expected<StringRef> clang(ArrayRef<StringRef> InputFiles, const ArgList &Args) { CmdArgs.push_back(InputFile); // If this is CPU offloading we copy the input libraries. - if (!Triple.isOffloadingTargetGPU()) { + if (!Triple.isOffloadingTarget()) { CmdArgs.push_back("-Wl,-Bsymbolic"); CmdArgs.push_back("-shared"); ArgStringList LinkerArgs; diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 0885d2a44245a..fcc488046ec70 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -1110,7 +1110,7 @@ class Triple { } /// Tests if the target represents a GPU which can be offloaded to. - bool isOffloadingTargetGPU() const { + bool isOffloadingTarget() const { return isAMDGPU() || isNVPTX() || isSPIRV(); } diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h index 5c2c707e24a14..52e8aa511d5df 100644 --- a/llvm/include/llvm/Transforms/IPO/Attributor.h +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h @@ -1338,7 +1338,7 @@ struct InformationCache { bool stackIsAccessibleByOtherThreads() { return !targetIsGPU(); } /// Return true if the target is a GPU. - bool targetIsGPU() { return TargetTriple.isOffloadingTargetGPU(); } + bool targetIsGPU() { return TargetTriple.isOffloadingTarget(); } /// Return all functions that might be called indirectly, only valid for /// closed world modules (see isClosedWorldModule). diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index ba9148d2aedc7..21efd2727584b 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -199,7 +199,7 @@ ChangeStatus &llvm::operator&=(ChangeStatus &L, ChangeStatus R) { bool AA::isGPU(const Module &M) { Triple T(M.getTargetTriple()); - return T.isOffloadingTargetGPU(); + return T.isOffloadingTarget(); } bool AA::isNoSyncInst(Attributor &A, const Instruction &I, @@ -3296,7 +3296,7 @@ InformationCache::getIndirectlyCallableFunctions(Attributor &A) const { } std::optional<unsigned> InformationCache::getFlatAddressSpace() const { - if (TargetTriple.isOffloadingTargetGPU()) + if (TargetTriple.isOffloadingTarget()) return 0; return std::nullopt; } diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp index 85cfff005cb53..48bc08b2c9d5a 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp @@ -133,7 +133,7 @@ class SanitizerBinaryMetadata { VersionStr(utostr(getVersion())), IRB(M.getContext()) { // FIXME: Make it work with other formats. assert(TargetTriple.isOSBinFormatELF() && "ELF only"); - assert(!(TargetTriple.isOffloadingTargetGPU()) && + assert(!(TargetTriple.isOffloadingTarget()) && "Device targets are not supported"); } >From 59b81959e04f99188cc51a5c372ff652f82535ae Mon Sep 17 00:00:00 2001 From: "Sarnie, Nick" <nick.sar...@intel.com> Date: Thu, 13 Feb 2025 07:16:36 -0800 Subject: [PATCH 3/3] comment Signed-off-by: Sarnie, Nick <nick.sar...@intel.com> --- llvm/include/llvm/TargetParser/Triple.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index fcc488046ec70..e9003cca19403 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -1109,7 +1109,7 @@ class Triple { Env == llvm::Triple::EABIHF; } - /// Tests if the target represents a GPU which can be offloaded to. + /// Tests if the target represents a device which can be offloaded to. bool isOffloadingTarget() const { return isAMDGPU() || isNVPTX() || isSPIRV(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits