; LLVM IR from vlfeat/vlfeat :: vl (covdet)

; 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"

%union.anon = type { i64 }
%struct._VlScaleSpaceGeometry = type { i64, i64, i64, i64, i64, i64, i64, double, double }
%struct._VlScaleSpaceOctaveGeometry = type { i64, i64, double }
%struct._VlCovDet = type { ptr, ptr, i32, double, double, double, i64, i64, i64, double, i64, double, i64, ptr, i64, i64, ptr, i64, i32, [4 x %struct._VlCovDetFeatureOrientation], [4 x %struct._VlCovDetFeatureLaplacianScale], i32, [1681 x float], [1681 x float], [1681 x float], [1681 x float], [1089 x float], [10890 x float], [5 x i64], i32 }
%struct._VlCovDetFeatureOrientation = type { double, double }
%struct._VlCovDetFeatureLaplacianScale = type { double, double }

@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@vl_infinity_d = external hidden constant %union.anon, align 8
@.str.18 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [35 x i8], align 1
@__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper = external hidden unnamed_addr constant [141 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1

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

; Function Attrs: nounwind uwtable
declare hidden i32 @_vl_resize_buffer(ptr noundef, ptr noundef, i64 noundef) #1

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @vl_floor_d(double noundef) #7

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @vl_log2_d(double noundef) #7

declare void @vl_scalespace_get_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceGeometry) align 8, ptr noundef) #8

declare void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8, ptr noundef, i64 noundef) #8

declare ptr @vl_scalespace_get_level(ptr noundef, i64 noundef, i64 noundef) #8

; Function Attrs: nounwind uwtable
define dso_local i32 @vl_covdet_extract_patch_helper(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %4, double noundef %5, double noundef %6, ptr noundef %7, ptr noundef %8, double noundef %9, double noundef %10) #1 {
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca double, align 8
  %32 = alloca [4 x double], align 16
  %33 = alloca [2 x double], align 16
  %34 = alloca %struct._VlScaleSpaceGeometry, align 8
  %35 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %36 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca [4 x double], align 16
  %46 = alloca [4 x double], align 16
  %47 = alloca i32, align 4
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca i32, align 4
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = alloca i64, align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i32, align 4
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca double, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca i64, align 8
  %74 = alloca i64, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca double, align 8
  %80 = alloca double, align 8
  store ptr %0, ptr %13, align 8, !tbaa !5
  store ptr %1, ptr %14, align 8, !tbaa !5
  store ptr %2, ptr %15, align 8, !tbaa !5
  store ptr %3, ptr %16, align 8, !tbaa !5
  store i64 %4, ptr %17, align 8, !tbaa !9
  store double %5, ptr %18, align 8, !tbaa !11
  store double %6, ptr %19, align 8, !tbaa !11
  store ptr %7, ptr %20, align 8, !tbaa !5
  store ptr %8, ptr %21, align 8, !tbaa !5
  store double %9, ptr %22, align 8, !tbaa !11
  store double %10, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #9
  %81 = load ptr, ptr %20, align 8, !tbaa !5
  %82 = getelementptr inbounds double, ptr %81, i64 0
  %83 = load double, ptr %82, align 8, !tbaa !11
  store double %83, ptr %32, align 8, !tbaa !11
  %84 = getelementptr inbounds double, ptr %32, i64 1
  %85 = load ptr, ptr %20, align 8, !tbaa !5
  %86 = getelementptr inbounds double, ptr %85, i64 1
  %87 = load double, ptr %86, align 8, !tbaa !11
  store double %87, ptr %84, align 8, !tbaa !11
  %88 = getelementptr inbounds double, ptr %32, i64 2
  %89 = load ptr, ptr %20, align 8, !tbaa !5
  %90 = getelementptr inbounds double, ptr %89, i64 2
  %91 = load double, ptr %90, align 8, !tbaa !11
  store double %91, ptr %88, align 8, !tbaa !11
  %92 = getelementptr inbounds double, ptr %32, i64 3
  %93 = load ptr, ptr %20, align 8, !tbaa !5
  %94 = getelementptr inbounds double, ptr %93, i64 3
  %95 = load double, ptr %94, align 8, !tbaa !11
  store double %95, ptr %92, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #9
  %96 = load ptr, ptr %21, align 8, !tbaa !5
  %97 = getelementptr inbounds double, ptr %96, i64 0
  %98 = load double, ptr %97, align 8, !tbaa !11
  store double %98, ptr %33, align 8, !tbaa !11
  %99 = getelementptr inbounds double, ptr %33, i64 1
  %100 = load ptr, ptr %21, align 8, !tbaa !5
  %101 = getelementptr inbounds double, ptr %100, i64 1
  %102 = load double, ptr %101, align 8, !tbaa !11
  store double %102, ptr %99, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 72, ptr %34) #9
  %103 = load ptr, ptr %13, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct._VlCovDet, ptr %103, i32 0, i32 0
  %105 = load ptr, ptr %104, align 8, !tbaa !13
  call void @vl_scalespace_get_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceGeometry) align 8 %34, ptr noundef %105)
  call void @llvm.lifetime.start.p0(i64 24, ptr %35) #9
  %106 = load double, ptr %22, align 8, !tbaa !11
  %107 = load double, ptr %23, align 8, !tbaa !11
  %108 = fcmp olt double %106, %107
  br i1 %108, label %109, label %111

109:                                              ; preds = %11
  %110 = load double, ptr %22, align 8, !tbaa !11
  br label %113

111:                                              ; preds = %11
  %112 = load double, ptr %23, align 8, !tbaa !11
  br label %113

113:                                              ; preds = %111, %109
  %114 = phi double [ %110, %109 ], [ %112, %111 ]
  %115 = fdiv double 1.000000e+00, %114
  store double %115, ptr %26, align 8, !tbaa !11
  %116 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 2
  %117 = load i64, ptr %116, align 8, !tbaa !16
  %118 = add nsw i64 %117, 1
  store i64 %118, ptr %24, align 8, !tbaa !9
  br label %119

119:                                              ; preds = %180, %113
  %120 = load i64, ptr %24, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 3
  %122 = load i64, ptr %121, align 8, !tbaa !18
  %123 = icmp sle i64 %120, %122
  br i1 %123, label %124, label %183

124:                                              ; preds = %119
  %125 = load double, ptr %19, align 8, !tbaa !11
  %126 = load double, ptr %26, align 8, !tbaa !11
  %127 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 7
  %128 = load double, ptr %127, align 8, !tbaa !19
  %129 = fmul double %126, %128
  %130 = fdiv double %125, %129
  %131 = call double @vl_log2_d(double noundef %130)
  %132 = load i64, ptr %24, align 8, !tbaa !9
  %133 = sitofp i64 %132 to double
  %134 = fsub double %131, %133
  %135 = call i64 @vl_floor_d(double noundef %134)
  store i64 %135, ptr %25, align 8, !tbaa !9
  %136 = load i64, ptr %25, align 8, !tbaa !9
  %137 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 5
  %138 = load i64, ptr %137, align 8, !tbaa !20
  %139 = icmp sgt i64 %136, %138
  br i1 %139, label %140, label %142

140:                                              ; preds = %124
  %141 = load i64, ptr %25, align 8, !tbaa !9
  br label %145

142:                                              ; preds = %124
  %143 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 5
  %144 = load i64, ptr %143, align 8, !tbaa !20
  br label %145

145:                                              ; preds = %142, %140
  %146 = phi i64 [ %141, %140 ], [ %144, %142 ]
  store i64 %146, ptr %25, align 8, !tbaa !9
  %147 = load i64, ptr %25, align 8, !tbaa !9
  %148 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 6
  %149 = load i64, ptr %148, align 8, !tbaa !21
  %150 = icmp slt i64 %147, %149
  br i1 %150, label %151, label %153

151:                                              ; preds = %145
  %152 = load i64, ptr %25, align 8, !tbaa !9
  br label %156

153:                                              ; preds = %145
  %154 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 6
  %155 = load i64, ptr %154, align 8, !tbaa !21
  br label %156

156:                                              ; preds = %153, %151
  %157 = phi i64 [ %152, %151 ], [ %155, %153 ]
  store i64 %157, ptr %25, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 7
  %159 = load double, ptr %158, align 8, !tbaa !19
  %160 = load i64, ptr %24, align 8, !tbaa !9
  %161 = sitofp i64 %160 to double
  %162 = load i64, ptr %25, align 8, !tbaa !9
  %163 = sitofp i64 %162 to double
  %164 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 4
  %165 = load i64, ptr %164, align 8, !tbaa !22
  %166 = uitofp i64 %165 to double
  %167 = fdiv double %163, %166
  %168 = fadd double %161, %167
  %169 = call double @pow(double noundef 2.000000e+00, double noundef %168) #9
  %170 = fmul double %159, %169
  store double %170, ptr %27, align 8, !tbaa !11
  %171 = load double, ptr %26, align 8, !tbaa !11
  %172 = load double, ptr %27, align 8, !tbaa !11
  %173 = fmul double %171, %172
  %174 = load double, ptr %19, align 8, !tbaa !11
  %175 = fcmp ogt double %173, %174
  br i1 %175, label %176, label %179

176:                                              ; preds = %156
  %177 = load i64, ptr %24, align 8, !tbaa !9
  %178 = add nsw i64 %177, -1
  store i64 %178, ptr %24, align 8, !tbaa !9
  br label %183

179:                                              ; preds = %156
  br label %180

180:                                              ; preds = %179
  %181 = load i64, ptr %24, align 8, !tbaa !9
  %182 = add nsw i64 %181, 1
  store i64 %182, ptr %24, align 8, !tbaa !9
  br label %119, !llvm.loop !23

183:                                              ; preds = %176, %119
  %184 = load i64, ptr %24, align 8, !tbaa !9
  %185 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 3
  %186 = load i64, ptr %185, align 8, !tbaa !18
  %187 = icmp slt i64 %184, %186
  br i1 %187, label %188, label %190

188:                                              ; preds = %183
  %189 = load i64, ptr %24, align 8, !tbaa !9
  br label %193

190:                                              ; preds = %183
  %191 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 3
  %192 = load i64, ptr %191, align 8, !tbaa !18
  br label %193

193:                                              ; preds = %190, %188
  %194 = phi i64 [ %189, %188 ], [ %192, %190 ]
  store i64 %194, ptr %24, align 8, !tbaa !9
  %195 = load double, ptr %19, align 8, !tbaa !11
  %196 = load double, ptr %26, align 8, !tbaa !11
  %197 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 7
  %198 = load double, ptr %197, align 8, !tbaa !19
  %199 = fmul double %196, %198
  %200 = fdiv double %195, %199
  %201 = call double @vl_log2_d(double noundef %200)
  %202 = load i64, ptr %24, align 8, !tbaa !9
  %203 = sitofp i64 %202 to double
  %204 = fsub double %201, %203
  %205 = call i64 @vl_floor_d(double noundef %204)
  store i64 %205, ptr %25, align 8, !tbaa !9
  %206 = load i64, ptr %25, align 8, !tbaa !9
  %207 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 5
  %208 = load i64, ptr %207, align 8, !tbaa !20
  %209 = icmp sgt i64 %206, %208
  br i1 %209, label %210, label %212

210:                                              ; preds = %193
  %211 = load i64, ptr %25, align 8, !tbaa !9
  br label %215

212:                                              ; preds = %193
  %213 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 5
  %214 = load i64, ptr %213, align 8, !tbaa !20
  br label %215

215:                                              ; preds = %212, %210
  %216 = phi i64 [ %211, %210 ], [ %214, %212 ]
  store i64 %216, ptr %25, align 8, !tbaa !9
  %217 = load i64, ptr %25, align 8, !tbaa !9
  %218 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 6
  %219 = load i64, ptr %218, align 8, !tbaa !21
  %220 = icmp slt i64 %217, %219
  br i1 %220, label %221, label %223

221:                                              ; preds = %215
  %222 = load i64, ptr %25, align 8, !tbaa !9
  br label %226

223:                                              ; preds = %215
  %224 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 6
  %225 = load i64, ptr %224, align 8, !tbaa !21
  br label %226

