<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/177125>177125</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Add __builtin_bitreverseg for generic bitreverse handling
</td>
</tr>
<tr>
<th>Labels</th>
<td>
good first issue,
clang:frontend,
clang:bytecode
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
It would be useful to provide a generic __builtin_bitreverseg builtin to handle bitreverse patterms, similar to how we added __builtin_bswapg - #160266 / #162433
```cpp
constexpr int kWordBits = 128;
using Word = unsigned _BitInt(kWordBits);
Word bitrev(const Word &w) {
return __builtin_bitreverseg(w);
}
```
Similar semantic constraints (although I don't think we need the modulo 16 bit width limit?), constexpr handling and test coverage.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0U02P6zYM_DX0hdjAphN_HHxINgiw6K3v0GMgS4ytPlkyJDrp-_eFnXR3gbaAAMPiDMczJlVKdvDMHRxOcDhnapExxO73337YKfisD-ZX9yH4CIsz2DMuiW-LQwk4x3C3hlHhwJ6j1Xi99ot1Yv21txL5zjHxgK-7lTIqbxzjVxVnJcJxSkDvmOxknYobMDzwwaiMYfO9bXqoecA3BCqLKqeqQqDL8432ZQn5cT1V_jx6niE_6uCT8F9zROsFf_4RojlZSQjlGQtqoDxBflyS9QOute1-8VsqBq8nKx9egJpPIlD75GzopxegZpN5daDqAdQi1CsMETGyLNH_d0BAzeOzJ9Tn7w6ehn68gkk8KS9W46YVlfWrDWqUkzEsw4gfaIIHqgVltP7nGqFnNigj4xTM4gIW1frJ-LBGRnR2sgLlZZWnd_xKavtRayLKGxROgjrcOaqBd5npStOWrcq4K-qqaZu6bOts7Pbcmr66aV31hdkXmnXfENd5sde1orLObEc5VXlBRd5SWdQ7pgMZleuKqaqKQsM-50lZt3PuPu1CHDKb0rLK1AUdMqd6dmkbVKIhBIM3G5PgBgIioHcg0k75AcrjLQYv7M2_Cv0vYR3Mxjics9itam_9MiTY584mSV_6YsVtq_EkH854NOZ_5vwW4ucmfJvwf6LMlui6UWROUB6BLkCXwcq49DsdJqDLqvl6vM0x_MlagC6btwR0eWVw7-jvAAAA__-6HjR8">