; LLVM IR from QiaoLiuHit/LSOTB-TIR :: vlfeat-0.9.19/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, 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] }
%struct._VlCovDetFeatureOrientation = type { double, double }
%struct._VlCovDetFeatureLaplacianScale = type { double, double }

@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1
@vl_infinity_d = external hidden constant %union.anon, align 8
@.str.18 = 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.19 = 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 i64, align 8
  %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 i32, align 4
  %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 = call double @llvm.floor.f64(double %399)
  %401 = fsub double %400, 1.000000e+00
  %402 = fptosi double %401 to i64
  store i64 %402, ptr %37, align 8, !tbaa !9
  %403 = load double, ptr %43, align 8, !tbaa !11
  %404 = call double @llvm.floor.f64(double %403)
  %405 = fsub double %404, 1.000000e+00
  %406 = fptosi double %405 to i64
  store i64 %406, ptr %38, align 8, !tbaa !9
  %407 = load double, ptr %42, align 8, !tbaa !11
  %408 = call double @llvm.ceil.f64(double %407)
  %409 = fadd double %408, 1.000000e+00
  %410 = fptosi double %409 to i64
  store i64 %410, ptr %39, align 8, !tbaa !9
  %411 = load double, ptr %44, align 8, !tbaa !11
  %412 = call double @llvm.ceil.f64(double %411)
  %413 = fadd double %412, 1.000000e+00
  %414 = fptosi double %413 to i64
  store i64 %414, ptr %40, align 8, !tbaa !9
  %415 = load i64, ptr %37, align 8, !tbaa !9
  %416 = icmp slt i64 %415, 0
  br i1 %416, label %434, label %417

417:                                              ; preds = %398
  %418 = load i64, ptr %39, align 8, !tbaa !9
  %419 = load i64, ptr %29, align 8, !tbaa !9
  %420 = trunc i64 %419 to i32
  %421 = sub nsw i32 %420, 1
  %422 = sext i32 %421 to i64
  %423 = icmp sgt i64 %418, %422
  br i1 %423, label %434, label %424

424:                                              ; preds = %417
  %425 = load i64, ptr %38, align 8, !tbaa !9
  %426 = icmp slt i64 %425, 0
  br i1 %426, label %434, label %427

427:                                              ; preds = %424
  %428 = load i64, ptr %40, align 8, !tbaa !9
  %429 = load i64, ptr %30, align 8, !tbaa !9
  %430 = trunc i64 %429 to i32
  %431 = sub nsw i32 %430, 1
  %432 = sext i32 %431 to i64
  %433 = icmp sgt i64 %428, %432
  br i1 %433, label %434, label %716

434:                                              ; preds = %427, %424, %417, %398
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %435 = load i64, ptr %37, align 8, !tbaa !9
  %436 = sub nsw i64 0, %435
  %437 = icmp sgt i64 0, %436
  br i1 %437, label %438, label %439

438:                                              ; preds = %434
  br label %442

439:                                              ; preds = %434
  %440 = load i64, ptr %37, align 8, !tbaa !9
  %441 = sub nsw i64 0, %440
  br label %442

442:                                              ; preds = %439, %438
  %443 = phi i64 [ 0, %438 ], [ %441, %439 ]
  store i64 %443, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %444 = load i64, ptr %38, align 8, !tbaa !9
  %445 = sub nsw i64 0, %444
  %446 = icmp sgt i64 0, %445
  br i1 %446, label %447, label %448

447:                                              ; preds = %442
  br label %451

448:                                              ; preds = %442
  %449 = load i64, ptr %38, align 8, !tbaa !9
  %450 = sub nsw i64 0, %449
  br label %451

451:                                              ; preds = %448, %447
  %452 = phi i64 [ 0, %447 ], [ %450, %448 ]
  store i64 %452, ptr %53, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %453 = load i64, ptr %39, align 8, !tbaa !9
  %454 = load i64, ptr %29, align 8, !tbaa !9
  %455 = trunc i64 %454 to i32
  %456 = sub nsw i32 %455, 1
  %457 = sext i32 %456 to i64
  %458 = sub nsw i64 %453, %457
  %459 = icmp sgt i64 0, %458
  br i1 %459, label %460, label %461

460:                                              ; preds = %451
  br label %468

461:                                              ; preds = %451
  %462 = load i64, ptr %39, align 8, !tbaa !9
  %463 = load i64, ptr %29, align 8, !tbaa !9
  %464 = trunc i64 %463 to i32
  %465 = sub nsw i32 %464, 1
  %466 = sext i32 %465 to i64
  %467 = sub nsw i64 %462, %466
  br label %468

468:                                              ; preds = %461, %460
  %469 = phi i64 [ 0, %460 ], [ %467, %461 ]
  store i64 %469, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %470 = load i64, ptr %40, align 8, !tbaa !9
  %471 = load i64, ptr %30, align 8, !tbaa !9
  %472 = trunc i64 %471 to i32
  %473 = sub nsw i32 %472, 1
  %474 = sext i32 %473 to i64
  %475 = sub nsw i64 %470, %474
  %476 = icmp sgt i64 0, %475
  br i1 %476, label %477, label %478

477:                                              ; preds = %468
  br label %485

478:                                              ; preds = %468
  %479 = load i64, ptr %40, align 8, !tbaa !9
  %480 = load i64, ptr %30, align 8, !tbaa !9
  %481 = trunc i64 %480 to i32
  %482 = sub nsw i32 %481, 1
  %483 = sext i32 %482 to i64
  %484 = sub nsw i64 %479, %483
  br label %485

485:                                              ; preds = %478, %477
  %486 = phi i64 [ 0, %477 ], [ %484, %478 ]
  store i64 %486, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #9
  %487 = load i64, ptr %39, align 8, !tbaa !9
  %488 = load i64, ptr %37, align 8, !tbaa !9
  %489 = sub nsw i64 %487, %488
  %490 = add nsw i64 %489, 1
  store i64 %490, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  %491 = load i64, ptr %40, align 8, !tbaa !9
  %492 = load i64, ptr %38, align 8, !tbaa !9
  %493 = sub nsw i64 %491, %492
  %494 = add nsw i64 %493, 1
  store i64 %494, ptr %57, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  %495 = load i64, ptr %56, align 8, !tbaa !9
  %496 = load i64, ptr %57, align 8, !tbaa !9
  %497 = mul nsw i64 %495, %496
  %498 = mul i64 %497, 4
  store i64 %498, ptr %58, align 8, !tbaa !9
  %499 = load i64, ptr %58, align 8, !tbaa !9
  %500 = load ptr, ptr %13, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct._VlCovDet, ptr %500, i32 0, i32 14
  %502 = load i64, ptr %501, align 8, !tbaa !33
  %503 = icmp ugt i64 %499, %502
  br i1 %503, label %504, label %519

504:                                              ; preds = %485
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %505 = load ptr, ptr %13, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct._VlCovDet, ptr %505, i32 0, i32 13
  %507 = load ptr, ptr %13, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct._VlCovDet, ptr %507, i32 0, i32 14
  %509 = load i64, ptr %58, align 8, !tbaa !9
  %510 = call i32 @_vl_resize_buffer(ptr noundef %506, ptr noundef %508, i64 noundef %509)
  store i32 %510, ptr %59, align 4, !tbaa !31
  %511 = load i32, ptr %59, align 4, !tbaa !31
  %512 = icmp ne i32 %511, 0
  br i1 %512, label %513, label %515

513:                                              ; preds = %504
  %514 = call i32 (i32, ptr, ...) @vl_set_last_error(i32 noundef 2, ptr noundef null)
  store i32 %514, ptr %12, align 4
  store i32 1, ptr %60, align 4
  br label %516

515:                                              ; preds = %504
  store i32 0, ptr %60, align 4
  br label %516

