<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129003>129003</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[HLSL] reflect, distance, and length intrinsics are not restricting vector size
</td>
</tr>
<tr>
<th>Labels</th>
<td>
HLSL
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farzonl
</td>
</tr>
</table>
<pre>
https://github.com/llvm/llvm-project/blob/556eb8244201a81fff7b246561a677a782b69fa0/clang/lib/Headers/hlsl/hlsl_intrinsics.h#L2084-L2093
https://github.com/llvm/llvm-project/blob/556eb8244201a81fff7b246561a677a782b69fa0/clang/lib/Headers/hlsl/hlsl_intrinsics.h#L1446-L1454
https://github.com/llvm/llvm-project/blob/556eb8244201a81fff7b246561a677a782b69fa0/clang/lib/Headers/hlsl/hlsl_intrinsics.h#L933-L942
The fix:
we need to exclude vec1s and limit to vec4. the apis should be updated like so:
```hlsl
template <int N, typename = std::enable_if_t<(N > 1 && N <=4)>>
const inline vector<float, N> reflect(vector<float, N> X, vector<float, N> Y) {
return __detail::reflect_vec_impl(X, Y);
}
```
Long term we will want to support long vectors we may want to do those like so
```hlsl
_HLSL_AVAILABILITY(shadermodel, 6.9)
template <int N, typename = std::enable_if_t<(N >4)>>
const inline vector<float, N> reflect(vector<float, N> X, vector<float, N> Y) {
return __detail::fmod_vec_impl(X, Y);
}
```
For this ticket though we will only restrict the vector range.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVU2L4zgQ_TXKpeggl_x58MGTTJiG0Jcdlu1TkO2yrR1ZMpKcnp5fv8jpTS8sfRhY2AGBlKjq5ek95Ul6r0ZDVLPsE8uOO7mGybp6kO6HNXrX2v61nkJYPBMNwxPD06jCtLb7zs4MT1pf_54eFmf_pC4wPLXatgxPWZZTW2KaIk9kmQzDULSY5lmeyLwoZFFim1eD5AxPnZZmjEAqNn4h2ZPzDE-T9vptuigTnDJedX4_MRRn5GX6cEZeCcYbxptflGaSpvnDOUmz9JemWQnxcK5SvJH8OhEM6nukyZsXAkPUQ7BA3zu99gRX6hIP0vSg1axC3LpSl-4hTARyUR78ZFfdQ0uwLr0MFCu_EXh7w2Q5v42NE28CzYuWgYCJgzIBnhgeILwuZOQcvzyCD31sFQ0Z2Wq6qOESmDgwLJ-Aic-QAMOcYQ7x44GJY8qwYuJzHLzprPEBlNHKbOyDdUwcBm1liL_0FBEcDXqTvPyg4I-4-mDvmWEFrPjEeAPgKKzOwOXSU5BK33i_wV-u1F3UvGiG5Qb4vPGMjaw4_lOamxVna0YI5GZ4IXhRWsOLNJvifl0W6wLoWHGj5WPRLF_vNb2FMFlPd_X_Lf3ly_m386X5vXk8N58ez49fnxmWfoqXZrY96cgx31eR5X_g0__oCnxgzDDb_qdcOVkHYVIeguq-UYgKr-N098ca_QqOfHCqC9s_4sYOnDQj7Xd9LfpKVHJHdVKkPBeiLIvdVJeUFwXvMMduoKzvhhzbss3zvC9L2QncqRo5Zhyx4BmmabHPMkqKQsgqqaqqLVOWcpql0vsYIXvrxp3yfqU6wYpzsdOyJe23qEeMrjPEGPqu3iKnXUfPUq6VD_4dIaigt-dha8iO74YcoFc-SNNRXG9hQGYME7xnC0hHYGy4y6HuVxW8-kG71emff1-2Q8VAezvXtca_AgAA__-FKhg7">