From 24849c9eb504cad5b17f16ed23a88dab92882d5d Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Fri, 8 Jul 2022 15:59:10 -0400 Subject: [PATCH] [Clang] Fix the wrong features being derivec in the offload packager The offload packager embeds the features in the offloading binary when performing LTO. This had an incorrect interaction with the `--cuda-feature` option because we weren't deriving the features from the CUDA toolchain arguments when it was being specified. This patch fixes this so the features are correctly overrideen when using this argument. However, this brings up a question of how best to handle conflicting target features. The user could compile many libraries with different features, in this case we do not know which one to pick. This was not previously a problem when we simply passed the features in from the CUDA installation at link-link because we just defaulted to whatever was current on the system. Reviewed By: ye-luo Differential Revision: https://reviews.llvm.org/D129393 --- clang/lib/Driver/ToolChains/Clang.cpp | 3 ++- clang/test/Driver/openmp-offload-gpu-new.c | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 2c4d39343183cf..bc29dd8107a60b 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -8325,7 +8325,8 @@ void OffloadPackager::ConstructJob(Compilation &C, const JobAction &JA, ArgStringList Features; SmallVector FeatureArgs; - getTargetFeatures(TC->getDriver(), TC->getTriple(), Args, Features, false); + getTargetFeatures(TC->getDriver(), TC->getTriple(), TCArgs, Features, + false); llvm::copy_if(Features, std::back_inserter(FeatureArgs), [](StringRef Arg) { return !Arg.startswith("-target"); }); diff --git a/clang/test/Driver/openmp-offload-gpu-new.c b/clang/test/Driver/openmp-offload-gpu-new.c index a59952a90e29ef..9a421059a68fda 100644 --- a/clang/test/Driver/openmp-offload-gpu-new.c +++ b/clang/test/Driver/openmp-offload-gpu-new.c @@ -120,3 +120,9 @@ // RUN: -foffload-lto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-FEATURES %s // CHECK-LTO-FEATURES: clang-offload-packager{{.*}}--image={{.*}}feature=+ptx{{[0-9]+}} + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fopenmp --offload-arch=sm_52 -nogpulib \ +// RUN: -Xopenmp-target=nvptx64-nvidia-cuda --cuda-feature=+ptx64 -foffload-lto %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-SET-FEATURES %s + +// CHECK-SET-FEATURES: clang-offload-packager{{.*}}--image={{.*}}feature=+ptx64