OSDN Git Service

c9f28b0ac8deccdc0e444e631fe136c97567d41e
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / multi-ix.c
1 /* Test for a reload bug:
2    if you have a memory reference using the indexed addressing
3    mode, and the base address is a pseudo containing an address in the frame
4    and this pseudo fails to get a hard register, we end up with a double PLUS,
5    so the frame address gets reloaded.  Now, when the index got a hard register,
6    and it dies in this insn, push_reload will consider that hard register as
7    a reload register, and disregrad overlaps with rld[n_reloads].in .  That is
8    fine as long as the add can be done with a single insn, but when the
9    constant is so large that it has to be reloaded into a register first,
10    that clobbers the index.  */
11
12 #include <stdarg.h>
13
14 #ifdef STACK_SIZE
15 /* We need to be careful that we don't blow our stack.  Function f, in the
16    worst case, needs to fit on the stack:
17
18    * 40 int[CHUNK] arrays;
19    * ~40 ints;
20    * ~40 pointers for stdarg passing.
21
22    Subtract the last two off STACK_SIZE and figure out what the maximum
23    chunk size can be.  We make the last bit conservative to account for
24    register saves and other processor-dependent saving.  */
25 #define CHUNK ((STACK_SIZE-40*sizeof(int)-256*sizeof(void *))/40/sizeof(int))
26 #else
27 #define CHUNK 500
28 #endif
29
30 void s(int, ...);
31 void z(int, ...);
32 void c(int, ...);
33
34 typedef int l[CHUNK];
35
36 void
37 f (int n)
38 {
39   int i;
40   l a0, a1, a2, a3, a4, a5, a6, a7, a8, a9;
41   l a10, a11, a12, a13, a14, a15, a16, a17, a18, a19;
42   l a20, a21, a22, a23, a24, a25, a26, a27, a28, a29;
43   l a30, a31, a32, a33, a34, a35, a36, a37, a38, a39;
44   int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9;
45   int i10, i11, i12, i13, i14, i15, i16, i17, i18, i19;
46   int i20, i21, i22, i23, i24, i25, i26, i27, i28, i29;
47   int i30, i31, i32, i33, i34, i35, i36, i37, i38, i39;
48
49   for (i = 0; i < n; i++)
50     {
51       s (40, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
52          a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
53          a20, a21, a22, a23, a24, a25, a26, a27, a28, a29,
54          a30, a31, a32, a33, a34, a35, a36, a37, a38, a39);
55       i0 = a0[0];
56       i1 = a1[0];
57       i2 = a2[0];
58       i3 = a3[0];
59       i4 = a4[0];
60       i5 = a5[0];
61       i6 = a6[0];
62       i7 = a7[0];
63       i8 = a8[0];
64       i9 = a9[0];
65       i10 = a10[0];
66       i11 = a11[0];
67       i12 = a12[0];
68       i13 = a13[0];
69       i14 = a14[0];
70       i15 = a15[0];
71       i16 = a16[0];
72       i17 = a17[0];
73       i18 = a18[0];
74       i19 = a19[0];
75       i20 = a20[0];
76       i21 = a21[0];
77       i22 = a22[0];
78       i23 = a23[0];
79       i24 = a24[0];
80       i25 = a25[0];
81       i26 = a26[0];
82       i27 = a27[0];
83       i28 = a28[0];
84       i29 = a29[0];
85       i30 = a30[0];
86       i31 = a31[0];
87       i32 = a32[0];
88       i33 = a33[0];
89       i34 = a34[0];
90       i35 = a35[0];
91       i36 = a36[0];
92       i37 = a37[0];
93       i38 = a38[0];
94       i39 = a39[0];
95       z (40, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
96          a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
97          a20, a21, a22, a23, a24, a25, a26, a27, a28, a29,
98          a30, a31, a32, a33, a34, a35, a36, a37, a38, a39);
99       a0[i0] = i0;
100       a1[i1] = i1;
101       a2[i2] = i2;
102       a3[i3] = i3;
103       a4[i4] = i4;
104       a5[i5] = i5;
105       a6[i6] = i6;
106       a7[i7] = i7;
107       a8[i8] = i8;
108       a9[i9] = i9;
109       a10[i10] = i10;
110       a11[i11] = i11;
111       a12[i12] = i12;
112       a13[i13] = i13;
113       a14[i14] = i14;
114       a15[i15] = i15;
115       a16[i16] = i16;
116       a17[i17] = i17;
117       a18[i18] = i18;
118       a19[i19] = i19;
119       a20[i20] = i20;
120       a21[i21] = i21;
121       a22[i22] = i22;
122       a23[i23] = i23;
123       a24[i24] = i24;
124       a25[i25] = i25;
125       a26[i26] = i26;
126       a27[i27] = i27;
127       a28[i28] = i28;
128       a29[i29] = i29;
129       a30[i30] = i30;
130       a31[i31] = i31;
131       a32[i32] = i32;
132       a33[i33] = i33;
133       a34[i34] = i34;
134       a35[i35] = i35;
135       a36[i36] = i36;
136       a37[i37] = i37;
137       a38[i38] = i38;
138       a39[i39] = i39;
139       c (40, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
140          a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
141          a20, a21, a22, a23, a24, a25, a26, a27, a28, a29,
142          a30, a31, a32, a33, a34, a35, a36, a37, a38, a39);
143     }
144 }
145
146 int
147 main ()
148 {
149   f (1);
150   exit (0);
151 }
152
153 void s(int n, ...)
154 {
155   va_list list;
156
157   va_start (list, n);
158   while (n--)
159     {
160       int *a = va_arg (list, int *);
161       a[0] = n;
162     }
163   va_end (list);
164 }
165
166 void z(int n, ...)
167 {
168   va_list list;
169
170   va_start (list, n);
171   while (n--)
172     {
173       int *a = va_arg (list, int *);
174       __builtin_memset (a, 0, sizeof (l));
175     }
176   va_end (list);
177 }
178
179 void c(int n, ...)
180 {
181   va_list list;
182
183   va_start (list, n);
184   while (n--)
185     {
186       int *a = va_arg (list, int *);
187       if (a[n] != n)
188         abort ();
189     }
190   va_end (list);
191 }