https://github.com/jdenny-ornl updated https://github.com/llvm/llvm-project/pull/102521
>From 6546428805b52f1b6f350193ab08ff027892710f Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" <jdenny.o...@gmail.com> Date: Thu, 8 Aug 2024 15:02:04 -0400 Subject: [PATCH 1/3] [Clang] Add env var for nvptx-arch/amdgpu-arch timeout When working on very busy systems, check-offload frequently fails many tests with this diagnostic: ``` clang: error: cannot determine amdgcn architecture: /tmp/llvm/build/bin/amdgpu-arch: Child timed out: ; consider passing it via '-march' ``` The timeout is 10 seconds. This patch accepts the environment variable `CLANG_TOOL_CHAIN_PROGRAM_WAIT` to increase it. It should be documented somewhere. Any suggestions on where? --- clang/lib/Driver/ToolChain.cpp | 10 +++++++++- clang/lib/Driver/ToolChains/AMDGPU.cpp | 3 ++- clang/lib/Driver/ToolChains/Cuda.cpp | 3 ++- llvm/utils/lit/lit/TestingConfig.py | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 2d50c2cbbc881c..04b281e1bb10cd 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -40,6 +40,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/FileUtilities.h" #include "llvm/Support/Path.h" +#include "llvm/Support/Process.h" #include "llvm/Support/VersionTuple.h" #include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/AArch64TargetParser.h" @@ -105,7 +106,7 @@ ToolChain::ToolChain(const Driver &D, const llvm::Triple &T, llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> ToolChain::executeToolChainProgram(StringRef Executable, - unsigned SecondsToWait) const { + unsigned DefaultSecondsToWait) const { llvm::SmallString<64> OutputFile; llvm::sys::fs::createTemporaryFile("toolchain-program", "txt", OutputFile); llvm::FileRemover OutputRemover(OutputFile.c_str()); @@ -116,6 +117,13 @@ ToolChain::executeToolChainProgram(StringRef Executable, }; std::string ErrorMessage; + int SecondsToWait = DefaultSecondsToWait; + if (std::optional<std::string> Str = + llvm::sys::Process::GetEnv("CLANG_TOOL_CHAIN_PROGRAM_WAIT")) { + int Val = std::atoi(Str->c_str()); + if (Val > 0) + SecondsToWait = Val; + } if (llvm::sys::ExecuteAndWait(Executable, {}, {}, Redirects, SecondsToWait, /*MemoryLimit=*/0, &ErrorMessage)) return llvm::createStringError(std::error_code(), diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index aa8f9197cfabc3..4ed366d21f5c43 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -899,7 +899,8 @@ AMDGPUToolChain::getSystemGPUArchs(const ArgList &Args) const { else Program = GetProgramPath("amdgpu-arch"); - auto StdoutOrErr = executeToolChainProgram(Program, /*SecondsToWait=*/10); + auto StdoutOrErr = executeToolChainProgram(Program, + /*DefaultSecondsToWait=*/10); if (!StdoutOrErr) return StdoutOrErr.takeError(); diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 17c952c808f725..104217eaf5d849 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -804,7 +804,8 @@ NVPTXToolChain::getSystemGPUArchs(const ArgList &Args) const { else Program = GetProgramPath("nvptx-arch"); - auto StdoutOrErr = executeToolChainProgram(Program, /*SecondsToWait=*/10); + auto StdoutOrErr = executeToolChainProgram(Program, + /*DefaultSecondsToWait=*/10); if (!StdoutOrErr) return StdoutOrErr.takeError(); diff --git a/llvm/utils/lit/lit/TestingConfig.py b/llvm/utils/lit/lit/TestingConfig.py index eb9f8de2a7f960..06713429d06b4b 100644 --- a/llvm/utils/lit/lit/TestingConfig.py +++ b/llvm/utils/lit/lit/TestingConfig.py @@ -26,6 +26,7 @@ def fromdefaults(litConfig): "SYSTEMROOT", "TERM", "CLANG", + "CLANG_TOOL_CHAIN_PROGRAM_WAIT", "LLDB", "LD_PRELOAD", "LLVM_SYMBOLIZER_PATH", >From 711cf93741ba618c7ee8051190b18bba938121fa Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" <jdenny.o...@gmail.com> Date: Thu, 8 Aug 2024 16:21:28 -0400 Subject: [PATCH 2/3] Apply reviewer suggestion --- clang/include/clang/Basic/DiagnosticDriverKinds.td | 3 ++- clang/lib/Driver/ToolChain.cpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 3d8240f8357b40..05642f803d07de 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -99,7 +99,8 @@ def warn_drv_amdgpu_cov6: Warning< " use at your own risk">; def err_drv_undetermined_gpu_arch : Error< "cannot determine %0 architecture: %1; consider passing it via " - "'%2'">; + "'%2' or increasing the tool timeout using the environment variable " + "'CLANG_TOOL_CHAIN_PROGRAM_WAIT' (in secs, <=0 is inifinite)">; def warn_drv_multi_gpu_arch : Warning< "multiple %0 architectures are detected: %1; only the first one is used for " "'%2'">, InGroup<MultiGPU>; diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 04b281e1bb10cd..22de2bdeaa29f5 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -123,6 +123,8 @@ ToolChain::executeToolChainProgram(StringRef Executable, int Val = std::atoi(Str->c_str()); if (Val > 0) SecondsToWait = Val; + else if (Val <= 0) + SecondsToWait = 0; // infinite } if (llvm::sys::ExecuteAndWait(Executable, {}, {}, Redirects, SecondsToWait, /*MemoryLimit=*/0, &ErrorMessage)) >From 6ec00ff8e8ca2d4a3f7267f3189ee190e211ca05 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" <jdenny.o...@gmail.com> Date: Thu, 8 Aug 2024 16:26:24 -0400 Subject: [PATCH 3/3] Update clang/lib/Driver/ToolChain.cpp --- clang/lib/Driver/ToolChain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 22de2bdeaa29f5..c6436fb2ee33b4 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -123,7 +123,7 @@ ToolChain::executeToolChainProgram(StringRef Executable, int Val = std::atoi(Str->c_str()); if (Val > 0) SecondsToWait = Val; - else if (Val <= 0) + else SecondsToWait = 0; // infinite } if (llvm::sys::ExecuteAndWait(Executable, {}, {}, Redirects, SecondsToWait, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits