https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121419
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |bpf --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- _40 = __builtin_clz (x_39); So LLVM inlines clz always while GCC calls out to a function if the target does not have the optab defined. Now the bpf backend could define an optab that expands it which is very large to begin with: ``` w2 = w1 w2 >>= 1 w1 |= w2 w2 = w1 w2 >>= 2 w1 |= w2 w2 = w1 w2 >>= 4 w1 |= w2 w2 = w1 w2 >>= 8 w1 |= w2 w2 = w1 w2 >>= 16 w1 |= w2 w1 ^= -1 w2 = w1 w2 >>= 1 w2 &= 1431655765 w1 -= w2 w0 = w1 w0 &= 858993459 w1 >>= 2 w1 &= 858993459 w0 += w1 w1 = w0 w1 >>= 4 w0 += w1 w0 &= 252645135 w0 *= 16843009 w0 >>= 24 ``` This is why GCC does not inline it if the target does not implement the optab and has it in the libgcc.