xref: /llvm-project/polly/test/ScopInfo/expensive-boundary-context.ll (revision e1f056f692d869708c1898d9d65a69ac5584a0ed)
1; RUN: opt %loadNPMPolly '-passes=print<polly-detect>,print<polly-function-scops>' -disable-output \
2; RUN:                < %s 2>&1 | FileCheck %s
3
4; CHECK-NOT:   Assumed Context:
5target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6
7%struct.hoge = type { i32, ptr, ptr, ptr, i32, ptr, ptr, i32, i32, ptr, i32, ptr, [6 x i32], i32, ptr, i32 }
8%struct.widget = type { i32, i32, ptr, ptr, ptr, i32, ptr, i32, i32, [3 x i32], i32 }
9%struct.quux = type { ptr, ptr, ptr, i32, i32, i32, ptr }
10%struct.hoge.0 = type { i32, ptr }
11%struct.barney = type { [3 x i32], [3 x i32] }
12%struct.ham = type { ptr, i32, i32, i32, i32 }
13%struct.wombat = type { ptr, i32, i32 }
14%struct.foo = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
15%struct.wibble = type { ptr, i32 }
16%struct.foo.1 = type { [3 x i32], [3 x i32], i32, i32, [4 x i32], [4 x i32] }
17
18; Function Attrs: nounwind uwtable
19define void @hoge() #0 {
20bb:
21  %tmp52 = alloca ptr, align 8
22  %tmp53 = alloca ptr, align 8
23  %tmp54 = alloca ptr, align 8
24  %tmp55 = alloca ptr, align 8
25  br label %bb56
26
27bb56:                                             ; preds = %bb
28  switch i32 undef, label %bb59 [
29    i32 0, label %bb57
30    i32 1, label %bb58
31  ]
32
33bb57:                                             ; preds = %bb56
34  unreachable
35
36bb58:                                             ; preds = %bb56
37  unreachable
38
39bb59:                                             ; preds = %bb56
40  %tmp = load ptr, ptr %tmp54, align 8, !tbaa !1
41  %tmp60 = getelementptr inbounds %struct.barney, ptr %tmp, i32 0, i32 1
42  %tmp62 = load i32, ptr %tmp60, align 4, !tbaa !5
43  %tmp63 = load ptr, ptr %tmp54, align 8, !tbaa !1
44  %tmp66 = sub nsw i32 %tmp62, 0
45  %tmp67 = add nsw i32 %tmp66, 1
46  %tmp68 = icmp slt i32 0, %tmp67
47  br i1 %tmp68, label %bb69, label %bb70
48
49bb69:                                             ; preds = %bb59
50  br label %bb70
51
52bb70:                                             ; preds = %bb69, %bb59
53  %tmp71 = load ptr, ptr %tmp54, align 8, !tbaa !1
54  %tmp72 = getelementptr inbounds %struct.barney, ptr %tmp71, i32 0, i32 1
55  %tmp73 = getelementptr inbounds [3 x i32], ptr %tmp72, i64 0, i64 1
56  %tmp74 = load i32, ptr %tmp73, align 4, !tbaa !5
57  %tmp75 = load ptr, ptr %tmp54, align 8, !tbaa !1
58  %tmp77 = getelementptr inbounds [3 x i32], ptr %tmp75, i64 0, i64 1
59  %tmp78 = sub nsw i32 %tmp74, 0
60  %tmp79 = add nsw i32 %tmp78, 1
61  %tmp80 = icmp slt i32 0, %tmp79
62  br i1 %tmp80, label %bb81, label %bb82
63
64bb81:                                             ; preds = %bb70
65  br label %bb82
66
67bb82:                                             ; preds = %bb81, %bb70
68  %tmp83 = load ptr, ptr %tmp54, align 8, !tbaa !1
69  %tmp84 = getelementptr inbounds %struct.barney, ptr %tmp83, i32 0, i32 1
70  %tmp86 = load i32, ptr %tmp84, align 4, !tbaa !5
71  %tmp87 = load ptr, ptr %tmp54, align 8, !tbaa !1
72  %tmp90 = sub nsw i32 %tmp86, 0
73  %tmp91 = add nsw i32 %tmp90, 1
74  %tmp92 = icmp slt i32 0, %tmp91
75  br i1 %tmp92, label %bb93, label %bb94
76
77bb93:                                             ; preds = %bb82
78  br label %bb94
79
80bb94:                                             ; preds = %bb93, %bb82
81  %tmp95 = load ptr, ptr %tmp54, align 8, !tbaa !1
82  %tmp96 = getelementptr inbounds %struct.barney, ptr %tmp95, i32 0, i32 1
83  %tmp98 = load i32, ptr %tmp96, align 4, !tbaa !5
84  %tmp99 = load ptr, ptr %tmp54, align 8, !tbaa !1
85  %tmp102 = sub nsw i32 %tmp98, 0
86  %tmp103 = add nsw i32 %tmp102, 1
87  %tmp104 = icmp slt i32 0, %tmp103
88  br i1 %tmp104, label %bb105, label %bb106
89
90bb105:                                            ; preds = %bb94
91  br label %bb106
92
93bb106:                                            ; preds = %bb105, %bb94
94  %tmp107 = load ptr, ptr %tmp53, align 8, !tbaa !1
95  %tmp108 = getelementptr inbounds %struct.barney, ptr %tmp107, i32 0, i32 1
96  %tmp109 = getelementptr inbounds [3 x i32], ptr %tmp108, i64 0, i64 1
97  %tmp110 = load i32, ptr %tmp109, align 4, !tbaa !5
98  %tmp111 = load ptr, ptr %tmp53, align 8, !tbaa !1
99  %tmp113 = getelementptr inbounds [3 x i32], ptr %tmp111, i64 0, i64 1
100  %tmp114 = sub nsw i32 %tmp110, 0
101  %tmp115 = add nsw i32 %tmp114, 1
102  %tmp116 = icmp slt i32 0, %tmp115
103  br i1 %tmp116, label %bb117, label %bb118
104
105bb117:                                            ; preds = %bb106
106  br label %bb118
107
108bb118:                                            ; preds = %bb117, %bb106
109  %tmp119 = load ptr, ptr %tmp53, align 8, !tbaa !1
110  %tmp120 = getelementptr inbounds %struct.barney, ptr %tmp119, i32 0, i32 1
111  %tmp122 = load i32, ptr %tmp120, align 4, !tbaa !5
112  %tmp123 = load ptr, ptr %tmp53, align 8, !tbaa !1
113  %tmp126 = sub nsw i32 %tmp122, 0
114  %tmp127 = add nsw i32 %tmp126, 1
115  %tmp128 = icmp slt i32 0, %tmp127
116  br i1 %tmp128, label %bb129, label %bb130
117
118bb129:                                            ; preds = %bb118
119  br label %bb130
120
121bb130:                                            ; preds = %bb129, %bb118
122  %tmp131 = load ptr, ptr %tmp54, align 8, !tbaa !1
123  %tmp132 = getelementptr inbounds %struct.barney, ptr %tmp131, i32 0, i32 1
124  %tmp134 = load i32, ptr %tmp132, align 4, !tbaa !5
125  %tmp135 = load ptr, ptr %tmp54, align 8, !tbaa !1
126  %tmp138 = sub nsw i32 %tmp134, 0
127  %tmp139 = add nsw i32 %tmp138, 1
128  %tmp140 = icmp slt i32 0, %tmp139
129  br i1 %tmp140, label %bb141, label %bb142
130
131bb141:                                            ; preds = %bb130
132  br label %bb142
133
134bb142:                                            ; preds = %bb141, %bb130
135  %tmp143 = load ptr, ptr %tmp55, align 8, !tbaa !1
136  %tmp144 = getelementptr inbounds %struct.barney, ptr %tmp143, i32 0, i32 1
137  %tmp146 = load i32, ptr %tmp144, align 4, !tbaa !5
138  %tmp147 = load ptr, ptr %tmp55, align 8, !tbaa !1
139  %tmp150 = sub nsw i32 %tmp146, 0
140  %tmp151 = add nsw i32 %tmp150, 1
141  %tmp152 = icmp slt i32 0, %tmp151
142  br i1 %tmp152, label %bb153, label %bb154
143
144bb153:                                            ; preds = %bb142
145  br label %bb154
146
147bb154:                                            ; preds = %bb153, %bb142
148  %tmp155 = load ptr, ptr %tmp53, align 8, !tbaa !1
149  %tmp156 = getelementptr inbounds %struct.barney, ptr %tmp155, i32 0, i32 1
150  %tmp158 = load i32, ptr %tmp156, align 4, !tbaa !5
151  %tmp159 = load ptr, ptr %tmp53, align 8, !tbaa !1
152  %tmp162 = load i32, ptr %tmp159, align 4, !tbaa !5
153  %tmp163 = sub nsw i32 %tmp158, %tmp162
154  %tmp164 = add nsw i32 %tmp163, 1
155  %tmp165 = icmp slt i32 0, %tmp164
156  br i1 %tmp165, label %bb166, label %bb167
157
158bb166:                                            ; preds = %bb154
159  br label %bb167
160
161bb167:                                            ; preds = %bb166, %bb154
162  %tmp168 = load ptr, ptr %tmp53, align 8, !tbaa !1
163  %tmp169 = getelementptr inbounds %struct.barney, ptr %tmp168, i32 0, i32 1
164  %tmp171 = load i32, ptr %tmp169, align 4, !tbaa !5
165  %tmp172 = load ptr, ptr %tmp53, align 8, !tbaa !1
166  %tmp175 = load i32, ptr %tmp172, align 4, !tbaa !5
167  %tmp176 = sub nsw i32 %tmp171, %tmp175
168  %tmp177 = add nsw i32 %tmp176, 1
169  %tmp178 = icmp slt i32 0, %tmp177
170  br i1 %tmp178, label %bb179, label %bb180
171
172bb179:                                            ; preds = %bb167
173  br label %bb180
174
175bb180:                                            ; preds = %bb179, %bb167
176  %tmp181 = load ptr, ptr %tmp53, align 8, !tbaa !1
177  %tmp182 = getelementptr inbounds %struct.barney, ptr %tmp181, i32 0, i32 1
178  %tmp183 = getelementptr inbounds [3 x i32], ptr %tmp182, i64 0, i64 1
179  %tmp184 = load i32, ptr %tmp183, align 4, !tbaa !5
180  %tmp185 = load ptr, ptr %tmp53, align 8, !tbaa !1
181  %tmp187 = getelementptr inbounds [3 x i32], ptr %tmp185, i64 0, i64 1
182  %tmp188 = load i32, ptr %tmp187, align 4, !tbaa !5
183  %tmp189 = sub nsw i32 %tmp184, %tmp188
184  %tmp190 = add nsw i32 %tmp189, 1
185  %tmp191 = icmp slt i32 0, %tmp190
186  br i1 %tmp191, label %bb192, label %bb193
187
188bb192:                                            ; preds = %bb180
189  br label %bb193
190
191bb193:                                            ; preds = %bb192, %bb180
192  %tmp194 = load ptr, ptr %tmp54, align 8, !tbaa !1
193  %tmp195 = getelementptr inbounds %struct.barney, ptr %tmp194, i32 0, i32 1
194  %tmp197 = load i32, ptr %tmp195, align 4, !tbaa !5
195  %tmp198 = load ptr, ptr %tmp54, align 8, !tbaa !1
196  %tmp201 = load i32, ptr %tmp198, align 4, !tbaa !5
197  %tmp202 = sub nsw i32 %tmp197, %tmp201
198  %tmp203 = add nsw i32 %tmp202, 1
199  %tmp204 = icmp slt i32 0, %tmp203
200  br i1 %tmp204, label %bb205, label %bb206
201
202bb205:                                            ; preds = %bb193
203  br label %bb206
204
205bb206:                                            ; preds = %bb205, %bb193
206  %tmp207 = load ptr, ptr %tmp54, align 8, !tbaa !1
207  %tmp208 = getelementptr inbounds %struct.barney, ptr %tmp207, i32 0, i32 1
208  %tmp210 = load i32, ptr %tmp208, align 4, !tbaa !5
209  %tmp211 = load ptr, ptr %tmp54, align 8, !tbaa !1
210  %tmp214 = load i32, ptr %tmp211, align 4, !tbaa !5
211  %tmp215 = sub nsw i32 %tmp210, %tmp214
212  %tmp216 = add nsw i32 %tmp215, 1
213  %tmp217 = icmp slt i32 0, %tmp216
214  br i1 %tmp217, label %bb218, label %bb219
215
216bb218:                                            ; preds = %bb206
217  br label %bb219
218
219bb219:                                            ; preds = %bb218, %bb206
220  %tmp220 = load ptr, ptr %tmp54, align 8, !tbaa !1
221  %tmp221 = getelementptr inbounds %struct.barney, ptr %tmp220, i32 0, i32 1
222  %tmp222 = getelementptr inbounds [3 x i32], ptr %tmp221, i64 0, i64 1
223  %tmp223 = load i32, ptr %tmp222, align 4, !tbaa !5
224  %tmp224 = load ptr, ptr %tmp54, align 8, !tbaa !1
225  %tmp226 = getelementptr inbounds [3 x i32], ptr %tmp224, i64 0, i64 1
226  %tmp227 = load i32, ptr %tmp226, align 4, !tbaa !5
227  %tmp228 = sub nsw i32 %tmp223, %tmp227
228  %tmp229 = add nsw i32 %tmp228, 1
229  %tmp230 = icmp slt i32 0, %tmp229
230  br i1 %tmp230, label %bb231, label %bb232
231
232bb231:                                            ; preds = %bb219
233  br label %bb232
234
235bb232:                                            ; preds = %bb231, %bb219
236  %tmp233 = load ptr, ptr %tmp55, align 8, !tbaa !1
237  %tmp234 = getelementptr inbounds %struct.barney, ptr %tmp233, i32 0, i32 1
238  %tmp236 = load i32, ptr %tmp234, align 4, !tbaa !5
239  %tmp237 = load ptr, ptr %tmp55, align 8, !tbaa !1
240  %tmp240 = load i32, ptr %tmp237, align 4, !tbaa !5
241  %tmp241 = sub nsw i32 %tmp236, %tmp240
242  %tmp242 = add nsw i32 %tmp241, 1
243  %tmp243 = icmp slt i32 0, %tmp242
244  br i1 %tmp243, label %bb244, label %bb245
245
246bb244:                                            ; preds = %bb232
247  br label %bb245
248
249bb245:                                            ; preds = %bb244, %bb232
250  unreachable
251}
252
253attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
254
255!llvm.ident = !{!0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0, !0}
256
257!0 = !{!"clang version 3.8.0 (trunk 252261) (llvm/trunk 252271)"}
258!1 = !{!2, !2, i64 0}
259!2 = !{!"any pointer", !3, i64 0}
260!3 = !{!"omnipotent char", !4, i64 0}
261!4 = !{!"Simple C/C++ TBAA"}
262!5 = !{!6, !6, i64 0}
263!6 = !{!"int", !3, i64 0}
264