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

    <tr>
        <th>Summary</th>
        <td>
            Assertion failures after rG660b740e4b3c4b23 when merging vector constant stores
        </td>
    </tr>

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

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

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

<pre>
    This test case results in assertion failure:
```
; RUN: llc -mtriple=x86_64-unknown-unknown -mcpu=skx -o - %s

define void @foo(ptr %p) {
  %v = insertelement <8 x i64> zeroinitializer, i64 0, i32 1
  %trunc = trunc <8 x i64> %v to <8 x i8>
  %p1 = getelementptr i8, ptr %p, i32 0
  %p2 = getelementptr i8, ptr %p, i32 8
  store <8 x i8> %trunc, ptr %p1
  store <8 x i8> zeroinitializer, ptr %p2
  ret void
}
```

This started tohappen after rG660b740e4b3c4b23 (https://reviews.llvm.org/D156349).

Here is a godbolt example: https://godbolt.org/z/hMehqzxs9

Stack trace:
```
llc: /root/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:5781: llvm::SDValue llvm::SelectionDAG::getNode(unsigned int, const llvm::SDLoc&, llvm::EVT, llvm::SDValue, llvm::SDNodeFlags): Assertion `VT.getSizeInBits() == N1.getValueSizeInBits() && "Cannot BITCAST between types of different sizes!"' 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 -mtriple=x86_64-unknown-unknown -mcpu=skx <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@foo'
 #0 0x000000000339de18 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x339de18)
 #1 0x000000000339b70c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f7c0d75e420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f7c0d22100b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007f7c0d200859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f7c0d200729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f7c0d211fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #7 0x0000000003133ef5 llvm::SelectionDAG::getNode(unsigned int, llvm::SDLoc const&, llvm::EVT, llvm::SDValue, llvm::SDNodeFlags) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3133ef5)
 #8 0x0000000003135ceb llvm::SelectionDAG::getBitcast(llvm::EVT, llvm::SDValue) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3135ceb)
 #9 0x0000000002fae2b6 (anonymous namespace)::DAGCombiner::mergeStoresOfConstantsOrVecElts(llvm::SmallVectorImpl<(anonymous namespace)::DAGCombiner::MemOpLink>&, llvm::EVT, unsigned int, bool, bool, bool) DAGCombiner.cpp:0:0
#10 0x0000000002fafcce (anonymous namespace)::DAGCombiner::tryStoreMergeOfConstants(llvm::SmallVectorImpl<(anonymous namespace)::DAGCombiner::MemOpLink>&, unsigned int, llvm::EVT, llvm::SDNode*, bool) DAGCombiner.cpp:0:0
#11 0x0000000003019431 (anonymous namespace)::DAGCombiner::visitSTORE(llvm::SDNode*) DAGCombiner.cpp:0:0
```

As mentioned here https://reviews.llvm.org/D156349#4574616 the problem seem to be related to trunc stores. And we either need to skip optimizing this scenario, or one need to add a vector trunc before the bitcast somehow.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0V9tu4zgS_Rr6pWCDomRdHvzgxHGmgb6hkw32LaCkks0JRWpJKnHy9QvSsmO50zvJbE-jY0m8nDosnioWubVioxAXZH5B5qsJ791Wm0X5p-5wUur6eXG7FRYcWgcVtwgGbS-dBaGAW4vGCa2g4UL2Bkm8JHRF6JKkdPi__4wv4Me_vpJ4CVJWMG2dEZ1EEq92eXqfJtNePSj9pA5PmLZV15N4ZR92MNUwBcLmdsAKvzU2QiE8alEDSWijNWF554wf2BFWAMku9iPBNz0CiVcglOeLEltUDkh8mcMORJqQ-Ape0GihhBNcihc0hF36HqDhJWYQnaA506sqIB7eTpGCOaePrTmJr04md1GYucEDEc9a5N7OK_-9TXo6jb17Wn6YZp02OOJxZH86L_of499wy2EaO0wz6MJGDPuTrd7WQPgNYrKOG4c1OL3lXYcKeOPQgLlOU1pmCcWkjKukZDEQlm-d66wXFlsTtjb4KPDJzqR8bGfabAhbr6J5GicFYcXs1NIfaBCEBQ4bXZdaOsAdb4PqljAGHQYMeC-ErbdfcPufl50tThFvHK8ewBle_VLoUlYe3hPV2hG29jynndF_YnX49A9REra-1DVeoyJsfYMSKx9Iq-X12ees6joSL-dZHu3D57H1xuPlzeqOyx5PW05RQssG3VddI2F5r0KY1yCU85tYaWXdCO2zrghLfd9r69Xd7bhhMHre6I2sJd9YwgrPcnlMDCSld7ezDbob8YKf1IVwlrA8BGi88oL-GvnegPrzEM8nBcLYJVdKO7j4dHu5vLmFEt0TogL33KEF3UAtmgaNj2orXtASFhHGCMtCYsJ6EMb3z1fLmyuwfdkKBxzKfgMGO22cj9czTQi37ctZpduTbRtvprC297bWwJV3bCX7GsFtESrD7RZKXj0EtcxO9VP3bXeUD50RWnw3emN4C9xseh_ZdpCQ7ryVSredkGimuOukNj4G15XkajM9pl879TH9QNi6FCrwrHzWJGzNu84D9a7r3czCdJenU27bqX1Wju9IvBLKofxgQibxpdW98VEwJLbIL-NHr5RQG-i4tUBYtu5VUCN89w1fuOIbTz4DraDVdS_RjxqBsWxwFXsL8N95Cqvl9ZTEV6vlNXxS1pl-b-Io_QG_Odj2FobjIRvyFWExBbqjh39xXNQY5SeCts92__LdCOXCtt2GqGf56yDDn-61dQZ5O8RNCC2v2vz_3DzCLuhuoOUj6sg7OuNdZrSCG7FRXP7BVS09fj7Q2DfbIX_Q8HcEYgNQ1mQVrbM5JozC_b3BcATcGzesYp-oBk1IofrddKP6fUfntgZ5PbN6RgPjKEkYHfGNR2YYiygtwXBh8R34lUdOA3ISU1qOkJMxMqX5vABe6ncxP0FmLJ8XI-T5OXJ23NN3Y2ZsjJmOMaOoqdOPYcZxU6cjzGykhSiOsZn_zcPg7BjYHw6_5TD4bcGwX9_IAfmZA-YVln_lgAvhKu7Xlr9nXb-Tvmc3ol-c0mcNR1YGTXCl1XOrewuKt2i7kHeKPbPV8vpSt6VQaPYNLZoN3viYtd-aS79tXDn7zdxhdSXDOXqyrJZLeYeV0-ZT20kSX37U2hdsv3WfhXoIufpteZxrq9Ra_vws4AT85xTlUx09809TVfhh_zjzHLzzxfvpxEP_vGN-HWNv6G0fl8sP-Wd8FtCoSOLow_55FFa4m9tvP67GHnll9FdM3irylxZ8HSO0X__W1-HvL-LjZJ4laZSGOqozupTYgkVsfYlW-uun5Pu7w3D5CieWncFS1fCEgMJt0YDC_Rj7IDrQnROtePG1hAv3jwoVN0J7f2sDWuFxPK9r4PAYxDAYKLHx1yLPp9ynD7C6xa1-GoqVSb2I6yIu-AQXUVpEaVqwfD7ZLliFSR43BRZ1kzQsyYo540mCacMzWtFqIhaMspjmEY0Yzel8VkXIc55hwRtWleWcJBRbLuTRVZNQdC7SZF7EE8lLlDbc3BlT-ASh01e-89XELEK5WvYbSxIqhXWvDp844SQuluf3d_vrm9jTFhX4dOO9OPinGsJp2INJb-Ti71fRYU3_DQAA__-wLQjV">