226:                                              ; preds = %223, %221
  %227 = phi i64 [ %222, %221 ], [ %225, %223 ]
  store i64 %227, ptr %25, align 8, !tbaa !9
  %228 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 7
  %229 = load double, ptr %228, align 8, !tbaa !19
  %230 = load i64, ptr %24, align 8, !tbaa !9
  %231 = sitofp i64 %230 to double
  %232 = load i64, ptr %25, align 8, !tbaa !9
  %233 = sitofp i64 %232 to double
  %234 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %34, i32 0, i32 4
  %235 = load i64, ptr %234, align 8, !tbaa !22
  %236 = uitofp i64 %235 to double
  %237 = fdiv double %233, %236
  %238 = fadd double %231, %237
  %239 = call double @pow(double noundef 2.000000e+00, double noundef %238) #9
  %240 = fmul double %229, %239
  store double %240, ptr %27, align 8, !tbaa !11
  %241 = load ptr, ptr %14, align 8, !tbaa !5
  %242 = icmp ne ptr %241, null
  br i1 %242, label %243, label %248

243:                                              ; preds = %226
  %244 = load double, ptr %27, align 8, !tbaa !11
  %245 = load double, ptr %22, align 8, !tbaa !11
  %246 = fdiv double %244, %245
  %247 = load ptr, ptr %14, align 8, !tbaa !5
  store double %246, ptr %247, align 8, !tbaa !11
  br label %248

248:                                              ; preds = %243, %226
  %249 = load ptr, ptr %15, align 8, !tbaa !5
  %250 = icmp ne ptr %249, null
  br i1 %250, label %251, label %256

251:                                              ; preds = %248
  %252 = load double, ptr %27, align 8, !tbaa !11
  %253 = load double, ptr %23, align 8, !tbaa !11
  %254 = fdiv double %252, %253
  %255 = load ptr, ptr %15, align 8, !tbaa !5
  store double %254, ptr %255, align 8, !tbaa !11
  br label %256

256:                                              ; preds = %251, %248
  %257 = load ptr, ptr %13, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct._VlCovDet, ptr %257, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !13
  %260 = load i64, ptr %24, align 8, !tbaa !9
  %261 = load i64, ptr %25, align 8, !tbaa !9
  %262 = call ptr @vl_scalespace_get_level(ptr noundef %259, i64 noundef %260, i64 noundef %261)
  store ptr %262, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #9
  %263 = load ptr, ptr %13, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct._VlCovDet, ptr %263, i32 0, i32 0
  %265 = load ptr, ptr %264, align 8, !tbaa !13
  %266 = load i64, ptr %24, align 8, !tbaa !9
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %36, ptr noundef %265, i64 noundef %266)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 %36, i64 24, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #9
  %267 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %35, i32 0, i32 0
  %268 = load i64, ptr %267, align 8, !tbaa !26
  store i64 %268, ptr %29, align 8, !tbaa !9
  %269 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %35, i32 0, i32 1
  %270 = load i64, ptr %269, align 8, !tbaa !28
  store i64 %270, ptr %30, align 8, !tbaa !9
  %271 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %35, i32 0, i32 2
  %272 = load double, ptr %271, align 8, !tbaa !29
  store double %272, ptr %31, align 8, !tbaa !11
  %273 = load double, ptr %31, align 8, !tbaa !11
  %274 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 0
  %275 = load double, ptr %274, align 16, !tbaa !11
  %276 = fdiv double %275, %273
  store double %276, ptr %274, align 16, !tbaa !11
  %277 = load double, ptr %31, align 8, !tbaa !11
  %278 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 1
  %279 = load double, ptr %278, align 8, !tbaa !11
  %280 = fdiv double %279, %277
  store double %280, ptr %278, align 8, !tbaa !11
  %281 = load double, ptr %31, align 8, !tbaa !11
  %282 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 2
  %283 = load double, ptr %282, align 16, !tbaa !11
  %284 = fdiv double %283, %281
  store double %284, ptr %282, align 16, !tbaa !11
  %285 = load double, ptr %31, align 8, !tbaa !11
  %286 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 3
  %287 = load double, ptr %286, align 8, !tbaa !11
  %288 = fdiv double %287, %285
  store double %288, ptr %286, align 8, !tbaa !11
  %289 = load double, ptr %31, align 8, !tbaa !11
  %290 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 0
  %291 = load double, ptr %290, align 16, !tbaa !11
  %292 = fdiv double %291, %289
  store double %292, ptr %290, align 16, !tbaa !11
  %293 = load double, ptr %31, align 8, !tbaa !11
  %294 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 1
  %295 = load double, ptr %294, align 8, !tbaa !11
  %296 = fdiv double %295, %293
  store double %296, ptr %294, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %297 = load double, ptr @vl_infinity_d, align 8, !tbaa !30
  store double %297, ptr %41, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %298 = load double, ptr @vl_infinity_d, align 8, !tbaa !30
  %299 = fneg double %298
  store double %299, ptr %42, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %300 = load double, ptr @vl_infinity_d, align 8, !tbaa !30
  store double %300, ptr %43, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %301 = load double, ptr @vl_infinity_d, align 8, !tbaa !30
  %302 = fneg double %301
  store double %302, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #9
  %303 = load double, ptr %18, align 8, !tbaa !11
  store double %303, ptr %45, align 8, !tbaa !11
  %304 = getelementptr inbounds double, ptr %45, i64 1
  %305 = load double, ptr %18, align 8, !tbaa !11
  store double %305, ptr %304, align 8, !tbaa !11
  %306 = getelementptr inbounds double, ptr %45, i64 2
  %307 = load double, ptr %18, align 8, !tbaa !11
  %308 = fneg double %307
  store double %308, ptr %306, align 8, !tbaa !11
  %309 = getelementptr inbounds double, ptr %45, i64 3
  %310 = load double, ptr %18, align 8, !tbaa !11
  %311 = fneg double %310
  store double %311, ptr %309, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #9
  %312 = load double, ptr %18, align 8, !tbaa !11
  %313 = fneg double %312
  store double %313, ptr %46, align 8, !tbaa !11
  %314 = getelementptr inbounds double, ptr %46, i64 1
  %315 = load double, ptr %18, align 8, !tbaa !11
  store double %315, ptr %314, align 8, !tbaa !11
  %316 = getelementptr inbounds double, ptr %46, i64 2
  %317 = load double, ptr %18, align 8, !tbaa !11
  store double %317, ptr %316, align 8, !tbaa !11
  %318 = getelementptr inbounds double, ptr %46, i64 3
  %319 = load double, ptr %18, align 8, !tbaa !11
  %320 = fneg double %319
  store double %320, ptr %318, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  store i32 0, ptr %47, align 4, !tbaa !31
  br label %321

321:                                              ; preds = %395, %256
  %322 = load i32, ptr %47, align 4, !tbaa !31
  %323 = icmp slt i32 %322, 4
  br i1 %323, label %324, label %398

324:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %325 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 0
  %326 = load double, ptr %325, align 16, !tbaa !11
  %327 = load i32, ptr %47, align 4, !tbaa !31
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds [4 x double], ptr %45, i64 0, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !11
  %331 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 2
  %332 = load double, ptr %331, align 16, !tbaa !11
  %333 = load i32, ptr %47, align 4, !tbaa !31
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds [4 x double], ptr %46, i64 0, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !11
  %337 = fmul double %332, %336
  %338 = call double @llvm.fmuladd.f64(double %326, double %330, double %337)
  %339 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 0
  %340 = load double, ptr %339, align 16, !tbaa !11
  %341 = fadd double %338, %340
  store double %341, ptr %48, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %342 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 1
  %343 = load double, ptr %342, align 8, !tbaa !11
  %344 = load i32, ptr %47, align 4, !tbaa !31
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [4 x double], ptr %45, i64 0, i64 %345
  %347 = load double, ptr %346, align 8, !tbaa !11
  %348 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 3
  %349 = load double, ptr %348, align 8, !tbaa !11
  %350 = load i32, ptr %47, align 4, !tbaa !31
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds [4 x double], ptr %46, i64 0, i64 %351
  %353 = load double, ptr %352, align 8, !tbaa !11
  %354 = fmul double %349, %353
  %355 = call double @llvm.fmuladd.f64(double %343, double %347, double %354)
  %356 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 1
  %357 = load double, ptr %356, align 8, !tbaa !11
  %358 = fadd double %355, %357
  store double %358, ptr %49, align 8, !tbaa !11
  %359 = load double, ptr %41, align 8, !tbaa !11
  %360 = load double, ptr %48, align 8, !tbaa !11
  %361 = fcmp olt double %359, %360
  br i1 %361, label %362, label %364

362:                                              ; preds = %324
  %363 = load double, ptr %41, align 8, !tbaa !11
  br label %366

364:                                              ; preds = %324
  %365 = load double, ptr %48, align 8, !tbaa !11
  br label %366

366:                                              ; preds = %364, %362
  %367 = phi double [ %363, %362 ], [ %365, %364 ]
  store double %367, ptr %41, align 8, !tbaa !11
  %368 = load double, ptr %42, align 8, !tbaa !11
  %369 = load double, ptr %48, align 8, !tbaa !11
  %370 = fcmp ogt double %368, %369
  br i1 %370, label %371, label %373

371:                                              ; preds = %366
  %372 = load double, ptr %42, align 8, !tbaa !11
  br label %375

373:                                              ; preds = %366
  %374 = load double, ptr %48, align 8, !tbaa !11
  br label %375

375:                                              ; preds = %373, %371
  %376 = phi double [ %372, %371 ], [ %374, %373 ]
  store double %376, ptr %42, align 8, !tbaa !11
  %377 = load double, ptr %43, align 8, !tbaa !11
  %378 = load double, ptr %49, align 8, !tbaa !11
  %379 = fcmp olt double %377, %378
  br i1 %379, label %380, label %382

380:                                              ; preds = %375
  %381 = load double, ptr %43, align 8, !tbaa !11
  br label %384

382:                                              ; preds = %375
  %383 = load double, ptr %49, align 8, !tbaa !11
  br label %384

384:                                              ; preds = %382, %380
  %385 = phi double [ %381, %380 ], [ %383, %382 ]
  store double %385, ptr %43, align 8, !tbaa !11
  %386 = load double, ptr %44, align 8, !tbaa !11
  %387 = load double, ptr %49, align 8, !tbaa !11
  %388 = fcmp ogt double %386, %387
  br i1 %388, label %389, label %391

389:                                              ; preds = %384
  %390 = load double, ptr %44, align 8, !tbaa !11
  br label %393

391:                                              ; preds = %384
  %392 = load double, ptr %49, align 8, !tbaa !11
  br label %393

393:                                              ; preds = %391, %389
  %394 = phi double [ %390, %389 ], [ %392, %391 ]
  store double %394, ptr %44, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %395

395:                                              ; preds = %393
  %396 = load i32, ptr %47, align 4, !tbaa !31
  %397 = add nsw i32 %396, 1
  store i32 %397, ptr %47, align 4, !tbaa !31
  br label %321, !llvm.loop !32

398:                                              ; preds = %321
  %399 = load double, ptr %41, align 8, !tbaa !11
  %400 = fcmp olt double %399, 0.000000e+00
  br i1 %400, label %418, label %401

401:                                              ; preds = %398
  %402 = load double, ptr %42, align 8, !tbaa !11
  %403 = load i64, ptr %29, align 8, !tbaa !9
  %404 = trunc i64 %403 to i32
  %405 = sub nsw i32 %404, 1
  %406 = sitofp i32 %405 to double
  %407 = fcmp ogt double %402, %406
  br i1 %407, label %418, label %408

408:                                              ; preds = %401
  %409 = load double, ptr %43, align 8, !tbaa !11
  %410 = fcmp olt double %409, 0.000000e+00
  br i1 %410, label %418, label %411

411:                                              ; preds = %408
  %412 = load double, ptr %44, align 8, !tbaa !11
  %413 = load i64, ptr %30, align 8, !tbaa !9
  %414 = trunc i64 %413 to i32
  %415 = sub nsw i32 %414, 1
  %416 = sitofp i32 %415 to double
  %417 = fcmp ogt double %412, %416
  br i1 %417, label %418, label %425

418:                                              ; preds = %411, %408, %401, %398
  %419 = load ptr, ptr %13, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct._VlCovDet, ptr %419, i32 0, i32 29
  %421 = load i32, ptr %420, align 8, !tbaa !33
  %422 = icmp ne i32 %421, 0
  br i1 %422, label %425, label %423

423:                                              ; preds = %418
  %424 = call i32 (i32, ptr, ...) @vl_set_last_error(i32 noundef 5, ptr noundef @.str.18)
  store i32 %424, ptr %12, align 4
  store i32 1, ptr %50, align 4
  br label %744

