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

    <tr>
        <th>Summary</th>
        <td>
            Can't splat undefined conditions
        </td>
    </tr>

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

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

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

<pre>
    https://github.com/llvm/llvm-project/blob/5d4a0d54b5269bad1410e6db957836fe98634069/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp#L2288-L2304

Alive2 report: https://alive2.llvm.org/ce/z/k4KWVu

```llvm
----------------------------------------
define <4 x i32> @extract_cond_type_mismatch.2(<4 x i32> %x, <5 x i1> %condv) {
#0:
  %cond = extractelement <5 x i1> %condv, i32 1
  %#1 = add i1 %cond, 0
  %r = select i1 %#1, <4 x i32> %x, <4 x i32> { 0, 0, 0, 0 }
 ret <4 x i32> %r
}
=>
define <4 x i32> @extract_cond_type_mismatch.2(<4 x i32> %x, <5 x i1> %condv) {
#0:
 %.splat = shufflevector <5 x i1> %condv, <5 x i1> poison, 1, 1, 1, 1
  %r = select <4 x i1> %.splat, <4 x i32> %x, <4 x i32> { 0, 0, 0, 0 }
  ret <4 x i32> %r
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:
<4 x i32> %x = < #xffffffff (4294967295, -1), #x00000000 (0), #x00000000 (0), #x00008000 (32768) >
<5 x i1> %condv = < #x0 (0)    [based on undef value], undef, #x0 (0)  [based on undef value], #x0 (0) [based on undef value], #x0 (0) [based on undef value] >

Source:
i1 %cond = #x0 (0)      [based on undef value]
i1 %#1 = #x0 (0)
<4 x i32> %r = < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00000000 (0) >

Target:
<4 x i1> %.splat = < #x0 (0), #x0 (0), #x0 (0), #x1 (1) >
<4 x i32> %r = < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00008000 (32768) >
Source value: < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00000000 (0) >
Target value: < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00008000 (32768) >


----------------------------------------
define <4 x i32> @extract_cond.2(<4 x i32> %x, <4 x i1> %condv) {
#0:
  %cond = extractelement <4 x i1> %condv, i32 3
  %r = select i1 %cond, <4 x i32> %x, <4 x i32> { 0, 0, 0, 0 }
  ret <4 x i32> %r
}
=>
define <4 x i32> @extract_cond.2(<4 x i32> %x, <4 x i1> %condv) {
#0:
  %.splat = shufflevector <4 x i1> %condv, <4 x i1> poison, 3, 3, 3, 3
  %r = select <4 x i1> %.splat, <4 x i32> %x, <4 x i32> { 0, 0, 0, 0 }
  ret <4 x i32> %r
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:
<4 x i32> %x = < #x00000002 (2), #x00000000 (0), #xffffffff (4294967295, -1), #x00000000 (0) >
<4 x i1> %condv = < #x0 (0)    [based on undef value], #x0 (0) [based on undef value], #x0 (0) [based on undef value], undef >

Source:
i1 %cond = #x0 (0)      [based on undef value]
<4 x i32> %r = < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00000000 (0) >

Target:
<4 x i1> %.splat = < #x1 (1), #x0 (0), #x0 (0), #x0 (0) >
<4 x i32> %r = < #x00000002 (2), #x00000000 (0), #x00000000 (0), #x00000000 (0) >
Source value: < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00000000 (0) >
Target value: < #x00000002 (2), #x00000000 (0), #x00000000 (0), #x00000000 (0) >

Summary:
  0 correct transformations
  2 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWN9v4jgQ_muGFwvkjPPzIQ8tFOl0K53UXe09Vk7sgHshRrbD0fvrT04CBVo4umqrPWmjlVeMx-P5vvH4U82tVYtGyhyiW4hmI966pTZ5oZvFY9s8jgotnvKlc2sL7AZwDjhfKLdsi0mpV4Dzut7s_huvjX6UpQOcF7UuAOeRCDkVUVhEGGcFF0EYUBmLIouSlMWVzNKYhTTODuIov-6b4Y2ttFlZwPlvjXVTvSpUI49_fZW1LN2kXK8B2RfENB1_QUZDoDOgN_14U6uNRGLkWhsH7IYcQ-Hd9MRvPtFmATgv_Sb_AM7_Cn__83t7GAti2v_rcu1M4yu_3lvISjWSAJuGZEsUQ2B3BEIqt87w0j2UuhEP7mktH1bKrrgrlxMETE_8MdoCTn2UyFuDwegXbwAzAsntkC8y6pF2P8jOhwCbkWFHWcuVbNy5WFO_JwkOAgCyoAvAhSAq2Pl6V3rgZjof29VncPMrh7RfB3NoTW4J7WPuBwLJbNjBSPcyjBkw77yAzYDd_QS8A0YTu6656zlZtlVVy40snTbneT-aWGtldePNwelwhvJd5ru4fQLvRP91_O9bmDulGyK0tA1g4shGGlU9AQaHrXV3f__HvW_P77xuJdmV4chly1frWu6JfYmkYwDYlACybTV8BDANMQuzOMEs8ljGAWDWoUa2pcPn3eiV9nSwM0zitKv87qC9Ws-jtJ4D0gyi24JbKYhuSNsIWZGNRw_RzO_WWfbbXr3so7wPQHbjV92a8rkaz3dBD_f6LA6W72-Xk-Wvltsc8_oDdbzGfgr7GzcL6V4cwuNGO1PxF3yfM3gy0uD0ZH0W_PPHu6_5UDp284nk97R_7M4X2vpgfH_Fv6w14Ttq_Guxeo1nl8V7p_Gfph5vVe935vCSYL9O4tHEs2Cz0-GXYJ8T7KEz0bcgXtGyPyjwL6_U9xDrj_TuLR8qv_9bcd0r5fXieuEkXIZ_9cl8O_yfVlg_EPOAvF2tuHk6uH4pKbUx_lJ0RzeS3TkgUc1_uFBScVVLMXZ6vDZ6I887Dg8E0hht7Mnf-SORM5GxjI9kHiSM0ixmYTZa5qyUFc8SESY8jeMkwDjIaJGKOE6FLEQ5UjlSDAOKKfVT2SROaVnRSoqExZmQkdevFVf1_ulhpKxtZR4ELI2TUc0LWdvuTQaxkX-TbhYQIZqNTN69thTtwkJIa2WdfQ7jlKtlPuX93d13TNfyqpGC-BtCdQyMWlO__V2nS8MCzoc8Nzn-GwAA__9Xx5RQ">