1; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops \
2; RUN:     < %s 2>&1 | FileCheck %s
3
4; We build a scop of the following form to check that the domain construction
5; does not take a huge amount of time, but that we instead just bail out.
6;
7;       loop.header
8;      /    |    \ \
9;    A0    A2    A4 \
10;      \  /  \  /    \
11;       A1    A3      \
12;      /  \  /  \     |
13;    B0    B2    B4   |
14;      \  /  \  /     |
15;       B1    B3      ^
16;      /  \  /  \     |
17;    C0    C2    C4   |
18;      \  /  \  /    /
19;       C1    C3    /
20;        \   /     /
21;     loop backedge
22
23; CHECK: Low complexity assumption: {  : false }
24
25define void @foo(float* %A, float* %B, float* %C, float* %D, float* %E,
26                 i64 %A1.p, i64 %A2.p, i64 %A3.p,
27                 i64 %B1.p, i64 %B2.p, i64 %B3.p,
28                 i64 %C1.p, i64 %C2.p, i64 %C3.p,
29                 i64 %D1.p, i64 %D2.p, i64 %D3.p,
30                 i64 %E1.p, i64 %E2.p, i64 %E3.p) {
31entry:
32  br label %loop.header
33
34loop.header:
35  %indvar = phi i64 [0, %entry], [%indvar.next, %loop.backedge]
36  switch i2 0, label %A0 [i2 1, label %A2 i2 2, label %A4]
37
38A0:
39  %val.A0 = load float, float* %A
40  store float %val.A0, float* %A
41  br label %A1
42
43A2:
44  %val.A2 = load float, float* %A
45  store float %val.A2, float* %A
46  %A2.cmp = icmp eq i64 %A2.p, 0
47  br i1 %A2.cmp, label %A1, label %A3
48
49A4:
50  %val.A4 = load float, float* %A
51  store float %val.A4, float* %A
52  br label %A3
53
54A1:
55  %val.A1 = load float, float* %A
56  store float %val.A1, float* %A
57  %A1.cmp = icmp eq i64 %A1.p, 0
58  br i1 %A1.cmp, label %B0, label %B2
59
60A3:
61  %val.A3 = load float, float* %A
62  store float %val.A3, float* %A
63  %A3.cmp = icmp eq i64 %A3.p, 0
64  br i1 %A3.cmp, label %B2, label %B4
65
66B0:
67  %val.B0 = load float, float* %B
68  store float %val.B0, float* %B
69  br label %B1
70
71B2:
72  %val.B2 = load float, float* %B
73  store float %val.B2, float* %B
74  %B2.cmp = icmp eq i64 %B2.p, 0
75  br i1 %B2.cmp, label %B1, label %B3
76
77B4:
78  %val.B4 = load float, float* %B
79  store float %val.B4, float* %B
80  br label %B3
81
82B1:
83  %val.B1 = load float, float* %B
84  store float %val.B1, float* %B
85  %B1.cmp = icmp eq i64 %B1.p, 0
86  br i1 %B1.cmp, label %C0, label %C2
87
88B3:
89  %val.B3 = load float, float* %A
90  store float %val.B3, float* %A
91  %B3.cmp = icmp eq i64 %A3.p, 0
92  br i1 %B3.cmp, label %C2, label %C4
93
94C0:
95  %val.C0 = load float, float* %C
96  store float %val.C0, float* %C
97  br label %C1
98
99C2:
100  %val.C2 = load float, float* %C
101  store float %val.C2, float* %C
102  %C2.cmp = icmp eq i64 %C2.p, 0
103  br i1 %C2.cmp, label %C1, label %C3
104
105C4:
106  %val.C4 = load float, float* %C
107  store float %val.C4, float* %C
108  br label %C3
109
110C1:
111  %val.C1 = load float, float* %C
112  store float %val.C1, float* %C
113  %C1.cmp = icmp eq i64 %C1.p, 0
114  br i1 %C1.cmp, label %D0, label %D2
115
116C3:
117  %val.C3 = load float, float* %C
118  store float %val.C3, float* %C
119  %C3.cmp = icmp eq i64 %C3.p, 0
120  br i1 %C3.cmp, label %D2, label %D4
121
122D0:
123  %val.D0 = load float, float* %D
124  store float %val.D0, float* %D
125  br label %D1
126
127D2:
128  %val.D2 = load float, float* %D
129  store float %val.D2, float* %D
130  %D2.cmp = icmp eq i64 %D2.p, 0
131  br i1 %D2.cmp, label %D1, label %D3
132
133D4:
134  %val.D4 = load float, float* %D
135  store float %val.D4, float* %D
136  br label %D3
137
138D1:
139  %val.D1 = load float, float* %D
140  store float %val.D1, float* %D
141  %D1.cmp = icmp eq i64 %D1.p, 0
142  br i1 %D1.cmp, label %E0, label %E2
143
144D3:
145  %val.D3 = load float, float* %D
146  store float %val.D3, float* %D
147  %D3.cmp = icmp eq i64 %D3.p, 0
148  br i1 %D3.cmp, label %E2, label %E4
149
150E0:
151  %val.E0 = load float, float* %E
152  store float %val.E0, float* %E
153  br label %E1
154
155E2:
156  %val.E2 = load float, float* %E
157  store float %val.E2, float* %E
158  %E2.cmp = icmp eq i64 %E2.p, 0
159  br i1 %E2.cmp, label %E1, label %E3
160
161E4:
162  %val.E4 = load float, float* %E
163  store float %val.E4, float* %E
164  br label %E3
165
166E1:
167  %val.E1 = load float, float* %E
168  store float %val.E1, float* %E
169  %E1.cmp = icmp eq i64 %E1.p, 0
170  br i1 %E1.cmp, label %F0, label %F2
171
172E3:
173  %val.E3 = load float, float* %E
174  store float %val.E3, float* %E
175  %E3.cmp = icmp eq i64 %E3.p, 0
176  br i1 %E3.cmp, label %F2, label %F4
177
178F0:
179  br label %loop.backedge
180
181F2:
182  br label %loop.backedge
183
184F4:
185  br label %loop.backedge
186
187loop.backedge:
188  %indvar.next = add i64 %indvar, 1
189  %cmp = icmp ne i64 %indvar, 1000
190  br i1 %cmp, label %loop.header, label %exit
191
192exit:
193  ret void
194
195}
196