425:                                              ; preds = %418, %411
  %426 = load double, ptr %41, align 8, !tbaa !11
  %427 = call double @llvm.floor.f64(double %426)
  %428 = fsub double %427, 1.000000e+00
  %429 = fptosi double %428 to i64
  store i64 %429, ptr %37, align 8, !tbaa !9
  %430 = load double, ptr %43, align 8, !tbaa !11
  %431 = call double @llvm.floor.f64(double %430)
  %432 = fsub double %431, 1.000000e+00
  %433 = fptosi double %432 to i64
  store i64 %433, ptr %38, align 8, !tbaa !9
  %434 = load double, ptr %42, align 8, !tbaa !11
  %435 = call double @llvm.ceil.f64(double %434)
  %436 = fadd double %435, 1.000000e+00
  %437 = fptosi double %436 to i64
  store i64 %437, ptr %39, align 8, !tbaa !9
  %438 = load double, ptr %44, align 8, !tbaa !11
  %439 = call double @llvm.ceil.f64(double %438)
  %440 = fadd double %439, 1.000000e+00
  %441 = fptosi double %440 to i64
  store i64 %441, ptr %40, align 8, !tbaa !9
  %442 = load i64, ptr %37, align 8, !tbaa !9
  %443 = icmp slt i64 %442, 0
  br i1 %443, label %461, label %444

444:                                              ; preds = %425
  %445 = load i64, ptr %39, align 8, !tbaa !9
  %446 = load i64, ptr %29, align 8, !tbaa !9
  %447 = trunc i64 %446 to i32
  %448 = sub nsw i32 %447, 1
  %449 = sext i32 %448 to i64
  %450 = icmp sgt i64 %445, %449
  br i1 %450, label %461, label %451

451:                                              ; preds = %444
  %452 = load i64, ptr %38, align 8, !tbaa !9
  %453 = icmp slt i64 %452, 0
  br i1 %453, label %461, label %454

454:                                              ; preds = %451
  %455 = load i64, ptr %40, align 8, !tbaa !9
  %456 = load i64, ptr %30, align 8, !tbaa !9
  %457 = trunc i64 %456 to i32
  %458 = sub nsw i32 %457, 1
  %459 = sext i32 %458 to i64
  %460 = icmp sgt i64 %455, %459
  br i1 %460, label %461, label %743

461:                                              ; preds = %454, %451, %444, %425
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %462 = load i64, ptr %37, align 8, !tbaa !9
  %463 = sub nsw i64 0, %462
  %464 = icmp sgt i64 0, %463
  br i1 %464, label %465, label %466

465:                                              ; preds = %461
  br label %469

466:                                              ; preds = %461
  %467 = load i64, ptr %37, align 8, !tbaa !9
  %468 = sub nsw i64 0, %467
  br label %469

469:                                              ; preds = %466, %465
  %470 = phi i64 [ 0, %465 ], [ %468, %466 ]
  store i64 %470, ptr %53, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %471 = load i64, ptr %38, align 8, !tbaa !9
  %472 = sub nsw i64 0, %471
  %473 = icmp sgt i64 0, %472
  br i1 %473, label %474, label %475

474:                                              ; preds = %469
  br label %478

475:                                              ; preds = %469
  %476 = load i64, ptr %38, align 8, !tbaa !9
  %477 = sub nsw i64 0, %476
  br label %478

478:                                              ; preds = %475, %474
  %479 = phi i64 [ 0, %474 ], [ %477, %475 ]
  store i64 %479, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %480 = load i64, ptr %39, align 8, !tbaa !9
  %481 = load i64, ptr %29, align 8, !tbaa !9
  %482 = trunc i64 %481 to i32
  %483 = sub nsw i32 %482, 1
  %484 = sext i32 %483 to i64
  %485 = sub nsw i64 %480, %484
  %486 = icmp sgt i64 0, %485
  br i1 %486, label %487, label %488

487:                                              ; preds = %478
  br label %495

488:                                              ; preds = %478
  %489 = load i64, ptr %39, align 8, !tbaa !9
  %490 = load i64, ptr %29, align 8, !tbaa !9
  %491 = trunc i64 %490 to i32
  %492 = sub nsw i32 %491, 1
  %493 = sext i32 %492 to i64
  %494 = sub nsw i64 %489, %493
  br label %495

495:                                              ; preds = %488, %487
  %496 = phi i64 [ 0, %487 ], [ %494, %488 ]
  store i64 %496, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #9
  %497 = load i64, ptr %40, align 8, !tbaa !9
  %498 = load i64, ptr %30, align 8, !tbaa !9
  %499 = trunc i64 %498 to i32
  %500 = sub nsw i32 %499, 1
  %501 = sext i32 %500 to i64
  %502 = sub nsw i64 %497, %501
  %503 = icmp sgt i64 0, %502
  br i1 %503, label %504, label %505

504:                                              ; preds = %495
  br label %512

505:                                              ; preds = %495
  %506 = load i64, ptr %40, align 8, !tbaa !9
  %507 = load i64, ptr %30, align 8, !tbaa !9
  %508 = trunc i64 %507 to i32
  %509 = sub nsw i32 %508, 1
  %510 = sext i32 %509 to i64
  %511 = sub nsw i64 %506, %510
  br label %512

512:                                              ; preds = %505, %504
  %513 = phi i64 [ 0, %504 ], [ %511, %505 ]
  store i64 %513, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  %514 = load i64, ptr %39, align 8, !tbaa !9
  %515 = load i64, ptr %37, align 8, !tbaa !9
  %516 = sub nsw i64 %514, %515
  %517 = add nsw i64 %516, 1
  store i64 %517, ptr %57, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %518 = load i64, ptr %40, align 8, !tbaa !9
  %519 = load i64, ptr %38, align 8, !tbaa !9
  %520 = sub nsw i64 %518, %519
  %521 = add nsw i64 %520, 1
  store i64 %521, ptr %58, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %522 = load i64, ptr %57, align 8, !tbaa !9
  %523 = load i64, ptr %58, align 8, !tbaa !9
  %524 = mul nsw i64 %522, %523
  %525 = mul i64 %524, 4
  store i64 %525, ptr %59, align 8, !tbaa !9
  %526 = load i64, ptr %59, align 8, !tbaa !9
  %527 = load ptr, ptr %13, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct._VlCovDet, ptr %527, i32 0, i32 17
  %529 = load i64, ptr %528, align 8, !tbaa !34
  %530 = icmp ugt i64 %526, %529
  br i1 %530, label %531, label %546

531:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #9
  %532 = load ptr, ptr %13, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct._VlCovDet, ptr %532, i32 0, i32 16
  %534 = load ptr, ptr %13, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct._VlCovDet, ptr %534, i32 0, i32 17
  %536 = load i64, ptr %59, align 8, !tbaa !9
  %537 = call i32 @_vl_resize_buffer(ptr noundef %533, ptr noundef %535, i64 noundef %536)
  store i32 %537, ptr %60, align 4, !tbaa !31
  %538 = load i32, ptr %60, align 4, !tbaa !31
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %542

540:                                              ; preds = %531
  %541 = call i32 (i32, ptr, ...) @vl_set_last_error(i32 noundef 2, ptr noundef @.str.19)
  store i32 %541, ptr %12, align 4
  store i32 1, ptr %50, align 4
  br label %543

542:                                              ; preds = %531
  store i32 0, ptr %50, align 4
  br label %543

543:                                              ; preds = %542, %540
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #9
  %544 = load i32, ptr %50, align 4
  switch i32 %544, label %740 [
    i32 0, label %545
  ]

545:                                              ; preds = %543
  br label %546

546:                                              ; preds = %545, %512
  %547 = load i64, ptr %54, align 8, !tbaa !9
  %548 = load i64, ptr %58, align 8, !tbaa !9
  %549 = load i64, ptr %56, align 8, !tbaa !9
  %550 = sub nsw i64 %548, %549
  %551 = icmp slt i64 %547, %550
  br i1 %551, label %552, label %717

552:                                              ; preds = %546
  %553 = load i64, ptr %38, align 8, !tbaa !9
  %554 = load i64, ptr %54, align 8, !tbaa !9
  %555 = add nsw i64 %553, %554
  store i64 %555, ptr %52, align 8, !tbaa !9
  br label %556

556:                                              ; preds = %657, %552
  %557 = load i64, ptr %52, align 8, !tbaa !9
  %558 = load i64, ptr %38, align 8, !tbaa !9
  %559 = load i64, ptr %58, align 8, !tbaa !9
  %560 = add nsw i64 %558, %559
  %561 = load i64, ptr %56, align 8, !tbaa !9
  %562 = sub nsw i64 %560, %561
  %563 = icmp slt i64 %557, %562
  br i1 %563, label %564, label %660

564:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %565 = load ptr, ptr %13, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct._VlCovDet, ptr %565, i32 0, i32 16
  %567 = load ptr, ptr %566, align 8, !tbaa !35
  %568 = load i64, ptr %52, align 8, !tbaa !9
  %569 = load i64, ptr %38, align 8, !tbaa !9
  %570 = sub nsw i64 %568, %569
  %571 = load i64, ptr %57, align 8, !tbaa !9
  %572 = mul nsw i64 %570, %571
  %573 = getelementptr inbounds float, ptr %567, i64 %572
  store ptr %573, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %574 = load ptr, ptr %28, align 8, !tbaa !5
  %575 = load i64, ptr %52, align 8, !tbaa !9
  %576 = load i64, ptr %29, align 8, !tbaa !9
  %577 = mul i64 %575, %576
  %578 = getelementptr inbounds float, ptr %574, i64 %577
  %579 = load i64, ptr %37, align 8, !tbaa !9
  %580 = icmp sgt i64 0, %579
  br i1 %580, label %581, label %582

581:                                              ; preds = %564
  br label %584

582:                                              ; preds = %564
  %583 = load i64, ptr %37, align 8, !tbaa !9
  br label %584

584:                                              ; preds = %582, %581
  %585 = phi i64 [ 0, %581 ], [ %583, %582 ]
  %586 = load i64, ptr %29, align 8, !tbaa !9
  %587 = trunc i64 %586 to i32
  %588 = sub nsw i32 %587, 1
  %589 = sext i32 %588 to i64
  %590 = icmp slt i64 %585, %589
  br i1 %590, label %591, label %599

591:                                              ; preds = %584
  %592 = load i64, ptr %37, align 8, !tbaa !9
  %593 = icmp sgt i64 0, %592
  br i1 %593, label %594, label %595

594:                                              ; preds = %591
  br label %597

595:                                              ; preds = %591
  %596 = load i64, ptr %37, align 8, !tbaa !9
  br label %597

597:                                              ; preds = %595, %594
  %598 = phi i64 [ 0, %594 ], [ %596, %595 ]
  br label %604

599:                                              ; preds = %584
  %600 = load i64, ptr %29, align 8, !tbaa !9
  %601 = trunc i64 %600 to i32
  %602 = sub nsw i32 %601, 1
  %603 = sext i32 %602 to i64
  br label %604

604:                                              ; preds = %599, %597
  %605 = phi i64 [ %598, %597 ], [ %603, %599 ]
  %606 = getelementptr inbounds float, ptr %578, i64 %605
  store ptr %606, ptr %62, align 8, !tbaa !5
  %607 = load i64, ptr %37, align 8, !tbaa !9
  store i64 %607, ptr %51, align 8, !tbaa !9
  br label %608

608:                                              ; preds = %619, %604
  %609 = load i64, ptr %51, align 8, !tbaa !9
  %610 = load i64, ptr %37, align 8, !tbaa !9
  %611 = load i64, ptr %53, align 8, !tbaa !9
  %612 = add nsw i64 %610, %611
  %613 = icmp slt i64 %609, %612
  br i1 %613, label %614, label %622

614:                                              ; preds = %608
  %615 = load ptr, ptr %62, align 8, !tbaa !5
  %616 = load float, ptr %615, align 4, !tbaa !36
  %617 = load ptr, ptr %61, align 8, !tbaa !5
  %618 = getelementptr inbounds float, ptr %617, i32 1
  store ptr %618, ptr %61, align 8, !tbaa !5
  store float %616, ptr %617, align 4, !tbaa !36
  br label %619

619:                                              ; preds = %614
  %620 = load i64, ptr %51, align 8, !tbaa !9
  %621 = add nsw i64 %620, 1
  store i64 %621, ptr %51, align 8, !tbaa !9
  br label %608, !llvm.loop !38

