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

            Bug ID: 115984
           Summary: Missed optimization: unnecessary register copies
           Product: gcc
           Version: 14.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nick.hudson at broadcom dot com
  Target Milestone: ---

This code produces assembly output with unnecessary register copies

void
write128(volatile void *addr, uint128_t val)
{
   volatile uint128_t *ptr = addr;
   asm volatile ("stp %[val], %H[val], %[ptr]"
      : [ptr] "=Q" (*ptr)
      : [val] "r" (val));
}


write128:
        mov     x4, x2
        mov     x5, x3
        stp x4, x5, [x0]
        ret

Obviously it could be

write128:
        stp     x2, x3, [x0]
        ret

Reply via email to