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

Reply via email to