llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27k stars 11.06k forks source link

clang-19 (trunk) crash with -march=znver4: Cannot emit physreg copy instruction #97968

Closed thubble closed 1 week ago

thubble commented 1 week ago

When attempting to build Chromium's boringssl (fork of openssl) with -march=znver4, using clang-19 trunk, an error occurs. I'm attempting to build qtwebengine, which uses a fork of Chromium 122. Using Gentoo Linux with the llvm git trunk live ebuild.

This only seems to occur with -march=znver4. Using -march=znver3 and -march=skylake-avx512 work fine. Clang-18 also works fine with -march=znver4.

Godbolt link with as minimal of an example as I could create (reproduceable as of today): https://godbolt.org/z/dTcsh51na

Preprocessed source attached. scrypt.zip

fatal error: error in backend: Cannot emit physreg copy instruction
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: /usr/lib/llvm/19/bin/clang -MMD -MF host/obj/third_party/boringssl/boringssl/scrypt.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D_GNU_SOURCE -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DBORINGSSL_IMPLEMENTATION -D_BORINGSSL_LIBPKI_ -DBORINGSSL_ALLOW_CXX_RUNTIME -DBORINGSSL_NO_STATIC_INITIALIZER -DOPENSSL_SMALL -Ihost/gen -I../../../../../qtwebengine-6.9999/src/3rdparty/chromium -I../../../../../qtwebengine-6.9999/src/3rdparty/chromium/third_party/boringssl/src/include -fno-delete-null-pointer-checks -fno-ident -fno-strict-aliasing -fstack-protector -Wno-unknown-argument -Wno-unknown-attributes -Wno-unknown-warning-option -Wno-ignored-attributes -Wno-predefined-identifier-outside-function -Wno-self-assign -Wno-unknown-pragmas -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pthread -fcolor-diagnostics -fmerge-all-constants -m64 -msse3 -march=native -no-canonical-prefixes -fomit-frame-pointer -g0 -fvisibility=hidden -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wall -Wno-unused-variable -Wno-c++11-narrowing -Wno-unused-but-set-variable -Wno-misleading-indentation -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -Wloop-analysis -Wno-unneeded-internal-declaration -Wno-deprecated-declarations -Wenum-compare-conditional -Wno-ignored-pragma-optimize -Wno-deprecated-builtins -Wno-bitfield-constant-conversion -Wno-deprecated-this-capture -Wno-invalid-offsetof -Wno-vla-extension -Wno-thread-safety-reference-return -O2 -fdata-sections -ffunction-sections -fno-unique-section-names -fno-math-errno -std=c11 -c ../../../../../qtwebengine-6.9999/src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c -o host/obj/third_party/boringssl/boringssl/scrypt.o
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '../../../../../qtwebengine-6.9999/src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c'.
4.      Running pass 'Post-RA pseudo instruction expansion pass' on function '@scryptBlockMix'
 #0 0x00005693384e5e68 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2ce5e68)
 #1 0x00005693384e33d2 llvm::sys::RunSignalHandlers() (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2ce33d2)
 #2 0x0000569338406f9e (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c06f9e)
 #3 0x0000569338406f5b (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c06f5b)
 #4 0x00005693384df5bb (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2cdf5bb)
 #5 0x0000569340ebefc3 (/usr/lib/llvm/19/bin/clang+0x12fc3)
 #6 0x000056933841ca53 llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c1ca53)
 #7 0x000056933841c916 (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c1c916)
 #8 0x000056933ae3cc09 (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x563cc09)
 #9 0x0000569338ca93d1 llvm::TargetInstrInfo::lowerCopy(llvm::MachineInstr*, llvm::TargetRegisterInfo const*) const (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x34a93d1)
