111
|
1 /* { dg-do run } */
|
|
2 /* { dg-options "-O3" } */
|
|
3
|
|
4 #include <stdlib.h>
|
|
5
|
|
6 #define N 64
|
|
7
|
|
8 #ifndef TYPE1
|
|
9 #define TYPE1 int
|
|
10 #define TYPE2 long long
|
|
11 #endif
|
|
12
|
|
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];
|
|
17
|
|
18 __attribute__((noinline)) void
|
|
19 f1 (void)
|
|
20 {
|
|
21 int i;
|
|
22 for (i = 0; i < N; i++)
|
|
23 g[i] = a[i] << b[i];
|
|
24 }
|
|
25
|
|
26 __attribute__((noinline)) void
|
|
27 f2 (void)
|
|
28 {
|
|
29 int i;
|
|
30 for (i = 0; i < N; i++)
|
|
31 g[i] = a[i] >> b[i];
|
|
32 }
|
|
33
|
|
34 __attribute__((noinline)) void
|
|
35 f3 (void)
|
|
36 {
|
|
37 int i;
|
|
38 for (i = 0; i < N; i++)
|
|
39 h[i] = c[i] >> b[i];
|
|
40 }
|
|
41
|
|
42 __attribute__((noinline)) void
|
|
43 f4 (void)
|
|
44 {
|
|
45 int i;
|
|
46 for (i = 0; i < N; i++)
|
|
47 j[i] = d[i] << e[i];
|
|
48 }
|
|
49
|
|
50 __attribute__((noinline)) void
|
|
51 f5 (void)
|
|
52 {
|
|
53 int i;
|
|
54 for (i = 0; i < N; i++)
|
|
55 j[i] = d[i] >> e[i];
|
|
56 }
|
|
57
|
|
58 __attribute__((noinline)) void
|
|
59 f6 (void)
|
|
60 {
|
|
61 int i;
|
|
62 for (i = 0; i < N; i++)
|
|
63 k[i] = f[i] >> e[i];
|
|
64 }
|
|
65
|
|
66 __attribute__((noinline)) void
|
|
67 f7 (void)
|
|
68 {
|
|
69 int i;
|
|
70 for (i = 0; i < N; i++)
|
|
71 j[i] = d[i] << b[i];
|
|
72 }
|
|
73
|
|
74 __attribute__((noinline)) void
|
|
75 f8 (void)
|
|
76 {
|
|
77 int i;
|
|
78 for (i = 0; i < N; i++)
|
|
79 j[i] = d[i] >> b[i];
|
|
80 }
|
|
81
|
|
82 __attribute__((noinline)) void
|
|
83 f9 (void)
|
|
84 {
|
|
85 int i;
|
|
86 for (i = 0; i < N; i++)
|
|
87 k[i] = f[i] >> b[i];
|
|
88 }
|
|
89
|
|
90 int
|
|
91 main ()
|
|
92 {
|
|
93 int i;
|
|
94 for (i = 0; i < N; i++)
|
|
95 {
|
|
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];
|
|
104 }
|
|
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;
|
|
132 }
|