622:                                              ; preds = %608
  br label %623

623:                                              ; preds = %638, %622
  %624 = load i64, ptr %51, align 8, !tbaa !9
  %625 = load i64, ptr %37, align 8, !tbaa !9
  %626 = load i64, ptr %57, align 8, !tbaa !9
  %627 = add nsw i64 %625, %626
  %628 = load i64, ptr %55, align 8, !tbaa !9
  %629 = sub nsw i64 %627, %628
  %630 = sub nsw i64 %629, 2
  %631 = icmp slt i64 %624, %630
  br i1 %631, label %632, label %641

632:                                              ; preds = %623
  %633 = load ptr, ptr %62, align 8, !tbaa !5
  %634 = getelementptr inbounds float, ptr %633, i32 1
  store ptr %634, ptr %62, align 8, !tbaa !5
  %635 = load float, ptr %633, align 4, !tbaa !36
  %636 = load ptr, ptr %61, align 8, !tbaa !5
  %637 = getelementptr inbounds float, ptr %636, i32 1
  store ptr %637, ptr %61, align 8, !tbaa !5
  store float %635, ptr %636, align 4, !tbaa !36
  br label %638

638:                                              ; preds = %632
  %639 = load i64, ptr %51, align 8, !tbaa !9
  %640 = add nsw i64 %639, 1
  store i64 %640, ptr %51, align 8, !tbaa !9
  br label %623, !llvm.loop !39

641:                                              ; preds = %623
  br label %642

642:                                              ; preds = %653, %641
  %643 = load i64, ptr %51, align 8, !tbaa !9
  %644 = load i64, ptr %37, align 8, !tbaa !9
  %645 = load i64, ptr %57, align 8, !tbaa !9
  %646 = add nsw i64 %644, %645
  %647 = icmp slt i64 %643, %646
  br i1 %647, label %648, label %656

648:                                              ; preds = %642
  %649 = load ptr, ptr %62, align 8, !tbaa !5
  %650 = load float, ptr %649, align 4, !tbaa !36
  %651 = load ptr, ptr %61, align 8, !tbaa !5
  %652 = getelementptr inbounds float, ptr %651, i32 1
  store ptr %652, ptr %61, align 8, !tbaa !5
  store float %650, ptr %651, align 4, !tbaa !36
  br label %653

653:                                              ; preds = %648
  %654 = load i64, ptr %51, align 8, !tbaa !9
  %655 = add nsw i64 %654, 1
  store i64 %655, ptr %51, align 8, !tbaa !9
  br label %642, !llvm.loop !40

656:                                              ; preds = %642
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %657

657:                                              ; preds = %656
  %658 = load i64, ptr %52, align 8, !tbaa !9
  %659 = add nsw i64 %658, 1
  store i64 %659, ptr %52, align 8, !tbaa !9
  br label %556, !llvm.loop !41

660:                                              ; preds = %556
  store i64 0, ptr %52, align 8, !tbaa !9
  br label %661

661:                                              ; preds = %682, %660
  %662 = load i64, ptr %52, align 8, !tbaa !9
  %663 = load i64, ptr %54, align 8, !tbaa !9
  %664 = icmp slt i64 %662, %663
  br i1 %664, label %665, label %685

665:                                              ; preds = %661
  %666 = load ptr, ptr %13, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct._VlCovDet, ptr %666, i32 0, i32 16
  %668 = load ptr, ptr %667, align 8, !tbaa !35
  %669 = load i64, ptr %52, align 8, !tbaa !9
  %670 = load i64, ptr %57, align 8, !tbaa !9
  %671 = mul nsw i64 %669, %670
  %672 = getelementptr inbounds float, ptr %668, i64 %671
  %673 = load ptr, ptr %13, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct._VlCovDet, ptr %673, i32 0, i32 16
  %675 = load ptr, ptr %674, align 8, !tbaa !35
  %676 = load i64, ptr %54, align 8, !tbaa !9
  %677 = load i64, ptr %57, align 8, !tbaa !9
  %678 = mul nsw i64 %676, %677
  %679 = getelementptr inbounds float, ptr %675, i64 %678
  %680 = load i64, ptr %57, align 8, !tbaa !9
  %681 = mul i64 %680, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %672, ptr align 4 %679, i64 %681, i1 false)
  br label %682

682:                                              ; preds = %665
  %683 = load i64, ptr %52, align 8, !tbaa !9
  %684 = add nsw i64 %683, 1
  store i64 %684, ptr %52, align 8, !tbaa !9
  br label %661, !llvm.loop !42

685:                                              ; preds = %661
  %686 = load i64, ptr %58, align 8, !tbaa !9
  %687 = load i64, ptr %56, align 8, !tbaa !9
  %688 = sub nsw i64 %686, %687
  store i64 %688, ptr %52, align 8, !tbaa !9
  br label %689

689:                                              ; preds = %713, %685
  %690 = load i64, ptr %52, align 8, !tbaa !9
  %691 = load i64, ptr %58, align 8, !tbaa !9
  %692 = icmp slt i64 %690, %691
  br i1 %692, label %693, label %716

693:                                              ; preds = %689
  %694 = load ptr, ptr %13, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct._VlCovDet, ptr %694, i32 0, i32 16
  %696 = load ptr, ptr %695, align 8, !tbaa !35
  %697 = load i64, ptr %52, align 8, !tbaa !9
  %698 = load i64, ptr %57, align 8, !tbaa !9
  %699 = mul nsw i64 %697, %698
  %700 = getelementptr inbounds float, ptr %696, i64 %699
  %701 = load ptr, ptr %13, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct._VlCovDet, ptr %701, i32 0, i32 16
  %703 = load ptr, ptr %702, align 8, !tbaa !35
  %704 = load i64, ptr %58, align 8, !tbaa !9
  %705 = load i64, ptr %56, align 8, !tbaa !9
  %706 = sub nsw i64 %704, %705
  %707 = sub nsw i64 %706, 1
  %708 = load i64, ptr %57, align 8, !tbaa !9
  %709 = mul nsw i64 %707, %708
  %710 = getelementptr inbounds float, ptr %703, i64 %709
  %711 = load i64, ptr %57, align 8, !tbaa !9
  %712 = mul i64 %711, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %700, ptr align 4 %710, i64 %712, i1 false)
  br label %713

713:                                              ; preds = %693
  %714 = load i64, ptr %52, align 8, !tbaa !9
  %715 = add nsw i64 %714, 1
  store i64 %715, ptr %52, align 8, !tbaa !9
  br label %689, !llvm.loop !43

716:                                              ; preds = %689
  br label %724

717:                                              ; preds = %546
  %718 = load ptr, ptr %13, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct._VlCovDet, ptr %718, i32 0, i32 16
  %720 = load ptr, ptr %719, align 8, !tbaa !35
  %721 = load ptr, ptr %13, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct._VlCovDet, ptr %721, i32 0, i32 17
  %723 = load i64, ptr %722, align 8, !tbaa !34
  call void @llvm.memset.p0.i64(ptr align 4 %720, i8 0, i64 %723, i1 false)
  br label %724

724:                                              ; preds = %717, %716
  %725 = load ptr, ptr %13, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct._VlCovDet, ptr %725, i32 0, i32 16
  %727 = load ptr, ptr %726, align 8, !tbaa !35
  store ptr %727, ptr %28, align 8, !tbaa !5
  %728 = load i64, ptr %57, align 8, !tbaa !9
  store i64 %728, ptr %29, align 8, !tbaa !9
  %729 = load i64, ptr %58, align 8, !tbaa !9
  store i64 %729, ptr %30, align 8, !tbaa !9
  %730 = load i64, ptr %37, align 8, !tbaa !9
  %731 = sitofp i64 %730 to double
  %732 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 0
  %733 = load double, ptr %732, align 16, !tbaa !11
  %734 = fsub double %733, %731
  store double %734, ptr %732, align 16, !tbaa !11
  %735 = load i64, ptr %38, align 8, !tbaa !9
  %736 = sitofp i64 %735 to double
  %737 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 1
  %738 = load double, ptr %737, align 8, !tbaa !11
  %739 = fsub double %738, %736
  store double %739, ptr %737, align 8, !tbaa !11
  store i32 0, ptr %50, align 4
  br label %740

740:                                              ; preds = %724, %543
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  %741 = load i32, ptr %50, align 4
  switch i32 %741, label %744 [
    i32 0, label %742
  ]

742:                                              ; preds = %740
  br label %743

743:                                              ; preds = %742, %454
  store i32 0, ptr %50, align 4
  br label %744

744:                                              ; preds = %743, %740, %423
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  %745 = load i32, ptr %50, align 4
  switch i32 %745, label %908 [
    i32 0, label %746
  ]

746:                                              ; preds = %744
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %747 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %747, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %748 = load double, ptr %18, align 8, !tbaa !11
  %749 = fneg double %748
  store double %749, ptr %64, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %750 = load double, ptr %18, align 8, !tbaa !11
  %751 = load i64, ptr %17, align 8, !tbaa !9
  %752 = uitofp i64 %751 to double
  %753 = fdiv double %750, %752
  store double %753, ptr %67, align 8, !tbaa !11
  store i64 0, ptr %66, align 8, !tbaa !9
  br label %754

754:                                              ; preds = %904, %746
  %755 = load i64, ptr %66, align 8, !tbaa !9
  %756 = load i64, ptr %17, align 8, !tbaa !9
  %757 = trunc i64 %756 to i32
  %758 = mul nsw i32 2, %757
  %759 = add nsw i32 %758, 1
  %760 = sext i32 %759 to i64
  %761 = icmp slt i64 %755, %760
  br i1 %761, label %762, label %907

762:                                              ; preds = %754
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %763 = load double, ptr %18, align 8, !tbaa !11
  %764 = fneg double %763
  store double %764, ptr %68, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %765 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 2
  %766 = load double, ptr %765, align 16, !tbaa !11
  %767 = load double, ptr %64, align 8, !tbaa !11
  %768 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 0
  %769 = load double, ptr %768, align 16, !tbaa !11
  %770 = call double @llvm.fmuladd.f64(double %766, double %767, double %769)
  store double %770, ptr %69, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %771 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 3
  %772 = load double, ptr %771, align 8, !tbaa !11
  %773 = load double, ptr %64, align 8, !tbaa !11
  %774 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 1
  %775 = load double, ptr %774, align 8, !tbaa !11
  %776 = call double @llvm.fmuladd.f64(double %772, double %773, double %775)
  store double %776, ptr %70, align 8, !tbaa !11
  store i64 0, ptr %65, align 8, !tbaa !9
  br label %777

777:                                              ; preds = %897, %762
  %778 = load i64, ptr %65, align 8, !tbaa !9
  %779 = load i64, ptr %17, align 8, !tbaa !9
  %780 = trunc i64 %779 to i32
  %781 = mul nsw i32 2, %780
  %782 = add nsw i32 %781, 1
  %783 = sext i32 %782 to i64
  %784 = icmp slt i64 %778, %783
  br i1 %784, label %785, label %900

