aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/Driver.cpp
diff options
context:
space:
mode:
authorArvind Sudarsanam <arvind.sudarsanam@intel.com>2024-10-31 07:39:55 -0700
committerGitHub <noreply@github.com>2024-10-31 09:39:55 -0500
commiteeee5a44bbf24f2f30a313ecf66e6a76de365658 (patch)
treebeaa2f2237656e2b8f07aad4a2d5667413eac4cd /clang/lib/Driver/Driver.cpp
parentc485ee1968831e72778e1258d467022be62fa3f5 (diff)
downloadllvm-eeee5a44bbf24f2f30a313ecf66e6a76de365658.zip
llvm-eeee5a44bbf24f2f30a313ecf66e6a76de365658.tar.gz
llvm-eeee5a44bbf24f2f30a313ecf66e6a76de365658.tar.bz2
[Clang][SYCL] Introduce clang-sycl-linker to link SYCL offloading device code (Part 1 of many) (#112245)
This PR is one of the many PRs in the SYCL upstreaming effort focusing on device code linking during the SYCL offload compilation process. RFC: https://discourse.llvm.org/t/rfc-offloading-design-for-sycl-offload-kind-and-spir-targets/74088 In this PR, we introduce a new tool that will be used to perform device code linking for SYCL offload kind. It accepts SYCL device objects in LLVM IR bitcode format and will generate a fully linked device object that can then be wrapped and linked into the host object. A primary use case for this tool is to perform device code linking for objects with SYCL offload kind inside the clang-linker-wrapper. It can also be invoked via clang driver as follows: `clang --target=spirv64 --sycl-link input.bc` Device code linking for SYCL offloading kind has a number of known quirks that makes it difficult to use in a unified offloading setting. Two of the primary issues are: 1. Several finalization steps are required to be run on the fully-linked LLVM IR bitcode to gaurantee conformance to SYCL standards. This step is unique to SYCL offloading compilation flow. 2. SPIR-V LLVM Translator tool is an extenal tool and hence SPIR-V IR code generation cannot be done as part of LTO. This limitation will be lifted once SPIR-V backend is available as a viable LLVM backend. Hence, we introduce this new tool to provide a clean wrapper to perform SYCL device linking. Co-Author: Michael Toguchi Thanks --------- Signed-off-by: Arvind Sudarsanam <arvind.sudarsanam@intel.com>
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
-rw-r--r--clang/lib/Driver/Driver.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 9878a9d..083035d 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -4791,6 +4791,11 @@ Action *Driver::ConstructPhaseAction(
if (Phase == phases::Assemble && Input->getType() != types::TY_PP_Asm)
return Input;
+ // Use of --sycl-link will only allow for the link phase to occur. This is
+ // for all input files.
+ if (Args.hasArg(options::OPT_sycl_link) && Phase != phases::Link)
+ return Input;
+
// Build the appropriate action.
switch (Phase) {
case phases::Link: