<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/157122>157122</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Selection failure with SVE svaddv_s64 intrinsic and inline asm
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
crash-on-valid,
generated by fuzzer
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ostannard
</td>
</tr>
</table>
<pre>
This code causes a selection failure in the AArch64 backend. This only seems to affect this intrinsic for one type, `svaddv_u64` and `svaddv_s32` both work correctly.
```c
#include <arm_sve.h>
int64_t test_svaddv_s64(svbool_t a, svint64_t b) {
asm volatile("" : "+Upa" (a), "+w" (b));
return svaddv_s64(a, b);
}
```
```
$ /work/build/bin/clang -c test.c -O1 -march=armv8-a+sve | cat
fatal error: error in backend: Cannot select: <U+001B>[0;33mt31<U+001B>[0m: nxv2i64 = AArch64ISD::SADDV_PRED <U+001B>[0;36mt34<U+001B>[0m, <U+001B>[0;31mt22<U+001B>[0m
<U+001B>[0;36mt34<U+001B>[0m: nxv2i1 = AArch64ISD::REINTERPRET_CAST <U+001B>[0;36mt20<U+001B>[0m
<U+001B>[0;36mt20<U+001B>[0m: nxv16i1,ch,glue = CopyFromReg <U+001B>[0;35mt19<U+001B>[0m, Register:nxv16i1 %2, <U+001B>[0;35mt19<U+001B>[0m:1
<U+001B>[0;35mt19<U+001B>[0m: ch,glue = inlineasm <U+001B>[0;33mt17<U+001B>[0m, TargetExternalSymbol:i64'', MDNode:ch<0xaaaab4585668>, TargetConstant:i64<1>, TargetConstant:i32<786442>, Register:nxv16i1 %2, TargetConstant:i32<6094858>, Register:nxv16i8 %3, TargetConstant:i32<-2147483639>, Register:nxv16i1 %4, TargetConstant:i32<-2147418103>, Register:nxv16i8 %5, <U+001B>[0;33mt17<U+001B>[0m:1
<U+001B>[0;33mt17<U+001B>[0m: ch,glue = CopyToReg <U+001B>[0;36mt13<U+001B>[0m, Register:nxv16i8 %5, <U+001B>[0;31mt15<U+001B>[0m, <U+001B>[0;36mt13<U+001B>[0m:1
<U+001B>[0;31mt15<U+001B>[0m: nxv16i8 = bitcast <U+001B>[0;34mt4<U+001B>[0m
<U+001B>[0;34mt4<U+001B>[0m: nxv2i64,ch = CopyFromReg <U+001B>[0;30mt0<U+001B>[0m, Register:nxv2i64 %1
<U+001B>[0;36mt13<U+001B>[0m: ch,glue = CopyToReg <U+001B>[0;30mt0<U+001B>[0m, Register:nxv16i1 %4, <U+001B>[0;32mt2<U+001B>[0m
<U+001B>[0;32mt2<U+001B>[0m: nxv16i1,ch = CopyFromReg <U+001B>[0;30mt0<U+001B>[0m, Register:nxv16i1 %0
<U+001B>[0;31mt22<U+001B>[0m: nxv2i64 = bitcast <U+001B>[0;30mt21<U+001B>[0m
<U+001B>[0;30mt21<U+001B>[0m: nxv16i8,ch,glue = CopyFromReg <U+001B>[0;36mt20<U+001B>[0m:1, Register:nxv16i8 %3, <U+001B>[0;36mt20<U+001B>[0m:2
<U+001B>[0;36mt20<U+001B>[0m: nxv16i1,ch,glue = CopyFromReg <U+001B>[0;35mt19<U+001B>[0m, Register:nxv16i1 %2, <U+001B>[0;35mt19<U+001B>[0m:1
<U+001B>[0;35mt19<U+001B>[0m: ch,glue = inlineasm <U+001B>[0;33mt17<U+001B>[0m, TargetExternalSymbol:i64'', MDNode:ch<0xaaaab4585668>, TargetConstant:i64<1>, TargetConstant:i32<786442>, Register:nxv16i1 %2, TargetConstant:i32<6094858>, Register:nxv16i8 %3, TargetConstant:i32<-2147483639>, Register:nxv16i1 %4, TargetConstant:i32<-2147418103>, Register:nxv16i8 %5, <U+001B>[0;33mt17<U+001B>[0m:1
<U+001B>[0;33mt17<U+001B>[0m: ch,glue = CopyToReg <U+001B>[0;36mt13<U+001B>[0m, Register:nxv16i8 %5, <U+001B>[0;31mt15<U+001B>[0m, <U+001B>[0;36mt13<U+001B>[0m:1
<U+001B>[0;31mt15<U+001B>[0m: nxv16i8 = bitcast <U+001B>[0;34mt4<U+001B>[0m
<U+001B>[0;34mt4<U+001B>[0m: nxv2i64,ch = CopyFromReg <U+001B>[0;30mt0<U+001B>[0m, Register:nxv2i64 %1
<U+001B>[0;36mt13<U+001B>[0m: ch,glue = CopyToReg <U+001B>[0;30mt0<U+001B>[0m, Register:nxv16i1 %4, <U+001B>[0;32mt2<U+001B>[0m
<U+001B>[0;32mt2<U+001B>[0m: nxv16i1,ch = CopyFromReg <U+001B>[0;30mt0<U+001B>[0m, Register:nxv16i1 %0
In function: test_svaddv_s64
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: /work/build/bin/clang -c test.c -O1 -march=armv8-a+sve
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'test.c'.
4. Running pass 'AArch64 Instruction Selection' on function '@test_svaddv_s64'
#0 0x0000aaaaaf640a14 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/build/bin/clang+0x4ba0a14)
#1 0x0000aaaaaf63e4bc llvm::sys::RunSignalHandlers() (/work/build/bin/clang+0x4b9e4bc)
#2 0x0000aaaaaf5ae144 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
#3 0x0000aaaaaf5ae0d4 llvm::CrashRecoveryContext::HandleExit(int) (/work/build/bin/clang+0x4b0e0d4)
#4 0x0000aaaaaf63ac44 llvm::sys::Process::Exit(int, bool) (/work/build/bin/clang+0x4b9ac44)
#5 0x0000aaaaaddf3bec llvm::BatchAAResults::~BatchAAResults() cc1_main.cpp:0:0
#6 0x0000aaaaaf5b5490 llvm::report_fatal_error(llvm::Twine const&, bool) (/work/build/bin/clang+0x4b15490)
#7 0x0000aaaab1083e0c llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/work/build/bin/clang+0x65e3e0c)
#8 0x0000aaaab1082c20 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/work/build/bin/clang+0x65e2c20)
#9 0x0000aaaaae61a2f8 (anonymous namespace)::AArch64DAGToDAGISel::Select(llvm::SDNode*) AArch64ISelDAGToDAG.cpp:0:0
#10 0x0000aaaab10783f8 llvm::SelectionDAGISel::DoInstructionSelection() (/work/build/bin/clang+0x65d83f8)
#11 0x0000aaaab10774a4 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/work/build/bin/clang+0x65d74a4)
#12 0x0000aaaab10756f4 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/build/bin/clang+0x65d56f4)
#13 0x0000aaaab1072a30 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/build/bin/clang+0x65d2a30)
#14 0x0000aaaab1070570 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/work/build/bin/clang+0x65d0570)
#15 0x0000aaaaaeb6f23c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/work/build/bin/clang+0x40cf23c)
#16 0x0000aaaaaf112834 llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/build/bin/clang+0x4672834)
#17 0x0000aaaaaf11a004 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/build/bin/clang+0x467a004)
#18 0x0000aaaaaf1131fc llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/build/bin/clang+0x46731fc)
#19 0x0000aaaaafd6d2c8 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, 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*) (/work/build/bin/clang+0x52cd2c8)
#20 0x0000aaaaafd81698 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/work/build/bin/clang+0x52e1698)
#21 0x0000aaaab1749610 clang::ParseAST(clang::Sema&, bool, bool) (/work/build/bin/clang+0x6ca9610)
#22 0x0000aaaab0233520 clang::FrontendAction::Execute() (/work/build/bin/clang+0x5793520)
#23 0x0000aaaab01b62e0 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/work/build/bin/clang+0x57162e0)
#24 0x0000aaaab0333bc0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/work/build/bin/clang+0x5893bc0)
#25 0x0000aaaaaddf3484 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/work/build/bin/clang+0x3353484)
#26 0x0000aaaaaddefeb0 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x0000aaaab003ba50 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1>(long) Job.cpp:0:0
#28 0x0000aaaaaf5ae068 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/work/build/bin/clang+0x4b0e068)
#29 0x0000aaaab003aeec clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/work/build/bin/clang+0x559aeec)
#30 0x0000aaaab0000900 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/work/build/bin/clang+0x5560900)
#31 0x0000aaaab0000af0 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/work/build/bin/clang+0x5560af0)
#32 0x0000aaaab0016c0c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/work/build/bin/clang+0x5576c0c)
#33 0x0000aaaaaddef20c clang_main(int, char**, llvm::ToolContext const&) (/work/build/bin/clang+0x334f20c)
#34 0x0000aaaaaddfe494 main (/work/build/bin/clang+0x335e494)
#35 0x0000fffff7b073fc __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#36 0x0000fffff7b074cc call_init ./csu/../csu/libc-start.c:128:20
#37 0x0000fffff7b074cc __libc_start_main ./csu/../csu/libc-start.c:379:5
#38 0x0000aaaaadded8f0 _start (/work/build/bin/clang+0x334d8f0)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 22.0.0git (https://github.com/llvm/llvm-project.git ff9b296b86ebf0603fa3577726a4a46416f80b0a)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work/build/bin
Build config: +assertions
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: /tmp/test-58faf1.c
clang: note: diagnostic msg: /tmp/test-58faf1.sh
clang: note: diagnostic msg:
********************
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW19z4riW_zTKiyqULPkfD3lwIPRkqmc6FZjZ2idKtmXQti2xkkwn92E_-5Zkg22CCUzv3tq6O13MBCSdc37nj86Rj4BqzTeCsQcQPIJgfkdrs5XqQWpDhaAqv0tl_v6w2nINM5kzmNFaMw0p1KxkmeFSwILyslYMcgHNlsEkUdk29GFKs-9M5BPoiKUo36FmrNLQSEiLgmUGGjvDhVFcaJ7BQiooBYPmfccAnkEQIr2neb5f16EPQgSpyHuDmmA7mEqzhT-k-g4zqRTLTPk-ASixrxA1r8x-wISLrKxzBgGZUVWt9Z5NtoA8NYu5MKG_NtAwbdYHCaEPcKz3qZTl2kBqQen9YWUK8BSC6BGgBEKqK7iXJTW8ZADHAGOAMQQkge7t4x876gZwTAGeOu3c-I92NHWjU0AadoqZWgk4wOHEp8dFIJr3dTxR2WnsQ4AX1jQAL9Kal7n9ywXAi6ykYgPvM6fuJIP33zx4X1GVbQGZU1Xt43sK8KPeMwiiGcyoASgpqKElZEpJZRVzb6zXW0_bsRkVQpo2OJz2ZPYHwI8IeY_W1MEjAuSRkMoQ7-NUZSnE2x7z0IeAzA-x9LycA5IAkiyT-fzP9cvr03yEcVgZ4p9jbA1-lsKrDMbnKNAY-FEZB_DeWeyvT8-_r55eX16fVutZslyNc8doBA-EtxI1kLyQewDPsi3As01ZM4dvJnfvCyWrV7YZ4RpUxpuOGPOVbbg2zAZCKwACHOBxO48yI4nX6jam3QVSONSJi5ILZvfiaNx50YhGK6o2zDy9GaYELZfvVSpLQBJu917kXjP42_x3mTNAErtPZuiNUkpTP4iDMIwtryObmRQ2g5qWAZl5o9PERl8Uh76P2zUXbDtCHqKpHwfxGH1s6ckF-nvs-ZEfk5BML2LwP-XhxR4iF3EE4zEy6p5-jIxFyQVi-DHyV3I87sPKeOTauP9MJ68yXnBTRhoV31rhRjnHFBA75VNuMqrNCBe_MmdT26jYMYIukbvEc2XGQZU5m8Y-GL6pEDi4YJALZrwxHq5GNdgm53nhyoxVm96_22hPkvz_tK0PWqGLwXe-iJ7U88vBhyqDz54KLpW-UaIu7v9C6btQUL1PUuzNDPHFGP6XqOt_V_a_K_s1lf3v2v53bf9Xr-3_h6v7s4BFLVxXx4o9bYWg5OXrU7J8grpOK24ghWm9gYrtpDLQSLg1Zqftwy5eALzYcLOt00kmK4AXZbk__LnfKfkfLDMAL7jWNdMAL1xn59CeMVsGM0X11jUWjKKZ6wbtFNspmTGtWQ61rFUzbCmp1jLj1LAcqlpAnSm-MxOAkqWh2XeY19XOwkIJmjQeeFFyo2gFqdrUFRNGN42an-2VAJR4E-sQJgtAnuCOKs0UpAYykUNZwIKXdhFuYcxkzuCGCaaoszlKSDvzWgvBxQbuqNYQ4GjRugW-2IHfqKAbpgCOoBSwknldMruqAQhwZHX3R1gd-nPPQhtVN1yXh2Zey_IQBXY98NGHnljktiYmCKI3hBCy1ZIWoY-o50Pna9fy0O-6efOiuDDOGavGnXG3SNEfa6mNYrQCOLQu5cK41hqOL7rEhvabn1IrFOBpC8kbQiLMT7NzkF5rseQbQctfqMhLprQTd7XUqeXbScUDqQFlnu-7Zp-Q4r2StYaCVkzvnPLTBsHMxvgry-SeqfeZFIa9medqVzazDSy3BuDYmWQGa-G6tTkspUUyhed4TLKdDXfk_mvgkVN4KO_76RyXPoqnN24OIK62ELJCOgv5J36hmT8SKm6PNx_6gmcwlbK8xUVWRAcg6API84KkrB8Yj9Rk2yR5ZbouTSv-v04GmwjJMm9dUS7O2Dkc2jkN_CnqyWhS5dr1UddNH7W_E1Y_uGAws8evdifcqLFn5XUaRz00qYdiwlBf4-Omnydfnpesjbumg_vvzDTTA4DL5pCMk6sxhQGzUjtM8QkmnGH0KaZm1GbLmawqm6XOg-ptkGxL1cGUw5lbojgMmAXYwZ_2HcxCj-Ii_myftwl3nnxZyTNqjVv42EFm5YH4JOZsvkNDi0YxKeJPLTqXvfTfy_7Xp8AwyK2kxjQWh3eCI_Kp_3m0yZx9YSIR-VPFzTz5ciMEK6SDgE8gBGHxOYRmNCnLR6p59ljK7Lse-ORYe7udeT1AC6EDSE4AYko-j35Vi2_iN5ptuWAHLAOAH-ZuQmgxdAj9E4QoiC4h_Mo2NHv_p-C0SDqcg2zO0rDApJ_bTkTZU1MP5Fl0fwWWjzIruIM1LACeh2PSj8DFi0VyOL79bwAKIyuyAxSdAKIIXQPoN3emHHqvHboJjBXXgYlPwBCv6Dut7AVTD1Z3JlK1-HlIVmgHaZDQizzMcRbDZr0TwSpuHpv7zW-12dU2XfemZ7La8ZKpZ9cyyVhbtwcrXIb7trOu1O18b0MZxcXmlRXD4YNmyQm3FkrSBkaf5FkYVWu-Z6-smAnzYhQgs256X7Q7YMFLtnzXhlVtM0ebvJmpBf_Pmq13J5T2gL77obhh68MxvUeUs4LWpVnnrGSGfUJInlqZH1WaSaHryj7UXH-6CHBm_XX0Jh4-j-SxF07jS7J6Z9yVokKX7jnsD8FP3JwsV4dj8Q3BFmBmAXTwhiUy8qehh_rwXuzzYrJcDYUvWUUH58Ebz4VhRq2gDsagTCJMSIAHMBbK6nqMsvYkzrLasFvKcxBNLedO7qD6IS8NMUPw0mbqSz6EfDwO9BbXRJ6V3mEb1D1ECEmzAbYWRQdxLzP6EdHHfHBDNMdTK7XD9OGJxY_949PHIBEmStF3m0TIbHjwbXfb6WF4L3l-CzRCAiu8gxYOobGCpQgebDTzVi4---faipblnywzsk3nZ3CeZEbLo910g5NXrvieqY8HYTx43EGIpDRATtMe00NjY62csdxsE9MuN9klGS3LlGbf14WwMDvfNoJbP888-yhCRX66Pc465ZgtpSsDtBzkya4GHPPjkWC9zt7ePK_5kNoTqs2l3GJyJhwstgNroyi3D7DN9Ak7WpY2bqXqzdslSZdVXFQ0BnckAPvr5o4jPnQdfpXpGfvHH5oMYXxVk-G1FktasPJ9YL7LrrqpDxH2cvD0JEooYxn8_-zlK5NTMLWWOtpx0PpL7ZspQqN2dFmRfqgmB-MOUugJoV0w6IlctzQ56aDcpGpolelU9U5VpcXNqv4qUz2u568y_cq1Geh5KXkePb2j3Dq5bZBda5o2HH7GQLToGWh4oEBemKHRPTXvvR8U1TPVdMyw_0QDXVu7g8gq3ZmEnBZIfDDJoXofILntnbSb8_Pyd2W99q3ADo5_cpRg_tSHFsjV9d9SdPwOR5PC_otSFJEig-t1yVObuagya1tGnapwYlnpGuDFxL7V7zpnOw3wQuxMCfDiHNFkC0gS-YAkpJUYnkr0swy69VxwcyqkeWs53zvOkwyQxMMxIAlu69WxPTrgONDhHPyznEk0BSQJWsbxie_zuECwYXm1-yxNY-5DzHZfvG0upIr28AuzNnoLykuWwx_cbCF746b5wnaErMxaM3i_h0ZCzRjkvdPrUQTcM6W5FBDjCZqgDXdgb7vTm1iqopimeBqmccjSAoWIFJQEURThkPrUD30vLGKUItrIbr5zYNWi1LU772vxXcgf4r7kon6734jartoqRnNYydx1xeBOav7mbiy1oWXJ8jlX43d4KHm0n-w-KvimWfdItWaqeSjvGVlI-xCbwJzTjZDa8AxWuiFByWGf_qWX-352e4GarFbJ7Be4-uUJLr59_frt355__wIXz1-flnD1zQ0__vEFvj69fHtdAXdz-XLu9jPWNiOM3oAeFygG3YGA5ZCaht81CuOFqXb2_0yb-yAuaOFNsp-g1dvrLf3zxj58E_4ufyD5lEzpHXvwoiBCceD7-G77kLJ8GgYejac0ojlljMZFEPlpFAcFK_z4jj9ghAM0RYEXeBHGE-KjqU-KNKJFHGXUAz5iFeXlxO6BiVSbO3ej_eAFkYfxXUlTVmr3ywqMuy_Jt2199_3_GcDY3XXfS3G_p6V9LGuH23thlsP0HRb1P_7BlJ0L5nfqwe25tN5o4KOSa6M7BIab0v2a4yAmmHfXu8ffargksfzzqfcLg94PMZrb-JILBqmu7mpVPvz1u_3WGPsH_N8BAAD__8vFcvo">