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

    <tr>
        <th>Summary</th>
        <td>
            Wrong case of `select` folding of symmetric select
        </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/1ceccbb0dd9d8539fec2213566fe6cc2a05b7993/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp#L3009-L3033

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

```llvm
----------------------------------------
define <4 x i32> @select_of_symmetric_selects_vector1.2(<4 x i32> %a, <4 x i32> %b, i1 %c1, i1 %c2) {
#0:
  %sel1 = select i1 %c1, <4 x i32> %a, <4 x i32> %b
  %sel2 = select i1 %c1, <4 x i32> %b, <4 x i32> %a
  %#1 = xor i1 %c1, undef
  %#2 = select i1 %c1, i1 %#1, i1 %c2
  %ret = select i1 %#2, <4 x i32> %sel2, <4 x i32> %sel1
  ret <4 x i32> %ret
}
=>
define <4 x i32> @select_of_symmetric_selects_vector1.2(<4 x i32> %a, <4 x i32> %b, i1 %c1, i1 %c2) {
#0:
  %#1 = select i1 %c1, i1 undef, i1 %c2
  %#2 = xor i1 %c1, %#1
  %ret = select i1 %#2, <4 x i32> %a, <4 x i32> %b
  ret <4 x i32> %ret
}
Transformation doesn't verify!

ERROR: Target's return value is more undefined

Example:
<4 x i32> %a = < #x00000000 (0), #x00000000 (0), undef, #x00000000 (0) >
<4 x i32> %b = < #x00000000 (0), #x00000800 (2048), #x00000003 (3), #x00000000 (0) >
i1 %c1 = undef
i1 %c2 = #x0 (0)

Source:
<4 x i32> %sel1 = < #x00000000 (0), #x00000800 (2048), #x00000003 (3), #x00000000 (0) >
<4 x i32> %sel2 = < #x00000000 (0), #x00000000 (0), #x00000000 (0)     [based on undef value], #x00000000 (0) >
i1 %#1 = #x0 (0)        [based on undef value]
i1 %#2 = #x0 (0)
<4 x i32> %ret = < #x00000000 (0), #x00000800 (2048), #x00000003 (3), #x00000000 (0) >

Target:
i1 %#1 = #x0 (0)
i1 %#2 = #x1 (1)
<4 x i32> %ret = < #x00000000 (0), #x00000000 (0), #x9193a504 (2442372356, -1852594940), #x00000000 (0) >
Source value: < #x00000000 (0), #x00000800 (2048), #x00000003 (3), #x00000000 (0) >
Target value: < #x00000000 (0), #x00000000 (0), #x9193a504 (2442372356, -1852594940), #x00000000 (0) >

Summary:
  0 correct transformations
  1 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV19v2zgM_zTKi9BAovwnevBD2zTAAQMO6AbcY2HLdKrCsTJJzrX79AfZjhunSZYNdzvMKBqZon4kf6RkKndOrxvEjMR3JF7O8tY_G5sVplm_tM3LrDDlW_bs_dYRcUtgRWC11v65LebKbAis6nq3_7nZWvOCyhNYFbUpCKy4QqWKgpWlLBexkBUqAC7iJKkwUQpyFheplOIAR4d1X2zeuMrYjSOw-qNx_t5sCt3g9O0z1qj8XG23BMQnwZi8-SSYEIQtCbvt_9_WeodALW6N9UTc0mkoeTc9D8bnxq4JrFQw8o3A6uvXxav7dohFEtb_db52opsrn167xEo3SIm4j-gr1QKIeKAkYq4L5MlUT-5ts0FvtXrqZe5ph8oby-dAYHG0EOKcwP0xHMRFkGoehoofjIGApCS9G6IBwQIP3QsNCg5rTolY0t72BOJq0xM4uBquOGPkHY6A6L17NXaC1TYlVlPFs3b7cYCa8PK-2KL_uDYgnvQvhHhugu9Re8gjBYt-SEO6HAZiScTDb1EoYypOM9wn5DS_Y3KOs7hPy8-m4jv1eGUSxoMn99o0tDToGgKppzu0unojwA8PhIfHxz8fw6HyJbdr9ARSFwy1tqG7vG6Rakc3xmLPiG6wnKx-zTfbGkdqP4bUhU9EIEe8suGhBBaMgOxJOy0fM3BKgY5l9pGu6y0uejmwaPHRGRGmxAUn333Y10Bn-WAr72un9yhAjG4ccPjZtFZdoHA80n5pTCfPiZ9O5kk5kyS-K3KHJTVNz1tfcyReXkv6uI2P6L0EPV1-Pjsnttr_kId-T_ebc18jl2M_E16QLPi_FN4JueRS5DGLurCjCEQKIk7C7A1fxBDLSEaXcN5j7nfEkDBx-2sJ76n-QeP_KR0DKe1mk9u3g68Yo8pYG74rfnLku70Cp7r5jgqjVa5rLG-8Ca3vDs8rDm0oWmusO-omZ2UmSilkPsOMp4LxJOILOXvOKlQpKiWlKpkoypghYBKzKC4TLGURzXQGDCLOQDLOZCTnaZSyJE0qSLiqGEoSMdzkuh4b3Jl2rsWMcyElm9V5gbXrOn-ABv-m3SwBCBcBm3U9fdGuHYlYrZ137zBe-xqzv6xp1lTlDqmpKEmG_oQkjFamLnWzDvKxVRm-5LPW1j9-o-hcC9eBwfddBv8EAAD__0hYM94">