516:                                              ; preds = %515, %513
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  %517 = load i32, ptr %60, align 4
  switch i32 %517, label %713 [
    i32 0, label %518
  ]

518:                                              ; preds = %516
  br label %519

519:                                              ; preds = %518, %485
  %520 = load i64, ptr %53, align 8, !tbaa !9
  %521 = load i64, ptr %57, align 8, !tbaa !9
  %522 = load i64, ptr %55, align 8, !tbaa !9
  %523 = sub nsw i64 %521, %522
  %524 = icmp slt i64 %520, %523
  br i1 %524, label %525, label %690

525:                                              ; preds = %519
  %526 = load i64, ptr %38, align 8, !tbaa !9
  %527 = load i64, ptr %53, align 8, !tbaa !9
  %528 = add nsw i64 %526, %527
  store i64 %528, ptr %51, align 8, !tbaa !9
  br label %529

529:                                              ; preds = %630, %525
  %530 = load i64, ptr %51, align 8, !tbaa !9
  %531 = load i64, ptr %38, align 8, !tbaa !9
  %532 = load i64, ptr %57, align 8, !tbaa !9
  %533 = add nsw i64 %531, %532
  %534 = load i64, ptr %55, align 8, !tbaa !9
  %535 = sub nsw i64 %533, %534
  %536 = icmp slt i64 %530, %535
  br i1 %536, label %537, label %633

537:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %538 = load ptr, ptr %13, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct._VlCovDet, ptr %538, i32 0, i32 13
  %540 = load ptr, ptr %539, align 8, !tbaa !34
  %541 = load i64, ptr %51, align 8, !tbaa !9
  %542 = load i64, ptr %38, align 8, !tbaa !9
  %543 = sub nsw i64 %541, %542
  %544 = load i64, ptr %56, align 8, !tbaa !9
  %545 = mul nsw i64 %543, %544
  %546 = getelementptr inbounds float, ptr %540, i64 %545
  store ptr %546, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %547 = load ptr, ptr %28, align 8, !tbaa !5
  %548 = load i64, ptr %51, align 8, !tbaa !9
  %549 = load i64, ptr %29, align 8, !tbaa !9
  %550 = mul i64 %548, %549
  %551 = getelementptr inbounds float, ptr %547, i64 %550
  %552 = load i64, ptr %37, align 8, !tbaa !9
  %553 = icmp sgt i64 0, %552
  br i1 %553, label %554, label %555

554:                                              ; preds = %537
  br label %557

555:                                              ; preds = %537
  %556 = load i64, ptr %37, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %555, %554
  %558 = phi i64 [ 0, %554 ], [ %556, %555 ]
  %559 = load i64, ptr %29, align 8, !tbaa !9
  %560 = trunc i64 %559 to i32
  %561 = sub nsw i32 %560, 1
  %562 = sext i32 %561 to i64
  %563 = icmp slt i64 %558, %562
  br i1 %563, label %564, label %572

564:                                              ; preds = %557
  %565 = load i64, ptr %37, align 8, !tbaa !9
  %566 = icmp sgt i64 0, %565
  br i1 %566, label %567, label %568

567:                                              ; preds = %564
  br label %570

568:                                              ; preds = %564
  %569 = load i64, ptr %37, align 8, !tbaa !9
  br label %570

570:                                              ; preds = %568, %567
  %571 = phi i64 [ 0, %567 ], [ %569, %568 ]
  br label %577

572:                                              ; preds = %557
  %573 = load i64, ptr %29, align 8, !tbaa !9
  %574 = trunc i64 %573 to i32
  %575 = sub nsw i32 %574, 1
  %576 = sext i32 %575 to i64
  br label %577

577:                                              ; preds = %572, %570
  %578 = phi i64 [ %571, %570 ], [ %576, %572 ]
  %579 = getelementptr inbounds float, ptr %551, i64 %578
  store ptr %579, ptr %62, align 8, !tbaa !5
  %580 = load i64, ptr %37, align 8, !tbaa !9
  store i64 %580, ptr %50, align 8, !tbaa !9
  br label %581

581:                                              ; preds = %592, %577
  %582 = load i64, ptr %50, align 8, !tbaa !9
  %583 = load i64, ptr %37, align 8, !tbaa !9
  %584 = load i64, ptr %52, align 8, !tbaa !9
  %585 = add nsw i64 %583, %584
  %586 = icmp slt i64 %582, %585
  br i1 %586, label %587, label %595

587:                                              ; preds = %581
  %588 = load ptr, ptr %62, align 8, !tbaa !5
  %589 = load float, ptr %588, align 4, !tbaa !35
  %590 = load ptr, ptr %61, align 8, !tbaa !5
  %591 = getelementptr inbounds float, ptr %590, i32 1
  store ptr %591, ptr %61, align 8, !tbaa !5
  store float %589, ptr %590, align 4, !tbaa !35
  br label %592

592:                                              ; preds = %587
  %593 = load i64, ptr %50, align 8, !tbaa !9
  %594 = add nsw i64 %593, 1
  store i64 %594, ptr %50, align 8, !tbaa !9
  br label %581, !llvm.loop !37

595:                                              ; preds = %581
  br label %596

596:                                              ; preds = %611, %595
  %597 = load i64, ptr %50, align 8, !tbaa !9
  %598 = load i64, ptr %37, align 8, !tbaa !9
  %599 = load i64, ptr %56, align 8, !tbaa !9
  %600 = add nsw i64 %598, %599
  %601 = load i64, ptr %54, align 8, !tbaa !9
  %602 = sub nsw i64 %600, %601
  %603 = sub nsw i64 %602, 2
  %604 = icmp slt i64 %597, %603
  br i1 %604, label %605, label %614

605:                                              ; preds = %596
  %606 = load ptr, ptr %62, align 8, !tbaa !5
  %607 = getelementptr inbounds float, ptr %606, i32 1
  store ptr %607, ptr %62, align 8, !tbaa !5
  %608 = load float, ptr %606, align 4, !tbaa !35
  %609 = load ptr, ptr %61, align 8, !tbaa !5
  %610 = getelementptr inbounds float, ptr %609, i32 1
  store ptr %610, ptr %61, align 8, !tbaa !5
  store float %608, ptr %609, align 4, !tbaa !35
  br label %611

611:                                              ; preds = %605
  %612 = load i64, ptr %50, align 8, !tbaa !9
  %613 = add nsw i64 %612, 1
  store i64 %613, ptr %50, align 8, !tbaa !9
  br label %596, !llvm.loop !38

614:                                              ; preds = %596
  br label %615

615:                                              ; preds = %626, %614
  %616 = load i64, ptr %50, align 8, !tbaa !9
  %617 = load i64, ptr %37, align 8, !tbaa !9
  %618 = load i64, ptr %56, align 8, !tbaa !9
  %619 = add nsw i64 %617, %618
  %620 = icmp slt i64 %616, %619
  br i1 %620, label %621, label %629

621:                                              ; preds = %615
  %622 = load ptr, ptr %62, align 8, !tbaa !5
  %623 = load float, ptr %622, align 4, !tbaa !35
  %624 = load ptr, ptr %61, align 8, !tbaa !5
  %625 = getelementptr inbounds float, ptr %624, i32 1
  store ptr %625, ptr %61, align 8, !tbaa !5
  store float %623, ptr %624, align 4, !tbaa !35
  br label %626

626:                                              ; preds = %621
  %627 = load i64, ptr %50, align 8, !tbaa !9
  %628 = add nsw i64 %627, 1
  store i64 %628, ptr %50, align 8, !tbaa !9
  br label %615, !llvm.loop !39

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

630:                                              ; preds = %629
  %631 = load i64, ptr %51, align 8, !tbaa !9
  %632 = add nsw i64 %631, 1
  store i64 %632, ptr %51, align 8, !tbaa !9
  br label %529, !llvm.loop !40

633:                                              ; preds = %529
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %634

