[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / Hexagon / regscavengerbug.ll
blob35d77c7c7ecbd241d61ff3af0aa72ba9f8c34e32
1 ; RUN: llc -march=hexagon -O3 < %s
2 ; REQUIRES: asserts
4 ; This used to assert in the register scavenger.
6 target triple = "hexagon-unknown-linux-gnu"
8 %0 = type { %1 }
9 %1 = type { %2 }
10 %2 = type { [4 x [4 x double]] }
11 %3 = type { [3 x double] }
12 %4 = type { %5, %0, %0, ptr, %3, %3 }
13 %5 = type { ptr }
14 %6 = type { %3, %3 }
16 declare void @f0(ptr sret(%3), ptr, ptr)
18 ; Function Attrs: nounwind
19 define void @f1(ptr %a0, ptr nocapture %a1, ptr nocapture %a2) #0 align 2 {
20 b0:
21   %v0 = alloca %6, align 8
22   %v1 = alloca [2 x [2 x [2 x %3]]], align 8
23   %v2 = alloca %3, align 8
24   %v3 = getelementptr inbounds %4, ptr %a0, i32 0, i32 1
25   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v3, ptr align 8 %a1, i32 128, i1 false)
26   %v6 = getelementptr inbounds %4, ptr %a0, i32 0, i32 2
27   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v6, ptr align 8 %a2, i32 128, i1 false)
28   call void @llvm.memset.p0.i64(ptr align 8 %v0, i8 0, i64 48, i1 false)
29   %v10 = getelementptr inbounds %4, ptr %a0, i32 0, i32 3
30   %v11 = load ptr, ptr %v10, align 4, !tbaa !0
31   %v13 = load ptr, ptr %v11, align 4, !tbaa !4
32   %v14 = getelementptr inbounds ptr, ptr %v13, i32 3
33   %v15 = load ptr, ptr %v14, align 4
34   %v16 = call i32 %v15(ptr %v11, double 0.000000e+00, double 0.000000e+00, ptr %v0)
35   %v17 = icmp eq i32 %v16, 0
36   br i1 %v17, label %b1, label %b3
38 b1:                                               ; preds = %b0
39   %v18 = getelementptr inbounds %4, ptr %a0, i32 0, i32 4, i32 0, i32 0
40   store double -1.000000e+06, ptr %v18, align 8, !tbaa !6
41   %v19 = getelementptr inbounds %4, ptr %a0, i32 0, i32 4, i32 0, i32 1
42   store double -1.000000e+06, ptr %v19, align 8, !tbaa !6
43   %v20 = getelementptr inbounds %4, ptr %a0, i32 0, i32 4, i32 0, i32 2
44   store double -1.000000e+06, ptr %v20, align 8, !tbaa !6
45   %v21 = getelementptr inbounds %4, ptr %a0, i32 0, i32 5, i32 0, i32 0
46   store double 1.000000e+06, ptr %v21, align 8, !tbaa !6
47   %v22 = getelementptr inbounds %4, ptr %a0, i32 0, i32 5, i32 0, i32 1
48   store double 1.000000e+06, ptr %v22, align 8, !tbaa !6
49   %v23 = getelementptr inbounds %4, ptr %a0, i32 0, i32 5, i32 0, i32 2
50   store double 1.000000e+06, ptr %v23, align 8, !tbaa !6
51   br label %b2
53 b2:                                               ; preds = %b3, %b1
54   ret void
56 b3:                                               ; preds = %b0
57   %v26 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 2
58   call void @llvm.memset.p0.i64(ptr align 8 %v1, i8 0, i64 48, i1 false)
59   call void @llvm.memset.p0.i64(ptr align 8 %v26, i8 0, i64 24, i1 false)
60   %v29 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 3
61   call void @llvm.memset.p0.i64(ptr align 8 %v29, i8 0, i64 24, i1 false)
62   %v31 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 4
63   call void @llvm.memset.p0.i64(ptr align 8 %v31, i8 0, i64 24, i1 false)
64   %v33 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 5
65   call void @llvm.memset.p0.i64(ptr align 8 %v33, i8 0, i64 24, i1 false)
66   %v35 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 6
67   call void @llvm.memset.p0.i64(ptr align 8 %v35, i8 0, i64 24, i1 false)
68   %v37 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 7
69   call void @llvm.memset.p0.i64(ptr align 8 %v37, i8 0, i64 24, i1 false)
70   %v40 = getelementptr inbounds %6, ptr %v0, i32 0, i32 0, i32 0, i32 1
71   %v41 = getelementptr inbounds %6, ptr %v0, i32 0, i32 0, i32 0, i32 2
72   %v43 = getelementptr inbounds %6, ptr %v0, i32 0, i32 1, i32 0, i32 2
73   %v44 = getelementptr inbounds %6, ptr %v0, i32 0, i32 1, i32 0, i32 1
74   %v45 = getelementptr inbounds %6, ptr %v0, i32 0, i32 1, i32 0, i32 0
75   %v46 = load double, ptr %v0, align 8, !tbaa !6
76   store double %v46, ptr %v1, align 8, !tbaa !6
77   %v48 = load double, ptr %v40, align 8, !tbaa !6
78   %v49 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1
79   store double %v48, ptr %v49, align 8, !tbaa !6
80   %v50 = load double, ptr %v41, align 8, !tbaa !6
81   %v51 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2
82   store double %v50, ptr %v51, align 8, !tbaa !6
83   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v1)
84   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v1, ptr align 8 %v2, i32 24, i1 false)
85   %v52 = load double, ptr %v0, align 8, !tbaa !6
86   %v53 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
87   store double %v52, ptr %v53, align 8, !tbaa !6
88   %v54 = load double, ptr %v40, align 8, !tbaa !6
89   %v55 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1
90   store double %v54, ptr %v55, align 8, !tbaa !6
91   %v56 = load double, ptr %v43, align 8, !tbaa !6
92   %v57 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 2
93   store double %v56, ptr %v57, align 8, !tbaa !6
94   %v58 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1
95   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v58)
96   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v58, ptr align 8 %v2, i32 24, i1 false)
97   %v60 = load double, ptr %v0, align 8, !tbaa !6
98   %v61 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0
99   store double %v60, ptr %v61, align 8, !tbaa !6
100   %v62 = load double, ptr %v44, align 8, !tbaa !6
101   %v63 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 1
102   store double %v62, ptr %v63, align 8, !tbaa !6
103   %v64 = load double, ptr %v41, align 8, !tbaa !6
104   %v65 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 2
105   store double %v64, ptr %v65, align 8, !tbaa !6
106   %v66 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0
107   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v66)
108   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v66, ptr align 8 %v2, i32 24, i1 false)
109   %v68 = load double, ptr %v0, align 8, !tbaa !6
110   %v69 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 0
111   store double %v68, ptr %v69, align 8, !tbaa !6
112   %v70 = load double, ptr %v44, align 8, !tbaa !6
113   %v71 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1
114   store double %v70, ptr %v71, align 8, !tbaa !6
115   %v72 = load double, ptr %v43, align 8, !tbaa !6
116   %v73 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 2
117   store double %v72, ptr %v73, align 8, !tbaa !6
118   %v74 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1
119   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v74)
120   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v74, ptr align 8 %v2, i32 24, i1 false)
121   %v76 = load double, ptr %v45, align 8, !tbaa !6
122   %v77 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0
123   store double %v76, ptr %v77, align 8, !tbaa !6
124   %v78 = load double, ptr %v40, align 8, !tbaa !6
125   %v79 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 1
126   store double %v78, ptr %v79, align 8, !tbaa !6
127   %v80 = load double, ptr %v41, align 8, !tbaa !6
128   %v81 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2
129   store double %v80, ptr %v81, align 8, !tbaa !6
130   %v82 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0
131   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v82)
132   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v82, ptr align 8 %v2, i32 24, i1 false)
133   %v84 = load double, ptr %v45, align 8, !tbaa !6
134   %v85 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0
135   store double %v84, ptr %v85, align 8, !tbaa !6
136   %v86 = load double, ptr %v40, align 8, !tbaa !6
137   %v87 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1
138   store double %v86, ptr %v87, align 8, !tbaa !6
139   %v88 = load double, ptr %v43, align 8, !tbaa !6
140   %v89 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 2
141   store double %v88, ptr %v89, align 8, !tbaa !6
142   %v90 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1
143   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v90)
144   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v90, ptr align 8 %v2, i32 24, i1 false)
145   %v92 = load double, ptr %v45, align 8, !tbaa !6
146   %v93 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 0
147   store double %v92, ptr %v93, align 8, !tbaa !6
148   %v94 = load double, ptr %v44, align 8, !tbaa !6
149   %v95 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1
150   store double %v94, ptr %v95, align 8, !tbaa !6
151   %v96 = load double, ptr %v41, align 8, !tbaa !6
152   %v97 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 2
153   store double %v96, ptr %v97, align 8, !tbaa !6
154   %v98 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0
155   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v98)
156   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v98, ptr align 8 %v2, i32 24, i1 false)
157   %v100 = load double, ptr %v45, align 8, !tbaa !6
158   %v101 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 0
159   store double %v100, ptr %v101, align 8, !tbaa !6
160   %v102 = load double, ptr %v44, align 8, !tbaa !6
161   %v103 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1
162   store double %v102, ptr %v103, align 8, !tbaa !6
163   %v104 = load double, ptr %v43, align 8, !tbaa !6
164   %v105 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 2
165   store double %v104, ptr %v105, align 8, !tbaa !6
166   %v106 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1
167   call void @f0(ptr sret(%3) %v2, ptr %v3, ptr %v106)
168   call void @llvm.memcpy.p0.p0.i32(ptr align 8 %v106, ptr align 8 %v2, i32 24, i1 false)
169   %v109 = load double, ptr %v1, align 8, !tbaa !6
170   %v110 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1
171   %v111 = load double, ptr %v110, align 8, !tbaa !6
172   %v112 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2
173   %v113 = load double, ptr %v112, align 8, !tbaa !6
174   %v114 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
175   %v115 = load double, ptr %v114, align 8, !tbaa !6
176   %v116 = fcmp olt double %v115, %v109
177   %v117 = select i1 %v116, double %v115, double %v109
178   %v118 = fcmp ogt double %v115, %v109
179   %v119 = select i1 %v118, double %v115, double %v109
180   %v120 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1
181   %v121 = load double, ptr %v120, align 8, !tbaa !6
182   %v122 = fcmp olt double %v121, %v111
183   %v123 = select i1 %v122, double %v121, double %v111
184   %v124 = fcmp ogt double %v121, %v111
185   %v125 = select i1 %v124, double %v121, double %v111
186   %v126 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 0, i32 1, i32 0, i32 2
187   %v127 = load double, ptr %v126, align 8, !tbaa !6
188   %v128 = fcmp olt double %v127, %v113
189   %v129 = select i1 %v128, double %v127, double %v113
190   %v130 = fcmp ogt double %v127, %v113
191   %v131 = select i1 %v130, double %v127, double %v113
192   %v132 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0
193   %v133 = load double, ptr %v132, align 8, !tbaa !6
194   %v134 = fcmp olt double %v133, %v117
195   %v135 = select i1 %v134, double %v133, double %v117
196   %v136 = fcmp ogt double %v133, %v119
197   %v137 = select i1 %v136, double %v133, double %v119
198   %v138 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 1
199   %v139 = load double, ptr %v138, align 8, !tbaa !6
200   %v140 = fcmp olt double %v139, %v123
201   %v141 = select i1 %v140, double %v139, double %v123
202   %v142 = fcmp ogt double %v139, %v125
203   %v143 = select i1 %v142, double %v139, double %v125
204   %v144 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 0, i32 0, i32 2
205   %v145 = load double, ptr %v144, align 8, !tbaa !6
206   %v146 = fcmp olt double %v145, %v129
207   %v147 = select i1 %v146, double %v145, double %v129
208   %v148 = fcmp ogt double %v145, %v131
209   %v149 = select i1 %v148, double %v145, double %v131
210   %v150 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 0
211   %v151 = load double, ptr %v150, align 8, !tbaa !6
212   %v152 = fcmp olt double %v151, %v135
213   %v153 = select i1 %v152, double %v151, double %v135
214   %v154 = fcmp ogt double %v151, %v137
215   %v155 = select i1 %v154, double %v151, double %v137
216   %v156 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1
217   %v157 = load double, ptr %v156, align 8, !tbaa !6
218   %v158 = fcmp olt double %v157, %v141
219   %v159 = select i1 %v158, double %v157, double %v141
220   %v160 = fcmp ogt double %v157, %v143
221   %v161 = select i1 %v160, double %v157, double %v143
222   %v162 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 0, i32 1, i32 1, i32 0, i32 2
223   %v163 = load double, ptr %v162, align 8, !tbaa !6
224   %v164 = fcmp olt double %v163, %v147
225   %v165 = select i1 %v164, double %v163, double %v147
226   %v166 = fcmp ogt double %v163, %v149
227   %v167 = select i1 %v166, double %v163, double %v149
228   %v168 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0
229   %v169 = load double, ptr %v168, align 8, !tbaa !6
230   %v170 = fcmp olt double %v169, %v153
231   %v171 = select i1 %v170, double %v169, double %v153
232   %v172 = fcmp ogt double %v169, %v155
233   %v173 = select i1 %v172, double %v169, double %v155
234   %v174 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 1
235   %v175 = load double, ptr %v174, align 8, !tbaa !6
236   %v176 = fcmp olt double %v175, %v159
237   %v177 = select i1 %v176, double %v175, double %v159
238   %v178 = fcmp ogt double %v175, %v161
239   %v179 = select i1 %v178, double %v175, double %v161
240   %v180 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2
241   %v181 = load double, ptr %v180, align 8, !tbaa !6
242   %v182 = fcmp olt double %v181, %v165
243   %v183 = select i1 %v182, double %v181, double %v165
244   %v184 = fcmp ogt double %v181, %v167
245   %v185 = select i1 %v184, double %v181, double %v167
246   %v186 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0
247   %v187 = load double, ptr %v186, align 8, !tbaa !6
248   %v188 = fcmp olt double %v187, %v171
249   %v189 = select i1 %v188, double %v187, double %v171
250   %v190 = fcmp ogt double %v187, %v173
251   %v191 = select i1 %v190, double %v187, double %v173
252   %v192 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1
253   %v193 = load double, ptr %v192, align 8, !tbaa !6
254   %v194 = fcmp olt double %v193, %v177
255   %v195 = select i1 %v194, double %v193, double %v177
256   %v196 = fcmp ogt double %v193, %v179
257   %v197 = select i1 %v196, double %v193, double %v179
258   %v198 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 2
259   %v199 = load double, ptr %v198, align 8, !tbaa !6
260   %v200 = fcmp olt double %v199, %v183
261   %v201 = select i1 %v200, double %v199, double %v183
262   %v202 = fcmp ogt double %v199, %v185
263   %v203 = select i1 %v202, double %v199, double %v185
264   %v204 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 0
265   %v205 = load double, ptr %v204, align 8, !tbaa !6
266   %v206 = fcmp olt double %v205, %v189
267   %v207 = select i1 %v206, double %v205, double %v189
268   %v208 = fcmp ogt double %v205, %v191
269   %v209 = select i1 %v208, double %v205, double %v191
270   %v210 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1
271   %v211 = load double, ptr %v210, align 8, !tbaa !6
272   %v212 = fcmp olt double %v211, %v195
273   %v213 = select i1 %v212, double %v211, double %v195
274   %v214 = fcmp ogt double %v211, %v197
275   %v215 = select i1 %v214, double %v211, double %v197
276   %v216 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 2
277   %v217 = load double, ptr %v216, align 8, !tbaa !6
278   %v218 = fcmp olt double %v217, %v201
279   %v219 = select i1 %v218, double %v217, double %v201
280   %v220 = fcmp ogt double %v217, %v203
281   %v221 = select i1 %v220, double %v217, double %v203
282   %v222 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 0
283   %v223 = load double, ptr %v222, align 8, !tbaa !6
284   %v224 = fcmp olt double %v223, %v207
285   %v225 = select i1 %v224, double %v223, double %v207
286   %v226 = fcmp ogt double %v223, %v209
287   %v227 = select i1 %v226, double %v223, double %v209
288   %v228 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1
289   %v229 = load double, ptr %v228, align 8, !tbaa !6
290   %v230 = fcmp olt double %v229, %v213
291   %v231 = select i1 %v230, double %v229, double %v213
292   %v232 = fcmp ogt double %v229, %v215
293   %v233 = select i1 %v232, double %v229, double %v215
294   %v234 = getelementptr inbounds [2 x [2 x [2 x %3]]], ptr %v1, i32 0, i32 1, i32 1, i32 1, i32 0, i32 2
295   %v235 = load double, ptr %v234, align 8, !tbaa !6
296   %v236 = fcmp olt double %v235, %v219
297   %v237 = select i1 %v236, double %v235, double %v219
298   %v238 = fcmp ogt double %v235, %v221
299   %v239 = select i1 %v238, double %v235, double %v221
300   %v240 = getelementptr inbounds %4, ptr %a0, i32 0, i32 4, i32 0, i32 0
301   store double %v225, ptr %v240, align 8
302   %v241 = getelementptr inbounds %4, ptr %a0, i32 0, i32 4, i32 0, i32 1
303   store double %v231, ptr %v241, align 8
304   %v242 = getelementptr inbounds %4, ptr %a0, i32 0, i32 4, i32 0, i32 2
305   store double %v237, ptr %v242, align 8
306   %v243 = getelementptr inbounds %4, ptr %a0, i32 0, i32 5, i32 0, i32 0
307   store double %v227, ptr %v243, align 8
308   %v244 = getelementptr inbounds %4, ptr %a0, i32 0, i32 5, i32 0, i32 1
309   store double %v233, ptr %v244, align 8
310   %v245 = getelementptr inbounds %4, ptr %a0, i32 0, i32 5, i32 0, i32 2
311   store double %v239, ptr %v245, align 8
312   br label %b2
315 ; Function Attrs: argmemonly nounwind
316 declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1) #1
318 ; Function Attrs: argmemonly nounwind
319 declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1) #1
321 attributes #0 = { nounwind "target-cpu"="hexagonv55" }
322 attributes #1 = { argmemonly nounwind }
324 !0 = !{!1, !1, i64 0}
325 !1 = !{!"any pointer", !2}
326 !2 = !{!"omnipotent char", !3}
327 !3 = !{!"Simple C/C++ TBAA"}
328 !4 = !{!5, !5, i64 0}
329 !5 = !{!"vtable pointer", !3}
330 !6 = !{!7, !7, i64 0}
331 !7 = !{!"double", !2}