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