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