<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/153148>153148</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
libclc should remove __CLC_SUBNORMAL_DISABLE and reimplement __clc_fp32_subnormals_supported
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libclc
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
frasercrmck,
wenju-he
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arsenm
</td>
</tr>
</table>
<pre>
This does not need to be a library build or link time constant, but can be performed with a runtime check which will specialize to a constant based on the ultimate use.
The build should compile with `-Xclang -fdenormal-fp-math=dynamic`, and then replace `__clc_fp32_subnormals_supported` with a check like:
```
__builtin_isfpclass(__builtin_canonicalizef(0x1p-149f), __FPCLASS_POSZERO)
```
`__clc_flush_denormal_if_not_supported` is also approximately equivalent to llvm.canonicalize, but implementing it as
` __builtin_fabsf(x) < 0x1p-149f ? copysign(0.0f, x) : x` avoids the requirement to quiet a signaling nan so is slightly more foldable.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEk0GP4jgQhX-NuZRAxiFADjnQ9CCt1Ls9Gmal1V6silMhnq7YGduhm_31KwPdM3MaCQnFcr33vaoyxmhPjqgW5YNQqgsYKZgwmBehlFB7odQruW_TvKd8UD7OcEq9DzWGSG6YNb691F97G6H1FMH5BI6oheShIUBg2wQMF2gmyy34AGzdCyQ7EBjvYkKXhNpDMyUw6HLNSKHzYaAWXm3qASFM7na_J_MCr701PbxaZogjGYts_6Nshx-C0GCkFryD1BNMnOyAiWCKtBByJ-Tua093oNj7iVswfhgt081RrOX8H8PoTjDvWnI-DMjzbpwPmHpRPLYXh4M1Yi0zObo22zgINDIayuVaGza6Gwul49TcBKKO0zj6kKgVa_me7ZaJ7QuJIpNl0dtP7kDrDJms0zZ2o2GMUajtj1ODzjtrrh3ohNrKt-U4X66qTqgqo2l9-Lx_2h2P-vPz8d9PX57z-a8et887L0-x1--Bte208-lXahsBOXrAcQz-7dpWvgB9n-wZmVzKc2A-D4uf0d7na4eRaSCXrDuBTYDx5v5Tzg6bmJO8CVWBKPbwEQlEcQDjx0te15x1IbssfL-5g7eshGdv23gde8hU4eqXqb5PlhIg5HLkTODQQfQ5UmR76hNfYPCBoPPcYsO0mLV10VZFhTOql5tyVW2LjSxnfY2qWq8brOSmq9RSFs2mrUpltuVqrahEmtlaSVXK7VLJjdqqcrEpqw3J1dIU3VZKiWIlaUDLi2uzfDjNbIwT1cuyWK62M8aGON6fJNvGsLk_vlDninkznaJYSbYxxR8aySam-nb_fbMDDf5MoPX-aa-Pfz_89fzlz92TfvzjuHt4-nTd3kAfk4HfbO5sClz3KY0xr6s6CHU42dRPzcL4QahDRrn_zcfgv5FJQh2u2aJQh3u8c63-DwAA__8yv32_">