785:                                              ; preds = %777
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %786 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 0
  %787 = load double, ptr %786, align 16, !tbaa !11
  %788 = load double, ptr %68, align 8, !tbaa !11
  %789 = load double, ptr %69, align 8, !tbaa !11
  %790 = call double @llvm.fmuladd.f64(double %787, double %788, double %789)
  store double %790, ptr %71, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %791 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 1
  %792 = load double, ptr %791, align 8, !tbaa !11
  %793 = load double, ptr %68, align 8, !tbaa !11
  %794 = load double, ptr %70, align 8, !tbaa !11
  %795 = call double @llvm.fmuladd.f64(double %792, double %793, double %794)
  store double %795, ptr %72, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %796 = load double, ptr %71, align 8, !tbaa !11
  %797 = call i64 @vl_floor_d(double noundef %796)
  store i64 %797, ptr %73, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %798 = load double, ptr %72, align 8, !tbaa !11
  %799 = call i64 @vl_floor_d(double noundef %798)
  store i64 %799, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %800 = load ptr, ptr %28, align 8, !tbaa !5
  %801 = load i64, ptr %74, align 8, !tbaa !9
  %802 = load i64, ptr %29, align 8, !tbaa !9
  %803 = mul i64 %801, %802
  %804 = load i64, ptr %73, align 8, !tbaa !9
  %805 = add i64 %803, %804
  %806 = getelementptr inbounds float, ptr %800, i64 %805
  %807 = load float, ptr %806, align 4, !tbaa !36
  %808 = fpext float %807 to double
  store double %808, ptr %75, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  %809 = load ptr, ptr %28, align 8, !tbaa !5
  %810 = load i64, ptr %74, align 8, !tbaa !9
  %811 = load i64, ptr %29, align 8, !tbaa !9
  %812 = mul i64 %810, %811
  %813 = load i64, ptr %73, align 8, !tbaa !9
  %814 = add i64 %812, %813
  %815 = add i64 %814, 1
  %816 = getelementptr inbounds float, ptr %809, i64 %815
  %817 = load float, ptr %816, align 4, !tbaa !36
  %818 = fpext float %817 to double
  store double %818, ptr %76, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %819 = load ptr, ptr %28, align 8, !tbaa !5
  %820 = load i64, ptr %74, align 8, !tbaa !9
  %821 = add nsw i64 %820, 1
  %822 = load i64, ptr %29, align 8, !tbaa !9
  %823 = mul i64 %821, %822
  %824 = load i64, ptr %73, align 8, !tbaa !9
  %825 = add i64 %823, %824
  %826 = getelementptr inbounds float, ptr %819, i64 %825
  %827 = load float, ptr %826, align 4, !tbaa !36
  %828 = fpext float %827 to double
  store double %828, ptr %77, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %829 = load ptr, ptr %28, align 8, !tbaa !5
  %830 = load i64, ptr %74, align 8, !tbaa !9
  %831 = add nsw i64 %830, 1
  %832 = load i64, ptr %29, align 8, !tbaa !9
  %833 = mul i64 %831, %832
  %834 = load i64, ptr %73, align 8, !tbaa !9
  %835 = add i64 %833, %834
  %836 = add i64 %835, 1
  %837 = getelementptr inbounds float, ptr %829, i64 %836
  %838 = load float, ptr %837, align 4, !tbaa !36
  %839 = fpext float %838 to double
  store double %839, ptr %78, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  %840 = load double, ptr %71, align 8, !tbaa !11
  %841 = load i64, ptr %73, align 8, !tbaa !9
  %842 = sitofp i64 %841 to double
  %843 = fsub double %840, %842
  store double %843, ptr %79, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %844 = load double, ptr %72, align 8, !tbaa !11
  %845 = load i64, ptr %74, align 8, !tbaa !9
  %846 = sitofp i64 %845 to double
  %847 = fsub double %844, %846
  store double %847, ptr %80, align 8, !tbaa !11
  %848 = load i64, ptr %73, align 8, !tbaa !9
  %849 = icmp sge i64 %848, 0
  br i1 %849, label %850, label %858

850:                                              ; preds = %785
  %851 = load i64, ptr %73, align 8, !tbaa !9
  %852 = load i64, ptr %29, align 8, !tbaa !9
  %853 = trunc i64 %852 to i32
  %854 = sub nsw i32 %853, 1
  %855 = sext i32 %854 to i64
  %856 = icmp sle i64 %851, %855
  br i1 %856, label %857, label %858

857:                                              ; preds = %850
  br label %859

858:                                              ; preds = %850, %785
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.1, i32 noundef 2400, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

859:                                              ; preds = %857
  %860 = load i64, ptr %74, align 8, !tbaa !9
  %861 = icmp sge i64 %860, 0
  br i1 %861, label %862, label %870

862:                                              ; preds = %859
  %863 = load i64, ptr %74, align 8, !tbaa !9
  %864 = load i64, ptr %30, align 8, !tbaa !9
  %865 = trunc i64 %864 to i32
  %866 = sub nsw i32 %865, 1
  %867 = sext i32 %866 to i64
  %868 = icmp sle i64 %863, %867
  br i1 %868, label %869, label %870

869:                                              ; preds = %862
  br label %871

870:                                              ; preds = %862, %859
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.1, i32 noundef 2401, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

871:                                              ; preds = %869
  %872 = load double, ptr %80, align 8, !tbaa !11
  %873 = fsub double 1.000000e+00, %872
  %874 = load double, ptr %79, align 8, !tbaa !11
  %875 = fsub double 1.000000e+00, %874
  %876 = load double, ptr %75, align 8, !tbaa !11
  %877 = load double, ptr %79, align 8, !tbaa !11
  %878 = load double, ptr %76, align 8, !tbaa !11
  %879 = fmul double %877, %878
  %880 = call double @llvm.fmuladd.f64(double %875, double %876, double %879)
  %881 = load double, ptr %80, align 8, !tbaa !11
  %882 = load double, ptr %79, align 8, !tbaa !11
  %883 = fsub double 1.000000e+00, %882
  %884 = load double, ptr %77, align 8, !tbaa !11
  %885 = load double, ptr %79, align 8, !tbaa !11
  %886 = load double, ptr %78, align 8, !tbaa !11
  %887 = fmul double %885, %886
  %888 = call double @llvm.fmuladd.f64(double %883, double %884, double %887)
  %889 = fmul double %881, %888
  %890 = call double @llvm.fmuladd.f64(double %873, double %880, double %889)
  %891 = fptrunc double %890 to float
  %892 = load ptr, ptr %63, align 8, !tbaa !5
  %893 = getelementptr inbounds float, ptr %892, i32 1
  store ptr %893, ptr %63, align 8, !tbaa !5
  store float %891, ptr %892, align 4, !tbaa !36
  %894 = load double, ptr %67, align 8, !tbaa !11
  %895 = load double, ptr %68, align 8, !tbaa !11
  %896 = fadd double %895, %894
  store double %896, ptr %68, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  br label %897

897:                                              ; preds = %871
  %898 = load i64, ptr %65, align 8, !tbaa !9
  %899 = add nsw i64 %898, 1
  store i64 %899, ptr %65, align 8, !tbaa !9
  br label %777, !llvm.loop !44

900:                                              ; preds = %777
  %901 = load double, ptr %67, align 8, !tbaa !11
  %902 = load double, ptr %64, align 8, !tbaa !11
  %903 = fadd double %902, %901
  store double %903, ptr %64, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %904

904:                                              ; preds = %900
  %905 = load i64, ptr %66, align 8, !tbaa !9
  %906 = add nsw i64 %905, 1
  store i64 %906, ptr %66, align 8, !tbaa !9
  br label %754, !llvm.loop !45

907:                                              ; preds = %754
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  store i32 0, ptr %12, align 4
  store i32 1, ptr %50, align 4
  br label %908

908:                                              ; preds = %907, %744
  call void @llvm.lifetime.end.p0(i64 24, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  %909 = load i32, ptr %12, align 4
  ret i32 %909
}

declare i32 @vl_set_last_error(i32 noundef, ptr noundef, ...) #8

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { noreturn 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { "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 #9 = { nounwind }
attributes #10 = { noreturn 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, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_VlCovDet", !6, i64 0, !6, i64 8, !15, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !12, i64 72, !10, i64 80, !12, i64 88, !10, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !10, i64 136, !15, i64 144, !7, i64 152, !7, i64 216, !15, i64 280, !7, i64 284, !7, i64 7008, !7, i64 13732, !7, i64 20456, !7, i64 27180, !7, i64 31536, !7, i64 75096, !15, i64 75136}
!15 = !{!"int", !7, i64 0}
!16 = !{!17, !10, i64 16}
!17 = !{!"_VlScaleSpaceGeometry", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !12, i64 56, !12, i64 64}
!18 = !{!17, !10, i64 24}
!19 = !{!17, !12, i64 56}
!20 = !{!17, !10, i64 40}
!21 = !{!17, !10, i64 48}
!22 = !{!17, !10, i64 32}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{i64 0, i64 8, !9, i64 8, i64 8, !9, i64 16, i64 8, !11}
!26 = !{!27, !10, i64 0}
!27 = !{!"_VlScaleSpaceOctaveGeometry", !10, i64 0, !10, i64 8, !12, i64 16}
!28 = !{!27, !10, i64 8}
!29 = !{!27, !12, i64 16}
!30 = !{!7, !7, i64 0}
!31 = !{!15, !15, i64 0}
!32 = distinct !{!32, !24}
!33 = !{!14, !15, i64 75136}
!34 = !{!14, !10, i64 136}
!35 = !{!14, !6, i64 128}
!36 = !{!37, !37, i64 0}
!37 = !{!"float", !7, i64 0}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}
!42 = distinct !{!42, !24}
!43 = distinct !{!43, !24}
!44 = distinct !{!44, !24}
!45 = distinct !{!45, !24}


; 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"

%union.anon = type { i64 }
%struct._VlScaleSpaceGeometry = type { i64, i64, i64, i64, i64, i64, i64, double, double }
%struct._VlScaleSpaceOctaveGeometry = type { i64, i64, double }

@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@vl_infinity_d = external hidden local_unnamed_addr constant %union.anon, align 8
@.str.18 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [35 x i8], align 1
@__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper = external hidden unnamed_addr constant [141 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1

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

; Function Attrs: nounwind uwtable
declare hidden i32 @_vl_resize_buffer(ptr noundef, ptr noundef, 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr 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: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @vl_floor_d(double noundef) local_unnamed_addr #6

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

declare void @vl_scalespace_get_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceGeometry) align 8, ptr noundef) local_unnamed_addr #7

declare void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8, ptr noundef, i64 noundef) local_unnamed_addr #7

declare ptr @vl_scalespace_get_level(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
define dso_local i32 @vl_covdet_extract_patch_helper(ptr noundef %0, ptr noundef writeonly %1, ptr noundef writeonly %2, ptr nocapture noundef writeonly %3, i64 noundef %4, double noundef %5, double noundef %6, ptr nocapture noundef readonly %7, ptr nocapture noundef readonly %8, double noundef %9, double noundef %10) local_unnamed_addr #1 {
  %12 = alloca %struct._VlScaleSpaceGeometry, align 8
  %13 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %14 = getelementptr inbounds i8, ptr %7, i64 16
  %15 = load <2 x double>, ptr %14, align 8, !tbaa !5
  %16 = load <2 x double>, ptr %7, align 8, !tbaa !5
  %17 = load <2 x double>, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %12) #9
  %18 = load ptr, ptr %0, align 8, !tbaa !9
  call void @vl_scalespace_get_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceGeometry) align 8 %12, ptr noundef %18) #9
  %19 = fcmp olt double %9, %10
  %20 = select i1 %19, double %9, double %10
  %21 = fdiv double 1.000000e+00, %20
  %22 = getelementptr inbounds i8, ptr %12, i64 16
  %23 = load i64, ptr %22, align 8, !tbaa !14
  %24 = getelementptr inbounds i8, ptr %12, i64 56
  %25 = getelementptr inbounds i8, ptr %12, i64 24
  %26 = getelementptr inbounds i8, ptr %12, i64 40
  %27 = getelementptr inbounds i8, ptr %12, i64 48
  %28 = getelementptr inbounds i8, ptr %12, i64 32
  br label %29

29:                                               ; preds = %31, %11
  %.0284.in = phi i64 [ %23, %11 ], [ %.0284, %31 ]
  %.0284 = add nsw i64 %.0284.in, 1
  %30 = load i64, ptr %25, align 8
  %.not.not = icmp slt i64 %.0284.in, %30
  br i1 %.not.not, label %31, label %split

31:                                               ; preds = %29
  %32 = load double, ptr %24, align 8, !tbaa !16
  %33 = fmul double %21, %32
  %34 = fdiv double %6, %33
  %35 = call double @vl_log2_d(double noundef %34)
  %36 = sitofp i64 %.0284 to double
  %37 = fsub double %35, %36
  %38 = call i64 @vl_floor_d(double noundef %37)
  %39 = load i64, ptr %26, align 8
  %40 = call i64 @llvm.smax.i64(i64 %38, i64 %39)
  %41 = load i64, ptr %27, align 8
  %42 = call i64 @llvm.smin.i64(i64 %40, i64 %41)
  %43 = load double, ptr %24, align 8, !tbaa !16
  %44 = sitofp i64 %42 to double
  %45 = load i64, ptr %28, align 8, !tbaa !17
  %46 = uitofp i64 %45 to double
  %47 = fdiv double %44, %46
  %48 = fadd double %47, %36
  %exp2 = call double @exp2(double %48) #9
  %49 = fmul double %43, %exp2
  %50 = fmul double %21, %49
  %51 = fcmp ogt double %50, %6
  br i1 %51, label %._crit_edge429, label %29, !llvm.loop !18

._crit_edge429:                                   ; preds = %31
  %.pre = load i64, ptr %25, align 8
  br label %split