#10 0x00005693388b0e2f (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x30b0e2f)
#11 0x00005693389fbfb8 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x31fbfb8)
#12 0x000056933868e8f1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2e8e8f1)
#13 0x0000569338698023 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2e98023)
#14 0x000056933868f6b2 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2e8f6b2)
#15 0x000056933f0e954d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x2ce954d)
#16 0x000056933f51e806 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x311e806)
#17 0x000056933db4fcd9 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x174fcd9)
#18 0x00005693401cc52b clang::FrontendAction::Execute() (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x3dcc52b)
#19 0x000056934011e9e4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x3d1e9e4)
#20 0x0000569340252f2d clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x3e52f2d)
#21 0x0000569340ebe88e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm/19/bin/clang+0x1288e)
#22 0x0000569340ebb21b (/usr/lib/llvm/19/bin/clang+0xf21b)
#23 0x000056933fd0aaf9 (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x390aaf9)
#24 0x0000569338406f38 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c06f38)
#25 0x000056933fd0a6f9 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x390a6f9)
#26 0x000056933fcc6811 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x38c6811)
#27 0x000056933fcc6b0e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x38c6b0e)
#28 0x000056933fce853c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x38e853c)
#29 0x0000569340eba805 clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm/19/bin/clang+0xe805)
#30 0x0000569340ecb323 main (/usr/lib/llvm/19/bin/clang+0x1f323)
#31 0x0000569335244df7 (/usr/lib64/libc.so.6+0x25df7)
#32 0x0000569335244eb5 __libc_start_main (/usr/lib64/libc.so.6+0x25eb5)
#33 0x0000569340eb8831 _start (/usr/lib/llvm/19/bin/clang+0xc831)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 19.0.0git0b9f2847
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm/19/bin
Configuration file: /etc/clang/x86_64-pc-linux-gnu-clang.cfg
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/tmp/portage/dev-qt/qtwebengine-6.9999/temp/scrypt-d31f80.c
clang: note: diagnostic msg: /var/tmp/portage/dev-qt/qtwebengine-6.9999/temp/scrypt-d31f80.sh
clang: note: diagnostic msg: 

********************
llvmbot commented 1 week ago

@llvm/issue-subscribers-backend-x86

Author: Tiernan Hubble (thubble)

