<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/99131>99131</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Implement the `isfinite` HLSL Function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
metabug,
backend:DirectX,
HLSL,
bot:HLSL
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farzonl
</td>
</tr>
</table>
<pre>
- [ ] Implement `isfinite` clang builtin,
- [ ] Link `isfinite` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `isfinite` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `isfinite` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/isfinite.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/isfinite-errors.hlsl`
- [ ] Create the `int_dx_isfinite` intrinsic in `IntrinsicsDirectX.td`
- [ ] Create the `DXILOpMapping` of `int_dx_isfinite` to `10` in `DXIL.td`
- [ ] Create the `isfinite.ll` and `isfinite_errors.ll` tests in `llvm/test/CodeGen/DirectX/`
## DirectX
| DXIL Opcode | DXIL OpName | Shader Model | Shader Stages |
| ----------- | ----------- | ------------ | ------------- |
| 10 | IsFinite | 6.0 | () |
## SPIR-V
There were no SPIR-V opcodes found for `isfinite`.
## Test Case(s)
### Example 1
```hlsl
//dxc isfinite_test.hlsl -T lib_6_8 -enable-16bit-types -O0
export bool4 fn(float4 p1) {
return isfinite(p1);
}
```
## HLSL:
Determines if the specified floating-point value is finite.
| *ret* isfinite(*x*) |
|---------------------|
## Parameters
| Item | Description |
|--------------------------------------------------------|----------------------------------------|
| <span id="x"></span><span id="X"></span>*x*<br/> | \[in\] The specified value.<br/> |
## Return Value
Returns a value of the same size as the input, with a value set to **True** if the *x* parameter is finite; otherwise **False**.
## Type Description
| Name | [**Template Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md) | [**Component Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md) | Size |
|-------|----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|----------|
| *x* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md), **vector**, or **matrix** | [**float**](/windows/desktop/WinProg/windows-data-types) | any |
| *ret* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md), **vector**, or **matrix** | [**bool**](/windows/desktop/WinProg/windows-data-types) | as input |
## Minimum Shader Model
This function is supported in the following shader models.
| Shader Model | Supported |
|------------------------------------------------------------------------------------|---------------------|
| [Shader Model 2 (DirectX HLSL)](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-sm2.md) and higher shader models | yes |
| [Shader Model 1 (DirectX HLSL)](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-sm1.md) | yes (vs\_1\_1 only) |
## Requirements
| Requirement | Value |
|-------------------|--------------------------------------------------------------------------------------------|
| Header<br/> | <dl> <dt>Corecrt\_math.h</dt> </dl> |
## See also
<dl> <dt>
[**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
</dt> </dl>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkGFtz2jj314gXjRlb5vrAA5jQZib52mky_fqWEfbB1kaWvJKckP76HV0AQ0jSbruzmVkPIegc6dxvFtWalQJghoYLNFz2aGsqqWYbqr5LwXtrWTzNIoyGC4yGS3xZNxxqEAajUcz0hglmAI1inHMqSrxuGTdMIJKheH44dcXE_asH8CMzld1Rcc3vmDCKCc1y3a_QKD4iNS8KrKGmOK8gv9d4I9UpZSMtJLP4j1c3VwvPYtWK3DApMsq53cWE3XUDNXU7mSj7edOcY5fLAkoQL7O6qJnpcLrYNurAIfsQwG-RN6CNDhSdcRBZWRgiq0wW8AGE5YHIKthMI7LaydK3dnvRVK9QtvoHsk7MyyOyESgllT5LPVNADWBTgTOKMHfF9q5rm70XgyEu915dMgW5-dY3xetEl98urz4117RpmCgtSbl5gZeR2GKS-GB3e_hNDnv7-ZigouhC74L6Humt6Ilz_lA_cw8iq6AZIivP135IikiKdxgPG2fYyoc_Ndb7uLP-H639-qaiBSh8LQvgXcCNoSVoCwmEosOD31g_B0QdQkns0Jd65bR3i1HfAxGZIDLdbd5rdfP58kv01YNuK1CAH-2XkAGDpVPQpmkrijMZ1D8idwva4IxqQGSiEZl6JHZ_bofddLGltgjhxGJHsf-4CLV0Voisim2O9z60PnIBjKNbzNn6bnQ3wREIuuYQJaM1M5F5akDj6FPwGGwbqQxeS8kHeCMQmWy4pGaAm8TbYGEFwhgrMK0Se1aITNwOlC6cRZddAQ9KunRL557XEgyomgnQmG1cVOoGcrZhUGDHlYkyaiQTBj9Q3gJmGoeQDZbbBxQicwUGkXlXIETmW0TmHd-Ns-jcc_Ds3uYHkT9TRWsrqT5lemmgxj__uIAHnSvW2Jr8hmw_8PzE0UPAozTTDRWYFShdIkK2iBCUXqA0Q2RlMX5xtOfbuT3ByGm2VjYC0wufM8MMDRdMuP9LfHvkXOfN_smRlz3wxYfaV3vKIzxEYxoCQ4bwsfVDs--AqXYAJprWIJL5FrvbrcG4hmBDY36rWvC_dkEYNMLNzvGHuEPpAktTgXpkGgKBFeU6UDhJ6KcGuo4-DR9X7YKxFkEYqBtuS7Q960FouERkUhnTaJs4LsdLZqp23c-lrcPXLFdSy41Zytz2r0cmUmI7JZdrWw88tAB9b2QTaZWHOuFqclq44mHLRlQq2lQs15EFRfsOFm3C8KD7dRFy6SBxJutGCjsTvXeRb2xcnObaL2Td331-A8sjEp2UDoF7ElQ6p5yqd-oam5xetAfIjdyJSTJs26Vb1NQotg05eqSZaxJdxbzAhXzsCInI6v9MfFayPGCjghrqW98uPKh42pfnZ03lP2JP2_V_lzm1L76vV_ZrJljd1kfz3m6gskU36GYLsG4bO5lAYadQW6Y3knP5yESJtT9d29P62WjwfJbcU_rlzvvDSRqdzdfh4kg4YifNMCv7SYlM_60A0zUJtdO-F1SsrEAdG9rZ8gn0ufnmBQWTd6Vg0mkOVg9EJg8aDbO7xH1hKfjT8dx_djb5s2XK3Qo8mw87OMfEDTCvBt0_3I4OnvkI1i3PhrY0K7hbpFlhUHqRSQW5MtYeNTVVv_Kjn8Ph8Jufmd92b0gAmHItA_CUegDvqs_-HRnvriv0uXh5p3XX6XfONr1ilhbTdEp7MEvGJElGcTxNetUsJpM8TWA6Xg-SSTEiAzqghFA6LgoYb3LaYzMSk0E8TkYkjpM06RM6no424800gXy6HsRoEENNGe_bV_K-VGWPad3CbDpN0qTH6Rq4dldbhNRg6Lot7QBPMkTImub3IAqUzvev7QHj7bzbJg1K5zvQcNlTM8srWrelRoOYM230gbthhsPscE12ctGARrHz4t6_vVbx2StODDcNjmOj5B-QG3dBo1vbaFZezYcZ-SsAAP__yM-irA">