https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109279
--- Comment #14 from Vineet Gupta <vineet.gupta at linux dot dev> --- (In reply to Andrew Pinski from comment #12) > Here is something to look into: > #define const1 0x0101010101010101ULL > #define const0 const1 > 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; > } Before commit 2e886eef7f2 li a5,16842752 addi a5,a5,257 slli a0,a5,32 or a0,a0,a5 ret With commit 2e886eef7f2 li a0,16842752 addi a0,a0,257 mv a5,a0 slli a0,a0,32 or a0,a0,a5 ret With commit 2e886eef7f2 + in_splitter check removed from riscv_move_integer() li a0,16842752 li a5,16842752 addi a5,a5,257 addi a0,a0,257 slli a0,a0,32 or a0,a0,a5 ret