Skip to content

Commit 272ce90

Browse files
authored
[Clang] Make OpenMP offloading consistently use the bound architecture (#125135)
Summary: OpenMP was weirdly split between using the bound architecture from `--offload-arch=` and the old `-march=` option which only worked for single jobs. This patch removes that special handling. The main benefit here is that we can now use `getToolchainArgs` without it throwing an error. I'm assuming SYCL doesn't care about this because they don't use an architecture.
1 parent 0324c70 commit 272ce90

8 files changed

+56
-107
lines changed

clang/lib/Driver/Driver.cpp

+23-22
Original file line numberDiff line numberDiff line change
@@ -4712,23 +4712,7 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args,
47124712
return KnownArchs.lookup(TC);
47134713

47144714
llvm::DenseSet<StringRef> Archs;
4715-
for (auto *Arg : Args) {
4716-
// Extract any '--[no-]offload-arch' arguments intended for this toolchain.
4717-
std::unique_ptr<llvm::opt::Arg> ExtractedArg = nullptr;
4718-
if (Arg->getOption().matches(options::OPT_Xopenmp_target_EQ) &&
4719-
ToolChain::getOpenMPTriple(Arg->getValue(0)) == TC->getTriple()) {
4720-
Arg->claim();
4721-
unsigned Index = Args.getBaseArgs().MakeIndex(Arg->getValue(1));
4722-
unsigned Prev = Index;
4723-
ExtractedArg = getOpts().ParseOneArg(Args, Index);
4724-
if (!ExtractedArg || Index > Prev + 1) {
4725-
TC->getDriver().Diag(diag::err_drv_invalid_Xopenmp_target_with_args)
4726-
<< Arg->getAsString(Args);
4727-
continue;
4728-
}
4729-
Arg = ExtractedArg.get();
4730-
}
4731-
4715+
for (auto *Arg : C.getArgsForToolChain(TC, /*BoundArch=*/"", Kind)) {
47324716
// Add or remove the seen architectures in order of appearance. If an
47334717
// invalid architecture is given we simply exit.
47344718
if (Arg->getOption().matches(options::OPT_offload_arch_EQ)) {
@@ -4785,14 +4769,31 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args,
47854769
return Archs;
47864770

47874771
if (Archs.empty()) {
4788-
if (Kind == Action::OFK_Cuda)
4772+
if (Kind == Action::OFK_Cuda) {
47894773
Archs.insert(OffloadArchToString(OffloadArch::CudaDefault));
4790-
else if (Kind == Action::OFK_HIP)
4774+
} else if (Kind == Action::OFK_HIP) {
47914775
Archs.insert(OffloadArchToString(OffloadArch::HIPDefault));
4792-
else if (Kind == Action::OFK_OpenMP)
4793-
Archs.insert(StringRef());
4794-
else if (Kind == Action::OFK_SYCL)
4776+
} else if (Kind == Action::OFK_SYCL) {
47954777
Archs.insert(StringRef());
4778+
} else if (Kind == Action::OFK_OpenMP) {
4779+
// Accept legacy `-march` device arguments for OpenMP.
4780+
if (auto *Arg = C.getArgsForToolChain(TC, /*BoundArch=*/"", Kind)
4781+
.getLastArg(options::OPT_march_EQ)) {
4782+
Archs.insert(Arg->getValue());
4783+
} else {
4784+
auto ArchsOrErr = TC->getSystemGPUArchs(Args);
4785+
if (!ArchsOrErr) {
4786+
TC->getDriver().Diag(diag::err_drv_undetermined_gpu_arch)
4787+
<< llvm::Triple::getArchTypeName(TC->getArch())
4788+
<< llvm::toString(ArchsOrErr.takeError()) << "--offload-arch";
4789+
} else if (!ArchsOrErr->empty()) {
4790+
for (auto Arch : *ArchsOrErr)
4791+
Archs.insert(Args.MakeArgStringRef(Arch));
4792+
} else {
4793+
Archs.insert(StringRef());
4794+
}
4795+
}
4796+
}
47964797
} else {
47974798
Args.ClaimAllArgs(options::OPT_offload_arch_EQ);
47984799
Args.ClaimAllArgs(options::OPT_no_offload_arch_EQ);

clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp

+2-26
Original file line numberDiff line numberDiff line change
@@ -71,33 +71,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs(
7171

7272
const OptTable &Opts = getDriver().getOpts();
7373

74-
if (DeviceOffloadKind == Action::OFK_OpenMP) {
75-
for (Arg *A : Args)
76-
if (!llvm::is_contained(*DAL, A))
77-
DAL->append(A);
78-
79-
if (!DAL->hasArg(options::OPT_march_EQ)) {
80-
StringRef Arch = BoundArch;
81-
if (Arch.empty()) {
82-
auto ArchsOrErr = getSystemGPUArchs(Args);
83-
if (!ArchsOrErr) {
84-
std::string ErrMsg =
85-
llvm::formatv("{0}", llvm::fmt_consume(ArchsOrErr.takeError()));
86-
getDriver().Diag(diag::err_drv_undetermined_gpu_arch)
87-
<< llvm::Triple::getArchTypeName(getArch()) << ErrMsg << "-march";
88-
Arch = OffloadArchToString(OffloadArch::HIPDefault);
89-
} else {
90-
Arch = Args.MakeArgString(ArchsOrErr->front());
91-
}
92-
}
93-
DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), Arch);
94-
}
95-
96-
return DAL;
97-
}
98-
9974
for (Arg *A : Args) {
100-
DAL->append(A);
75+
if (!llvm::is_contained(*DAL, A))
76+
DAL->append(A);
10177
}
10278

10379
if (!BoundArch.empty()) {

clang/lib/Driver/ToolChains/Cuda.cpp

-28
Original file line numberDiff line numberDiff line change
@@ -969,34 +969,6 @@ CudaToolChain::TranslateArgs(const llvm::opt::DerivedArgList &Args,
969969

970970
const OptTable &Opts = getDriver().getOpts();
971971

972-
// For OpenMP device offloading, append derived arguments. Make sure
973-
// flags are not duplicated.
974-
// Also append the compute capability.
975-
if (DeviceOffloadKind == Action::OFK_OpenMP) {
976-
for (Arg *A : Args)
977-
if (!llvm::is_contained(*DAL, A))
978-
DAL->append(A);
979-
980-
if (!DAL->hasArg(options::OPT_march_EQ)) {
981-
StringRef Arch = BoundArch;
982-
if (Arch.empty()) {
983-
auto ArchsOrErr = getSystemGPUArchs(Args);
984-
if (!ArchsOrErr) {
985-
std::string ErrMsg =
986-
llvm::formatv("{0}", llvm::fmt_consume(ArchsOrErr.takeError()));
987-
getDriver().Diag(diag::err_drv_undetermined_gpu_arch)
988-
<< llvm::Triple::getArchTypeName(getArch()) << ErrMsg << "-march";
989-
Arch = OffloadArchToString(OffloadArch::CudaDefault);
990-
} else {
991-
Arch = Args.MakeArgString(ArchsOrErr->front());
992-
}
993-
}
994-
DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), Arch);
995-
}
996-
997-
return DAL;
998-
}
999-
1000972
for (Arg *A : Args) {
1001973
// Make sure flags are not duplicated.
1002974
if (!llvm::is_contained(*DAL, A)) {

clang/test/Driver/amdgpu-openmp-system-arch-fail.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
// case when amdgpu_arch returns nothing or fails
1313
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib --amdgpu-arch-tool=%t/amdgpu_arch_fail %s 2>&1 \
1414
// RUN: | FileCheck %s --check-prefix=NO-OUTPUT-ERROR
15-
// NO-OUTPUT-ERROR: error: cannot determine amdgcn architecture{{.*}}; consider passing it via '-march'
15+
// NO-OUTPUT-ERROR: error: cannot determine amdgcn architecture{{.*}}; consider passing it via '--offload-arch'
1616

1717
// case when amdgpu_arch does not return anything with successful execution
1818
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib --amdgpu-arch-tool=%t/amdgpu_arch_empty %s 2>&1 \
1919
// RUN: | FileCheck %s --check-prefix=EMPTY-OUTPUT
20-
// EMPTY-OUTPUT: error: cannot determine amdgcn architecture: No AMD GPU detected in the system; consider passing it via '-march'
20+
// EMPTY-OUTPUT: error: cannot determine amdgcn architecture: No AMD GPU detected in the system; consider passing it via '--offload-arch'

clang/test/Driver/amdgpu-openmp-toolchain.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
// CHECK-PHASES: 0: input, "[[INPUT:.+]]", c, (host-openmp)
1717
// CHECK-PHASES: 1: preprocessor, {0}, cpp-output, (host-openmp)
1818
// CHECK-PHASES: 2: compiler, {1}, ir, (host-openmp)
19-
// CHECK-PHASES: 3: input, "[[INPUT]]", c, (device-openmp)
20-
// CHECK-PHASES: 4: preprocessor, {3}, cpp-output, (device-openmp)
21-
// CHECK-PHASES: 5: compiler, {4}, ir, (device-openmp)
22-
// CHECK-PHASES: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (amdgcn-amd-amdhsa)" {5}, ir
23-
// CHECK-PHASES: 7: backend, {6}, ir, (device-openmp)
24-
// CHECK-PHASES: 8: offload, "device-openmp (amdgcn-amd-amdhsa)" {7}, ir
19+
// CHECK-PHASES: 3: input, "[[INPUT]]", c, (device-openmp, gfx906)
20+
// CHECK-PHASES: 4: preprocessor, {3}, cpp-output, (device-openmp, gfx906)
21+
// CHECK-PHASES: 5: compiler, {4}, ir, (device-openmp, gfx906)
22+
// CHECK-PHASES: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (amdgcn-amd-amdhsa:gfx906)" {5}, ir
23+
// CHECK-PHASES: 7: backend, {6}, ir, (device-openmp, gfx906)
24+
// CHECK-PHASES: 8: offload, "device-openmp (amdgcn-amd-amdhsa:gfx906)" {7}, ir
2525
// CHECK-PHASES: 9: clang-offload-packager, {8}, image, (device-openmp)
2626
// CHECK-PHASES: 10: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (x86_64-unknown-linux-gnu)" {9}, ir
2727
// CHECK-PHASES: 11: backend, {10}, assembler, (host-openmp)

clang/test/Driver/openmp-offload-gpu.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,13 @@
235235
// CHECK-PHASES: 0: input, "[[INPUT:.+]]", c, (host-openmp)
236236
// CHECK-PHASES: 1: preprocessor, {0}, cpp-output, (host-openmp)
237237
// CHECK-PHASES: 2: compiler, {1}, ir, (host-openmp)
238-
// CHECK-PHASES: 3: input, "[[INPUT]]", c, (device-openmp)
239-
// CHECK-PHASES: 4: preprocessor, {3}, cpp-output, (device-openmp)
240-
// CHECK-PHASES: 5: compiler, {4}, ir, (device-openmp)
241-
// CHECK-PHASES: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (nvptx64-nvidia-cuda)" {5}, ir
242-
// CHECK-PHASES: 7: backend, {6}, assembler, (device-openmp)
243-
// CHECK-PHASES: 8: assembler, {7}, object, (device-openmp)
244-
// CHECK-PHASES: 9: offload, "device-openmp (nvptx64-nvidia-cuda)" {8}, object
238+
// CHECK-PHASES: 3: input, "[[INPUT]]", c, (device-openmp, sm_52)
239+
// CHECK-PHASES: 4: preprocessor, {3}, cpp-output, (device-openmp, sm_52)
240+
// CHECK-PHASES: 5: compiler, {4}, ir, (device-openmp, sm_52)
241+
// CHECK-PHASES: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (nvptx64-nvidia-cuda:sm_52)" {5}, ir
242+
// CHECK-PHASES: 7: backend, {6}, assembler, (device-openmp, sm_52)
243+
// CHECK-PHASES: 8: assembler, {7}, object, (device-openmp, sm_52)
244+
// CHECK-PHASES: 9: offload, "device-openmp (nvptx64-nvidia-cuda:sm_52)" {8}, object
245245
// CHECK-PHASES: 10: clang-offload-packager, {9}, image
246246
// CHECK-PHASES: 11: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (x86_64-unknown-linux-gnu)" {10}, ir
247247
// CHECK-PHASES: 12: backend, {11}, assembler, (host-openmp)
@@ -315,7 +315,7 @@
315315
// RUN: -Xopenmp-target=nvptx64-nvidia-cuda -march=sm_52 --offload-device-only -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-DEVICE-ONLY
316316
// CHECK-DEVICE-ONLY: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT:.*]]"], output: "[[HOST_BC:.*]]"
317317
// CHECK-DEVICE-ONLY: "nvptx64-nvidia-cuda" - "clang", inputs: ["[[INPUT]]", "[[HOST_BC]]"], output: "[[DEVICE_ASM:.*]]"
318-
// CHECK-DEVICE-ONLY: "nvptx64-nvidia-cuda" - "NVPTX::Assembler", inputs: ["[[DEVICE_ASM]]"], output: "{{.*}}-openmp-nvptx64-nvidia-cuda.o"
318+
// CHECK-DEVICE-ONLY: "nvptx64-nvidia-cuda" - "NVPTX::Assembler", inputs: ["[[DEVICE_ASM]]"], output: "{{.*}}-openmp-nvptx64-nvidia-cuda-sm_52.o"
319319

320320
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-bindings -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda \
321321
// RUN: -Xopenmp-target=nvptx64-nvidia-cuda -march=sm_52 --offload-device-only -E -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-DEVICE-ONLY-PP
+11-11
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
// Check that we enable LTO-mode properly with '-fopenmp-target-jit' and that it
22
// still enabled LTO-mode if `-fno-offload-lto` is on.
33
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-phases -fopenmp=libomp \
4-
// RUN: -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-target-jit %s 2>&1 \
4+
// RUN: --offload-arch=sm_52 -fopenmp-target-jit %s 2>&1 \
55
// RUN: | FileCheck -check-prefix=PHASES-JIT %s
66
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-phases -fopenmp=libomp \
7-
// RUN: -fopenmp-targets=nvptx64-nvidia-cuda -foffload-lto -fopenmp-target-jit %s 2>&1 \
7+
// RUN: --offload-arch=sm_52 -foffload-lto -fopenmp-target-jit %s 2>&1 \
88
// RUN: | FileCheck -check-prefix=PHASES-JIT %s
99
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-phases -fopenmp=libomp \
10-
// RUN: -fopenmp-targets=amdgcn-amd-amdhsa -fopenmp-target-jit %s 2>&1 \
10+
// RUN: --offload-arch=gfx90a -fopenmp-target-jit %s 2>&1 \
1111
// RUN: | FileCheck -check-prefix=PHASES-JIT %s
1212
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-phases -fopenmp=libomp \
13-
// RUN: -fopenmp-targets=amdgcn-amd-amdhsa -foffload-lto -fopenmp-target-jit %s 2>&1 \
13+
// RUN: --offload-arch=gfx90a -foffload-lto -fopenmp-target-jit %s 2>&1 \
1414
// RUN: | FileCheck -check-prefix=PHASES-JIT %s
1515
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -ccc-print-phases -fopenmp=libomp \
16-
// RUN: -fopenmp-targets=amdgcn-amd-amdhsa -fno-offload-lto -fopenmp-target-jit %s 2>&1 \
16+
// RUN: --offload-arch=gfx90a -fno-offload-lto -fopenmp-target-jit %s 2>&1 \
1717
// RUN: | FileCheck -check-prefix=PHASES-JIT %s
1818
//
1919
// PHASES-JIT: 0: input, "[[INPUT:.+]]", c, (host-openmp)
2020
// PHASES-JIT-NEXT: 1: preprocessor, {0}, cpp-output, (host-openmp)
2121
// PHASES-JIT-NEXT: 2: compiler, {1}, ir, (host-openmp)
22-
// PHASES-JIT-NEXT: 3: input, "[[INPUT]]", c, (device-openmp)
23-
// PHASES-JIT-NEXT: 4: preprocessor, {3}, cpp-output, (device-openmp)
24-
// PHASES-JIT-NEXT: 5: compiler, {4}, ir, (device-openmp)
22+
// PHASES-JIT-NEXT: 3: input, "[[INPUT]]", c, (device-openmp, {{.*}})
23+
// PHASES-JIT-NEXT: 4: preprocessor, {3}, cpp-output, (device-openmp, {{.*}})
24+
// PHASES-JIT-NEXT: 5: compiler, {4}, ir, (device-openmp, {{.*}})
2525
// PHASES-JIT-NEXT: 6: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp ([[TARGET:.+]])" {5}, ir
26-
// PHASES-JIT-NEXT: 7: backend, {6}, lto-bc, (device-openmp)
26+
// PHASES-JIT-NEXT: 7: backend, {6}, lto-bc, (device-openmp, {{.*}})
2727
// PHASES-JIT-NEXT: 8: offload, "device-openmp ([[TARGET]])" {7}, lto-bc
2828
// PHASES-JIT-NEXT: 9: clang-offload-packager, {8}, image, (device-openmp)
2929
// PHASES-JIT-NEXT: 10: offload, "host-openmp (x86_64-unknown-linux-gnu)" {2}, "device-openmp (x86_64-unknown-linux-gnu)" {9}, ir
@@ -41,11 +41,11 @@
4141
// Check for incompatible combinations
4242

4343
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp -fno-offload-lto \
44-
// RUN: -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-target-jit %s 2>&1 \
44+
// RUN: --offload-arch=sm_52 -fopenmp-target-jit %s 2>&1 \
4545
// RUN: | FileCheck -check-prefix=NO-LTO %s
4646
// NO-LTO: error: the combination of '-fno-offload-lto' and '-fopenmp-target-jit' is incompatible
4747

4848
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp -foffload-lto=thin \
49-
// RUN: -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-target-jit %s 2>&1 \
49+
// RUN: --offload-arch=sm_52 -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-target-jit %s 2>&1 \
5050
// RUN: | FileCheck -check-prefix=THIN-LTO %s
5151
// THIN-LTO: error: the combination of '-foffload-lto=' and '-fopenmp-target-jit' is incompatible

clang/test/Driver/openmp-system-arch.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -68,26 +68,26 @@
6868
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp \
6969
// RUN: -fopenmp-targets=nvptx64-nvidia-cuda --nvptx-arch-tool=%t/nvptx_arch_empty %s 2>&1 \
7070
// RUN: | FileCheck %s --check-prefix=NVPTX
71-
// NVPTX: error: cannot determine nvptx64 architecture: No NVIDIA GPU detected in the system; consider passing it via '-march'
71+
// NVPTX: error: cannot determine nvptx64 architecture: No NVIDIA GPU detected in the system; consider passing it via '--offload-arch'
7272

7373
// case when 'amdgpu-arch' returns nothing using `-fopenmp-targets=`.
7474
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -fopenmp=libomp \
7575
// RUN: -fopenmp-targets=amdgcn-amd-amdhsa --amdgpu-arch-tool=%t/amdgpu_arch_empty %s 2>&1 \
7676
// RUN: | FileCheck %s --check-prefix=AMDGPU
77-
// AMDGPU: error: cannot determine amdgcn architecture: No AMD GPU detected in the system; consider passing it via '-march'
77+
// AMDGPU: error: cannot determine amdgcn architecture: No AMD GPU detected in the system; consider passing it via '--offload-arch'
7878

7979
// case when CLANG_TOOLCHAIN_PROGRAM_TIMEOUT is malformed for nvptx-arch.
8080
// RUN: env CLANG_TOOLCHAIN_PROGRAM_TIMEOUT=foo \
8181
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
8282
// RUN: -fopenmp-targets=nvptx64-nvidia-cuda -nogpulib \
8383
// RUN: --nvptx-arch-tool=%t/nvptx_arch_sm_70 %s 2>&1 | \
8484
// RUN: FileCheck %s --check-prefix=BAD-TIMEOUT-NVPTX
85-
// BAD-TIMEOUT-NVPTX: clang: error: cannot determine nvptx64 architecture: CLANG_TOOLCHAIN_PROGRAM_TIMEOUT expected an integer, got 'foo'; consider passing it via '-march'; environment variable CLANG_TOOLCHAIN_PROGRAM_TIMEOUT specifies the tool timeout (integer secs, <=0 is infinite)
85+
// BAD-TIMEOUT-NVPTX: clang: error: cannot determine nvptx64 architecture: CLANG_TOOLCHAIN_PROGRAM_TIMEOUT expected an integer, got 'foo'; consider passing it via '--offload-arch'; environment variable CLANG_TOOLCHAIN_PROGRAM_TIMEOUT specifies the tool timeout (integer secs, <=0 is infinite)
8686

8787
// case when CLANG_TOOLCHAIN_PROGRAM_TIMEOUT is malformed for amdgpu-arch.
8888
// RUN: env CLANG_TOOLCHAIN_PROGRAM_TIMEOUT= \
8989
// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp \
9090
// RUN: -fopenmp-targets=amdgcn-amd-amdhsa -nogpulib \
9191
// RUN: --amdgpu-arch-tool=%t/amdgpu_arch_gfx906 %s 2>&1 | \
9292
// RUN: FileCheck %s --check-prefix=BAD-TIMEOUT-AMDGPU
93-
// BAD-TIMEOUT-AMDGPU: clang: error: cannot determine amdgcn architecture: CLANG_TOOLCHAIN_PROGRAM_TIMEOUT expected an integer, got ''; consider passing it via '-march'; environment variable CLANG_TOOLCHAIN_PROGRAM_TIMEOUT specifies the tool timeout (integer secs, <=0 is infinite)
93+
// BAD-TIMEOUT-AMDGPU: clang: error: cannot determine amdgcn architecture: CLANG_TOOLCHAIN_PROGRAM_TIMEOUT expected an integer, got ''; consider passing it via '--offload-arch'; environment variable CLANG_TOOLCHAIN_PROGRAM_TIMEOUT specifies the tool timeout (integer secs, <=0 is infinite)

0 commit comments

Comments
 (0)