https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111252

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pinskia at gcc dot gnu.org
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2023-08-31
           Keywords|                            |missed-optimization

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Interesting:
int test(int a, int b)
{
  return (a & ~0x80000000) | (b & 0x80000000);
}

Produces better code:
        lu12i.w $r12,-2147483648>>12                  # 0xffffffff80000000
        and     $r12,$r12,$r5
        bstrpick.w      $r4,$r4,30,0
        or      $r4,$r4,$r12
        slli.w  $r4,$r4,0
        jr      $r1


But note the expansion of __builtin_copysignf128 should be using
extract_bit_field and friends to extract the bit and do the insertation. I have
not looked into that yet though.

Reply via email to