]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.dg/tree-ssa/ssa-thread-invalid.c
Fix profile update in tree_transform_and_unroll_loop
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ssa-thread-invalid.c
CommitLineData
d8edfadf
AH
1// { dg-do compile }
2// { dg-options "-O2 -fgimple -fdump-statistics" }
3//
4// This is a collection of seemingly threadble paths that should not be allowed.
5
6void foobar (int);
7
8// Possible thread from 2->4->3, but it would rotate the loop.
9void __GIMPLE (ssa)
10f1 ()
11{
12 int i;
13
14 // Pre-header.
15 __BB(2):
16 goto __BB4;
17
18 // Latch.
19 __BB(3):
20 foobar (i_1);
21 i_5 = i_1 + 1;
22 goto __BB4;
23
24 __BB(4,loop_header(1)):
25 i_1 = __PHI (__BB2: 0, __BB3: i_5);
26 if (i_1 != 101)
27 goto __BB3;
28 else
29 goto __BB5;
30
31 __BB(5):
32 return;
33
34}
35
36// Possible thread from 2->3->5 but threading through the empty latch
37// would create a non-empty latch.
38void __GIMPLE (ssa)
39f2 ()
40{
41 int i;
42
43 // Pre-header.
44 __BB(2):
45 goto __BB3;
46
47 __BB(3,loop_header(1)):
48 i_8 = __PHI (__BB5: i_5, __BB2: 0);
49 foobar (i_8);
50 i_5 = i_8 + 1;
51 if (i_5 != 256)
52 goto __BB5;
53 else
54 goto __BB4;
55
56 // Latch.
57 __BB(5):
58 goto __BB3;
59
60 __BB(4):
61 return;
62
63}
64
65// Possible thread from 3->5->6->3 but this would thread through the
66// header but not exit the loop.
67int __GIMPLE (ssa)
68f3 (int a)
69{
70 int i;
71
72 __BB(2):
73 goto __BB6;
74
75 __BB(3):
76 if (i_1 != 0)
77 goto __BB4;
78 else
79 goto __BB5;
80
81 __BB(4):
82 foobar (5);
83 goto __BB5;
84
85 // Latch.
86 __BB(5):
87 i_7 = i_1 + 1;
88 goto __BB6;
89
90 __BB(6,loop_header(1)):
91 i_1 = __PHI (__BB2: 1, __BB5: i_7);
92 if (i_1 <= 99)
93 goto __BB3;
94 else
95 goto __BB7;
96
97 __BB(7):
98 return;
99
100}
101
102// { dg-final { scan-tree-dump-not "Jumps threaded" "statistics" } }