<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139944>139944</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed DCE for __builtin_{clzg,ctzg} when bitshift
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BreadTom
</td>
</tr>
</table>
<pre>
[Godbolt](https://godbolt.org/z/G89zK5brd) and [GCC bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120279)
```
unsigned long f0(unsigned long arg0, int arg1){
int tmp1;
if(arg1){
tmp1 = __builtin_ctzg(arg0, 0);
return (arg0 >> tmp1);
}
tmp1 = __builtin_clzg(arg0, 0);
return (arg0 << tmp1);
}
unsigned long f1(unsigned long arg0, int arg1){
int tmp1;
if(arg1){
tmp1 = __builtin_clzg(arg0, 0);
arg0 <<= tmp1;
tmp1 = __builtin_ctzg(arg0, 0);
arg0 >>= tmp1;
return arg0;
}
tmp1 = __builtin_ctzg(arg0, 0);
arg0 >>= tmp1;
tmp1 = __builtin_clzg(arg0, 0);
arg0 <<= tmp1;
return arg0;
}
```
f1() uses __builtin_ctzg() then __builtin_clzg() for returning ARG0 when it could instead use __builtin_clzg() in f0() (Vice versa) with flags -O3 -march=icelake-client.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VF2PmzoQ_TXDi5XIjAkfDzwksOzD1dWVrqq-RgYbcOvACtsbNb--MqDdpNlG6j7UQsKaOT5nfEYebozqBilz2B1gVwbc2X6c8sMkufgynoJ6FD987nkU9agt7ErAtLf2xQDbA1aAVbektuPUAVYXwOo5zS7_7OpJAGaED4J4gqIgtes-JGiabTe4laB23UVpzQEr04_nY-26bdMpYJUSwMoQKSYZYAZ0DzFdP7p3w3wRQfQ4dKSlgOltiE8dBSyIGqzfh54iOQDdE0LmoD29hMDeIi1geovzAAKsJMdj7ZS2ajg29tItuJmbevAbhV-TtG4ayIohwJ6APS1S11BIyt8p6AcKd-wFsOKWfWG-Nyj8SwY9Kt-vq8L9yVsNvz7j-pXXH5Ouxs0MS2LtwCcEH4r9qSUP7bir-q251y9hbq1_ec5Ic38Jn7G9HO4r8pl2nFYZNXRk__8zJWcPVpY0o9OCqMFYyYUn_5hBDcvr83vA9KtqJHmVk-E-cFa2J63mnSGb_xjZnPjU9MBK1UjNv8tNo5Uc7DYQORMZy3gg8zCJEoySmGVBn4uobkNsI5E2cSPrWEaUZy3SWMRRgywNVI4Ud3QXRmHK2C7bMhmHcZQi1hSzLGUQUXniSm-1fj35kRMoY5zMQ5ZlURRoXktt5mmIOMgzmbOA6IfjlPtDm9p1BiKqlbHmncYqq2X-rzJGClIWT7OV7w5BclhMKuY-JOXia62s6VVrAzfp_JexqGzv6m0zngArL7P-Ni_T-E02FrCaizOA1Vr9a44_AwAA__8mtLE4">