aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.dg/vect/pr51581-3.c
blob: a478136172f7eceb4fd2c8ebc038ff6e10a66421 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* PR tree-optimization/51581 */

#include "tree-vect.h"

int a[8], b[8];
unsigned int c[8], d[8];

void
f1 (void)
{
  a[0] = b[0] / 8;
  a[1] = b[1] / 8;
  a[2] = b[2] / 8;
  a[3] = b[3] / 8;
  a[4] = b[4] / 8;
  a[5] = b[5] / 8;
  a[6] = b[6] / 8;
  a[7] = b[7] / 8;
}

void
f2 (void)
{
  c[0] = d[0] / 3;
  c[1] = d[1] / 3;
  c[2] = d[2] / 3;
  c[3] = d[3] / 3;
  c[4] = d[4] / 3;
  c[5] = d[5] / 3;
  c[6] = d[6] / 3;
  c[7] = d[7] / 3;
}

void
f3 (void)
{
  a[0] = b[0] / 8;
  a[1] = b[1] / 4;
  a[2] = b[2] / 8;
  a[3] = b[3] / 4;
  a[4] = b[4] / 8;
  a[5] = b[5] / 4;
  a[6] = b[6] / 8;
  a[7] = b[7] / 4;
}

void
f4 (void)
{
  c[0] = d[0] / 3;
  c[1] = d[1] / 5;
  c[2] = d[2] / 3;
  c[3] = d[3] / 5;
  c[4] = d[4] / 3;
  c[5] = d[5] / 5;
  c[6] = d[6] / 3;
  c[7] = d[7] / 5;
}

void
f5 (void)
{
  a[0] = b[0] / 14;
  a[1] = b[1] / 15;
  a[2] = b[2] / 14;
  a[3] = b[3] / 15;
  a[4] = b[4] / 14;
  a[5] = b[5] / 15;
  a[6] = b[6] / 14;
  a[7] = b[7] / 15;
}

void
f6 (void)
{
  c[0] = d[0] / 6;
  c[1] = d[1] / 5;
  c[2] = d[2] / 6;
  c[3] = d[3] / 5;
  c[4] = d[4] / 6;
  c[5] = d[5] / 5;
  c[6] = d[6] / 13;
  c[7] = d[7] / 5;
}

int
main ()
{
  int i;
  check_vect ();
  asm ("");
  for (i = 0; i < 8; i++)
    {
      asm ("");
      b[i] = i - 4;
      d[i] = i - 4;
    }
  f1 ();
  f2 ();
  for (i = 0; i < 8; i++)
    if (a[i] != b[i] / 8 || c[i] != d[i] / 3)
      abort ();
  f3 ();
  f4 ();
  for (i = 0; i < 8; i+= 2)
    if (a[i] != b[i] / 8 || a[i + 1] != b[i + 1] / 4
	|| c[i] != d[i] / 3 || c[i + 1] != d[i + 1] / 5)
      abort ();
  f5 ();
  f6 ();
  for (i = 0; i < 8; i+= 2)
    if (a[i] != b[i] / 14 || a[i + 1] != b[i + 1] / 15
	|| c[i] != d[i] / (i == 6 ? 13 : 6) || c[i + 1] != d[i + 1] / 5)
      abort ();
  return 0;
}

/* { dg-final { cleanup-tree-dump "vect" } } */