; LLVM IR from QiaoLiuHit/LSOTB-TIR :: vlfeat-0.9.19/vl (sift)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct._VlSiftFilt = type { double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, i32, i32, ptr, double, i64, ptr, i32, i32, double, double, double, double, double, ptr, i32 }
%struct._VlSiftKeypoint = type { i32, i32, i32, i32, float, float, float, float }

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

declare ptr @vl_malloc(i64 noundef) #1

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @vl_sift_get_octave(ptr noundef, i32 noundef) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

; Function Attrs: nounwind uwtable
define dso_local void @vl_sift_detect(ptr noundef %0) #5 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca double, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca float, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca [9 x double], align 16
  %39 = alloca [3 x double], align 16
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca i32, align 4
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca i32, align 4
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #6
  %60 = load ptr, ptr %2, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct._VlSiftFilt, ptr %60, i32 0, i32 14
  %62 = load ptr, ptr %61, align 8, !tbaa !9
  store ptr %62, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  %63 = load ptr, ptr %2, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct._VlSiftFilt, ptr %63, i32 0, i32 9
  %65 = load i32, ptr %64, align 4, !tbaa !14
  store i32 %65, ptr %4, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  %66 = load ptr, ptr %2, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct._VlSiftFilt, ptr %66, i32 0, i32 10
  %68 = load i32, ptr %67, align 8, !tbaa !16
  store i32 %68, ptr %5, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct._VlSiftFilt, ptr %69, i32 0, i32 15
  %71 = load i32, ptr %70, align 8, !tbaa !17
  store i32 %71, ptr %6, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct._VlSiftFilt, ptr %72, i32 0, i32 16
  %74 = load i32, ptr %73, align 4, !tbaa !18
  store i32 %74, ptr %7, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  %75 = load ptr, ptr %2, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct._VlSiftFilt, ptr %75, i32 0, i32 24
  %77 = load double, ptr %76, align 8, !tbaa !19
  store double %77, ptr %8, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct._VlSiftFilt, ptr %78, i32 0, i32 23
  %80 = load double, ptr %79, align 8, !tbaa !21
  store double %80, ptr %9, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 1, ptr %10, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %81 = load i32, ptr %6, align 4, !tbaa !15
  store i32 %81, ptr %11, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %82 = load i32, ptr %6, align 4, !tbaa !15
  %83 = load i32, ptr %7, align 4, !tbaa !15
  %84 = mul nsw i32 %82, %83
  store i32 %84, ptr %12, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct._VlSiftFilt, ptr %85, i32 0, i32 11
  %87 = load i32, ptr %86, align 4, !tbaa !22
  %88 = sitofp i32 %87 to double
  %89 = call double @pow(double noundef 2.000000e+00, double noundef %88) #6
  store double %89, ptr %13, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._VlSiftFilt, ptr %90, i32 0, i32 21
  store i32 0, ptr %91, align 8, !tbaa !23
  %92 = load ptr, ptr %2, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct._VlSiftFilt, ptr %92, i32 0, i32 14
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  store ptr %94, ptr %20, align 8, !tbaa !5
  %95 = load i32, ptr %4, align 4, !tbaa !15
  store i32 %95, ptr %16, align 4, !tbaa !15
  br label %96

96:                                               ; preds = %130, %1
  %97 = load i32, ptr %16, align 4, !tbaa !15
  %98 = load i32, ptr %5, align 4, !tbaa !15
  %99 = sub nsw i32 %98, 1
  %100 = icmp sle i32 %97, %99
  br i1 %100, label %101, label %133

101:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = load i32, ptr %16, align 4, !tbaa !15
  %104 = call ptr @vl_sift_get_octave(ptr noundef %102, i32 noundef %103)
  store ptr %104, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %105 = load ptr, ptr %2, align 8, !tbaa !5
  %106 = load i32, ptr %16, align 4, !tbaa !15
  %107 = add nsw i32 %106, 1
  %108 = call ptr @vl_sift_get_octave(ptr noundef %105, i32 noundef %107)
  store ptr %108, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %109 = load ptr, ptr %23, align 8, !tbaa !5
  %110 = load i32, ptr %6, align 4, !tbaa !15
  %111 = load i32, ptr %7, align 4, !tbaa !15
  %112 = mul nsw i32 %110, %111
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds float, ptr %109, i64 %113
  store ptr %114, ptr %25, align 8, !tbaa !5
  br label %115

115:                                              ; preds = %119, %101
  %116 = load ptr, ptr %23, align 8, !tbaa !5
  %117 = load ptr, ptr %25, align 8, !tbaa !5
  %118 = icmp ne ptr %116, %117
  br i1 %118, label %119, label %129

119:                                              ; preds = %115
  %120 = load ptr, ptr %24, align 8, !tbaa !5
  %121 = getelementptr inbounds float, ptr %120, i32 1
  store ptr %121, ptr %24, align 8, !tbaa !5
  %122 = load float, ptr %120, align 4, !tbaa !24
  %123 = load ptr, ptr %23, align 8, !tbaa !5
  %124 = getelementptr inbounds float, ptr %123, i32 1
  store ptr %124, ptr %23, align 8, !tbaa !5
  %125 = load float, ptr %123, align 4, !tbaa !24
  %126 = fsub float %122, %125
  %127 = load ptr, ptr %20, align 8, !tbaa !5
  %128 = getelementptr inbounds float, ptr %127, i32 1
  store ptr %128, ptr %20, align 8, !tbaa !5
  store float %126, ptr %127, align 4, !tbaa !24
  br label %115, !llvm.loop !26

129:                                              ; preds = %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %130

130:                                              ; preds = %129
  %131 = load i32, ptr %16, align 4, !tbaa !15
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %16, align 4, !tbaa !15
  br label %96, !llvm.loop !28

133:                                              ; preds = %96
  %134 = load ptr, ptr %3, align 8, !tbaa !5
  %135 = getelementptr inbounds float, ptr %134, i64 1
  %136 = load i32, ptr %11, align 4, !tbaa !15
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds float, ptr %135, i64 %137
  %139 = load i32, ptr %12, align 4, !tbaa !15
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds float, ptr %138, i64 %140
  store ptr %141, ptr %20, align 8, !tbaa !5
  %142 = load i32, ptr %4, align 4, !tbaa !15
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %16, align 4, !tbaa !15
  br label %144

144:                                              ; preds = %799, %133
  %145 = load i32, ptr %16, align 4, !tbaa !15
  %146 = load i32, ptr %5, align 4, !tbaa !15
  %147 = sub nsw i32 %146, 2
  %148 = icmp sle i32 %145, %147
  br i1 %148, label %149, label %802

149:                                              ; preds = %144
  store i32 1, ptr %15, align 4, !tbaa !15
  br label %150

150:                                              ; preds = %790, %149
  %151 = load i32, ptr %15, align 4, !tbaa !15
  %152 = load i32, ptr %7, align 4, !tbaa !15
  %153 = sub nsw i32 %152, 1
  %154 = icmp slt i32 %151, %153
  br i1 %154, label %155, label %793

155:                                              ; preds = %150
  store i32 1, ptr %14, align 4, !tbaa !15
  br label %156

156:                                              ; preds = %784, %155
  %157 = load i32, ptr %14, align 4, !tbaa !15
  %158 = load i32, ptr %6, align 4, !tbaa !15
  %159 = sub nsw i32 %158, 1
  %160 = icmp slt i32 %157, %159
  br i1 %160, label %161, label %787

161:                                              ; preds = %156
  %162 = load ptr, ptr %20, align 8, !tbaa !5
  %163 = load float, ptr %162, align 4, !tbaa !24
  store float %163, ptr %21, align 4, !tbaa !24
  %164 = load float, ptr %21, align 4, !tbaa !24
  %165 = fpext float %164 to double
  %166 = load double, ptr %9, align 8, !tbaa !20
  %167 = fmul double 8.000000e-01, %166
  %168 = fcmp oge double %165, %167
  br i1 %168, label %169, label %443

169:                                              ; preds = %161
  %170 = load float, ptr %21, align 4, !tbaa !24
  %171 = load ptr, ptr %20, align 8, !tbaa !5
  %172 = getelementptr inbounds float, ptr %171, i64 1
  %173 = load float, ptr %172, align 4, !tbaa !24
  %174 = fcmp ogt float %170, %173
  br i1 %174, label %175, label %443

175:                                              ; preds = %169
  %176 = load float, ptr %21, align 4, !tbaa !24
  %177 = load ptr, ptr %20, align 8, !tbaa !5
  %178 = getelementptr inbounds float, ptr %177, i64 -1
  %179 = load float, ptr %178, align 4, !tbaa !24
  %180 = fcmp ogt float %176, %179
  br i1 %180, label %181, label %443

181:                                              ; preds = %175
  %182 = load float, ptr %21, align 4, !tbaa !24
  %183 = load ptr, ptr %20, align 8, !tbaa !5
  %184 = load i32, ptr %12, align 4, !tbaa !15
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds float, ptr %183, i64 %185
  %187 = load float, ptr %186, align 4, !tbaa !24
  %188 = fcmp ogt float %182, %187
  br i1 %188, label %189, label %443

189:                                              ; preds = %181
  %190 = load float, ptr %21, align 4, !tbaa !24
  %191 = load ptr, ptr %20, align 8, !tbaa !5
  %192 = load i32, ptr %12, align 4, !tbaa !15
  %193 = sext i32 %192 to i64
  %194 = sub i64 0, %193
  %195 = getelementptr inbounds float, ptr %191, i64 %194
  %196 = load float, ptr %195, align 4, !tbaa !24
  %197 = fcmp ogt float %190, %196
  br i1 %197, label %198, label %443

198:                                              ; preds = %189
  %199 = load float, ptr %21, align 4, !tbaa !24
  %200 = load ptr, ptr %20, align 8, !tbaa !5
  %201 = load i32, ptr %11, align 4, !tbaa !15
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds float, ptr %200, i64 %202
  %204 = load float, ptr %203, align 4, !tbaa !24
  %205 = fcmp ogt float %199, %204
  br i1 %205, label %206, label %443

206:                                              ; preds = %198
  %207 = load float, ptr %21, align 4, !tbaa !24
  %208 = load ptr, ptr %20, align 8, !tbaa !5
  %209 = load i32, ptr %11, align 4, !tbaa !15
  %210 = sext i32 %209 to i64
  %211 = sub i64 0, %210
  %212 = getelementptr inbounds float, ptr %208, i64 %211
  %213 = load float, ptr %212, align 4, !tbaa !24
  %214 = fcmp ogt float %207, %213
  br i1 %214, label %215, label %443

215:                                              ; preds = %206
  %216 = load float, ptr %21, align 4, !tbaa !24
  %217 = load ptr, ptr %20, align 8, !tbaa !5
  %218 = load i32, ptr %11, align 4, !tbaa !15
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds float, ptr %217, i64 %219
  %221 = getelementptr inbounds float, ptr %220, i64 1
  %222 = load float, ptr %221, align 4, !tbaa !24
  %223 = fcmp ogt float %216, %222
  br i1 %223, label %224, label %443

224:                                              ; preds = %215
  %225 = load float, ptr %21, align 4, !tbaa !24
  %226 = load ptr, ptr %20, align 8, !tbaa !5
  %227 = load i32, ptr %11, align 4, !tbaa !15
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds float, ptr %226, i64 %228
  %230 = getelementptr inbounds float, ptr %229, i64 -1
  %231 = load float, ptr %230, align 4, !tbaa !24
  %232 = fcmp ogt float %225, %231
  br i1 %232, label %233, label %443

233:                                              ; preds = %224
  %234 = load float, ptr %21, align 4, !tbaa !24
  %235 = load ptr, ptr %20, align 8, !tbaa !5
  %236 = load i32, ptr %11, align 4, !tbaa !15
  %237 = sext i32 %236 to i64
  %238 = sub i64 0, %237
  %239 = getelementptr inbounds float, ptr %235, i64 %238
  %240 = getelementptr inbounds float, ptr %239, i64 1
  %241 = load float, ptr %240, align 4, !tbaa !24
  %242 = fcmp ogt float %234, %241
  br i1 %242, label %243, label %443

243:                                              ; preds = %233
  %244 = load float, ptr %21, align 4, !tbaa !24
  %245 = load ptr, ptr %20, align 8, !tbaa !5
  %246 = load i32, ptr %11, align 4, !tbaa !15
  %247 = sext i32 %246 to i64
  %248 = sub i64 0, %247
  %249 = getelementptr inbounds float, ptr %245, i64 %248
  %250 = getelementptr inbounds float, ptr %249, i64 -1
  %251 = load float, ptr %250, align 4, !tbaa !24
  %252 = fcmp ogt float %244, %251
  br i1 %252, label %253, label %443

253:                                              ; preds = %243
  %254 = load float, ptr %21, align 4, !tbaa !24
  %255 = load ptr, ptr %20, align 8, !tbaa !5
  %256 = getelementptr inbounds float, ptr %255, i64 1
  %257 = load i32, ptr %12, align 4, !tbaa !15
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds float, ptr %256, i64 %258
  %260 = load float, ptr %259, align 4, !tbaa !24
  %261 = fcmp ogt float %254, %260
  br i1 %261, label %262, label %443

262:                                              ; preds = %253
  %263 = load float, ptr %21, align 4, !tbaa !24
  %264 = load ptr, ptr %20, align 8, !tbaa !5
  %265 = getelementptr inbounds float, ptr %264, i64 -1
  %266 = load i32, ptr %12, align 4, !tbaa !15
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds float, ptr %265, i64 %267
  %269 = load float, ptr %268, align 4, !tbaa !24
  %270 = fcmp ogt float %263, %269
  br i1 %270, label %271, label %443

271:                                              ; preds = %262
  %272 = load float, ptr %21, align 4, !tbaa !24
  %273 = load ptr, ptr %20, align 8, !tbaa !5
  %274 = load i32, ptr %11, align 4, !tbaa !15
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds float, ptr %273, i64 %275
  %277 = load i32, ptr %12, align 4, !tbaa !15
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds float, ptr %276, i64 %278
  %280 = load float, ptr %279, align 4, !tbaa !24
  %281 = fcmp ogt float %272, %280
  br i1 %281, label %282, label %443

282:                                              ; preds = %271
  %283 = load float, ptr %21, align 4, !tbaa !24
  %284 = load ptr, ptr %20, align 8, !tbaa !5
  %285 = load i32, ptr %11, align 4, !tbaa !15
  %286 = sext i32 %285 to i64
  %287 = sub i64 0, %286
  %288 = getelementptr inbounds float, ptr %284, i64 %287
  %289 = load i32, ptr %12, align 4, !tbaa !15
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds float, ptr %288, i64 %290
  %292 = load float, ptr %291, align 4, !tbaa !24
  %293 = fcmp ogt float %283, %292
  br i1 %293, label %294, label %443

294:                                              ; preds = %282
  %295 = load float, ptr %21, align 4, !tbaa !24
  %296 = load ptr, ptr %20, align 8, !tbaa !5
  %297 = load i32, ptr %11, align 4, !tbaa !15
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds float, ptr %296, i64 %298
  %300 = getelementptr inbounds float, ptr %299, i64 1
  %301 = load i32, ptr %12, align 4, !tbaa !15
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds float, ptr %300, i64 %302
  %304 = load float, ptr %303, align 4, !tbaa !24
  %305 = fcmp ogt float %295, %304
  br i1 %305, label %306, label %443

306:                                              ; preds = %294
  %307 = load float, ptr %21, align 4, !tbaa !24
  %308 = load ptr, ptr %20, align 8, !tbaa !5
  %309 = load i32, ptr %11, align 4, !tbaa !15
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds float, ptr %308, i64 %310
  %312 = getelementptr inbounds float, ptr %311, i64 -1
  %313 = load i32, ptr %12, align 4, !tbaa !15
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds float, ptr %312, i64 %314
  %316 = load float, ptr %315, align 4, !tbaa !24
  %317 = fcmp ogt float %307, %316
  br i1 %317, label %318, label %443

318:                                              ; preds = %306
  %319 = load float, ptr %21, align 4, !tbaa !24
  %320 = load ptr, ptr %20, align 8, !tbaa !5
  %321 = load i32, ptr %11, align 4, !tbaa !15
  %322 = sext i32 %321 to i64
  %323 = sub i64 0, %322
  %324 = getelementptr inbounds float, ptr %320, i64 %323
  %325 = getelementptr inbounds float, ptr %324, i64 1
  %326 = load i32, ptr %12, align 4, !tbaa !15
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds float, ptr %325, i64 %327
  %329 = load float, ptr %328, align 4, !tbaa !24
  %330 = fcmp ogt float %319, %329
  br i1 %330, label %331, label %443

331:                                              ; preds = %318
  %332 = load float, ptr %21, align 4, !tbaa !24
  %333 = load ptr, ptr %20, align 8, !tbaa !5
  %334 = load i32, ptr %11, align 4, !tbaa !15
  %335 = sext i32 %334 to i64
  %336 = sub i64 0, %335
  %337 = getelementptr inbounds float, ptr %333, i64 %336
  %338 = getelementptr inbounds float, ptr %337, i64 -1
  %339 = load i32, ptr %12, align 4, !tbaa !15
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds float, ptr %338, i64 %340
  %342 = load float, ptr %341, align 4, !tbaa !24
  %343 = fcmp ogt float %332, %342
  br i1 %343, label %344, label %443

344:                                              ; preds = %331
  %345 = load float, ptr %21, align 4, !tbaa !24
  %346 = load ptr, ptr %20, align 8, !tbaa !5
  %347 = getelementptr inbounds float, ptr %346, i64 1
  %348 = load i32, ptr %12, align 4, !tbaa !15
  %349 = sext i32 %348 to i64
  %350 = sub i64 0, %349
  %351 = getelementptr inbounds float, ptr %347, i64 %350
  %352 = load float, ptr %351, align 4, !tbaa !24
  %353 = fcmp ogt float %345, %352
  br i1 %353, label %354, label %443

354:                                              ; preds = %344
  %355 = load float, ptr %21, align 4, !tbaa !24
  %356 = load ptr, ptr %20, align 8, !tbaa !5
  %357 = getelementptr inbounds float, ptr %356, i64 -1
  %358 = load i32, ptr %12, align 4, !tbaa !15
  %359 = sext i32 %358 to i64
  %360 = sub i64 0, %359
  %361 = getelementptr inbounds float, ptr %357, i64 %360
  %362 = load float, ptr %361, align 4, !tbaa !24
  %363 = fcmp ogt float %355, %362
  br i1 %363, label %364, label %443

364:                                              ; preds = %354
  %365 = load float, ptr %21, align 4, !tbaa !24
  %366 = load ptr, ptr %20, align 8, !tbaa !5
  %367 = load i32, ptr %11, align 4, !tbaa !15
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds float, ptr %366, i64 %368
  %370 = load i32, ptr %12, align 4, !tbaa !15
  %371 = sext i32 %370 to i64
  %372 = sub i64 0, %371
  %373 = getelementptr inbounds float, ptr %369, i64 %372
  %374 = load float, ptr %373, align 4, !tbaa !24
  %375 = fcmp ogt float %365, %374
  br i1 %375, label %376, label %443

