https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114523
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- here is one which makes similar code for both gcc and clang: ``` int foo2 () { int quux = bar (); unsigned long t3 = (unsigned int)quux; t3+=-1; asm("":"+r"(t3)); t3 = t3>>63; unsigned char t = t3; unsigned long t4 = (unsigned int)baz; t4 = -t4; asm("":"+r"(t4)); t4 = t4>>63; asm("":"+r"(t4)); unsigned char t1 = t4; int t2 = t; t2 ^= t1; return t2; } ``` though gcc produces mov32 and not <<32/>>32.