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