376:                                              ; preds = %364
  %377 = load float, ptr %21, align 4, !tbaa !24
  %378 = load ptr, ptr %20, align 8, !tbaa !5
  %379 = load i32, ptr %11, align 4, !tbaa !15
  %380 = sext i32 %379 to i64
  %381 = sub i64 0, %380
  %382 = getelementptr inbounds float, ptr %378, i64 %381
  %383 = load i32, ptr %12, align 4, !tbaa !15
  %384 = sext i32 %383 to i64
  %385 = sub i64 0, %384
  %386 = getelementptr inbounds float, ptr %382, i64 %385
  %387 = load float, ptr %386, align 4, !tbaa !24
  %388 = fcmp ogt float %377, %387
  br i1 %388, label %389, label %443

389:                                              ; preds = %376
  %390 = load float, ptr %21, align 4, !tbaa !24
  %391 = load ptr, ptr %20, align 8, !tbaa !5
  %392 = load i32, ptr %11, align 4, !tbaa !15
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds float, ptr %391, i64 %393
  %395 = getelementptr inbounds float, ptr %394, i64 1
  %396 = load i32, ptr %12, align 4, !tbaa !15
  %397 = sext i32 %396 to i64
  %398 = sub i64 0, %397
  %399 = getelementptr inbounds float, ptr %395, i64 %398
  %400 = load float, ptr %399, align 4, !tbaa !24
  %401 = fcmp ogt float %390, %400
  br i1 %401, label %402, label %443

402:                                              ; preds = %389
  %403 = load float, ptr %21, align 4, !tbaa !24
  %404 = load ptr, ptr %20, align 8, !tbaa !5
  %405 = load i32, ptr %11, align 4, !tbaa !15
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds float, ptr %404, i64 %406
  %408 = getelementptr inbounds float, ptr %407, i64 -1
  %409 = load i32, ptr %12, align 4, !tbaa !15
  %410 = sext i32 %409 to i64
  %411 = sub i64 0, %410
  %412 = getelementptr inbounds float, ptr %408, i64 %411
  %413 = load float, ptr %412, align 4, !tbaa !24
  %414 = fcmp ogt float %403, %413
  br i1 %414, label %415, label %443

415:                                              ; preds = %402
  %416 = load float, ptr %21, align 4, !tbaa !24
  %417 = load ptr, ptr %20, align 8, !tbaa !5
  %418 = load i32, ptr %11, align 4, !tbaa !15
  %419 = sext i32 %418 to i64
  %420 = sub i64 0, %419
  %421 = getelementptr inbounds float, ptr %417, i64 %420
  %422 = getelementptr inbounds float, ptr %421, i64 1
  %423 = load i32, ptr %12, align 4, !tbaa !15
  %424 = sext i32 %423 to i64
  %425 = sub i64 0, %424
  %426 = getelementptr inbounds float, ptr %422, i64 %425
  %427 = load float, ptr %426, align 4, !tbaa !24
  %428 = fcmp ogt float %416, %427
  br i1 %428, label %429, label %443

429:                                              ; preds = %415
  %430 = load float, ptr %21, align 4, !tbaa !24
  %431 = load ptr, ptr %20, align 8, !tbaa !5
  %432 = load i32, ptr %11, align 4, !tbaa !15
  %433 = sext i32 %432 to i64
  %434 = sub i64 0, %433
  %435 = getelementptr inbounds float, ptr %431, i64 %434
  %436 = getelementptr inbounds float, ptr %435, i64 -1
  %437 = load i32, ptr %12, align 4, !tbaa !15
  %438 = sext i32 %437 to i64
  %439 = sub i64 0, %438
  %440 = getelementptr inbounds float, ptr %436, i64 %439
  %441 = load float, ptr %440, align 4, !tbaa !24
  %442 = fcmp ogt float %430, %441
  br i1 %442, label %723, label %443

443:                                              ; preds = %429, %415, %402, %389, %376, %364, %354, %344, %331, %318, %306, %294, %282, %271, %262, %253, %243, %233, %224, %215, %206, %198, %189, %181, %175, %169, %161
  %444 = load float, ptr %21, align 4, !tbaa !24
  %445 = fpext float %444 to double
  %446 = load double, ptr %9, align 8, !tbaa !20
  %447 = fmul double -8.000000e-01, %446
  %448 = fcmp ole double %445, %447
  br i1 %448, label %449, label %781

449:                                              ; preds = %443
  %450 = load float, ptr %21, align 4, !tbaa !24
  %451 = load ptr, ptr %20, align 8, !tbaa !5
  %452 = getelementptr inbounds float, ptr %451, i64 1
  %453 = load float, ptr %452, align 4, !tbaa !24
  %454 = fcmp olt float %450, %453
  br i1 %454, label %455, label %781

455:                                              ; preds = %449
  %456 = load float, ptr %21, align 4, !tbaa !24
  %457 = load ptr, ptr %20, align 8, !tbaa !5
  %458 = getelementptr inbounds float, ptr %457, i64 -1
  %459 = load float, ptr %458, align 4, !tbaa !24
  %460 = fcmp olt float %456, %459
  br i1 %460, label %461, label %781

461:                                              ; preds = %455
  %462 = load float, ptr %21, align 4, !tbaa !24
  %463 = load ptr, ptr %20, align 8, !tbaa !5
  %464 = load i32, ptr %12, align 4, !tbaa !15
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds float, ptr %463, i64 %465
  %467 = load float, ptr %466, align 4, !tbaa !24
  %468 = fcmp olt float %462, %467
  br i1 %468, label %469, label %781

469:                                              ; preds = %461
  %470 = load float, ptr %21, align 4, !tbaa !24
  %471 = load ptr, ptr %20, align 8, !tbaa !5
  %472 = load i32, ptr %12, align 4, !tbaa !15
  %473 = sext i32 %472 to i64
  %474 = sub i64 0, %473
  %475 = getelementptr inbounds float, ptr %471, i64 %474
  %476 = load float, ptr %475, align 4, !tbaa !24
  %477 = fcmp olt float %470, %476
  br i1 %477, label %478, label %781

478:                                              ; preds = %469
  %479 = load float, ptr %21, align 4, !tbaa !24
  %480 = load ptr, ptr %20, align 8, !tbaa !5
  %481 = load i32, ptr %11, align 4, !tbaa !15
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds float, ptr %480, i64 %482
  %484 = load float, ptr %483, align 4, !tbaa !24
  %485 = fcmp olt float %479, %484
  br i1 %485, label %486, label %781

486:                                              ; preds = %478
  %487 = load float, ptr %21, align 4, !tbaa !24
  %488 = load ptr, ptr %20, align 8, !tbaa !5
  %489 = load i32, ptr %11, align 4, !tbaa !15
  %490 = sext i32 %489 to i64
  %491 = sub i64 0, %490
  %492 = getelementptr inbounds float, ptr %488, i64 %491
  %493 = load float, ptr %492, align 4, !tbaa !24
  %494 = fcmp olt float %487, %493
  br i1 %494, label %495, label %781

495:                                              ; preds = %486
  %496 = load float, ptr %21, align 4, !tbaa !24
  %497 = load ptr, ptr %20, align 8, !tbaa !5
  %498 = load i32, ptr %11, align 4, !tbaa !15
  %499 = sext i32 %498 to i64
  %500 = getelementptr inbounds float, ptr %497, i64 %499
  %501 = getelementptr inbounds float, ptr %500, i64 1
  %502 = load float, ptr %501, align 4, !tbaa !24
  %503 = fcmp olt float %496, %502
  br i1 %503, label %504, label %781

504:                                              ; preds = %495
  %505 = load float, ptr %21, align 4, !tbaa !24
  %506 = load ptr, ptr %20, align 8, !tbaa !5
  %507 = load i32, ptr %11, align 4, !tbaa !15
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds float, ptr %506, i64 %508
  %510 = getelementptr inbounds float, ptr %509, i64 -1
  %511 = load float, ptr %510, align 4, !tbaa !24
  %512 = fcmp olt float %505, %511
  br i1 %512, label %513, label %781

513:                                              ; preds = %504
  %514 = load float, ptr %21, align 4, !tbaa !24
  %515 = load ptr, ptr %20, align 8, !tbaa !5
  %516 = load i32, ptr %11, align 4, !tbaa !15
  %517 = sext i32 %516 to i64
  %518 = sub i64 0, %517
  %519 = getelementptr inbounds float, ptr %515, i64 %518
  %520 = getelementptr inbounds float, ptr %519, i64 1
  %521 = load float, ptr %520, align 4, !tbaa !24
  %522 = fcmp olt float %514, %521
  br i1 %522, label %523, label %781

523:                                              ; preds = %513
  %524 = load float, ptr %21, align 4, !tbaa !24
  %525 = load ptr, ptr %20, align 8, !tbaa !5
  %526 = load i32, ptr %11, align 4, !tbaa !15
  %527 = sext i32 %526 to i64
  %528 = sub i64 0, %527
  %529 = getelementptr inbounds float, ptr %525, i64 %528
  %530 = getelementptr inbounds float, ptr %529, i64 -1
  %531 = load float, ptr %530, align 4, !tbaa !24
  %532 = fcmp olt float %524, %531
  br i1 %532, label %533, label %781

533:                                              ; preds = %523
  %534 = load float, ptr %21, align 4, !tbaa !24
  %535 = load ptr, ptr %20, align 8, !tbaa !5
  %536 = getelementptr inbounds float, ptr %535, i64 1
  %537 = load i32, ptr %12, align 4, !tbaa !15
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds float, ptr %536, i64 %538
  %540 = load float, ptr %539, align 4, !tbaa !24
  %541 = fcmp olt float %534, %540
  br i1 %541, label %542, label %781

542:                                              ; preds = %533
  %543 = load float, ptr %21, align 4, !tbaa !24
  %544 = load ptr, ptr %20, align 8, !tbaa !5
  %545 = getelementptr inbounds float, ptr %544, i64 -1
  %546 = load i32, ptr %12, align 4, !tbaa !15
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds float, ptr %545, i64 %547
  %549 = load float, ptr %548, align 4, !tbaa !24
  %550 = fcmp olt float %543, %549
  br i1 %550, label %551, label %781

551:                                              ; preds = %542
  %552 = load float, ptr %21, align 4, !tbaa !24
  %553 = load ptr, ptr %20, align 8, !tbaa !5
  %554 = load i32, ptr %11, align 4, !tbaa !15
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds float, ptr %553, i64 %555
  %557 = load i32, ptr %12, align 4, !tbaa !15
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds float, ptr %556, i64 %558
  %560 = load float, ptr %559, align 4, !tbaa !24
  %561 = fcmp olt float %552, %560
  br i1 %561, label %562, label %781

562:                                              ; preds = %551
  %563 = load float, ptr %21, align 4, !tbaa !24
  %564 = load ptr, ptr %20, align 8, !tbaa !5
  %565 = load i32, ptr %11, align 4, !tbaa !15
  %566 = sext i32 %565 to i64
  %567 = sub i64 0, %566
  %568 = getelementptr inbounds float, ptr %564, i64 %567
  %569 = load i32, ptr %12, align 4, !tbaa !15
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds float, ptr %568, i64 %570
  %572 = load float, ptr %571, align 4, !tbaa !24
  %573 = fcmp olt float %563, %572
  br i1 %573, label %574, label %781

574:                                              ; preds = %562
  %575 = load float, ptr %21, align 4, !tbaa !24
  %576 = load ptr, ptr %20, align 8, !tbaa !5
  %577 = load i32, ptr %11, align 4, !tbaa !15
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds float, ptr %576, i64 %578
  %580 = getelementptr inbounds float, ptr %579, i64 1
  %581 = load i32, ptr %12, align 4, !tbaa !15
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds float, ptr %580, i64 %582
  %584 = load float, ptr %583, align 4, !tbaa !24
  %585 = fcmp olt float %575, %584
  br i1 %585, label %586, label %781

586:                                              ; preds = %574
  %587 = load float, ptr %21, align 4, !tbaa !24
  %588 = load ptr, ptr %20, align 8, !tbaa !5
  %589 = load i32, ptr %11, align 4, !tbaa !15
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds float, ptr %588, i64 %590
  %592 = getelementptr inbounds float, ptr %591, i64 -1
  %593 = load i32, ptr %12, align 4, !tbaa !15
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds float, ptr %592, i64 %594
  %596 = load float, ptr %595, align 4, !tbaa !24
  %597 = fcmp olt float %587, %596
  br i1 %597, label %598, label %781

598:                                              ; preds = %586
  %599 = load float, ptr %21, align 4, !tbaa !24
  %600 = load ptr, ptr %20, align 8, !tbaa !5
  %601 = load i32, ptr %11, align 4, !tbaa !15
  %602 = sext i32 %601 to i64
  %603 = sub i64 0, %602
  %604 = getelementptr inbounds float, ptr %600, i64 %603
  %605 = getelementptr inbounds float, ptr %604, i64 1
  %606 = load i32, ptr %12, align 4, !tbaa !15
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds float, ptr %605, i64 %607
  %609 = load float, ptr %608, align 4, !tbaa !24
  %610 = fcmp olt float %599, %609
  br i1 %610, label %611, label %781

611:                                              ; preds = %598
  %612 = load float, ptr %21, align 4, !tbaa !24
  %613 = load ptr, ptr %20, align 8, !tbaa !5
  %614 = load i32, ptr %11, align 4, !tbaa !15
  %615 = sext i32 %614 to i64
  %616 = sub i64 0, %615
  %617 = getelementptr inbounds float, ptr %613, i64 %616
  %618 = getelementptr inbounds float, ptr %617, i64 -1
  %619 = load i32, ptr %12, align 4, !tbaa !15
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds float, ptr %618, i64 %620
  %622 = load float, ptr %621, align 4, !tbaa !24
  %623 = fcmp olt float %612, %622
  br i1 %623, label %624, label %781

624:                                              ; preds = %611
  %625 = load float, ptr %21, align 4, !tbaa !24
  %626 = load ptr, ptr %20, align 8, !tbaa !5
  %627 = getelementptr inbounds float, ptr %626, i64 1
  %628 = load i32, ptr %12, align 4, !tbaa !15
  %629 = sext i32 %628 to i64
  %630 = sub i64 0, %629
  %631 = getelementptr inbounds float, ptr %627, i64 %630
  %632 = load float, ptr %631, align 4, !tbaa !24
  %633 = fcmp olt float %625, %632
  br i1 %633, label %634, label %781

634:                                              ; preds = %624
  %635 = load float, ptr %21, align 4, !tbaa !24
  %636 = load ptr, ptr %20, align 8, !tbaa !5
  %637 = getelementptr inbounds float, ptr %636, i64 -1
  %638 = load i32, ptr %12, align 4, !tbaa !15
  %639 = sext i32 %638 to i64
  %640 = sub i64 0, %639
  %641 = getelementptr inbounds float, ptr %637, i64 %640
  %642 = load float, ptr %641, align 4, !tbaa !24
  %643 = fcmp olt float %635, %642
  br i1 %643, label %644, label %781

644:                                              ; preds = %634
  %645 = load float, ptr %21, align 4, !tbaa !24
  %646 = load ptr, ptr %20, align 8, !tbaa !5
  %647 = load i32, ptr %11, align 4, !tbaa !15
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds float, ptr %646, i64 %648
  %650 = load i32, ptr %12, align 4, !tbaa !15
  %651 = sext i32 %650 to i64
  %652 = sub i64 0, %651
  %653 = getelementptr inbounds float, ptr %649, i64 %652
  %654 = load float, ptr %653, align 4, !tbaa !24
  %655 = fcmp olt float %645, %654
  br i1 %655, label %656, label %781

656:                                              ; preds = %644
  %657 = load float, ptr %21, align 4, !tbaa !24
  %658 = load ptr, ptr %20, align 8, !tbaa !5
  %659 = load i32, ptr %11, align 4, !tbaa !15
  %660 = sext i32 %659 to i64
  %661 = sub i64 0, %660
  %662 = getelementptr inbounds float, ptr %658, i64 %661
  %663 = load i32, ptr %12, align 4, !tbaa !15
  %664 = sext i32 %663 to i64
  %665 = sub i64 0, %664
  %666 = getelementptr inbounds float, ptr %662, i64 %665
  %667 = load float, ptr %666, align 4, !tbaa !24
  %668 = fcmp olt float %657, %667
  br i1 %668, label %669, label %781

669:                                              ; preds = %656
  %670 = load float, ptr %21, align 4, !tbaa !24
  %671 = load ptr, ptr %20, align 8, !tbaa !5
  %672 = load i32, ptr %11, align 4, !tbaa !15
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds float, ptr %671, i64 %673
  %675 = getelementptr inbounds float, ptr %674, i64 1
  %676 = load i32, ptr %12, align 4, !tbaa !15
  %677 = sext i32 %676 to i64
  %678 = sub i64 0, %677
  %679 = getelementptr inbounds float, ptr %675, i64 %678
  %680 = load float, ptr %679, align 4, !tbaa !24
  %681 = fcmp olt float %670, %680
  br i1 %681, label %682, label %781

682:                                              ; preds = %669
  %683 = load float, ptr %21, align 4, !tbaa !24
  %684 = load ptr, ptr %20, align 8, !tbaa !5
  %685 = load i32, ptr %11, align 4, !tbaa !15
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds float, ptr %684, i64 %686
  %688 = getelementptr inbounds float, ptr %687, i64 -1
  %689 = load i32, ptr %12, align 4, !tbaa !15
  %690 = sext i32 %689 to i64
  %691 = sub i64 0, %690
  %692 = getelementptr inbounds float, ptr %688, i64 %691
  %693 = load float, ptr %692, align 4, !tbaa !24
  %694 = fcmp olt float %683, %693
  br i1 %694, label %695, label %781

695:                                              ; preds = %682
  %696 = load float, ptr %21, align 4, !tbaa !24
  %697 = load ptr, ptr %20, align 8, !tbaa !5
  %698 = load i32, ptr %11, align 4, !tbaa !15
  %699 = sext i32 %698 to i64
  %700 = sub i64 0, %699
  %701 = getelementptr inbounds float, ptr %697, i64 %700
  %702 = getelementptr inbounds float, ptr %701, i64 1
  %703 = load i32, ptr %12, align 4, !tbaa !15
  %704 = sext i32 %703 to i64
  %705 = sub i64 0, %704
  %706 = getelementptr inbounds float, ptr %702, i64 %705
  %707 = load float, ptr %706, align 4, !tbaa !24
  %708 = fcmp olt float %696, %707
  br i1 %708, label %709, label %781

709:                                              ; preds = %695
  %710 = load float, ptr %21, align 4, !tbaa !24
  %711 = load ptr, ptr %20, align 8, !tbaa !5
  %712 = load i32, ptr %11, align 4, !tbaa !15
  %713 = sext i32 %712 to i64
  %714 = sub i64 0, %713
  %715 = getelementptr inbounds float, ptr %711, i64 %714
  %716 = getelementptr inbounds float, ptr %715, i64 -1
  %717 = load i32, ptr %12, align 4, !tbaa !15
  %718 = sext i32 %717 to i64
  %719 = sub i64 0, %718
  %720 = getelementptr inbounds float, ptr %716, i64 %719
  %721 = load float, ptr %720, align 4, !tbaa !24
  %722 = fcmp olt float %710, %721
  br i1 %722, label %723, label %781

723:                                              ; preds = %709, %429
  %724 = load ptr, ptr %2, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct._VlSiftFilt, ptr %724, i32 0, i32 21
  %726 = load i32, ptr %725, align 8, !tbaa !23
  %727 = load ptr, ptr %2, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct._VlSiftFilt, ptr %727, i32 0, i32 22
  %729 = load i32, ptr %728, align 4, !tbaa !29
  %730 = icmp sge i32 %726, %729
  br i1 %730, label %731, label %762

