* gcc.target/i386/pr70021.c: Add -mtune=skylake.
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / pr22141.c
blob036422e8ccf3a60c8dde10b7ce90dd391afe7f1d
1 /* PR middle-end/22141 */
2 /* { dg-do compile } */
3 /* { dg-options "-Os" } */
5 extern void abort (void);
7 struct S
9 struct T
11 char a;
12 char b;
13 char c;
14 char d;
15 } t;
16 } u;
18 struct U
20 struct S s[4];
23 void __attribute__((noinline))
24 c1 (struct T *p)
26 if (p->a != 1 || p->b != 2 || p->c != 3 || p->d != 4)
27 abort ();
28 __builtin_memset (p, 0xaa, sizeof (*p));
31 void __attribute__((noinline))
32 c2 (struct S *p)
34 c1 (&p->t);
37 void __attribute__((noinline))
38 c3 (struct U *p)
40 c2 (&p->s[2]);
43 void __attribute__((noinline))
44 f1 (void)
46 u = (struct S) { { 1, 2, 3, 4 } };
49 void __attribute__((noinline))
50 f2 (void)
52 u.t.a = 1;
53 u.t.b = 2;
54 u.t.c = 3;
55 u.t.d = 4;
58 void __attribute__((noinline))
59 f3 (void)
61 u.t.d = 4;
62 u.t.b = 2;
63 u.t.a = 1;
64 u.t.c = 3;
67 void __attribute__((noinline))
68 f4 (void)
70 struct S v;
71 v.t.a = 1;
72 v.t.b = 2;
73 v.t.c = 3;
74 v.t.d = 4;
75 c2 (&v);
78 void __attribute__((noinline))
79 f5 (struct S *p)
81 p->t.a = 1;
82 p->t.c = 3;
83 p->t.d = 4;
84 p->t.b = 2;
87 void __attribute__((noinline))
88 f6 (void)
90 struct U v;
91 v.s[2].t.a = 1;
92 v.s[2].t.b = 2;
93 v.s[2].t.c = 3;
94 v.s[2].t.d = 4;
95 c3 (&v);
98 void __attribute__((noinline))
99 f7 (struct U *p)
101 p->s[2].t.a = 1;
102 p->s[2].t.c = 3;
103 p->s[2].t.d = 4;
104 p->s[2].t.b = 2;
108 main (void)
110 struct U w;
111 f1 ();
112 c2 (&u);
113 f2 ();
114 c1 (&u.t);
115 f3 ();
116 c2 (&u);
117 f4 ();
118 f5 (&u);
119 c2 (&u);
120 f6 ();
121 f7 (&w);
122 c3 (&w);
123 return 0;
126 /* { dg-final { scan-assembler-times "67305985\|4030201" 7 } } */