1 /* PR middle-end/47893 */
3 /* { dg-options "-O2" } */
4 /* { dg-options "-O2 -mtune=atom -fno-omit-frame-pointer -fno-strict-aliasing" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
5 /* { dg-skip-if "Too much RAM needed" { "avr-*-*" } { "*" } { "" } } */
7 extern void abort (void);
11 unsigned s1:4, s2:2, s3:2, s4:2, s5:2, s6:1, s7:1, s8:1, s9:1, s10:1;
12 int s11:16; unsigned s12:4; int s13:16; unsigned s14:2;
13 int s15:16; unsigned s16:4; int s17:16; unsigned s18:2;
30 char w1[24]; struct V *w2; unsigned w3; char w4[28912];
31 unsigned int w5; char w6[60];
54 volatile struct S v1 = { .s15 = -1, .s16 = 15, .s17 = -1, .s18 = 3 };
56 __attribute__ ((noinline, noclone))
61 __asm__ volatile ("" : "=r" (r) : "0" (1), "r" (x) : "memory");
67 __attribute__ ((noinline, noclone))
69 __attribute__ ((regparm (2)))
72 fn2 (struct Y *x, const struct X *y)
76 __asm__ volatile ("" : : "r" (x), "r" (y) : "memory");
80 __attribute__ ((noinline, noclone))
81 void fn3 (void *x, unsigned y, const struct S *z, unsigned w)
83 __asm__ volatile ("" : : "r" (x), "r" (y), "r" (z), "r" (w) : "memory");
88 __attribute__ ((noinline, noclone))
90 fn4 (void *x, unsigned y)
92 __asm__ volatile ("" : : "r" (x), "r" (y) : "memory");
96 __attribute__ ((noinline, noclone))
100 __asm__ volatile ("" : : "r" (x) : "memory");
104 volatile struct T v3;
106 __attribute__ ((noinline, noclone))
107 struct T fn6 (void *x)
109 __asm__ volatile ("" : : "r" (x) : "memory");
113 __attribute__ ((noinline, noclone))
114 struct T fn7 (void *x, unsigned y, unsigned z)
116 __asm__ volatile ("" : : "r" (x), "r" (y), "r" (z) : "memory");
121 fn8 (struct Y *x, const struct V *y)
127 for (i = 0; i < c; i++)
128 b[i] = fn2 (x, &y->v2[i]);
129 fn3 (a, y->v1, b, c);
133 fn9 (void *x, struct S y __attribute__((unused)))
142 struct T b __attribute__((unused)) = fn6 (a);
146 __attribute__((noinline, noclone))
148 fn11 (unsigned int x, void *y, const struct W *z,
149 unsigned int w, const char *v, const char *u)
154 __builtin_memset (t, 0, sizeof *t);
160 for (i = 0; i < w; i++)
163 t->y3[i] = fn7 (y, 0, u[i]);
169 for (i = 0; i < w; i++)
170 t->y3[i] = fn7 (y, v[i], u[i]);
171 for (i = 0; i < z->w5; i++)
177 const char *volatile p = "";
182 struct V v = { .v1 = 0 };
183 struct W w = { .w5 = 1, .w2 = &v };
184 fn11 (i + 1, (void *) p, &w, i, (const char *) p, (const char *) p);