731:                                              ; preds = %723
  %732 = load ptr, ptr %2, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct._VlSiftFilt, ptr %732, i32 0, i32 22
  %734 = load i32, ptr %733, align 4, !tbaa !29
  %735 = add nsw i32 %734, 500
  store i32 %735, ptr %733, align 4, !tbaa !29
  %736 = load ptr, ptr %2, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct._VlSiftFilt, ptr %736, i32 0, i32 20
  %738 = load ptr, ptr %737, align 8, !tbaa !30
  %739 = icmp ne ptr %738, null
  br i1 %739, label %740, label %752

740:                                              ; preds = %731
  %741 = load ptr, ptr %2, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct._VlSiftFilt, ptr %741, i32 0, i32 20
  %743 = load ptr, ptr %742, align 8, !tbaa !30
  %744 = load ptr, ptr %2, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct._VlSiftFilt, ptr %744, i32 0, i32 22
  %746 = load i32, ptr %745, align 4, !tbaa !29
  %747 = sext i32 %746 to i64
  %748 = mul i64 %747, 32
  %749 = call ptr @vl_realloc(ptr noundef %743, i64 noundef %748)
  %750 = load ptr, ptr %2, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct._VlSiftFilt, ptr %750, i32 0, i32 20
  store ptr %749, ptr %751, align 8, !tbaa !30
  br label %761

752:                                              ; preds = %731
  %753 = load ptr, ptr %2, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct._VlSiftFilt, ptr %753, i32 0, i32 22
  %755 = load i32, ptr %754, align 4, !tbaa !29
  %756 = sext i32 %755 to i64
  %757 = mul i64 %756, 32
  %758 = call ptr @vl_malloc(i64 noundef %757)
  %759 = load ptr, ptr %2, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct._VlSiftFilt, ptr %759, i32 0, i32 20
  store ptr %758, ptr %760, align 8, !tbaa !30
  br label %761

761:                                              ; preds = %752, %740
  br label %762

762:                                              ; preds = %761, %723
  %763 = load ptr, ptr %2, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct._VlSiftFilt, ptr %763, i32 0, i32 20
  %765 = load ptr, ptr %764, align 8, !tbaa !30
  %766 = load ptr, ptr %2, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct._VlSiftFilt, ptr %766, i32 0, i32 21
  %768 = load i32, ptr %767, align 8, !tbaa !23
  %769 = add nsw i32 %768, 1
  store i32 %769, ptr %767, align 8, !tbaa !23
  %770 = sext i32 %768 to i64
  %771 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %765, i64 %770
  store ptr %771, ptr %22, align 8, !tbaa !5
  %772 = load i32, ptr %14, align 4, !tbaa !15
  %773 = load ptr, ptr %22, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %773, i32 0, i32 1
  store i32 %772, ptr %774, align 4, !tbaa !31
  %775 = load i32, ptr %15, align 4, !tbaa !15
  %776 = load ptr, ptr %22, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %776, i32 0, i32 2
  store i32 %775, ptr %777, align 4, !tbaa !33
  %778 = load i32, ptr %16, align 4, !tbaa !15
  %779 = load ptr, ptr %22, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %779, i32 0, i32 3
  store i32 %778, ptr %780, align 4, !tbaa !34
  br label %781

781:                                              ; preds = %762, %709, %695, %682, %669, %656, %644, %634, %624, %611, %598, %586, %574, %562, %551, %542, %533, %523, %513, %504, %495, %486, %478, %469, %461, %455, %449, %443
  %782 = load ptr, ptr %20, align 8, !tbaa !5
  %783 = getelementptr inbounds float, ptr %782, i64 1
  store ptr %783, ptr %20, align 8, !tbaa !5
  br label %784

784:                                              ; preds = %781
  %785 = load i32, ptr %14, align 4, !tbaa !15
  %786 = add nsw i32 %785, 1
  store i32 %786, ptr %14, align 4, !tbaa !15
  br label %156, !llvm.loop !35

787:                                              ; preds = %156
  %788 = load ptr, ptr %20, align 8, !tbaa !5
  %789 = getelementptr inbounds float, ptr %788, i64 2
  store ptr %789, ptr %20, align 8, !tbaa !5
  br label %790

790:                                              ; preds = %787
  %791 = load i32, ptr %15, align 4, !tbaa !15
  %792 = add nsw i32 %791, 1
  store i32 %792, ptr %15, align 4, !tbaa !15
  br label %150, !llvm.loop !36

793:                                              ; preds = %150
  %794 = load i32, ptr %11, align 4, !tbaa !15
  %795 = mul nsw i32 2, %794
  %796 = load ptr, ptr %20, align 8, !tbaa !5
  %797 = sext i32 %795 to i64
  %798 = getelementptr inbounds float, ptr %796, i64 %797
  store ptr %798, ptr %20, align 8, !tbaa !5
  br label %799

799:                                              ; preds = %793
  %800 = load i32, ptr %16, align 4, !tbaa !15
  %801 = add nsw i32 %800, 1
  store i32 %801, ptr %16, align 4, !tbaa !15
  br label %144, !llvm.loop !37

802:                                              ; preds = %144
  %803 = load ptr, ptr %2, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct._VlSiftFilt, ptr %803, i32 0, i32 20
  %805 = load ptr, ptr %804, align 8, !tbaa !30
  store ptr %805, ptr %22, align 8, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !15
  br label %806

806:                                              ; preds = %1649, %802
  %807 = load i32, ptr %17, align 4, !tbaa !15
  %808 = load ptr, ptr %2, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct._VlSiftFilt, ptr %808, i32 0, i32 21
  %810 = load i32, ptr %809, align 8, !tbaa !23
  %811 = icmp slt i32 %807, %810
  br i1 %811, label %812, label %1652

812:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %813 = load ptr, ptr %2, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct._VlSiftFilt, ptr %813, i32 0, i32 20
  %815 = load ptr, ptr %814, align 8, !tbaa !30
  %816 = load i32, ptr %17, align 4, !tbaa !15
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %815, i64 %817
  %819 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %818, i32 0, i32 1
  %820 = load i32, ptr %819, align 4, !tbaa !31
  store i32 %820, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %821 = load ptr, ptr %2, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct._VlSiftFilt, ptr %821, i32 0, i32 20
  %823 = load ptr, ptr %822, align 8, !tbaa !30
  %824 = load i32, ptr %17, align 4, !tbaa !15
  %825 = sext i32 %824 to i64
  %826 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %823, i64 %825
  %827 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %826, i32 0, i32 2
  %828 = load i32, ptr %827, align 4, !tbaa !33
  store i32 %828, ptr %27, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %829 = load ptr, ptr %2, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct._VlSiftFilt, ptr %829, i32 0, i32 20
  %831 = load ptr, ptr %830, align 8, !tbaa !30
  %832 = load i32, ptr %17, align 4, !tbaa !15
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %831, i64 %833
  %835 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %834, i32 0, i32 3
  %836 = load i32, ptr %835, align 4, !tbaa !34
  store i32 %836, ptr %28, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  store double 0.000000e+00, ptr %29, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  store double 0.000000e+00, ptr %30, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  store double 0.000000e+00, ptr %31, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  store double 0.000000e+00, ptr %32, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  store double 0.000000e+00, ptr %33, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  store double 0.000000e+00, ptr %34, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  store double 0.000000e+00, ptr %35, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  store double 0.000000e+00, ptr %36, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  store double 0.000000e+00, ptr %37, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 72, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  store i32 0, ptr %40, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 0, ptr %41, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  store i32 0, ptr %42, align 4, !tbaa !15
  br label %837

837:                                              ; preds = %1475, %812
  %838 = load i32, ptr %42, align 4, !tbaa !15
  %839 = icmp slt i32 %838, 5
  br i1 %839, label %840, label %1478

840:                                              ; preds = %837
  %841 = load i32, ptr %40, align 4, !tbaa !15
  %842 = load i32, ptr %26, align 4, !tbaa !15
  %843 = add nsw i32 %842, %841
  store i32 %843, ptr %26, align 4, !tbaa !15
  %844 = load i32, ptr %41, align 4, !tbaa !15
  %845 = load i32, ptr %27, align 4, !tbaa !15
  %846 = add nsw i32 %845, %844
  store i32 %846, ptr %27, align 4, !tbaa !15
  %847 = load ptr, ptr %3, align 8, !tbaa !5
  %848 = load i32, ptr %26, align 4, !tbaa !15
  %849 = mul nsw i32 1, %848
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds float, ptr %847, i64 %850
  %852 = load i32, ptr %11, align 4, !tbaa !15
  %853 = load i32, ptr %27, align 4, !tbaa !15
  %854 = mul nsw i32 %852, %853
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds float, ptr %851, i64 %855
  %857 = load i32, ptr %12, align 4, !tbaa !15
  %858 = load i32, ptr %28, align 4, !tbaa !15
  %859 = load i32, ptr %4, align 4, !tbaa !15
  %860 = sub nsw i32 %858, %859
  %861 = mul nsw i32 %857, %860
  %862 = sext i32 %861 to i64
  %863 = getelementptr inbounds float, ptr %856, i64 %862
  store ptr %863, ptr %20, align 8, !tbaa !5
  %864 = load ptr, ptr %20, align 8, !tbaa !5
  %865 = getelementptr inbounds float, ptr %864, i64 1
  %866 = load i32, ptr %11, align 4, !tbaa !15
  %867 = mul nsw i32 0, %866
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds float, ptr %865, i64 %868
  %870 = load i32, ptr %12, align 4, !tbaa !15
  %871 = mul nsw i32 0, %870
  %872 = sext i32 %871 to i64
  %873 = getelementptr inbounds float, ptr %869, i64 %872
  %874 = load float, ptr %873, align 4, !tbaa !24
  %875 = load ptr, ptr %20, align 8, !tbaa !5
  %876 = getelementptr inbounds float, ptr %875, i64 -1
  %877 = load i32, ptr %11, align 4, !tbaa !15
  %878 = mul nsw i32 0, %877
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds float, ptr %876, i64 %879
  %881 = load i32, ptr %12, align 4, !tbaa !15
  %882 = mul nsw i32 0, %881
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds float, ptr %880, i64 %883
  %885 = load float, ptr %884, align 4, !tbaa !24
  %886 = fsub float %874, %885
  %887 = fpext float %886 to double
  %888 = fmul double 5.000000e-01, %887
  store double %888, ptr %29, align 8, !tbaa !20
  %889 = load ptr, ptr %20, align 8, !tbaa !5
  %890 = getelementptr inbounds float, ptr %889, i64 0
  %891 = load i32, ptr %11, align 4, !tbaa !15
  %892 = mul nsw i32 1, %891
  %893 = sext i32 %892 to i64
  %894 = getelementptr inbounds float, ptr %890, i64 %893
  %895 = load i32, ptr %12, align 4, !tbaa !15
  %896 = mul nsw i32 0, %895
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds float, ptr %894, i64 %897
  %899 = load float, ptr %898, align 4, !tbaa !24
  %900 = load ptr, ptr %20, align 8, !tbaa !5
  %901 = getelementptr inbounds float, ptr %900, i64 0
  %902 = load i32, ptr %11, align 4, !tbaa !15
  %903 = mul nsw i32 -1, %902
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds float, ptr %901, i64 %904
  %906 = load i32, ptr %12, align 4, !tbaa !15
  %907 = mul nsw i32 0, %906
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds float, ptr %905, i64 %908
  %910 = load float, ptr %909, align 4, !tbaa !24
  %911 = fsub float %899, %910
  %912 = fpext float %911 to double
  %913 = fmul double 5.000000e-01, %912
  store double %913, ptr %30, align 8, !tbaa !20
  %914 = load ptr, ptr %20, align 8, !tbaa !5
  %915 = getelementptr inbounds float, ptr %914, i64 0
  %916 = load i32, ptr %11, align 4, !tbaa !15
  %917 = mul nsw i32 0, %916
  %918 = sext i32 %917 to i64
  %919 = getelementptr inbounds float, ptr %915, i64 %918
  %920 = load i32, ptr %12, align 4, !tbaa !15
  %921 = mul nsw i32 1, %920
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds float, ptr %919, i64 %922
  %924 = load float, ptr %923, align 4, !tbaa !24
  %925 = load ptr, ptr %20, align 8, !tbaa !5
  %926 = getelementptr inbounds float, ptr %925, i64 0
  %927 = load i32, ptr %11, align 4, !tbaa !15
  %928 = mul nsw i32 0, %927
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds float, ptr %926, i64 %929
  %931 = load i32, ptr %12, align 4, !tbaa !15
  %932 = mul nsw i32 -1, %931
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds float, ptr %930, i64 %933
  %935 = load float, ptr %934, align 4, !tbaa !24
  %936 = fsub float %924, %935
  %937 = fpext float %936 to double
  %938 = fmul double 5.000000e-01, %937
  store double %938, ptr %31, align 8, !tbaa !20
  %939 = load ptr, ptr %20, align 8, !tbaa !5
  %940 = getelementptr inbounds float, ptr %939, i64 1
  %941 = load i32, ptr %11, align 4, !tbaa !15
  %942 = mul nsw i32 0, %941
  %943 = sext i32 %942 to i64
  %944 = getelementptr inbounds float, ptr %940, i64 %943
  %945 = load i32, ptr %12, align 4, !tbaa !15
  %946 = mul nsw i32 0, %945
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds float, ptr %944, i64 %947
  %949 = load float, ptr %948, align 4, !tbaa !24
  %950 = load ptr, ptr %20, align 8, !tbaa !5
  %951 = getelementptr inbounds float, ptr %950, i64 -1
  %952 = load i32, ptr %11, align 4, !tbaa !15
  %953 = mul nsw i32 0, %952
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds float, ptr %951, i64 %954
  %956 = load i32, ptr %12, align 4, !tbaa !15
  %957 = mul nsw i32 0, %956
  %958 = sext i32 %957 to i64
  %959 = getelementptr inbounds float, ptr %955, i64 %958
  %960 = load float, ptr %959, align 4, !tbaa !24
  %961 = fadd float %949, %960
  %962 = fpext float %961 to double
  %963 = load ptr, ptr %20, align 8, !tbaa !5
  %964 = getelementptr inbounds float, ptr %963, i64 0
  %965 = load i32, ptr %11, align 4, !tbaa !15
  %966 = mul nsw i32 0, %965
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds float, ptr %964, i64 %967
  %969 = load i32, ptr %12, align 4, !tbaa !15
  %970 = mul nsw i32 0, %969
  %971 = sext i32 %970 to i64
  %972 = getelementptr inbounds float, ptr %968, i64 %971
  %973 = load float, ptr %972, align 4, !tbaa !24
  %974 = fpext float %973 to double
  %975 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %974, double %962)
  store double %975, ptr %32, align 8, !tbaa !20
  %976 = load ptr, ptr %20, align 8, !tbaa !5
  %977 = getelementptr inbounds float, ptr %976, i64 0
  %978 = load i32, ptr %11, align 4, !tbaa !15
  %979 = mul nsw i32 1, %978
  %980 = sext i32 %979 to i64
  %981 = getelementptr inbounds float, ptr %977, i64 %980
  %982 = load i32, ptr %12, align 4, !tbaa !15
  %983 = mul nsw i32 0, %982
  %984 = sext i32 %983 to i64
  %985 = getelementptr inbounds float, ptr %981, i64 %984
  %986 = load float, ptr %985, align 4, !tbaa !24
  %987 = load ptr, ptr %20, align 8, !tbaa !5
  %988 = getelementptr inbounds float, ptr %987, i64 0
  %989 = load i32, ptr %11, align 4, !tbaa !15
  %990 = mul nsw i32 -1, %989
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds float, ptr %988, i64 %991
  %993 = load i32, ptr %12, align 4, !tbaa !15
  %994 = mul nsw i32 0, %993
  %995 = sext i32 %994 to i64
  %996 = getelementptr inbounds float, ptr %992, i64 %995
  %997 = load float, ptr %996, align 4, !tbaa !24
  %998 = fadd float %986, %997
  %999 = fpext float %998 to double
  %1000 = load ptr, ptr %20, align 8, !tbaa !5
  %1001 = getelementptr inbounds float, ptr %1000, i64 0
  %1002 = load i32, ptr %11, align 4, !tbaa !15
  %1003 = mul nsw i32 0, %1002
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds float, ptr %1001, i64 %1004
  %1006 = load i32, ptr %12, align 4, !tbaa !15
  %1007 = mul nsw i32 0, %1006
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds float, ptr %1005, i64 %1008
  %1010 = load float, ptr %1009, align 4, !tbaa !24
  %1011 = fpext float %1010 to double
  %1012 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1011, double %999)
  store double %1012, ptr %33, align 8, !tbaa !20
  %1013 = load ptr, ptr %20, align 8, !tbaa !5
  %1014 = getelementptr inbounds float, ptr %1013, i64 0
  %1015 = load i32, ptr %11, align 4, !tbaa !15
  %1016 = mul nsw i32 0, %1015
  %1017 = sext i32 %1016 to i64
  %1018 = getelementptr inbounds float, ptr %1014, i64 %1017
  %1019 = load i32, ptr %12, align 4, !tbaa !15
  %1020 = mul nsw i32 1, %1019
  %1021 = sext i32 %1020 to i64
  %1022 = getelementptr inbounds float, ptr %1018, i64 %1021
  %1023 = load float, ptr %1022, align 4, !tbaa !24
  %1024 = load ptr, ptr %20, align 8, !tbaa !5
  %1025 = getelementptr inbounds float, ptr %1024, i64 0
  %1026 = load i32, ptr %11, align 4, !tbaa !15
  %1027 = mul nsw i32 0, %1026
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds float, ptr %1025, i64 %1028
  %1030 = load i32, ptr %12, align 4, !tbaa !15
  %1031 = mul nsw i32 -1, %1030
  %1032 = sext i32 %1031 to i64
  %1033 = getelementptr inbounds float, ptr %1029, i64 %1032
  %1034 = load float, ptr %1033, align 4, !tbaa !24
  %1035 = fadd float %1023, %1034
  %1036 = fpext float %1035 to double
  %1037 = load ptr, ptr %20, align 8, !tbaa !5
  %1038 = getelementptr inbounds float, ptr %1037, i64 0
  %1039 = load i32, ptr %11, align 4, !tbaa !15
  %1040 = mul nsw i32 0, %1039
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds float, ptr %1038, i64 %1041
  %1043 = load i32, ptr %12, align 4, !tbaa !15
  %1044 = mul nsw i32 0, %1043
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds float, ptr %1042, i64 %1045
  %1047 = load float, ptr %1046, align 4, !tbaa !24
  %1048 = fpext float %1047 to double
  %1049 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1048, double %1036)
  store double %1049, ptr %34, align 8, !tbaa !20
  %1050 = load ptr, ptr %20, align 8, !tbaa !5
  %1051 = getelementptr inbounds float, ptr %1050, i64 1
  %1052 = load i32, ptr %11, align 4, !tbaa !15
  %1053 = mul nsw i32 1, %1052
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds float, ptr %1051, i64 %1054
  %1056 = load i32, ptr %12, align 4, !tbaa !15
  %1057 = mul nsw i32 0, %1056
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds float, ptr %1055, i64 %1058
  %1060 = load float, ptr %1059, align 4, !tbaa !24
  %1061 = load ptr, ptr %20, align 8, !tbaa !5
  %1062 = getelementptr inbounds float, ptr %1061, i64 -1
  %1063 = load i32, ptr %11, align 4, !tbaa !15
  %1064 = mul nsw i32 -1, %1063
  %1065 = sext i32 %1064 to i64
  %1066 = getelementptr inbounds float, ptr %1062, i64 %1065
  %1067 = load i32, ptr %12, align 4, !tbaa !15
  %1068 = mul nsw i32 0, %1067
  %1069 = sext i32 %1068 to i64
  %1070 = getelementptr inbounds float, ptr %1066, i64 %1069
  %1071 = load float, ptr %1070, align 4, !tbaa !24
  %1072 = fadd float %1060, %1071
  %1073 = load ptr, ptr %20, align 8, !tbaa !5
  %1074 = getelementptr inbounds float, ptr %1073, i64 -1
  %1075 = load i32, ptr %11, align 4, !tbaa !15
  %1076 = mul nsw i32 1, %1075
  %1077 = sext i32 %1076 to i64
  %1078 = getelementptr inbounds float, ptr %1074, i64 %1077
  %1079 = load i32, ptr %12, align 4, !tbaa !15
  %1080 = mul nsw i32 0, %1079
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds float, ptr %1078, i64 %1081
  %1083 = load float, ptr %1082, align 4, !tbaa !24
  %1084 = fsub float %1072, %1083
  %1085 = load ptr, ptr %20, align 8, !tbaa !5
  %1086 = getelementptr inbounds float, ptr %1085, i64 1
  %1087 = load i32, ptr %11, align 4, !tbaa !15
  %1088 = mul nsw i32 -1, %1087
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds float, ptr %1086, i64 %1089
  %1091 = load i32, ptr %12, align 4, !tbaa !15
  %1092 = mul nsw i32 0, %1091
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds float, ptr %1090, i64 %1093
  %1095 = load float, ptr %1094, align 4, !tbaa !24
  %1096 = fsub float %1084, %1095
  %1097 = fpext float %1096 to double
  %1098 = fmul double 2.500000e-01, %1097
  store double %1098, ptr %35, align 8, !tbaa !20
  %1099 = load ptr, ptr %20, align 8, !tbaa !5
  %1100 = getelementptr inbounds float, ptr %1099, i64 1
  %1101 = load i32, ptr %11, align 4, !tbaa !15
  %1102 = mul nsw i32 0, %1101
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds float, ptr %1100, i64 %1103
  %1105 = load i32, ptr %12, align 4, !tbaa !15
  %1106 = mul nsw i32 1, %1105
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds float, ptr %1104, i64 %1107
  %1109 = load float, ptr %1108, align 4, !tbaa !24
  %1110 = load ptr, ptr %20, align 8, !tbaa !5
  %1111 = getelementptr inbounds float, ptr %1110, i64 -1
  %1112 = load i32, ptr %11, align 4, !tbaa !15
  %1113 = mul nsw i32 0, %1112
  %1114 = sext i32 %1113 to i64
  %1115 = getelementptr inbounds float, ptr %1111, i64 %1114
  %1116 = load i32, ptr %12, align 4, !tbaa !15
  %1117 = mul nsw i32 -1, %1116
  %1118 = sext i32 %1117 to i64
  %1119 = getelementptr inbounds float, ptr %1115, i64 %1118
  %1120 = load float, ptr %1119, align 4, !tbaa !24
  %1121 = fadd float %1109, %1120
  %1122 = load ptr, ptr %20, align 8, !tbaa !5
  %1123 = getelementptr inbounds float, ptr %1122, i64 -1
  %1124 = load i32, ptr %11, align 4, !tbaa !15
  %1125 = mul nsw i32 0, %1124
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds float, ptr %1123, i64 %1126
  %1128 = load i32, ptr %12, align 4, !tbaa !15
  %1129 = mul nsw i32 1, %1128
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds float, ptr %1127, i64 %1130
  %1132 = load float, ptr %1131, align 4, !tbaa !24
  %1133 = fsub float %1121, %1132
  %1134 = load ptr, ptr %20, align 8, !tbaa !5
  %1135 = getelementptr inbounds float, ptr %1134, i64 1
  %1136 = load i32, ptr %11, align 4, !tbaa !15
  %1137 = mul nsw i32 0, %1136
  %1138 = sext i32 %1137 to i64
  %1139 = getelementptr inbounds float, ptr %1135, i64 %1138
  %1140 = load i32, ptr %12, align 4, !tbaa !15
  %1141 = mul nsw i32 -1, %1140
  %1142 = sext i32 %1141 to i64
  %1143 = getelementptr inbounds float, ptr %1139, i64 %1142
  %1144 = load float, ptr %1143, align 4, !tbaa !24
  %1145 = fsub float %1133, %1144
  %1146 = fpext float %1145 to double
  %1147 = fmul double 2.500000e-01, %1146
  store double %1147, ptr %36, align 8, !tbaa !20
  %1148 = load ptr, ptr %20, align 8, !tbaa !5
  %1149 = getelementptr inbounds float, ptr %1148, i64 0
  %1150 = load i32, ptr %11, align 4, !tbaa !15
  %1151 = mul nsw i32 1, %1150
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr inbounds float, ptr %1149, i64 %1152
  %1154 = load i32, ptr %12, align 4, !tbaa !15
  %1155 = mul nsw i32 1, %1154
  %1156 = sext i32 %1155 to i64
  %1157 = getelementptr inbounds float, ptr %1153, i64 %1156
  %1158 = load float, ptr %1157, align 4, !tbaa !24
  %1159 = load ptr, ptr %20, align 8, !tbaa !5
  %1160 = getelementptr inbounds float, ptr %1159, i64 0
  %1161 = load i32, ptr %11, align 4, !tbaa !15
  %1162 = mul nsw i32 -1, %1161
  %1163 = sext i32 %1162 to i64
  %1164 = getelementptr inbounds float, ptr %1160, i64 %1163
  %1165 = load i32, ptr %12, align 4, !tbaa !15
  %1166 = mul nsw i32 -1, %1165
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds float, ptr %1164, i64 %1167
  %1169 = load float, ptr %1168, align 4, !tbaa !24
  %1170 = fadd float %1158, %1169
  %1171 = load ptr, ptr %20, align 8, !tbaa !5
  %1172 = getelementptr inbounds float, ptr %1171, i64 0
  %1173 = load i32, ptr %11, align 4, !tbaa !15
  %1174 = mul nsw i32 -1, %1173
  %1175 = sext i32 %1174 to i64
  %1176 = getelementptr inbounds float, ptr %1172, i64 %1175
  %1177 = load i32, ptr %12, align 4, !tbaa !15
  %1178 = mul nsw i32 1, %1177
  %1179 = sext i32 %1178 to i64
  %1180 = getelementptr inbounds float, ptr %1176, i64 %1179
  %1181 = load float, ptr %1180, align 4, !tbaa !24
  %1182 = fsub float %1170, %1181
  %1183 = load ptr, ptr %20, align 8, !tbaa !5
  %1184 = getelementptr inbounds float, ptr %1183, i64 0
  %1185 = load i32, ptr %11, align 4, !tbaa !15
  %1186 = mul nsw i32 1, %1185
  %1187 = sext i32 %1186 to i64
  %1188 = getelementptr inbounds float, ptr %1184, i64 %1187
  %1189 = load i32, ptr %12, align 4, !tbaa !15
  %1190 = mul nsw i32 -1, %1189
  %1191 = sext i32 %1190 to i64
  %1192 = getelementptr inbounds float, ptr %1188, i64 %1191
  %1193 = load float, ptr %1192, align 4, !tbaa !24
  %1194 = fsub float %1182, %1193
  %1195 = fpext float %1194 to double
  %1196 = fmul double 2.500000e-01, %1195
  store double %1196, ptr %37, align 8, !tbaa !20
  %1197 = load double, ptr %32, align 8, !tbaa !20
  %1198 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 0
  store double %1197, ptr %1198, align 16, !tbaa !20
  %1199 = load double, ptr %33, align 8, !tbaa !20
  %1200 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 4
  store double %1199, ptr %1200, align 16, !tbaa !20
  %1201 = load double, ptr %34, align 8, !tbaa !20
  %1202 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 8
  store double %1201, ptr %1202, align 16, !tbaa !20
  %1203 = load double, ptr %35, align 8, !tbaa !20
  %1204 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 1
  store double %1203, ptr %1204, align 8, !tbaa !20
  %1205 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 3
  store double %1203, ptr %1205, align 8, !tbaa !20
  %1206 = load double, ptr %36, align 8, !tbaa !20
  %1207 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 2
  store double %1206, ptr %1207, align 16, !tbaa !20
  %1208 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 6
  store double %1206, ptr %1208, align 16, !tbaa !20
  %1209 = load double, ptr %37, align 8, !tbaa !20
  %1210 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 5
  store double %1209, ptr %1210, align 8, !tbaa !20
  %1211 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 7
  store double %1209, ptr %1211, align 8, !tbaa !20
  %1212 = load double, ptr %29, align 8, !tbaa !20
  %1213 = fneg double %1212
  %1214 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  store double %1213, ptr %1214, align 16, !tbaa !20
  %1215 = load double, ptr %30, align 8, !tbaa !20
  %1216 = fneg double %1215
  %1217 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  store double %1216, ptr %1217, align 8, !tbaa !20
  %1218 = load double, ptr %31, align 8, !tbaa !20
  %1219 = fneg double %1218
  %1220 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 2
  store double %1219, ptr %1220, align 16, !tbaa !20
  store i32 0, ptr %44, align 4, !tbaa !15
  br label %1221