634:                                              ; preds = %655, %633
  %635 = load i64, ptr %51, align 8, !tbaa !9
  %636 = load i64, ptr %53, align 8, !tbaa !9
  %637 = icmp slt i64 %635, %636
  br i1 %637, label %638, label %658

638:                                              ; preds = %634
  %639 = load ptr, ptr %13, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct._VlCovDet, ptr %639, i32 0, i32 13
  %641 = load ptr, ptr %640, align 8, !tbaa !34
  %642 = load i64, ptr %51, align 8, !tbaa !9
  %643 = load i64, ptr %56, align 8, !tbaa !9
  %644 = mul nsw i64 %642, %643
  %645 = getelementptr inbounds float, ptr %641, i64 %644
  %646 = load ptr, ptr %13, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct._VlCovDet, ptr %646, i32 0, i32 13
  %648 = load ptr, ptr %647, align 8, !tbaa !34
  %649 = load i64, ptr %53, align 8, !tbaa !9
  %650 = load i64, ptr %56, align 8, !tbaa !9
  %651 = mul nsw i64 %649, %650
  %652 = getelementptr inbounds float, ptr %648, i64 %651
  %653 = load i64, ptr %56, align 8, !tbaa !9
  %654 = mul i64 %653, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %645, ptr align 4 %652, i64 %654, i1 false)
  br label %655

655:                                              ; preds = %638
  %656 = load i64, ptr %51, align 8, !tbaa !9
  %657 = add nsw i64 %656, 1
  store i64 %657, ptr %51, align 8, !tbaa !9
  br label %634, !llvm.loop !41

658:                                              ; preds = %634
  %659 = load i64, ptr %57, align 8, !tbaa !9
  %660 = load i64, ptr %55, align 8, !tbaa !9
  %661 = sub nsw i64 %659, %660
  store i64 %661, ptr %51, align 8, !tbaa !9
  br label %662

662:                                              ; preds = %686, %658
  %663 = load i64, ptr %51, align 8, !tbaa !9
  %664 = load i64, ptr %57, align 8, !tbaa !9
  %665 = icmp slt i64 %663, %664
  br i1 %665, label %666, label %689

666:                                              ; preds = %662
  %667 = load ptr, ptr %13, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct._VlCovDet, ptr %667, i32 0, i32 13
  %669 = load ptr, ptr %668, align 8, !tbaa !34
  %670 = load i64, ptr %51, align 8, !tbaa !9
  %671 = load i64, ptr %56, align 8, !tbaa !9
  %672 = mul nsw i64 %670, %671
  %673 = getelementptr inbounds float, ptr %669, i64 %672
  %674 = load ptr, ptr %13, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct._VlCovDet, ptr %674, i32 0, i32 13
  %676 = load ptr, ptr %675, align 8, !tbaa !34
  %677 = load i64, ptr %57, align 8, !tbaa !9
  %678 = load i64, ptr %55, align 8, !tbaa !9
  %679 = sub nsw i64 %677, %678
  %680 = sub nsw i64 %679, 1
  %681 = load i64, ptr %56, align 8, !tbaa !9
  %682 = mul nsw i64 %680, %681
  %683 = getelementptr inbounds float, ptr %676, i64 %682
  %684 = load i64, ptr %56, align 8, !tbaa !9
  %685 = mul i64 %684, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %673, ptr align 4 %683, i64 %685, i1 false)
  br label %686

686:                                              ; preds = %666
  %687 = load i64, ptr %51, align 8, !tbaa !9
  %688 = add nsw i64 %687, 1
  store i64 %688, ptr %51, align 8, !tbaa !9
  br label %662, !llvm.loop !42

689:                                              ; preds = %662
  br label %697

690:                                              ; preds = %519
  %691 = load ptr, ptr %13, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct._VlCovDet, ptr %691, i32 0, i32 13
  %693 = load ptr, ptr %692, align 8, !tbaa !34
  %694 = load ptr, ptr %13, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct._VlCovDet, ptr %694, i32 0, i32 14
  %696 = load i64, ptr %695, align 8, !tbaa !33
  call void @llvm.memset.p0.i64(ptr align 4 %693, i8 0, i64 %696, i1 false)
  br label %697

697:                                              ; preds = %690, %689
  %698 = load ptr, ptr %13, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct._VlCovDet, ptr %698, i32 0, i32 13
  %700 = load ptr, ptr %699, align 8, !tbaa !34
  store ptr %700, ptr %28, align 8, !tbaa !5
  %701 = load i64, ptr %56, align 8, !tbaa !9
  store i64 %701, ptr %29, align 8, !tbaa !9
  %702 = load i64, ptr %57, align 8, !tbaa !9
  store i64 %702, ptr %30, align 8, !tbaa !9
  %703 = load i64, ptr %37, align 8, !tbaa !9
  %704 = sitofp i64 %703 to double
  %705 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 0
  %706 = load double, ptr %705, align 16, !tbaa !11
  %707 = fsub double %706, %704
  store double %707, ptr %705, align 16, !tbaa !11
  %708 = load i64, ptr %38, align 8, !tbaa !9
  %709 = sitofp i64 %708 to double
  %710 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 1
  %711 = load double, ptr %710, align 8, !tbaa !11
  %712 = fsub double %711, %709
  store double %712, ptr %710, align 8, !tbaa !11
  store i32 0, ptr %60, align 4
  br label %713

713:                                              ; preds = %697, %516
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  %714 = load i32, ptr %60, align 4
  switch i32 %714, label %717 [
    i32 0, label %715
  ]

715:                                              ; preds = %713
  br label %716

716:                                              ; preds = %715, %427
  store i32 0, ptr %60, align 4
  br label %717

717:                                              ; preds = %716, %713
  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
  %718 = load i32, ptr %60, align 4
  switch i32 %718, label %881 [
    i32 0, label %719
  ]

719:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %720 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %720, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %721 = load double, ptr %18, align 8, !tbaa !11
  %722 = fneg double %721
  store double %722, 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
  %723 = load double, ptr %18, align 8, !tbaa !11
  %724 = load i64, ptr %17, align 8, !tbaa !9
  %725 = uitofp i64 %724 to double
  %726 = fdiv double %723, %725
  store double %726, ptr %67, align 8, !tbaa !11
  store i64 0, ptr %66, align 8, !tbaa !9
  br label %727

727:                                              ; preds = %877, %719
  %728 = load i64, ptr %66, align 8, !tbaa !9
  %729 = load i64, ptr %17, align 8, !tbaa !9
  %730 = trunc i64 %729 to i32
  %731 = mul nsw i32 2, %730
  %732 = add nsw i32 %731, 1
  %733 = sext i32 %732 to i64
  %734 = icmp slt i64 %728, %733
  br i1 %734, label %735, label %880

735:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %736 = load double, ptr %18, align 8, !tbaa !11
  %737 = fneg double %736
  store double %737, ptr %68, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %738 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 2
  %739 = load double, ptr %738, align 16, !tbaa !11
  %740 = load double, ptr %64, align 8, !tbaa !11
  %741 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 0
  %742 = load double, ptr %741, align 16, !tbaa !11
  %743 = call double @llvm.fmuladd.f64(double %739, double %740, double %742)
  store double %743, ptr %69, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %744 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 3
  %745 = load double, ptr %744, align 8, !tbaa !11
  %746 = load double, ptr %64, align 8, !tbaa !11
  %747 = getelementptr inbounds [2 x double], ptr %33, i64 0, i64 1
  %748 = load double, ptr %747, align 8, !tbaa !11
  %749 = call double @llvm.fmuladd.f64(double %745, double %746, double %748)
  store double %749, ptr %70, align 8, !tbaa !11
  store i64 0, ptr %65, align 8, !tbaa !9
  br label %750

