[clang] b653b40 - [OpenMP] Don't build the offloading driver without a source input
Joseph Huber via cfe-commits
cfe-commits at lists.llvm.org
Mon May 16 15:19:08 PDT 2022
Author: Joseph Huber
Date: 2022-05-16T18:19:02-04:00
New Revision: b653b409ff44b09ade04bb6e579f5f9790424611
URL: https://github.com/llvm/llvm-project/commit/b653b409ff44b09ade04bb6e579f5f9790424611
DIFF: https://github.com/llvm/llvm-project/commit/b653b409ff44b09ade04bb6e579f5f9790424611.diff
LOG: [OpenMP] Don't build the offloading driver without a source input
The Clang driver additional stages to build a complete offloading
program for applications using CUDA or OpenMP offloading. This normally
requires either a source file input or a valid object file to be
handled. This would cause problems when trying to compile an assembly or
LLVM IR file through clang with flags that would enable offloading. This
patch simply adds a check to prevent the offloading toolchain from being
used if we don't have a valid source file.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D125705
Added:
Modified:
clang/lib/Driver/Driver.cpp
clang/test/Driver/openmp-offload-gpu-new.c
Removed:
################################################################################
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 5884b096faab..3edbaed9ae7f 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -4377,9 +4377,11 @@ Action *Driver::BuildOffloadingActions(Compilation &C,
Mode && Mode->getOption().matches(options::OPT_offload_device_only);
// Don't build offloading actions if explicitly disabled or we do not have a
- // compile action to embed it in. If preprocessing only ignore embedding.
- if (HostOnly || !(isa<CompileJobAction>(HostAction) ||
- getFinalPhase(Args) == phases::Preprocess))
+ // valid source input and compile action to embed it in. If preprocessing only
+ // ignore embedding.
+ if (HostOnly || !types::isSrcFile(Input.first) ||
+ !(isa<CompileJobAction>(HostAction) ||
+ getFinalPhase(Args) == phases::Preprocess))
return HostAction;
ActionList OffloadActions;
diff --git a/clang/test/Driver/openmp-offload-gpu-new.c b/clang/test/Driver/openmp-offload-gpu-new.c
index cd8dfc452615..5ea73ccadc07 100644
--- a/clang/test/Driver/openmp-offload-gpu-new.c
+++ b/clang/test/Driver/openmp-offload-gpu-new.c
@@ -70,6 +70,11 @@
// CHECK-NVIDIA-AMDGPU: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[HOST_BC]]", "[[BINARY]]"], output: "[[HOST_OBJ:.+]]"
// CHECK-NVIDIA-AMDGPU: "x86_64-unknown-linux-gnu" - "Offload::Linker", inputs: ["[[HOST_OBJ]]"], output: "a.out"
+// RUN: %clang -x ir -### --target=x86_64-unknown-linux-gnu -ccc-print-bindings -fopenmp --offload-arch=sm_52 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-IR
+
+// CHECK-IR: "x86_64-unknown-linux-gnu" - "clang", inputs: ["[[INPUT_IR:.+]]"], output: "[[OBJECT:.+]]"
+// CHECK-IR: "x86_64-unknown-linux-gnu" - "Offload::Linker", inputs: ["[[OBJECT]]"], output: "a.out"
+
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda -Xopenmp-target=nvptx64-nvidia-cuda -march=sm_52 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-EMIT-LLVM-IR
// CHECK-EMIT-LLVM-IR: "-cc1"{{.*}}"-triple" "nvptx64-nvidia-cuda"{{.*}}"-emit-llvm"
More information about the cfe-commits
mailing list