<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">