750:                                              ; preds = %870, %735
  %751 = load i64, ptr %65, align 8, !tbaa !9
  %752 = load i64, ptr %17, align 8, !tbaa !9
  %753 = trunc i64 %752 to i32
  %754 = mul nsw i32 2, %753
  %755 = add nsw i32 %754, 1
  %756 = sext i32 %755 to i64
  %757 = icmp slt i64 %751, %756
  br i1 %757, label %758, label %873

758:                                              ; preds = %750
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %759 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 0
  %760 = load double, ptr %759, align 16, !tbaa !11
  %761 = load double, ptr %68, align 8, !tbaa !11
  %762 = load double, ptr %69, align 8, !tbaa !11
  %763 = call double @llvm.fmuladd.f64(double %760, double %761, double %762)
  store double %763, ptr %71, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %764 = getelementptr inbounds [4 x double], ptr %32, i64 0, i64 1
  %765 = load double, ptr %764, align 8, !tbaa !11
  %766 = load double, ptr %68, align 8, !tbaa !11
  %767 = load double, ptr %70, align 8, !tbaa !11
  %768 = call double @llvm.fmuladd.f64(double %765, double %766, double %767)
  store double %768, ptr %72, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %769 = load double, ptr %71, align 8, !tbaa !11
  %770 = call i64 @vl_floor_d(double noundef %769)
  store i64 %770, ptr %73, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #9
  %771 = load double, ptr %72, align 8, !tbaa !11
  %772 = call i64 @vl_floor_d(double noundef %771)
  store i64 %772, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  %773 = load ptr, ptr %28, align 8, !tbaa !5
  %774 = load i64, ptr %74, align 8, !tbaa !9
  %775 = load i64, ptr %29, align 8, !tbaa !9
  %776 = mul i64 %774, %775
  %777 = load i64, ptr %73, align 8, !tbaa !9
  %778 = add i64 %776, %777
  %779 = getelementptr inbounds float, ptr %773, i64 %778
  %780 = load float, ptr %779, align 4, !tbaa !35
  %781 = fpext float %780 to double
  store double %781, ptr %75, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #9
  %782 = load ptr, ptr %28, align 8, !tbaa !5
  %783 = load i64, ptr %74, align 8, !tbaa !9
  %784 = load i64, ptr %29, align 8, !tbaa !9
  %785 = mul i64 %783, %784
  %786 = load i64, ptr %73, align 8, !tbaa !9
  %787 = add i64 %785, %786
  %788 = add i64 %787, 1
  %789 = getelementptr inbounds float, ptr %782, i64 %788
  %790 = load float, ptr %789, align 4, !tbaa !35
  %791 = fpext float %790 to double
  store double %791, ptr %76, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %792 = load ptr, ptr %28, align 8, !tbaa !5
  %793 = load i64, ptr %74, align 8, !tbaa !9
  %794 = add nsw i64 %793, 1
  %795 = load i64, ptr %29, align 8, !tbaa !9
  %796 = mul i64 %794, %795
  %797 = load i64, ptr %73, align 8, !tbaa !9
  %798 = add i64 %796, %797
  %799 = getelementptr inbounds float, ptr %792, i64 %798
  %800 = load float, ptr %799, align 4, !tbaa !35
  %801 = fpext float %800 to double
  store double %801, ptr %77, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %802 = load ptr, ptr %28, align 8, !tbaa !5
  %803 = load i64, ptr %74, align 8, !tbaa !9
  %804 = add nsw i64 %803, 1
  %805 = load i64, ptr %29, align 8, !tbaa !9
  %806 = mul i64 %804, %805
  %807 = load i64, ptr %73, align 8, !tbaa !9
  %808 = add i64 %806, %807
  %809 = add i64 %808, 1
  %810 = getelementptr inbounds float, ptr %802, i64 %809
  %811 = load float, ptr %810, align 4, !tbaa !35
  %812 = fpext float %811 to double
  store double %812, ptr %78, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  %813 = load double, ptr %71, align 8, !tbaa !11
  %814 = load i64, ptr %73, align 8, !tbaa !9
  %815 = sitofp i64 %814 to double
  %816 = fsub double %813, %815
  store double %816, ptr %79, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %817 = load double, ptr %72, align 8, !tbaa !11
  %818 = load i64, ptr %74, align 8, !tbaa !9
  %819 = sitofp i64 %818 to double
  %820 = fsub double %817, %819
  store double %820, ptr %80, align 8, !tbaa !11
  %821 = load i64, ptr %73, align 8, !tbaa !9
  %822 = icmp sge i64 %821, 0
  br i1 %822, label %823, label %831

823:                                              ; preds = %758
  %824 = load i64, ptr %73, align 8, !tbaa !9
  %825 = load i64, ptr %29, align 8, !tbaa !9
  %826 = trunc i64 %825 to i32
  %827 = sub nsw i32 %826, 1
  %828 = sext i32 %827 to i64
  %829 = icmp sle i64 %824, %828
  br i1 %829, label %830, label %831

830:                                              ; preds = %823
  br label %832

831:                                              ; preds = %823, %758
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.1, i32 noundef 2380, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

832:                                              ; preds = %830
  %833 = load i64, ptr %74, align 8, !tbaa !9
  %834 = icmp sge i64 %833, 0
  br i1 %834, label %835, label %843

835:                                              ; preds = %832
  %836 = load i64, ptr %74, align 8, !tbaa !9
  %837 = load i64, ptr %30, align 8, !tbaa !9
  %838 = trunc i64 %837 to i32
  %839 = sub nsw i32 %838, 1
  %840 = sext i32 %839 to i64
  %841 = icmp sle i64 %836, %840
  br i1 %841, label %842, label %843

842:                                              ; preds = %835
  br label %844

843:                                              ; preds = %835, %832
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.1, i32 noundef 2381, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

844:                                              ; preds = %842
  %845 = load double, ptr %80, align 8, !tbaa !11
  %846 = fsub double 1.000000e+00, %845
  %847 = load double, ptr %79, align 8, !tbaa !11
  %848 = fsub double 1.000000e+00, %847
  %849 = load double, ptr %75, align 8, !tbaa !11
  %850 = load double, ptr %79, align 8, !tbaa !11
  %851 = load double, ptr %76, align 8, !tbaa !11
  %852 = fmul double %850, %851
  %853 = call double @llvm.fmuladd.f64(double %848, double %849, double %852)
  %854 = load double, ptr %80, align 8, !tbaa !11
  %855 = load double, ptr %79, align 8, !tbaa !11
  %856 = fsub double 1.000000e+00, %855
  %857 = load double, ptr %77, align 8, !tbaa !11
  %858 = load double, ptr %79, align 8, !tbaa !11
  %859 = load double, ptr %78, align 8, !tbaa !11
  %860 = fmul double %858, %859
  %861 = call double @llvm.fmuladd.f64(double %856, double %857, double %860)
  %862 = fmul double %854, %861
  %863 = call double @llvm.fmuladd.f64(double %846, double %853, double %862)
  %864 = fptrunc double %863 to float
  %865 = load ptr, ptr %63, align 8, !tbaa !5
  %866 = getelementptr inbounds float, ptr %865, i32 1
  store ptr %866, ptr %63, align 8, !tbaa !5
  store float %864, ptr %865, align 4, !tbaa !35
  %867 = load double, ptr %67, align 8, !tbaa !11
  %868 = load double, ptr %68, align 8, !tbaa !11
  %869 = fadd double %868, %867
  store double %869, 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 %870

870:                                              ; preds = %844
  %871 = load i64, ptr %65, align 8, !tbaa !9
  %872 = add nsw i64 %871, 1
  store i64 %872, ptr %65, align 8, !tbaa !9
  br label %750, !llvm.loop !43

873:                                              ; preds = %750
  %874 = load double, ptr %67, align 8, !tbaa !11
  %875 = load double, ptr %64, align 8, !tbaa !11
  %876 = fadd double %875, %874
  store double %876, 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 %877