When attempting to build Chromium's boringssl (fork of openssl) with `-march=znver4`, using clang-19 trunk, an error occurs. I'm attempting to build qtwebengine, which uses a fork of Chromium 122. Using Gentoo Linux with the llvm git trunk live ebuild. This only seems to occur with `-march=znver4`. Using `-march=znver3` and `-march=skylake-avx512` work fine. Clang-18 also works fine with `-march=znver4`. Godbolt link with as minimal of an example as I could create (reproduceable as of today): https://godbolt.org/z/dTcsh51na Preprocessed source attached. [scrypt.zip](https://github.com/user-attachments/files/16120341/scrypt.zip) ``` fatal error: error in backend: Cannot emit physreg copy instruction 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: /usr/lib/llvm/19/bin/clang -MMD -MF host/obj/third_party/boringssl/boringssl/scrypt.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D_GNU_SOURCE -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DBORINGSSL_IMPLEMENTATION -D_BORINGSSL_LIBPKI_ -DBORINGSSL_ALLOW_CXX_RUNTIME -DBORINGSSL_NO_STATIC_INITIALIZER -DOPENSSL_SMALL -Ihost/gen -I../../../../../qtwebengine-6.9999/src/3rdparty/chromium -I../../../../../qtwebengine-6.9999/src/3rdparty/chromium/third_party/boringssl/src/include -fno-delete-null-pointer-checks -fno-ident -fno-strict-aliasing -fstack-protector -Wno-unknown-argument -Wno-unknown-attributes -Wno-unknown-warning-option -Wno-ignored-attributes -Wno-predefined-identifier-outside-function -Wno-self-assign -Wno-unknown-pragmas -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pthread -fcolor-diagnostics -fmerge-all-constants -m64 -msse3 -march=native -no-canonical-prefixes -fomit-frame-pointer -g0 -fvisibility=hidden -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wall -Wno-unused-variable -Wno-c++11-narrowing -Wno-unused-but-set-variable -Wno-misleading-indentation -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -Wloop-analysis -Wno-unneeded-internal-declaration -Wno-deprecated-declarations -Wenum-compare-conditional -Wno-ignored-pragma-optimize -Wno-deprecated-builtins -Wno-bitfield-constant-conversion -Wno-deprecated-this-capture -Wno-invalid-offsetof -Wno-vla-extension -Wno-thread-safety-reference-return -O2 -fdata-sections -ffunction-sections -fno-unique-section-names -fno-math-errno -std=c11 -c ../../../../../qtwebengine-6.9999/src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c -o host/obj/third_party/boringssl/boringssl/scrypt.o 1. <eof> parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module '../../../../../qtwebengine-6.9999/src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c'. 4. Running pass 'Post-RA pseudo instruction expansion pass' on function '@scryptBlockMix' #0 0x00005693384e5e68 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2ce5e68) #1 0x00005693384e33d2 llvm::sys::RunSignalHandlers() (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2ce33d2) #2 0x0000569338406f9e (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c06f9e) #3 0x0000569338406f5b (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c06f5b) #4 0x00005693384df5bb (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2cdf5bb) #5 0x0000569340ebefc3 (/usr/lib/llvm/19/bin/clang+0x12fc3) #6 0x000056933841ca53 llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c1ca53) #7 0x000056933841c916 (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c1c916) #8 0x000056933ae3cc09 (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x563cc09) #9 0x0000569338ca93d1 llvm::TargetInstrInfo::lowerCopy(llvm::MachineInstr*, llvm::TargetRegisterInfo const*) const (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x34a93d1) #10 0x00005693388b0e2f (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x30b0e2f) #11 0x00005693389fbfb8 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x31fbfb8) #12 0x000056933868e8f1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2e8e8f1) #13 0x0000569338698023 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2e98023) #14 0x000056933868f6b2 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2e8f6b2) #15 0x000056933f0e954d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x2ce954d) #16 0x000056933f51e806 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x311e806) #17 0x000056933db4fcd9 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x174fcd9) #18 0x00005693401cc52b clang::FrontendAction::Execute() (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x3dcc52b) #19 0x000056934011e9e4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x3d1e9e4) #20 0x0000569340252f2d clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x3e52f2d) #21 0x0000569340ebe88e cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm/19/bin/clang+0x1288e) #22 0x0000569340ebb21b (/usr/lib/llvm/19/bin/clang+0xf21b) #23 0x000056933fd0aaf9 (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x390aaf9) #24 0x0000569338406f38 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm/19/bin/../lib64/libLLVM.so.19.0git0b9f2847+0x2c06f38) #25 0x000056933fd0a6f9 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x390a6f9) #26 0x000056933fcc6811 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x38c6811) #27 0x000056933fcc6b0e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x38c6b0e) #28 0x000056933fce853c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/llvm/19/bin/../lib64/libclang-cpp.so.19.0git0b9f2847+0x38e853c) #29 0x0000569340eba805 clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm/19/bin/clang+0xe805) #30 0x0000569340ecb323 main (/usr/lib/llvm/19/bin/clang+0x1f323) #31 0x0000569335244df7 (/usr/lib64/libc.so.6+0x25df7) #32 0x0000569335244eb5 __libc_start_main (/usr/lib64/libc.so.6+0x25eb5) #33 0x0000569340eb8831 _start (/usr/lib/llvm/19/bin/clang+0xc831) clang: error: clang frontend command failed with exit code 70 (use -v to see invocation) clang version 19.0.0git0b9f2847 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/lib/llvm/19/bin Configuration file: /etc/clang/x86_64-pc-linux-gnu-clang.cfg clang: note: diagnostic msg: ******************** PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT: Preprocessed source(s) and associated run script(s) are located at: clang: note: diagnostic msg: /var/tmp/portage/dev-qt/qtwebengine-6.9999/temp/scrypt-d31f80.c clang: note: diagnostic msg: /var/tmp/portage/dev-qt/qtwebengine-6.9999/temp/scrypt-d31f80.sh clang: note: diagnostic msg: ******************** ```
RKSimon commented 1 week ago

I have a fix - just trying to reduce the regression test