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

    <tr>
        <th>Summary</th>
        <td>
            Missed VRP with __builtin_popcount() when bitshift with __builtin_{ctzg, clzg}
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          BreadTom
      </td>
    </tr>
</table>

<pre>
    [Godbolt](https://godbolt.org/z/Ybco775zT)
[GCC bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120296)
```
extern void f0_unreachable(void);

void f0(unsigned int arg0, unsigned char arg1){
 int tmp0;
    unsigned int tmp1;
    int tmp2[2];
    if(arg1){
 tmp0 = __builtin_ctzg(arg0, 0);
        tmp1 = arg0 >> tmp0;
    } else {
 tmp0 = __builtin_clzg(arg0, 0);
        tmp1 = arg0 << tmp0;
    }
 tmp2[0] = __builtin_popcount(arg0);
    tmp2[1] = __builtin_popcount(tmp1);
    if(tmp2[0] != tmp2[1])
 f0_unreachable();
}
```
When bitshifting ARG0 till it reaches one (or zero if it is zero), popcount should remain same and should not execute f0_unreachable() with flags -O3 -march=icelake-client.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVEFvozwQ_TXDZZTI2BCSA4cklJ4-fauq2tWeIgMGvGvsCNttN79-ZUKbNK0qLUJCzMx7b549NrdWdlqIHNIdpEXEvevNmO9GwZtHM0SVaf6E3L1pKqMcpAXQde_c0QLbAi2Blt05tTRjB7Q8AS1_VrXJsvT0CHQDZBvg-z1WvvsUXtfLTvsZXvnuJJXiQEvbm-dD5btl3UlgpWyAFTEldLOaaVdkfslWvDgxanwyssGWHLweBa97XikBdB2iAcJ2AUW2cxXQtdeT-waldsjHjgDd41uw7vkYonEAZwE81bnhSM5ciIjvKNxwjC-pOUIh3dHg_JJoga7fEwdSBFbg4VB5qZzUh9qdunPd1BZ5s4DzE9QmTChBYHfA7m66g6xAoazAL2TUP8rsge0_yszswSyBtLgROZpjbbx2b0JXGjMq_hI1rew1alrDd4I0DugrtvOYfJyHyyxMbV_P0Y9eaKyks71sndQdbh_uCTqpFEqHE4mwaLRAoGsz4kmMBmUbktJOf4Gc7vG1dbS98arBUQxcarR8EMh18xrWxqF4EbV34tM-8Vm6HlvFO4uL_xkuBj7WPbBC1kLx32JRKym0W0ZNzpoN2_BI5HGWZIxmhLKoz1tGWp5wRluaxcm6SQiLm2S1YpsN4bSuIplTQlOSxmm8YhlhS5aQNhFNkvANZ226goSE3tVSqachnNJIWutFHickJiRSvBLKvl4fYx6qFpXvLCRESevsBeekUyL_T1orGvz-8O1s7tPtnqxf78VtLWS78_nY4zTAWRH5UeU3V4t0va-WtRmAlqGN-bM4juaXqB3QcvJigZaznaec_g0AAP__d6CGJQ">