[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / Hexagon / concat-vectors-legalize.ll
blob6f73b47f9a48750edf206ec1875ffcdac01b5108
1 ; RUN: llc -march=hexagon < %s | FileCheck %s
2 ; CHECK-NOT: setbit(r{{[0-9]+}},#1)
4 target triple = "hexagon-unknown--elf"
6 %s.8 = type { ptr, i32, i32, i32, i32, ptr, ptr, ptr }
7 %s.9 = type { %s.10 }
8 %s.10 = type { i64 }
9 %s.4 = type { i64, ptr, [4 x i32], [4 x i32], [4 x i32], i32, i8, i8, [6 x i8] }
11 @g0 = private constant [6 x i8] c"input\00", align 32
12 @g1 = private constant [11 x i8] c"gaussian11\00", align 32
13 @g2 = private constant [2 x %s.8] [%s.8 { ptr @g0, i32 1, i32 2, i32 1, i32 8, ptr null, ptr null, ptr null }, %s.8 { ptr @g1, i32 2, i32 2, i32 1, i32 8, ptr null, ptr null, ptr null }]
14 @g3 = private constant [53 x i8] c"hexagon-32-os_unknown-no_asserts-no_bounds_query-hvx\00", align 32
16 ; Function Attrs: nounwind
17 declare ptr @f0(ptr, i32) #0
19 ; Function Attrs: nounwind
20 declare void @f1(ptr, ptr) #0
22 ; Function Attrs: nounwind
23 declare noalias ptr @f2(ptr, i32) #0
25 ; Function Attrs: nounwind
26 declare void @f3(ptr, ptr) #0
28 ; Function Attrs: nounwind
29 declare void @f4() #0
31 ; Function Attrs: nounwind
32 declare void @f5() #0
34 ; Function Attrs: nounwind
35 define i32 @f6(ptr noalias nocapture readonly %a0, ptr noalias nocapture readonly %a1) #0 {
36 b0:
37   %v0 = getelementptr inbounds %s.4, ptr %a0, i32 0, i32 1
38   %v1 = load ptr, ptr %v0
39   %v2 = getelementptr inbounds %s.4, ptr %a0, i32 0, i32 2, i32 0
40   %v3 = load i32, ptr %v2
41   %v4 = getelementptr inbounds %s.4, ptr %a0, i32 0, i32 2, i32 1
42   %v5 = load i32, ptr %v4
43   %v6 = getelementptr inbounds %s.4, ptr %a0, i32 0, i32 3, i32 1
44   %v7 = load i32, ptr %v6
45   %v8 = getelementptr inbounds %s.4, ptr %a0, i32 0, i32 4, i32 0
46   %v9 = load i32, ptr %v8
47   %v10 = getelementptr inbounds %s.4, ptr %a0, i32 0, i32 4, i32 1
48   %v11 = load i32, ptr %v10
49   %v12 = getelementptr inbounds %s.4, ptr %a1, i32 0, i32 1
50   %v13 = load ptr, ptr %v12
51   %v14 = getelementptr inbounds %s.4, ptr %a1, i32 0, i32 2, i32 0
52   %v15 = load i32, ptr %v14
53   %v16 = getelementptr inbounds %s.4, ptr %a1, i32 0, i32 2, i32 1
54   %v17 = load i32, ptr %v16
55   %v18 = getelementptr inbounds %s.4, ptr %a1, i32 0, i32 3, i32 1
56   %v19 = load i32, ptr %v18
57   %v20 = getelementptr inbounds %s.4, ptr %a1, i32 0, i32 4, i32 0
58   %v21 = load i32, ptr %v20
59   %v22 = getelementptr inbounds %s.4, ptr %a1, i32 0, i32 4, i32 1
60   %v23 = load i32, ptr %v22
61   %v24 = add nsw i32 %v21, %v15
62   %v25 = add nsw i32 %v24, -64
63   %v26 = icmp slt i32 %v21, %v25
64   %v27 = select i1 %v26, i32 %v21, i32 %v25
65   %v28 = add nsw i32 %v15, -1
66   %v29 = and i32 %v28, -64
67   %v30 = add i32 %v21, 63
68   %v31 = add i32 %v30, %v29
69   %v32 = add nsw i32 %v24, -1
70   %v33 = icmp slt i32 %v31, %v32
71   %v34 = select i1 %v33, i32 %v31, i32 %v32
72   %v35 = sub nsw i32 %v34, %v27
73   %v36 = icmp slt i32 %v24, %v34
74   %v37 = select i1 %v36, i32 %v34, i32 %v24
75   %v38 = add nsw i32 %v37, -1
76   %v39 = icmp slt i32 %v38, %v34
77   %v40 = select i1 %v39, i32 %v34, i32 %v38
78   %v41 = add nsw i32 %v17, 1
79   %v42 = sext i32 %v41 to i64
80   %v43 = sub nsw i32 %v40, %v27
81   %v44 = add nsw i32 %v43, 2
82   %v45 = sext i32 %v44 to i64
83   %v46 = mul nsw i64 %v45, %v42
84   %v47 = trunc i64 %v46 to i32
85   %v48 = tail call ptr @f2(ptr null, i32 %v47)
86   %v49 = add nsw i32 %v23, -1
87   %v50 = add i32 %v23, %v17
88   %v51 = icmp sgt i32 %v23, %v50
89   br i1 %v51, label %b12, label %b1, !prof !3
91 b1:                                               ; preds = %b11, %b0
92   %v52 = phi i32 [ %v220, %b11 ], [ %v49, %b0 ]
93   %v53 = icmp slt i32 %v9, %v24
94   %v54 = select i1 %v53, i32 %v9, i32 %v24
95   %v55 = add nsw i32 %v21, -1
96   %v56 = icmp slt i32 %v54, %v55
97   %v57 = select i1 %v56, i32 %v55, i32 %v54
98   %v58 = add nsw i32 %v9, %v3
99   %v59 = icmp slt i32 %v58, %v24
100   %v60 = select i1 %v59, i32 %v58, i32 %v24
101   %v61 = icmp slt i32 %v60, %v57
102   %v62 = select i1 %v61, i32 %v57, i32 %v60
103   %v63 = icmp slt i32 %v57, %v21
104   br i1 %v63, label %b7, label %b2, !prof !3
106 b2:                                               ; preds = %b1
107   %v64 = add nsw i32 %v11, %v5
108   %v65 = add nsw i32 %v64, -1
109   %v66 = icmp slt i32 %v52, %v65
110   br i1 %v66, label %b3, label %b4
112 b3:                                               ; preds = %b3, %b2
113   %v67 = phi i32 [ %v96, %b3 ], [ %v55, %b2 ]
114   %v68 = mul nsw i32 %v11, %v7
115   %v69 = icmp slt i32 %v52, %v11
116   %v70 = select i1 %v69, i32 %v11, i32 %v52
117   %v71 = mul nsw i32 %v70, %v7
118   %v72 = add nsw i32 %v58, -1
119   %v73 = icmp slt i32 %v67, %v72
120   %v74 = select i1 %v73, i32 %v67, i32 %v72
121   %v75 = icmp slt i32 %v74, %v9
122   %v76 = select i1 %v75, i32 %v9, i32 %v74
123   %v77 = add i32 %v68, %v9
124   %v78 = sub i32 %v71, %v77
125   %v79 = add i32 %v78, %v76
126   %v80 = getelementptr inbounds i8, ptr %v1, i32 %v79
127   %v81 = load i8, ptr %v80, align 1, !tbaa !4
128   %v82 = icmp sle i32 %v64, %v52
129   %v83 = icmp sle i32 %v58, %v67
130   %v84 = icmp slt i32 %v67, %v9
131   %v85 = or i1 %v84, %v83
132   %v86 = or i1 %v69, %v85
133   %v87 = or i1 %v82, %v86
134   %v88 = select i1 %v87, i8 0, i8 %v81
135   %v89 = sub i32 1, %v23
136   %v90 = add i32 %v89, %v52
137   %v91 = mul nsw i32 %v90, %v44
138   %v92 = sub i32 1, %v27
139   %v93 = add i32 %v92, %v91
140   %v94 = add i32 %v93, %v67
141   %v95 = getelementptr inbounds i8, ptr %v48, i32 %v94
142   store i8 %v88, ptr %v95, align 1, !tbaa !7
143   %v96 = add nsw i32 %v67, 1
144   %v97 = icmp eq i32 %v96, %v57
145   br i1 %v97, label %b7, label %b3
147 b4:                                               ; preds = %b2
148   %v98 = icmp slt i32 %v5, 1
149   br i1 %v98, label %b5, label %b6
151 b5:                                               ; preds = %b5, %b4
152   %v99 = phi i32 [ %v123, %b5 ], [ %v55, %b4 ]
153   %v100 = add nsw i32 %v58, -1
154   %v101 = icmp slt i32 %v99, %v100
155   %v102 = select i1 %v101, i32 %v99, i32 %v100
156   %v103 = icmp slt i32 %v102, %v9
157   %v104 = select i1 %v103, i32 %v9, i32 %v102
158   %v105 = sub i32 %v104, %v9
159   %v106 = getelementptr inbounds i8, ptr %v1, i32 %v105
160   %v107 = load i8, ptr %v106, align 1, !tbaa !4
161   %v108 = icmp sle i32 %v64, %v52
162   %v109 = icmp slt i32 %v52, %v11
163   %v110 = icmp sle i32 %v58, %v99
164   %v111 = icmp slt i32 %v99, %v9
165   %v112 = or i1 %v111, %v110
166   %v113 = or i1 %v109, %v112
167   %v114 = or i1 %v108, %v113
168   %v115 = select i1 %v114, i8 0, i8 %v107
169   %v116 = sub i32 1, %v23
170   %v117 = add i32 %v116, %v52
171   %v118 = mul nsw i32 %v117, %v44
172   %v119 = sub i32 1, %v27
173   %v120 = add i32 %v119, %v118
174   %v121 = add i32 %v120, %v99
175   %v122 = getelementptr inbounds i8, ptr %v48, i32 %v121
176   store i8 %v115, ptr %v122, align 1, !tbaa !7
177   %v123 = add nsw i32 %v99, 1
178   %v124 = icmp eq i32 %v123, %v57
179   br i1 %v124, label %b7, label %b5
181 b6:                                               ; preds = %b6, %b4
182   %v125 = phi i32 [ %v153, %b6 ], [ %v55, %b4 ]
183   %v126 = mul nsw i32 %v11, %v7
184   %v127 = mul nsw i32 %v65, %v7
185   %v128 = add nsw i32 %v58, -1
186   %v129 = icmp slt i32 %v125, %v128
187   %v130 = select i1 %v129, i32 %v125, i32 %v128
188   %v131 = icmp slt i32 %v130, %v9
189   %v132 = select i1 %v131, i32 %v9, i32 %v130
190   %v133 = add i32 %v126, %v9
191   %v134 = sub i32 %v127, %v133
192   %v135 = add i32 %v134, %v132
193   %v136 = getelementptr inbounds i8, ptr %v1, i32 %v135
194   %v137 = load i8, ptr %v136, align 1, !tbaa !4
195   %v138 = icmp sle i32 %v64, %v52
196   %v139 = icmp slt i32 %v52, %v11
197   %v140 = icmp sle i32 %v58, %v125
198   %v141 = icmp slt i32 %v125, %v9
199   %v142 = or i1 %v141, %v140
200   %v143 = or i1 %v139, %v142
201   %v144 = or i1 %v138, %v143
202   %v145 = select i1 %v144, i8 0, i8 %v137
203   %v146 = sub i32 1, %v23
204   %v147 = add i32 %v146, %v52
205   %v148 = mul nsw i32 %v147, %v44
206   %v149 = sub i32 1, %v27
207   %v150 = add i32 %v149, %v148
208   %v151 = add i32 %v150, %v125
209   %v152 = getelementptr inbounds i8, ptr %v48, i32 %v151
210   store i8 %v145, ptr %v152, align 1, !tbaa !7
211   %v153 = add nsw i32 %v125, 1
212   %v154 = icmp eq i32 %v153, %v57
213   br i1 %v154, label %b7, label %b6
215 b7:                                               ; preds = %b6, %b5, %b3, %b1
216   %v155 = icmp slt i32 %v57, %v62
217   br i1 %v155, label %b8, label %b9, !prof !9
219 b8:                                               ; preds = %b8, %b7
220   %v156 = phi i32 [ %v181, %b8 ], [ %v57, %b7 ]
221   %v157 = mul nsw i32 %v11, %v7
222   %v158 = add nsw i32 %v11, %v5
223   %v159 = add nsw i32 %v158, -1
224   %v160 = icmp slt i32 %v52, %v159
225   %v161 = select i1 %v160, i32 %v52, i32 %v159
226   %v162 = icmp slt i32 %v161, %v11
227   %v163 = select i1 %v162, i32 %v11, i32 %v161
228   %v164 = mul nsw i32 %v163, %v7
229   %v165 = add i32 %v157, %v9
230   %v166 = sub i32 %v164, %v165
231   %v167 = add i32 %v166, %v156
232   %v168 = getelementptr inbounds i8, ptr %v1, i32 %v167
233   %v169 = load i8, ptr %v168, align 1, !tbaa !4
234   %v170 = icmp sle i32 %v158, %v52
235   %v171 = icmp slt i32 %v52, %v11
236   %v172 = or i1 %v171, %v170
237   %v173 = select i1 %v172, i8 0, i8 %v169
238   %v174 = sub i32 1, %v23
239   %v175 = add i32 %v174, %v52
240   %v176 = mul nsw i32 %v175, %v44
241   %v177 = sub i32 1, %v27
242   %v178 = add i32 %v177, %v176
243   %v179 = add i32 %v178, %v156
244   %v180 = getelementptr inbounds i8, ptr %v48, i32 %v179
245   store i8 %v173, ptr %v180, align 1, !tbaa !7
246   %v181 = add nsw i32 %v156, 1
247   %v182 = icmp eq i32 %v181, %v62
248   br i1 %v182, label %b9, label %b8
250 b9:                                               ; preds = %b8, %b7
251   %v183 = icmp slt i32 %v62, %v24
252   br i1 %v183, label %b10, label %b11, !prof !9
254 b10:                                              ; preds = %b10, %b9
255   %v184 = phi i32 [ %v218, %b10 ], [ %v62, %b9 ]
256   %v185 = mul nsw i32 %v11, %v7
257   %v186 = add nsw i32 %v11, %v5
258   %v187 = add nsw i32 %v186, -1
259   %v188 = icmp slt i32 %v52, %v187
260   %v189 = select i1 %v188, i32 %v52, i32 %v187
261   %v190 = icmp slt i32 %v189, %v11
262   %v191 = select i1 %v190, i32 %v11, i32 %v189
263   %v192 = mul nsw i32 %v191, %v7
264   %v193 = add nsw i32 %v58, -1
265   %v194 = icmp slt i32 %v184, %v193
266   %v195 = select i1 %v194, i32 %v184, i32 %v193
267   %v196 = icmp slt i32 %v195, %v9
268   %v197 = select i1 %v196, i32 %v9, i32 %v195
269   %v198 = add i32 %v185, %v9
270   %v199 = sub i32 %v192, %v198
271   %v200 = add i32 %v199, %v197
272   %v201 = getelementptr inbounds i8, ptr %v1, i32 %v200
273   %v202 = load i8, ptr %v201, align 1, !tbaa !4
274   %v203 = icmp sle i32 %v186, %v52
275   %v204 = icmp slt i32 %v52, %v11
276   %v205 = icmp sle i32 %v58, %v184
277   %v206 = icmp slt i32 %v184, %v9
278   %v207 = or i1 %v206, %v205
279   %v208 = or i1 %v204, %v207
280   %v209 = or i1 %v203, %v208
281   %v210 = select i1 %v209, i8 0, i8 %v202
282   %v211 = sub i32 1, %v23
283   %v212 = add i32 %v211, %v52
284   %v213 = mul nsw i32 %v212, %v44
285   %v214 = sub i32 1, %v27
286   %v215 = add i32 %v214, %v213
287   %v216 = add i32 %v215, %v184
288   %v217 = getelementptr inbounds i8, ptr %v48, i32 %v216
289   store i8 %v210, ptr %v217, align 1, !tbaa !7
290   %v218 = add nsw i32 %v184, 1
291   %v219 = icmp eq i32 %v218, %v24
292   br i1 %v219, label %b11, label %b10
294 b11:                                              ; preds = %b10, %b9
295   %v220 = add nsw i32 %v52, 1
296   %v221 = icmp eq i32 %v220, %v50
297   br i1 %v221, label %b12, label %b1
299 b12:                                              ; preds = %b11, %b0
300   %v222 = add nsw i32 %v35, 1
301   %v223 = sext i32 %v222 to i64
302   %v224 = shl nsw i64 %v42, 2
303   %v225 = mul i64 %v224, %v223
304   %v226 = trunc i64 %v225 to i32
305   %v227 = tail call ptr @f2(ptr null, i32 %v226)
306   br i1 %v51, label %b14, label %b13, !prof !3
308 b13:                                              ; preds = %b19, %b12
309   %v228 = phi i32 [ %v351, %b19 ], [ %v49, %b12 ]
310   %v229 = ashr i32 %v15, 6
311   %v230 = icmp slt i32 %v229, 0
312   %v231 = select i1 %v230, i32 0, i32 %v229
313   %v232 = icmp sgt i32 %v231, 0
314   br i1 %v232, label %b16, label %b17, !prof !9
316 b14:                                              ; preds = %b19, %b12
317   %v233 = icmp eq ptr %v48, null
318   br i1 %v233, label %b20, label %b15
320 b15:                                              ; preds = %b14
321   tail call void @f3(ptr null, ptr %v48) #2
322   br label %b20
324 b16:                                              ; preds = %b16, %b13
325   %v234 = phi i32 [ %v289, %b16 ], [ 0, %b13 ]
326   %v235 = sub nsw i32 %v228, %v23
327   %v236 = add nsw i32 %v235, 1
328   %v237 = mul nsw i32 %v236, %v44
329   %v238 = shl i32 %v234, 6
330   %v239 = sub i32 %v21, %v27
331   %v240 = add i32 %v239, %v238
332   %v241 = add nsw i32 %v240, %v237
333   %v242 = getelementptr inbounds i8, ptr %v48, i32 %v241
334   %v244 = load <16 x i32>, ptr %v242, align 1, !tbaa !7
335   %v245 = tail call <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32> %v244)
336   %v246 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v245)
337   %v247 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v245)
338   %v248 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v247)
339   %v249 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v246)
340   %v250 = add nsw i32 %v241, 1
341   %v251 = getelementptr inbounds i8, ptr %v48, i32 %v250
342   %v253 = load <16 x i32>, ptr %v251, align 1, !tbaa !7
343   %v254 = tail call <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32> %v253)
344   %v255 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v254)
345   %v256 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v255)
346   %v257 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v256)
347   %v258 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v256)
348   %v259 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v257, i32 168430090)
349   %v260 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v258, i32 168430090)
350   %v261 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v259, <16 x i32> %v260)
351   %v262 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v254)
352   %v263 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v262)
353   %v264 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v263)
354   %v265 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v263)
355   %v266 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v264, i32 168430090)
356   %v267 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v265, i32 168430090)
357   %v268 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v266, <16 x i32> %v267)
358   %v269 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v248, <32 x i32> %v261)
359   %v270 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v249, <32 x i32> %v268)
360   %v271 = shufflevector <32 x i32> %v269, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
361   %v272 = mul nsw i32 %v236, %v222
362   %v273 = add nsw i32 %v240, %v272
363   %v275 = getelementptr inbounds i32, ptr %v227, i32 %v273
364   store <16 x i32> %v271, ptr %v275, align 4, !tbaa !10
365   %v277 = shufflevector <32 x i32> %v269, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
366   %v278 = add nsw i32 %v273, 16
367   %v279 = getelementptr inbounds i32, ptr %v227, i32 %v278
368   store <16 x i32> %v277, ptr %v279, align 4, !tbaa !10
369   %v281 = shufflevector <32 x i32> %v270, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
370   %v282 = add nsw i32 %v273, 32
371   %v283 = getelementptr inbounds i32, ptr %v227, i32 %v282
372   store <16 x i32> %v281, ptr %v283, align 4, !tbaa !10
373   %v285 = shufflevector <32 x i32> %v270, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
374   %v286 = add nsw i32 %v273, 48
375   %v287 = getelementptr inbounds i32, ptr %v227, i32 %v286
376   store <16 x i32> %v285, ptr %v287, align 4, !tbaa !10
377   %v289 = add nuw nsw i32 %v234, 1
378   %v290 = icmp eq i32 %v289, %v231
379   br i1 %v290, label %b17, label %b16
381 b17:                                              ; preds = %b16, %b13
382   %v291 = add nsw i32 %v15, 63
383   %v292 = ashr i32 %v291, 6
384   %v293 = icmp slt i32 %v231, %v292
385   br i1 %v293, label %b18, label %b19, !prof !9
387 b18:                                              ; preds = %b18, %b17
388   %v294 = phi i32 [ %v349, %b18 ], [ %v231, %b17 ]
389   %v295 = sub nsw i32 %v228, %v23
390   %v296 = add nsw i32 %v295, 1
391   %v297 = mul nsw i32 %v296, %v44
392   %v298 = sub nsw i32 %v24, %v27
393   %v299 = add nsw i32 %v297, %v298
394   %v300 = add nsw i32 %v299, -64
395   %v301 = getelementptr inbounds i8, ptr %v48, i32 %v300
396   %v303 = load <16 x i32>, ptr %v301, align 1, !tbaa !7
397   %v304 = tail call <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32> %v303)
398   %v305 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v304)
399   %v306 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v304)
400   %v307 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v306)
401   %v308 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v305)
402   %v309 = add nsw i32 %v299, -63
403   %v310 = getelementptr inbounds i8, ptr %v48, i32 %v309
404   %v312 = load <16 x i32>, ptr %v310, align 1, !tbaa !7
405   %v313 = tail call <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32> %v312)
406   %v314 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v313)
407   %v315 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v314)
408   %v316 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v315)
409   %v317 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v315)
410   %v318 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v316, i32 168430090)
411   %v319 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v317, i32 168430090)
412   %v320 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v318, <16 x i32> %v319)
413   %v321 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v313)
414   %v322 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %v321)
415   %v323 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v322)
416   %v324 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v322)
417   %v325 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v323, i32 168430090)
418   %v326 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v324, i32 168430090)
419   %v327 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v325, <16 x i32> %v326)
420   %v328 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v307, <32 x i32> %v320)
421   %v329 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v308, <32 x i32> %v327)
422   %v330 = shufflevector <32 x i32> %v328, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
423   %v331 = mul nsw i32 %v296, %v222
424   %v332 = add nsw i32 %v331, %v298
425   %v333 = add nsw i32 %v332, -64
426   %v335 = getelementptr inbounds i32, ptr %v227, i32 %v333
427   store <16 x i32> %v330, ptr %v335, align 4, !tbaa !10
428   %v337 = shufflevector <32 x i32> %v328, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
429   %v338 = add nsw i32 %v332, -48
430   %v339 = getelementptr inbounds i32, ptr %v227, i32 %v338
431   store <16 x i32> %v337, ptr %v339, align 4, !tbaa !10
432   %v341 = shufflevector <32 x i32> %v329, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
433   %v342 = add nsw i32 %v332, -32
434   %v343 = getelementptr inbounds i32, ptr %v227, i32 %v342
435   store <16 x i32> %v341, ptr %v343, align 4, !tbaa !10
436   %v345 = shufflevector <32 x i32> %v329, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
437   %v346 = add nsw i32 %v332, -16
438   %v347 = getelementptr inbounds i32, ptr %v227, i32 %v346
439   store <16 x i32> %v345, ptr %v347, align 4, !tbaa !10
440   %v349 = add nuw nsw i32 %v294, 1
441   %v350 = icmp eq i32 %v349, %v292
442   br i1 %v350, label %b19, label %b18
444 b19:                                              ; preds = %b18, %b17
445   %v351 = add nsw i32 %v228, 1
446   %v352 = icmp eq i32 %v351, %v50
447   br i1 %v352, label %b14, label %b13
449 b20:                                              ; preds = %b15, %b14
450   %v353 = icmp sgt i32 %v17, 0
451   br i1 %v353, label %b21, label %b31, !prof !9
453 b21:                                              ; preds = %b20
454   %v354 = ashr i32 %v15, 6
455   %v355 = icmp slt i32 %v354, 0
456   %v356 = select i1 %v355, i32 0, i32 %v354
457   %v357 = icmp sgt i32 %v356, 0
458   br i1 %v357, label %b25, label %b27
460 b22:                                              ; preds = %b25, %b22
461   %v358 = phi i32 [ %v442, %b22 ], [ 0, %b25 ]
462   %v359 = sub nsw i32 %v525, %v23
463   %v360 = mul nsw i32 %v359, %v222
464   %v361 = shl nsw i32 %v358, 6
465   %v362 = add nsw i32 %v361, %v21
466   %v363 = sub nsw i32 %v362, %v27
467   %v364 = add nsw i32 %v363, %v360
468   %v366 = getelementptr inbounds i32, ptr %v227, i32 %v364
469   %v368 = load <16 x i32>, ptr %v366, align 4, !tbaa !10
470   %v369 = add nsw i32 %v364, 16
471   %v370 = getelementptr inbounds i32, ptr %v227, i32 %v369
472   %v372 = load <16 x i32>, ptr %v370, align 4, !tbaa !10
473   %v373 = shufflevector <16 x i32> %v368, <16 x i32> %v372, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
474   %v374 = add nsw i32 %v359, 1
475   %v375 = mul nsw i32 %v374, %v222
476   %v376 = add nsw i32 %v363, %v375
477   %v377 = getelementptr inbounds i32, ptr %v227, i32 %v376
478   %v379 = load <16 x i32>, ptr %v377, align 4, !tbaa !10
479   %v380 = add nsw i32 %v376, 16
480   %v381 = getelementptr inbounds i32, ptr %v227, i32 %v380
481   %v383 = load <16 x i32>, ptr %v381, align 4, !tbaa !10
482   %v384 = shufflevector <16 x i32> %v379, <16 x i32> %v383, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
483   %v385 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v384)
484   %v386 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v384)
485   %v387 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v385, i32 168430090)
486   %v388 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v386, i32 168430090)
487   %v389 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v387, <16 x i32> %v388)
488   %v390 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v373, <32 x i32> %v389)
489   %v391 = shufflevector <32 x i32> %v390, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
490   %v392 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v391, i32 20)
491   %v393 = shufflevector <32 x i32> %v390, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
492   %v394 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v393, i32 20)
493   %v395 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v394, <16 x i32> %v392)
494   %v396 = add nsw i32 %v364, 32
495   %v397 = getelementptr inbounds i32, ptr %v227, i32 %v396
496   %v399 = load <16 x i32>, ptr %v397, align 4, !tbaa !10
497   %v400 = add nsw i32 %v364, 48
498   %v401 = getelementptr inbounds i32, ptr %v227, i32 %v400
499   %v403 = load <16 x i32>, ptr %v401, align 4, !tbaa !10
500   %v404 = shufflevector <16 x i32> %v399, <16 x i32> %v403, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
501   %v405 = add nsw i32 %v376, 32
502   %v406 = getelementptr inbounds i32, ptr %v227, i32 %v405
503   %v408 = load <16 x i32>, ptr %v406, align 4, !tbaa !10
504   %v409 = add nsw i32 %v376, 48
505   %v410 = getelementptr inbounds i32, ptr %v227, i32 %v409
506   %v412 = load <16 x i32>, ptr %v410, align 4, !tbaa !10
507   %v413 = shufflevector <16 x i32> %v408, <16 x i32> %v412, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
508   %v414 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v413)
509   %v415 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v413)
510   %v416 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v414, i32 168430090)
511   %v417 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v415, i32 168430090)
512   %v418 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v416, <16 x i32> %v417)
513   %v419 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v404, <32 x i32> %v418)
514   %v420 = shufflevector <32 x i32> %v419, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
515   %v421 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v420, i32 20)
516   %v422 = shufflevector <32 x i32> %v419, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
517   %v423 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v422, i32 20)
518   %v424 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v423, <16 x i32> %v421)
519   %v425 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v395)
520   %v426 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v395)
521   %v427 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %v425, <16 x i32> %v426)
522   %v428 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v424)
523   %v429 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v424)
524   %v430 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %v428, <16 x i32> %v429)
525   %v431 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v430, <16 x i32> %v427)
526   %v432 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v431)
527   %v433 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v431)
528   %v434 = tail call <16 x i32> @llvm.hexagon.V6.vsathub(<16 x i32> %v432, <16 x i32> %v433)
529   %v435 = mul nsw i32 %v23, %v19
530   %v436 = mul nsw i32 %v525, %v19
531   %v437 = add i32 %v435, %v21
532   %v438 = sub i32 %v436, %v437
533   %v439 = add i32 %v438, %v362
534   %v440 = getelementptr inbounds i8, ptr %v13, i32 %v439
535   store <16 x i32> %v434, ptr %v440, align 1, !tbaa !12
536   %v442 = add nuw nsw i32 %v358, 1
537   %v443 = icmp eq i32 %v442, %v356
538   br i1 %v443, label %b26, label %b22
540 b23:                                              ; preds = %b26, %b23
541   %v444 = phi i32 [ %v521, %b23 ], [ %v356, %b26 ]
542   %v445 = sub nsw i32 %v24, %v27
543   %v446 = add nsw i32 %v360, %v445
544   %v447 = add nsw i32 %v446, -64
545   %v448 = getelementptr inbounds i32, ptr %v227, i32 %v447
546   %v450 = load <16 x i32>, ptr %v448, align 4, !tbaa !10
547   %v451 = add nsw i32 %v446, -48
548   %v452 = getelementptr inbounds i32, ptr %v227, i32 %v451
549   %v454 = load <16 x i32>, ptr %v452, align 4, !tbaa !10
550   %v455 = shufflevector <16 x i32> %v450, <16 x i32> %v454, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
551   %v456 = add nsw i32 %v375, %v445
552   %v457 = add nsw i32 %v456, -64
553   %v458 = getelementptr inbounds i32, ptr %v227, i32 %v457
554   %v460 = load <16 x i32>, ptr %v458, align 4, !tbaa !10
555   %v461 = add nsw i32 %v456, -48
556   %v462 = getelementptr inbounds i32, ptr %v227, i32 %v461
557   %v464 = load <16 x i32>, ptr %v462, align 4, !tbaa !10
558   %v465 = shufflevector <16 x i32> %v460, <16 x i32> %v464, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
559   %v466 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v465)
560   %v467 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v465)
561   %v468 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v466, i32 168430090)
562   %v469 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v467, i32 168430090)
563   %v470 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v468, <16 x i32> %v469)
564   %v471 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v455, <32 x i32> %v470)
565   %v472 = shufflevector <32 x i32> %v471, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
566   %v473 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v472, i32 20)
567   %v474 = shufflevector <32 x i32> %v471, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
568   %v475 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v474, i32 20)
569   %v476 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v475, <16 x i32> %v473)
570   %v477 = add nsw i32 %v446, -32
571   %v478 = getelementptr inbounds i32, ptr %v227, i32 %v477
572   %v480 = load <16 x i32>, ptr %v478, align 4, !tbaa !10
573   %v481 = add nsw i32 %v446, -16
574   %v482 = getelementptr inbounds i32, ptr %v227, i32 %v481
575   %v484 = load <16 x i32>, ptr %v482, align 4, !tbaa !10
576   %v485 = shufflevector <16 x i32> %v480, <16 x i32> %v484, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
577   %v486 = add nsw i32 %v456, -32
578   %v487 = getelementptr inbounds i32, ptr %v227, i32 %v486
579   %v489 = load <16 x i32>, ptr %v487, align 4, !tbaa !10
580   %v490 = add nsw i32 %v456, -16
581   %v491 = getelementptr inbounds i32, ptr %v227, i32 %v490
582   %v493 = load <16 x i32>, ptr %v491, align 4, !tbaa !10
583   %v494 = shufflevector <16 x i32> %v489, <16 x i32> %v493, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
584   %v495 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v494)
585   %v496 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v494)
586   %v497 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v495, i32 168430090)
587   %v498 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v496, i32 168430090)
588   %v499 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v497, <16 x i32> %v498)
589   %v500 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v485, <32 x i32> %v499)
590   %v501 = shufflevector <32 x i32> %v500, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
591   %v502 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v501, i32 20)
592   %v503 = shufflevector <32 x i32> %v500, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
593   %v504 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v503, i32 20)
594   %v505 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v504, <16 x i32> %v502)
595   %v506 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v476)
596   %v507 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v476)
597   %v508 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %v506, <16 x i32> %v507)
598   %v509 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v505)
599   %v510 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v505)
600   %v511 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %v509, <16 x i32> %v510)
601   %v512 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v511, <16 x i32> %v508)
602   %v513 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v512)
603   %v514 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v512)
604   %v515 = tail call <16 x i32> @llvm.hexagon.V6.vsathub(<16 x i32> %v513, <16 x i32> %v514)
605   %v516 = add i32 %v15, -64
606   %v517 = sub i32 %v516, %v435
607   %v518 = add i32 %v517, %v436
608   %v519 = getelementptr inbounds i8, ptr %v13, i32 %v518
609   store <16 x i32> %v515, ptr %v519, align 1, !tbaa !12
610   %v521 = add nuw nsw i32 %v444, 1
611   %v522 = icmp eq i32 %v521, %v527
612   br i1 %v522, label %b24, label %b23
614 b24:                                              ; preds = %b26, %b23
615   %v523 = add nsw i32 %v525, 1
616   %v524 = icmp eq i32 %v523, %v50
617   br i1 %v524, label %b32, label %b25
619 b25:                                              ; preds = %b24, %b21
620   %v525 = phi i32 [ %v523, %b24 ], [ %v23, %b21 ]
621   br label %b22
623 b26:                                              ; preds = %b22
624   %v526 = add nsw i32 %v15, 63
625   %v527 = ashr i32 %v526, 6
626   %v528 = icmp slt i32 %v356, %v527
627   br i1 %v528, label %b23, label %b24, !prof !9
629 b27:                                              ; preds = %b21
630   %v529 = add nsw i32 %v15, 63
631   %v530 = ashr i32 %v529, 6
632   %v531 = icmp slt i32 %v356, %v530
633   br i1 %v531, label %b29, label %b31
635 b28:                                              ; preds = %b29, %b28
636   %v532 = phi i32 [ %v616, %b28 ], [ %v356, %b29 ]
637   %v533 = sub nsw i32 %v618, %v23
638   %v534 = mul nsw i32 %v533, %v222
639   %v535 = sub nsw i32 %v24, %v27
640   %v536 = add nsw i32 %v534, %v535
641   %v537 = add nsw i32 %v536, -64
642   %v539 = getelementptr inbounds i32, ptr %v227, i32 %v537
643   %v541 = load <16 x i32>, ptr %v539, align 4, !tbaa !10
644   %v542 = add nsw i32 %v536, -48
645   %v543 = getelementptr inbounds i32, ptr %v227, i32 %v542
646   %v545 = load <16 x i32>, ptr %v543, align 4, !tbaa !10
647   %v546 = shufflevector <16 x i32> %v541, <16 x i32> %v545, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
648   %v547 = add nsw i32 %v533, 1
649   %v548 = mul nsw i32 %v547, %v222
650   %v549 = add nsw i32 %v548, %v535
651   %v550 = add nsw i32 %v549, -64
652   %v551 = getelementptr inbounds i32, ptr %v227, i32 %v550
653   %v553 = load <16 x i32>, ptr %v551, align 4, !tbaa !10
654   %v554 = add nsw i32 %v549, -48
655   %v555 = getelementptr inbounds i32, ptr %v227, i32 %v554
656   %v557 = load <16 x i32>, ptr %v555, align 4, !tbaa !10
657   %v558 = shufflevector <16 x i32> %v553, <16 x i32> %v557, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
658   %v559 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v558)
659   %v560 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v558)
660   %v561 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v559, i32 168430090)
661   %v562 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v560, i32 168430090)
662   %v563 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v561, <16 x i32> %v562)
663   %v564 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v546, <32 x i32> %v563)
664   %v565 = shufflevector <32 x i32> %v564, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
665   %v566 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v565, i32 20)
666   %v567 = shufflevector <32 x i32> %v564, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
667   %v568 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v567, i32 20)
668   %v569 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v568, <16 x i32> %v566)
669   %v570 = add nsw i32 %v536, -32
670   %v571 = getelementptr inbounds i32, ptr %v227, i32 %v570
671   %v573 = load <16 x i32>, ptr %v571, align 4, !tbaa !10
672   %v574 = add nsw i32 %v536, -16
673   %v575 = getelementptr inbounds i32, ptr %v227, i32 %v574
674   %v577 = load <16 x i32>, ptr %v575, align 4, !tbaa !10
675   %v578 = shufflevector <16 x i32> %v573, <16 x i32> %v577, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
676   %v579 = add nsw i32 %v549, -32
677   %v580 = getelementptr inbounds i32, ptr %v227, i32 %v579
678   %v582 = load <16 x i32>, ptr %v580, align 4, !tbaa !10
679   %v583 = add nsw i32 %v549, -16
680   %v584 = getelementptr inbounds i32, ptr %v227, i32 %v583
681   %v586 = load <16 x i32>, ptr %v584, align 4, !tbaa !10
682   %v587 = shufflevector <16 x i32> %v582, <16 x i32> %v586, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
683   %v588 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v587)
684   %v589 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v587)
685   %v590 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v588, i32 168430090)
686   %v591 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32> %v589, i32 168430090)
687   %v592 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v590, <16 x i32> %v591)
688   %v593 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %v578, <32 x i32> %v592)
689   %v594 = shufflevector <32 x i32> %v593, <32 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
690   %v595 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v594, i32 20)
691   %v596 = shufflevector <32 x i32> %v593, <32 x i32> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
692   %v597 = tail call <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32> %v596, i32 20)
693   %v598 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v597, <16 x i32> %v595)
694   %v599 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v569)
695   %v600 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v569)
696   %v601 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %v599, <16 x i32> %v600)
697   %v602 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v598)
698   %v603 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v598)
699   %v604 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %v602, <16 x i32> %v603)
700   %v605 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %v604, <16 x i32> %v601)
701   %v606 = tail call <16 x i32> @llvm.hexagon.V6.hi(<32 x i32> %v605)
702   %v607 = tail call <16 x i32> @llvm.hexagon.V6.lo(<32 x i32> %v605)
703   %v608 = tail call <16 x i32> @llvm.hexagon.V6.vsathub(<16 x i32> %v606, <16 x i32> %v607)
704   %v609 = mul nsw i32 %v23, %v19
705   %v610 = mul nsw i32 %v618, %v19
706   %v611 = add i32 %v15, -64
707   %v612 = sub i32 %v611, %v609
708   %v613 = add i32 %v612, %v610
709   %v614 = getelementptr inbounds i8, ptr %v13, i32 %v613
710   store <16 x i32> %v608, ptr %v614, align 1, !tbaa !12
711   %v616 = add nuw nsw i32 %v532, 1
712   %v617 = icmp eq i32 %v616, %v530
713   br i1 %v617, label %b30, label %b28
715 b29:                                              ; preds = %b30, %b27
716   %v618 = phi i32 [ %v619, %b30 ], [ %v23, %b27 ]
717   br label %b28
719 b30:                                              ; preds = %b28
720   %v619 = add nsw i32 %v618, 1
721   %v620 = icmp eq i32 %v619, %v50
722   br i1 %v620, label %b32, label %b29
724 b31:                                              ; preds = %b27, %b20
725   %v621 = icmp eq ptr %v227, null
726   br i1 %v621, label %b33, label %b32
728 b32:                                              ; preds = %b31, %b30, %b24
729   tail call void @f3(ptr null, ptr %v227) #2
730   br label %b33
732 b33:                                              ; preds = %b32, %b31
733   ret i32 0
736 ; Function Attrs: nounwind readnone
737 declare <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32>) #1
739 ; Function Attrs: nounwind readnone
740 declare <16 x i32> @llvm.hexagon.V6.hi(<32 x i32>) #1
742 ; Function Attrs: nounwind readnone
743 declare <16 x i32> @llvm.hexagon.V6.lo(<32 x i32>) #1
745 ; Function Attrs: nounwind readnone
746 declare <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32>) #1
748 ; Function Attrs: nounwind readnone
749 declare <16 x i32> @llvm.hexagon.V6.vmpyiwb(<16 x i32>, i32) #1
751 ; Function Attrs: nounwind readnone
752 declare <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32>, <16 x i32>) #1
754 ; Function Attrs: nounwind readnone
755 declare <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32>, <32 x i32>) #1
757 ; Function Attrs: nounwind readnone
758 declare <16 x i32> @llvm.hexagon.V6.vlsrw(<16 x i32>, i32) #1
760 ; Function Attrs: nounwind readnone
761 declare <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32>, <16 x i32>) #1
763 ; Function Attrs: nounwind readnone
764 declare <16 x i32> @llvm.hexagon.V6.vsathub(<16 x i32>, <16 x i32>) #1
766 attributes #0 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length64b" }
767 attributes #1 = { nounwind readnone }
768 attributes #2 = { nobuiltin nounwind }
770 !llvm.module.flags = !{!0, !1, !2}
772 !0 = !{i32 2, !"halide_use_soft_float_abi", i32 0}
773 !1 = !{i32 2, !"halide_mcpu", !"hexagonv60"}
774 !2 = !{i32 2, !"halide_mattrs", !"+hvx"}
775 !3 = !{!"branch_weights", i32 0, i32 1073741824}
776 !4 = !{!5, !5, i64 0}
777 !5 = !{!"input", !6}
778 !6 = !{!"Halide buffer"}
779 !7 = !{!8, !8, i64 0}
780 !8 = !{!"constant_exterior", !6}
781 !9 = !{!"branch_weights", i32 1073741824, i32 0}
782 !10 = !{!11, !11, i64 0}
783 !11 = !{!"rows", !6}
784 !12 = !{!13, !13, i64 0}
785 !13 = !{!"gaussian11", !6}