877:                                              ; preds = %873
  %878 = load i64, ptr %66, align 8, !tbaa !9
  %879 = add nsw i64 %878, 1
  store i64 %879, ptr %66, align 8, !tbaa !9
  br label %727, !llvm.loop !44

880:                                              ; preds = %727
  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 %60, align 4
  br label %881

881:                                              ; preds = %880, %717
  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
  %882 = load i32, ptr %12, align 4
  ret i32 %882
}

; 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

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

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, !12, i64 64, !10, i64 72, !6, i64 80, !10, i64 88, !10, i64 96, !6, i64 104, !10, i64 112, !15, i64 120, !7, i64 128, !7, i64 192, !15, i64 256, !7, i64 260, !7, i64 6984, !7, i64 13708, !7, i64 20432, !7, i64 27156, !7, i64 31512, !7, i64 75072}
!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, !10, i64 112}
!34 = !{!14, !6, i64 104}
!35 = !{!36, !36, i64 0}
!36 = !{!"float", !7, i64 0}
!37 = distinct !{!37, !24}
!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}


; 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 [80 x i8], align 1
@vl_infinity_d = external hidden local_unnamed_addr constant %union.anon, align 8
@.str.18 = 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.19 = 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
  %.0275.in = phi i64 [ %23, %11 ], [ %.0275, %31 ]
  %.0275 = add nsw i64 %.0275.in, 1
  %30 = load i64, ptr %25, align 8
  %.not.not = icmp slt i64 %.0275.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 %.0275 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_edge419, label %29, !llvm.loop !18

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