1221:                                             ; preds = %1382, %840
  %1222 = load i32, ptr %44, align 4, !tbaa !15
  %1223 = icmp slt i32 %1222, 3
  br i1 %1223, label %1224, label %1385

1224:                                             ; preds = %1221
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  store double 0.000000e+00, ptr %45, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  store double 0.000000e+00, ptr %46, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  store i32 -1, ptr %47, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %1225 = load i32, ptr %44, align 4, !tbaa !15
  store i32 %1225, ptr %43, align 4, !tbaa !15
  br label %1226

1226:                                             ; preds = %1247, %1224
  %1227 = load i32, ptr %43, align 4, !tbaa !15
  %1228 = icmp slt i32 %1227, 3
  br i1 %1228, label %1229, label %1250

1229:                                             ; preds = %1226
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  %1230 = load i32, ptr %43, align 4, !tbaa !15
  %1231 = load i32, ptr %44, align 4, !tbaa !15
  %1232 = mul nsw i32 %1231, 3
  %1233 = add nsw i32 %1230, %1232
  %1234 = sext i32 %1233 to i64
  %1235 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1234
  %1236 = load double, ptr %1235, align 8, !tbaa !20
  store double %1236, ptr %49, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %1237 = load double, ptr %49, align 8, !tbaa !20
  %1238 = call double @vl_abs_d(double noundef %1237)
  store double %1238, ptr %50, align 8, !tbaa !20
  %1239 = load double, ptr %50, align 8, !tbaa !20
  %1240 = load double, ptr %46, align 8, !tbaa !20
  %1241 = fcmp ogt double %1239, %1240
  br i1 %1241, label %1242, label %1246

1242:                                             ; preds = %1229
  %1243 = load double, ptr %49, align 8, !tbaa !20
  store double %1243, ptr %45, align 8, !tbaa !20
  %1244 = load double, ptr %50, align 8, !tbaa !20
  store double %1244, ptr %46, align 8, !tbaa !20
  %1245 = load i32, ptr %43, align 4, !tbaa !15
  store i32 %1245, ptr %47, align 4, !tbaa !15
  br label %1246

1246:                                             ; preds = %1242, %1229
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  br label %1247

1247:                                             ; preds = %1246
  %1248 = load i32, ptr %43, align 4, !tbaa !15
  %1249 = add nsw i32 %1248, 1
  store i32 %1249, ptr %43, align 4, !tbaa !15
  br label %1226, !llvm.loop !38

1250:                                             ; preds = %1226
  %1251 = load double, ptr %46, align 8, !tbaa !20
  %1252 = fcmp olt double %1251, 0x3DDB7CDFE0000000
  br i1 %1252, label %1253, label %1257

1253:                                             ; preds = %1250
  %1254 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  store double 0.000000e+00, ptr %1254, align 16, !tbaa !20
  %1255 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  store double 0.000000e+00, ptr %1255, align 8, !tbaa !20
  %1256 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 2
  store double 0.000000e+00, ptr %1256, align 16, !tbaa !20
  store i32 22, ptr %51, align 4
  br label %1379

1257:                                             ; preds = %1250
  %1258 = load i32, ptr %47, align 4, !tbaa !15
  store i32 %1258, ptr %43, align 4, !tbaa !15
  %1259 = load i32, ptr %44, align 4, !tbaa !15
  store i32 %1259, ptr %19, align 4, !tbaa !15
  br label %1260

1260:                                             ; preds = %1300, %1257
  %1261 = load i32, ptr %19, align 4, !tbaa !15
  %1262 = icmp slt i32 %1261, 3
  br i1 %1262, label %1263, label %1303

1263:                                             ; preds = %1260
  %1264 = load i32, ptr %43, align 4, !tbaa !15
  %1265 = load i32, ptr %19, align 4, !tbaa !15
  %1266 = mul nsw i32 %1265, 3
  %1267 = add nsw i32 %1264, %1266
  %1268 = sext i32 %1267 to i64
  %1269 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1268
  %1270 = load double, ptr %1269, align 8, !tbaa !20
  store double %1270, ptr %48, align 8, !tbaa !20
  %1271 = load i32, ptr %44, align 4, !tbaa !15
  %1272 = load i32, ptr %19, align 4, !tbaa !15
  %1273 = mul nsw i32 %1272, 3
  %1274 = add nsw i32 %1271, %1273
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1275
  %1277 = load double, ptr %1276, align 8, !tbaa !20
  %1278 = load i32, ptr %43, align 4, !tbaa !15
  %1279 = load i32, ptr %19, align 4, !tbaa !15
  %1280 = mul nsw i32 %1279, 3
  %1281 = add nsw i32 %1278, %1280
  %1282 = sext i32 %1281 to i64
  %1283 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1282
  store double %1277, ptr %1283, align 8, !tbaa !20
  %1284 = load double, ptr %48, align 8, !tbaa !20
  %1285 = load i32, ptr %44, align 4, !tbaa !15
  %1286 = load i32, ptr %19, align 4, !tbaa !15
  %1287 = mul nsw i32 %1286, 3
  %1288 = add nsw i32 %1285, %1287
  %1289 = sext i32 %1288 to i64
  %1290 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1289
  store double %1284, ptr %1290, align 8, !tbaa !20
  %1291 = load double, ptr %45, align 8, !tbaa !20
  %1292 = load i32, ptr %44, align 4, !tbaa !15
  %1293 = load i32, ptr %19, align 4, !tbaa !15
  %1294 = mul nsw i32 %1293, 3
  %1295 = add nsw i32 %1292, %1294
  %1296 = sext i32 %1295 to i64
  %1297 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1296
  %1298 = load double, ptr %1297, align 8, !tbaa !20
  %1299 = fdiv double %1298, %1291
  store double %1299, ptr %1297, align 8, !tbaa !20
  br label %1300

1300:                                             ; preds = %1263
  %1301 = load i32, ptr %19, align 4, !tbaa !15
  %1302 = add nsw i32 %1301, 1
  store i32 %1302, ptr %19, align 4, !tbaa !15
  br label %1260, !llvm.loop !39

1303:                                             ; preds = %1260
  %1304 = load i32, ptr %44, align 4, !tbaa !15
  %1305 = sext i32 %1304 to i64
  %1306 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1305
  %1307 = load double, ptr %1306, align 8, !tbaa !20
  store double %1307, ptr %48, align 8, !tbaa !20
  %1308 = load i32, ptr %43, align 4, !tbaa !15
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1309
  %1311 = load double, ptr %1310, align 8, !tbaa !20
  %1312 = load i32, ptr %44, align 4, !tbaa !15
  %1313 = sext i32 %1312 to i64
  %1314 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1313
  store double %1311, ptr %1314, align 8, !tbaa !20
  %1315 = load double, ptr %48, align 8, !tbaa !20
  %1316 = load i32, ptr %43, align 4, !tbaa !15
  %1317 = sext i32 %1316 to i64
  %1318 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1317
  store double %1315, ptr %1318, align 8, !tbaa !20
  %1319 = load double, ptr %45, align 8, !tbaa !20
  %1320 = load i32, ptr %44, align 4, !tbaa !15
  %1321 = sext i32 %1320 to i64
  %1322 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1321
  %1323 = load double, ptr %1322, align 8, !tbaa !20
  %1324 = fdiv double %1323, %1319
  store double %1324, ptr %1322, align 8, !tbaa !20
  %1325 = load i32, ptr %44, align 4, !tbaa !15
  %1326 = add nsw i32 %1325, 1
  store i32 %1326, ptr %18, align 4, !tbaa !15
  br label %1327

1327:                                             ; preds = %1375, %1303
  %1328 = load i32, ptr %18, align 4, !tbaa !15
  %1329 = icmp slt i32 %1328, 3
  br i1 %1329, label %1330, label %1378

1330:                                             ; preds = %1327
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  %1331 = load i32, ptr %18, align 4, !tbaa !15
  %1332 = load i32, ptr %44, align 4, !tbaa !15
  %1333 = mul nsw i32 %1332, 3
  %1334 = add nsw i32 %1331, %1333
  %1335 = sext i32 %1334 to i64
  %1336 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1335
  %1337 = load double, ptr %1336, align 8, !tbaa !20
  store double %1337, ptr %52, align 8, !tbaa !20
  %1338 = load i32, ptr %44, align 4, !tbaa !15
  store i32 %1338, ptr %19, align 4, !tbaa !15
  br label %1339

1339:                                             ; preds = %1360, %1330
  %1340 = load i32, ptr %19, align 4, !tbaa !15
  %1341 = icmp slt i32 %1340, 3
  br i1 %1341, label %1342, label %1363

1342:                                             ; preds = %1339
  %1343 = load double, ptr %52, align 8, !tbaa !20
  %1344 = load i32, ptr %44, align 4, !tbaa !15
  %1345 = load i32, ptr %19, align 4, !tbaa !15
  %1346 = mul nsw i32 %1345, 3
  %1347 = add nsw i32 %1344, %1346
  %1348 = sext i32 %1347 to i64
  %1349 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1348
  %1350 = load double, ptr %1349, align 8, !tbaa !20
  %1351 = load i32, ptr %18, align 4, !tbaa !15
  %1352 = load i32, ptr %19, align 4, !tbaa !15
  %1353 = mul nsw i32 %1352, 3
  %1354 = add nsw i32 %1351, %1353
  %1355 = sext i32 %1354 to i64
  %1356 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1355
  %1357 = load double, ptr %1356, align 8, !tbaa !20
  %1358 = fneg double %1343
  %1359 = call double @llvm.fmuladd.f64(double %1358, double %1350, double %1357)
  store double %1359, ptr %1356, align 8, !tbaa !20
  br label %1360

1360:                                             ; preds = %1342
  %1361 = load i32, ptr %19, align 4, !tbaa !15
  %1362 = add nsw i32 %1361, 1
  store i32 %1362, ptr %19, align 4, !tbaa !15
  br label %1339, !llvm.loop !40

