llvm
llvm copied to clipboard
-Xsycl-target-backend=a-b-c passes flags to all backends
Describe the bug
When compiling a file for the HIP backend (-fsycl-targets=amdgcn-amd-amdhsa) it is necessary to specify --offload-target. However, when trying to compile for the CUDA backend in the same pass, clang gets confused by the backend-specific flags:
$ clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda,amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx1032 -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_86 empty.cpp -c -o empty.o
clang-15: error: cannot find libdevice for gfx1032; provide path to different CUDA installation via '--cuda-path', or pass '-nocudalib' to build without linking with libdevice
clang-15: error: invalid target ID 'sm_86'; format is a processor name followed by an optional colon-delimited list of features followed by an enable/disable sign (e.g., 'gfx908:sramecc+:xnack-')
This only happens with the -c flag. Compiling+linking in a single step works fine.
To Reproduce
#include <sycl/sycl.hpp>
int main() {
return 0;
}
$ clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda,amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx1032 -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_86 a.cpp -c -o test.o
clang-15: warning: CUDA version is newer than the latest supported version 11.5 [-Wunknown-cuda-version]
clang-15: error: cannot find libdevice for gfx1032; provide path to different CUDA installation via '--cuda-path', or pass '-nocudalib' to build without linking with libdevice
clang-15: error: invalid target ID 'sm_86'; format is a processor name followed by an optional colon-delimited list of features followed by an enable/disable sign (e.g., 'gfx908:sramecc+:xnack-')
clang++: /home/aland/intel-sycl/llvm/clang/lib/Driver/ToolChains/HIPAMD.cpp:445: virtual llvm::SmallVector<clang::driver::ToolChain::BitCodeLibraryInfo, 12> clang::driver::toolchains::HIPAMDToolChain::getHIPDeviceLibs(const llvm::opt::ArgList&, clang::driver::Action::OffloadKind) const: Assertion `!GpuArch.empty() && "Must have an explicit GPU arch."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda,amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx1032 -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_86 a.cpp -c -o test.o
1. Compilation construction
2. Building compilation jobs
3. Building compilation jobs
4. Building compilation jobs
5. Building compilation jobs
#0 0x000055f1e71d6884 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x000055f1e71d3fe4 SignalHandler(int) Signals.cpp:0:0
#2 0x00007fe0e008e420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00007fe0dfb2b00b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#4 0x00007fe0dfb0a859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
#5 0x00007fe0dfb0a729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
#6 0x00007fe0dfb0a729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
#7 0x00007fe0dfb1bfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#8 0x000055f1e7caff11 (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x361df11)
#9 0x000055f1e7cb0a04 clang::driver::toolchains::HIPAMDToolChain::addClangTargetOptions(llvm::opt::ArgList const&, llvm::SmallVector<char const*, 16u>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x361ea04)
#10 0x000055f1e7c3444a clang::driver::tools::Clang::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, llvm::opt::ArgList const&, char const*) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x35a244a)
#11 0x000055f1e7ba5025 clang::driver::Driver::BuildJobsForActionNoCache(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x3513025)
#12 0x000055f1e7ba740b clang::driver::Driver::BuildJobsForAction(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x351540b)
#13 0x000055f1e7ba782d void llvm::function_ref<void (clang::driver::Action*, clang::driver::ToolChain const*, char const*)>::callback_fn<clang::driver::Driver::BuildJobsForActionNoCache(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const::'lambda'(clang::driver::Action*, clang::driver::ToolChain const*, char const*)>(long, clang::driver::Action*, clang::driver::ToolChain const*, char const*) Driver.cpp:0:0
#14 0x000055f1e7d30ab4 clang::driver::OffloadAction::doOnEachDeviceDependence(llvm::function_ref<void (clang::driver::Action*, clang::driver::ToolChain const*, char const*)> const&) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x369eab4)
#15 0x000055f1e7ba3294 clang::driver::Driver::BuildJobsForActionNoCache(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x3511294)
#16 0x000055f1e7ba740b clang::driver::Driver::BuildJobsForAction(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x351540b)
#17 0x000055f1e7ba43ec clang::driver::Driver::BuildJobsForActionNoCache(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x35123ec)
#18 0x000055f1e7ba740b clang::driver::Driver::BuildJobsForAction(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, llvm::SmallVector<clang::driver::InputInfo, 4u>, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>> const, llvm::SmallVector<clang::driver::InputInfo, 4u>>>>&, clang::driver::Action::OffloadKind) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x351540b)
#19 0x000055f1e7ba7a81 clang::driver::Driver::BuildJobs(clang::driver::Compilation&) const (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x3515a81)
#20 0x000055f1e7bbaf20 clang::driver::Driver::BuildCompilation(llvm::ArrayRef<char const*>) (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0x3528f20)
#21 0x000055f1e5660817 clang_main(int, char**) (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0xfce817)
#22 0x00007fe0dfb0c083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#23 0x000055f1e565c1de _start (/home/aland/intel-sycl/llvm/build/install/bin/clang-15+0xfca1de)
Aborted (core dumped)
# Without -c it works ok:
$ clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda,amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx1032 -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_86 empty.cpp -o empty
clang-15: warning: CUDA version is newer than the latest supported version 11.5 [-Wunknown-cuda-version]
warning: linking module '/home/aland/intel-sycl/llvm/build/install/lib/clang/16.0.0/../../clc/remangled-l64-signed_char.libspirv-nvptx64--nvidiacl.bc': Linking two modules of different target triples: '/home/aland/intel-sycl/llvm/build/install/lib/clang/16.0.0/../../clc/remangled-l64-signed_char.libspirv-nvptx64--nvidiacl.bc' is 'nvptx64-unknown-nvidiacl' whereas 'empty.cpp' is 'nvptx64-nvidia-cuda'
[-Wlinker-warnings]
1 warning generated.
warning: linking module '/home/aland/intel-sycl/llvm/build/install/lib/clang/16.0.0/../../clc/remangled-l64-signed_char.libspirv-amdgcn--amdhsa.bc': Linking two modules of different target triples: '/home/aland/intel-sycl/llvm/build/install/lib/clang/16.0.0/../../clc/remangled-l64-signed_char.libspirv-amdgcn--amdhsa.bc' is 'amdgcn-unknown-amdhsa' whereas 'empty.cpp' is 'amdgcn-amd-amdhsa'
[-Wlinker-warnings]
1 warning generated.
Environment (please complete the following information):
- OS: Ubuntu Linux 20.04
- Target device and vendor: NVIDIA RTX 3060, AMD Radeon RX 6600
- DPC++ version: clang version 16.0.0 (https://github.com/intel/llvm 0cd04144d9ca83371c212e8e4709a59c968291b9)
- Dependencies version: CUDA 11.7, ROCm 5.2.0