split:                                            ; preds = %29, %._crit_edge419
  %52 = phi i64 [ %.pre, %._crit_edge419 ], [ %30, %29 ]
  %.1276 = phi i64 [ %.0275.in, %._crit_edge419 ], [ %.0275, %29 ]
  %53 = call i64 @llvm.smin.i64(i64 %.1276, 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
  %exp2322 = call double @exp2(double %70) #9
  %71 = fmul double %65, %exp2322
  %.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
  %.not323 = icmp eq ptr %2, null
  br i1 %.not323, 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 = call <2 x double> @llvm.floor.v2f64(<2 x double> %134)
  %139 = fadd <2 x double> %138, <double -1.000000e+00, double -1.000000e+00>
  %140 = fptosi <2 x double> %139 to <2 x i64>
  %141 = call double @llvm.ceil.f64(double %132)
  %142 = fadd double %141, 1.000000e+00
  %143 = fptosi double %142 to i64
  %144 = call double @llvm.ceil.f64(double %137)
  %145 = fadd double %144, 1.000000e+00
  %146 = fptosi double %145 to i64
  %147 = extractelement <2 x i64> %140, i64 0
  %148 = icmp slt i64 %147, 0
  %.pre423 = shl i64 %.sroa.0.0.copyload, 32
  %.pre424 = add i64 %.pre423, -4294967296
  %.pre425 = ashr exact i64 %.pre424, 32
  br i1 %148, label %._crit_edge422, label %149

149:                                              ; preds = %77
  %150 = icmp slt i64 %.pre425, %143
  %151 = extractelement <2 x i64> %140, i64 1
  %152 = icmp slt i64 %151, 0
  %or.cond = select i1 %150, i1 true, i1 %152
  br i1 %or.cond, label %._crit_edge422, label %153

153:                                              ; preds = %149
  %154 = shl i64 %.sroa.4.0.copyload, 32
  %sext324 = add i64 %154, -4294967296
  %155 = ashr exact i64 %sext324, 32
  %156 = icmp slt i64 %155, %146
  br i1 %156, label %._crit_edge422, label %286

._crit_edge422:                                   ; preds = %77, %153, %149
  %157 = sub i64 0, %147
  %158 = call i64 @llvm.smax.i64(i64 %157, i64 0)
  %159 = extractelement <2 x i64> %140, i64 1
  %160 = sub i64 0, %159
  %161 = call i64 @llvm.smax.i64(i64 %160, i64 0)
  %162 = sub i64 %143, %.pre425
  %spec.select = call i64 @llvm.smax.i64(i64 %162, i64 0)
  %163 = shl i64 %.sroa.4.0.copyload, 32
  %sext326 = add i64 %163, -4294967296
  %164 = ashr exact i64 %sext326, 32
  %165 = sub i64 %146, %164
  %166 = call i64 @llvm.smax.i64(i64 %165, i64 0)
  %167 = sub nsw i64 %143, %147
  %168 = add nsw i64 %167, 1
  %169 = sub nsw i64 %146, %159
  %170 = add nsw i64 %169, 1
  %171 = shl i64 %170, 2
  %172 = mul i64 %171, %168
  %173 = getelementptr inbounds i8, ptr %0, i64 112
  %174 = load i64, ptr %173, align 8, !tbaa !22
  %175 = icmp ugt i64 %172, %174
  br i1 %175, label %176, label %.thread

176:                                              ; preds = %._crit_edge422
  %177 = getelementptr inbounds i8, ptr %0, i64 104
  %178 = call i32 @_vl_resize_buffer(ptr noundef nonnull %177, ptr noundef nonnull %173, i64 noundef %172)
  %.not327 = icmp eq i32 %178, 0
  br i1 %.not327, label %.thread, label %284

.thread:                                          ; preds = %176, %._crit_edge422
  %179 = sub nsw i64 %170, %166
  %180 = icmp slt i64 %161, %179
  br i1 %180, label %181, label %276

181:                                              ; preds = %.thread
  %182 = add nsw i64 %161, %159
  %183 = add i64 %146, 1
  %184 = sub i64 %183, %166
  %185 = icmp slt i64 %182, %184
  br i1 %185, label %.lr.ph376, label %.preheader349

.lr.ph376:                                        ; preds = %181
  %186 = getelementptr inbounds i8, ptr %0, i64 104
  %187 = load ptr, ptr %186, align 8, !tbaa !23
  %188 = call i64 @llvm.smax.i64(i64 %147, i64 0)
  %. = call i64 @llvm.smin.i64(i64 %188, i64 %.pre425)
  %invariant.gep = getelementptr float, ptr %79, i64 %.
  %189 = add i64 %158, %147
  %.not398 = icmp sgt i64 %147, -1
  %190 = add i64 %143, 1
  %191 = xor i64 %spec.select, -1
  %192 = add i64 %191, %143
  %193 = add i64 %147, 1
  %smax = call i64 @llvm.smax.i64(i64 %189, i64 %193)
  %194 = add i64 %143, 1
  %195 = mul i64 %.sroa.0.0.copyload, %182
  %196 = add i64 %195, %.
  %.neg = mul i64 %196, -4
  %.neg487 = sub i64 %.neg, %80
  %197 = mul i64 %.sroa.0.0.copyload, -4
  %198 = xor i64 %spec.select, -1
  %199 = add i64 %198, %143
  %200 = sub i64 %smax, %147
  %min.iters.check470 = icmp ult i64 %200, 8
  %n.vec473 = and i64 %200, -8
  %201 = shl i64 %n.vec473, 2
  %ind.end476 = add i64 %n.vec473, %147
  %cmp.n486 = icmp eq i64 %200, %n.vec473
  br label %207

.preheader349:                                    ; preds = %._crit_edge, %181
  %202 = icmp slt i64 %159, 0
  br i1 %202, label %.lr.ph378, label %.preheader

.lr.ph378:                                        ; preds = %.preheader349
  %203 = getelementptr inbounds i8, ptr %0, i64 104
  %204 = mul nsw i64 %168, %161
  %205 = shl i64 %168, 2
  %smax409 = call i64 @llvm.smax.i64(i64 %160, i64 1)
  %xtraiter = and i64 %smax409, 1
  %206 = icmp slt i64 %160, 2
  br i1 %206, label %.preheader.loopexit.unr-lcssa, label %.lr.ph378.new

.lr.ph378.new:                                    ; preds = %.lr.ph378
  %unroll_iter = and i64 %smax409, 9223372036854775806
  br label %255

207:                                              ; preds = %.lr.ph376, %._crit_edge
  %indvar = phi i64 [ 0, %.lr.ph376 ], [ %indvar.next, %._crit_edge ]
  %.0307374 = phi i64 [ %182, %.lr.ph376 ], [ %239, %._crit_edge ]
  %208 = mul i64 %197, %indvar
  %209 = add i64 %.neg487, %208
  %210 = sub nsw i64 %.0307374, %159
  %211 = mul nsw i64 %210, %168
  %212 = getelementptr inbounds float, ptr %187, i64 %211
  %213 = mul i64 %.0307374, %.sroa.0.0.copyload
  %gep = getelementptr float, ptr %invariant.gep, i64 %213
  br i1 %.not398, label %.preheader351, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %207
  %.pre420 = load float, ptr %gep, align 4, !tbaa !24
  br i1 %min.iters.check470, label %.lr.ph.preheader491, label %vector.ph471

.lr.ph.preheader491:                              ; preds = %middle.block468, %.lr.ph.preheader
  %.0293361.ph = phi ptr [ %212, %.lr.ph.preheader ], [ %ind.end474, %middle.block468 ]
  %.0304360.ph = phi i64 [ %147, %.lr.ph.preheader ], [ %ind.end476, %middle.block468 ]
  br label %.lr.ph

vector.ph471:                                     ; preds = %.lr.ph.preheader
  %ind.end474 = getelementptr i8, ptr %212, i64 %201
  %broadcast.splatinsert483 = insertelement <4 x float> poison, float %.pre420, i64 0
  %broadcast.splat484 = shufflevector <4 x float> %broadcast.splatinsert483, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body478

vector.body478:                                   ; preds = %vector.body478, %vector.ph471
  %index479 = phi i64 [ 0, %vector.ph471 ], [ %index.next485, %vector.body478 ]
  %offset.idx480 = shl i64 %index479, 2
  %next.gep481 = getelementptr i8, ptr %212, i64 %offset.idx480
  %214 = getelementptr i8, ptr %next.gep481, i64 16
  store <4 x float> %broadcast.splat484, ptr %next.gep481, align 4, !tbaa !24
  store <4 x float> %broadcast.splat484, ptr %214, align 4, !tbaa !24
  %index.next485 = add nuw i64 %index479, 8
  %215 = icmp eq i64 %index.next485, %n.vec473
  br i1 %215, label %middle.block468, label %vector.body478, !llvm.loop !26

middle.block468:                                  ; preds = %vector.body478
  br i1 %cmp.n486, label %.preheader351, label %.lr.ph.preheader491

.preheader351:                                    ; preds = %.lr.ph, %middle.block468, %207
  %.0304.lcssa = phi i64 [ %147, %207 ], [ %smax, %middle.block468 ], [ %smax, %.lr.ph ]
  %.0293.lcssa = phi ptr [ %212, %207 ], [ %ind.end474, %middle.block468 ], [ %224, %.lr.ph ]
  %216 = icmp slt i64 %.0304.lcssa, %192
  br i1 %216, label %.lr.ph366.preheader, label %.preheader350

.lr.ph366.preheader:                              ; preds = %.preheader351
  %.0293.lcssa444 = ptrtoint ptr %.0293.lcssa to i64
  %217 = sub i64 %199, %.0304.lcssa
  %min.iters.check447 = icmp ult i64 %217, 8
  %218 = add i64 %209, %.0293.lcssa444
  %diff.check = icmp ult i64 %218, 32
  %or.cond488 = select i1 %min.iters.check447, i1 true, i1 %diff.check
  br i1 %or.cond488, label %.lr.ph366.preheader490, label %vector.ph448

.lr.ph366.preheader490:                           ; preds = %middle.block445, %.lr.ph366.preheader
  %.0292365.ph = phi ptr [ %gep, %.lr.ph366.preheader ], [ %ind.end451, %middle.block445 ]
  %.1294364.ph = phi ptr [ %.0293.lcssa, %.lr.ph366.preheader ], [ %ind.end453, %middle.block445 ]
  %.1305363.ph = phi i64 [ %.0304.lcssa, %.lr.ph366.preheader ], [ %ind.end455, %middle.block445 ]
  br label %.lr.ph366

vector.ph448:                                     ; preds = %.lr.ph366.preheader
  %n.vec450 = and i64 %217, -8
  %219 = shl i64 %n.vec450, 2
  %ind.end451 = getelementptr i8, ptr %gep, i64 %219
  %220 = shl i64 %n.vec450, 2
  %ind.end453 = getelementptr i8, ptr %.0293.lcssa, i64 %220
  %ind.end455 = add i64 %.0304.lcssa, %n.vec450
  br label %vector.body457

vector.body457:                                   ; preds = %vector.body457, %vector.ph448
  %index458 = phi i64 [ 0, %vector.ph448 ], [ %index.next466, %vector.body457 ]
  %offset.idx459 = shl i64 %index458, 2
  %next.gep460 = getelementptr i8, ptr %gep, i64 %offset.idx459
  %offset.idx462 = shl i64 %index458, 2
  %next.gep463 = getelementptr i8, ptr %.0293.lcssa, i64 %offset.idx462
  %221 = getelementptr i8, ptr %next.gep460, i64 16
  %wide.load = load <4 x float>, ptr %next.gep460, align 4, !tbaa !24
  %wide.load465 = load <4 x float>, ptr %221, align 4, !tbaa !24
  %222 = getelementptr i8, ptr %next.gep463, i64 16
  store <4 x float> %wide.load, ptr %next.gep463, align 4, !tbaa !24
  store <4 x float> %wide.load465, ptr %222, align 4, !tbaa !24
  %index.next466 = add nuw i64 %index458, 8
  %223 = icmp eq i64 %index.next466, %n.vec450
  br i1 %223, label %middle.block445, label %vector.body457, !llvm.loop !29

middle.block445:                                  ; preds = %vector.body457
  %cmp.n467 = icmp eq i64 %217, %n.vec450
  br i1 %cmp.n467, label %.preheader350, label %.lr.ph366.preheader490

.lr.ph:                                           ; preds = %.lr.ph.preheader491, %.lr.ph
  %.0293361 = phi ptr [ %224, %.lr.ph ], [ %.0293361.ph, %.lr.ph.preheader491 ]
  %.0304360 = phi i64 [ %225, %.lr.ph ], [ %.0304360.ph, %.lr.ph.preheader491 ]
  %224 = getelementptr inbounds i8, ptr %.0293361, i64 4
  store float %.pre420, ptr %.0293361, align 4, !tbaa !24
  %225 = add nsw i64 %.0304360, 1
  %226 = icmp slt i64 %225, %189
  br i1 %226, label %.lr.ph, label %.preheader351, !llvm.loop !30

.preheader350:                                    ; preds = %.lr.ph366, %middle.block445, %.preheader351
  %.1305.lcssa = phi i64 [ %.0304.lcssa, %.preheader351 ], [ %192, %middle.block445 ], [ %192, %.lr.ph366 ]
  %.1294.lcssa = phi ptr [ %.0293.lcssa, %.preheader351 ], [ %ind.end453, %middle.block445 ], [ %234, %.lr.ph366 ]
  %.0292.lcssa = phi ptr [ %gep, %.preheader351 ], [ %ind.end451, %middle.block445 ], [ %232, %.lr.ph366 ]
  %227 = icmp slt i64 %.1305.lcssa, %190
  br i1 %227, label %.lr.ph373.preheader, label %._crit_edge

.lr.ph373.preheader:                              ; preds = %.preheader350
  %.pre421 = load float, ptr %.0292.lcssa, align 4, !tbaa !24
  %228 = sub i64 %194, %.1305.lcssa
  %min.iters.check = icmp ult i64 %228, 8
  br i1 %min.iters.check, label %.lr.ph373.preheader489, label %vector.ph

.lr.ph373.preheader489:                           ; preds = %middle.block, %.lr.ph373.preheader
  %.2295372.ph = phi ptr [ %.1294.lcssa, %.lr.ph373.preheader ], [ %ind.end, %middle.block ]
  %.2306371.ph = phi i64 [ %.1305.lcssa, %.lr.ph373.preheader ], [ %ind.end441, %middle.block ]
  br label %.lr.ph373

vector.ph:                                        ; preds = %.lr.ph373.preheader
  %n.vec = and i64 %228, -8
  %229 = shl i64 %n.vec, 2
  %ind.end = getelementptr i8, ptr %.1294.lcssa, i64 %229
  %ind.end441 = add i64 %.1305.lcssa, %n.vec
  %broadcast.splatinsert = insertelement <4 x float> poison, float %.pre421, 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 %.1294.lcssa, i64 %offset.idx
  %230 = getelementptr i8, ptr %next.gep, i64 16
  store <4 x float> %broadcast.splat, ptr %next.gep, align 4, !tbaa !24
  store <4 x float> %broadcast.splat, ptr %230, align 4, !tbaa !24
  %index.next = add nuw i64 %index, 8
  %231 = icmp eq i64 %index.next, %n.vec
  br i1 %231, label %middle.block, label %vector.body, !llvm.loop !31

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %228, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph373.preheader489

.lr.ph366:                                        ; preds = %.lr.ph366.preheader490, %.lr.ph366
  %.0292365 = phi ptr [ %232, %.lr.ph366 ], [ %.0292365.ph, %.lr.ph366.preheader490 ]
  %.1294364 = phi ptr [ %234, %.lr.ph366 ], [ %.1294364.ph, %.lr.ph366.preheader490 ]
  %.1305363 = phi i64 [ %235, %.lr.ph366 ], [ %.1305363.ph, %.lr.ph366.preheader490 ]
  %232 = getelementptr inbounds i8, ptr %.0292365, i64 4
  %233 = load float, ptr %.0292365, align 4, !tbaa !24
  %234 = getelementptr inbounds i8, ptr %.1294364, i64 4
  store float %233, ptr %.1294364, align 4, !tbaa !24
  %235 = add nsw i64 %.1305363, 1
  %236 = icmp slt i64 %235, %192
  br i1 %236, label %.lr.ph366, label %.preheader350, !llvm.loop !32

.lr.ph373:                                        ; preds = %.lr.ph373.preheader489, %.lr.ph373
  %.2295372 = phi ptr [ %237, %.lr.ph373 ], [ %.2295372.ph, %.lr.ph373.preheader489 ]
  %.2306371 = phi i64 [ %238, %.lr.ph373 ], [ %.2306371.ph, %.lr.ph373.preheader489 ]
  %237 = getelementptr inbounds i8, ptr %.2295372, i64 4
  store float %.pre421, ptr %.2295372, align 4, !tbaa !24
  %238 = add nsw i64 %.2306371, 1
  %exitcond.not = icmp eq i64 %.2306371, %143
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph373, !llvm.loop !33

._crit_edge:                                      ; preds = %.lr.ph373, %middle.block, %.preheader350
  %239 = add nsw i64 %.0307374, 1
  %240 = icmp slt i64 %239, %184
  %indvar.next = add i64 %indvar, 1
  br i1 %240, label %207, label %.preheader349, !llvm.loop !34

.preheader.loopexit.unr-lcssa:                    ; preds = %255, %.lr.ph378
  %.1308377.unr = phi i64 [ 0, %.lr.ph378 ], [ %265, %255 ]
  %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
  %241 = load ptr, ptr %203, align 8, !tbaa !23
  %242 = mul nsw i64 %.1308377.unr, %168
  %243 = getelementptr inbounds float, ptr %241, i64 %242
  %244 = getelementptr inbounds float, ptr %241, i64 %204
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %243, ptr align 4 %244, i64 %205, i1 false)
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader349
  %.not328379 = icmp sgt i64 %179, %169
  br i1 %.not328379, label %.loopexit348, label %.lr.ph381

