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

    <tr>
        <th>Summary</th>
        <td>
            [DirectX] Legalization of memcpy is triggering a src/dst array mismatch assert
        </td>
    </tr>

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

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

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

<pre>
    The memcpy legalization(#137188, #139173)  appears to be incomplete. We are seeing 8 instances of this assert:

## Assert

```bash
Assertion: (DstElemTy == SrcElemTy && "The element types of Src and Dst arrays must match")
Function: emitMemcpyExpansion
File: DXILLegalizePass.cpp:289
```

 ## The following tests are failing:
```bash
clang-dxc DirectML/Product/Shaders/Generated/CumulativeOperationSummation_256_float16_native_accum16_8.hlsl -E CSMain -T cs_6_2  -enable-16bit-types  -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=2 -I DirectML/Product/Shaders/ -Fo validation/CumulativeOperationSummation_256_float16_native_accum16_8.dat
clang-dxc DirectML/Product/Shaders/Generated/CumulativeOperationSummation_256_int64_native_8.hlsl -E CSMain -T cs_6_0   -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=0 -I DirectML/Product/Shaders/ -Fo validation/CumulativeOperationSummation_256_int64_native_8.dat
clang-dxc DirectML/Product/Shaders/Generated/CumulativeOperationSummation_256_uint64_native_8.hlsl -E CSMain -T cs_6_0   -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=0 -I DirectML/Product/Shaders/ -Fo validation/CumulativeOperationSummation_256_uint64_native_8.dat
clang-dxc DirectML/Product/Shaders/Generated/CumulativeOperationProduct_256_float16_native_accum32_8.hlsl -E CSMain -T cs_6_2  -enable-16bit-types  -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=2 -I DirectML/Product/Shaders/ -Fo validation/CumulativeOperationProduct_256_float16_native_accum32_8.dat
clang-dxc DirectML/Product/Shaders/Generated/CumulativeOperationProduct_256_int64_native_8.hlsl -E CSMain -T cs_6_0   -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=0 -I DirectML/Product/Shaders/ -Fo validation/CumulativeOperationProduct_256_int64_native_8.dat
clang-dxc DirectML/Product/Shaders/Generated/CumulativeOperationProduct_256_uint64_native_8.hlsl -E CSMain -T cs_6_0   -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=0 -I DirectML/Product/Shaders/ -Fo validation/CumulativeOperationProduct_256_uint64_native_8.dat
```

## Example of one of the call stacks

```gdb
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.\tProgram arguments: /Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-dxc ../DirectML/Product/Shaders/Generated/CumulativeOperationSummation_256_int64_native_8.hlsl -E CSMain -T cs_6_0   -O3 -D DXC_COMPILER=1 -D __SHADER_TARGET_MAJOR=6 -D __SHADER_TARGET_MINOR=0 -I ../DirectML/Product/Shaders/ -Fo /Users/farzonlotfi/Projects/ClangDML/tools/validation/CumulativeOperationSummation_256_int64_native_8.dat
1.\t<eof> parser at end of file
2.\tCode generation
3.\tRunning pass 'Function Pass Manager' on module '../DirectML/Product/Shaders/Generated/CumulativeOperationSummation_256_int64_native_8.hlsl'.
4.\tRunning pass 'DXIL Legalizer' on function '@CSMain'
 #0 0x00000001093d4768 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x104980768)
 #1 0x00000001093d3164 llvm::sys::CleanupOnSignal(unsigned long) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10497f164)
 #2 0x00000001091b0d8c CrashRecoverySignalHandler(int) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10475cd8c)
 #3 0x000000018ea24624 (/usr/lib/system/libsystem_platform.dylib+0x1804ac624)
 #4 0x000000018e9ea88c (/usr/lib/system/libsystem_pthread.dylib+0x18047288c)
 #5 0x000000018e8f3c60 (/usr/lib/system/libsystem_c.dylib+0x18037bc60)
 #6 0x000000018e8f2eec (/usr/lib/system/libsystem_c.dylib+0x18037aeec)
 #7 0x0000000104e3241c legalizeMemCpy(llvm::Instruction&, llvm::SmallVectorImpl<llvm::Instruction*>&, llvm::DenseMap<llvm::Value*, llvm::Value*, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, llvm::Value*>>&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1003de41c)
 #8 0x0000000104e2c4fc (anonymous namespace)::DXILLegalizationPipeline::runLegalizationPipeline(llvm::Function&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1003d84fc)
 #9 0x0000000104e37f9c (anonymous namespace)::DXILLegalizeLegacy::runOnFunction(llvm::Function&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1003e3f9c)
#10 0x0000000107699f58 llvm::FPPassManager::runOnFunction(llvm::Function&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x102c45f58)
#11 0x00000001076ae2ac llvm::FPPassManager::runOnModule(llvm::Module&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x102c5a2ac)
#12 0x000000010769af68 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x102c46f68)
#13 0x000000010a220954 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::__1::unique_ptr<llvm::raw_pwrite_stream, std::__1::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1057cc954)
#14 0x000000010ab8ef40 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10613af40)
#15 0x000000010e51a068 clang::ParseAST(clang::Sema&, bool, bool) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x109ac6068)
#16 0x000000010aba0588 clang::CodeGenAction::ExecuteAction() (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10614c588)
#17 0x000000010baa2f88 clang::FrontendAction::Execute() (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10704ef88)
#18 0x000000010b912b2c clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x106ebeb2c)
#19 0x000000010bcaa748 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x107256748)
#20 0x0000000104a64e00 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x100010e00)
#21 0x0000000104a5db18 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x100009b18)
#22 0x000000010b30c1d4 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(long) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1068b81d4)
#23 0x00000001091b0180 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10475c180)
#24 0x000000010b309d48 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1068b5d48)
#25 0x000000010b251b0c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1067fdb0c)
#26 0x000000010b252868 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&, bool) const (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x1067fe868)
#27 0x000000010b2a9658 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::__1::pair<int, clang::driver::Command const*>>&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x106855658)
#28 0x0000000104a5b600 clang_main(int, char**, llvm::ToolContext const&) (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x100007600)
#29 0x0000000104a83da0 main (/Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin/clang-21+0x10002fda0)
#30 0x000000018e64ab98 
clang-dxc: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 21.0.0git (git@github.com:llvm/llvm-project.git a9b64bb3180dab6d28bf800a641f9a9ad54d2c0c)
Target: dxilv1.0-unknown-shadermodel6.0-compute
Thread model: posix
InstalledDir: /Users/farzonlotfi/Projects/llvm_rel_with_deb_info/bin
Build config: +assertions, +asan
clang-dxc: warning: dxv not found; resulting DXIL will not be validated or signed for use in release environment [-Wdxil-validation]
clang-dxc: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-dxc: note: diagnostic msg: /var/folders/c5/8k67fxsn7gq5d835vtqt_rcm0000gn/T/CumulativeOperationSummation_256_int64_native_8-8d8479.hlsl
clang-dxc: note: diagnostic msg: /var/folders/c5/8k67fxsn7gq5d835vtqt_rcm0000gn/T/CumulativeOperationSummation_256_int64_native_8-8d8479.sh
clang-dxc: note: diagnostic msg: Crash backtrace is located in
clang-dxc: note: diagnostic msg: /Users/farzonlotfi/Library/Logs/DiagnosticReports/clang-21_<YYYY-MM-DD-HHMMSS>_<hostname>.crash
clang-dxc: note: diagnostic msg: (choose the .crash file that corresponds to your crash)
clang-dxc: note: diagnostic msg: 

********************

```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWltv2zq2_jXKC2GDoi6WH_Kg-NJmI5kEsffs3SeDopZsnkqkNkk5yfz6A1JWLTmXSefUPRvFFAGsUiS1vsV1-UguqjXfCoBLL7ryCLlmcge5ksIjxIvmF7QxO6kuC6r-JUV5kcn8-XK9A1RBxepnVMKWlvxf1HA7IvFI4AcTP0k8MkPuP1N_EnhkihCta6BKIyNRBogLJqu6BANj9AcgqgBpAC62KEFcaEMFA41kgcyOa0S1BmW8IPWw-yOBRwKUtq1tU4zbv4zqnYfT9p0VKkiRR5K5NosSqvUz8oK5F8zRSrGugcQeiZFHiMUFJVQgDDLPdSvASjFERY7m2iCqFH3WqGq0QRU1bGeVRKYeTpeNYN3noOLm1qln8VRToW0zTpe8BPt2_uf1zU2rNbinWo9ZXXtBSpJpH0aLCh2QWsEKWZby0WrIgDbaqaygvORie1DMiQpYScV2lD8xNOcKmLm98cjyXsm8YcYjy9WO5qC0R5afQICiBnKPLGdN1ZTU8D3c1baRS7Fqqso9bEgUb4pSUuPHG-E6bShjTeXHm2S8K3WJRgs0W91SLtBojZjexBuC0AgEzUoY-XHGzahVLBrdBWg0R_M_Z5vZ3e399c3iwQvmvm3bbFaf0_niYbNOHz4t1pvb9Lc7-zJ-9eX1P9xLgkbX_w4oGi0l2tOS5wd7_T_Azak5m465MHHYffJNzWL047WIz6PFE0Dn1F3zyynvFNGP1d5hyJvGHpBfyLc_BPZ8-v0FTPMdOOfT26_g0-_haTV3kvsPqX_xRC1PskxECmgZESBGyxJpQ9lXfcJ_tnnm4fT-ZpGuFkg3WcUNoihrtkhBLZWx_GtnTK0taSBLjyy33OyabMxk5ZFlWe67n1Gt5P-Aw8q1bsBBtUyIC1Y2ObSCKKp3KKPsq1GUgaV9tYJaSQZaQ460bFTbbEdSrSXjdtGRagTSTPHajD2criwUlDdV3XIZPPaimblXcqtohajaNpaU6ZbMLX_XreIPpFSagrdLY8XVB_E3CsrNIze7TQ7ZhotCemSZcbs8Rxsdjz2y_IVS90fwOHP9iBZnVk1zN4-RsrRNPyDt-25pvWAGsvCCBaqp0qAQNQhEbu27sEQZp8T1m8kc0LZdgZZHB679oRHCcuGaao08Mun4N7KUGt1SQbegPDJBUqBK5k0JttfPWG77GQ-n4atiWvKPOvbfyVd0sntk4oW4tRX73G4AMMJPuP3n42mQh5M4Qc5Pg9QLUv2s24d7xYVxjrRuXTE5dlL0cSO1UUArt92ZIS6M3Za5PdsPcijie-QKP_k4nCZ4EiftzshtA08gBH4cvgZhVgIVTX0nVnwraOmRpBFud5qjUortGQWeFH4cHgUmA4H9DOcJQzMb6x6AyT2o51bCz1TkpV3I5Kz6nEQsT9hRvKAnXgKUhDEJD59utLLz88wjS_2sDVTtf9vnTV1SU0hVjfNn18fOn-CQspj04IeD-adAk4R9cH6zU0Dzk-knJOmLHw2mT4qAxfhj07PhxMEkYzE-ThyfTEwAPij3i4kpQE_iSd8eQghI6LPu7ANuoZrVzwN_uxbaqKY9EWj97fhuVdGy_CcwI9V1VZdeMHtjXOoFixej5yA03NJ6MOyftGzADhh0fb21m-DaGtxbk-wlz93X-yNzMJSXw1nuKVffI0qw6ECdyVdwkEPo95YuGS4dYWHhbIIKKZ4r2WgkaAW6diFzekB3PKNpyRuvoeQCDsG0Ea--7BvAt_Og80JNwqIHdXpipZNi-j1Qwf6y528g78QRxU-HBkExPUCzCWSQBCfxdFpE_SS4vLd5v0v7fwMAhIVRESVHAP4QAAVC2QcA3DruMhC_azqn8BEltKd9cqJ9WgwoSNmzmx6MNrodoPx0CGFcxD3991MmpoTgaRQiN6gVCSpurij7CiK_a0zdGI8kvdczWdW8BHV9OJs-xOVBjxw-gbirrWnpl1HfKC62D1AMmztNpCezHURJD4baH3ItjGo038MDFDNh7s0wAO-LA5la8hJWbaZrI7k2eftms_Hbh0bwvxrY1CdTWLZYPypuYNNxxtdG51DQpjSbHEow8G9mOAT-10DOpNBNZVlUejZ7iCaMTaPwaA_hwB6yBIoQvyeba2zp3lpRoUsX-38X_MRQ0tV6JoWBJ3NO8479gBYhPsLpUyoMkU9xnPTh3NtdVrpaD4VdQUUPlppJWR5_zyT2lLIY970yHq4CxVGSvOJUaXe34gXp4glYY6DzjOSMOg5ZlPSEHZDAjFJSDIVdKrvw35y2L-055ZzgEIq-nAPGk019khGG3otlr-r1bWDntGvIICO9zDOgNBmjdBIOdH6Q-ghpLxl9ieBl-D5fqJmQKJ6Ex_UgA-4S0jgEjBFj_qZy-_xeXkyVos82RwQztqMKMSm06TYCMzRs62j6GaG4YIKPYYb4QyhRnvkJ6tZg5q9d8Eje2-u8xHWSKO0chwja9Tsjz8R4mvm9tRownSzAzM9Dp-aehN15zUa5lXJvWwd3Wc52YbQsM8q-bgphMR8NMVd832WT2cyfyaqiIj-NFa9axMsELB3XoMMt5JFofEu5L0dmVHNmU7O7PXaL8npH-2ZjFOVGd_3empOWpfU9qXodbd_0mFacpbaL6oZ4JNxg1yk56_lOnGSJnx-zPwlOz3f8BPdWeHDS06Vz9-ahEStaQDnc7r9vEec8FvKTnneGJ8Y7zYfB8r_G1xrf2Ywsyvtxf8DJMhL5GWZvLodLUPQFcejWaJDNTgbaDr1QOXvnG_2u6YD5nVc1kyLP8DGtk_hENSSJ37bUN1Tzm8z023r5TWY3XJuBXt7LSy9Nqm6PttzB7sd1ejzg-lmahaTHqMmQpBI6jaM3NTvvPQ-I1CsM6q0V-f_Q7NmyRBTFvTMbkpywnSzGhz1iR906CC6EpS-OPX82l5nEfbI2PA6kSZBTjKzg5_o-KXJ6_P7g4iqBOKTZNEH9EgFXLKeUDdppq1dUHLYaiB2Wv6C8hBxZCRA8cavHHJAfuPuORgMa7ZGRSAMg3iP_0-47aA9KcykQ8cd4jLfcOeKWGy_EvZvvIH3l5ntse9NpFodZFvgJzmkW5yTJigRjGod-MaVTmkdhTlgX3NZUbcFyBZQ_8XLvj_GoEV-FfBQj7a4YK5lDGY_xiMmqtgkXp2t3ZYLcGzuylpo_edhdBtCyhHzO1Q-5-cbpVcNL51IF37ZTXtGuUlK3NZtXVFNxukqPVIm20BDlT3skpEGFbCx3uEIKdFMaLrautBE98rJ0HTLoiiIgR1Khw0VeIRWy68YFUlAC1YBA7LmSwtVdetHV6A-ru1HvrjmanwokpHHVlDmnWyG14QxVuoWE084V_6M_V05xqJ9I1-t09hmtPy_Q8u7m5u6P6398Qsvrm8UKre9c89Xvn9DD4v7uYd0WLty_VvyQaOv0bxZAfOugADkWAzmih2rXj4Imy70NQctClod7bBZ5ZJl8jSfFkxaT7V9RngTR3vxlNopV1ie31ofX33_LPUryJJxM28vuv7WEwzLY9-WbDQtZENff1oK_cId3Yb7uozc8U1Q92ye51a4MoRv74ApzdC-ibrxg9uXLly-j29vRfD76_Pn2drXygoVt30ltBK3ACxZjV33zPcIlbCelbkt32tGu3AKZHbWRVSnQtRS5q9J-lo1q63t64fRj_vcjXPBbRdNFfhnk02BKL-DSn4RJkPhRjC92l9M4CMKcZckExzFk0wCmCcU4DPJpnvkkuOCXBJMIR2RC_ICEeIx9CGgWhXkSZzjOYy_EUFFejm3YHEu1vXCVTpd-6MeT4KKkGZT6UBgv4BG5t4fCeHXpUkXWbLUX4pJro4_TGG5KV1HfFpv86UVz1L8zRLLoKui5Rkbx7RbsdghRpBXzyDLvqs1RxbUrNT8UwV80qrz8zwu4Dsj2l-R_AwAA__-c0hoZ">