annotate gcc/testsuite/gcc.dg/vect/bb-slp-pr65935.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-additional-options "-O3" } */
kono
parents:
diff changeset
2 /* { dg-require-effective-target vect_double } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 #include "tree-vect.h"
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 extern void abort (void);
kono
parents:
diff changeset
7 extern void *malloc (__SIZE_TYPE__);
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 struct site {
kono
parents:
diff changeset
10 struct {
kono
parents:
diff changeset
11 struct {
kono
parents:
diff changeset
12 double real;
kono
parents:
diff changeset
13 double imag;
kono
parents:
diff changeset
14 } e[3][3];
kono
parents:
diff changeset
15 } link[32];
kono
parents:
diff changeset
16 double phase[32];
kono
parents:
diff changeset
17 } *lattice;
kono
parents:
diff changeset
18 int sites_on_node;
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 void rephase (void)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 int i,j,k,dir;
kono
parents:
diff changeset
23 struct site *s;
kono
parents:
diff changeset
24 for(i=0,s=lattice;i<sites_on_node;i++,s++)
kono
parents:
diff changeset
25 for(dir=0;dir<32;dir++)
kono
parents:
diff changeset
26 for(j=0;j<3;j++)for(k=0;k<3;k++)
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 s->link[dir].e[j][k].real *= s->phase[dir];
kono
parents:
diff changeset
29 s->link[dir].e[j][k].imag *= s->phase[dir];
kono
parents:
diff changeset
30 }
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 int main()
kono
parents:
diff changeset
34 {
kono
parents:
diff changeset
35 int i,j,k;
kono
parents:
diff changeset
36 check_vect ();
kono
parents:
diff changeset
37 sites_on_node = 1;
kono
parents:
diff changeset
38 lattice = malloc (sizeof (struct site) * sites_on_node);
kono
parents:
diff changeset
39 for (i = 0; i < 32; ++i)
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 lattice->phase[i] = i;
kono
parents:
diff changeset
42 for (j = 0; j < 3; ++j)
kono
parents:
diff changeset
43 for (k = 0; k < 3; ++k)
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 lattice->link[i].e[j][k].real = 1.0;
kono
parents:
diff changeset
46 lattice->link[i].e[j][k].imag = 1.0;
kono
parents:
diff changeset
47 __asm__ volatile ("" : : : "memory");
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49 }
kono
parents:
diff changeset
50 rephase ();
kono
parents:
diff changeset
51 for (i = 0; i < 32; ++i)
kono
parents:
diff changeset
52 for (j = 0; j < 3; ++j)
kono
parents:
diff changeset
53 for (k = 0; k < 3; ++k)
kono
parents:
diff changeset
54 if (lattice->link[i].e[j][k].real != i
kono
parents:
diff changeset
55 || lattice->link[i].e[j][k].imag != i)
kono
parents:
diff changeset
56 abort ();
kono
parents:
diff changeset
57 return 0;
kono
parents:
diff changeset
58 }
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 /* We should also be able to use 2-lane SLP to initialize the real and
kono
parents:
diff changeset
61 imaginary components in the first loop of main. */
kono
parents:
diff changeset
62 /* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp1" } } */