Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / testsuite / gcc.dg / vect / pr51581-3.c
1 /* PR tree-optimization/51581 */
2
3 #include "tree-vect.h"
4
5 int a[8], b[8];
6 unsigned int c[8], d[8];
7
8 void
9 f1 (void)
10 {
11   a[0] = b[0] / 8;
12   a[1] = b[1] / 8;
13   a[2] = b[2] / 8;
14   a[3] = b[3] / 8;
15   a[4] = b[4] / 8;
16   a[5] = b[5] / 8;
17   a[6] = b[6] / 8;
18   a[7] = b[7] / 8;
19 }
20
21 void
22 f2 (void)
23 {
24   c[0] = d[0] / 3;
25   c[1] = d[1] / 3;
26   c[2] = d[2] / 3;
27   c[3] = d[3] / 3;
28   c[4] = d[4] / 3;
29   c[5] = d[5] / 3;
30   c[6] = d[6] / 3;
31   c[7] = d[7] / 3;
32 }
33
34 void
35 f3 (void)
36 {
37   a[0] = b[0] / 8;
38   a[1] = b[1] / 4;
39   a[2] = b[2] / 8;
40   a[3] = b[3] / 4;
41   a[4] = b[4] / 8;
42   a[5] = b[5] / 4;
43   a[6] = b[6] / 8;
44   a[7] = b[7] / 4;
45 }
46
47 void
48 f4 (void)
49 {
50   c[0] = d[0] / 3;
51   c[1] = d[1] / 5;
52   c[2] = d[2] / 3;
53   c[3] = d[3] / 5;
54   c[4] = d[4] / 3;
55   c[5] = d[5] / 5;
56   c[6] = d[6] / 3;
57   c[7] = d[7] / 5;
58 }
59
60 void
61 f5 (void)
62 {
63   a[0] = b[0] / 14;
64   a[1] = b[1] / 15;
65   a[2] = b[2] / 14;
66   a[3] = b[3] / 15;
67   a[4] = b[4] / 14;
68   a[5] = b[5] / 15;
69   a[6] = b[6] / 14;
70   a[7] = b[7] / 15;
71 }
72
73 void
74 f6 (void)
75 {
76   c[0] = d[0] / 6;
77   c[1] = d[1] / 5;
78   c[2] = d[2] / 6;
79   c[3] = d[3] / 5;
80   c[4] = d[4] / 6;
81   c[5] = d[5] / 5;
82   c[6] = d[6] / 13;
83   c[7] = d[7] / 5;
84 }
85
86 int
87 main ()
88 {
89   int i;
90   check_vect ();
91   asm ("");
92   for (i = 0; i < 8; i++)
93     {
94       asm ("");
95       b[i] = i - 4;
96       d[i] = i - 4;
97     }
98   f1 ();
99   f2 ();
100   for (i = 0; i < 8; i++)
101     if (a[i] != b[i] / 8 || c[i] != d[i] / 3)
102       abort ();
103   f3 ();
104   f4 ();
105   for (i = 0; i < 8; i+= 2)
106     if (a[i] != b[i] / 8 || a[i + 1] != b[i + 1] / 4
107         || c[i] != d[i] / 3 || c[i + 1] != d[i + 1] / 5)
108       abort ();
109   f5 ();
110   f6 ();
111   for (i = 0; i < 8; i+= 2)
112     if (a[i] != b[i] / 14 || a[i + 1] != b[i + 1] / 15
113         || c[i] != d[i] / (i == 6 ? 13 : 6) || c[i + 1] != d[i + 1] / 5)
114       abort ();
115   return 0;
116 }
117
118 /* { dg-final { cleanup-tree-dump "vect" } } */