[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / polly / test / ScopInfo / complex-branch-structure.ll
blob24ebdcf213f8cbe357b976b19c2ae1cc97b778d7
1 ; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-print-scops \
2 ; RUN:     -disable-output < %s 2>&1 | FileCheck %s
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.
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
23 ; CHECK: Low complexity assumption: {  : false }
25 define void @foo(ptr %A, ptr %B, ptr %C, ptr %D, ptr %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) {
31 entry:
32   br label %loop.header
34 loop.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]
38 A0:
39   %val.A0 = load float, ptr %A
40   store float %val.A0, ptr %A
41   br label %A1
43 A2:
44   %val.A2 = load float, ptr %A
45   store float %val.A2, ptr %A
46   %A2.cmp = icmp eq i64 %A2.p, 0
47   br i1 %A2.cmp, label %A1, label %A3
49 A4:
50   %val.A4 = load float, ptr %A
51   store float %val.A4, ptr %A
52   br label %A3
54 A1:
55   %val.A1 = load float, ptr %A
56   store float %val.A1, ptr %A
57   %A1.cmp = icmp eq i64 %A1.p, 0
58   br i1 %A1.cmp, label %B0, label %B2
60 A3:
61   %val.A3 = load float, ptr %A
62   store float %val.A3, ptr %A
63   %A3.cmp = icmp eq i64 %A3.p, 0
64   br i1 %A3.cmp, label %B2, label %B4
66 B0:
67   %val.B0 = load float, ptr %B
68   store float %val.B0, ptr %B
69   br label %B1
71 B2:
72   %val.B2 = load float, ptr %B
73   store float %val.B2, ptr %B
74   %B2.cmp = icmp eq i64 %B2.p, 0
75   br i1 %B2.cmp, label %B1, label %B3
77 B4:
78   %val.B4 = load float, ptr %B
79   store float %val.B4, ptr %B
80   br label %B3
82 B1:
83   %val.B1 = load float, ptr %B
84   store float %val.B1, ptr %B
85   %B1.cmp = icmp eq i64 %B1.p, 0
86   br i1 %B1.cmp, label %C0, label %C2
88 B3:
89   %val.B3 = load float, ptr %A
90   store float %val.B3, ptr %A
91   %B3.cmp = icmp eq i64 %A3.p, 0
92   br i1 %B3.cmp, label %C2, label %C4
94 C0:
95   %val.C0 = load float, ptr %C
96   store float %val.C0, ptr %C
97   br label %C1
99 C2:
100   %val.C2 = load float, ptr %C
101   store float %val.C2, ptr %C
102   %C2.cmp = icmp eq i64 %C2.p, 0
103   br i1 %C2.cmp, label %C1, label %C3
106   %val.C4 = load float, ptr %C
107   store float %val.C4, ptr %C
108   br label %C3
111   %val.C1 = load float, ptr %C
112   store float %val.C1, ptr %C
113   %C1.cmp = icmp eq i64 %C1.p, 0
114   br i1 %C1.cmp, label %D0, label %D2
117   %val.C3 = load float, ptr %C
118   store float %val.C3, ptr %C
119   %C3.cmp = icmp eq i64 %C3.p, 0
120   br i1 %C3.cmp, label %D2, label %D4
123   %val.D0 = load float, ptr %D
124   store float %val.D0, ptr %D
125   br label %D1
128   %val.D2 = load float, ptr %D
129   store float %val.D2, ptr %D
130   %D2.cmp = icmp eq i64 %D2.p, 0
131   br i1 %D2.cmp, label %D1, label %D3
134   %val.D4 = load float, ptr %D
135   store float %val.D4, ptr %D
136   br label %D3
139   %val.D1 = load float, ptr %D
140   store float %val.D1, ptr %D
141   %D1.cmp = icmp eq i64 %D1.p, 0
142   br i1 %D1.cmp, label %E0, label %E2
145   %val.D3 = load float, ptr %D
146   store float %val.D3, ptr %D
147   %D3.cmp = icmp eq i64 %D3.p, 0
148   br i1 %D3.cmp, label %E2, label %E4
151   %val.E0 = load float, ptr %E
152   store float %val.E0, ptr %E
153   br label %E1
156   %val.E2 = load float, ptr %E
157   store float %val.E2, ptr %E
158   %E2.cmp = icmp eq i64 %E2.p, 0
159   br i1 %E2.cmp, label %E1, label %E3
162   %val.E4 = load float, ptr %E
163   store float %val.E4, ptr %E
164   br label %E3
167   %val.E1 = load float, ptr %E
168   store float %val.E1, ptr %E
169   %E1.cmp = icmp eq i64 %E1.p, 0
170   br i1 %E1.cmp, label %F0, label %F2
173   %val.E3 = load float, ptr %E
174   store float %val.E3, ptr %E
175   %E3.cmp = icmp eq i64 %E3.p, 0
176   br i1 %E3.cmp, label %F2, label %F4
179   br label %loop.backedge
182   br label %loop.backedge
185   br label %loop.backedge
187 loop.backedge:
188   %indvar.next = add i64 %indvar, 1
189   %cmp = icmp ne i64 %indvar, 1000
190   br i1 %cmp, label %loop.header, label %exit
192 exit:
193   ret void