split:                                            ; preds = %29, %._crit_edge429
  %52 = phi i64 [ %.pre, %._crit_edge429 ], [ %30, %29 ]
  %.1285 = phi i64 [ %.0284.in, %._crit_edge429 ], [ %.0284, %29 ]
  %53 = call i64 @llvm.smin.i64(i64 %.1285, i64 %52)
  %54 = load double, ptr %24, align 8, !tbaa !16
  %55 = fmul double %21, %54
  %56 = fdiv double %6, %55
  %57 = call double @vl_log2_d(double noundef %56)
  %58 = sitofp i64 %53 to double
  %59 = fsub double %57, %58
  %60 = call i64 @vl_floor_d(double noundef %59)
  %61 = load i64, ptr %26, align 8
  %62 = call i64 @llvm.smax.i64(i64 %60, i64 %61)
  %63 = load i64, ptr %27, align 8
  %64 = call i64 @llvm.smin.i64(i64 %62, i64 %63)
  %65 = load double, ptr %24, align 8, !tbaa !16
  %66 = sitofp i64 %64 to double
  %67 = load i64, ptr %28, align 8, !tbaa !17
  %68 = uitofp i64 %67 to double
  %69 = fdiv double %66, %68
  %70 = fadd double %69, %58
  %exp2331 = call double @exp2(double %70) #9
  %71 = fmul double %65, %exp2331
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %74, label %72

72:                                               ; preds = %split
  %73 = fdiv double %71, %9
  store double %73, ptr %1, align 8, !tbaa !5
  br label %74

74:                                               ; preds = %72, %split
  %.not332 = icmp eq ptr %2, null
  br i1 %.not332, label %77, label %75

75:                                               ; preds = %74
  %76 = fdiv double %71, %10
  store double %76, ptr %2, align 8, !tbaa !5
  br label %77

77:                                               ; preds = %75, %74
  %78 = load ptr, ptr %0, align 8, !tbaa !9
  %79 = call ptr @vl_scalespace_get_level(ptr noundef %78, i64 noundef %53, i64 noundef %64) #9
  %80 = ptrtoint ptr %79 to i64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #9
  %81 = load ptr, ptr %0, align 8, !tbaa !9
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %13, ptr noundef %81, i64 noundef %53) #9
  %.sroa.0.0.copyload = load i64, ptr %13, align 8, !tbaa !20
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 8
  %.sroa.4.0.copyload = load i64, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !20
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 16
  %.sroa.5.0.copyload = load double, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #9
  %82 = load double, ptr @vl_infinity_d, align 8, !tbaa !21
  %83 = fneg double %82
  %84 = fneg double %5
  %85 = insertelement <2 x double> poison, double %.sroa.5.0.copyload, i64 0
  %86 = shufflevector <2 x double> %85, <2 x double> poison, <2 x i32> zeroinitializer
  %87 = fdiv <2 x double> %16, %86
  %88 = fdiv <2 x double> %15, %86
  %89 = fdiv <2 x double> %17, %86
  %90 = insertelement <2 x double> poison, double %84, i64 0
  %91 = shufflevector <2 x double> %90, <2 x double> poison, <2 x i32> zeroinitializer
  %92 = fmul <2 x double> %88, %91
  %93 = insertelement <2 x double> poison, double %5, i64 0
  %94 = shufflevector <2 x double> %93, <2 x double> poison, <2 x i32> zeroinitializer
  %95 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %87, <2 x double> %94, <2 x double> %92)
  %96 = fadd <2 x double> %89, %95
  %97 = extractelement <2 x double> %96, i64 0
  %98 = fcmp olt double %97, %83
  %99 = select i1 %98, double %83, double %97
  %100 = insertelement <2 x double> poison, double %82, i64 0
  %101 = shufflevector <2 x double> %100, <2 x double> poison, <2 x i32> zeroinitializer
  %102 = fcmp olt <2 x double> %101, %96
  %103 = select <2 x i1> %102, <2 x double> %101, <2 x double> %96
  %104 = extractelement <2 x double> %96, i64 1
  %105 = fcmp olt double %104, %83
  %106 = select i1 %105, double %83, double %104
  %107 = fmul <2 x double> %88, %94
  %108 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %87, <2 x double> %94, <2 x double> %107)
  %109 = fadd <2 x double> %89, %108
  %110 = extractelement <2 x double> %109, i64 0
  %111 = fcmp ogt double %99, %110
  %112 = select i1 %111, double %99, double %110
  %113 = fcmp olt <2 x double> %103, %109
  %114 = select <2 x i1> %113, <2 x double> %103, <2 x double> %109
  %115 = extractelement <2 x double> %109, i64 1
  %116 = fcmp ogt double %106, %115
  %117 = select i1 %116, double %106, double %115
  %118 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %87, <2 x double> %91, <2 x double> %107)
  %119 = fadd <2 x double> %89, %118
  %120 = extractelement <2 x double> %119, i64 0
  %121 = fcmp ogt double %112, %120
  %122 = select i1 %121, double %112, double %120
  %123 = fcmp olt <2 x double> %114, %119
  %124 = select <2 x i1> %123, <2 x double> %114, <2 x double> %119
  %125 = extractelement <2 x double> %119, i64 1
  %126 = fcmp ogt double %117, %125
  %127 = select i1 %126, double %117, double %125
  %128 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %87, <2 x double> %91, <2 x double> %92)
  %129 = fadd <2 x double> %89, %128
  %130 = extractelement <2 x double> %129, i64 0
  %131 = fcmp ogt double %122, %130
  %132 = select i1 %131, double %122, double %130
  %133 = fcmp olt <2 x double> %124, %129
  %134 = select <2 x i1> %133, <2 x double> %124, <2 x double> %129
  %135 = extractelement <2 x double> %129, i64 1
  %136 = fcmp ogt double %127, %135
  %137 = select i1 %136, double %127, double %135
  %138 = extractelement <2 x double> %134, i64 0
  %139 = fcmp olt double %138, 0.000000e+00
  br i1 %139, label %152, label %140

140:                                              ; preds = %77
  %141 = trunc i64 %.sroa.0.0.copyload to i32
  %142 = add nsw i32 %141, -1
  %143 = sitofp i32 %142 to double
  %144 = fcmp ogt double %132, %143
  %145 = extractelement <2 x double> %134, i64 1
  %146 = fcmp olt double %145, 0.000000e+00
  %or.cond = select i1 %144, i1 true, i1 %146
  br i1 %or.cond, label %152, label %147

147:                                              ; preds = %140
  %148 = trunc i64 %.sroa.4.0.copyload to i32
  %149 = add nsw i32 %148, -1
  %150 = sitofp i32 %149 to double
  %151 = fcmp ogt double %137, %150
  br i1 %151, label %152, label %157

152:                                              ; preds = %147, %140, %77
  %153 = getelementptr inbounds i8, ptr %0, i64 75136
  %154 = load i32, ptr %153, align 8, !tbaa !22
  %.not333 = icmp eq i32 %154, 0
  br i1 %.not333, label %155, label %157

155:                                              ; preds = %152
  %156 = call i32 (i32, ptr, ...) @vl_set_last_error(i32 noundef 5, ptr noundef nonnull @.str.18) #9
  br label %.loopexit

157:                                              ; preds = %152, %147
  %158 = call <2 x double> @llvm.floor.v2f64(<2 x double> %134)
  %159 = fadd <2 x double> %158, <double -1.000000e+00, double -1.000000e+00>
  %160 = fptosi <2 x double> %159 to <2 x i64>
  %161 = call double @llvm.ceil.f64(double %132)
  %162 = fadd double %161, 1.000000e+00
  %163 = fptosi double %162 to i64
  %164 = call double @llvm.ceil.f64(double %137)
  %165 = fadd double %164, 1.000000e+00
  %166 = fptosi double %165 to i64
  %167 = extractelement <2 x i64> %160, i64 0
  %168 = icmp slt i64 %167, 0
  %.pre433 = shl i64 %.sroa.0.0.copyload, 32
  %.pre434 = add i64 %.pre433, -4294967296
  %.pre435 = ashr exact i64 %.pre434, 32
  br i1 %168, label %._crit_edge432, label %169

169:                                              ; preds = %157
  %170 = icmp slt i64 %.pre435, %163
  %171 = extractelement <2 x i64> %160, i64 1
  %172 = icmp slt i64 %171, 0
  %or.cond5 = select i1 %170, i1 true, i1 %172
  br i1 %or.cond5, label %._crit_edge432, label %173

173:                                              ; preds = %169
  %174 = shl i64 %.sroa.4.0.copyload, 32
  %sext334 = add i64 %174, -4294967296
  %175 = ashr exact i64 %sext334, 32
  %176 = icmp slt i64 %175, %166
  br i1 %176, label %._crit_edge432, label %306

._crit_edge432:                                   ; preds = %157, %173, %169
  %177 = sub i64 0, %167
  %178 = call i64 @llvm.smax.i64(i64 %177, i64 0)
  %179 = extractelement <2 x i64> %160, i64 1
  %180 = sub i64 0, %179
  %181 = call i64 @llvm.smax.i64(i64 %180, i64 0)
  %182 = sub i64 %163, %.pre435
  %spec.select = call i64 @llvm.smax.i64(i64 %182, i64 0)
  %183 = shl i64 %.sroa.4.0.copyload, 32
  %sext336 = add i64 %183, -4294967296
  %184 = ashr exact i64 %sext336, 32
  %185 = sub i64 %166, %184
  %186 = call i64 @llvm.smax.i64(i64 %185, i64 0)
  %187 = sub nsw i64 %163, %167
  %188 = add nsw i64 %187, 1
  %189 = sub nsw i64 %166, %179
  %190 = add nsw i64 %189, 1
  %191 = shl i64 %190, 2
  %192 = mul i64 %191, %188
  %193 = getelementptr inbounds i8, ptr %0, i64 136
  %194 = load i64, ptr %193, align 8, !tbaa !23
  %195 = icmp ugt i64 %192, %194
  br i1 %195, label %196, label %.thread

196:                                              ; preds = %._crit_edge432
  %197 = getelementptr inbounds i8, ptr %0, i64 128
  %198 = call i32 @_vl_resize_buffer(ptr noundef nonnull %197, ptr noundef nonnull %193, i64 noundef %192)
  %.not337 = icmp eq i32 %198, 0
  br i1 %.not337, label %.thread, label %199

199:                                              ; preds = %196
  %200 = call i32 (i32, ptr, ...) @vl_set_last_error(i32 noundef 2, ptr noundef nonnull @.str.19) #9
  br label %.loopexit

.thread:                                          ; preds = %196, %._crit_edge432
  %201 = sub nsw i64 %190, %186
  %202 = icmp slt i64 %181, %201
  br i1 %202, label %203, label %298

203:                                              ; preds = %.thread
  %204 = add nsw i64 %181, %179
  %205 = add i64 %166, 1
  %206 = sub i64 %205, %186
  %207 = icmp slt i64 %204, %206
  br i1 %207, label %.lr.ph386, label %.preheader359

.lr.ph386:                                        ; preds = %203
  %208 = getelementptr inbounds i8, ptr %0, i64 128
  %209 = load ptr, ptr %208, align 8, !tbaa !24
  %210 = call i64 @llvm.smax.i64(i64 %167, i64 0)
  %. = call i64 @llvm.smin.i64(i64 %210, i64 %.pre435)
  %invariant.gep = getelementptr float, ptr %79, i64 %.
  %211 = add i64 %178, %167
  %.not408 = icmp sgt i64 %167, -1
  %212 = add i64 %163, 1
  %213 = xor i64 %spec.select, -1
  %214 = add i64 %213, %163
  %215 = add i64 %167, 1
  %smax = call i64 @llvm.smax.i64(i64 %211, i64 %215)
  %216 = add i64 %163, 1
  %217 = mul i64 %.sroa.0.0.copyload, %204
  %218 = add i64 %217, %.
  %.neg = mul i64 %218, -4
  %.neg497 = sub i64 %.neg, %80
  %219 = mul i64 %.sroa.0.0.copyload, -4
  %220 = xor i64 %spec.select, -1
  %221 = add i64 %220, %163
  %222 = sub i64 %smax, %167
  %min.iters.check480 = icmp ult i64 %222, 8
  %n.vec483 = and i64 %222, -8
  %223 = shl i64 %n.vec483, 2
  %ind.end486 = add i64 %n.vec483, %167
  %cmp.n496 = icmp eq i64 %222, %n.vec483
  br label %229

