annotate gcc/testsuite/gcc.dg/tree-ssa/pr45122.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR tree-optimization/27285 */
kono
parents:
diff changeset
2 /* PR tree-optimization/45122 */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 /* { dg-do run } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
5 /* { dg-options "-O2" } */
111
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 extern void abort (void);
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 struct S { unsigned char a, b, c, d[16]; };
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 void __attribute__ ((noinline))
kono
parents:
diff changeset
12 foo (struct S *x, struct S *y)
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 int a, b;
kono
parents:
diff changeset
15 unsigned char c, *d, *e;
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 b = x->b;
kono
parents:
diff changeset
18 d = x->d;
kono
parents:
diff changeset
19 e = y->d;
kono
parents:
diff changeset
20 a = 0;
kono
parents:
diff changeset
21 while (b)
kono
parents:
diff changeset
22 {
kono
parents:
diff changeset
23 if (b >= 8)
kono
parents:
diff changeset
24 {
kono
parents:
diff changeset
25 c = 0xff;
kono
parents:
diff changeset
26 b -= 8;
kono
parents:
diff changeset
27 }
kono
parents:
diff changeset
28 else
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 c = 0xff << (8 - b);
kono
parents:
diff changeset
31 b = 0;
kono
parents:
diff changeset
32 }
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 e[a] = d[a] & c;
kono
parents:
diff changeset
35 a++;
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 int
kono
parents:
diff changeset
40 main (void)
kono
parents:
diff changeset
41 {
kono
parents:
diff changeset
42 struct S x = { 0, 25, 0, { 0xaa, 0xbb, 0xcc, 0xdd }};
kono
parents:
diff changeset
43 struct S y = { 0, 0, 0, { 0 }};
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 foo (&x, &y);
kono
parents:
diff changeset
46 if (x.d[0] != y.d[0] || x.d[1] != y.d[1]
kono
parents:
diff changeset
47 || x.d[2] != y.d[2] || (x.d[3] & 0x80) != y.d[3])
kono
parents:
diff changeset
48 abort ();
kono
parents:
diff changeset
49 return 0;
kono
parents:
diff changeset
50 }