1363:                                             ; preds = %1339
  %1364 = load double, ptr %52, align 8, !tbaa !20
  %1365 = load i32, ptr %44, align 4, !tbaa !15
  %1366 = sext i32 %1365 to i64
  %1367 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1366
  %1368 = load double, ptr %1367, align 8, !tbaa !20
  %1369 = load i32, ptr %18, align 4, !tbaa !15
  %1370 = sext i32 %1369 to i64
  %1371 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1370
  %1372 = load double, ptr %1371, align 8, !tbaa !20
  %1373 = fneg double %1364
  %1374 = call double @llvm.fmuladd.f64(double %1373, double %1368, double %1372)
  store double %1374, ptr %1371, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  br label %1375

1375:                                             ; preds = %1363
  %1376 = load i32, ptr %18, align 4, !tbaa !15
  %1377 = add nsw i32 %1376, 1
  store i32 %1377, ptr %18, align 4, !tbaa !15
  br label %1327, !llvm.loop !41

1378:                                             ; preds = %1327
  store i32 0, ptr %51, align 4
  br label %1379

1379:                                             ; preds = %1378, %1253
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  %1380 = load i32, ptr %51, align 4
  switch i32 %1380, label %1664 [
    i32 0, label %1381
    i32 22, label %1385
  ]

1381:                                             ; preds = %1379
  br label %1382

1382:                                             ; preds = %1381
  %1383 = load i32, ptr %44, align 4, !tbaa !15
  %1384 = add nsw i32 %1383, 1
  store i32 %1384, ptr %44, align 4, !tbaa !15
  br label %1221, !llvm.loop !42

1385:                                             ; preds = %1379, %1221
  store i32 2, ptr %43, align 4, !tbaa !15
  br label %1386

1386:                                             ; preds = %1418, %1385
  %1387 = load i32, ptr %43, align 4, !tbaa !15
  %1388 = icmp sgt i32 %1387, 0
  br i1 %1388, label %1389, label %1421

1389:                                             ; preds = %1386
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %1390 = load i32, ptr %43, align 4, !tbaa !15
  %1391 = sext i32 %1390 to i64
  %1392 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1391
  %1393 = load double, ptr %1392, align 8, !tbaa !20
  store double %1393, ptr %53, align 8, !tbaa !20
  %1394 = load i32, ptr %43, align 4, !tbaa !15
  %1395 = sub nsw i32 %1394, 1
  store i32 %1395, ptr %18, align 4, !tbaa !15
  br label %1396

1396:                                             ; preds = %1414, %1389
  %1397 = load i32, ptr %18, align 4, !tbaa !15
  %1398 = icmp sge i32 %1397, 0
  br i1 %1398, label %1399, label %1417

1399:                                             ; preds = %1396
  %1400 = load double, ptr %53, align 8, !tbaa !20
  %1401 = load i32, ptr %18, align 4, !tbaa !15
  %1402 = load i32, ptr %43, align 4, !tbaa !15
  %1403 = mul nsw i32 %1402, 3
  %1404 = add nsw i32 %1401, %1403
  %1405 = sext i32 %1404 to i64
  %1406 = getelementptr inbounds [9 x double], ptr %38, i64 0, i64 %1405
  %1407 = load double, ptr %1406, align 8, !tbaa !20
  %1408 = load i32, ptr %18, align 4, !tbaa !15
  %1409 = sext i32 %1408 to i64
  %1410 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 %1409
  %1411 = load double, ptr %1410, align 8, !tbaa !20
  %1412 = fneg double %1400
  %1413 = call double @llvm.fmuladd.f64(double %1412, double %1407, double %1411)
  store double %1413, ptr %1410, align 8, !tbaa !20
  br label %1414

1414:                                             ; preds = %1399
  %1415 = load i32, ptr %18, align 4, !tbaa !15
  %1416 = add nsw i32 %1415, -1
  store i32 %1416, ptr %18, align 4, !tbaa !15
  br label %1396, !llvm.loop !43

1417:                                             ; preds = %1396
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  br label %1418

1418:                                             ; preds = %1417
  %1419 = load i32, ptr %43, align 4, !tbaa !15
  %1420 = add nsw i32 %1419, -1
  store i32 %1420, ptr %43, align 4, !tbaa !15
  br label %1386, !llvm.loop !44

1421:                                             ; preds = %1386
  %1422 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  %1423 = load double, ptr %1422, align 16, !tbaa !20
  %1424 = fcmp ogt double %1423, 6.000000e-01
  br i1 %1424, label %1425, label %1430

1425:                                             ; preds = %1421
  %1426 = load i32, ptr %26, align 4, !tbaa !15
  %1427 = load i32, ptr %6, align 4, !tbaa !15
  %1428 = sub nsw i32 %1427, 2
  %1429 = icmp slt i32 %1426, %1428
  br label %1430

1430:                                             ; preds = %1425, %1421
  %1431 = phi i1 [ false, %1421 ], [ %1429, %1425 ]
  %1432 = zext i1 %1431 to i64
  %1433 = select i1 %1431, i32 1, i32 0
  %1434 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  %1435 = load double, ptr %1434, align 16, !tbaa !20
  %1436 = fcmp olt double %1435, -6.000000e-01
  br i1 %1436, label %1437, label %1440

1437:                                             ; preds = %1430
  %1438 = load i32, ptr %26, align 4, !tbaa !15
  %1439 = icmp sgt i32 %1438, 1
  br label %1440

1440:                                             ; preds = %1437, %1430
  %1441 = phi i1 [ false, %1430 ], [ %1439, %1437 ]
  %1442 = zext i1 %1441 to i64
  %1443 = select i1 %1441, i32 -1, i32 0
  %1444 = add nsw i32 %1433, %1443
  store i32 %1444, ptr %40, align 4, !tbaa !15
  %1445 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  %1446 = load double, ptr %1445, align 8, !tbaa !20
  %1447 = fcmp ogt double %1446, 6.000000e-01
  br i1 %1447, label %1448, label %1453

1448:                                             ; preds = %1440
  %1449 = load i32, ptr %27, align 4, !tbaa !15
  %1450 = load i32, ptr %7, align 4, !tbaa !15
  %1451 = sub nsw i32 %1450, 2
  %1452 = icmp slt i32 %1449, %1451
  br label %1453

1453:                                             ; preds = %1448, %1440
  %1454 = phi i1 [ false, %1440 ], [ %1452, %1448 ]
  %1455 = zext i1 %1454 to i64
  %1456 = select i1 %1454, i32 1, i32 0
  %1457 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  %1458 = load double, ptr %1457, align 8, !tbaa !20
  %1459 = fcmp olt double %1458, -6.000000e-01
  br i1 %1459, label %1460, label %1463

1460:                                             ; preds = %1453
  %1461 = load i32, ptr %27, align 4, !tbaa !15
  %1462 = icmp sgt i32 %1461, 1
  br label %1463

1463:                                             ; preds = %1460, %1453
  %1464 = phi i1 [ false, %1453 ], [ %1462, %1460 ]
  %1465 = zext i1 %1464 to i64
  %1466 = select i1 %1464, i32 -1, i32 0
  %1467 = add nsw i32 %1456, %1466
  store i32 %1467, ptr %41, align 4, !tbaa !15
  %1468 = load i32, ptr %40, align 4, !tbaa !15
  %1469 = icmp eq i32 %1468, 0
  br i1 %1469, label %1470, label %1474

1470:                                             ; preds = %1463
  %1471 = load i32, ptr %41, align 4, !tbaa !15
  %1472 = icmp eq i32 %1471, 0
  br i1 %1472, label %1473, label %1474

1473:                                             ; preds = %1470
  br label %1478

1474:                                             ; preds = %1470, %1463
  br label %1475

1475:                                             ; preds = %1474
  %1476 = load i32, ptr %42, align 4, !tbaa !15
  %1477 = add nsw i32 %1476, 1
  store i32 %1477, ptr %42, align 4, !tbaa !15
  br label %837, !llvm.loop !45

1478:                                             ; preds = %1473, %837
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %1479 = load ptr, ptr %20, align 8, !tbaa !5
  %1480 = getelementptr inbounds float, ptr %1479, i64 0
  %1481 = load i32, ptr %11, align 4, !tbaa !15
  %1482 = mul nsw i32 0, %1481
  %1483 = sext i32 %1482 to i64
  %1484 = getelementptr inbounds float, ptr %1480, i64 %1483
  %1485 = load i32, ptr %12, align 4, !tbaa !15
  %1486 = mul nsw i32 0, %1485
  %1487 = sext i32 %1486 to i64
  %1488 = getelementptr inbounds float, ptr %1484, i64 %1487
  %1489 = load float, ptr %1488, align 4, !tbaa !24
  %1490 = fpext float %1489 to double
  %1491 = load double, ptr %29, align 8, !tbaa !20
  %1492 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  %1493 = load double, ptr %1492, align 16, !tbaa !20
  %1494 = load double, ptr %30, align 8, !tbaa !20
  %1495 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  %1496 = load double, ptr %1495, align 8, !tbaa !20
  %1497 = fmul double %1494, %1496
  %1498 = call double @llvm.fmuladd.f64(double %1491, double %1493, double %1497)
  %1499 = load double, ptr %31, align 8, !tbaa !20
  %1500 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 2
  %1501 = load double, ptr %1500, align 16, !tbaa !20
  %1502 = call double @llvm.fmuladd.f64(double %1499, double %1501, double %1498)
  %1503 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %1502, double %1490)
  store double %1503, ptr %54, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  %1504 = load double, ptr %32, align 8, !tbaa !20
  %1505 = load double, ptr %33, align 8, !tbaa !20
  %1506 = fadd double %1504, %1505
  %1507 = load double, ptr %32, align 8, !tbaa !20
  %1508 = load double, ptr %33, align 8, !tbaa !20
  %1509 = fadd double %1507, %1508
  %1510 = fmul double %1506, %1509
  %1511 = load double, ptr %32, align 8, !tbaa !20
  %1512 = load double, ptr %33, align 8, !tbaa !20
  %1513 = load double, ptr %35, align 8, !tbaa !20
  %1514 = load double, ptr %35, align 8, !tbaa !20
  %1515 = fmul double %1513, %1514
  %1516 = fneg double %1515
  %1517 = call double @llvm.fmuladd.f64(double %1511, double %1512, double %1516)
  %1518 = fdiv double %1510, %1517
  store double %1518, ptr %55, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %1519 = load i32, ptr %26, align 4, !tbaa !15
  %1520 = sitofp i32 %1519 to double
  %1521 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  %1522 = load double, ptr %1521, align 16, !tbaa !20
  %1523 = fadd double %1520, %1522
  store double %1523, ptr %56, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  %1524 = load i32, ptr %27, align 4, !tbaa !15
  %1525 = sitofp i32 %1524 to double
  %1526 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  %1527 = load double, ptr %1526, align 8, !tbaa !20
  %1528 = fadd double %1525, %1527
  store double %1528, ptr %57, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #6
  %1529 = load i32, ptr %28, align 4, !tbaa !15
  %1530 = sitofp i32 %1529 to double
  %1531 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 2
  %1532 = load double, ptr %1531, align 16, !tbaa !20
  %1533 = fadd double %1530, %1532
  store double %1533, ptr %58, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %1534 = load double, ptr %54, align 8, !tbaa !20
  %1535 = call double @vl_abs_d(double noundef %1534)
  %1536 = load double, ptr %9, align 8, !tbaa !20
  %1537 = fcmp ogt double %1535, %1536
  br i1 %1537, label %1538, label %1594

1538:                                             ; preds = %1478
  %1539 = load double, ptr %55, align 8, !tbaa !20
  %1540 = load double, ptr %8, align 8, !tbaa !20
  %1541 = fadd double %1540, 1.000000e+00
  %1542 = load double, ptr %8, align 8, !tbaa !20
  %1543 = fadd double %1542, 1.000000e+00
  %1544 = fmul double %1541, %1543
  %1545 = load double, ptr %8, align 8, !tbaa !20
  %1546 = fdiv double %1544, %1545
  %1547 = fcmp olt double %1539, %1546
  br i1 %1547, label %1548, label %1594

1548:                                             ; preds = %1538
  %1549 = load double, ptr %55, align 8, !tbaa !20
  %1550 = fcmp oge double %1549, 0.000000e+00
  br i1 %1550, label %1551, label %1594

1551:                                             ; preds = %1548
  %1552 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 0
  %1553 = load double, ptr %1552, align 16, !tbaa !20
  %1554 = call double @vl_abs_d(double noundef %1553)
  %1555 = fcmp olt double %1554, 1.500000e+00
  br i1 %1555, label %1556, label %1594

1556:                                             ; preds = %1551
  %1557 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 1
  %1558 = load double, ptr %1557, align 8, !tbaa !20
  %1559 = call double @vl_abs_d(double noundef %1558)
  %1560 = fcmp olt double %1559, 1.500000e+00
  br i1 %1560, label %1561, label %1594

1561:                                             ; preds = %1556
  %1562 = getelementptr inbounds [3 x double], ptr %39, i64 0, i64 2
  %1563 = load double, ptr %1562, align 16, !tbaa !20
  %1564 = call double @vl_abs_d(double noundef %1563)
  %1565 = fcmp olt double %1564, 1.500000e+00
  br i1 %1565, label %1566, label %1594

1566:                                             ; preds = %1561
  %1567 = load double, ptr %56, align 8, !tbaa !20
  %1568 = fcmp oge double %1567, 0.000000e+00
  br i1 %1568, label %1569, label %1594

1569:                                             ; preds = %1566
  %1570 = load double, ptr %56, align 8, !tbaa !20
  %1571 = load i32, ptr %6, align 4, !tbaa !15
  %1572 = sub nsw i32 %1571, 1
  %1573 = sitofp i32 %1572 to double
  %1574 = fcmp ole double %1570, %1573
  br i1 %1574, label %1575, label %1594

1575:                                             ; preds = %1569
  %1576 = load double, ptr %57, align 8, !tbaa !20
  %1577 = fcmp oge double %1576, 0.000000e+00
  br i1 %1577, label %1578, label %1594

1578:                                             ; preds = %1575
  %1579 = load double, ptr %57, align 8, !tbaa !20
  %1580 = load i32, ptr %7, align 4, !tbaa !15
  %1581 = sub nsw i32 %1580, 1
  %1582 = sitofp i32 %1581 to double
  %1583 = fcmp ole double %1579, %1582
  br i1 %1583, label %1584, label %1594

1584:                                             ; preds = %1578
  %1585 = load double, ptr %58, align 8, !tbaa !20
  %1586 = load i32, ptr %4, align 4, !tbaa !15
  %1587 = sitofp i32 %1586 to double
  %1588 = fcmp oge double %1585, %1587
  br i1 %1588, label %1589, label %1594

1589:                                             ; preds = %1584
  %1590 = load double, ptr %58, align 8, !tbaa !20
  %1591 = load i32, ptr %5, align 4, !tbaa !15
  %1592 = sitofp i32 %1591 to double
  %1593 = fcmp ole double %1590, %1592
  br label %1594

1594:                                             ; preds = %1589, %1584, %1578, %1575, %1569, %1566, %1561, %1556, %1551, %1548, %1538, %1478
  %1595 = phi i1 [ false, %1584 ], [ false, %1578 ], [ false, %1575 ], [ false, %1569 ], [ false, %1566 ], [ false, %1561 ], [ false, %1556 ], [ false, %1551 ], [ false, %1548 ], [ false, %1538 ], [ false, %1478 ], [ %1593, %1589 ]
  %1596 = zext i1 %1595 to i32
  store i32 %1596, ptr %59, align 4, !tbaa !15
  %1597 = load i32, ptr %59, align 4, !tbaa !15
  %1598 = icmp ne i32 %1597, 0
  br i1 %1598, label %1599, label %1648

1599:                                             ; preds = %1594
  %1600 = load ptr, ptr %2, align 8, !tbaa !5
  %1601 = getelementptr inbounds %struct._VlSiftFilt, ptr %1600, i32 0, i32 11
  %1602 = load i32, ptr %1601, align 4, !tbaa !22
  %1603 = load ptr, ptr %22, align 8, !tbaa !5
  %1604 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1603, i32 0, i32 0
  store i32 %1602, ptr %1604, align 4, !tbaa !46
  %1605 = load i32, ptr %26, align 4, !tbaa !15
  %1606 = load ptr, ptr %22, align 8, !tbaa !5
  %1607 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1606, i32 0, i32 1
  store i32 %1605, ptr %1607, align 4, !tbaa !31
  %1608 = load i32, ptr %27, align 4, !tbaa !15
  %1609 = load ptr, ptr %22, align 8, !tbaa !5
  %1610 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1609, i32 0, i32 2
  store i32 %1608, ptr %1610, align 4, !tbaa !33
  %1611 = load i32, ptr %28, align 4, !tbaa !15
  %1612 = load ptr, ptr %22, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1612, i32 0, i32 3
  store i32 %1611, ptr %1613, align 4, !tbaa !34
  %1614 = load double, ptr %58, align 8, !tbaa !20
  %1615 = fptrunc double %1614 to float
  %1616 = load ptr, ptr %22, align 8, !tbaa !5
  %1617 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1616, i32 0, i32 6
  store float %1615, ptr %1617, align 4, !tbaa !47
  %1618 = load double, ptr %56, align 8, !tbaa !20
  %1619 = load double, ptr %13, align 8, !tbaa !20
  %1620 = fmul double %1618, %1619
  %1621 = fptrunc double %1620 to float
  %1622 = load ptr, ptr %22, align 8, !tbaa !5
  %1623 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1622, i32 0, i32 4
  store float %1621, ptr %1623, align 4, !tbaa !48
  %1624 = load double, ptr %57, align 8, !tbaa !20
  %1625 = load double, ptr %13, align 8, !tbaa !20
  %1626 = fmul double %1624, %1625
  %1627 = fptrunc double %1626 to float
  %1628 = load ptr, ptr %22, align 8, !tbaa !5
  %1629 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1628, i32 0, i32 5
  store float %1627, ptr %1629, align 4, !tbaa !49
  %1630 = load ptr, ptr %2, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct._VlSiftFilt, ptr %1630, i32 0, i32 1
  %1632 = load double, ptr %1631, align 8, !tbaa !50
  %1633 = load double, ptr %58, align 8, !tbaa !20
  %1634 = load ptr, ptr %2, align 8, !tbaa !5
  %1635 = getelementptr inbounds %struct._VlSiftFilt, ptr %1634, i32 0, i32 7
  %1636 = load i32, ptr %1635, align 4, !tbaa !51
  %1637 = sitofp i32 %1636 to double
  %1638 = fdiv double %1633, %1637
  %1639 = call double @pow(double noundef 2.000000e+00, double noundef %1638) #6
  %1640 = fmul double %1632, %1639
  %1641 = load double, ptr %13, align 8, !tbaa !20
  %1642 = fmul double %1640, %1641
  %1643 = fptrunc double %1642 to float
  %1644 = load ptr, ptr %22, align 8, !tbaa !5
  %1645 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1644, i32 0, i32 7
  store float %1643, ptr %1645, align 4, !tbaa !52
  %1646 = load ptr, ptr %22, align 8, !tbaa !5
  %1647 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %1646, i32 1
  store ptr %1647, ptr %22, align 8, !tbaa !5
  br label %1648

1648:                                             ; preds = %1599, %1594
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %1649

1649:                                             ; preds = %1648
  %1650 = load i32, ptr %17, align 4, !tbaa !15
  %1651 = add nsw i32 %1650, 1
  store i32 %1651, ptr %17, align 4, !tbaa !15
  br label %806, !llvm.loop !53

