1; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
2;
3; CHECK: Assumed Context:
4; CHECK-NEXT: { : }
5;
6; Make sure the large number of read-only accesses does not cause make us
7; invalidate the scop.
8;
9;    void many_read_only_accesses(float A[], float B[]) {
10;      for (long i = 0; i < 1024; i++) {
11;        for (long j = 0; j < 1024; j++) {
12;          A[j] += B[i] + B[i + 1] + B[i + 2] + B[i + 3] + B[i + 4] + B[i + 5] +
13;                  B[i + 6] + B[i + 7] + B[i + 8] + B[i + 9] + B[i + 0] + B[i + 11] +
14;                  B[i + 12] + B[i + 13] + B[i + 14] + B[i + 15] + B[i + 16] +
15;                  B[i + 17] + B[i + 18] + B[i + 19] + B[i + 10] + B[i + 21] +
16;                  B[i + 22] + B[i + 23] + B[i + 24] + B[i + 25] + B[i + 26] +
17;                  B[i + 27] + B[i + 28] + B[i + 29] + B[i + 20] + B[i + 31] +
18;                  B[i + 32] + B[i + 33] + B[i + 34] + B[i + 35] + B[i + 36] +
19;                  B[i + 37] + B[i + 38] + B[i + 39] + B[i + 30];
20;        }
21;      }
22;    }
23;
24target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
25
26define void @many_read_only_accesses(float* %A, float* %B) {
27bb:
28  br label %bb2
29
30bb2:                                              ; preds = %bb172, %bb
31  %i.0 = phi i64 [ 0, %bb ], [ %tmp173, %bb172 ]
32  %exitcond1 = icmp ne i64 %i.0, 1024
33  br i1 %exitcond1, label %bb3, label %bb174
34
35bb3:                                              ; preds = %bb2
36  br label %bb4
37
38bb4:                                              ; preds = %bb169, %bb3
39  %j.0 = phi i64 [ 0, %bb3 ], [ %tmp170, %bb169 ]
40  %exitcond = icmp ne i64 %j.0, 1024
41  br i1 %exitcond, label %bb5, label %bb171
42
43bb5:                                              ; preds = %bb4
44  %tmp = getelementptr inbounds float, float* %B, i64 %i.0
45  %tmp6 = load float, float* %tmp, align 4
46  %tmp7 = add nuw nsw i64 %i.0, 1
47  %tmp8 = getelementptr inbounds float, float* %B, i64 %tmp7
48  %tmp9 = load float, float* %tmp8, align 4
49  %tmp10 = fadd float %tmp6, %tmp9
50  %tmp11 = add nuw nsw i64 %i.0, 2
51  %tmp12 = getelementptr inbounds float, float* %B, i64 %tmp11
52  %tmp13 = load float, float* %tmp12, align 4
53  %tmp14 = fadd float %tmp10, %tmp13
54  %tmp15 = add nuw nsw i64 %i.0, 3
55  %tmp16 = getelementptr inbounds float, float* %B, i64 %tmp15
56  %tmp17 = load float, float* %tmp16, align 4
57  %tmp18 = fadd float %tmp14, %tmp17
58  %tmp19 = add nuw nsw i64 %i.0, 4
59  %tmp20 = getelementptr inbounds float, float* %B, i64 %tmp19
60  %tmp21 = load float, float* %tmp20, align 4
61  %tmp22 = fadd float %tmp18, %tmp21
62  %tmp23 = add nuw nsw i64 %i.0, 5
63  %tmp24 = getelementptr inbounds float, float* %B, i64 %tmp23
64  %tmp25 = load float, float* %tmp24, align 4
65  %tmp26 = fadd float %tmp22, %tmp25
66  %tmp27 = add nuw nsw i64 %i.0, 6
67  %tmp28 = getelementptr inbounds float, float* %B, i64 %tmp27
68  %tmp29 = load float, float* %tmp28, align 4
69  %tmp30 = fadd float %tmp26, %tmp29
70  %tmp31 = add nuw nsw i64 %i.0, 7
71  %tmp32 = getelementptr inbounds float, float* %B, i64 %tmp31
72  %tmp33 = load float, float* %tmp32, align 4
73  %tmp34 = fadd float %tmp30, %tmp33
74  %tmp35 = add nuw nsw i64 %i.0, 8
75  %tmp36 = getelementptr inbounds float, float* %B, i64 %tmp35
76  %tmp37 = load float, float* %tmp36, align 4
77  %tmp38 = fadd float %tmp34, %tmp37
78  %tmp39 = add nuw nsw i64 %i.0, 9
79  %tmp40 = getelementptr inbounds float, float* %B, i64 %tmp39
80  %tmp41 = load float, float* %tmp40, align 4
81  %tmp42 = fadd float %tmp38, %tmp41
82  %tmp43 = getelementptr inbounds float, float* %B, i64 %i.0
83  %tmp44 = load float, float* %tmp43, align 4
84  %tmp45 = fadd float %tmp42, %tmp44
85  %tmp46 = add nuw nsw i64 %i.0, 11
86  %tmp47 = getelementptr inbounds float, float* %B, i64 %tmp46
87  %tmp48 = load float, float* %tmp47, align 4
88  %tmp49 = fadd float %tmp45, %tmp48
89  %tmp50 = add nuw nsw i64 %i.0, 12
90  %tmp51 = getelementptr inbounds float, float* %B, i64 %tmp50
91  %tmp52 = load float, float* %tmp51, align 4
92  %tmp53 = fadd float %tmp49, %tmp52
93  %tmp54 = add nuw nsw i64 %i.0, 13
94  %tmp55 = getelementptr inbounds float, float* %B, i64 %tmp54
95  %tmp56 = load float, float* %tmp55, align 4
96  %tmp57 = fadd float %tmp53, %tmp56
97  %tmp58 = add nuw nsw i64 %i.0, 14
98  %tmp59 = getelementptr inbounds float, float* %B, i64 %tmp58
99  %tmp60 = load float, float* %tmp59, align 4
100  %tmp61 = fadd float %tmp57, %tmp60
101  %tmp62 = add nuw nsw i64 %i.0, 15
102  %tmp63 = getelementptr inbounds float, float* %B, i64 %tmp62
103  %tmp64 = load float, float* %tmp63, align 4
104  %tmp65 = fadd float %tmp61, %tmp64
105  %tmp66 = add nuw nsw i64 %i.0, 16
106  %tmp67 = getelementptr inbounds float, float* %B, i64 %tmp66
107  %tmp68 = load float, float* %tmp67, align 4
108  %tmp69 = fadd float %tmp65, %tmp68
109  %tmp70 = add nuw nsw i64 %i.0, 17
110  %tmp71 = getelementptr inbounds float, float* %B, i64 %tmp70
111  %tmp72 = load float, float* %tmp71, align 4
112  %tmp73 = fadd float %tmp69, %tmp72
113  %tmp74 = add nuw nsw i64 %i.0, 18
114  %tmp75 = getelementptr inbounds float, float* %B, i64 %tmp74
115  %tmp76 = load float, float* %tmp75, align 4
116  %tmp77 = fadd float %tmp73, %tmp76
117  %tmp78 = add nuw nsw i64 %i.0, 19
118  %tmp79 = getelementptr inbounds float, float* %B, i64 %tmp78
119  %tmp80 = load float, float* %tmp79, align 4
120  %tmp81 = fadd float %tmp77, %tmp80
121  %tmp82 = add nuw nsw i64 %i.0, 10
122  %tmp83 = getelementptr inbounds float, float* %B, i64 %tmp82
123  %tmp84 = load float, float* %tmp83, align 4
124  %tmp85 = fadd float %tmp81, %tmp84
125  %tmp86 = add nuw nsw i64 %i.0, 21
126  %tmp87 = getelementptr inbounds float, float* %B, i64 %tmp86
127  %tmp88 = load float, float* %tmp87, align 4
128  %tmp89 = fadd float %tmp85, %tmp88
129  %tmp90 = add nuw nsw i64 %i.0, 22
130  %tmp91 = getelementptr inbounds float, float* %B, i64 %tmp90
131  %tmp92 = load float, float* %tmp91, align 4
132  %tmp93 = fadd float %tmp89, %tmp92
133  %tmp94 = add nuw nsw i64 %i.0, 23
134  %tmp95 = getelementptr inbounds float, float* %B, i64 %tmp94
135  %tmp96 = load float, float* %tmp95, align 4
136  %tmp97 = fadd float %tmp93, %tmp96
137  %tmp98 = add nuw nsw i64 %i.0, 24
138  %tmp99 = getelementptr inbounds float, float* %B, i64 %tmp98
139  %tmp100 = load float, float* %tmp99, align 4
140  %tmp101 = fadd float %tmp97, %tmp100
141  %tmp102 = add nuw nsw i64 %i.0, 25
142  %tmp103 = getelementptr inbounds float, float* %B, i64 %tmp102
143  %tmp104 = load float, float* %tmp103, align 4
144  %tmp105 = fadd float %tmp101, %tmp104
145  %tmp106 = add nuw nsw i64 %i.0, 26
146  %tmp107 = getelementptr inbounds float, float* %B, i64 %tmp106
147  %tmp108 = load float, float* %tmp107, align 4
148  %tmp109 = fadd float %tmp105, %tmp108
149  %tmp110 = add nuw nsw i64 %i.0, 27
150  %tmp111 = getelementptr inbounds float, float* %B, i64 %tmp110
151  %tmp112 = load float, float* %tmp111, align 4
152  %tmp113 = fadd float %tmp109, %tmp112
153  %tmp114 = add nuw nsw i64 %i.0, 28
154  %tmp115 = getelementptr inbounds float, float* %B, i64 %tmp114
155  %tmp116 = load float, float* %tmp115, align 4
156  %tmp117 = fadd float %tmp113, %tmp116
157  %tmp118 = add nuw nsw i64 %i.0, 29
158  %tmp119 = getelementptr inbounds float, float* %B, i64 %tmp118
159  %tmp120 = load float, float* %tmp119, align 4
160  %tmp121 = fadd float %tmp117, %tmp120
161  %tmp122 = add nuw nsw i64 %i.0, 20
162  %tmp123 = getelementptr inbounds float, float* %B, i64 %tmp122
163  %tmp124 = load float, float* %tmp123, align 4
164  %tmp125 = fadd float %tmp121, %tmp124
165  %tmp126 = add nuw nsw i64 %i.0, 31
166  %tmp127 = getelementptr inbounds float, float* %B, i64 %tmp126
167  %tmp128 = load float, float* %tmp127, align 4
168  %tmp129 = fadd float %tmp125, %tmp128
169  %tmp130 = add nuw nsw i64 %i.0, 32
170  %tmp131 = getelementptr inbounds float, float* %B, i64 %tmp130
171  %tmp132 = load float, float* %tmp131, align 4
172  %tmp133 = fadd float %tmp129, %tmp132
173  %tmp134 = add nuw nsw i64 %i.0, 33
174  %tmp135 = getelementptr inbounds float, float* %B, i64 %tmp134
175  %tmp136 = load float, float* %tmp135, align 4
176  %tmp137 = fadd float %tmp133, %tmp136
177  %tmp138 = add nuw nsw i64 %i.0, 34
178  %tmp139 = getelementptr inbounds float, float* %B, i64 %tmp138
179  %tmp140 = load float, float* %tmp139, align 4
180  %tmp141 = fadd float %tmp137, %tmp140
181  %tmp142 = add nuw nsw i64 %i.0, 35
182  %tmp143 = getelementptr inbounds float, float* %B, i64 %tmp142
183  %tmp144 = load float, float* %tmp143, align 4
184  %tmp145 = fadd float %tmp141, %tmp144
185  %tmp146 = add nuw nsw i64 %i.0, 36
186  %tmp147 = getelementptr inbounds float, float* %B, i64 %tmp146
187  %tmp148 = load float, float* %tmp147, align 4
188  %tmp149 = fadd float %tmp145, %tmp148
189  %tmp150 = add nuw nsw i64 %i.0, 37
190  %tmp151 = getelementptr inbounds float, float* %B, i64 %tmp150
191  %tmp152 = load float, float* %tmp151, align 4
192  %tmp153 = fadd float %tmp149, %tmp152
193  %tmp154 = add nuw nsw i64 %i.0, 38
194  %tmp155 = getelementptr inbounds float, float* %B, i64 %tmp154
195  %tmp156 = load float, float* %tmp155, align 4
196  %tmp157 = fadd float %tmp153, %tmp156
197  %tmp158 = add nuw nsw i64 %i.0, 39
198  %tmp159 = getelementptr inbounds float, float* %B, i64 %tmp158
199  %tmp160 = load float, float* %tmp159, align 4
200  %tmp161 = fadd float %tmp157, %tmp160
201  %tmp162 = add nuw nsw i64 %i.0, 30
202  %tmp163 = getelementptr inbounds float, float* %B, i64 %tmp162
203  %tmp164 = load float, float* %tmp163, align 4
204  %tmp165 = fadd float %tmp161, %tmp164
205  %tmp166 = getelementptr inbounds float, float* %A, i64 %j.0
206  %tmp167 = load float, float* %tmp166, align 4
207  %tmp168 = fadd float %tmp167, %tmp165
208  store float %tmp168, float* %tmp166, align 4
209  br label %bb169
210
211bb169:                                            ; preds = %bb5
212  %tmp170 = add nuw nsw i64 %j.0, 1
213  br label %bb4
214
215bb171:                                            ; preds = %bb4
216  br label %bb172
217
218bb172:                                            ; preds = %bb171
219  %tmp173 = add nuw nsw i64 %i.0, 1
220  br label %bb2
221
222bb174:                                            ; preds = %bb2
223  ret void
224}
225