2018-05-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / vshift-1.c
blob2220ad5a4fdafeb1b0e2d569efe698afc8058cdd
1 /* { dg-do run } */
2 /* { dg-options "-O3" } */
4 #include <stdlib.h>
6 #define N 64
8 #ifndef TYPE1
9 #define TYPE1 int
10 #define TYPE2 long long
11 #endif
13 signed TYPE1 a[N], b[N], g[N];
14 unsigned TYPE1 c[N], h[N];
15 signed TYPE2 d[N], e[N], j[N];
16 unsigned TYPE2 f[N], k[N];
18 __attribute__((noinline)) void
19 f1 (void)
21 int i;
22 for (i = 0; i < N; i++)
23 g[i] = a[i] << b[i];
26 __attribute__((noinline)) void
27 f2 (void)
29 int i;
30 for (i = 0; i < N; i++)
31 g[i] = a[i] >> b[i];
34 __attribute__((noinline)) void
35 f3 (void)
37 int i;
38 for (i = 0; i < N; i++)
39 h[i] = c[i] >> b[i];
42 __attribute__((noinline)) void
43 f4 (void)
45 int i;
46 for (i = 0; i < N; i++)
47 j[i] = d[i] << e[i];
50 __attribute__((noinline)) void
51 f5 (void)
53 int i;
54 for (i = 0; i < N; i++)
55 j[i] = d[i] >> e[i];
58 __attribute__((noinline)) void
59 f6 (void)
61 int i;
62 for (i = 0; i < N; i++)
63 k[i] = f[i] >> e[i];
66 __attribute__((noinline)) void
67 f7 (void)
69 int i;
70 for (i = 0; i < N; i++)
71 j[i] = d[i] << b[i];
74 __attribute__((noinline)) void
75 f8 (void)
77 int i;
78 for (i = 0; i < N; i++)
79 j[i] = d[i] >> b[i];
82 __attribute__((noinline)) void
83 f9 (void)
85 int i;
86 for (i = 0; i < N; i++)
87 k[i] = f[i] >> b[i];
90 int
91 main ()
93 int i;
94 for (i = 0; i < N; i++)
96 asm ("");
97 c[i] = (rand () << 1) | (rand () & 1);
98 b[i] = (i * 85) & (sizeof (TYPE1) * __CHAR_BIT__ - 1);
99 a[i] = c[i];
100 d[i] = (rand () << 1) | (rand () & 1);
101 d[i] |= (unsigned long long) c[i] << 32;
102 e[i] = (i * 85) & (sizeof (TYPE2) * __CHAR_BIT__ - 1);
103 f[i] = d[i];
105 f1 ();
106 f3 ();
107 f4 ();
108 f6 ();
109 for (i = 0; i < N; i++)
110 if (g[i] != (signed TYPE1) (a[i] << b[i])
111 || h[i] != (unsigned TYPE1) (c[i] >> b[i])
112 || j[i] != (signed TYPE2) (d[i] << e[i])
113 || k[i] != (unsigned TYPE2) (f[i] >> e[i]))
114 abort ();
115 f2 ();
116 f5 ();
117 f9 ();
118 for (i = 0; i < N; i++)
119 if (g[i] != (signed TYPE1) (a[i] >> b[i])
120 || j[i] != (signed TYPE2) (d[i] >> e[i])
121 || k[i] != (unsigned TYPE2) (f[i] >> b[i]))
122 abort ();
123 f7 ();
124 for (i = 0; i < N; i++)
125 if (j[i] != (signed TYPE2) (d[i] << b[i]))
126 abort ();
127 f8 ();
128 for (i = 0; i < N; i++)
129 if (j[i] != (signed TYPE2) (d[i] >> b[i]))
130 abort ();
131 return 0;