1652:                                             ; preds = %806
  %1653 = load ptr, ptr %22, align 8, !tbaa !5
  %1654 = load ptr, ptr %2, align 8, !tbaa !5
  %1655 = getelementptr inbounds %struct._VlSiftFilt, ptr %1654, i32 0, i32 20
  %1656 = load ptr, ptr %1655, align 8, !tbaa !30
  %1657 = ptrtoint ptr %1653 to i64
  %1658 = ptrtoint ptr %1656 to i64
  %1659 = sub i64 %1657, %1658
  %1660 = sdiv exact i64 %1659, 32
  %1661 = trunc i64 %1660 to i32
  %1662 = load ptr, ptr %2, align 8, !tbaa !5
  %1663 = getelementptr inbounds %struct._VlSiftFilt, ptr %1662, i32 0, i32 21
  store i32 %1661, ptr %1663, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #6
  ret void

1664:                                             ; preds = %1379
  unreachable
}

declare ptr @vl_realloc(ptr noundef, i64 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @vl_abs_d(double noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 80}
!10 = !{!"_VlSiftFilt", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !6, i64 64, !6, i64 72, !6, i64 80, !12, i64 88, !12, i64 92, !6, i64 96, !11, i64 104, !13, i64 112, !6, i64 120, !12, i64 128, !12, i64 132, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !6, i64 176, !12, i64 184}
!11 = !{!"double", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"long long", !7, i64 0}
!14 = !{!10, !12, i64 52}
!15 = !{!12, !12, i64 0}
!16 = !{!10, !12, i64 56}
!17 = !{!10, !12, i64 88}
!18 = !{!10, !12, i64 92}
!19 = !{!10, !11, i64 144}
!20 = !{!11, !11, i64 0}
!21 = !{!10, !11, i64 136}
!22 = !{!10, !12, i64 60}
!23 = !{!10, !12, i64 128}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = !{!10, !12, i64 132}
!30 = !{!10, !6, i64 120}
!31 = !{!32, !12, i64 4}
!32 = !{!"_VlSiftKeypoint", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !25, i64 16, !25, i64 20, !25, i64 24, !25, i64 28}
!33 = !{!32, !12, i64 8}
!34 = !{!32, !12, i64 12}
!35 = distinct !{!35, !27}
!36 = distinct !{!36, !27}
!37 = distinct !{!37, !27}
!38 = distinct !{!38, !27}
!39 = distinct !{!39, !27}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = distinct !{!42, !27}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}
!45 = distinct !{!45, !27}
!46 = !{!32, !12, i64 0}
!47 = !{!32, !25, i64 24}
!48 = !{!32, !25, i64 16}
!49 = !{!32, !25, i64 20}
!50 = !{!10, !11, i64 8}
!51 = !{!10, !12, i64 44}
!52 = !{!32, !25, i64 28}
!53 = distinct !{!53, !27}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct._VlSiftKeypoint = type { i32, i32, i32, i32, float, float, float, float }

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

