-
Notifications
You must be signed in to change notification settings - Fork 12.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[AMDGPU] Correctly use the auxiliary toolchain to include libc++ #109366
Conversation
|
@llvm/pr-subscribers-backend-amdgpu @llvm/pr-subscribers-clang Author: Joseph Huber (jhuber6) ChangesSummary: Full diff: https://github.com/llvm/llvm-project/pull/109366.diff 2 Files Affected:
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index d43e683e46852d..3f0b3f2d86b3ed 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -120,6 +120,11 @@ AMDGPUOpenMPToolChain::GetCXXStdlibType(const ArgList &Args) const {
return HostTC.GetCXXStdlibType(Args);
}
+void AMDGPUOpenMPToolChain::AddClangCXXStdlibIncludeArgs(
+ const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CC1Args) const {
+ HostTC.AddClangCXXStdlibIncludeArgs(Args, CC1Args);
+}
+
void AMDGPUOpenMPToolChain::AddClangSystemIncludeArgs(
const ArgList &DriverArgs, ArgStringList &CC1Args) const {
HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args);
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h
index 2be444a42c55fa..0536c9f7f564c8 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h
@@ -42,6 +42,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUOpenMPToolChain final
Action::OffloadKind DeviceOffloadKind) const override;
void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
+ void AddClangCXXStdlibIncludeArgs(
+ const llvm::opt::ArgList &Args,
+ llvm::opt::ArgStringList &CC1Args) const override;
void
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const override;
|
|
The fix looks good. A test would be preferred. |
Summary: Now that we have a functional build for `libc++` on the GPU, it will now find the target specific headers in `include/amdgcn-amd-amdhsa`. This is a problem for offloading via OpenMP because we need the CPU and GPU headers to match exactly. All the other toolchains forward this correctly except the AMDGPU OpenMP one, fix this by overriding it to use the host toolchain instead of the device one, so the triple is not returned as `amdgcn-amd-amdhsa`.
40be52a to
f47b67c
Compare
Done |
…m#109366) Summary: Now that we have a functional build for `libc++` on the GPU, it will now find the target specific headers in `include/amdgcn-amd-amdhsa`. This is a problem for offloading via OpenMP because we need the CPU and GPU headers to match exactly. All the other toolchains forward this correctly except the AMDGPU OpenMP one, fix this by overriding it to use the host toolchain instead of the device one, so the triple is not returned as `amdgcn-amd-amdhsa`.
Summary:
Now that we have a functional build for
libc++on the GPU, it will nowfind the target specific headers in
include/amdgcn-amd-amdhsa. This isa problem for offloading via OpenMP because we need the CPU and GPU
headers to match exactly. All the other toolchains forward this
correctly except the AMDGPU OpenMP one, fix this by overriding it to use
the host toolchain instead of the device one, so the triple is not
returned as
amdgcn-amd-amdhsa.