.preheader359:                                    ; preds = %._crit_edge, %203
  %224 = icmp slt i64 %179, 0
  br i1 %224, label %.lr.ph388, label %.preheader

.lr.ph388:                                        ; preds = %.preheader359
  %225 = getelementptr inbounds i8, ptr %0, i64 128
  %226 = mul nsw i64 %188, %181
  %227 = shl i64 %188, 2
  %smax419 = call i64 @llvm.smax.i64(i64 %180, i64 1)
  %xtraiter = and i64 %smax419, 1
  %228 = icmp slt i64 %180, 2
  br i1 %228, label %.preheader.loopexit.unr-lcssa, label %.lr.ph388.new

.lr.ph388.new:                                    ; preds = %.lr.ph388
  %unroll_iter = and i64 %smax419, 9223372036854775806
  br label %277

229:                                              ; preds = %.lr.ph386, %._crit_edge
  %indvar = phi i64 [ 0, %.lr.ph386 ], [ %indvar.next, %._crit_edge ]
  %.0316384 = phi i64 [ %204, %.lr.ph386 ], [ %261, %._crit_edge ]
  %230 = mul i64 %219, %indvar
  %231 = add i64 %.neg497, %230
  %232 = sub nsw i64 %.0316384, %179
  %233 = mul nsw i64 %232, %188
  %234 = getelementptr inbounds float, ptr %209, i64 %233
  %235 = mul i64 %.0316384, %.sroa.0.0.copyload
  %gep = getelementptr float, ptr %invariant.gep, i64 %235
  br i1 %.not408, label %.preheader361, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %229
  %.pre430 = load float, ptr %gep, align 4, !tbaa !25
  br i1 %min.iters.check480, label %.lr.ph.preheader501, label %vector.ph481

.lr.ph.preheader501:                              ; preds = %middle.block478, %.lr.ph.preheader
  %.0302371.ph = phi ptr [ %234, %.lr.ph.preheader ], [ %ind.end484, %middle.block478 ]
  %.0313370.ph = phi i64 [ %167, %.lr.ph.preheader ], [ %ind.end486, %middle.block478 ]
  br label %.lr.ph

vector.ph481:                                     ; preds = %.lr.ph.preheader
  %ind.end484 = getelementptr i8, ptr %234, i64 %223
  %broadcast.splatinsert493 = insertelement <4 x float> poison, float %.pre430, i64 0
  %broadcast.splat494 = shufflevector <4 x float> %broadcast.splatinsert493, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body488

vector.body488:                                   ; preds = %vector.body488, %vector.ph481
  %index489 = phi i64 [ 0, %vector.ph481 ], [ %index.next495, %vector.body488 ]
  %offset.idx490 = shl i64 %index489, 2
  %next.gep491 = getelementptr i8, ptr %234, i64 %offset.idx490
  %236 = getelementptr i8, ptr %next.gep491, i64 16
  store <4 x float> %broadcast.splat494, ptr %next.gep491, align 4, !tbaa !25
  store <4 x float> %broadcast.splat494, ptr %236, align 4, !tbaa !25
  %index.next495 = add nuw i64 %index489, 8
  %237 = icmp eq i64 %index.next495, %n.vec483
  br i1 %237, label %middle.block478, label %vector.body488, !llvm.loop !27

middle.block478:                                  ; preds = %vector.body488
  br i1 %cmp.n496, label %.preheader361, label %.lr.ph.preheader501

.preheader361:                                    ; preds = %.lr.ph, %middle.block478, %229
  %.0313.lcssa = phi i64 [ %167, %229 ], [ %smax, %middle.block478 ], [ %smax, %.lr.ph ]
  %.0302.lcssa = phi ptr [ %234, %229 ], [ %ind.end484, %middle.block478 ], [ %246, %.lr.ph ]
  %238 = icmp slt i64 %.0313.lcssa, %214
  br i1 %238, label %.lr.ph376.preheader, label %.preheader360

.lr.ph376.preheader:                              ; preds = %.preheader361
  %.0302.lcssa454 = ptrtoint ptr %.0302.lcssa to i64
  %239 = sub i64 %221, %.0313.lcssa
  %min.iters.check457 = icmp ult i64 %239, 8
  %240 = add i64 %231, %.0302.lcssa454
  %diff.check = icmp ult i64 %240, 32
  %or.cond498 = select i1 %min.iters.check457, i1 true, i1 %diff.check
  br i1 %or.cond498, label %.lr.ph376.preheader500, label %vector.ph458

.lr.ph376.preheader500:                           ; preds = %middle.block455, %.lr.ph376.preheader
  %.0301375.ph = phi ptr [ %gep, %.lr.ph376.preheader ], [ %ind.end461, %middle.block455 ]
  %.1303374.ph = phi ptr [ %.0302.lcssa, %.lr.ph376.preheader ], [ %ind.end463, %middle.block455 ]
  %.1314373.ph = phi i64 [ %.0313.lcssa, %.lr.ph376.preheader ], [ %ind.end465, %middle.block455 ]
  br label %.lr.ph376

vector.ph458:                                     ; preds = %.lr.ph376.preheader
  %n.vec460 = and i64 %239, -8
  %241 = shl i64 %n.vec460, 2
  %ind.end461 = getelementptr i8, ptr %gep, i64 %241
  %242 = shl i64 %n.vec460, 2
  %ind.end463 = getelementptr i8, ptr %.0302.lcssa, i64 %242
  %ind.end465 = add i64 %.0313.lcssa, %n.vec460
  br label %vector.body467

vector.body467:                                   ; preds = %vector.body467, %vector.ph458
  %index468 = phi i64 [ 0, %vector.ph458 ], [ %index.next476, %vector.body467 ]
  %offset.idx469 = shl i64 %index468, 2
  %next.gep470 = getelementptr i8, ptr %gep, i64 %offset.idx469
  %offset.idx472 = shl i64 %index468, 2
  %next.gep473 = getelementptr i8, ptr %.0302.lcssa, i64 %offset.idx472
  %243 = getelementptr i8, ptr %next.gep470, i64 16
  %wide.load = load <4 x float>, ptr %next.gep470, align 4, !tbaa !25
  %wide.load475 = load <4 x float>, ptr %243, align 4, !tbaa !25
  %244 = getelementptr i8, ptr %next.gep473, i64 16
  store <4 x float> %wide.load, ptr %next.gep473, align 4, !tbaa !25
  store <4 x float> %wide.load475, ptr %244, align 4, !tbaa !25
  %index.next476 = add nuw i64 %index468, 8
  %245 = icmp eq i64 %index.next476, %n.vec460
  br i1 %245, label %middle.block455, label %vector.body467, !llvm.loop !30

middle.block455:                                  ; preds = %vector.body467
  %cmp.n477 = icmp eq i64 %239, %n.vec460
  br i1 %cmp.n477, label %.preheader360, label %.lr.ph376.preheader500

.lr.ph:                                           ; preds = %.lr.ph.preheader501, %.lr.ph
  %.0302371 = phi ptr [ %246, %.lr.ph ], [ %.0302371.ph, %.lr.ph.preheader501 ]
  %.0313370 = phi i64 [ %247, %.lr.ph ], [ %.0313370.ph, %.lr.ph.preheader501 ]
  %246 = getelementptr inbounds i8, ptr %.0302371, i64 4
  store float %.pre430, ptr %.0302371, align 4, !tbaa !25
  %247 = add nsw i64 %.0313370, 1
  %248 = icmp slt i64 %247, %211
  br i1 %248, label %.lr.ph, label %.preheader361, !llvm.loop !31

.preheader360:                                    ; preds = %.lr.ph376, %middle.block455, %.preheader361
  %.1314.lcssa = phi i64 [ %.0313.lcssa, %.preheader361 ], [ %214, %middle.block455 ], [ %214, %.lr.ph376 ]
  %.1303.lcssa = phi ptr [ %.0302.lcssa, %.preheader361 ], [ %ind.end463, %middle.block455 ], [ %256, %.lr.ph376 ]
  %.0301.lcssa = phi ptr [ %gep, %.preheader361 ], [ %ind.end461, %middle.block455 ], [ %254, %.lr.ph376 ]
  %249 = icmp slt i64 %.1314.lcssa, %212
  br i1 %249, label %.lr.ph383.preheader, label %._crit_edge

.lr.ph383.preheader:                              ; preds = %.preheader360
  %.pre431 = load float, ptr %.0301.lcssa, align 4, !tbaa !25
  %250 = sub i64 %216, %.1314.lcssa
  %min.iters.check = icmp ult i64 %250, 8
  br i1 %min.iters.check, label %.lr.ph383.preheader499, label %vector.ph

.lr.ph383.preheader499:                           ; preds = %middle.block, %.lr.ph383.preheader
  %.2304382.ph = phi ptr [ %.1303.lcssa, %.lr.ph383.preheader ], [ %ind.end, %middle.block ]
  %.2315381.ph = phi i64 [ %.1314.lcssa, %.lr.ph383.preheader ], [ %ind.end451, %middle.block ]
  br label %.lr.ph383

vector.ph:                                        ; preds = %.lr.ph383.preheader
  %n.vec = and i64 %250, -8
  %251 = shl i64 %n.vec, 2
  %ind.end = getelementptr i8, ptr %.1303.lcssa, i64 %251
  %ind.end451 = add i64 %.1314.lcssa, %n.vec
  %broadcast.splatinsert = insertelement <4 x float> poison, float %.pre431, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  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 %.1303.lcssa, i64 %offset.idx
  %252 = getelementptr i8, ptr %next.gep, i64 16
  store <4 x float> %broadcast.splat, ptr %next.gep, align 4, !tbaa !25
  store <4 x float> %broadcast.splat, ptr %252, align 4, !tbaa !25
  %index.next = add nuw i64 %index, 8
  %253 = icmp eq i64 %index.next, %n.vec
  br i1 %253, label %middle.block, label %vector.body, !llvm.loop !32

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %250, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph383.preheader499

.lr.ph376:                                        ; preds = %.lr.ph376.preheader500, %.lr.ph376
  %.0301375 = phi ptr [ %254, %.lr.ph376 ], [ %.0301375.ph, %.lr.ph376.preheader500 ]
  %.1303374 = phi ptr [ %256, %.lr.ph376 ], [ %.1303374.ph, %.lr.ph376.preheader500 ]
  %.1314373 = phi i64 [ %257, %.lr.ph376 ], [ %.1314373.ph, %.lr.ph376.preheader500 ]
  %254 = getelementptr inbounds i8, ptr %.0301375, i64 4
  %255 = load float, ptr %.0301375, align 4, !tbaa !25
  %256 = getelementptr inbounds i8, ptr %.1303374, i64 4
  store float %255, ptr %.1303374, align 4, !tbaa !25
  %257 = add nsw i64 %.1314373, 1
  %258 = icmp slt i64 %257, %214
  br i1 %258, label %.lr.ph376, label %.preheader360, !llvm.loop !33

.lr.ph383:                                        ; preds = %.lr.ph383.preheader499, %.lr.ph383
  %.2304382 = phi ptr [ %259, %.lr.ph383 ], [ %.2304382.ph, %.lr.ph383.preheader499 ]
  %.2315381 = phi i64 [ %260, %.lr.ph383 ], [ %.2315381.ph, %.lr.ph383.preheader499 ]
  %259 = getelementptr inbounds i8, ptr %.2304382, i64 4
  store float %.pre431, ptr %.2304382, align 4, !tbaa !25
  %260 = add nsw i64 %.2315381, 1
  %exitcond.not = icmp eq i64 %.2315381, %163
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph383, !llvm.loop !34

._crit_edge:                                      ; preds = %.lr.ph383, %middle.block, %.preheader360
  %261 = add nsw i64 %.0316384, 1
  %262 = icmp slt i64 %261, %206
  %indvar.next = add i64 %indvar, 1
  br i1 %262, label %229, label %.preheader359, !llvm.loop !35

.preheader.loopexit.unr-lcssa:                    ; preds = %277, %.lr.ph388
  %.1317387.unr = phi i64 [ 0, %.lr.ph388 ], [ %287, %277 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.preheader.loopexit.epilog-lcssa

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %263 = load ptr, ptr %225, align 8, !tbaa !24
  %264 = mul nsw i64 %.1317387.unr, %188
  %265 = getelementptr inbounds float, ptr %263, i64 %264
  %266 = getelementptr inbounds float, ptr %263, i64 %226
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %265, ptr align 4 %266, i64 %227, i1 false)
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader359
  %.not338389 = icmp sgt i64 %201, %189
  br i1 %.not338389, label %.loopexit358, label %.lr.ph391

