]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-32.c
Fix profile update in tree_transform_and_unroll_loop
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ssa-ccp-32.c
1 /* { dg-do run } */
2 /* { dg-options "-O" } */
3
4 extern void link_error (void);
5 unsigned int __attribute__((noinline,noclone))
6 test0 (unsigned int a)
7 {
8 a = a & 1;
9 a = a << 1 | a >> (sizeof (unsigned int) * 8 - 1);
10 if (a & 1)
11 {
12 a = a | 4;
13 link_error ();
14 }
15 if (a & 4)
16 link_error ();
17 return a;
18 }
19 int __attribute__((noinline,noclone))
20 test1 (int a)
21 {
22 a |= 1;
23 a = a << (sizeof (int) * 8 - 1);
24 if (a >= 0)
25 link_error ();
26 a = a * 4;
27 if (a & ~3)
28 link_error ();
29 if (a == -1)
30 link_error ();
31 return a;
32 }
33 int __attribute__((noinline,noclone))
34 test2 (int a)
35 {
36 a = a | 0xff;
37 a = a + 1;
38 if (a & 0xff)
39 link_error ();
40 a = -a;
41 if (a & 0xff)
42 link_error ();
43 a = a - 1;
44 if ((a & 0xff) != 0xff)
45 link_error ();
46 return a;
47 }
48 extern void abort (void);
49 int main()
50 {
51 if (test0 (1) != 2)
52 abort ();
53 if (test1 (0) != 0)
54 abort ();
55 if (test2 (-1) != -1)
56 abort ();
57 return 0;
58 }