https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62262
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Carrot from comment #5) > Actually the original source code is guarded by assert, and the parameter > passed to CLZ can be guaranteed not 0, so "value <<= zeros" is well defined > in our original source code. The issue is the second CLZ (not the first one). Though if I read the code correctly value<<1 can never be zero but GCC does not optimize away that check.