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

    <tr>
        <th>Summary</th>
        <td>
            [HLSL] `select` not resolving correctly for complex cases
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            HLSL
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          llvm-beanz
      </td>
    </tr>
</table>

<pre>
    HLSL currently allows much more flexible overloading of the `select` function. The following is an example of a case that DXC supports which Clang does not.

```hlsl
typedef uint32_t4 uint32_t8[2];

export void filter(inout uint32_t4 output, uint32_t predicate, uint32_t value) {
  output = select(uint4(0,1,2,3) == (uint4)predicate, value, output);
}
```
[Compiler Explorer](https://godbolt.org/z/v9sqqzG5r)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxckk9vpDgQxT9NcSmlBUW7Gw4c0rDsHnLbPextZKBoPDKY-A_p5NOPTHryZyRLtqz3XrnKP-mcui7MFYgLiCaRwU_GVlpv80PHcnlLOjO8Vv88_fuEfbCWF69fUWptXhzOoZ9wNpZx1HxTnWY0G1tt5KCWK5oR_cQIp9Sx5t7DKcUxLL1XZjngfxPjaGJQ1CqHckG-yXmNKSNK7KVj9JP02Pxfowvraqx3-DKpfsJay-WKg2GHi_EHSB_jOqXva9JOQ_roX1ceeMSgFp_TD3_8OBUgLgSigfzybuVbTMfNqAFHpT1boEItJvgvbhP8GjxQ_XGHq-VB9dLzt9tN6sBAJcI55uPdiZA3eJ8FFVF9BCpSoDoDqgmozndT3kThp6T8VuUeXn88p7x3cW6-ziCexaU286o0W_zrtmpj2camqZi8Xx3kj0AtUHs1Q2e0Pxh7BWrfgNqtdM_Pb38LC1QmQ5UPZV7KhKvsnJeUkTjlyVR1566UQ0YdleIopTgfs5KOnMuuOOVZWiSqopRESlmaFbkQxaEsqCfBdBaFkGXRwTHlWSp9iLzF8olyLnCV0Umc00TLjrXb0SSKCALFT0t-8xmuDo6pVs67zwSvvN5x3g2i-c7fYjxadkZvkbreWMt9JHo0FnsT4bvt4LkkWF39MSblp9AdejMDtbHefXtYrfm5_2m7P98BtfcOtop-BQAA__-fyRHe">