<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/99234>99234</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Implement the `Barrier` 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 `Barrier` clang builtin,
- [ ] Link `Barrier` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `Barrier` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `Barrier` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/Barrier.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/Barrier-errors.hlsl`
- [ ] Create the `int_dx_Barrier` intrinsic in `IntrinsicsDirectX.td`
- [ ] Create the `DXILOpMapping` of `int_dx_Barrier` to `244` in `DXIL.td`
- [ ] Create the `Barrier.ll` and `Barrier_errors.ll` tests in `llvm/test/CodeGen/DirectX/`
## DirectX
| DXIL Opcode | DXIL OpName | Shader Model | Shader Stages |
| ----------- | ----------- | ------------ | ------------- |
| 244 | BarrierByMemoryType | 6.8 | () |
## SPIR-V
There is no support for `Barrier` when targeting SPIR-V.
## Test Case(s)
### Example 1
```hlsl
//dxc Barrier_test.hlsl -T lib_6_8 -enable-16bit-types -O0
export void fn() {
uint p1 = 1;
uint p2 = 1;
return Barrier(p1, p2);
}
```
### Example 2
```hlsl
//dxc Barrier_1_test.hlsl -T lib_6_8 -enable-16bit-types -O0
export void fn() {
uint p1 = 1;
uint p2 = 1;
return Barrier(p1, p2);
}
```
## HLSL:
## Syntax
```syntax
void Barrier(uint MemoryTypeFlags, uint SemanticFlags);
```
```syntax
void Barrier(NodeRecordOrUAV o, uint SemanticFlags);
```
## Type Description
| Name | [**Template Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-data-types.md)| [**Component Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-data-types.md) | Size |
|-------|--------------------------------------------------------------------|----------------------------------------------------------------------|------|
| *ret* | **void** | **void** | 0 |
| *MemoryTypeFlags* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-scalar.md) | [**uint**](../WinProg/windows-data-types) | 1 |
| *SemanticFlags* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-scalar.md) | [**uint**](../WinProg/windows-data-types) | 1 |
## Type Description
| Name | [**Template Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-data-types.md)| [**Component Type**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-data-types.md) | Size |
|-------|--------------------------------------------------------------------|----------------------------------------------------------------------|------|
| *ret* | **void** | **void** | 0 |
| *o* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-scalar.md) | | 1 |
| *SemanticFlags* | [**scalar**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-scalar.md) | [**uint**](../WinProg/windows-data-types) | 1 |
## Minimum Shader Model
This function is supported in the following shader models.
|Shader Model | Supported|
|-------------|----------|
|[Shader Model 6.8](https://microsoft.github.io/DirectX-Specs/d3d/HLSL_ShaderModel6_8) and higher shader models | yes |
## Shader Stages
## See also
- [**Intrinsic Functions (DirectX HLSL)**](https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src//direct3dhlsl/../direct3dhlsl/dx-graphics-hlsl-intrinsic-functions.md)
- **See [Work Graphs Barrier Types](https://microsoft.github.io/DirectX-Specs/d3d/WorkGraphs.html#barrier)**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWF1v2yoY_jXkBtmycewmF7nIx7JTqV2npWfbXYQNsTnFYAFpk_36I8COnTbrdrRzsUmNUjV-gOf95DUvWGtWCkpnIF2AdDXCe1NJNdth9U0KPsolOc4CCNIFBOkKXtcNpzUVBoIsWmClGFUgi2DBsShhvmfcMAHQEkTzftENEw-vzYdPzFR2QsU13zJhFBOaFTqsQBadMc0JgZrWGBYVLR403En1jNhICyzt8F83m5uFl7Dei8IwKZaYczuLCTtrQ2vsZjJRhkXTXJJWSEJLKr4r6V3NzEDQu0OjegHL9y38I3ZDtdEto3MNQGuLAbReSkLfU2FlALRuPaYBWreqhNZp3_XTK8TW-pbVaXk9ZA2oUlLpi-RLRbGh0FTUsjJhtuSwHTjmFMDWC9engK6YooX5GhryOufq6_XNXXOLm4aJ0lLK3WVRRkI7gMbj3ul28Q8ldM7z6YAFGYDb1nY_5j3oqTl_rF9EBqB1axdAay_VflECUAK7EY9dLaHVDt41NvBw8PwB1_55U2FCFbyVhPIhsDG4pNoiLVHQf-APnl8CwYAIjcduvLV-cbyltVTH-2PjNcrCifsP0ASgabfwZOHm4_Wn4LOH7iuqKGQaCgn1vmmkMhc2zlNlMx6rkhomypYgPCO9p9rAJdYUoIkGaOoHoftzM-ykdwdsqxGM7WgW-a9LWMuzBmhNDkVn1tYGzaUzDO4hZ_k2205gQAXOOQ3iLGcmMMeGahjctSGkB2fAo2QE7sTJ_IUbne6ZMLCJIUhWMAbJGYrO0TmEECpq9kp06gA0aWKAlrBB1jw_8Wo1tOSyseinjI3_SHNbU11RSubnWXYUBh9aaLBKd7hTu5fmFOsTec1xqa18h9vKJwwrWrTTZ6jJT4j4IAn9RAupyJ36e_4Zyv_I3ye73WkrqgvFGvuS6ouFqwp-86ULgOYAze9p3XBbyOwqD4F0BdCkMqbR1m0uGUpmqn0eFtLWq1tWKKnlzqxkYWv8ExMJsi8TLnObOB4lVD8Y2QRaFW1CudqVEJdlaB2GLzFyCEqFm4oVOrBQQLDBPrHCmljTh7ovZd1IYQ8Pf4byvv6yb7Svlm357H_90ud_ohkQ9WUdoLmiBqB5W7yts20G-1_fByN4xvFiD83P81EXmGP1-8XS6zWI40lju0WH-jq6L0x8VLL0OhH5pAfJ0DHE5555tsvf_PJWzn5v5d_KGZrLP3ejvtWgn6lBpzJ0ywSr9_VZQ9V1KUzDXXsjYLuVtlWhxLZ5tkHcSc7lk21OtF9d29U69I5_3qKBaLrpGJ7vrAsb4zQFpIszqiycXIpS3QUmbOPFZN9yBpuG-sAkBKC1PTpvPanjzLbuFG_724qVFVXnBjnXHfu2sj9uD5vO_rzaj1MKMdfyhAd9DE_tPuxuXbTtHVuF_ekeTX-_rDxdWwRdbnRF35nn9LV2g3TxRaoH-N6u1l1D4N4B-lfjZ4k9b1iZmgOU5F2_0XpsRGYJmSZTPKKz-ArFcRZN02hUzVASX-XpNKcox0lExgmZ4nFWxFGeJ6QgxYjNUITG0VWcoShO0yhEOU4nCUkzMkVJjlIwjmiNGQ85f6xDqcoR03pPZ9MpSsYjjnPKtbslRKimBuf7EiAE0BIglOPigQoCkvnpKqQd8eHupkkDknkHpauRmllZQb4vNRhHnGmje-mGGU5n_Y3j-dUNyCKXS6csG-0Vn72SSu3ljRPYKPkPLQxAa2eiDYC38nGG_g0AAP__-Bkp0A">