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

            Bug ID: 79456
           Summary: [7 regression] Extra instruction emitted after LRA
                    patch
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: krebbel at gcc dot gnu.org
  Target Milestone: ---

The zvector/vec-cmp-1.c testcase currently fails on s390x.

Starting with that patch we see worse code being generated for:

int __attribute__((noinline,noclone))
all_eq_double (double __attribute__((vector_size(16))) a,
               double __attribute__((vector_size(16))) b)
{
 return __builtin_s390_vec_all_eq (a, b);
}

gcc -O3 -march=z13
before:
        vfcedbs %v0,%v24,%v26
        lhi     %r2,1
        lochine %r2,0
        lgfr    %r2,%r2
        br      %r14
after:
        vfcedbs %v0,%v24,%v26
        lhi     %r2,1
        lr      %r1,%r2
        lochine %r1,0
        lgfr    %r2,%r1
        br      %r14

Note: ideally it should be more like:
        vfcedbs %v0,%v24,%v26
        lghi %r2,1
        locghine %r2,0
        br %r14
... but that's a different topic.

The same problem can be reproduced also with vector types:

long foo (long a, long b)                                               
{
        return a > b;
}

old (r244941):

        cgr     %r2,%r3
        lghi    %r2,1
        locghinh        %r2,0
        br      %r14

after (r244942):

        cgr     %r2,%r3
        lghi    %r1,1
        locghinh        %r1,0
        lgr     %r2,%r1
        br      %r14

Reply via email to