https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109279
--- Comment #12 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Here is something to look into: #define const1 0x0101010101010101ULL #define const2 0x0080402010080400ULL #define const0 const1 unsigned long long g(unsigned long long occ, const unsigned int sq) { return const0 ; } unsigned long long f(unsigned long long occ, const unsigned int sq) { unsigned long long t= (const0)>>32<<32 ; unsigned long long t1= (unsigned int)(const0) ; asm("":"+r"(t)); return t | t1; }