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

    <tr>
        <th>Summary</th>
        <td>
            [MemCpyOpt] Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:optimizations,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    Detected by https://github.com/dtcxzyw/llvm-opt-benchmark/issues/935.

Reproducer: 
```
; bin/opt -passes=memcpyopt -S test.ll
@b = external global [32 x i8]

define void @_Z15TestBasicStringIN5eastl12basic_stringIc17CountingAllocatorEEEiv(ptr %call.i.i.i12866) {
  %a = alloca [32 x i8], align 1
  call void @llvm.memcpy.p0.p0.i64(ptr %call.i.i.i12866, ptr @b, i64 26, i1 false)
 %.sroa.gep22184 = getelementptr i8, ptr %call.i.i.i12866, i64 10
  call void @llvm.memmove.p0.p0.i64(ptr %a, ptr %.sroa.gep22184, i64 1, i1 false)
  ret void
}
```
```
opt: /home/dtcxzyw/WorkSpace/Projects/compilers/llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From*) [with To = Instruction; From = Value]: Assertion `isa<To>(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: bin/opt -passes=memcpyopt reduced.ll
1.      Running pass "function(memcpyopt)" on module "reduced.ll"
2.      Running pass "memcpyopt" on function "_Z15TestBasicStringIN5eastl12basic_stringIc17CountingAllocatorEEEiv"
 #0 0x00007e04ebe0c9c2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.19.0git+0x20c9c2)
 #1 0x00007e04ebe0988f llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.19.0git+0x20988f)
 #2 0x00007e04ebe099d5 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007e04eb842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007e04eb8969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007e04eb8969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007e04eb8969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007e04eb842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007e04eb8287f3 abort ./stdlib/abort.c:81:7
 #9 0x00007e04eb82871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007e04eb839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00007e04e5ab5dfa llvm::MemCpyOptPass::processMemCpyMemCpyDependence(llvm::MemCpyInst*, llvm::MemCpyInst*, llvm::BatchAAResults&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMScalarOpts.so.19.0git+0x2b5dfa)
#12 0x00007e04e5abd2aa llvm::MemCpyOptPass::processMemCpy(llvm::MemCpyInst*, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, false>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMScalarOpts.so.19.0git+0x2bd2aa)
#13 0x00007e04e5abd9c4 llvm::MemCpyOptPass::iterateOnFunction(llvm::Function&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMScalarOpts.so.19.0git+0x2bd9c4)
#14 0x00007e04e5abdcce llvm::MemCpyOptPass::runImpl(llvm::Function&, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::AssumptionCache*, llvm::DominatorTree*, llvm::PostDominatorTree*, llvm::MemorySSA*) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMScalarOpts.so.19.0git+0x2bdcce)
#15 0x00007e04e5abe15c llvm::MemCpyOptPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMScalarOpts.so.19.0git+0x2be15c)
#16 0x00007e04e74cde55 llvm::detail::PassModel<llvm::Function, llvm::MemCpyOptPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMPasses.so.19.0git+0xcde55)
#17 0x00007e04e474b7b2 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.19.0git+0x34b7b2)
#18 0x00007e04eaad5065 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.19.0git+0xd5065)
#19 0x00007e04e474a40e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.19.0git+0x34a40e)
#20 0x00007e04eaad5985 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.19.0git+0xd5985)
#21 0x00007e04e47483da llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.19.0git+0x3483da)
#22 0x00007e04ec103267 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.19.0git+0x2d267)
#23 0x00007e04ec10f212 optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.19.0git+0x39212)
#24 0x00007e04eb829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#25 0x00007e04eb829e40 call_init ./csu/../csu/libc-start.c:128:20
#26 0x00007e04eb829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#27 0x00005df852081095 _start (bin/opt+0x1095)
Aborted (core dumped)
```

This issue is caused by https://github.com/llvm/llvm-project/commit/fa2421392802025e842454a31ed50dbfab643130.
https://github.com/llvm/llvm-project/blob/d1dc5047f1127d64eb82eec976fabaa2d9d20c11/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp#L1191-L1192
`Builder.CreateInBoundsPtrAdd` may return `GetElementPtrConstantExpr`.

cc @nikic @DianQK 


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWltz27gV_jXwC8YaErw_-EGWrW1m7caNPWmnLxoQOJJQgwAHAB1rf30HIC2RsuJcuk3TdncVmsLlwznfd3AIAqLWio0CuEDZJcquzmjnttpccMeef9t9Oqs1311cgQPmgON6h7fOtRYlc0SWiCw3wm27esZ0g8hy6IPIUsqn5ly37rwGxbYNNY-ILIW1HVhEllWSzVB0haJ5f_0ArdG8Y2BQMsdDTR4Nn_5rcolroRBZ6tbh85ZaCxYlVw00rN2FsnvswLqZlEOPNKoxSq4wPDswikq8kbqmEqPsMiH4GYsSZVdjMzishQL8pAXHKI1Wf4-zB7DuklrB7p0RavPuzxlQ62RMal-4sn0pi4uF7pQTajOXUjPqtLm-vhZPiJStMxiRjFEpZ8L_H5MyzxGpMCou-3Gxb0CDrTR0PzKRLDCVYqNw_NLeo-3t9FzPeh5mbeQ_Ik_fGHmBQ00a1f5e5CkmoVTEeE2lBUSqYRxEspk1ms420BISl2mwcQMOJDSgnMcR5R7x5FgeP47eNLzRT3DKcjpCntqxBz5tNzbgwiiDusXV6ZiaftWtC-FHllvdwCSc_6rN431LmS-9M_ofwJyPY6abVkgw9iXi275u-OpDXjHZcTgU3Hdtq41vsaDWB8xsi5J5VpR-aA5Mul0LiJS0c9oHSeiWzFEyZ9Q6RMql8VNtHgIou_wk3BY_6KDLO2Wd6ZgTWvnZ4huG8o9UduDjKJnjubVgfAuM8khYipLFg0bJNSLlRyoDqA-GHCNCwoDJ4mHX1_tKajadFx7rNRbKu0-dqCXg3uoYEYJIgddUSODDFL-7uZ7fX2Pb1Y1wmOK622ADngTs9FvZZGDsiNh9EsFUcTzwi90WMDPUbnFN2aMzlMEw_L2j7BHzrmn9KKEomuHw353RG0ObvVfeji8kGQM-TfF9kokHqA-dUkJtsO_iuVt3qheClPvOPj4JwVrhRvNOgm83wiOkhySfgRzhBJCXIXzd75KqyH7WJxGOnqMoigqIUqghYhUjo1C0O9vf3BmhXGD4wYTZUR4aGfpppa0zQBs0JBjl-ggrv3OO3dx8vH2JiLoTkiOy7PWazXy5qPurbzdMtJnVs7iaRRvhELmMnknwZZzikvjI2aos16ec_dCpe7FRVP6JKt5bVP4E_nhzJ_6QY38qnuGJ5YiUgxZ9sZ2x1k-PKPzbAyUToDIlGYkGb3vTnst8lafnUqju-Xyjur6CeRvzYF3oMjEunWJWebVmeLVq3dYA5atHIeVKNG3_fKEhvj0VqnUSkeW42YyhZJ6mKJkX-QE_-xp8NSwI3kIOGTkesZGfQh53exOurI7gimNy0yLHGxv0CEj97Uss2J3l0PqgabUVz4gsDRUWAjYpUDIfcVBOoUlZrBNMa59xA5TjvXyhqLcu9h4fEKpXCHGNV0qupKZ8xXVDRa-LUMFdX9zYDaM9XBwX3qRBdj_FpgmlTCqo8m8LpdBlH0oeczJvM1pnfE1H8_YWmkW7e9-6O2qHGdwazcDavqa_XkELioM6Sl59pX-ihmft4hXuyapL6th2Pv8AtpN-suc_ID2cyBSMSmret86-ShaBowmJ5IhETui3kPi1pAkprFsJB8Y_cFafVrXwj9vFcQsOjgrZlyjNYaVbnwOmTccLHbLAznTg_w6LwEW_8htVjAWygl1KzR7DmmbUp7_xhT-faF6TiWjJsWgVS98WrWce3qvlYWFy6HAo_Amdr1g6cT49dp4xeNt506l3TSs_7_I4RB6o2YC7EbWhZvdOrfWrWB5N8OMaa7smBOyCsi28qr_SjVB-AjwYeF17p617u8UtNNrs7u_nLy8AP5VQjMFEqOxIKIgz9kWhvk6kuaJyZ4W9pYpuwEyyw77TzzmZPQsTmibriiJlHLJs5Oo4I3qmbjUHedrhE4-pF3q_iz3_-V-S5S68zx1LEgifKDJZmqVFWhf1-O0nqPCWh3-QffPxdqENHFOdBConXE_WqpTyLMp_j-j_t2n0h7Y3H2__VuYLzeEXUMcKB_0mAldHk4mm0eRxHbZCHvSLV164Oaet0-Y0Z32Hb2Js6PKzzQXPxJgqEh3Phar8trnwws3iKwn-DgY_F8r_jbK8FcZVOQljEh-FcZlw-hX55pQi_39En45_T-GE48m7KIujhOTFyEXTheC9Ey1Ioabv6_2e5wdYnwr-z6zxbynbBpz5F94A-peH41Zay_edazu3FPIEyL9U_Rl35sbQnS8dqxs4kd1GqNfPp0N763hftt-ZThb9OcyYRo916XUF08fKqaeebt3KaT1kot6LX4Xib7X6CEasBZiXdrWv-ea_P2qv9X3rrox4AvNq-c5JXkxiNjmK2TWJCdatu6VC_aetTSoST1Zb5Gj3lVS8ivBqJUXNVtZR41aMSrnab-8x273egBy2OE916g-zws5pfhg1Ox4V0iicBK6EEu54oP7Wo58H9H5HkXhQEh1A81OgE1dOeXESPCkqb_YB--UFIOPrMiNRGUdVhntUr-n-iCiw7Cv3JM9rbRyEWcW0gXDuBPygwdEBZLg-bIXF4VgLC4sZ7ewXD9pPH40x3TRe-uWakpTESUXKiEQkgzIlaZbSJAaeRbxe0zpPkziJhiOybx6oltrHH485y6K0WMcxKXgeZABgVZGvaU0p4RUnEYvjEU6I2wdDlV1r0_ho6t-VEVnuX1hFI34DE44kSHITx1V87q9kT-GQoWYLA9TBO3WpO8XtnTNzzlEe4YbusAHXmXDK-Qu46_444c6ZhVbWUeWun1uD8mjyKwTGMEojJR5FuLkSVP3lVzxuccYvEl4lFT2Di7ggURmVJcnPthdlTViWFDHL6wSAsJSXpEzXOS8znucVORMXJCJpVMQkLkkRZbM14WuWlFmcVJxkCUFpBA0VchYOxbXZnIWIuKjKvMjOJK1B2vALDUKGHKt7pmi_P0oIIgtESDgEPdfq_IlKwX1xdnVmLoZEsrEojaSwzh7GccLJ8OOPvQAou_qxB8VnnZEX338S3HP0dEH-GQAA__-L6KIJ">