[Polly][NewPM] Reenable ScopPassManager unittest
[polly-mirror.git] / test / ScopDetect / statistics.ll
blobeb61fb50979457c8c9a15cfc6cdfcb4fc0e8621b
1 ; RUN: opt %loadPolly -polly-detect -stats < %s 2>&1 | FileCheck %s
3 ; REQUIRES: asserts
5 ; CHECK-DAG:  4 polly-detect     - Maximal number of loops in scops (profitable scops only)
6 ; CHECK-DAG:  4 polly-detect     - Maximal number of loops in scops
7 ; CHECK-DAG: 10 polly-detect     - Number of loops in scops (profitable scops only)
8 ; CHECK-DAG: 10 polly-detect     - Number of loops in scops
9 ; CHECK-DAG: 10 polly-detect     - Number of total loops
10 ; CHECK-DAG:  4 polly-detect     - Number of scops (profitable scops only)
11 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 4 (profitable scops only)
12 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 1 (profitable scops only)
13 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 3 (profitable scops only)
14 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 2 (profitable scops only)
15 ; CHECK-DAG:  4 polly-detect     - Number of scops
16 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 4
17 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 1
18 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 3
19 ; CHECK-DAG:  1 polly-detect     - Number of scops with maximal loop depth 2
21 ;    void foo_1d(float *A) {
22 ;      for (long i = 0; i < 1024; i++)
23 ;        A[i] += i;
24 ;    }
26 ;    void foo_2d(float *A) {
27 ;      for (long i = 0; i < 1024; i++)
28 ;        for (long j = 0; j < 1024; j++)
29 ;          A[i + j] += i + j;
30 ;    }
32 ;    void foo_3d(float *A) {
33 ;      for (long i = 0; i < 1024; i++)
34 ;        for (long j = 0; j < 1024; j++)
35 ;          for (long k = 0; k < 1024; k++)
36 ;            A[i + j + k] += i + j + k;
37 ;    }
39 ;    void foo_4d(float *A) {
40 ;      for (long i = 0; i < 1024; i++)
41 ;        for (long j = 0; j < 1024; j++)
42 ;          for (long k = 0; k < 1024; k++)
43 ;            for (long l = 0; l < 1024; l++)
44 ;              A[i + j + k + l] += i + j + k + l;
45 ;    }
47 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
49 define void @foo_1d(float* %A) {
50 bb:
51   br label %bb1
53 bb1:                                              ; preds = %bb6, %bb
54   %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ]
55   %exitcond = icmp ne i64 %i.0, 1024
56   br i1 %exitcond, label %bb2, label %bb8
58 bb2:                                              ; preds = %bb1
59   %tmp = sitofp i64 %i.0 to float
60   %tmp3 = getelementptr inbounds float, float* %A, i64 %i.0
61   %tmp4 = load float, float* %tmp3, align 4
62   %tmp5 = fadd float %tmp4, %tmp
63   store float %tmp5, float* %tmp3, align 4
64   br label %bb6
66 bb6:                                              ; preds = %bb2
67   %tmp7 = add nuw nsw i64 %i.0, 1
68   br label %bb1
70 bb8:                                              ; preds = %bb1
71   ret void
74 define void @foo_2d(float* %A) {
75 bb:
76   br label %bb2
78 bb2:                                              ; preds = %bb14, %bb
79   %i.0 = phi i64 [ 0, %bb ], [ %tmp15, %bb14 ]
80   %exitcond1 = icmp ne i64 %i.0, 1024
81   br i1 %exitcond1, label %bb3, label %bb16
83 bb3:                                              ; preds = %bb2
84   br label %bb4
86 bb4:                                              ; preds = %bb11, %bb3
87   %j.0 = phi i64 [ 0, %bb3 ], [ %tmp12, %bb11 ]
88   %exitcond = icmp ne i64 %j.0, 1024
89   br i1 %exitcond, label %bb5, label %bb13
91 bb5:                                              ; preds = %bb4
92   %tmp = add nuw nsw i64 %i.0, %j.0
93   %tmp6 = sitofp i64 %tmp to float
94   %tmp7 = add nuw nsw i64 %i.0, %j.0
95   %tmp8 = getelementptr inbounds float, float* %A, i64 %tmp7
96   %tmp9 = load float, float* %tmp8, align 4
97   %tmp10 = fadd float %tmp9, %tmp6
98   store float %tmp10, float* %tmp8, align 4
99   br label %bb11
101 bb11:                                             ; preds = %bb5
102   %tmp12 = add nuw nsw i64 %j.0, 1
103   br label %bb4
105 bb13:                                             ; preds = %bb4
106   br label %bb14
108 bb14:                                             ; preds = %bb13
109   %tmp15 = add nuw nsw i64 %i.0, 1
110   br label %bb2
112 bb16:                                             ; preds = %bb2
113   ret void
116 define void @foo_3d(float* %A) {
118   br label %bb3
120 bb3:                                              ; preds = %bb22, %bb
121   %i.0 = phi i64 [ 0, %bb ], [ %tmp23, %bb22 ]
122   %exitcond2 = icmp ne i64 %i.0, 1024
123   br i1 %exitcond2, label %bb4, label %bb24
125 bb4:                                              ; preds = %bb3
126   br label %bb5
128 bb5:                                              ; preds = %bb19, %bb4
129   %j.0 = phi i64 [ 0, %bb4 ], [ %tmp20, %bb19 ]
130   %exitcond1 = icmp ne i64 %j.0, 1024
131   br i1 %exitcond1, label %bb6, label %bb21
133 bb6:                                              ; preds = %bb5
134   br label %bb7
136 bb7:                                              ; preds = %bb16, %bb6
137   %k.0 = phi i64 [ 0, %bb6 ], [ %tmp17, %bb16 ]
138   %exitcond = icmp ne i64 %k.0, 1024
139   br i1 %exitcond, label %bb8, label %bb18
141 bb8:                                              ; preds = %bb7
142   %tmp = add nuw nsw i64 %i.0, %j.0
143   %tmp9 = add nuw nsw i64 %tmp, %k.0
144   %tmp10 = sitofp i64 %tmp9 to float
145   %tmp11 = add nuw nsw i64 %i.0, %j.0
146   %tmp12 = add nuw nsw i64 %tmp11, %k.0
147   %tmp13 = getelementptr inbounds float, float* %A, i64 %tmp12
148   %tmp14 = load float, float* %tmp13, align 4
149   %tmp15 = fadd float %tmp14, %tmp10
150   store float %tmp15, float* %tmp13, align 4
151   br label %bb16
153 bb16:                                             ; preds = %bb8
154   %tmp17 = add nuw nsw i64 %k.0, 1
155   br label %bb7
157 bb18:                                             ; preds = %bb7
158   br label %bb19
160 bb19:                                             ; preds = %bb18
161   %tmp20 = add nuw nsw i64 %j.0, 1
162   br label %bb5
164 bb21:                                             ; preds = %bb5
165   br label %bb22
167 bb22:                                             ; preds = %bb21
168   %tmp23 = add nuw nsw i64 %i.0, 1
169   br label %bb3
171 bb24:                                             ; preds = %bb3
172   ret void
175 define void @foo_4d(float* %A) {
177   br label %bb4
179 bb4:                                              ; preds = %bb30, %bb
180   %i.0 = phi i64 [ 0, %bb ], [ %tmp31, %bb30 ]
181   %exitcond3 = icmp ne i64 %i.0, 1024
182   br i1 %exitcond3, label %bb5, label %bb32
184 bb5:                                              ; preds = %bb4
185   br label %bb6
187 bb6:                                              ; preds = %bb27, %bb5
188   %j.0 = phi i64 [ 0, %bb5 ], [ %tmp28, %bb27 ]
189   %exitcond2 = icmp ne i64 %j.0, 1024
190   br i1 %exitcond2, label %bb7, label %bb29
192 bb7:                                              ; preds = %bb6
193   br label %bb8
195 bb8:                                              ; preds = %bb24, %bb7
196   %k.0 = phi i64 [ 0, %bb7 ], [ %tmp25, %bb24 ]
197   %exitcond1 = icmp ne i64 %k.0, 1024
198   br i1 %exitcond1, label %bb9, label %bb26
200 bb9:                                              ; preds = %bb8
201   br label %bb10
203 bb10:                                             ; preds = %bb21, %bb9
204   %l.0 = phi i64 [ 0, %bb9 ], [ %tmp22, %bb21 ]
205   %exitcond = icmp ne i64 %l.0, 1024
206   br i1 %exitcond, label %bb11, label %bb23
208 bb11:                                             ; preds = %bb10
209   %tmp = add nuw nsw i64 %i.0, %j.0
210   %tmp12 = add nuw nsw i64 %tmp, %k.0
211   %tmp13 = add nuw nsw i64 %tmp12, %l.0
212   %tmp14 = sitofp i64 %tmp13 to float
213   %tmp15 = add nuw nsw i64 %i.0, %j.0
214   %tmp16 = add nuw nsw i64 %tmp15, %k.0
215   %tmp17 = add nuw nsw i64 %tmp16, %l.0
216   %tmp18 = getelementptr inbounds float, float* %A, i64 %tmp17
217   %tmp19 = load float, float* %tmp18, align 4
218   %tmp20 = fadd float %tmp19, %tmp14
219   store float %tmp20, float* %tmp18, align 4
220   br label %bb21
222 bb21:                                             ; preds = %bb11
223   %tmp22 = add nuw nsw i64 %l.0, 1
224   br label %bb10
226 bb23:                                             ; preds = %bb10
227   br label %bb24
229 bb24:                                             ; preds = %bb23
230   %tmp25 = add nuw nsw i64 %k.0, 1
231   br label %bb8
233 bb26:                                             ; preds = %bb8
234   br label %bb27
236 bb27:                                             ; preds = %bb26
237   %tmp28 = add nuw nsw i64 %j.0, 1
238   br label %bb6
240 bb29:                                             ; preds = %bb6
241   br label %bb30
243 bb30:                                             ; preds = %bb29
244   %tmp31 = add nuw nsw i64 %i.0, 1
245   br label %bb4
247 bb32:                                             ; preds = %bb4
248   ret void