<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/148939>148939</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Cannot scalarize scalable vector loads
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sjoerdmeijer
</td>
</tr>
</table>
<pre>
Compiling this:
```
#include <algorithm>
short a;
bool b;
extern int c[][1][1];
void i(short d, long e, int f[][3][3], bool g[][3][3], unsigned h[][3][3]) {
for (int l = 1; l < 21; l++)
for (int j; j < 3; j += 2)
for (long k; k < 3; k += e - 7) {
b = ~(g[2][1][k] ? d : 0);
a = f[1][1][2];
c[1][0][j] = std::max((unsigned)3, h[2][3][2]);
}
}
```
with `-std=c++11 -msve-vector-bits=128 -Ofast -mcpu=grace`, results in this error:
```
fatal error: error in backend: Cannot scalarize scalable vector loads
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: /opt/compiler-explorer/clang-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -fno-verbose-asm -S -target aarch64-linux-gnu --gcc-toolchain=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu --sysroot=/opt/compiler-explorer/arm64/gcc-12.2.0/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot -fcolor-diagnostics -fno-crash-diagnostics -std=c++11 -w -msve-vector-bits=128 -Ofast -mcpu=grace <source>
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module '<source>'.
4. Running pass 'AArch64 Instruction Selection' on function '@_Z1islPA3_A3_iPA3_A3_bPA3_A3_j'
#0 0x0000000003c80a78 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3c80a78)
#1 0x0000000003c7e44c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3c7e44c)
#2 0x0000000003bcec93 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bcec93)
#3 0x0000000003c75c9e llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3c75c9e)
#4 0x0000000000da44db LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
#5 0x0000000003bd8bc3 llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bd8bc3)
#6 0x0000000003bd8d28 (/opt/compiler-explorer/clang-trunk/bin/clang+++0x3bd8d28)
#7 0x00000000052adec7 (/opt/compiler-explorer/clang-trunk/bin/clang+++0x52adec7)
#8 0x00000000052f10f0 (anonymous namespace)::VectorLegalizer::Expand(llvm::SDNode*, llvm::SmallVectorImpl<llvm::SDValue>&) LegalizeVectorOps.cpp:0:0
#9 0x00000000052f376d (anonymous namespace)::VectorLegalizer::LegalizeOp(llvm::SDValue) LegalizeVectorOps.cpp:0:0
#10 0x00000000052fa0ec llvm::SelectionDAG::LegalizeVectors() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x52fa0ec)
#11 0x0000000005254e9c llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/clang+++0x5254e9c)
```
See also:
https://godbolt.org/z/hrYqvWdq8
Unfortunately, this is requesting VLS code with `-msve-vector-bits=128`, but this is used in e.g. the Gromacs project.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysV91z66oR_2vwy448CPwhPfhBsePbM5Pbk7m5PZ32JYMAySQIdADl4zz0b--A5NhOc9vbM_E4AcN-_NhddhfmvWqNlBu0vELL3YwN4WDdxj9Y6UQn1YN0s9qK183Wdr3SyrQQDsojWiGcvis8fXGFCFWG60FIQHTLdGudCocO0WuEK3-wLgBD9ArhqrZWQz3O5UuQzoAyAfgIAi2v8rMhUT1ZJUAhUoxyBCJb0Na0IOMsMjdvzPRsIFtIyto_2h1MMoCAw8cUJaB1BADQWAeIFFGXBkR3kCN6laZbIOMckav0LRPDBctDJHhIxHSakqsohZzI3xjSyR4j2eOJ4_HIISGD9Tmy8VMnUP9CpIiHJReGfETLHSC6BwGIVoCjTnrOzBJz8870k5gLSn7axOPwMArfgQ8iBgatOvaCSIFIcbQuIiWN1j6ckNEzBZdo0HoXo2n8fx5fuHpW4QBohbOkasdHg-c5ZJ1_ktmT5MG6rFbBI7rLSQHZ14b5AFnH-wHRXesYl1Ea2YKTftDBgzIppEE6Z92Hgd2wwPTb_jiJbDXjj9LEM8OWGWMDeM40c-qHHGe1ljBiAm2Z8AhXtzfX1d01-KHuVAAG9dCCk30M6mDhEEKfLhfZI7JvVTgM9ZzbDpG91k_HIeudfZA8ILJX3g_SI7IHZgQcr184SOCO-UOCGNKhyRZ6J3tnufReCvB2cONy5GTeW65YkALcYMBzp_owR7i6C4w_ghi6fjQNniNc3jrbOtYBc-3QSROtXQEie9tHTDylCuky-dJr66SLa5qZNgtuMI-I7GtljmujByFrxTNzTbaArIXMRmGs76PIIfRDmHvIGmOzJ-lq62XGfAfZHWSBuVYGYMzxw2qRaWWGl6w1A2RZy3kWrNX8wJRBdPdf4THXrRbR4pxnOZmTOY6Lk9TBPBr7bC6k-1fvrA2fK_d_7E06IWu41dZlQrHWWB8Un6yTXH65_B_35Pn_uiox-0yBkrJ4Hr2P6FbaBtFr6Jnz0gELII0A20CjtES4IpFsa4WEVhrpWFDWIFzRuPzbYEwsIz3zHhBZ7wfD4z7cxoVfmWFtNN0arIHOikHLSHWBg6xjZC4-klZVyX7wxfjghlHwndQyzSapzVFjlLvA9__Mlde3Fb2v6L2axnoaHyINjsFNMeAXfPxQXmC2LiDdypTz_KsfJ7dOmZCuze_jxStORI4931sfnGQdIqupdKVUHtPlz98fRK7wy4RpqieI0PwS8VouFvwjxFstmRn6r-ZOtYbps7ydauzn4UsITvjIBb6aS17SM3zbGM6_SW6fpHvdWhPkSxh3_sKM0PL6RYWxun4awhHDCSF9Z8ElL-XHPk9pdfxxjmtsPz7RghHBCd_iHB8WbLEQNdzcfPv1Otao0UwOkSK2T4hUEQ8_MAfcGh-mhSNAzvP7jikz533M9Tj9jWqWl44SRc3PHTXWr_tUJu_HMnke9L8_KyOPKlefbpMRzskmq_dgBSk-TZMgZ_drfa5pSZiQfP0pmiZZJ03FpaYmxw2Ompix5rWzgwfDOun7lG_K0ezfUoa_kS3T6od0x9jsmREX7rnb_dUKOQXD2XLHtB5lfOl6jej2nOUb08OYi1fRkUctI_3X3n8QROW7M9D1SvzUGY4_v_bvzjGC-hNwYm7E7-AwLM-T41vR2FW_XKodhfrk588J4Un76O6ILb_EtlzI8o-wfbmTekqXVshfpKmMuO5UiLA_E2HCMCG87MnvpASmvX1rnd81sVbUVoe5dS0i-x-I7A_uH9-f_i6-F1Onjau_mca6MBgWpH6NYZgacuXBye-D9CFW-G83d8BjS_H2Bvi4j5m6-3oIb1KG2O8qA3LezlNv_IuzHeMepj56DjOxoaKkJZvJTb5ekhVer8t8dtjU9aIROV2V62ZJalGv6KJeFVSUBWdE4GKmNgSTJV7ny7wk5TKfCyzwctWUTS3yRU0xWmDZMaXn0X_RCrPUs2_yRVHScqZZLbVPz29CTg-KqY9BJL6PZm6T2v56aD1aYK188CdxQQWd3u9HnuXuTz5HZoPTm59_ckwneNqQfwcAAP__E4fm-g">