<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/164060>164060</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] widen the result of EXTRACT_SUBVECTOR for scalable vectors
        </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>
    This IR:

```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnu"

define i1 @_Z4testayyayyyyyayayyyai() #0 {
  %1 = bitcast <vscale x 2 x i64> zeroinitializer to <vscale x 128 x i1>
  %2 = extractelement <vscale x 128 x i1> %1, i64 0
  ret i1 %2
}

attributes #0 = { "target-cpu"="grace" }
```

results in this crash:

```
LLVM ERROR: Don't know how to widen the result of EXTRACT_SUBVECTOR for scalable vectors
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'AArch64 Instruction Selection' on function '@_Z4testayyayyyyyayayyyai'
 #0 0x0000000004167ff8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x4167ff8)
 #1 0x0000000004164ea4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #2 0x000073ba7d842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000073ba7d8969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x000073ba7d842476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x000073ba7d8287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x00000000007bbb41 llvm::json::operator==(llvm::json::Value const&, llvm::json::Value const&) (.cold) JSON.cpp:0:0
 #7 0x00000000040a87b1 (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x40a87b1)
 #8 0x0000000003fdd86d llvm::DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(llvm::SDNode*) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3fdd86d)
 #9 0x0000000003fee5e6 llvm::DAGTypeLegalizer::WidenVectorResult(llvm::SDNode*, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3fee5e6)

```

See also: https://godbolt.org/z/Wb8M4Pf61


This can be triggered from source code:

```
int a;
char b, c, e;
long d;
void f() {
  for (signed char g(e); g < 6; g++) {
    a += 20807696389907855;
    b = e && d % c & (0 || 5);
  }
}
```

Looks a bit related to https://github.com/llvm/llvm-project/issues/159995, but I think this a different case.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysV99v2zgS_mvol4ENivr94Aclju96SLdBkuse7iWgpJHMRiYFkkqd_vWHoZRz0s0utmgNWSYlzjffNxySY-mc6jXilqUXLN2t5OQPxm7dF4O2PaL6gnZVm_Z5e39QDj7csrhiPFwZXy5eeWl79NBKLwf5bCYPLN4BEwLXRxZXuB5FzllcxSLcqBu97VIrS8JtrQoWV8X8SkUZi6two97_h0SCBkSiWOt4tl3fUW9PXSHOnLxV44AvfKS0zSFL1pN-1OarXg9KT6d1r6fZhvGqxU5pBBUBS_jDfxOPzsvnZ_lMHxl-pWKiYKIEJmIOLL9gvAJgIo2Cm1r5RjoKweWTa-SAcAIBJwjkr-AbWqO08koO6hta8ObNyEgUNDZi8dULrAiwePJWNh4HPKL2f2YTaDBxSd6ABwSLPsgRaZCY72ah0nur6smjW3RQhPILitIcunUzhrDEOyZEb2WDTAhY7F9NPuOVRTcN3oHS4ClNGivd4d1Mub7-_BGubm8_USLBzmgmcg80GXAwXykYX1WLBIMwo4Lp4Oo_97fV5f3D3b8vPl9d3n-6hc5YIPmyHhCesPHGOsarm-ur6u4K3FQflQcJ9dSDxdFYT9AH70dHtMSeiX2v_GGqN405MrEfhqeXn_VozRdsPBN75dyEjok9SN2C0s0wtRi4BYVQy-aRZgWX987bqfHKaEfuLI7WtFMzW9RTv2G8uvOyeYR2Oo5zfPiG8fLGmt7KI0jbTzS7RBKY2JuRWDTmOKoB7RpP42AsWno2SN2vpXNog7-1t5N-ZGJfKx10NLA2BCHHkYAmP05-42B9KrK1dMe1e9Zenli8U9rjQOnkzGQbnPMuIla3k9ZK9zBKRzmS7ycdxMENPfgoteyJSw5Gw9G0Ey0zkb9BEjlpFu-hVVVYivDhHDW4wwFDa0HtXjwS7l8tx5wyPaQxP_GXTxJledcVEOY2rlhcuWc3N26s0j5Mxf2c2MV5kJVfH4zzFuWRiSysJe3n5V785JwwccFPCy0myoV09B3pBGUCd6rXcvin1O1A4EXgcAlO9Up35sEzUVH_yag2NMvFwm2akVKLh-_sQCwO8riWeVskIhV8UTOomon9qcgesuT1bkgvmo0zm2zmTCZnxvFbwDIruwZGf7Ao24dHNQw_hh7sz-jJ93STPIPeBXk_SjvJszNw-hZYFHkXg6xpd_gh2GB4hs1ezx_P67pOoldJ98UZPbfMiFZ6Y2lLpV21eG_QZzlMCI3Rzi_p93dGhezcNGZoqf2vu0-_vZMH-ZtE47LI6-iXZfUMd45K8dpZ3LVtkbWvpOyqf9w_j3iN_XwOzk9_p83_Mza36B7-sOm_Cdjd7jfT4pL6v0jDwvKsoXyrATHF7G9r8MbehhPsz3hfwqRD8dX-4h1mYTrr-ONpfYcIcnCGDpnvjkTT1mbwG2N7JvbfmNj_Xhcfk5suixYkXoU6sJEaaqTiqu_RYgudNUeY931oSOB7h7_SHiSLqV5qDtJCTTFo6Ibz08HoHtq5TTsbdC-V1lJk0bHPRLFELYD0TBRIUuML6Okcgyw0mbgI19kYQAI9incgeMHzrMzioix5XqTp7JPG1HO1BWFZZdBS4QQNdckz1XuXLL-EdHY512hzTfReZXRtzKOjQkR5sDhIj-3PVSJRWpZlSjGrJw8fqN7Sj3PVJaFVXYeWysNGOtys2m3clnEpV7iN8ozneZJnyeqwxSQpk1rEZRRzXqKQUdvJLO1EmzVN3WUrtRVcpBGPCl7wjCcbHguZlnGRdLnkEc9YwvEo1bAhnpQvq8BwG2UJz_hqkDUOLvynEIKqJNQti6vlzKeqMt2t7DaIrKfesYQPynl3hvPKD-FPyYtNuvuJ0nA12WH7E0GfVT1txf8CAAD__5Ex7Bo">