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