<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">