.lr.ph391:                                        ; preds = %.preheader
  %267 = getelementptr inbounds i8, ptr %0, i64 128
  %268 = add nsw i64 %201, -1
  %269 = mul nsw i64 %268, %188
  %270 = shl i64 %188, 2
  %xtraiter509 = and i64 %186, 1
  %lcmp.mod510.not = icmp eq i64 %xtraiter509, 0
  br i1 %lcmp.mod510.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph391
  %271 = load ptr, ptr %267, align 8, !tbaa !24
  %272 = mul nsw i64 %201, %188
  %273 = getelementptr inbounds float, ptr %271, i64 %272
  %274 = getelementptr inbounds float, ptr %271, i64 %269
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %273, ptr align 4 %274, i64 %270, i1 false)
  %275 = add i64 %201, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph391
  %.2318390.unr = phi i64 [ %201, %.lr.ph391 ], [ %275, %.prol.loopexit.unr-lcssa ]
  %276 = icmp eq i64 %185, 1
  br i1 %276, label %.loopexit358, label %.lr.ph391.new

277:                                              ; preds = %277, %.lr.ph388.new
  %.1317387 = phi i64 [ 0, %.lr.ph388.new ], [ %287, %277 ]
  %niter = phi i64 [ 0, %.lr.ph388.new ], [ %niter.next.1, %277 ]
  %278 = load ptr, ptr %225, align 8, !tbaa !24
  %279 = mul nsw i64 %.1317387, %188
  %280 = getelementptr inbounds float, ptr %278, i64 %279
  %281 = getelementptr inbounds float, ptr %278, i64 %226
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %280, ptr align 4 %281, i64 %227, i1 false)
  %282 = or disjoint i64 %.1317387, 1
  %283 = load ptr, ptr %225, align 8, !tbaa !24
  %284 = mul nsw i64 %282, %188
  %285 = getelementptr inbounds float, ptr %283, i64 %284
  %286 = getelementptr inbounds float, ptr %283, i64 %226
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %285, ptr align 4 %286, i64 %227, i1 false)
  %287 = add nuw nsw i64 %.1317387, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader.loopexit.unr-lcssa, label %277, !llvm.loop !36

.lr.ph391.new:                                    ; preds = %.prol.loopexit, %.lr.ph391.new
  %.2318390 = phi i64 [ %297, %.lr.ph391.new ], [ %.2318390.unr, %.prol.loopexit ]
  %288 = load ptr, ptr %267, align 8, !tbaa !24
  %289 = mul nsw i64 %.2318390, %188
  %290 = getelementptr inbounds float, ptr %288, i64 %289
  %291 = getelementptr inbounds float, ptr %288, i64 %269
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %290, ptr align 4 %291, i64 %270, i1 false)
  %292 = add i64 %.2318390, 1
  %293 = load ptr, ptr %267, align 8, !tbaa !24
  %294 = mul nsw i64 %292, %188
  %295 = getelementptr inbounds float, ptr %293, i64 %294
  %296 = getelementptr inbounds float, ptr %293, i64 %269
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %295, ptr align 4 %296, i64 %270, i1 false)
  %297 = add i64 %.2318390, 2
  %exitcond421.not.1 = icmp eq i64 %292, %189
  br i1 %exitcond421.not.1, label %.loopexit358, label %.lr.ph391.new, !llvm.loop !37

298:                                              ; preds = %.thread
  %299 = getelementptr inbounds i8, ptr %0, i64 128
  %300 = load ptr, ptr %299, align 8, !tbaa !24
  %301 = load i64, ptr %193, align 8, !tbaa !23
  call void @llvm.memset.p0.i64(ptr align 4 %300, i8 0, i64 %301, i1 false)
  br label %.loopexit358

.loopexit358:                                     ; preds = %.prol.loopexit, %.lr.ph391.new, %.preheader, %298
  %302 = getelementptr inbounds i8, ptr %0, i64 128
  %303 = load ptr, ptr %302, align 8, !tbaa !24
  %304 = sitofp <2 x i64> %160 to <2 x double>
  %305 = fsub <2 x double> %89, %304
  br label %306

306:                                              ; preds = %173, %.loopexit358
  %.2294.ph = phi i64 [ %190, %.loopexit358 ], [ %.sroa.4.0.copyload, %173 ]
  %.2291.ph = phi i64 [ %188, %.loopexit358 ], [ %.sroa.0.0.copyload, %173 ]
  %.2288.ph = phi ptr [ %303, %.loopexit358 ], [ %79, %173 ]
  %307 = phi <2 x double> [ %305, %.loopexit358 ], [ %89, %173 ]
  %308 = uitofp i64 %4 to double
  %309 = fdiv double %5, %308
  %310 = trunc i64 %4 to i32
  %311 = icmp sgt i32 %310, -1
  br i1 %311, label %.lr.ph403, label %.loopexit

.lr.ph403:                                        ; preds = %306
  %312 = shl nuw i32 %310, 1
  %313 = shl i64 %.2291.ph, 32
  %sext339 = add i64 %313, -4294967296
  %314 = ashr exact i64 %sext339, 32
  %315 = shl i64 %.2294.ph, 32
  %sext341 = add i64 %315, -4294967296
  %316 = ashr exact i64 %sext341, 32
  %317 = or disjoint i32 %312, 1
  %318 = call i32 @llvm.smax.i32(i32 %317, i32 1)
  %smax422 = zext nneg i32 %318 to i64
  %319 = extractelement <2 x double> %307, i64 0
  %320 = extractelement <2 x double> %307, i64 1
  %321 = extractelement <2 x double> %88, i64 0
  %322 = extractelement <2 x double> %88, i64 1
  %323 = extractelement <2 x double> %87, i64 0
  %324 = extractelement <2 x double> %87, i64 1
  br label %.lr.ph396.us

.lr.ph396.us:                                     ; preds = %._crit_edge397.us, %.lr.ph403
  %.0296401.us = phi i64 [ 0, %.lr.ph403 ], [ %372, %._crit_edge397.us ]
  %.0298400.us = phi double [ %84, %.lr.ph403 ], [ %371, %._crit_edge397.us ]
  %.0299399.us = phi ptr [ %3, %.lr.ph403 ], [ %368, %._crit_edge397.us ]
  %325 = call double @llvm.fmuladd.f64(double %321, double %.0298400.us, double %319)
  %326 = call double @llvm.fmuladd.f64(double %322, double %.0298400.us, double %320)
  br label %327

327:                                              ; preds = %.lr.ph396.us, %358
  %.0295394.us = phi double [ %84, %.lr.ph396.us ], [ %369, %358 ]
  %.0297393.us = phi i64 [ 0, %.lr.ph396.us ], [ %370, %358 ]
  %.1300392.us = phi ptr [ %.0299399.us, %.lr.ph396.us ], [ %368, %358 ]
  %328 = call double @llvm.fmuladd.f64(double %323, double %.0295394.us, double %325)
  %329 = call double @llvm.fmuladd.f64(double %324, double %.0295394.us, double %326)
  %330 = call i64 @vl_floor_d(double noundef %328)
  %331 = call i64 @vl_floor_d(double noundef %329)
  %332 = mul i64 %331, %.2291.ph
  %333 = add i64 %332, %330
  %334 = getelementptr inbounds float, ptr %.2288.ph, i64 %333
  %335 = load float, ptr %334, align 4, !tbaa !25
  %336 = fpext float %335 to double
  %337 = add i64 %333, 1
  %338 = getelementptr inbounds float, ptr %.2288.ph, i64 %337
  %339 = load float, ptr %338, align 4, !tbaa !25
  %340 = fpext float %339 to double
  %341 = add nsw i64 %331, 1
  %342 = mul i64 %341, %.2291.ph
  %343 = add i64 %342, %330
  %344 = getelementptr inbounds float, ptr %.2288.ph, i64 %343
  %345 = load float, ptr %344, align 4, !tbaa !25
  %346 = fpext float %345 to double
  %347 = add i64 %343, 1
  %348 = getelementptr inbounds float, ptr %.2288.ph, i64 %347
  %349 = load float, ptr %348, align 4, !tbaa !25
  %350 = fpext float %349 to double
  %351 = sitofp i64 %330 to double
  %352 = fsub double %328, %351
  %353 = sitofp i64 %331 to double
  %354 = fsub double %329, %353
  %355 = icmp slt i64 %330, 0
  %.not340.us = icmp sgt i64 %330, %314
  %or.cond406 = select i1 %355, i1 true, i1 %.not340.us
  br i1 %or.cond406, label %.split.us, label %356

356:                                              ; preds = %327
  %357 = icmp slt i64 %331, 0
  %.not342.us = icmp sgt i64 %331, %316
  %or.cond407 = select i1 %357, i1 true, i1 %.not342.us
  br i1 %or.cond407, label %.split405.us, label %358

358:                                              ; preds = %356
  %359 = fsub double 1.000000e+00, %354
  %360 = fsub double 1.000000e+00, %352
  %361 = fmul double %352, %340
  %362 = call double @llvm.fmuladd.f64(double %360, double %336, double %361)
  %363 = fmul double %352, %350
  %364 = call double @llvm.fmuladd.f64(double %360, double %346, double %363)
  %365 = fmul double %354, %364
  %366 = call double @llvm.fmuladd.f64(double %359, double %362, double %365)
  %367 = fptrunc double %366 to float
  %368 = getelementptr inbounds i8, ptr %.1300392.us, i64 4
  store float %367, ptr %.1300392.us, align 4, !tbaa !25
  %369 = fadd double %309, %.0295394.us
  %370 = add nuw nsw i64 %.0297393.us, 1
  %exitcond423.not = icmp eq i64 %370, %smax422
  br i1 %exitcond423.not, label %._crit_edge397.us, label %327, !llvm.loop !38

._crit_edge397.us:                                ; preds = %358
  %371 = fadd double %309, %.0298400.us
  %372 = add nuw nsw i64 %.0296401.us, 1
  %exitcond424.not = icmp eq i64 %372, %smax422
  br i1 %exitcond424.not, label %.loopexit, label %.lr.ph396.us, !llvm.loop !39

.split.us:                                        ; preds = %327
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.1, i32 noundef 2400, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

.split405.us:                                     ; preds = %356
  call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.1, i32 noundef 2401, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

.loopexit:                                        ; preds = %._crit_edge397.us, %155, %199, %306
  %.5 = phi i32 [ 0, %306 ], [ %156, %155 ], [ %200, %199 ], [ 0, %._crit_edge397.us ]
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %12) #9
  ret i32 %.5
}

declare i32 @vl_set_last_error(i32 noundef, ptr noundef, ...) local_unnamed_addr #7

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smin.i64(i64, i64) #8

declare double @exp2(double) local_unnamed_addr

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #8

; 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>) #8

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { noreturn 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { "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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { noreturn 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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_VlCovDet", !11, i64 0, !11, i64 8, !12, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !6, i64 72, !13, i64 80, !6, i64 88, !13, i64 96, !11, i64 104, !13, i64 112, !13, i64 120, !11, i64 128, !13, i64 136, !12, i64 144, !7, i64 152, !7, i64 216, !12, i64 280, !7, i64 284, !7, i64 7008, !7, i64 13732, !7, i64 20456, !7, i64 27180, !7, i64 31536, !7, i64 75096, !12, i64 75136}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"long long", !7, i64 0}
!14 = !{!15, !13, i64 16}
!15 = !{!"_VlScaleSpaceGeometry", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !6, i64 56, !6, i64 64}
!16 = !{!15, !6, i64 56}
!17 = !{!15, !13, i64 32}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!13, !13, i64 0}
!21 = !{!7, !7, i64 0}
!22 = !{!10, !12, i64 75136}
!23 = !{!10, !13, i64 136}
!24 = !{!10, !11, i64 128}
!25 = !{!26, !26, i64 0}
!26 = !{!"float", !7, i64 0}
!27 = distinct !{!27, !19, !28, !29}
!28 = !{!"llvm.loop.isvectorized", i32 1}
!29 = !{!"llvm.loop.unroll.runtime.disable"}
!30 = distinct !{!30, !19, !28, !29}
!31 = distinct !{!31, !19, !29, !28}
!32 = distinct !{!32, !19, !28, !29}
!33 = distinct !{!33, !19, !28}
!34 = distinct !{!34, !19, !29, !28}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass