<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/125754>125754</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [HLSL] `[branch]` attribute support for `switch` statements
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            HLSL
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          llvm-beanz
      </td>
    </tr>
</table>

<pre>
    HLSL supports the `branch` attribute on `switch` statements. Clang currently errors if you apply the `[branch]` attribute to a switch statement.

```hlsl
RWBuffer<uint4> Buf;

[numthreads(8,1,1)]
void main(uint GI : SV_GroupIndex) {
  uint4 Val = Buf[GI];
  [branch]
  switch (Val.x) {
    case 0:
      Buf[GI] = Val.xxxx;
      break;
    case 1:
      Buf[GI] = Val.yyyy;
      break;
    case 2:
      Buf[GI] = Val.zzzz;
      break;
    default:
      Buf[GI] = Val.wwww;
 break;
  }
}
```
[Godbolt](https://godbolt.org/z/fs45qn8x1)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEk8-OmzAQxp9muIw2cgYc4MAh2W3SlfbUlbbHygQTaB1M_WcT8vSVgWibSt0gA7LH8_s0M_qEte2hk7IAvgH-FAnvGm0Kpd6PD6UU3SUqdTUUX19eX9D6vtfGWXSNRFix0ohu38CKoXDOtKV3EnUXIvbUuilinXDyKDtnF_ioRHfAvTdGdk4NKI3RxmJb46A9ir5XwxUNfDPT-dOtgNMocOJ_wBfA1mGt2LQaZRWw9bfvG1_X0kD86NvOJRB_wY2vId7M9_mm80fXGCkqC5RlQI_L6c2DMFu_67bCo2g7oCwgcPeMEK_x9e3HzmjfP3eVPAPlCGlgIo46-CYUQvw0ivHN7jnA4unCTWXhYK4FKHsTanEDQ9wLK5FBvJ73-DdylBiTzufzlR-e0kjx6-NghCzvQYZhGO5B6B7kcrlcPoFUshZeuXuU0-l0mpNuAJCGls3f66ynOe50VWrlQlMpa5zrbRChLdD2MIUW2hyAthegbW0T_rvLzmHOUVXEVR7nIpLFMo2zlDFiedQUnKVcrPaSp0JwllQrmVTLJTEq84yXJUVtQYw4I5YQW66SfJHtk1WV55zyOC3jvIaEyaNo1SK4KchHrbVeFkviKU8iJUqp7Gg8omAwIAoWvLrPHywkTLXW2Q-Ca50azTomhJ59ZpbZsVhr8z9bRt6o4p-Gta7x5WKvj0DboDz_Hnqjf8q9A9qOhVig7VzLe0F_AgAA___xUEAI">