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

            Bug ID: 93129
           Summary: PPC memset not using vector instruction on >= Power8
           Product: gcc
           Version: 8.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jens.seifert at de dot ibm.com
  Target Milestone: ---

Input:
void memclear16(char *p)
{
  memset(p, 0, 16);
}

void memFF16(char *p)
{
  memset(p, 0xFF, 16);
}

Output:
._Z10memclear16Pc:
LFB..0:
        li 9,0
        std 9,0(3)
        std 9,8(3)
        blr

._Z7memFF16Pc:
LFB..1:
        mflr 0
        li 5,16
        li 4,255
        std 0,16(1)
        stdu 1,-112(1)
LCFI..0:
        bl .memset
        nop
        addi 1,1,112
LCFI..1:
        ld 0,16(1)
        mtlr 0
LCFI..2:
        blr

Expected output:
vsplitb + vector store

Unaligned vector stores only perform on >= Power8, vector stores should be used
only on >= Power8. On Power7 you would need to know it is at least 8-byte
aligned.

vsplitb has the -16..+15 limit. On Power9 a splat for 0.255 exists.

Reply via email to