.lr.ph381:                                        ; preds = %.preheader
  %245 = getelementptr inbounds i8, ptr %0, i64 104
  %246 = add nsw i64 %179, -1
  %247 = mul nsw i64 %246, %168
  %248 = shl i64 %168, 2
  %xtraiter499 = and i64 %166, 1
  %lcmp.mod500.not = icmp eq i64 %xtraiter499, 0
  br i1 %lcmp.mod500.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph381
  %249 = load ptr, ptr %245, align 8, !tbaa !23
  %250 = mul nsw i64 %179, %168
  %251 = getelementptr inbounds float, ptr %249, i64 %250
  %252 = getelementptr inbounds float, ptr %249, i64 %247
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %251, ptr align 4 %252, i64 %248, i1 false)
  %253 = add i64 %179, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph381
  %.2309380.unr = phi i64 [ %179, %.lr.ph381 ], [ %253, %.prol.loopexit.unr-lcssa ]
  %254 = icmp eq i64 %165, 1
  br i1 %254, label %.loopexit348, label %.lr.ph381.new

255:                                              ; preds = %255, %.lr.ph378.new
  %.1308377 = phi i64 [ 0, %.lr.ph378.new ], [ %265, %255 ]
  %niter = phi i64 [ 0, %.lr.ph378.new ], [ %niter.next.1, %255 ]
  %256 = load ptr, ptr %203, align 8, !tbaa !23
  %257 = mul nsw i64 %.1308377, %168
  %258 = getelementptr inbounds float, ptr %256, i64 %257
  %259 = getelementptr inbounds float, ptr %256, i64 %204
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %258, ptr align 4 %259, i64 %205, i1 false)
  %260 = or disjoint i64 %.1308377, 1
  %261 = load ptr, ptr %203, align 8, !tbaa !23
  %262 = mul nsw i64 %260, %168
  %263 = getelementptr inbounds float, ptr %261, i64 %262
  %264 = getelementptr inbounds float, ptr %261, i64 %204
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %263, ptr align 4 %264, i64 %205, i1 false)
  %265 = add nuw nsw i64 %.1308377, 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 %255, !llvm.loop !35

.lr.ph381.new:                                    ; preds = %.prol.loopexit, %.lr.ph381.new
  %.2309380 = phi i64 [ %275, %.lr.ph381.new ], [ %.2309380.unr, %.prol.loopexit ]
  %266 = load ptr, ptr %245, align 8, !tbaa !23
  %267 = mul nsw i64 %.2309380, %168
  %268 = getelementptr inbounds float, ptr %266, i64 %267
  %269 = getelementptr inbounds float, ptr %266, i64 %247
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %268, ptr align 4 %269, i64 %248, i1 false)
  %270 = add i64 %.2309380, 1
  %271 = load ptr, ptr %245, align 8, !tbaa !23
  %272 = mul nsw i64 %270, %168
  %273 = getelementptr inbounds float, ptr %271, i64 %272
  %274 = getelementptr inbounds float, ptr %271, i64 %247
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %273, ptr align 4 %274, i64 %248, i1 false)
  %275 = add i64 %.2309380, 2
  %exitcond411.not.1 = icmp eq i64 %270, %169
  br i1 %exitcond411.not.1, label %.loopexit348, label %.lr.ph381.new, !llvm.loop !36

276:                                              ; preds = %.thread
  %277 = getelementptr inbounds i8, ptr %0, i64 104
  %278 = load ptr, ptr %277, align 8, !tbaa !23
  %279 = load i64, ptr %173, align 8, !tbaa !22
  call void @llvm.memset.p0.i64(ptr align 4 %278, i8 0, i64 %279, i1 false)
  br label %.loopexit348