declare ptr @vl_malloc(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @vl_sift_get_octave(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

; Function Attrs: nounwind uwtable
define dso_local void @vl_sift_detect(ptr noundef %0) local_unnamed_addr #4 {
  %2 = alloca [9 x double], align 16
  %3 = alloca [3 x double], align 16
  %4 = getelementptr inbounds i8, ptr %0, i64 80
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 52
  %7 = load i32, ptr %6, align 4, !tbaa !13
  %8 = getelementptr inbounds i8, ptr %0, i64 56
  %9 = load i32, ptr %8, align 8, !tbaa !14
  %10 = getelementptr inbounds i8, ptr %0, i64 88
  %11 = load <2 x i32>, ptr %10, align 8, !tbaa !15
  %12 = getelementptr inbounds i8, ptr %0, i64 144
  %13 = load double, ptr %12, align 8, !tbaa !16
  %14 = getelementptr inbounds i8, ptr %0, i64 136
  %15 = load double, ptr %14, align 8, !tbaa !17
  %16 = extractelement <2 x i32> %11, i64 0
  %17 = extractelement <2 x i32> %11, i64 1
  %18 = mul i32 %17, %16
  %19 = getelementptr inbounds i8, ptr %0, i64 60
  %20 = load i32, ptr %19, align 4, !tbaa !18
  %ldexp = tail call double @ldexp(double 1.000000e+00, i32 %20) #7
  %21 = getelementptr inbounds i8, ptr %0, i64 128
  store i32 0, ptr %21, align 8, !tbaa !19
  %.not.not564 = icmp slt i32 %7, %9
  br i1 %.not.not564, label %.lr.ph567, label %.._crit_edge_crit_edge

.._crit_edge_crit_edge:                           ; preds = %1
  %.pre687 = sext i32 %18 to i64
  br label %._crit_edge

.lr.ph567:                                        ; preds = %1
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = sext i32 %18 to i64
  %.not546560 = icmp eq i32 %18, 0
  %24 = add nsw i64 %23, 4611686018427387903
  %25 = and i64 %24, 4611686018427387903
  %26 = add nuw nsw i64 %25, 1
  %min.iters.check = icmp ult i64 %25, 7
  %n.vec = and i64 %26, 9223372036854775800
  %27 = shl i64 %n.vec, 2
  %28 = shl i64 %n.vec, 2
  %29 = shl i64 %n.vec, 2
  %cmp.n = icmp eq i64 %26, %n.vec
  br label %30

.loopexit559:                                     ; preds = %.lr.ph, %middle.block, %30
  %.1503.lcssa = phi ptr [ %.0502565, %30 ], [ %ind.end, %middle.block ], [ %50, %.lr.ph ]
  %exitcond.not = icmp eq i32 %33, %9
  br i1 %exitcond.not, label %._crit_edge, label %30, !llvm.loop !20

30:                                               ; preds = %.lr.ph567, %.loopexit559
  %.0496566 = phi i32 [ %7, %.lr.ph567 ], [ %33, %.loopexit559 ]
  %.0502565 = phi ptr [ %22, %.lr.ph567 ], [ %.1503.lcssa, %.loopexit559 ]
  %.0502565715 = ptrtoint ptr %.0502565 to i64
  %31 = tail call ptr @vl_sift_get_octave(ptr noundef %0, i32 noundef %.0496566)
  %32 = ptrtoint ptr %31 to i64
  %33 = add i32 %.0496566, 1
  %34 = tail call ptr @vl_sift_get_octave(ptr noundef %0, i32 noundef %33)
  %35 = ptrtoint ptr %34 to i64
  %36 = getelementptr inbounds float, ptr %31, i64 %23
  br i1 %.not546560, label %.loopexit559, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %30
  br i1 %min.iters.check, label %.lr.ph.preheader742, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %37 = sub i64 %.0502565715, %35
  %diff.check = icmp ult i64 %37, 32
  %38 = sub i64 %.0502565715, %32
  %diff.check716 = icmp ult i64 %38, 32
  %conflict.rdx = or i1 %diff.check, %diff.check716
  br i1 %conflict.rdx, label %.lr.ph.preheader742, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %ind.end = getelementptr i8, ptr %.0502565, i64 %27
  %ind.end717 = getelementptr i8, ptr %31, i64 %28
  %ind.end719 = getelementptr i8, ptr %34, i64 %29
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 2
  %next.gep = getelementptr i8, ptr %.0502565, i64 %offset.idx
  %offset.idx722 = shl i64 %index, 2
  %next.gep723 = getelementptr i8, ptr %31, i64 %offset.idx722
  %offset.idx725 = shl i64 %index, 2
  %next.gep726 = getelementptr i8, ptr %34, i64 %offset.idx725
  %39 = getelementptr i8, ptr %next.gep726, i64 16
  %wide.load = load <4 x float>, ptr %next.gep726, align 4, !tbaa !22
  %wide.load728 = load <4 x float>, ptr %39, align 4, !tbaa !22
  %40 = getelementptr i8, ptr %next.gep723, i64 16
  %wide.load729 = load <4 x float>, ptr %next.gep723, align 4, !tbaa !22
  %wide.load730 = load <4 x float>, ptr %40, align 4, !tbaa !22
  %41 = fsub <4 x float> %wide.load, %wide.load729
  %42 = fsub <4 x float> %wide.load728, %wide.load730
  %43 = getelementptr i8, ptr %next.gep, i64 16
  store <4 x float> %41, ptr %next.gep, align 4, !tbaa !22
  store <4 x float> %42, ptr %43, align 4, !tbaa !22
  %index.next = add nuw i64 %index, 8
  %44 = icmp eq i64 %index.next, %n.vec
  br i1 %44, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit559, label %.lr.ph.preheader742

.lr.ph.preheader742:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %.1503563.ph = phi ptr [ %.0502565, %vector.memcheck ], [ %.0502565, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.0507562.ph = phi ptr [ %31, %vector.memcheck ], [ %31, %.lr.ph.preheader ], [ %ind.end717, %middle.block ]
  %.0508561.ph = phi ptr [ %34, %vector.memcheck ], [ %34, %.lr.ph.preheader ], [ %ind.end719, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader742, %.lr.ph
  %.1503563 = phi ptr [ %50, %.lr.ph ], [ %.1503563.ph, %.lr.ph.preheader742 ]
  %.0507562 = phi ptr [ %47, %.lr.ph ], [ %.0507562.ph, %.lr.ph.preheader742 ]
  %.0508561 = phi ptr [ %45, %.lr.ph ], [ %.0508561.ph, %.lr.ph.preheader742 ]
  %45 = getelementptr inbounds i8, ptr %.0508561, i64 4
  %46 = load float, ptr %.0508561, align 4, !tbaa !22
  %47 = getelementptr inbounds i8, ptr %.0507562, i64 4
  %48 = load float, ptr %.0507562, align 4, !tbaa !22
  %49 = fsub float %46, %48
  %50 = getelementptr inbounds i8, ptr %.1503563, i64 4
  store float %49, ptr %.1503563, align 4, !tbaa !22
  %.not546 = icmp eq ptr %47, %36
  br i1 %.not546, label %.loopexit559, label %.lr.ph, !llvm.loop !27

._crit_edge:                                      ; preds = %.loopexit559, %.._crit_edge_crit_edge
  %.pre-phi688 = phi i64 [ %.pre687, %.._crit_edge_crit_edge ], [ %23, %.loopexit559 ]
  %51 = getelementptr inbounds i8, ptr %5, i64 4
  %52 = sext i32 %16 to i64
  %53 = getelementptr inbounds float, ptr %51, i64 %52
  %54 = getelementptr inbounds float, ptr %53, i64 %.pre-phi688
  %55 = add nsw i32 %9, -2
  %.not.not544578 = icmp slt i32 %7, %55
  br i1 %.not.not544578, label %.preheader558.lr.ph, label %._crit_edge581

.preheader558.lr.ph:                              ; preds = %._crit_edge
  %56 = fmul double %15, 8.000000e-01
  %57 = sub nsw i64 0, %.pre-phi688
  %58 = sub nsw i64 0, %52
  %59 = fmul double %15, -8.000000e-01
  %60 = getelementptr inbounds i8, ptr %0, i64 132
  %61 = getelementptr inbounds i8, ptr %0, i64 120
  %62 = shl nsw i32 %16, 1
  %63 = sext i32 %62 to i64
  %64 = icmp sgt <2 x i32> %11, <i32 2, i32 2>
  %65 = extractelement <2 x i1> %64, i64 0
  %66 = extractelement <2 x i1> %64, i64 1
  %or.cond = select i1 %66, i1 %65, i1 false
  br i1 %or.cond, label %.preheader558.us.us.preheader, label %._crit_edge581

.preheader558.us.us.preheader:                    ; preds = %.preheader558.lr.ph
  %67 = add nsw i32 %16, -3
  %68 = zext nneg i32 %67 to i64
  %69 = shl nuw nsw i64 %68, 2
  %70 = add nsw i32 %16, -2
  %71 = add nsw i32 %17, -2
  %72 = add i32 %9, -3
  br label %.preheader558.us.us

.preheader558.us.us:                              ; preds = %.preheader558.us.us.preheader, %._crit_edge575.split.us.us.us
  %.1580.us.us.in = phi i32 [ %.1580.us.us, %._crit_edge575.split.us.us.us ], [ %7, %.preheader558.us.us.preheader ]
  %.2579.us.us = phi ptr [ %312, %._crit_edge575.split.us.us.us ], [ %54, %.preheader558.us.us.preheader ]
  %.1580.us.us = add i32 %.1580.us.us.in, 1
  br label %.preheader557.us.us.us

.preheader557.us.us.us:                           ; preds = %._crit_edge571.us.us.us, %.preheader558.us.us
  %.0495574.us.us.us = phi i32 [ 1, %.preheader558.us.us ], [ %311, %._crit_edge571.us.us.us ]
  %.3573.us.us.us = phi ptr [ %.2579.us.us, %.preheader558.us.us ], [ %310, %._crit_edge571.us.us.us ]
  br label %73

73:                                               ; preds = %307, %.preheader557.us.us.us
  %.0569.us.us.us = phi i32 [ 1, %.preheader557.us.us.us ], [ %309, %307 ]
  %.4568.us.us.us = phi ptr [ %.3573.us.us.us, %.preheader557.us.us.us ], [ %308, %307 ]
  %74 = load float, ptr %.4568.us.us.us, align 4, !tbaa !22
  %75 = fpext float %74 to double
  %76 = fcmp ugt double %56, %75
  br i1 %76, label %181, label %77

77:                                               ; preds = %73
  %78 = getelementptr inbounds i8, ptr %.4568.us.us.us, i64 4
  %79 = load float, ptr %78, align 4, !tbaa !22
  %80 = fcmp ogt float %74, %79
  br i1 %80, label %81, label %181

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %.4568.us.us.us, i64 -4
  %83 = load float, ptr %82, align 4, !tbaa !22
  %84 = fcmp ogt float %74, %83
  br i1 %84, label %85, label %181

85:                                               ; preds = %81
  %86 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %.pre-phi688
  %87 = load float, ptr %86, align 4, !tbaa !22
  %88 = fcmp ogt float %74, %87
  br i1 %88, label %89, label %181

89:                                               ; preds = %85
  %90 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %57
  %91 = load float, ptr %90, align 4, !tbaa !22
  %92 = fcmp ogt float %74, %91
  br i1 %92, label %93, label %181

93:                                               ; preds = %89
  %94 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %52
  %95 = load float, ptr %94, align 4, !tbaa !22
  %96 = fcmp ogt float %74, %95
  br i1 %96, label %97, label %181

97:                                               ; preds = %93
  %98 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %58
  %99 = load float, ptr %98, align 4, !tbaa !22
  %100 = fcmp ogt float %74, %99
  br i1 %100, label %101, label %181

101:                                              ; preds = %97
  %102 = getelementptr inbounds i8, ptr %94, i64 4
  %103 = load float, ptr %102, align 4, !tbaa !22
  %104 = fcmp ogt float %74, %103
  br i1 %104, label %105, label %181

105:                                              ; preds = %101
  %106 = getelementptr inbounds i8, ptr %94, i64 -4
  %107 = load float, ptr %106, align 4, !tbaa !22
  %108 = fcmp ogt float %74, %107
  br i1 %108, label %109, label %181

109:                                              ; preds = %105
  %110 = getelementptr inbounds i8, ptr %98, i64 4
  %111 = load float, ptr %110, align 4, !tbaa !22
  %112 = fcmp ogt float %74, %111
  br i1 %112, label %113, label %181

113:                                              ; preds = %109
  %114 = getelementptr inbounds i8, ptr %98, i64 -4
  %115 = load float, ptr %114, align 4, !tbaa !22
  %116 = fcmp ogt float %74, %115
  br i1 %116, label %117, label %181

117:                                              ; preds = %113
  %118 = getelementptr inbounds float, ptr %78, i64 %.pre-phi688
  %119 = load float, ptr %118, align 4, !tbaa !22
  %120 = fcmp ogt float %74, %119
  br i1 %120, label %121, label %181

121:                                              ; preds = %117
  %122 = getelementptr inbounds float, ptr %82, i64 %.pre-phi688
  %123 = load float, ptr %122, align 4, !tbaa !22
  %124 = fcmp ogt float %74, %123
  br i1 %124, label %125, label %181

125:                                              ; preds = %121
  %126 = getelementptr inbounds float, ptr %94, i64 %.pre-phi688
  %127 = load float, ptr %126, align 4, !tbaa !22
  %128 = fcmp ogt float %74, %127
  br i1 %128, label %129, label %181

129:                                              ; preds = %125
  %130 = getelementptr inbounds float, ptr %98, i64 %.pre-phi688
  %131 = load float, ptr %130, align 4, !tbaa !22
  %132 = fcmp ogt float %74, %131
  br i1 %132, label %133, label %181

133:                                              ; preds = %129
  %134 = getelementptr inbounds float, ptr %102, i64 %.pre-phi688
  %135 = load float, ptr %134, align 4, !tbaa !22
  %136 = fcmp ogt float %74, %135
  br i1 %136, label %137, label %181

137:                                              ; preds = %133
  %138 = getelementptr inbounds float, ptr %106, i64 %.pre-phi688
  %139 = load float, ptr %138, align 4, !tbaa !22
  %140 = fcmp ogt float %74, %139
  br i1 %140, label %141, label %181

141:                                              ; preds = %137
  %142 = getelementptr inbounds float, ptr %110, i64 %.pre-phi688
  %143 = load float, ptr %142, align 4, !tbaa !22
  %144 = fcmp ogt float %74, %143
  br i1 %144, label %145, label %181

145:                                              ; preds = %141
  %146 = getelementptr inbounds float, ptr %114, i64 %.pre-phi688
  %147 = load float, ptr %146, align 4, !tbaa !22
  %148 = fcmp ogt float %74, %147
  br i1 %148, label %149, label %181

149:                                              ; preds = %145
  %150 = getelementptr inbounds float, ptr %78, i64 %57
  %151 = load float, ptr %150, align 4, !tbaa !22
  %152 = fcmp ogt float %74, %151
  br i1 %152, label %153, label %181

153:                                              ; preds = %149
  %154 = getelementptr inbounds float, ptr %82, i64 %57
  %155 = load float, ptr %154, align 4, !tbaa !22
  %156 = fcmp ogt float %74, %155
  br i1 %156, label %157, label %181

157:                                              ; preds = %153
  %158 = getelementptr inbounds float, ptr %94, i64 %57
  %159 = load float, ptr %158, align 4, !tbaa !22
  %160 = fcmp ogt float %74, %159
  br i1 %160, label %161, label %181

161:                                              ; preds = %157
  %162 = getelementptr inbounds float, ptr %98, i64 %57
  %163 = load float, ptr %162, align 4, !tbaa !22
  %164 = fcmp ogt float %74, %163
  br i1 %164, label %165, label %181

165:                                              ; preds = %161
  %166 = getelementptr inbounds float, ptr %102, i64 %57
  %167 = load float, ptr %166, align 4, !tbaa !22
  %168 = fcmp ogt float %74, %167
  br i1 %168, label %169, label %181

169:                                              ; preds = %165
  %170 = getelementptr inbounds float, ptr %106, i64 %57
  %171 = load float, ptr %170, align 4, !tbaa !22
  %172 = fcmp ogt float %74, %171
  br i1 %172, label %173, label %181

173:                                              ; preds = %169
  %174 = getelementptr inbounds float, ptr %110, i64 %57
  %175 = load float, ptr %174, align 4, !tbaa !22
  %176 = fcmp ogt float %74, %175
  br i1 %176, label %177, label %181

177:                                              ; preds = %173
  %178 = getelementptr inbounds float, ptr %114, i64 %57
  %179 = load float, ptr %178, align 4, !tbaa !22
  %180 = fcmp ogt float %74, %179
  br i1 %180, label %287, label %181

181:                                              ; preds = %177, %173, %169, %165, %161, %157, %153, %149, %145, %141, %137, %133, %129, %125, %121, %117, %113, %109, %105, %101, %97, %93, %89, %85, %81, %77, %73
  %182 = fcmp ult double %59, %75
  br i1 %182, label %307, label %183

183:                                              ; preds = %181
  %184 = getelementptr inbounds i8, ptr %.4568.us.us.us, i64 4
  %185 = load float, ptr %184, align 4, !tbaa !22
  %186 = fcmp olt float %74, %185
  br i1 %186, label %187, label %307

187:                                              ; preds = %183
  %188 = getelementptr inbounds i8, ptr %.4568.us.us.us, i64 -4
  %189 = load float, ptr %188, align 4, !tbaa !22
  %190 = fcmp olt float %74, %189
  br i1 %190, label %191, label %307

191:                                              ; preds = %187
  %192 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %.pre-phi688
  %193 = load float, ptr %192, align 4, !tbaa !22
  %194 = fcmp olt float %74, %193
  br i1 %194, label %195, label %307

195:                                              ; preds = %191
  %196 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %57
  %197 = load float, ptr %196, align 4, !tbaa !22
  %198 = fcmp olt float %74, %197
  br i1 %198, label %199, label %307

199:                                              ; preds = %195
  %200 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %52
  %201 = load float, ptr %200, align 4, !tbaa !22
  %202 = fcmp olt float %74, %201
  br i1 %202, label %203, label %307

203:                                              ; preds = %199
  %204 = getelementptr inbounds float, ptr %.4568.us.us.us, i64 %58
  %205 = load float, ptr %204, align 4, !tbaa !22
  %206 = fcmp olt float %74, %205
  br i1 %206, label %207, label %307

207:                                              ; preds = %203
  %208 = getelementptr inbounds i8, ptr %200, i64 4
  %209 = load float, ptr %208, align 4, !tbaa !22
  %210 = fcmp olt float %74, %209
  br i1 %210, label %211, label %307

211:                                              ; preds = %207
  %212 = getelementptr inbounds i8, ptr %200, i64 -4
  %213 = load float, ptr %212, align 4, !tbaa !22
  %214 = fcmp olt float %74, %213
  br i1 %214, label %215, label %307

215:                                              ; preds = %211
  %216 = getelementptr inbounds i8, ptr %204, i64 4
  %217 = load float, ptr %216, align 4, !tbaa !22
  %218 = fcmp olt float %74, %217
  br i1 %218, label %219, label %307

219:                                              ; preds = %215
  %220 = getelementptr inbounds i8, ptr %204, i64 -4
  %221 = load float, ptr %220, align 4, !tbaa !22
  %222 = fcmp olt float %74, %221
  br i1 %222, label %223, label %307

223:                                              ; preds = %219
  %224 = getelementptr inbounds float, ptr %184, i64 %.pre-phi688
  %225 = load float, ptr %224, align 4, !tbaa !22
  %226 = fcmp olt float %74, %225
  br i1 %226, label %227, label %307

227:                                              ; preds = %223
  %228 = getelementptr inbounds float, ptr %188, i64 %.pre-phi688
  %229 = load float, ptr %228, align 4, !tbaa !22
  %230 = fcmp olt float %74, %229
  br i1 %230, label %231, label %307

231:                                              ; preds = %227
  %232 = getelementptr inbounds float, ptr %200, i64 %.pre-phi688
  %233 = load float, ptr %232, align 4, !tbaa !22
  %234 = fcmp olt float %74, %233
  br i1 %234, label %235, label %307

235:                                              ; preds = %231
  %236 = getelementptr inbounds float, ptr %204, i64 %.pre-phi688
  %237 = load float, ptr %236, align 4, !tbaa !22
  %238 = fcmp olt float %74, %237
  br i1 %238, label %239, label %307

239:                                              ; preds = %235
  %240 = getelementptr inbounds float, ptr %208, i64 %.pre-phi688
  %241 = load float, ptr %240, align 4, !tbaa !22
  %242 = fcmp olt float %74, %241
  br i1 %242, label %243, label %307

243:                                              ; preds = %239
  %244 = getelementptr inbounds float, ptr %212, i64 %.pre-phi688
  %245 = load float, ptr %244, align 4, !tbaa !22
  %246 = fcmp olt float %74, %245
  br i1 %246, label %247, label %307

247:                                              ; preds = %243
  %248 = getelementptr inbounds float, ptr %216, i64 %.pre-phi688
  %249 = load float, ptr %248, align 4, !tbaa !22
  %250 = fcmp olt float %74, %249
  br i1 %250, label %251, label %307

251:                                              ; preds = %247
  %252 = getelementptr inbounds float, ptr %220, i64 %.pre-phi688
  %253 = load float, ptr %252, align 4, !tbaa !22
  %254 = fcmp olt float %74, %253
  br i1 %254, label %255, label %307

255:                                              ; preds = %251
  %256 = getelementptr inbounds float, ptr %184, i64 %57
  %257 = load float, ptr %256, align 4, !tbaa !22
  %258 = fcmp olt float %74, %257
  br i1 %258, label %259, label %307

259:                                              ; preds = %255
  %260 = getelementptr inbounds float, ptr %188, i64 %57
  %261 = load float, ptr %260, align 4, !tbaa !22
  %262 = fcmp olt float %74, %261
  br i1 %262, label %263, label %307

263:                                              ; preds = %259
  %264 = getelementptr inbounds float, ptr %200, i64 %57
  %265 = load float, ptr %264, align 4, !tbaa !22
  %266 = fcmp olt float %74, %265
  br i1 %266, label %267, label %307

267:                                              ; preds = %263
  %268 = getelementptr inbounds float, ptr %204, i64 %57
  %269 = load float, ptr %268, align 4, !tbaa !22
  %270 = fcmp olt float %74, %269
  br i1 %270, label %271, label %307

271:                                              ; preds = %267
  %272 = getelementptr inbounds float, ptr %208, i64 %57
  %273 = load float, ptr %272, align 4, !tbaa !22
  %274 = fcmp olt float %74, %273
  br i1 %274, label %275, label %307

275:                                              ; preds = %271
  %276 = getelementptr inbounds float, ptr %212, i64 %57
  %277 = load float, ptr %276, align 4, !tbaa !22
  %278 = fcmp olt float %74, %277
  br i1 %278, label %279, label %307

279:                                              ; preds = %275
  %280 = getelementptr inbounds float, ptr %216, i64 %57
  %281 = load float, ptr %280, align 4, !tbaa !22
  %282 = fcmp olt float %74, %281
  br i1 %282, label %283, label %307

283:                                              ; preds = %279
  %284 = getelementptr inbounds float, ptr %220, i64 %57
  %285 = load float, ptr %284, align 4, !tbaa !22
  %286 = fcmp olt float %74, %285
  br i1 %286, label %287, label %307

287:                                              ; preds = %283, %177
  %288 = load i32, ptr %21, align 8, !tbaa !19
  %289 = load i32, ptr %60, align 4, !tbaa !28
  %.not.us.us.us = icmp slt i32 %288, %289
  %.pre = load ptr, ptr %61, align 8, !tbaa !29
  br i1 %.not.us.us.us, label %298, label %290

290:                                              ; preds = %287
  %291 = add nsw i32 %289, 500
  store i32 %291, ptr %60, align 4, !tbaa !28
  %.not545.us.us.us = icmp eq ptr %.pre, null
  %292 = sext i32 %291 to i64
  %293 = shl nsw i64 %292, 5
  br i1 %.not545.us.us.us, label %296, label %294

294:                                              ; preds = %290
  %295 = tail call ptr @vl_realloc(ptr noundef nonnull %.pre, i64 noundef %293) #7
  br label %.sink.split

296:                                              ; preds = %290
  %297 = tail call ptr @vl_malloc(i64 noundef %293) #7
  br label %.sink.split

.sink.split:                                      ; preds = %294, %296
  %.sink = phi ptr [ %297, %296 ], [ %295, %294 ]
  store ptr %.sink, ptr %61, align 8, !tbaa !29
  br label %298

298:                                              ; preds = %.sink.split, %287
  %299 = phi ptr [ %.pre, %287 ], [ %.sink, %.sink.split ]
  %300 = load i32, ptr %21, align 8, !tbaa !19
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %21, align 8, !tbaa !19
  %302 = sext i32 %300 to i64
  %303 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %299, i64 %302
  %304 = getelementptr inbounds i8, ptr %303, i64 4
  store i32 %.0569.us.us.us, ptr %304, align 4, !tbaa !30
  %305 = getelementptr inbounds i8, ptr %303, i64 8
  store i32 %.0495574.us.us.us, ptr %305, align 4, !tbaa !32
  %306 = getelementptr inbounds i8, ptr %303, i64 12
  store i32 %.1580.us.us, ptr %306, align 4, !tbaa !33
  br label %307

307:                                              ; preds = %298, %283, %279, %275, %271, %267, %263, %259, %255, %251, %247, %243, %239, %235, %231, %227, %223, %219, %215, %211, %207, %203, %199, %195, %191, %187, %183, %181
  %308 = getelementptr inbounds i8, ptr %.4568.us.us.us, i64 4
  %309 = add nuw nsw i32 %.0569.us.us.us, 1
  %exitcond636.not = icmp eq i32 %.0569.us.us.us, %70
  br i1 %exitcond636.not, label %._crit_edge571.us.us.us, label %73, !llvm.loop !34

._crit_edge571.us.us.us:                          ; preds = %307
  %scevgep = getelementptr i8, ptr %.3573.us.us.us, i64 %69
  %310 = getelementptr inbounds i8, ptr %scevgep, i64 12
  %311 = add nuw nsw i32 %.0495574.us.us.us, 1
  %exitcond637.not = icmp eq i32 %.0495574.us.us.us, %71
  br i1 %exitcond637.not, label %._crit_edge575.split.us.us.us, label %.preheader557.us.us.us, !llvm.loop !35

._crit_edge575.split.us.us.us:                    ; preds = %._crit_edge571.us.us.us
  %312 = getelementptr inbounds float, ptr %310, i64 %63
  %exitcond638.not = icmp eq i32 %.1580.us.us.in, %72
  br i1 %exitcond638.not, label %._crit_edge581, label %.preheader558.us.us, !llvm.loop !36

._crit_edge581:                                   ; preds = %._crit_edge575.split.us.us.us, %.preheader558.lr.ph, %._crit_edge
  %313 = getelementptr inbounds i8, ptr %0, i64 120
  %314 = load ptr, ptr %313, align 8, !tbaa !29
  %315 = load i32, ptr %21, align 8, !tbaa !19
  %316 = icmp sgt i32 %315, 0
  br i1 %316, label %.lr.ph617, label %._crit_edge618

.lr.ph617:                                        ; preds = %._crit_edge581
  %317 = sub nsw i32 0, %16
  %318 = sext i32 %317 to i64
  %319 = sub nsw i32 0, %18
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds i8, ptr %2, i64 32
  %322 = getelementptr inbounds i8, ptr %2, i64 64
  %323 = getelementptr inbounds i8, ptr %2, i64 8
  %324 = getelementptr inbounds i8, ptr %2, i64 24
  %325 = getelementptr inbounds i8, ptr %2, i64 48
  %326 = getelementptr inbounds i8, ptr %2, i64 40
  %327 = getelementptr inbounds i8, ptr %2, i64 56
  %328 = getelementptr inbounds i8, ptr %3, i64 8
  %329 = getelementptr inbounds i8, ptr %3, i64 16
  %330 = add nsw <2 x i32> %11, <i32 -2, i32 -2>
  %331 = fadd double %13, 1.000000e+00
  %332 = fmul double %331, %331
  %333 = fdiv double %332, %13
  %334 = add nsw i32 %16, -1
  %335 = sitofp i32 %334 to double
  %336 = add nsw i32 %17, -1
  %337 = sitofp i32 %336 to double
  %338 = sitofp i32 %7 to double
  %339 = sitofp i32 %9 to double
  %340 = getelementptr inbounds i8, ptr %0, i64 8
  %341 = getelementptr inbounds i8, ptr %0, i64 44
  %342 = getelementptr inbounds i8, ptr %3, i64 16
  %343 = insertelement <2 x double> poison, double %ldexp, i64 0
  %344 = shufflevector <2 x double> %343, <2 x double> poison, <2 x i32> zeroinitializer
  br label %345

345:                                              ; preds = %.lr.ph617, %.critedge
  %indvars.iv = phi i64 [ 0, %.lr.ph617 ], [ %indvars.iv.next, %.critedge ]
  %.0504614 = phi ptr [ %314, %.lr.ph617 ], [ %.1505, %.critedge ]
  %346 = load ptr, ptr %313, align 8, !tbaa !29
  %347 = getelementptr inbounds %struct._VlSiftKeypoint, ptr %346, i64 %indvars.iv
  %348 = getelementptr inbounds i8, ptr %347, i64 4
  %349 = load <2 x i32>, ptr %348, align 4, !tbaa !15
  %350 = getelementptr inbounds i8, ptr %347, i64 12
  %351 = load i32, ptr %350, align 4, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #7
  %352 = sub nsw i32 %351, %7
  %353 = mul nsw i32 %352, %18
  %354 = sext i32 %353 to i64
  br label %.preheader556

.preheader556:                                    ; preds = %.loopexit, %345
  %.0518613 = phi i32 [ 0, %345 ], [ %557, %.loopexit ]
  %355 = phi <2 x i32> [ zeroinitializer, %345 ], [ %552, %.loopexit ]
  %356 = phi <2 x i32> [ %349, %345 ], [ %357, %.loopexit ]
  %357 = add nsw <2 x i32> %355, %356
  %358 = extractelement <2 x i32> %357, i64 0
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds float, ptr %5, i64 %359
  %361 = extractelement <2 x i32> %357, i64 1
  %362 = mul nsw i32 %361, %16
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds float, ptr %360, i64 %363
  %365 = getelementptr inbounds float, ptr %364, i64 %354
  %366 = getelementptr inbounds i8, ptr %365, i64 4
  %367 = load float, ptr %366, align 4, !tbaa !22
  %368 = getelementptr inbounds i8, ptr %365, i64 -4
  %369 = load float, ptr %368, align 4, !tbaa !22
  %370 = getelementptr inbounds float, ptr %365, i64 %52
  %371 = load float, ptr %370, align 4, !tbaa !22
  %372 = getelementptr inbounds float, ptr %365, i64 %318
  %373 = load float, ptr %372, align 4, !tbaa !22
  %374 = getelementptr inbounds float, ptr %365, i64 %.pre-phi688
  %375 = load float, ptr %374, align 4, !tbaa !22
  %376 = getelementptr inbounds float, ptr %365, i64 %320
  %377 = load float, ptr %376, align 4, !tbaa !22
  %378 = fsub float %375, %377
  %379 = fpext float %378 to double
  %380 = fmul double %379, 5.000000e-01
  %381 = fadd float %367, %369
  %382 = fpext float %381 to double
  %383 = load float, ptr %365, align 4, !tbaa !22
  %384 = fpext float %383 to double
  %385 = tail call double @llvm.fmuladd.f64(double %384, double -2.000000e+00, double %382)
  %386 = fadd float %371, %373
  %387 = fpext float %386 to double
  %388 = tail call double @llvm.fmuladd.f64(double %384, double -2.000000e+00, double %387)
  %389 = fadd float %375, %377
  %390 = fpext float %389 to double
  %391 = tail call double @llvm.fmuladd.f64(double %384, double -2.000000e+00, double %390)
  %392 = getelementptr inbounds float, ptr %366, i64 %52
  %393 = load float, ptr %392, align 4, !tbaa !22
  %394 = getelementptr inbounds float, ptr %368, i64 %318
  %395 = load float, ptr %394, align 4, !tbaa !22
  %396 = getelementptr inbounds float, ptr %368, i64 %52
  %397 = load float, ptr %396, align 4, !tbaa !22
  %398 = getelementptr inbounds float, ptr %366, i64 %318
  %399 = load float, ptr %398, align 4, !tbaa !22
  %400 = getelementptr inbounds float, ptr %366, i64 %.pre-phi688
  %401 = load float, ptr %400, align 4, !tbaa !22
  %402 = getelementptr inbounds float, ptr %368, i64 %320
  %403 = load float, ptr %402, align 4, !tbaa !22
  %404 = getelementptr inbounds float, ptr %368, i64 %.pre-phi688
  %405 = load float, ptr %404, align 4, !tbaa !22
  %406 = getelementptr inbounds float, ptr %366, i64 %320
  %407 = load float, ptr %406, align 4, !tbaa !22
  %408 = getelementptr inbounds float, ptr %370, i64 %.pre-phi688
  %409 = load float, ptr %408, align 4, !tbaa !22
  %410 = getelementptr inbounds float, ptr %372, i64 %320
  %411 = load float, ptr %410, align 4, !tbaa !22
  %412 = fadd float %409, %411
  %413 = getelementptr inbounds float, ptr %372, i64 %.pre-phi688
  %414 = load float, ptr %413, align 4, !tbaa !22
  %415 = fsub float %412, %414
  %416 = getelementptr inbounds float, ptr %370, i64 %320
  %417 = load float, ptr %416, align 4, !tbaa !22
  %418 = fsub float %415, %417
  %419 = fpext float %418 to double
  %420 = fmul double %419, 2.500000e-01
  store double %385, ptr %2, align 16, !tbaa !37
  store double %388, ptr %321, align 16, !tbaa !37
  store double %391, ptr %322, align 16, !tbaa !37
  %421 = insertelement <2 x float> poison, float %393, i64 0
  %422 = insertelement <2 x float> %421, float %401, i64 1
  %423 = insertelement <2 x float> poison, float %395, i64 0
  %424 = insertelement <2 x float> %423, float %403, i64 1
  %425 = fadd <2 x float> %422, %424
  %426 = insertelement <2 x float> poison, float %397, i64 0
  %427 = insertelement <2 x float> %426, float %405, i64 1
  %428 = fsub <2 x float> %425, %427
  %429 = insertelement <2 x float> poison, float %399, i64 0
  %430 = insertelement <2 x float> %429, float %407, i64 1
  %431 = fsub <2 x float> %428, %430
  %432 = fpext <2 x float> %431 to <2 x double>
  %433 = fmul <2 x double> %432, <double 2.500000e-01, double 2.500000e-01>
  %434 = extractelement <2 x double> %433, i64 0
  store double %434, ptr %324, align 8, !tbaa !37
  store <2 x double> %433, ptr %323, align 8, !tbaa !37
  %435 = extractelement <2 x double> %433, i64 1
  store double %435, ptr %325, align 16, !tbaa !37
  store double %420, ptr %326, align 8, !tbaa !37
  store double %420, ptr %327, align 8, !tbaa !37
  %436 = insertelement <2 x float> poison, float %367, i64 0
  %437 = insertelement <2 x float> %436, float %371, i64 1
  %438 = insertelement <2 x float> poison, float %369, i64 0
  %439 = insertelement <2 x float> %438, float %373, i64 1
  %440 = fsub <2 x float> %437, %439
  %441 = fpext <2 x float> %440 to <2 x double>
  %442 = fmul <2 x double> %441, <double 5.000000e-01, double 5.000000e-01>
  %443 = fneg <2 x double> %442
  store <2 x double> %443, ptr %3, align 16, !tbaa !37
  %444 = fneg double %380
  store double %444, ptr %329, align 16, !tbaa !37
  %445 = tail call double @vl_abs_d(double noundef %385)
  %446 = fcmp ule double %445, 0.000000e+00
  %.1512 = select i1 %446, double 0.000000e+00, double %445
  %447 = tail call double @vl_abs_d(double noundef %434)
  %448 = fcmp ogt double %447, %.1512
  %.1512.1661 = select i1 %448, double %447, double %.1512
  %449 = tail call double @vl_abs_d(double noundef %435)
  %450 = fcmp ogt double %449, %.1512.1661
  %.1512.2664 = select i1 %450, double %449, double %.1512.1661
  %451 = fcmp olt double %.1512.2664, 0x3DDB7CDFE0000000
  br i1 %451, label %452, label %._crit_edge605.split.us

452:                                              ; preds = %._crit_edge605.split.us.1, %._crit_edge605.split.us, %.preheader556
  store i64 0, ptr %342, align 16
  br label %.loopexit

._crit_edge605.split.us:                          ; preds = %.preheader556
  %453 = sext i1 %446 to i64
  %454 = select i1 %448, i64 1, i64 %453
  %.1514 = select i1 %446, double 0.000000e+00, double %385
  %.1514.1660 = select i1 %448, double %434, double %.1514
  %.1514.2663 = select i1 %450, double %435, double %.1514.1660
  %455 = select i1 %450, i64 2, i64 %454
  %456 = getelementptr inbounds [9 x double], ptr %2, i64 0, i64 %455
  %457 = load double, ptr %456, align 8, !tbaa !37
  store double %385, ptr %456, align 8, !tbaa !37
  %458 = fdiv double %457, %.1514.2663
  store double %458, ptr %2, align 16, !tbaa !37
  %459 = add nsw i64 %455, 3
  %460 = getelementptr inbounds [9 x double], ptr %2, i64 0, i64 %459
  %461 = load double, ptr %460, align 8, !tbaa !37
  store double %434, ptr %460, align 8, !tbaa !37
  %462 = fdiv double %461, %.1514.2663
  store double %462, ptr %324, align 8, !tbaa !37
  %463 = add nsw i64 %455, 6
  %464 = getelementptr inbounds [9 x double], ptr %2, i64 0, i64 %463
  %465 = load double, ptr %464, align 8, !tbaa !37
  %466 = load double, ptr %325, align 16, !tbaa !37
  store double %466, ptr %464, align 8, !tbaa !37
  %467 = fdiv double %465, %.1514.2663
  store double %467, ptr %325, align 16, !tbaa !37
  %.phi.trans.insert = getelementptr inbounds [3 x double], ptr %3, i64 0, i64 %455
  %.pre682 = load double, ptr %.phi.trans.insert, align 8, !tbaa !37
  %468 = getelementptr inbounds [3 x double], ptr %3, i64 0, i64 %455
  store double %.pre682, ptr %3, align 16, !tbaa !37
  %469 = extractelement <2 x double> %443, i64 0
  store double %469, ptr %468, align 8, !tbaa !37
  %470 = load double, ptr %3, align 16, !tbaa !37
  %471 = fdiv double %470, %.1514.2663
  store double %471, ptr %3, align 16, !tbaa !37
  %472 = load <2 x double>, ptr %2, align 16
  %473 = load <2 x double>, ptr %324, align 8
  %474 = load <2 x double>, ptr %323, align 8, !tbaa !37
  %475 = fneg <2 x double> %474
  %476 = shufflevector <2 x double> %472, <2 x double> poison, <2 x i32> zeroinitializer
  %477 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %475, <2 x double> %476, <2 x double> %474)
  store <2 x double> %477, ptr %323, align 8, !tbaa !37
  %478 = load <2 x double>, ptr %321, align 16, !tbaa !37
  %479 = shufflevector <2 x double> %473, <2 x double> poison, <2 x i32> zeroinitializer
  %480 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %475, <2 x double> %479, <2 x double> %478)
  store <2 x double> %480, ptr %321, align 16, !tbaa !37
  %481 = load <2 x double>, ptr %327, align 8, !tbaa !37
  %482 = insertelement <2 x double> poison, double %467, i64 0
  %483 = shufflevector <2 x double> %482, <2 x double> poison, <2 x i32> zeroinitializer
  %484 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %475, <2 x double> %483, <2 x double> %481)
  store <2 x double> %484, ptr %327, align 8, !tbaa !37
  %485 = load <2 x double>, ptr %328, align 8, !tbaa !37
  %486 = insertelement <2 x double> poison, double %471, i64 0
  %487 = shufflevector <2 x double> %486, <2 x double> poison, <2 x i32> zeroinitializer
  %488 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %475, <2 x double> %487, <2 x double> %485)
  store <2 x double> %488, ptr %328, align 8, !tbaa !37
  %489 = extractelement <2 x double> %480, i64 0
  %490 = tail call double @vl_abs_d(double noundef %489)
  %491 = fcmp ogt double %490, 0.000000e+00
  %.1512.1 = select i1 %491, double %490, double 0.000000e+00
  %492 = extractelement <2 x double> %480, i64 1
  %493 = tail call double @vl_abs_d(double noundef %492)
  %494 = fcmp ogt double %493, %.1512.1
  %.1512.1.1 = select i1 %494, double %493, double %.1512.1
  %495 = fcmp olt double %.1512.1.1, 0x3DDB7CDFE0000000
  br i1 %495, label %452, label %._crit_edge605.split.us.1

