1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fno-ipa-icf -fdump-tree-ldist-details" } */
3 
4 struct Foo
5 {
6   char a;
7 };
8 
9 struct Foo x[256];
10 
11 static void __attribute__((noinline,noclone))
foo()12 foo()
13 {
14   int i;
15   for (i = 0; i < 256; ++i)
16     x[i] = (struct Foo){};
17 }
18 
19 static void __attribute__((noinline,noclone))
bar()20 bar()
21 {
22   int i;
23   for (i = 0; i < 256; ++i)
24     x[i].a = 1;
25 }
26 
27 static void __attribute__((noinline,noclone))
foobar(unsigned char c)28 foobar(unsigned char c)
29 {
30   int i;
31   for (i = 0; i < 256; ++i)
32     x[i].a = c;
33 }
34 
35 static void __attribute__((noinline,noclone))
foobar2(char c)36 foobar2(char c)
37 {
38   int i;
39   for (i = 0; i < 256; ++i)
40     x[i].a = c;
41 }
42 
43 struct Baz
44 {
45   short a;
46 };
47 
48 struct Baz y[256];
49 
50 static void __attribute__((noinline,noclone))
baz()51 baz()
52 {
53   int i;
54   for (i = 0; i < 256; ++i)
55     y[i].a = -1;
56 }
57 
main()58 int main()
59 {
60   volatile int x;
61   foo();
62   bar();
63   foobar(x);
64   foobar2(x);
65   baz();
66   return 0;
67 }
68 
69 /* { dg-final { scan-tree-dump-times "generated memset zero" 1 "ldist" } } */
70 /* { dg-final { scan-tree-dump-times "generated memset" 5 "ldist" } } */
71