.loopexit348:                                     ; preds = %.prol.loopexit, %.lr.ph381.new, %.preheader, %276
  %280 = getelementptr inbounds i8, ptr %0, i64 104
  %281 = load ptr, ptr %280, align 8, !tbaa !23
  %282 = sitofp <2 x i64> %140 to <2 x double>
  %283 = fsub <2 x double> %89, %282
  br label %286

284:                                              ; preds = %176
  %285 = call i32 (i32, ptr, ...) @vl_set_last_error(i32 noundef 2, ptr noundef null) #9
  br label %.loopexit

286:                                              ; preds = %153, %.loopexit348
  %.2285.ph = phi i64 [ %170, %.loopexit348 ], [ %.sroa.4.0.copyload, %153 ]
  %.2282.ph = phi i64 [ %168, %.loopexit348 ], [ %.sroa.0.0.copyload, %153 ]
  %.2279.ph = phi ptr [ %281, %.loopexit348 ], [ %79, %153 ]
  %287 = phi <2 x double> [ %283, %.loopexit348 ], [ %89, %153 ]
  %288 = uitofp i64 %4 to double
  %289 = fdiv double %5, %288
  %290 = trunc i64 %4 to i32
  %291 = icmp sgt i32 %290, -1
  br i1 %291, label %.lr.ph393, label %.loopexit

.lr.ph393:                                        ; preds = %286
  %292 = shl nuw i32 %290, 1
  %293 = shl i64 %.2282.ph, 32
  %sext329 = add i64 %293, -4294967296
  %294 = ashr exact i64 %sext329, 32
  %295 = shl i64 %.2285.ph, 32
  %sext331 = add i64 %295, -4294967296
  %296 = ashr exact i64 %sext331, 32
  %297 = or disjoint i32 %292, 1
  %298 = call i32 @llvm.smax.i32(i32 %297, i32 1)
  %smax412 = zext nneg i32 %298 to i64
  %299 = extractelement <2 x double> %287, i64 0
  %300 = extractelement <2 x double> %287, i64 1
  %301 = extractelement <2 x double> %88, i64 0
  %302 = extractelement <2 x double> %88, i64 1
  %303 = extractelement <2 x double> %87, i64 0
  %304 = extractelement <2 x double> %87, i64 1
  br label %.lr.ph386.us

.lr.ph386.us:                                     ; preds = %._crit_edge387.us, %.lr.ph393
  %.0287391.us = phi i64 [ 0, %.lr.ph393 ], [ %352, %._crit_edge387.us ]
  %.0289390.us = phi double [ %84, %.lr.ph393 ], [ %351, %._crit_edge387.us ]
  %.0290389.us = phi ptr [ %3, %.lr.ph393 ], [ %348, %._crit_edge387.us ]
  %305 = call double @llvm.fmuladd.f64(double %301, double %.0289390.us, double %299)
  %306 = call double @llvm.fmuladd.f64(double %302, double %.0289390.us, double %300)
  br label %307

307:                                              ; preds = %.lr.ph386.us, %338
  %.0286384.us = phi double [ %84, %.lr.ph386.us ], [ %349, %338 ]
  %.0288383.us = phi i64 [ 0, %.lr.ph386.us ], [ %350, %338 ]
  %.1291382.us = phi ptr [ %.0290389.us, %.lr.ph386.us ], [ %348, %338 ]
  %308 = call double @llvm.fmuladd.f64(double %303, double %.0286384.us, double %305)
  %309 = call double @llvm.fmuladd.f64(double %304, double %.0286384.us, double %306)
  %310 = call i64 @vl_floor_d(double noundef %308)
  %311 = call i64 @vl_floor_d(double noundef %309)
  %312 = mul i64 %311, %.2282.ph
  %313 = add i64 %312, %310
  %314 = getelementptr inbounds float, ptr %.2279.ph, i64 %313
  %315 = load float, ptr %314, align 4, !tbaa !24
  %316 = fpext float %315 to double
  %317 = add i64 %313, 1
  %318 = getelementptr inbounds float, ptr %.2279.ph, i64 %317
  %319 = load float, ptr %318, align 4, !tbaa !24
  %320 = fpext float %319 to double
  %321 = add nsw i64 %311, 1
  %322 = mul i64 %321, %.2282.ph
  %323 = add i64 %322, %310
  %324 = getelementptr inbounds float, ptr %.2279.ph, i64 %323
  %325 = load float, ptr %324, align 4, !tbaa !24
  %326 = fpext float %325 to double
  %327 = add i64 %323, 1
  %328 = getelementptr inbounds float, ptr %.2279.ph, i64 %327
  %329 = load float, ptr %328, align 4, !tbaa !24
  %330 = fpext float %329 to double
  %331 = sitofp i64 %310 to double
  %332 = fsub double %308, %331
  %333 = sitofp i64 %311 to double
  %334 = fsub double %309, %333
  %335 = icmp slt i64 %310, 0
  %.not330.us = icmp sgt i64 %310, %294
  %or.cond396 = select i1 %335, i1 true, i1 %.not330.us
  br i1 %or.cond396, label %.split.us, label %336

336:                                              ; preds = %307
  %337 = icmp slt i64 %311, 0
  %.not332.us = icmp sgt i64 %311, %296
  %or.cond397 = select i1 %337, i1 true, i1 %.not332.us
  br i1 %or.cond397, label %.split395.us, label %338

338:                                              ; preds = %336
  %339 = fsub double 1.000000e+00, %334
  %340 = fsub double 1.000000e+00, %332
  %341 = fmul double %332, %320
  %342 = call double @llvm.fmuladd.f64(double %340, double %316, double %341)
  %343 = fmul double %332, %330
  %344 = call double @llvm.fmuladd.f64(double %340, double %326, double %343)
  %345 = fmul double %334, %344
  %346 = call double @llvm.fmuladd.f64(double %339, double %342, double %345)
  %347 = fptrunc double %346 to float
  %348 = getelementptr inbounds i8, ptr %.1291382.us, i64 4
  store float %347, ptr %.1291382.us, align 4, !tbaa !24
  %349 = fadd double %289, %.0286384.us
  %350 = add nuw nsw i64 %.0288383.us, 1
  %exitcond413.not = icmp eq i64 %350, %smax412
  br i1 %exitcond413.not, label %._crit_edge387.us, label %307, !llvm.loop !37

._crit_edge387.us:                                ; preds = %338
  %351 = fadd double %289, %.0289390.us
  %352 = add nuw nsw i64 %.0287391.us, 1
  %exitcond414.not = icmp eq i64 %352, %smax412
  br i1 %exitcond414.not, label %.loopexit, label %.lr.ph386.us, !llvm.loop !38

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

.split395.us:                                     ; preds = %336
  call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.1, i32 noundef 2381, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_extract_patch_helper) #10
  unreachable

.loopexit:                                        ; preds = %._crit_edge387.us, %286, %284
  %.5 = phi i32 [ %285, %284 ], [ 0, %286 ], [ 0, %._crit_edge387.us ]
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %12) #9
  ret i32 %.5
}

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

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

; 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, !6, i64 64, !13, i64 72, !11, i64 80, !13, i64 88, !13, i64 96, !11, i64 104, !13, i64 112, !12, i64 120, !7, i64 128, !7, i64 192, !12, i64 256, !7, i64 260, !7, i64 6984, !7, i64 13708, !7, i64 20432, !7, i64 27156, !7, i64 31512, !7, i64 75072}
!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, !13, i64 112}
!23 = !{!10, !11, i64 104}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = distinct !{!26, !19, !27, !28}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !19, !27, !28}
!30 = distinct !{!30, !19, !28, !27}
!31 = distinct !{!31, !19, !27, !28}
!32 = distinct !{!32, !19, !27}
!33 = distinct !{!33, !19, !28, !27}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}


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