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

    <tr>
        <th>Summary</th>
        <td>
            -O2 Crashed with "Casting.h:578: decltype(auto) llvm::cast(From*) [with To = llvm::FixedVectorType; From = llvm::Type]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed."
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          Hatsunespica
      </td>
    </tr>
</table>

<pre>
    https://gcc.godbolt.org/z/bjcPdjK11

`opt -O2` crashed on this IR:
It extracts 3 elements from the vector and inserts 3 elements. 
It also crashed when handling 4 elements by deleting the semicolon in the IR. 
This test case is modified from [InstCombine/vscale_extractelement-inseltpoison.ll](https://github.com/llvm/llvm-project/blob/main/llvm/test/Transforms/InstCombine/vscale_extractelement-inseltpoison.ll#L84)
```
define <vscale x 4 x i32> @v(<vscale x 4 x i32> %vec) {
  %ele0 = extractelement <vscale x 4 x i32> %vec, i32 0
  %ele1 = extractelement <vscale x 4 x i32> %vec, i32 1
  %index = mul i32 %ele1, %ele0
  %ele2 = extractelement <vscale x 4 x i32> %vec, i32 %index
  ;%ele3 = extractelement <vscale x 4 x i32> %vec, i32 3
  %vec0 = insertelement <vscale x 4 x i32> %vec, i32 %ele0, i32 0
  %vec1 = insertelement <vscale x 4 x i32> %vec0, i32 %ele1, i32 1
  %vec2 = insertelement <vscale x 4 x i32> %vec1, i32 %ele2, i32 2
  ;%vec3 = insertelement <vscale x 4 x i32> %vec2, i32 %ele3, i32 3
  ret <vscale x 4 x i32> %vec2;%vec3
}
```

Error message:
 ```
#0 0x00007fe5aff1c0d4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x00007fe5aff19114 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007fe5af9230c0 (/lib/x86_64-linux-gnu/libc.so.6+0x430c0)
 #3 0x00007fe5af92303b raise /build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #4 0x00007fe5af902859 abort /build/glibc-sMfBJT/glibc-2.31/stdlib/abort.c:81:7
 #5 0x00007fe5af902729 get_sysdep_segment_value /build/glibc-sMfBJT/glibc-2.31/intl/loadmsgcat.c:509:8
 #6 0x00007fe5af902729 _nl_load_domain /build/glibc-sMfBJT/glibc-2.31/intl/loadmsgcat.c:970:34
 #7 0x00007fe5af914006 (/lib/x86_64-linux-gnu/libc.so.6+0x34006)
 #8 0x00007fe5b1254e9d createShiftShuffle(llvm::Value*, unsigned int, unsigned int, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&) VectorCombine.cpp:0:0
 #9 0x00007fe5b1256fa6 (anonymous namespace)::VectorCombine::foldExtractExtract(llvm::Instruction&) VectorCombine.cpp:0:0
#10 0x00007fe5b12609c9 (anonymous namespace)::VectorCombine::run() VectorCombine.cpp:0:0
#11 0x00007fe5b1261523 llvm::VectorCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/bin/../lib/libLLVMVectorize.so.15git+0x15b523)
#12 0x00007fe5b2c27c66 llvm::detail::PassModel<llvm::Function, llvm::VectorCombinePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/bin/../lib/libLLVMPasses.so.15git+0xa4c66)
#13 0x00007fe5b02953a4 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/bin/../lib/libLLVMCore.so.15git+0x2da3a4)
#14 0x00007fe5b2c23246 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/bin/../lib/libLLVMPasses.so.15git+0xa0246)
#15 0x00007fe5b0293ed6 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/bin/../lib/libLLVMCore.so.15git+0x2d8ed6)
#16 0x00007fe5b2c2bad6 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/bin/../lib/libLLVMPasses.so.15git+0xa8ad6)
#17 0x00007fe5b0291f71 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/bin/../lib/libLLVMCore.so.15git+0x2d6f71)
#18 0x000055dfa009d345 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool) (/usr/local/bin/opt+0x34345)
#19 0x000055dfa008da7b main (/usr/local/bin/opt+0x24a7b)
#20 0x00007fe5af9040b3 __libc_start_main /build/glibc-sMfBJT/glibc-2.31/csu/../csu/libc-start.c:342:3
#21 0x000055dfa008e4fe _start (/usr/local/bin/opt+0x254fe)
```
It is weird because if I ran `opt --vector-combine` or `opt -instcombine` it works well. However it failed on O1, O2, O3. 
cc @regehr 


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWVtz4rgS_jXkRQVlyzbYDzwQMqlhd1JJTVJ5pWRLBs0Ki5JkQvbXb7fMxSZkctk5p3ZrU8RGt6-7P7VaUpNr_jxeOre2vWjSo9fwWRTFYKF5rpUbaLOAmj_hP_9R3PEfv4dhL7jqBZPdcxjotSP9WwrfSGGYXQpOdEXcUloy-46YvuPMEbF1hhXOkogIJVaigq-l0SvoK8hGFE4bwipOZGWF6XQbkAMIU1Yf5DwtRUWWMEbJakHiI2z-TDgUHFYjuhUrWWgFesnKV8y-7zEfUFEnrCMFs4JAYaW5LCXAe-V6yeWssm6qV7msBPCwsQVTYr6zZieyj0ort9bS6mqgVC-56tH0hFbplnU-KPQKCkpt9q_-2ugfYD5yrHQOrxWT1bEPKgevB8MqW2qzslD4jEo0-pbGPZodZm738UUuSsAivWjagJEt8LklMqK96AvpxcEG7HmtlSYwfYBMeqPLBo5gJSgSAOIV6Sr2qpAdzBQrSNAFCj8NFLaAZMXF1iOtauVbd-jYeadxVy79tNy9uANedNlARp-GjFq6QXVDbrNcPqqat_QM1dAr_Chs0MUNzzEP3ehHccMuLt0XaZdS6Bl9FJp2oaMXDBvxJsJB-G5Bja7Orqzm-cUYCG8rYS1biENUJKd9aRSQYBvA36gUCSvLsAh4TO6MrNy9Y8UfEAUKcS8XFVNfMfAJA-tyoyXv0QmuwKbJDor1GqQE_n8nikbhCXYWhjE5BQNJbwLRDlAGWqMzQoCAoCUxgm3T4XwY9yEu19v-oqqbhmJg9WDYo5fBNsYhh2CEmNELzCgnhkkIyhgZa6k4BlGE6dub8vK3h0ORDiLwlWvrVYYvgwGWni0XawyWdSW3TcXG6wE6wdtDDwowLAnhER41ibuaBDRNMsJybdy7NXG84cGP8kJSFDI6CklOhYyA9IVw80bvuRULdOP5hqn63QzA3KH9SjO-souCNaKTIEMFjrKH52TPKzXHgXOucf_5eyKzEXpMFB9ljroywzgIhh9zmQiHdFwmbWHmIU1ikXE4HAjmxP1Slu5-WZelgh0y9VsprLpo8oh8-sUyJXWFLiPwyOHOlY-jZt8vkQtYINH0WDvVsA2zyl1r33R-xJUoWa3crAlOAPClR9EM8uiPPLtd_Pw6y04MHJbMk8YqXT2vdG1JxSCmrCEmIDGNgW3YpqoE_b40-83u1aEEDxOmLpzU1ftUw1ASdFUbBlmRfUI1U1feCd4lMzyRGSY0alHeQbhj1rZFHLtBPDja2p6yCUSPZyvtDasgSHen-jDoMH2N79bWeO8vfODJ_bnNh5_GqeH57dvjTaOZ_FOgN4cJnAS9R4dJDhYcj2RgYjuy5rSgo2I4bKnIhWNSNd_RwhsN59zzinZMe0lNp_nOCPDOjeANBcJ-jhj8_EMYRxuF7dLNYiCzw3Z7z8kDmiURi9u0IMM_U-3fztJUmxOXpJwBBx2S4hOXjGj8K1zyf0buf9GzA5iTzqQlJ54dCd6eNJikWokHvVcFQSecrSFInDe0GfAhM3dDfpljpmBCx8bhiWPmjH_MMfdGTd_JzK_yrCMzr_nV_5nusz6VshO-Ryc-FZaj8B0L-hzL_yp2zjnjEGzvkLM_iyYJL1kQZDyKk5ZuYALycyfXQvmkTcucewfXu8V3UZ7zxBdWPjAD14QbViw9zuRc6zeZG2aeZ1WpZ6u1etlLa3Vbu3XtrqU6A_K3ml8xZ2IMe8ba9rQc-54G7rPdPYWqXsjqRX-9dnMHijWlRr3fZcV_1utRGMz0mX2_HFvefP_MeQB_d1eB6e_4R9b1j5SzUU52F6230GgMndtoNDi5wcVBHpH5HC9Mc7iSGDf_yB2usPXe8ZuvTV_E8be5KKb4PIoPT4wRcSlII_g95iTQ_bVE5MxhDvZJSMNJLgpWY1K2JDNiWEX26eZ-ky7uF7urxDAg2hxaJdxnWi3SkSdt_kBQpQbkq34SG2GwuoT9oUlX3_pc061PC91G-9xwUWDm04iFWBrSzuZc8HHEsyhjF046Jcb9W0qm-6S0dEsggU6ZxfzzYAnUJaMUnoSLQrnnNa5-VjuNrnR0zYJhmje9Npgf9rmcXnLpwR60T2-1DhByK3hzpH9AuOiSXPtcdaeXb0quUPDE4uUTdjPkSFoGi-pB-yWUPrKdS0OYwbsl9XpA-3PTjo0QU2qfU9MlXI2B2jVzMleCNMYAd0DcaEcneBG9qI06_VHh7ey3tLbGbfQ6GUaj0cVyPExYHIgo4RnPwrhMOWhXwjkgy0o40UTlhWK5UHYMRIHQSjwRD4HqJFcXckwDSoNRkASAl2SDlAVhGke8SBOWlmEAcytgmagB6oG_dFyYsVcprxcWGpW0zh4bIfZgdkB4cYAPU7jUZvyVOVtXcNOVBbvw8sde_78ApMee1Q">