1; RUN: llc -march=hexagon -O3 -verify-machineinstrs < %s
2; REQUIRES: asserts
3; Expect clean compilation.
4
5target triple = "hexagon"
6
7%s.0 = type { i16, i16, [4 x i16], i16, i16, [3 x i16], [3 x [4 x i16]], [3 x i16], [2 x [2 x i16]], i16, i16, i16, i16, [2 x i16], i16, i16, [3 x i16], [17 x i16] }
8
9@g0 = external global i16
10@g1 = external global [2 x i16]
11@g2 = external global [10 x i16]
12@g3 = external global %s.0
13@g4 = external global [160 x i16]
14@g5 = external global i16
15@g6 = external global i16
16@g7 = external global i16
17@g8 = external global i16
18@g9 = external global i16
19@g10 = external global i16
20@g11 = external global i16
21@g12 = external global [192 x i16]
22@g13 = external global [10 x i32]
23@g14 = external global i16
24
25; Function Attrs: nounwind
26define signext i16 @f0(i16 signext %a0, i16* nocapture readonly %a1) #0 {
27b0:
28  %v0 = alloca i32, align 4
29  %v1 = alloca i32, align 4
30  store i32 327685, i32* %v0, align 4
31  store i32 1048592, i32* %v1, align 4
32  %v2 = sext i16 %a0 to i32
33  switch i32 %v2, label %b35 [
34    i32 0, label %b1
35    i32 1, label %b9
36    i32 2, label %b11
37    i32 3, label %b15
38    i32 4, label %b20
39    i32 5, label %b30
40  ]
41
42b1:                                               ; preds = %b0
43  %v3 = load i16, i16* %a1, align 2, !tbaa !0
44  %v4 = icmp eq i16 %v3, -1
45  br i1 %v4, label %b2, label %b4
46
47b2:                                               ; preds = %b1
48  %v5 = load i16, i16* @g0, align 2, !tbaa !0
49  %v6 = add i16 %v5, 1
50  store i16 %v6, i16* @g0, align 2, !tbaa !0
51  %v7 = icmp sgt i16 %v6, 2
52  br i1 %v7, label %b3, label %b5
53
54b3:                                               ; preds = %b2
55  store i16 3, i16* @g0, align 2, !tbaa !0
56  br label %b35
57
58b4:                                               ; preds = %b1
59  store i16 0, i16* @g0, align 2, !tbaa !0
60  br label %b5
61
62b5:                                               ; preds = %b4, %b2
63  %v8 = load i16, i16* %a1, align 2, !tbaa !0
64  %v9 = icmp ne i16 %v8, 0
65  %v10 = load i16, i16* getelementptr inbounds ([2 x i16], [2 x i16]* @g1, i32 0, i32 0), align 2
66  %v11 = icmp eq i16 %v10, 0
67  %v12 = and i1 %v9, %v11
68  br i1 %v12, label %b6, label %b35
69
70b6:                                               ; preds = %b5
71  %v13 = bitcast i32* %v0 to i16*
72  %v14 = bitcast i32* %v1 to i16*
73  call void @f1(i16* %v13, i16* %v14, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0), i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 2, i32 0), i16* getelementptr inbounds ([160 x i16], [160 x i16]* @g4, i32 0, i32 0))
74  %v15 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0), align 2, !tbaa !0
75  %v16 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 1), align 2, !tbaa !0
76  %v17 = icmp sgt i16 %v15, %v16
77  %v18 = select i1 %v17, i16 %v15, i16 %v16
78  %v19 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 2), align 2, !tbaa !0
79  %v20 = icmp sgt i16 %v18, %v19
80  %v21 = select i1 %v20, i16 %v18, i16 %v19
81  %v22 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 3), align 2, !tbaa !0
82  %v23 = icmp sgt i16 %v21, %v22
83  %v24 = select i1 %v23, i16 %v21, i16 %v22
84  %v25 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 4), align 2, !tbaa !0
85  %v26 = icmp sle i16 %v24, %v25
86  %v27 = xor i1 %v23, true
87  %v28 = or i1 %v26, %v27
88  %v29 = select i1 %v26, i16 %v25, i16 %v22
89  %v30 = select i1 %v28, i16 %v29, i16 %v21
90  %v31 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 5), align 2, !tbaa !0
91  %v32 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 6), align 2, !tbaa !0
92  %v33 = icmp slt i16 %v31, %v32
93  %v34 = select i1 %v33, i16 %v31, i16 %v32
94  %v35 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 7), align 2, !tbaa !0
95  %v36 = icmp slt i16 %v34, %v35
96  %v37 = select i1 %v36, i16 %v34, i16 %v35
97  %v38 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 8), align 2, !tbaa !0
98  %v39 = icmp slt i16 %v37, %v38
99  %v40 = select i1 %v39, i16 %v37, i16 %v38
100  %v41 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 9), align 2, !tbaa !0
101  %v42 = icmp sge i16 %v40, %v41
102  %v43 = xor i1 %v39, true
103  %v44 = or i1 %v42, %v43
104  %v45 = select i1 %v42, i16 %v41, i16 %v38
105  %v46 = select i1 %v44, i16 %v45, i16 %v37
106  %v47 = icmp slt i16 %v30, %v46
107  br i1 %v47, label %b7, label %b35
108
109b7:                                               ; preds = %b6
110  %v48 = load i16, i16* @g5, align 2, !tbaa !0
111  %v49 = icmp eq i16 %v48, 4
112  %v50 = load i16, i16* @g6, align 2
113  %v51 = icmp eq i16 %v50, 0
114  %v52 = and i1 %v49, %v51
115  br i1 %v52, label %b35, label %b8
116
117b8:                                               ; preds = %b7
118  br label %b35
119
120b9:                                               ; preds = %b0
121  store i16 0, i16* @g0, align 2, !tbaa !0
122  %v53 = load i16, i16* %a1, align 2, !tbaa !0
123  %v54 = icmp eq i16 %v53, 0
124  %v55 = zext i1 %v54 to i16
125  %v56 = getelementptr i16, i16* %a1, i32 1
126  %v57 = load i16, i16* %v56, align 2, !tbaa !0
127  %v58 = icmp eq i16 %v57, 0
128  %v59 = zext i1 %v58 to i16
129  %v60 = add nuw nsw i16 %v59, %v55
130  %v61 = getelementptr inbounds i16, i16* %a1, i32 2
131  %v62 = load i16, i16* %v61, align 2, !tbaa !0
132  %v63 = icmp ult i16 %v62, 256
133  %v64 = zext i1 %v63 to i16
134  %v65 = add nuw nsw i16 %v64, %v60
135  %v66 = load i16, i16* getelementptr inbounds ([2 x i16], [2 x i16]* @g1, i32 0, i32 0), align 2
136  %v67 = icmp eq i16 %v65, 3
137  %v68 = icmp ne i16 %v66, 0
138  %v69 = or i1 %v68, %v67
139  %v70 = load i16, i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 9), align 2
140  %v71 = icmp eq i16 %v70, 3
141  %v72 = or i1 %v71, %v69
142  br i1 %v72, label %b35, label %b10
143
144b10:                                              ; preds = %b9
145  br label %b35
146
147b11:                                              ; preds = %b0
148  store i16 0, i16* @g0, align 2, !tbaa !0
149  %v73 = load i16, i16* %a1, align 2, !tbaa !0
150  %v74 = icmp eq i16 %v73, 0
151  %v75 = zext i1 %v74 to i16
152  %v76 = getelementptr i16, i16* %a1, i32 1
153  %v77 = load i16, i16* %v76, align 2, !tbaa !0
154  %v78 = icmp eq i16 %v77, 0
155  %v79 = zext i1 %v78 to i16
156  %v80 = add nuw nsw i16 %v79, %v75
157  %v81 = getelementptr inbounds i16, i16* %a1, i32 2
158  %v82 = load i16, i16* %v81, align 2, !tbaa !0
159  %v83 = icmp ult i16 %v82, 256
160  %v84 = zext i1 %v83 to i16
161  %v85 = add nuw nsw i16 %v84, %v80
162  %v86 = icmp ne i16 %v85, 3
163  %v87 = load i16, i16* getelementptr inbounds ([2 x i16], [2 x i16]* @g1, i32 0, i32 0), align 2
164  %v88 = icmp eq i16 %v87, 0
165  %v89 = and i1 %v88, %v86
166  br i1 %v89, label %b12, label %b35
167
168b12:                                              ; preds = %b11
169  %v90 = load i16, i16* @g5, align 2, !tbaa !0
170  switch i16 %v90, label %b14 [
171    i16 1, label %b35
172    i16 2, label %b13
173  ]
174
175b13:                                              ; preds = %b12
176  %v91 = load i16, i16* @g7, align 2, !tbaa !0
177  %v92 = load i16, i16* @g6, align 2
178  %v93 = or i16 %v92, %v91
179  %v94 = icmp eq i16 %v93, 0
180  br i1 %v94, label %b35, label %b14
181
182b14:                                              ; preds = %b13, %b12
183  br label %b35
184
185b15:                                              ; preds = %b0
186  store i16 0, i16* @g0, align 2, !tbaa !0
187  %v95 = load i16, i16* %a1, align 2, !tbaa !0
188  %v96 = icmp eq i16 %v95, 0
189  %v97 = zext i1 %v96 to i16
190  %v98 = getelementptr i16, i16* %a1, i32 1
191  %v99 = load i16, i16* %v98, align 2, !tbaa !0
192  %v100 = icmp eq i16 %v99, 0
193  %v101 = zext i1 %v100 to i16
194  %v102 = add nuw nsw i16 %v101, %v97
195  %v103 = getelementptr i16, i16* %a1, i32 2
196  %v104 = load i16, i16* %v103, align 2, !tbaa !0
197  %v105 = icmp eq i16 %v104, 0
198  %v106 = zext i1 %v105 to i16
199  %v107 = add nuw nsw i16 %v106, %v102
200  %v108 = getelementptr i16, i16* %a1, i32 3
201  %v109 = load i16, i16* %v108, align 2, !tbaa !0
202  %v110 = icmp eq i16 %v109, 0
203  %v111 = zext i1 %v110 to i16
204  %v112 = add nuw nsw i16 %v111, %v107
205  %v113 = getelementptr i16, i16* %a1, i32 4
206  %v114 = load i16, i16* %v113, align 2, !tbaa !0
207  %v115 = icmp eq i16 %v114, 0
208  %v116 = zext i1 %v115 to i16
209  %v117 = add nuw nsw i16 %v116, %v112
210  %v118 = icmp eq i16 %v117, 5
211  br i1 %v118, label %b35, label %b16
212
213b16:                                              ; preds = %b15
214  %v119 = load i16, i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 3), align 2, !tbaa !4
215  switch i16 %v119, label %b17 [
216    i16 120, label %b19
217    i16 115, label %b19
218  ]
219
220b17:                                              ; preds = %b16
221  %v120 = icmp sgt i16 %v119, 100
222  br i1 %v120, label %b35, label %b18
223
224b18:                                              ; preds = %b17
225  tail call void @f2(i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 2, i32 0), i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0))
226  %v121 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0), align 2, !tbaa !0
227  %v122 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 1), align 2, !tbaa !0
228  %v123 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 2), align 2, !tbaa !0
229  %v124 = icmp sgt i16 %v122, %v123
230  %v125 = select i1 %v124, i16 %v122, i16 %v123
231  %v126 = icmp sgt i16 %v121, %v125
232  %v127 = select i1 %v126, i16 %v121, i16 %v125
233  %v128 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 6), align 2, !tbaa !0
234  %v129 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 7), align 2, !tbaa !0
235  %v130 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 8), align 2, !tbaa !0
236  %v131 = icmp slt i16 %v129, %v130
237  %v132 = select i1 %v131, i16 %v129, i16 %v130
238  %v133 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 9), align 2, !tbaa !0
239  %v134 = icmp slt i16 %v132, %v133
240  %v135 = select i1 %v134, i16 %v132, i16 %v133
241  %v136 = icmp slt i16 %v128, %v135
242  %v137 = select i1 %v136, i16 %v128, i16 %v135
243  %v138 = icmp slt i16 %v127, %v137
244  br i1 %v138, label %b19, label %b35
245
246b19:                                              ; preds = %b18, %b16, %b16
247  br label %b35
248
249b20:                                              ; preds = %b0
250  store i16 0, i16* @g0, align 2, !tbaa !0
251  %v139 = load i16, i16* %a1, align 2, !tbaa !0
252  %v140 = icmp eq i16 %v139, 0
253  %v141 = zext i1 %v140 to i16
254  %v142 = getelementptr i16, i16* %a1, i32 1
255  %v143 = load i16, i16* %v142, align 2, !tbaa !0
256  %v144 = icmp eq i16 %v143, 0
257  %v145 = zext i1 %v144 to i16
258  %v146 = add nuw nsw i16 %v145, %v141
259  %v147 = getelementptr i16, i16* %a1, i32 2
260  %v148 = load i16, i16* %v147, align 2, !tbaa !0
261  %v149 = icmp eq i16 %v148, 0
262  %v150 = zext i1 %v149 to i16
263  %v151 = add nuw nsw i16 %v150, %v146
264  %v152 = getelementptr i16, i16* %a1, i32 3
265  %v153 = load i16, i16* %v152, align 2, !tbaa !0
266  %v154 = icmp eq i16 %v153, 0
267  %v155 = zext i1 %v154 to i16
268  %v156 = add nuw nsw i16 %v155, %v151
269  %v157 = getelementptr i16, i16* %a1, i32 4
270  %v158 = load i16, i16* %v157, align 2, !tbaa !0
271  %v159 = icmp eq i16 %v158, 0
272  %v160 = zext i1 %v159 to i16
273  %v161 = add nuw nsw i16 %v160, %v156
274  %v162 = getelementptr i16, i16* %a1, i32 5
275  %v163 = load i16, i16* %v162, align 2, !tbaa !0
276  %v164 = icmp eq i16 %v163, 0
277  %v165 = zext i1 %v164 to i16
278  %v166 = add nuw nsw i16 %v165, %v161
279  %v167 = getelementptr i16, i16* %a1, i32 6
280  %v168 = load i16, i16* %v167, align 2, !tbaa !0
281  %v169 = icmp eq i16 %v168, 0
282  %v170 = zext i1 %v169 to i16
283  %v171 = add nuw nsw i16 %v170, %v166
284  %v172 = getelementptr i16, i16* %a1, i32 7
285  %v173 = load i16, i16* %v172, align 2, !tbaa !0
286  %v174 = icmp eq i16 %v173, 0
287  %v175 = zext i1 %v174 to i16
288  %v176 = add i16 %v175, %v171
289  %v177 = getelementptr i16, i16* %a1, i32 8
290  %v178 = load i16, i16* %v177, align 2, !tbaa !0
291  %v179 = icmp eq i16 %v178, 0
292  %v180 = zext i1 %v179 to i16
293  %v181 = add i16 %v180, %v176
294  %v182 = getelementptr i16, i16* %a1, i32 9
295  %v183 = load i16, i16* %v182, align 2, !tbaa !0
296  %v184 = icmp eq i16 %v183, 0
297  %v185 = zext i1 %v184 to i16
298  %v186 = add i16 %v185, %v181
299  %v187 = getelementptr inbounds i16, i16* %a1, i32 10
300  %v188 = load i16, i16* %v187, align 2, !tbaa !0
301  %v189 = icmp ult i16 %v188, 32
302  %v190 = zext i1 %v189 to i16
303  %v191 = add i16 %v190, %v186
304  %v192 = icmp eq i16 %v191, 11
305  br i1 %v192, label %b35, label %b21
306
307b21:                                              ; preds = %b20
308  tail call void @f3(i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 2, i32 0), i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0))
309  %v193 = load i16, i16* @g8, align 2, !tbaa !0
310  %v194 = icmp eq i16 %v193, 0
311  br i1 %v194, label %b22, label %b35
312
313b22:                                              ; preds = %b21
314  %v195 = load i16, i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 3), align 2, !tbaa !4
315  %v196 = icmp sgt i16 %v195, 100
316  br i1 %v196, label %b35, label %b23
317
318b23:                                              ; preds = %b22
319  %v197 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0), align 2, !tbaa !0
320  %v198 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 1), align 2, !tbaa !0
321  %v199 = icmp sgt i16 %v197, %v198
322  %v200 = select i1 %v199, i16 %v197, i16 %v198
323  %v201 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 4), align 2, !tbaa !0
324  %v202 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 5), align 2, !tbaa !0
325  %v203 = icmp slt i16 %v201, %v202
326  %v204 = select i1 %v203, i16 %v201, i16 %v202
327  %v205 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 6), align 2, !tbaa !0
328  %v206 = icmp slt i16 %v204, %v205
329  %v207 = select i1 %v206, i16 %v204, i16 %v205
330  %v208 = icmp slt i16 %v200, %v207
331  br i1 %v208, label %b24, label %b35
332
333b24:                                              ; preds = %b23
334  %v209 = load i16, i16* @g5, align 2, !tbaa !0
335  switch i16 %v209, label %b26 [
336    i16 1, label %b35
337    i16 2, label %b25
338  ]
339
340b25:                                              ; preds = %b24
341  %v210 = load i16, i16* @g7, align 2, !tbaa !0
342  %v211 = load i16, i16* @g6, align 2
343  %v212 = or i16 %v211, %v210
344  %v213 = icmp eq i16 %v212, 0
345  br i1 %v213, label %b35, label %b27
346
347b26:                                              ; preds = %b24
348  %v214 = load i16, i16* @g6, align 2
349  %v215 = icmp eq i16 %v214, 0
350  br i1 %v215, label %b28, label %b35
351
352b27:                                              ; preds = %b25
353  %v216 = load i16, i16* @g9, align 2
354  %v217 = icmp eq i16 %v216, 0
355  br i1 %v217, label %b28, label %b35
356
357b28:                                              ; preds = %b27, %b26
358  %v218 = tail call signext i16 @f4(i16 signext %v195, i16 signext 20)
359  store i16 %v218, i16* @g10, align 2, !tbaa !0
360  %v219 = load i16, i16* @g11, align 2, !tbaa !0
361  %v220 = tail call signext i16 @f6(i16 signext %v218, i16 signext %v219)
362  %v221 = tail call signext i16 @f5(i16 signext %v220)
363  %v222 = icmp sgt i16 %v221, 15
364  br i1 %v222, label %b29, label %b35
365
366b29:                                              ; preds = %b28
367  call void @llvm.memset.p0i8.i32(i8* align 2 bitcast ([192 x i16]* @g12 to i8*), i8 0, i32 256, i1 false)
368  call void @llvm.memset.p0i8.i32(i8* align 4 bitcast ([10 x i32]* @g13 to i8*), i8 0, i32 40, i1 false)
369  tail call void @f7()
370  br label %b35
371
372b30:                                              ; preds = %b0
373  store i16 0, i16* @g0, align 2, !tbaa !0
374  %v223 = load i16, i16* %a1, align 2, !tbaa !0
375  %v224 = icmp eq i16 %v223, 0
376  %v225 = zext i1 %v224 to i16
377  %v226 = getelementptr i16, i16* %a1, i32 1
378  %v227 = load i16, i16* %v226, align 2, !tbaa !0
379  %v228 = icmp eq i16 %v227, 0
380  %v229 = zext i1 %v228 to i16
381  %v230 = add nuw nsw i16 %v229, %v225
382  %v231 = getelementptr i16, i16* %a1, i32 2
383  %v232 = load i16, i16* %v231, align 2, !tbaa !0
384  %v233 = icmp eq i16 %v232, 0
385  %v234 = zext i1 %v233 to i16
386  %v235 = add nuw nsw i16 %v234, %v230
387  %v236 = getelementptr i16, i16* %a1, i32 3
388  %v237 = load i16, i16* %v236, align 2, !tbaa !0
389  %v238 = icmp eq i16 %v237, 0
390  %v239 = zext i1 %v238 to i16
391  %v240 = add nuw nsw i16 %v239, %v235
392  %v241 = getelementptr i16, i16* %a1, i32 4
393  %v242 = load i16, i16* %v241, align 2, !tbaa !0
394  %v243 = icmp eq i16 %v242, 0
395  %v244 = zext i1 %v243 to i16
396  %v245 = add nuw nsw i16 %v244, %v240
397  %v246 = getelementptr i16, i16* %a1, i32 5
398  %v247 = load i16, i16* %v246, align 2, !tbaa !0
399  %v248 = icmp eq i16 %v247, 0
400  %v249 = zext i1 %v248 to i16
401  %v250 = add nuw nsw i16 %v249, %v245
402  %v251 = getelementptr i16, i16* %a1, i32 6
403  %v252 = load i16, i16* %v251, align 2, !tbaa !0
404  %v253 = icmp eq i16 %v252, 0
405  %v254 = zext i1 %v253 to i16
406  %v255 = add nuw nsw i16 %v254, %v250
407  %v256 = getelementptr i16, i16* %a1, i32 7
408  %v257 = load i16, i16* %v256, align 2, !tbaa !0
409  %v258 = icmp eq i16 %v257, 0
410  %v259 = zext i1 %v258 to i16
411  %v260 = add i16 %v259, %v255
412  %v261 = getelementptr i16, i16* %a1, i32 8
413  %v262 = load i16, i16* %v261, align 2, !tbaa !0
414  %v263 = icmp eq i16 %v262, 0
415  %v264 = zext i1 %v263 to i16
416  %v265 = add i16 %v264, %v260
417  %v266 = getelementptr i16, i16* %a1, i32 9
418  %v267 = load i16, i16* %v266, align 2, !tbaa !0
419  %v268 = icmp eq i16 %v267, 0
420  %v269 = zext i1 %v268 to i16
421  %v270 = add i16 %v269, %v265
422  %v271 = getelementptr inbounds i16, i16* %a1, i32 10
423  %v272 = load i16, i16* %v271, align 2, !tbaa !0
424  %v273 = icmp ult i16 %v272, 32
425  %v274 = zext i1 %v273 to i16
426  %v275 = add i16 %v274, %v270
427  %v276 = icmp eq i16 %v275, 11
428  br i1 %v276, label %b35, label %b31
429
430b31:                                              ; preds = %b30
431  tail call void @f3(i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 2, i32 0), i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0))
432  %v277 = load i16, i16* @g14, align 2, !tbaa !0
433  %v278 = icmp eq i16 %v277, 0
434  br i1 %v278, label %b32, label %b34
435
436b32:                                              ; preds = %b31
437  %v279 = load i16, i16* getelementptr inbounds (%s.0, %s.0* @g3, i32 0, i32 3), align 2, !tbaa !4
438  %v280 = icmp sgt i16 %v279, 100
439  br i1 %v280, label %b35, label %b33
440
441b33:                                              ; preds = %b32
442  %v281 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 0), align 2, !tbaa !0
443  %v282 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 1), align 2, !tbaa !0
444  %v283 = icmp sgt i16 %v281, %v282
445  %v284 = select i1 %v283, i16 %v281, i16 %v282
446  %v285 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 4), align 2, !tbaa !0
447  %v286 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 5), align 2, !tbaa !0
448  %v287 = icmp slt i16 %v285, %v286
449  %v288 = select i1 %v287, i16 %v285, i16 %v286
450  %v289 = load i16, i16* getelementptr inbounds ([10 x i16], [10 x i16]* @g2, i32 0, i32 6), align 2, !tbaa !0
451  %v290 = icmp slt i16 %v288, %v289
452  %v291 = select i1 %v290, i16 %v288, i16 %v289
453  %v292 = icmp slt i16 %v284, %v291
454  br i1 %v292, label %b34, label %b35
455
456b34:                                              ; preds = %b33, %b31
457  br label %b35
458
459b35:                                              ; preds = %b34, %b33, %b32, %b30, %b29, %b28, %b27, %b26, %b25, %b24, %b23, %b22, %b21, %b20, %b19, %b18, %b17, %b15, %b14, %b13, %b12, %b11, %b10, %b9, %b8, %b7, %b6, %b5, %b3, %b0
460  %v293 = phi i16 [ 0, %b34 ], [ 1, %b29 ], [ 0, %b19 ], [ 0, %b14 ], [ 0, %b10 ], [ 0, %b3 ], [ 0, %b8 ], [ 1, %b5 ], [ 1, %b6 ], [ 1, %b9 ], [ 1, %b11 ], [ 1, %b12 ], [ 1, %b15 ], [ 1, %b17 ], [ 1, %b18 ], [ 1, %b20 ], [ 1, %b22 ], [ 1, %b23 ], [ 1, %b24 ], [ 0, %b27 ], [ 0, %b28 ], [ 0, %b21 ], [ 1, %b30 ], [ 1, %b32 ], [ 1, %b33 ], [ 0, %b0 ], [ 1, %b7 ], [ 1, %b13 ], [ 1, %b25 ], [ 0, %b26 ]
461  ret i16 %v293
462}
463
464; Function Attrs: nounwind
465declare void @f1(i16*, i16*, i16*, i16*, i16*) #0
466
467; Function Attrs: nounwind
468declare void @f2(i16*, i16*) #0
469
470; Function Attrs: nounwind
471declare void @f3(i16*, i16*) #0
472
473; Function Attrs: nounwind
474declare signext i16 @f4(i16 signext, i16 signext) #0
475
476; Function Attrs: nounwind
477declare signext i16 @f5(i16 signext) #0
478
479; Function Attrs: nounwind
480declare signext i16 @f6(i16 signext, i16 signext) #0
481
482; Function Attrs: nounwind
483declare void @f7() #0
484
485; Function Attrs: argmemonly nounwind
486declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1) #1
487
488attributes #0 = { nounwind }
489attributes #1 = { argmemonly nounwind }
490
491!0 = !{!1, !1, i64 0}
492!1 = !{!"short", !2, i64 0}
493!2 = !{!"omnipotent char", !3, i64 0}
494!3 = !{!"Simple C/C++ TBAA"}
495!4 = !{!5, !1, i64 12}
496!5 = !{!"_ZTS6PACKET", !1, i64 0, !1, i64 2, !2, i64 4, !1, i64 12, !1, i64 14, !2, i64 16, !2, i64 22, !2, i64 46, !2, i64 52, !1, i64 60, !1, i64 62, !1, i64 64, !1, i64 66, !2, i64 68, !1, i64 72, !1, i64 74, !2, i64 76, !2, i64 82}
497