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

            Bug ID: 71722
           Summary: incorrect code for test pr64252.c for -mcpu=power9
                    -mpower9-vector -ftree-vectorize -O3
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: acsawdey at gcc dot gnu.org
                CC: bergner at gcc dot gnu.org, wschmidt at gcc dot gnu.org
  Target Milestone: ---
            Target: powerpc64le-linux

Created attachment 38808
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38808&action=edit
preprocessed test case

It looks like the code for the last iteration is not working properly here:

#1  0x00000000100005f0 in main () at
/home/sawdey/src/gcc/trunk/gcc/gcc/testsuite/gcc.dg/vect/pr64252.c:62
62            abort ();
(gdb) l
57        int i;
58        check_vect ();
59        bar(2, q);
60        for (i = 0; i < N; i++)
61          if (q[0].a[i].f != 0 || q[0].a[i].c != i || q[0].a[i].p != -1)
62            abort ();
63        return 0;
64      }
(gdb) p N
$1 = 50
(gdb) p q[0]
$2 = {a = {{f = a, c = 0, p = 4294967295}, {f = a, c = 1, p = 4294967295}, {f =
a, c = 2, p = 4294967295}, {f = a, c = 3, p = 4294967295}, {f = a, c = 4, p =
4294967295}, {f = a, c = 5, p = 4294967295}, {
      f = a, c = 6, p = 4294967295}, {f = a, c = 7, p = 4294967295}, {f = a, c
= 8, p = 4294967295}, {f = a, c = 9, p = 4294967295}, {f = a, c = 10, p =
4294967295}, {f = a, c = 11, p = 4294967295}, {f = a,
      c = 12, p = 4294967295}, {f = a, c = 13, p = 4294967295}, {f = a, c = 14,
p = 4294967295}, {f = a, c = 15, p = 4294967295}, {f = a, c = 16, p =
4294967295}, {f = a, c = 17, p = 4294967295}, {f = a,
      c = 18, p = 4294967295}, {f = a, c = 19, p = 4294967295}, {f = a, c = 20,
p = 4294967295}, {f = a, c = 21, p = 4294967295}, {f = a, c = 22, p =
4294967295}, {f = a, c = 23, p = 4294967295}, {f = a,
      c = 24, p = 4294967295}, {f = a, c = 25, p = 4294967295}, {f = a, c = 26,
p = 4294967295}, {f = a, c = 27, p = 4294967295}, {f = a, c = 28, p =
4294967295}, {f = a, c = 29, p = 4294967295}, {f = a,
      c = 30, p = 4294967295}, {f = a, c = 31, p = 4294967295}, {f = a, c = 32,
p = 4294967295}, {f = a, c = 33, p = 4294967295}, {f = a, c = 34, p =
4294967295}, {f = a, c = 35, p = 4294967295}, {f = a,
      c = 36, p = 4294967295}, {f = a, c = 37, p = 4294967295}, {f = a, c = 38,
p = 4294967295}, {f = a, c = 39, p = 4294967295}, {f = a, c = 40, p =
4294967295}, {f = a, c = 41, p = 4294967295}, {f = a,
      c = 42, p = 4294967295}, {f = a, c = 43, p = 4294967295}, {f = a, c = 44,
p = 4294967295}, {f = a, c = 45, p = 4294967295}, {f = a, c = 46, p = 47}, {f =
(b | c | unknown: 4294967292), c = 4294967295,
      p = 0}, {f = a, c = 48, p = 4294967295}, {f = a, c = 49, p =
4294967295}}}

Tested with trunk 237715
compiler options: -mcpu=power9 -fno-diagnostics-show-caret
-fdiagnostics-color=never -maltivec -mpower9-vector -ftree-vectorize
-fno-vect-cost-model -fno-common -O2 -fdump-tree-vect-details -O3 -lm -ggdb -g3

This may be related to the test case gcc.dg/vect/pr45752.c which also fails and
produces similar looking code (at a glance) that does not involve xxspltw.

Reply via email to