._crit_edge605.split.us.1:                        ; preds = %._crit_edge605.split.us
  %496 = select i1 %491, i64 1, i64 -1
  %.1514.1 = select i1 %491, double %489, double 0.000000e+00
  %.1514.1.1 = select i1 %494, double %492, double %.1514.1
  %497 = select i1 %494, i64 2, i64 %496
  %498 = add nsw i64 %497, 3
  %499 = getelementptr inbounds [9 x double], ptr %2, i64 0, i64 %498
  %500 = load double, ptr %499, align 8, !tbaa !37
  store double %489, ptr %499, align 8, !tbaa !37
  %501 = fdiv double %500, %.1514.1.1
  store double %501, ptr %321, align 16, !tbaa !37
  %502 = add nsw i64 %497, 6
  %503 = getelementptr inbounds [9 x double], ptr %2, i64 0, i64 %502
  %504 = load double, ptr %503, align 8, !tbaa !37
  %505 = load double, ptr %327, align 8, !tbaa !37
  store double %505, ptr %503, align 8, !tbaa !37
  %506 = fdiv double %504, %.1514.1.1
  store double %506, ptr %327, align 8, !tbaa !37
  %.phi.trans.insert683 = getelementptr inbounds [3 x double], ptr %3, i64 0, i64 %497
  %.pre684 = load double, ptr %.phi.trans.insert683, align 8, !tbaa !37
  %507 = load double, ptr %328, align 8, !tbaa !37
  %508 = getelementptr inbounds [3 x double], ptr %3, i64 0, i64 %497
  store double %.pre684, ptr %328, align 8, !tbaa !37
  store double %507, ptr %508, align 8, !tbaa !37
  %509 = load double, ptr %328, align 8, !tbaa !37
  %510 = fdiv double %509, %.1514.1.1
  store double %510, ptr %328, align 8, !tbaa !37
  %511 = load double, ptr %326, align 8, !tbaa !37
  %512 = fneg double %511
  %513 = load double, ptr %321, align 16, !tbaa !37
  %514 = tail call double @llvm.fmuladd.f64(double %512, double %513, double %511)
  store double %514, ptr %326, align 8, !tbaa !37
  %515 = load double, ptr %327, align 8, !tbaa !37
  %516 = load double, ptr %322, align 16, !tbaa !37
  %517 = tail call double @llvm.fmuladd.f64(double %512, double %515, double %516)
  store double %517, ptr %322, align 16, !tbaa !37
  %518 = load double, ptr %329, align 16, !tbaa !37
  %519 = tail call double @llvm.fmuladd.f64(double %512, double %510, double %518)
  store double %519, ptr %329, align 16, !tbaa !37
  %520 = tail call double @vl_abs_d(double noundef %517)
  %521 = fcmp ule double %520, 0.000000e+00
  %522 = fcmp olt double %520, 0x3DDB7CDFE0000000
  %523 = or i1 %521, %522
  br i1 %523, label %452, label %._crit_edge605.split.us.2

._crit_edge605.split.us.2:                        ; preds = %._crit_edge605.split.us.1
  %.1514.2 = select i1 %521, double 0.000000e+00, double %517
  %524 = select i1 %521, i64 5, i64 8
  %525 = getelementptr inbounds [9 x double], ptr %2, i64 0, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !37
  store double %517, ptr %525, align 8, !tbaa !37
  %527 = fdiv double %526, %.1514.2
  store double %527, ptr %322, align 16, !tbaa !37
  %.sroa.sel747.v = select i1 %521, i64 -8, i64 16
  %.sroa.sel747 = getelementptr inbounds i8, ptr %3, i64 %.sroa.sel747.v
  %.pre686 = load double, ptr %.sroa.sel747, align 8, !tbaa !37
  %528 = load double, ptr %329, align 16, !tbaa !37
  %.sroa.sel.v = select i1 %521, i64 -8, i64 16
  %.sroa.sel = getelementptr inbounds i8, ptr %3, i64 %.sroa.sel.v
  store double %.pre686, ptr %329, align 16, !tbaa !37
  store double %528, ptr %.sroa.sel, align 8, !tbaa !37
  %529 = load double, ptr %329, align 16, !tbaa !37
  %530 = fdiv double %529, %.1514.2
  store double %530, ptr %329, align 16, !tbaa !37
  %.pre679 = load double, ptr %328, align 8, !tbaa !37
  %.pre680 = load double, ptr %3, align 16, !tbaa !37
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge605.split.us.2, %452
  %531 = phi double [ %.pre680, %._crit_edge605.split.us.2 ], [ 0.000000e+00, %452 ]
  %532 = phi double [ %.pre679, %._crit_edge605.split.us.2 ], [ 0.000000e+00, %452 ]
  %533 = phi double [ %530, %._crit_edge605.split.us.2 ], [ 0.000000e+00, %452 ]
  %534 = fneg double %533
  %535 = load double, ptr %327, align 8, !tbaa !37
  %536 = load double, ptr %325, align 16, !tbaa !37
  %537 = tail call double @llvm.fmuladd.f64(double %534, double %536, double %531)
  %538 = load double, ptr %324, align 8, !tbaa !37
  %539 = icmp slt <2 x i32> %357, %330
  %540 = icmp sgt <2 x i32> %357, <i32 1, i32 1>
  %541 = tail call double @llvm.fmuladd.f64(double %534, double %535, double %532)
  store double %541, ptr %328, align 8, !tbaa !37
  %542 = fneg double %541
  %543 = tail call double @llvm.fmuladd.f64(double %542, double %538, double %537)
  store double %543, ptr %3, align 16, !tbaa !37
  %544 = insertelement <2 x double> poison, double %543, i64 0
  %545 = insertelement <2 x double> %544, double %541, i64 1
  %546 = fcmp ogt <2 x double> %545, <double 6.000000e-01, double 6.000000e-01>
  %547 = select <2 x i1> %546, <2 x i1> %539, <2 x i1> zeroinitializer
  %548 = zext <2 x i1> %547 to <2 x i32>
  %549 = fcmp olt <2 x double> %545, <double -6.000000e-01, double -6.000000e-01>
  %550 = and <2 x i1> %540, %549
  %551 = sext <2 x i1> %550 to <2 x i32>
  %552 = add nsw <2 x i32> %548, %551
  %553 = xor <2 x i1> %547, %550
  %554 = extractelement <2 x i1> %553, i64 0
  %555 = xor <2 x i1> %547, %550
  %556 = extractelement <2 x i1> %555, i64 1
  %or.cond.not622 = select i1 %554, i1 true, i1 %556
  %557 = add nuw nsw i32 %.0518613, 1
  %558 = icmp ult i32 %.0518613, 4
  %or.cond620 = select i1 %or.cond.not622, i1 %558, i1 false
  br i1 %or.cond620, label %.preheader556, label %559, !llvm.loop !38

559:                                              ; preds = %.loopexit
  %560 = load float, ptr %365, align 4, !tbaa !22
  %561 = fpext float %560 to double
  %562 = extractelement <2 x double> %442, i64 1
  %563 = fmul double %562, %541
  %564 = extractelement <2 x double> %442, i64 0
  %565 = tail call double @llvm.fmuladd.f64(double %564, double %543, double %563)
  %566 = tail call double @llvm.fmuladd.f64(double %380, double %533, double %565)
  %567 = tail call double @llvm.fmuladd.f64(double %566, double 5.000000e-01, double %561)
  %568 = sitofp <2 x i32> %357 to <2 x double>
  %569 = fadd <2 x double> %545, %568
  %570 = sitofp i32 %351 to double
  %571 = fadd double %533, %570
  %572 = tail call double @vl_abs_d(double noundef %567)
  %573 = fcmp ogt double %572, %15
  br i1 %573, label %574, label %.critedge

574:                                              ; preds = %559
  %575 = fadd double %385, %388
  %576 = fmul double %575, %575
  %577 = fneg double %434
  %578 = fmul double %434, %577
  %579 = tail call double @llvm.fmuladd.f64(double %385, double %388, double %578)
  %580 = fdiv double %576, %579
  %581 = fcmp olt double %580, %333
  %582 = fcmp oge double %580, 0.000000e+00
  %or.cond3 = and i1 %581, %582
  br i1 %or.cond3, label %583, label %.critedge

583:                                              ; preds = %574
  %584 = tail call double @vl_abs_d(double noundef %543)
  %585 = fcmp olt double %584, 1.500000e+00
  br i1 %585, label %586, label %.critedge

586:                                              ; preds = %583
  %587 = tail call double @vl_abs_d(double noundef %541)
  %588 = fcmp olt double %587, 1.500000e+00
  br i1 %588, label %589, label %.critedge

589:                                              ; preds = %586
  %590 = tail call double @vl_abs_d(double noundef %533)
  %591 = fcmp olt double %590, 1.500000e+00
  %592 = extractelement <2 x double> %569, i64 0
  %593 = fcmp oge double %592, 0.000000e+00
  %or.cond5 = and i1 %591, %593
  br i1 %or.cond5, label %594, label %.critedge

594:                                              ; preds = %589
  %595 = fcmp ole double %592, %335
  %596 = extractelement <2 x double> %569, i64 1
  %597 = fcmp oge double %596, 0.000000e+00
  %or.cond7 = select i1 %595, i1 %597, i1 false
  br i1 %or.cond7, label %598, label %.critedge

598:                                              ; preds = %594
  %599 = fcmp ole double %596, %337
  %600 = fcmp oge double %571, %338
  %601 = fcmp ole double %571, %339
  %602 = and i1 %600, %601
  %or.cond550 = select i1 %599, i1 %602, i1 false
  br i1 %or.cond550, label %603, label %.critedge

603:                                              ; preds = %598
  %604 = load i32, ptr %19, align 4, !tbaa !18
  store i32 %604, ptr %.0504614, align 4, !tbaa !39
  %605 = getelementptr inbounds i8, ptr %.0504614, i64 4
  store <2 x i32> %357, ptr %605, align 4, !tbaa !15
  %606 = getelementptr inbounds i8, ptr %.0504614, i64 12
  store i32 %351, ptr %606, align 4, !tbaa !33
  %607 = fptrunc double %571 to float
  %608 = getelementptr inbounds i8, ptr %.0504614, i64 24
  store float %607, ptr %608, align 4, !tbaa !40
  %609 = fmul <2 x double> %344, %569
  %610 = getelementptr inbounds i8, ptr %.0504614, i64 16
  %611 = fptrunc <2 x double> %609 to <2 x float>
  store <2 x float> %611, ptr %610, align 4, !tbaa !22
  %612 = load double, ptr %340, align 8, !tbaa !41
  %613 = load i32, ptr %341, align 4, !tbaa !42
  %614 = sitofp i32 %613 to double
  %615 = fdiv double %571, %614
  %exp2 = tail call double @exp2(double %615) #7
  %616 = fmul double %612, %exp2
  %617 = fmul double %ldexp, %616
  %618 = fptrunc double %617 to float
  %619 = getelementptr inbounds i8, ptr %.0504614, i64 28
  store float %618, ptr %619, align 4, !tbaa !43
  %620 = getelementptr inbounds i8, ptr %.0504614, i64 32
  br label %.critedge

.critedge:                                        ; preds = %598, %594, %589, %586, %583, %574, %559, %603
  %.1505 = phi ptr [ %620, %603 ], [ %.0504614, %559 ], [ %.0504614, %574 ], [ %.0504614, %583 ], [ %.0504614, %586 ], [ %.0504614, %589 ], [ %.0504614, %594 ], [ %.0504614, %598 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %2) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %621 = load i32, ptr %21, align 8, !tbaa !19
  %622 = sext i32 %621 to i64
  %623 = icmp slt i64 %indvars.iv.next, %622
  br i1 %623, label %345, label %._crit_edge618.loopexit, !llvm.loop !44

._crit_edge618.loopexit:                          ; preds = %.critedge
  %.pre681 = load ptr, ptr %313, align 8, !tbaa !29
  br label %._crit_edge618

._crit_edge618:                                   ; preds = %._crit_edge618.loopexit, %._crit_edge581
  %624 = phi ptr [ %314, %._crit_edge581 ], [ %.pre681, %._crit_edge618.loopexit ]
  %.0504.lcssa = phi ptr [ %314, %._crit_edge581 ], [ %.1505, %._crit_edge618.loopexit ]
  %625 = ptrtoint ptr %.0504.lcssa to i64
  %626 = ptrtoint ptr %624 to i64
  %627 = sub i64 %625, %626
  %628 = lshr exact i64 %627, 5
  %629 = trunc i64 %628 to i32
  store i32 %629, ptr %21, align 8, !tbaa !19
  ret void
}

declare ptr @vl_realloc(ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @vl_abs_d(double noundef) local_unnamed_addr #2

; Function Attrs: nofree willreturn
declare double @ldexp(double, i32) local_unnamed_addr #5

declare double @exp2(double) local_unnamed_addr

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #6

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nofree willreturn }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 80}
!6 = !{!"_VlSiftFilt", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !10, i64 88, !10, i64 92, !11, i64 96, !7, i64 104, !12, i64 112, !11, i64 120, !10, i64 128, !10, i64 132, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !11, i64 176, !10, i64 184}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long long", !8, i64 0}
!13 = !{!6, !10, i64 52}
!14 = !{!6, !10, i64 56}
!15 = !{!10, !10, i64 0}
!16 = !{!6, !7, i64 144}
!17 = !{!6, !7, i64 136}
!18 = !{!6, !10, i64 60}
!19 = !{!6, !10, i64 128}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !8, i64 0}
!24 = distinct !{!24, !21, !25, !26}
!25 = !{!"llvm.loop.isvectorized", i32 1}
!26 = !{!"llvm.loop.unroll.runtime.disable"}
!27 = distinct !{!27, !21, !25}
!28 = !{!6, !10, i64 132}
!29 = !{!6, !11, i64 120}
!30 = !{!31, !10, i64 4}
!31 = !{!"_VlSiftKeypoint", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !23, i64 16, !23, i64 20, !23, i64 24, !23, i64 28}
!32 = !{!31, !10, i64 8}
!33 = !{!31, !10, i64 12}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}
!37 = !{!7, !7, i64 0}
!38 = distinct !{!38, !21}
!39 = !{!31, !10, i64 0}
!40 = !{!31, !23, i64 24}
!41 = !{!6, !7, i64 8}
!42 = !{!6, !10, i64 44}
!43 = !{!31, !23, i64 28}
!44 = distinct !{!44, !21}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass