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

            Bug ID: 79218
           Summary: Missed swap optimization on powerpc64le simple test
                    case
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bergner at gcc dot gnu.org
  Target Milestone: ---

The following test case has some unnecessary swaps:

bergner@genoa:~/gcc/BUGS$ cat ptr5.i 
void
ptr5 (__int128_t *dst, __int128_t *src)
{
  *dst = ~*src;
}
bergner@genoa:~/gcc/BUGS$ gcc7 -O2 -mcpu=power8 -S ptr5.i 
bergner@genoa:~/gcc/BUGS$ cat ptr5.s 
ptr5:
        lxvd2x 0,0,4
        xxpermdi 0,0,0,2
        xxlnor 0,0,0
        xxpermdi 0,0,0,2
        stxvd2x 0,0,3
        blr

This is still better than what GCC6 which produces:

bergner@genoa:~/gcc/BUGS$ gcc6 -O2 -mcpu=power8 -S ptr5.i 
bergner@genoa:~/gcc/BUGS$ cat ptr5.s 
ptr5:
        ld 10,0(4)
        ld 11,8(4)
        not 10,10
        not 11,11
        std 10,0(3)
        std 11,8(3)
        blr

I'll note that GCC7 using -mcpu=power9 does not have any swaps due to the new
endian friendly dform load/stores:

bergner@genoa:~/gcc/BUGS$ gcc7 -O2 -mcpu=power9 -S ptr5.i 
bergner@genoa:~/gcc/BUGS$ cat ptr5.s 
ptr5:
        lxv 0,0(4)
        xxlnor 0,0,0
        stxv 0,0(3)
        blr

Reply via email to