* tree-loop-distribution.c (INCLUDE_ALGORITHM): New header file.
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ssa-fre-44.c
blobf79b4c142aec7d4d2ea6faf9b0281c9b2d3f020b
1 /* { dg-do compile } */
2 /* { dg-options "-O -fdump-tree-fre1" } */
4 struct A { float x, y; };
5 struct B { struct A u; };
6 void bar (struct A *);
8 float
9 f1 (struct B *x, int y)
11 struct A p;
12 p.x = 1.0f;
13 p.y = 2.0f;
14 struct A *q = &x[y].u;
15 *q = p;
16 float f = x[y].u.x + x[y].u.y;
17 bar (&p);
18 return f;
21 float
22 f2 (struct B *x, int y)
24 struct A p;
25 p.x = 1.0f;
26 p.y = 2.0f;
27 x[y].u = p;
28 float f = x[y].u.x + x[y].u.y;
29 bar (&p);
30 return f;
33 float
34 f3 (struct B *x, int y)
36 struct A p;
37 p.x = 1.0f;
38 p.y = 2.0f;
39 struct A *q = &x[y].u;
40 __builtin_memcpy (&q->x, &p.x, sizeof (float));
41 __builtin_memcpy (&q->y, &p.y, sizeof (float));
42 float f = x[y].u.x + x[y].u.y;
43 bar (&p);
44 return f;
47 float
48 f4 (struct B *x, int y)
50 struct A p;
51 p.x = 1.0f;
52 p.y = 2.0f;
53 __builtin_memcpy (&x[y].u.x, &p.x, sizeof (float));
54 __builtin_memcpy (&x[y].u.y, &p.y, sizeof (float));
55 float f = x[y].u.x + x[y].u.y;
56 bar (&p);
57 return f;
60 /* { dg-final { scan-tree-dump-times "return 3.0" 4 "fre1" } } */