http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56313



             Bug #: 56313

           Summary: aarch64 backend not using fmls instruction

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: enhancement

          Priority: P3

         Component: target

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: josh.m.con...@gmail.com





When this code is compiled with -O2 -ffast-math -S for an aarch64-linux-gnu

target:



float v1 __attribute__((vector_size(8)));

float v2 __attribute__((vector_size(8)));

float result __attribute__((vector_size(8)));



void foo (void)

{

  result = result + (-v1 * v2);

}



The following is generated:



    ld1    {v0.2s}, [x0]

    fneg    v2.2s, v2.2s

    ld1    {v1.2s}, [x1]

    fmla    v0.2s, v2.2s, v1.2s

    st1    {v0.2s}, [x0]



This code could be improved to:

    ld1    {v0.2s}, [x0]

    ld1    {v1.2s}, [x1]

    fmls    v0.2s, v2.2s, v1.2s

    st1    {v0.2s}, [x0]

Reply via email to