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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64][SVE] Assertion fails in Casting
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          stevesuzuki-arm
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/b667sPGbc 
```
define <vscale x 16 x i16> @zext_fail(<vscale x 16 x i8> %a) #0 {
  %1 = zext <vscale x 16 x i8> %a to <vscale x 16 x i16>
  %2 = add <vscale x 16 x i16> %1, zext (<vscale x 16 x i8> shufflevector (<vscale x 16 x i8> insertelement (<vscale x 16 x i8> undef, i8 2, i32 0), <vscale x 16 x i8> undef, <vscale x 16 x i32> zeroinitializer) to <vscale x 16 x i16>)
  ret <vscale x 16 x i16> %2
}
```
Assertion fails in `include/llvm/Support/Casting.h:269` with target triple = "aarch64-linux-gnu" -mattr=+sve2 -O3
The same happens with `sub`, but not with `mul`
```
llc: /root/llvm-project/llvm/include/llvm/Support/Casting.h:269: typename llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X = llvm::Instruction; Y = llvm::Value; typename llvm::cast_retty<X, Y*>::ret_type = llvm::Instruction*]: Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel -mattr=+sve2 -O3 <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'CodeGen Prepare' on function '@zext_fail'
 #0 0x000055a1739bbb3f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055a1739b95ac SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f1eb9aa83c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
 #3 0x00007f1eb957503b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4303b)
 #4 0x00007f1eb9554859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f1eb9554729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f1eb9566006 (/lib/x86_64-linux-gnu/libc.so.6+0x34006)
 #7 0x000055a1715c8342 llvm::AArch64TargetLowering::shouldSinkOperands(llvm::Instruction*, llvm::SmallVectorImpl<llvm::Use*>&) const (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0xdc8342)
 #8 0x000055a171249ee3 (anonymous namespace)::CodeGenPrepare::tryToSinkFreeOperands(llvm::Instruction*) CodeGenPrepare.cpp:0:0
 #9 0x000055a172b94d26 (anonymous namespace)::CodeGenPrepare::optimizeInst(llvm::Instruction*, bool&) CodeGenPrepare.cpp:0:0
#10 0x000055a172b981ee (anonymous namespace)::CodeGenPrepare::runOnFunction(llvm::Function&) (.part.1716) CodeGenPrepare.cpp:0:0
#11 0x000055a1731aae16 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x29aae16)
#12 0x000055a1731ab169 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x29ab169)
#13 0x000055a1731abac9 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x29abac9)
#14 0x000055a17134ea08 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#15 0x000055a1712a9557 main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0xaa9557)
#16 0x00007f1eb95560b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#17 0x000055a1713453da _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0xb453da)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9WFtv4jgU_jXhxQIlNrk98EDb6exIHU217VYzT8hJDGTrxJHtdKG_fs8x4ZIMnbY71VYUgo_9ne9cbZOpYjtbW9sYj809eg2vlSoyJe1E6RV8e4b_LIpic_s5y4nnX3n-3Iv87uW-FmJZ1oJ47PLJ5FwKsiFBBG9lEHnsE_Gm_rPY2MWSl9Kjyc_TEjeLhtyjKXwyn3jxxQ6a4HgA0FcEMc7oOCwmVr1E4QSLOixeFC_TBYUevez0vcjXrNvlUoonkVulfzGvrI3QVkhRifpXeG0NbkS9ZUKo-2SU-OARfH5tzc9yRnHCs9CqrEtbclnCM_r3F14CXZ2jtDjn6oN_aJcG8dXZfJgbNLlUNcGQG3ABAVlZ57ItBKSTlE8VfNy1TaO0hadLbmxZryZryEEapTCZ_FPaNbFcr4CJ1WUjhQucRynnOl9H07Es63YzXtUtjJFxxa3VMMOjF-ZJwMA3tiNzvxbE8EqQNW8aUZsdMqgwbYaMwXtZa0mt7EFStfJgy8A0KXPgCDSutVK2s2XcaPU35MHRtHfYCmh2C8SQopsMZcjmOcxaQBTsFsLwHUn-8Ogcg-TEIFngqsEKyC43DcsovHDmfHduO077Uhur2xyj47EL8mMgfuCyFSj4DU4vK4TZ4RVafMwQTAzDHSBmYAIEdl0ggheG29nFLu-3OzkKIStaV01qCbmVq6rhtswgQ1C9R6F6oYBil3yimOwCd3vzaX4HVdtmVWkJh5ivIMsxJlgRgwYIjmuzCQAfAziIc2lMKww8EF4XpAs3sZBrueZmTTKeP1rNc9Gpv7MwQIq2alCLG_JBlN5qtdK8OphkuuxSDWpB08AGPRabRiqNBXydS16vxnzvQDMG79aP2KTL2vHMyVghBKQ7ArW2ae3EkPEmiWBZNTbb2vINBKmsoS2drRysfaNanYtD8wyQ7Z9tXUPukgbUg4r4uq1dYMktDnzlNV8hx5jAUKWKFouWxj0wGnceoecAL1UhPgvAg9BwLTqo5V4NgvU2k7hrWG7T8Dc-_IUhD2KWZlnGloADRjrf32Mw7spVzeUfEDKJPJMnVRZdvexEZpI3GCHf_R-wgwF2GvKcDMFA06tAtAOKl4HIUs4TlvtkAUVlYBMRC73bICCKZQbvELFFv9GhoLFrLXgxMWoC3evC3wRTQDk2b1DDemrCOPRZRjQvjXgDfo7IkUOeMljYQ572kcNpEkI9ZupNzE-QKYWFPeRwiBy7NvAuzJj2MaM-ZhT5fvQ-TDaFJT3M-DQXgjBP2JSetLv53O1O927nulH_CMjA1U5k1qqVxV1ZP35rhIa8gf6RvNgoob0eZXcVl_LBHTW-VI2EijrK_jKia8PYM1OSQ1PYR-N32oizv3D29RyQ9BxAp6kQDNXxWtXbSrWG4L5hGqg3XOc4dnW9L2s3ZvX2XqE3rrUQb_JISvo452ssPeVHs3RauI3k3fzAd2UFpyZk8UqgMqVk5_3XGGI38QcMk0CI_8IQIvat3vfgHsXjYLTbTZMJLLMTCNibWfabXsC5gFPgiYpbbPr7nv9uPh-RnDR1pA7ZiazpgHUWROkbWH91u1WP837ogxkjoR5jNmTM81PGUqx4vt09n3DftYGO___CG2j1eE97fYBNBfcT0uk4uDNfc-2KZNDQbm4evl4qOIBsbMcUVJ3Pw7DfbzjsDTGpOF4qPsY47iB7tg02jjDyMwb7NO4NCwO3Ers4IfDW7WkKID0t8cCDISs42eF_lG2ZAz1oveyQ8ILX6loUeNwMWDq464yKGStSlvKRLa0UM7hMdPsant_Di7uHT_BAztzzutvNqNVy-KvCOw7VYcimyWg9S8Ig8EWepjwtwoTFaQblIaIkilgogN9IwldpkB_wGZUz6lPqh37qp2HAggmPsziF6X7AOGdCwOFRQODkBBXj7xsjPXMc4DZgQChLY81RCN6Fw5wQe3ze2rXSM2Ph1m_a5_axHHNdjRztmeP8L7ClMdY">