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

%struct._VlScaleSpaceGeometry = type { i64, i64, i64, i64, i64, i64, i64, double, double }
%struct._VlScaleSpaceOctaveGeometry = type { i64, i64, double }
%struct._VlCovDetExtremum3 = type { i64, i64, i64, float, float, float, float, float }
%struct._VlCovDetFeature = type { %struct._VlFrameOrientedEllipse, float, float, float, float }
%struct._VlFrameOrientedEllipse = type { float, float, float, float, float, float }
%struct._VlCovDetExtremum2 = type { i64, i64, float, float, float, float }
%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
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@__PRETTY_FUNCTION__.vl_covdet_detect = external hidden unnamed_addr constant [34 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @vl_find_local_extrema_3(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, double noundef) #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @vl_find_local_extrema_2(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_refine_local_extreum_3(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_refine_local_extreum_2(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) #0

; 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

declare void @vl_free(ptr noundef) #6

declare void @vl_scalespace_delete(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_covdet_append_feature(ptr noundef, ptr noundef) #0

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

declare i32 @vl_scalespacegeometry_is_equal(ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8, ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8) #6

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

declare ptr @vl_scalespace_new_with_geometry(ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8) #6

; Function Attrs: nounwind uwtable
define dso_local void @vl_covdet_detect(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct._VlScaleSpaceGeometry, align 8
  %4 = alloca %struct._VlScaleSpaceGeometry, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca %struct._VlScaleSpaceGeometry, align 8
  %11 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %12 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca double, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %21 = alloca double, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca ptr, align 8
  %26 = alloca %struct._VlCovDetExtremum3, align 8
  %27 = alloca %struct._VlCovDetFeature, align 4
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct._VlCovDetExtremum2, align 8
  %32 = alloca %struct._VlCovDetFeature, align 4
  %33 = alloca i32, align 4
  %34 = alloca double, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  %47 = alloca %struct._VlCovDetFeature, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 72, ptr %3) #9
  %48 = load ptr, ptr %2, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct._VlCovDet, ptr %48, i32 0, i32 0
  %50 = load ptr, ptr %49, align 8, !tbaa !9
  call void @vl_scalespace_get_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceGeometry) align 8 %3, ptr noundef %50)
  call void @llvm.lifetime.start.p0(i64 72, ptr %4) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  store ptr null, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #9
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %51 = load ptr, ptr %2, align 8, !tbaa !5
  %52 = icmp ne ptr %51, null
  br i1 %52, label %53, label %54

53:                                               ; preds = %1
  br label %55

54:                                               ; preds = %1
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.1, i32 noundef 1930, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_detect) #10
  unreachable

55:                                               ; preds = %53
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct._VlCovDet, ptr %56, i32 0, i32 0
  %58 = load ptr, ptr %57, align 8, !tbaa !9
  %59 = icmp ne ptr %58, null
  br i1 %59, label %60, label %61

60:                                               ; preds = %55
  br label %62

61:                                               ; preds = %55
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 1931, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_detect) #10
  unreachable

62:                                               ; preds = %60
  %63 = load ptr, ptr %2, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct._VlCovDet, ptr %63, i32 0, i32 11
  store i64 0, ptr %64, align 8, !tbaa !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %4, ptr align 8 %3, i64 72, i1 false), !tbaa.struct !15
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct._VlCovDet, ptr %65, i32 0, i32 2
  %67 = load i32, ptr %66, align 8, !tbaa !18
  %68 = icmp eq i32 %67, 1
  br i1 %68, label %69, label %73

69:                                               ; preds = %62
  %70 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 6
  %71 = load i64, ptr %70, align 8, !tbaa !19
  %72 = sub nsw i64 %71, 1
  store i64 %72, ptr %70, align 8, !tbaa !19
  br label %73

73:                                               ; preds = %69, %62
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct._VlCovDet, ptr %74, i32 0, i32 1
  %76 = load ptr, ptr %75, align 8, !tbaa !21
  %77 = icmp ne ptr %76, null
  br i1 %77, label %78, label %84

78:                                               ; preds = %73
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct._VlCovDet, ptr %79, i32 0, i32 1
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  call void @vl_scalespace_get_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceGeometry) align 8 %10, ptr noundef %81)
  %82 = call i32 @vl_scalespacegeometry_is_equal(ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8 %4, ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8 %10)
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %97, label %84

84:                                               ; preds = %78, %73
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct._VlCovDet, ptr %85, i32 0, i32 1
  %87 = load ptr, ptr %86, align 8, !tbaa !21
  %88 = icmp ne ptr %87, null
  br i1 %88, label %89, label %93

89:                                               ; preds = %84
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._VlCovDet, ptr %90, i32 0, i32 1
  %92 = load ptr, ptr %91, align 8, !tbaa !21
  call void @vl_scalespace_delete(ptr noundef %92)
  br label %93

93:                                               ; preds = %89, %84
  %94 = call ptr @vl_scalespace_new_with_geometry(ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8 %4)
  %95 = load ptr, ptr %2, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct._VlCovDet, ptr %95, i32 0, i32 1
  store ptr %94, ptr %96, align 8, !tbaa !21
  br label %97

97:                                               ; preds = %93, %78
  %98 = load ptr, ptr %2, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct._VlCovDet, ptr %98, i32 0, i32 2
  %100 = load i32, ptr %99, align 8, !tbaa !18
  %101 = icmp eq i32 %100, 4
  br i1 %101, label %107, label %102

102:                                              ; preds = %97
  %103 = load ptr, ptr %2, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct._VlCovDet, ptr %103, i32 0, i32 2
  %105 = load i32, ptr %104, align 8, !tbaa !18
  %106 = icmp eq i32 %105, 6
  br i1 %106, label %107, label %134

107:                                              ; preds = %102, %97
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #9
  %108 = load ptr, ptr %2, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._VlCovDet, ptr %108, i32 0, i32 0
  %110 = load ptr, ptr %109, align 8, !tbaa !9
  %111 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %3, i32 0, i32 2
  %112 = load i64, ptr %111, align 8, !tbaa !22
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %11, ptr noundef %110, i64 noundef %112)
  %113 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %11, i32 0, i32 0
  %114 = load i64, ptr %113, align 8, !tbaa !23
  %115 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %11, i32 0, i32 1
  %116 = load i64, ptr %115, align 8, !tbaa !25
  %117 = mul i64 %114, %116
  %118 = mul i64 %117, 4
  %119 = call ptr @vl_malloc(i64 noundef %118)
  store ptr %119, ptr %5, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %11, i32 0, i32 0
  %121 = load i64, ptr %120, align 8, !tbaa !23
  %122 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %11, i32 0, i32 1
  %123 = load i64, ptr %122, align 8, !tbaa !25
  %124 = mul i64 %121, %123
  %125 = mul i64 %124, 4
  %126 = call ptr @vl_malloc(i64 noundef %125)
  store ptr %126, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %11, i32 0, i32 0
  %128 = load i64, ptr %127, align 8, !tbaa !23
  %129 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %11, i32 0, i32 1
  %130 = load i64, ptr %129, align 8, !tbaa !25
  %131 = mul i64 %128, %130
  %132 = mul i64 %131, 4
  %133 = call ptr @vl_malloc(i64 noundef %132)
  store ptr %133, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #9
  br label %134

134:                                              ; preds = %107, %102
  %135 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 2
  %136 = load i64, ptr %135, align 8, !tbaa !22
  store i64 %136, ptr %8, align 8, !tbaa !16
  br label %137

137:                                              ; preds = %218, %134
  %138 = load i64, ptr %8, align 8, !tbaa !16
  %139 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 3
  %140 = load i64, ptr %139, align 8, !tbaa !26
  %141 = icmp sle i64 %138, %140
  br i1 %141, label %142, label %221

142:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #9
  %143 = load ptr, ptr %2, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct._VlCovDet, ptr %143, i32 0, i32 1
  %145 = load ptr, ptr %144, align 8, !tbaa !21
  %146 = load i64, ptr %8, align 8, !tbaa !16
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %12, ptr noundef %145, i64 noundef %146)
  %147 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 5
  %148 = load i64, ptr %147, align 8, !tbaa !27
  store i64 %148, ptr %9, align 8, !tbaa !16
  br label %149

149:                                              ; preds = %214, %142
  %150 = load i64, ptr %9, align 8, !tbaa !16
  %151 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 6
  %152 = load i64, ptr %151, align 8, !tbaa !19
  %153 = icmp sle i64 %150, %152
  br i1 %153, label %154, label %217

154:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %155 = load ptr, ptr %2, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct._VlCovDet, ptr %155, i32 0, i32 0
  %157 = load ptr, ptr %156, align 8, !tbaa !9
  %158 = load i64, ptr %8, align 8, !tbaa !16
  %159 = load i64, ptr %9, align 8, !tbaa !16
  %160 = call ptr @vl_scalespace_get_level(ptr noundef %157, i64 noundef %158, i64 noundef %159)
  store ptr %160, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %161 = load ptr, ptr %2, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct._VlCovDet, ptr %161, i32 0, i32 1
  %163 = load ptr, ptr %162, align 8, !tbaa !21
  %164 = load i64, ptr %8, align 8, !tbaa !16
  %165 = load i64, ptr %9, align 8, !tbaa !16
  %166 = call ptr @vl_scalespace_get_level(ptr noundef %163, i64 noundef %164, i64 noundef %165)
  store ptr %166, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %167 = load ptr, ptr %2, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct._VlCovDet, ptr %167, i32 0, i32 1
  %169 = load ptr, ptr %168, align 8, !tbaa !21
  %170 = load i64, ptr %8, align 8, !tbaa !16
  %171 = load i64, ptr %9, align 8, !tbaa !16
  %172 = call double @vl_scalespace_get_level_sigma(ptr noundef %169, i64 noundef %170, i64 noundef %171)
  store double %172, ptr %15, align 8, !tbaa !17
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct._VlCovDet, ptr %173, i32 0, i32 2
  %175 = load i32, ptr %174, align 8, !tbaa !18
  switch i32 %175, label %212 [
    i32 1, label %176
    i32 4, label %190
    i32 6, label %190
    i32 2, label %202
    i32 3, label %202
    i32 5, label %202
  ]

176:                                              ; preds = %154
  %177 = load ptr, ptr %14, align 8, !tbaa !5
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct._VlCovDet, ptr %178, i32 0, i32 0
  %180 = load ptr, ptr %179, align 8, !tbaa !9
  %181 = load i64, ptr %8, align 8, !tbaa !16
  %182 = load i64, ptr %9, align 8, !tbaa !16
  %183 = add nsw i64 %182, 1
  %184 = call ptr @vl_scalespace_get_level(ptr noundef %180, i64 noundef %181, i64 noundef %183)
  %185 = load ptr, ptr %13, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 0
  %187 = load i64, ptr %186, align 8, !tbaa !23
  %188 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 1
  %189 = load i64, ptr %188, align 8, !tbaa !25
  call void @_vl_dog_response(ptr noundef %177, ptr noundef %184, ptr noundef %185, i64 noundef %187, i64 noundef %189)
  br label %213

190:                                              ; preds = %154, %154
  %191 = load ptr, ptr %14, align 8, !tbaa !5
  %192 = load ptr, ptr %13, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 0
  %194 = load i64, ptr %193, align 8, !tbaa !23
  %195 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 1
  %196 = load i64, ptr %195, align 8, !tbaa !25
  %197 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 2
  %198 = load double, ptr %197, align 8, !tbaa !28
  %199 = load double, ptr %15, align 8, !tbaa !17
  %200 = load double, ptr %15, align 8, !tbaa !17
  %201 = fmul double 1.400000e+00, %200
  call void @_vl_harris_response(ptr noundef %191, ptr noundef %192, i64 noundef %194, i64 noundef %196, double noundef %198, double noundef %199, double noundef %201, double noundef 5.000000e-02)
  br label %213

202:                                              ; preds = %154, %154, %154
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = load ptr, ptr %13, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 0
  %206 = load i64, ptr %205, align 8, !tbaa !23
  %207 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 1
  %208 = load i64, ptr %207, align 8, !tbaa !25
  %209 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %12, i32 0, i32 2
  %210 = load double, ptr %209, align 8, !tbaa !28
  %211 = load double, ptr %15, align 8, !tbaa !17
  call void @_vl_det_hessian_response(ptr noundef %203, ptr noundef %204, i64 noundef %206, i64 noundef %208, double noundef %210, double noundef %211)
  br label %213

212:                                              ; preds = %154
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 1986, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_detect) #10
  unreachable

213:                                              ; preds = %202, %190, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %214

214:                                              ; preds = %213
  %215 = load i64, ptr %9, align 8, !tbaa !16
  %216 = add nsw i64 %215, 1
  store i64 %216, ptr %9, align 8, !tbaa !16
  br label %149, !llvm.loop !29

217:                                              ; preds = %149
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #9
  br label %218

218:                                              ; preds = %217
  %219 = load i64, ptr %8, align 8, !tbaa !16
  %220 = add nsw i64 %219, 1
  store i64 %220, ptr %8, align 8, !tbaa !16
  br label %137, !llvm.loop !31

221:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  store ptr null, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  store i64 0, ptr %17, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %222 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 2
  %223 = load i64, ptr %222, align 8, !tbaa !22
  store i64 %223, ptr %8, align 8, !tbaa !16
  br label %224

224:                                              ; preds = %504, %221
  %225 = load i64, ptr %8, align 8, !tbaa !16
  %226 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 3
  %227 = load i64, ptr %226, align 8, !tbaa !26
  %228 = icmp sle i64 %225, %227
  br i1 %228, label %229, label %507

229:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #9
  %230 = load ptr, ptr %2, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct._VlCovDet, ptr %230, i32 0, i32 1
  %232 = load ptr, ptr %231, align 8, !tbaa !21
  %233 = load i64, ptr %8, align 8, !tbaa !16
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %20, ptr noundef %232, i64 noundef %233)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %234 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %20, i32 0, i32 2
  %235 = load double, ptr %234, align 8, !tbaa !28
  store double %235, ptr %21, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %236 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %20, i32 0, i32 0
  %237 = load i64, ptr %236, align 8, !tbaa !23
  store i64 %237, ptr %22, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %238 = getelementptr inbounds %struct._VlScaleSpaceOctaveGeometry, ptr %20, i32 0, i32 1
  %239 = load i64, ptr %238, align 8, !tbaa !25
  store i64 %239, ptr %23, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %240 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 6
  %241 = load i64, ptr %240, align 8, !tbaa !19
  %242 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 5
  %243 = load i64, ptr %242, align 8, !tbaa !27
  %244 = sub nsw i64 %241, %243
  %245 = add nsw i64 %244, 1
  store i64 %245, ptr %24, align 8, !tbaa !16
  %246 = load ptr, ptr %2, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct._VlCovDet, ptr %246, i32 0, i32 2
  %248 = load i32, ptr %247, align 8, !tbaa !18
  switch i32 %248, label %377 [
    i32 1, label %249
    i32 2, label %249
  ]

249:                                              ; preds = %229, %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %250 = load ptr, ptr %2, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct._VlCovDet, ptr %250, i32 0, i32 1
  %252 = load ptr, ptr %251, align 8, !tbaa !21
  %253 = load i64, ptr %8, align 8, !tbaa !16
  %254 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 5
  %255 = load i64, ptr %254, align 8, !tbaa !27
  %256 = call ptr @vl_scalespace_get_level(ptr noundef %252, i64 noundef %253, i64 noundef %255)
  store ptr %256, ptr %25, align 8, !tbaa !5
  %257 = load ptr, ptr %25, align 8, !tbaa !5
  %258 = load i64, ptr %22, align 8, !tbaa !16
  %259 = load i64, ptr %23, align 8, !tbaa !16
  %260 = load i64, ptr %24, align 8, !tbaa !16
  %261 = load ptr, ptr %2, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct._VlCovDet, ptr %261, i32 0, i32 3
  %263 = load double, ptr %262, align 8, !tbaa !32
  %264 = fmul double 8.000000e-01, %263
  %265 = call i64 @vl_find_local_extrema_3(ptr noundef %16, ptr noundef %17, ptr noundef %257, i64 noundef %258, i64 noundef %259, i64 noundef %260, double noundef %264)
  store i64 %265, ptr %18, align 8, !tbaa !16
  store i64 0, ptr %19, align 8, !tbaa !16
  br label %266

266:                                              ; preds = %373, %249
  %267 = load i64, ptr %19, align 8, !tbaa !16
  %268 = load i64, ptr %18, align 8, !tbaa !16
  %269 = icmp ult i64 %267, %268
  br i1 %269, label %270, label %376

270:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 48, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  call void @llvm.memset.p0.i64(ptr align 4 %27, i8 0, i64 40, i1 false)
  %271 = load ptr, ptr %25, align 8, !tbaa !5
  %272 = load i64, ptr %22, align 8, !tbaa !16
  %273 = load i64, ptr %23, align 8, !tbaa !16
  %274 = load i64, ptr %24, align 8, !tbaa !16
  %275 = load ptr, ptr %16, align 8, !tbaa !5
  %276 = load i64, ptr %19, align 8, !tbaa !16
  %277 = mul i64 3, %276
  %278 = add i64 %277, 0
  %279 = getelementptr inbounds i64, ptr %275, i64 %278
  %280 = load i64, ptr %279, align 8, !tbaa !16
  %281 = load ptr, ptr %16, align 8, !tbaa !5
  %282 = load i64, ptr %19, align 8, !tbaa !16
  %283 = mul i64 3, %282
  %284 = add i64 %283, 1
  %285 = getelementptr inbounds i64, ptr %281, i64 %284
  %286 = load i64, ptr %285, align 8, !tbaa !16
  %287 = load ptr, ptr %16, align 8, !tbaa !5
  %288 = load i64, ptr %19, align 8, !tbaa !16
  %289 = mul i64 3, %288
  %290 = add i64 %289, 2
  %291 = getelementptr inbounds i64, ptr %287, i64 %290
  %292 = load i64, ptr %291, align 8, !tbaa !16
  %293 = call i32 @vl_refine_local_extreum_3(ptr noundef %26, ptr noundef %271, i64 noundef %272, i64 noundef %273, i64 noundef %274, i64 noundef %280, i64 noundef %286, i64 noundef %292)
  store i32 %293, ptr %28, align 4, !tbaa !33
  %294 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 6
  %295 = load float, ptr %294, align 4, !tbaa !34
  %296 = fpext float %295 to double
  %297 = call double @llvm.fabs.f64(double %296)
  %298 = load ptr, ptr %2, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct._VlCovDet, ptr %298, i32 0, i32 3
  %300 = load double, ptr %299, align 8, !tbaa !32
  %301 = fcmp ogt double %297, %300
  %302 = zext i1 %301 to i32
  %303 = load i32, ptr %28, align 4, !tbaa !33
  %304 = and i32 %303, %302
  store i32 %304, ptr %28, align 4, !tbaa !33
  %305 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 7
  %306 = load float, ptr %305, align 8, !tbaa !37
  %307 = fpext float %306 to double
  %308 = load ptr, ptr %2, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct._VlCovDet, ptr %308, i32 0, i32 4
  %310 = load double, ptr %309, align 8, !tbaa !38
  %311 = fcmp olt double %307, %310
  %312 = zext i1 %311 to i32
  %313 = load i32, ptr %28, align 4, !tbaa !33
  %314 = and i32 %313, %312
  store i32 %314, ptr %28, align 4, !tbaa !33
  %315 = load i32, ptr %28, align 4, !tbaa !33
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %372

317:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %318 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 7
  %319 = load double, ptr %318, align 8, !tbaa !39
  %320 = load i64, ptr %8, align 8, !tbaa !16
  %321 = sitofp i64 %320 to float
  %322 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 5
  %323 = load float, ptr %322, align 8, !tbaa !40
  %324 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 5
  %325 = load i64, ptr %324, align 8, !tbaa !27
  %326 = sitofp i64 %325 to float
  %327 = fadd float %323, %326
  %328 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 4
  %329 = load i64, ptr %328, align 8, !tbaa !41
  %330 = uitofp i64 %329 to float
  %331 = fdiv float %327, %330
  %332 = fadd float %321, %331
  %333 = fpext float %332 to double
  %334 = call double @pow(double noundef 2.000000e+00, double noundef %333) #9
  %335 = fmul double %319, %334
  store double %335, ptr %29, align 8, !tbaa !17
  %336 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 3
  %337 = load float, ptr %336, align 8, !tbaa !42
  %338 = fpext float %337 to double
  %339 = load double, ptr %21, align 8, !tbaa !17
  %340 = fmul double %338, %339
  %341 = fptrunc double %340 to float
  %342 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 0
  %343 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %342, i32 0, i32 0
  store float %341, ptr %343, align 4, !tbaa !43
  %344 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 4
  %345 = load float, ptr %344, align 4, !tbaa !46
  %346 = fpext float %345 to double
  %347 = load double, ptr %21, align 8, !tbaa !17
  %348 = fmul double %346, %347
  %349 = fptrunc double %348 to float
  %350 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 0
  %351 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %350, i32 0, i32 1
  store float %349, ptr %351, align 4, !tbaa !47
  %352 = load double, ptr %29, align 8, !tbaa !17
  %353 = fptrunc double %352 to float
  %354 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 0
  %355 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %354, i32 0, i32 2
  store float %353, ptr %355, align 4, !tbaa !48
  %356 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 0
  %357 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %356, i32 0, i32 3
  store float 0.000000e+00, ptr %357, align 4, !tbaa !49
  %358 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 0
  %359 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %358, i32 0, i32 4
  store float 0.000000e+00, ptr %359, align 4, !tbaa !50
  %360 = load double, ptr %29, align 8, !tbaa !17
  %361 = fptrunc double %360 to float
  %362 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 0
  %363 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %362, i32 0, i32 5
  store float %361, ptr %363, align 4, !tbaa !51
  %364 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 6
  %365 = load float, ptr %364, align 4, !tbaa !34
  %366 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 1
  store float %365, ptr %366, align 4, !tbaa !52
  %367 = getelementptr inbounds %struct._VlCovDetExtremum3, ptr %26, i32 0, i32 7
  %368 = load float, ptr %367, align 8, !tbaa !37
  %369 = getelementptr inbounds %struct._VlCovDetFeature, ptr %27, i32 0, i32 2
  store float %368, ptr %369, align 4, !tbaa !53
  %370 = load ptr, ptr %2, align 8, !tbaa !5
  %371 = call i32 @vl_covdet_append_feature(ptr noundef %370, ptr noundef %27)
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %372

372:                                              ; preds = %317, %270
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr %26) #9
  br label %373

373:                                              ; preds = %372
  %374 = load i64, ptr %19, align 8, !tbaa !16
  %375 = add i64 %374, 1
  store i64 %375, ptr %19, align 8, !tbaa !16
  br label %266, !llvm.loop !54

376:                                              ; preds = %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %503

377:                                              ; preds = %229
  %378 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 5
  %379 = load i64, ptr %378, align 8, !tbaa !27
  store i64 %379, ptr %9, align 8, !tbaa !16
  br label %380

380:                                              ; preds = %499, %377
  %381 = load i64, ptr %9, align 8, !tbaa !16
  %382 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 6
  %383 = load i64, ptr %382, align 8, !tbaa !19
  %384 = icmp slt i64 %381, %383
  br i1 %384, label %385, label %502

385:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %386 = load ptr, ptr %2, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct._VlCovDet, ptr %386, i32 0, i32 1
  %388 = load ptr, ptr %387, align 8, !tbaa !21
  %389 = load i64, ptr %8, align 8, !tbaa !16
  %390 = load i64, ptr %9, align 8, !tbaa !16
  %391 = call ptr @vl_scalespace_get_level(ptr noundef %388, i64 noundef %389, i64 noundef %390)
  store ptr %391, ptr %30, align 8, !tbaa !5
  %392 = load ptr, ptr %30, align 8, !tbaa !5
  %393 = load i64, ptr %22, align 8, !tbaa !16
  %394 = load i64, ptr %23, align 8, !tbaa !16
  %395 = load ptr, ptr %2, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct._VlCovDet, ptr %395, i32 0, i32 3
  %397 = load double, ptr %396, align 8, !tbaa !32
  %398 = fmul double 8.000000e-01, %397
  %399 = call i64 @vl_find_local_extrema_2(ptr noundef %16, ptr noundef %17, ptr noundef %392, i64 noundef %393, i64 noundef %394, double noundef %398)
  store i64 %399, ptr %18, align 8, !tbaa !16
  store i64 0, ptr %19, align 8, !tbaa !16
  br label %400

400:                                              ; preds = %495, %385
  %401 = load i64, ptr %19, align 8, !tbaa !16
  %402 = load i64, ptr %18, align 8, !tbaa !16
  %403 = icmp ult i64 %401, %402
  br i1 %403, label %404, label %498

404:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  call void @llvm.memset.p0.i64(ptr align 4 %32, i8 0, i64 40, i1 false)
  %405 = load ptr, ptr %30, align 8, !tbaa !5
  %406 = load i64, ptr %22, align 8, !tbaa !16
  %407 = load i64, ptr %23, align 8, !tbaa !16
  %408 = load ptr, ptr %16, align 8, !tbaa !5
  %409 = load i64, ptr %19, align 8, !tbaa !16
  %410 = mul i64 2, %409
  %411 = add i64 %410, 0
  %412 = getelementptr inbounds i64, ptr %408, i64 %411
  %413 = load i64, ptr %412, align 8, !tbaa !16
  %414 = load ptr, ptr %16, align 8, !tbaa !5
  %415 = load i64, ptr %19, align 8, !tbaa !16
  %416 = mul i64 2, %415
  %417 = add i64 %416, 1
  %418 = getelementptr inbounds i64, ptr %414, i64 %417
  %419 = load i64, ptr %418, align 8, !tbaa !16
  %420 = call i32 @vl_refine_local_extreum_2(ptr noundef %31, ptr noundef %405, i64 noundef %406, i64 noundef %407, i64 noundef %413, i64 noundef %419)
  store i32 %420, ptr %33, align 4, !tbaa !33
  %421 = getelementptr inbounds %struct._VlCovDetExtremum2, ptr %31, i32 0, i32 4
  %422 = load float, ptr %421, align 8, !tbaa !55
  %423 = fpext float %422 to double
  %424 = call double @llvm.fabs.f64(double %423)
  %425 = load ptr, ptr %2, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct._VlCovDet, ptr %425, i32 0, i32 3
  %427 = load double, ptr %426, align 8, !tbaa !32
  %428 = fcmp ogt double %424, %427
  %429 = zext i1 %428 to i32
  %430 = load i32, ptr %33, align 4, !tbaa !33
  %431 = and i32 %430, %429
  store i32 %431, ptr %33, align 4, !tbaa !33
  %432 = getelementptr inbounds %struct._VlCovDetExtremum2, ptr %31, i32 0, i32 5
  %433 = load float, ptr %432, align 4, !tbaa !57
  %434 = fpext float %433 to double
  %435 = load ptr, ptr %2, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct._VlCovDet, ptr %435, i32 0, i32 4
  %437 = load double, ptr %436, align 8, !tbaa !38
  %438 = fcmp olt double %434, %437
  %439 = zext i1 %438 to i32
  %440 = load i32, ptr %33, align 4, !tbaa !33
  %441 = and i32 %440, %439
  store i32 %441, ptr %33, align 4, !tbaa !33
  %442 = load i32, ptr %33, align 4, !tbaa !33
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %444, label %494

444:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %445 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 7
  %446 = load double, ptr %445, align 8, !tbaa !39
  %447 = load i64, ptr %8, align 8, !tbaa !16
  %448 = sitofp i64 %447 to double
  %449 = load i64, ptr %9, align 8, !tbaa !16
  %450 = sitofp i64 %449 to double
  %451 = getelementptr inbounds %struct._VlScaleSpaceGeometry, ptr %4, i32 0, i32 4
  %452 = load i64, ptr %451, align 8, !tbaa !41
  %453 = uitofp i64 %452 to double
  %454 = fdiv double %450, %453
  %455 = fadd double %448, %454
  %456 = call double @pow(double noundef 2.000000e+00, double noundef %455) #9
  %457 = fmul double %446, %456
  store double %457, ptr %34, align 8, !tbaa !17
  %458 = getelementptr inbounds %struct._VlCovDetExtremum2, ptr %31, i32 0, i32 2
  %459 = load float, ptr %458, align 8, !tbaa !58
  %460 = fpext float %459 to double
  %461 = load double, ptr %21, align 8, !tbaa !17
  %462 = fmul double %460, %461
  %463 = fptrunc double %462 to float
  %464 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 0
  %465 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %464, i32 0, i32 0
  store float %463, ptr %465, align 4, !tbaa !43
  %466 = getelementptr inbounds %struct._VlCovDetExtremum2, ptr %31, i32 0, i32 3
  %467 = load float, ptr %466, align 4, !tbaa !59
  %468 = fpext float %467 to double
  %469 = load double, ptr %21, align 8, !tbaa !17
  %470 = fmul double %468, %469
  %471 = fptrunc double %470 to float
  %472 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 0
  %473 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %472, i32 0, i32 1
  store float %471, ptr %473, align 4, !tbaa !47
  %474 = load double, ptr %34, align 8, !tbaa !17
  %475 = fptrunc double %474 to float
  %476 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 0
  %477 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %476, i32 0, i32 2
  store float %475, ptr %477, align 4, !tbaa !48
  %478 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 0
  %479 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %478, i32 0, i32 3
  store float 0.000000e+00, ptr %479, align 4, !tbaa !49
  %480 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 0
  %481 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %480, i32 0, i32 4
  store float 0.000000e+00, ptr %481, align 4, !tbaa !50
  %482 = load double, ptr %34, align 8, !tbaa !17
  %483 = fptrunc double %482 to float
  %484 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 0
  %485 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %484, i32 0, i32 5
  store float %483, ptr %485, align 4, !tbaa !51
  %486 = getelementptr inbounds %struct._VlCovDetExtremum2, ptr %31, i32 0, i32 4
  %487 = load float, ptr %486, align 8, !tbaa !55
  %488 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 1
  store float %487, ptr %488, align 4, !tbaa !52
  %489 = getelementptr inbounds %struct._VlCovDetExtremum2, ptr %31, i32 0, i32 5
  %490 = load float, ptr %489, align 4, !tbaa !57
  %491 = getelementptr inbounds %struct._VlCovDetFeature, ptr %32, i32 0, i32 2
  store float %490, ptr %491, align 4, !tbaa !53
  %492 = load ptr, ptr %2, align 8, !tbaa !5
  %493 = call i32 @vl_covdet_append_feature(ptr noundef %492, ptr noundef %32)
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  br label %494

494:                                              ; preds = %444, %404
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  br label %495

495:                                              ; preds = %494
  %496 = load i64, ptr %19, align 8, !tbaa !16
  %497 = add i64 %496, 1
  store i64 %497, ptr %19, align 8, !tbaa !16
  br label %400, !llvm.loop !60

498:                                              ; preds = %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %499

499:                                              ; preds = %498
  %500 = load i64, ptr %9, align 8, !tbaa !16
  %501 = add nsw i64 %500, 1
  store i64 %501, ptr %9, align 8, !tbaa !16
  br label %380, !llvm.loop !61

502:                                              ; preds = %380
  br label %503

503:                                              ; preds = %502, %376
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #9
  br label %504

504:                                              ; preds = %503
  %505 = load i64, ptr %8, align 8, !tbaa !16
  %506 = add nsw i64 %505, 1
  store i64 %506, ptr %8, align 8, !tbaa !16
  br label %224, !llvm.loop !62

507:                                              ; preds = %224
  %508 = load ptr, ptr %16, align 8, !tbaa !5
  %509 = icmp ne ptr %508, null
  br i1 %509, label %510, label %512

510:                                              ; preds = %507
  %511 = load ptr, ptr %16, align 8, !tbaa !5
  call void @vl_free(ptr noundef %511)
  store ptr null, ptr %16, align 8, !tbaa !5
  br label %512

512:                                              ; preds = %510, %507
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  %513 = load ptr, ptr %2, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct._VlCovDet, ptr %513, i32 0, i32 2
  %515 = load i32, ptr %514, align 8, !tbaa !18
  switch i32 %515, label %518 [
    i32 4, label %516
    i32 3, label %516
  ]

516:                                              ; preds = %512, %512
  %517 = load ptr, ptr %2, align 8, !tbaa !5
  call void @vl_covdet_extract_laplacian_scales(ptr noundef %517)
  br label %519

518:                                              ; preds = %512
  br label %519

519:                                              ; preds = %518, %516
  %520 = load ptr, ptr %2, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct._VlCovDet, ptr %520, i32 0, i32 8
  %522 = load double, ptr %521, align 8, !tbaa !63
  %523 = fcmp une double %522, 0.000000e+00
  br i1 %523, label %524, label %719

524:                                              ; preds = %519
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %525 = load ptr, ptr %2, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct._VlCovDet, ptr %525, i32 0, i32 8
  %527 = load double, ptr %526, align 8, !tbaa !63
  store double %527, ptr %37, align 8, !tbaa !17
  %528 = load ptr, ptr %2, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct._VlCovDet, ptr %528, i32 0, i32 9
  store i64 0, ptr %529, align 8, !tbaa !64
  store i64 0, ptr %35, align 8, !tbaa !16
  br label %530

530:                                              ; preds = %678, %524
  %531 = load i64, ptr %35, align 8, !tbaa !16
  %532 = load ptr, ptr %2, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct._VlCovDet, ptr %532, i32 0, i32 11
  %534 = load i64, ptr %533, align 8, !tbaa !14
  %535 = trunc i64 %534 to i32
  %536 = sext i32 %535 to i64
  %537 = icmp slt i64 %531, %536
  br i1 %537, label %538, label %681

538:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %539 = load ptr, ptr %2, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct._VlCovDet, ptr %539, i32 0, i32 10
  %541 = load ptr, ptr %540, align 8, !tbaa !65
  %542 = load i64, ptr %35, align 8, !tbaa !16
  %543 = getelementptr inbounds %struct._VlCovDetFeature, ptr %541, i64 %542
  %544 = getelementptr inbounds %struct._VlCovDetFeature, ptr %543, i32 0, i32 0
  %545 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %544, i32 0, i32 0
  %546 = load float, ptr %545, align 4, !tbaa !43
  %547 = fpext float %546 to double
  store double %547, ptr %38, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %548 = load ptr, ptr %2, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct._VlCovDet, ptr %548, i32 0, i32 10
  %550 = load ptr, ptr %549, align 8, !tbaa !65
  %551 = load i64, ptr %35, align 8, !tbaa !16
  %552 = getelementptr inbounds %struct._VlCovDetFeature, ptr %550, i64 %551
  %553 = getelementptr inbounds %struct._VlCovDetFeature, ptr %552, i32 0, i32 0
  %554 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %553, i32 0, i32 1
  %555 = load float, ptr %554, align 4, !tbaa !47
  %556 = fpext float %555 to double
  store double %556, ptr %39, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %557 = load ptr, ptr %2, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct._VlCovDet, ptr %557, i32 0, i32 10
  %559 = load ptr, ptr %558, align 8, !tbaa !65
  %560 = load i64, ptr %35, align 8, !tbaa !16
  %561 = getelementptr inbounds %struct._VlCovDetFeature, ptr %559, i64 %560
  %562 = getelementptr inbounds %struct._VlCovDetFeature, ptr %561, i32 0, i32 0
  %563 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %562, i32 0, i32 2
  %564 = load float, ptr %563, align 4, !tbaa !48
  %565 = fpext float %564 to double
  store double %565, ptr %40, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %566 = load ptr, ptr %2, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct._VlCovDet, ptr %566, i32 0, i32 10
  %568 = load ptr, ptr %567, align 8, !tbaa !65
  %569 = load i64, ptr %35, align 8, !tbaa !16
  %570 = getelementptr inbounds %struct._VlCovDetFeature, ptr %568, i64 %569
  %571 = getelementptr inbounds %struct._VlCovDetFeature, ptr %570, i32 0, i32 1
  %572 = load float, ptr %571, align 4, !tbaa !52
  %573 = fpext float %572 to double
  store double %573, ptr %41, align 8, !tbaa !17
  store i64 0, ptr %36, align 8, !tbaa !16
  br label %574

574:                                              ; preds = %674, %538
  %575 = load i64, ptr %36, align 8, !tbaa !16
  %576 = load ptr, ptr %2, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct._VlCovDet, ptr %576, i32 0, i32 11
  %578 = load i64, ptr %577, align 8, !tbaa !14
  %579 = trunc i64 %578 to i32
  %580 = sext i32 %579 to i64
  %581 = icmp slt i64 %575, %580
  br i1 %581, label %582, label %677

582:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %583 = load ptr, ptr %2, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct._VlCovDet, ptr %583, i32 0, i32 10
  %585 = load ptr, ptr %584, align 8, !tbaa !65
  %586 = load i64, ptr %36, align 8, !tbaa !16
  %587 = getelementptr inbounds %struct._VlCovDetFeature, ptr %585, i64 %586
  %588 = getelementptr inbounds %struct._VlCovDetFeature, ptr %587, i32 0, i32 0
  %589 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %588, i32 0, i32 0
  %590 = load float, ptr %589, align 4, !tbaa !43
  %591 = fpext float %590 to double
  %592 = load double, ptr %38, align 8, !tbaa !17
  %593 = fsub double %591, %592
  store double %593, ptr %42, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  %594 = load ptr, ptr %2, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct._VlCovDet, ptr %594, i32 0, i32 10
  %596 = load ptr, ptr %595, align 8, !tbaa !65
  %597 = load i64, ptr %36, align 8, !tbaa !16
  %598 = getelementptr inbounds %struct._VlCovDetFeature, ptr %596, i64 %597
  %599 = getelementptr inbounds %struct._VlCovDetFeature, ptr %598, i32 0, i32 0
  %600 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %599, i32 0, i32 1
  %601 = load float, ptr %600, align 4, !tbaa !47
  %602 = fpext float %601 to double
  %603 = load double, ptr %39, align 8, !tbaa !17
  %604 = fsub double %602, %603
  store double %604, ptr %43, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  %605 = load ptr, ptr %2, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct._VlCovDet, ptr %605, i32 0, i32 10
  %607 = load ptr, ptr %606, align 8, !tbaa !65
  %608 = load i64, ptr %36, align 8, !tbaa !16
  %609 = getelementptr inbounds %struct._VlCovDetFeature, ptr %607, i64 %608
  %610 = getelementptr inbounds %struct._VlCovDetFeature, ptr %609, i32 0, i32 0
  %611 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %610, i32 0, i32 2
  %612 = load float, ptr %611, align 4, !tbaa !48
  %613 = fpext float %612 to double
  store double %613, ptr %44, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %614 = load ptr, ptr %2, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct._VlCovDet, ptr %614, i32 0, i32 10
  %616 = load ptr, ptr %615, align 8, !tbaa !65
  %617 = load i64, ptr %36, align 8, !tbaa !16
  %618 = getelementptr inbounds %struct._VlCovDetFeature, ptr %616, i64 %617
  %619 = getelementptr inbounds %struct._VlCovDetFeature, ptr %618, i32 0, i32 1
  %620 = load float, ptr %619, align 4, !tbaa !52
  %621 = fpext float %620 to double
  store double %621, ptr %45, align 8, !tbaa !17
  %622 = load double, ptr %45, align 8, !tbaa !17
  %623 = fcmp oeq double %622, 0.000000e+00
  br i1 %623, label %624, label %625

624:                                              ; preds = %582
  store i32 28, ptr %46, align 4
  br label %671

625:                                              ; preds = %582
  %626 = load double, ptr %40, align 8, !tbaa !17
  %627 = load double, ptr %37, align 8, !tbaa !17
  %628 = fadd double 1.000000e+00, %627
  %629 = load double, ptr %44, align 8, !tbaa !17
  %630 = fmul double %628, %629
  %631 = fcmp olt double %626, %630
  br i1 %631, label %632, label %670

632:                                              ; preds = %625
  %633 = load double, ptr %44, align 8, !tbaa !17
  %634 = load double, ptr %37, align 8, !tbaa !17
  %635 = fadd double 1.000000e+00, %634
  %636 = load double, ptr %40, align 8, !tbaa !17
  %637 = fmul double %635, %636
  %638 = fcmp olt double %633, %637
  br i1 %638, label %639, label %670

639:                                              ; preds = %632
  %640 = load double, ptr %42, align 8, !tbaa !17
  %641 = call double @vl_abs_d(double noundef %640)
  %642 = load double, ptr %37, align 8, !tbaa !17
  %643 = load double, ptr %40, align 8, !tbaa !17
  %644 = fmul double %642, %643
  %645 = fcmp olt double %641, %644
  br i1 %645, label %646, label %670

646:                                              ; preds = %639
  %647 = load double, ptr %43, align 8, !tbaa !17
  %648 = call double @vl_abs_d(double noundef %647)
  %649 = load double, ptr %37, align 8, !tbaa !17
  %650 = load double, ptr %40, align 8, !tbaa !17
  %651 = fmul double %649, %650
  %652 = fcmp olt double %648, %651
  br i1 %652, label %653, label %670

653:                                              ; preds = %646
  %654 = load double, ptr %41, align 8, !tbaa !17
  %655 = call double @vl_abs_d(double noundef %654)
  %656 = load double, ptr %45, align 8, !tbaa !17
  %657 = call double @vl_abs_d(double noundef %656)
  %658 = fcmp ogt double %655, %657
  br i1 %658, label %659, label %670

659:                                              ; preds = %653
  %660 = load ptr, ptr %2, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct._VlCovDet, ptr %660, i32 0, i32 10
  %662 = load ptr, ptr %661, align 8, !tbaa !65
  %663 = load i64, ptr %36, align 8, !tbaa !16
  %664 = getelementptr inbounds %struct._VlCovDetFeature, ptr %662, i64 %663
  %665 = getelementptr inbounds %struct._VlCovDetFeature, ptr %664, i32 0, i32 1
  store float 0.000000e+00, ptr %665, align 4, !tbaa !52
  %666 = load ptr, ptr %2, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct._VlCovDet, ptr %666, i32 0, i32 9
  %668 = load i64, ptr %667, align 8, !tbaa !64
  %669 = add i64 %668, 1
  store i64 %669, ptr %667, align 8, !tbaa !64
  br label %670

670:                                              ; preds = %659, %653, %646, %639, %632, %625
  store i32 0, ptr %46, align 4
  br label %671

671:                                              ; preds = %670, %624
  call void @llvm.lifetime.end.p0(i64 8, 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
  %672 = load i32, ptr %46, align 4
  switch i32 %672, label %735 [
    i32 0, label %673
    i32 28, label %674
  ]

673:                                              ; preds = %671
  br label %674

674:                                              ; preds = %673, %671
  %675 = load i64, ptr %36, align 8, !tbaa !16
  %676 = add nsw i64 %675, 1
  store i64 %676, ptr %36, align 8, !tbaa !16
  br label %574, !llvm.loop !66

677:                                              ; preds = %574
  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
  br label %678

678:                                              ; preds = %677
  %679 = load i64, ptr %35, align 8, !tbaa !16
  %680 = add nsw i64 %679, 1
  store i64 %680, ptr %35, align 8, !tbaa !16
  br label %530, !llvm.loop !67

681:                                              ; preds = %530
  store i64 0, ptr %36, align 8, !tbaa !16
  store i64 0, ptr %35, align 8, !tbaa !16
  br label %682

682:                                              ; preds = %712, %681
  %683 = load i64, ptr %35, align 8, !tbaa !16
  %684 = load ptr, ptr %2, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct._VlCovDet, ptr %684, i32 0, i32 11
  %686 = load i64, ptr %685, align 8, !tbaa !14
  %687 = trunc i64 %686 to i32
  %688 = sext i32 %687 to i64
  %689 = icmp slt i64 %683, %688
  br i1 %689, label %690, label %715

690:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 40, ptr %47) #9
  %691 = load ptr, ptr %2, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct._VlCovDet, ptr %691, i32 0, i32 10
  %693 = load ptr, ptr %692, align 8, !tbaa !65
  %694 = load i64, ptr %35, align 8, !tbaa !16
  %695 = getelementptr inbounds %struct._VlCovDetFeature, ptr %693, i64 %694
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 4 %695, i64 40, i1 false), !tbaa.struct !68
  %696 = load ptr, ptr %2, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct._VlCovDet, ptr %696, i32 0, i32 10
  %698 = load ptr, ptr %697, align 8, !tbaa !65
  %699 = load i64, ptr %35, align 8, !tbaa !16
  %700 = getelementptr inbounds %struct._VlCovDetFeature, ptr %698, i64 %699
  %701 = getelementptr inbounds %struct._VlCovDetFeature, ptr %700, i32 0, i32 1
  %702 = load float, ptr %701, align 4, !tbaa !52
  %703 = fcmp une float %702, 0.000000e+00
  br i1 %703, label %704, label %711

704:                                              ; preds = %690
  %705 = load ptr, ptr %2, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct._VlCovDet, ptr %705, i32 0, i32 10
  %707 = load ptr, ptr %706, align 8, !tbaa !65
  %708 = load i64, ptr %36, align 8, !tbaa !16
  %709 = add nsw i64 %708, 1
  store i64 %709, ptr %36, align 8, !tbaa !16
  %710 = getelementptr inbounds %struct._VlCovDetFeature, ptr %707, i64 %708
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %710, ptr align 4 %47, i64 40, i1 false), !tbaa.struct !68
  br label %711

711:                                              ; preds = %704, %690
  call void @llvm.lifetime.end.p0(i64 40, ptr %47) #9
  br label %712

712:                                              ; preds = %711
  %713 = load i64, ptr %35, align 8, !tbaa !16
  %714 = add nsw i64 %713, 1
  store i64 %714, ptr %35, align 8, !tbaa !16
  br label %682, !llvm.loop !70

715:                                              ; preds = %682
  %716 = load i64, ptr %36, align 8, !tbaa !16
  %717 = load ptr, ptr %2, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct._VlCovDet, ptr %717, i32 0, i32 11
  store i64 %716, ptr %718, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %719

719:                                              ; preds = %715, %519
  %720 = load ptr, ptr %5, align 8, !tbaa !5
  %721 = icmp ne ptr %720, null
  br i1 %721, label %722, label %724

722:                                              ; preds = %719
  %723 = load ptr, ptr %5, align 8, !tbaa !5
  call void @vl_free(ptr noundef %723)
  br label %724

724:                                              ; preds = %722, %719
  %725 = load ptr, ptr %6, align 8, !tbaa !5
  %726 = icmp ne ptr %725, null
  br i1 %726, label %727, label %729

727:                                              ; preds = %724
  %728 = load ptr, ptr %6, align 8, !tbaa !5
  call void @vl_free(ptr noundef %728)
  br label %729

729:                                              ; preds = %727, %724
  %730 = load ptr, ptr %7, align 8, !tbaa !5
  %731 = icmp ne ptr %730, null
  br i1 %731, label %732, label %734

732:                                              ; preds = %729
  %733 = load ptr, ptr %7, align 8, !tbaa !5
  call void @vl_free(ptr noundef %733)
  br label %734

734:                                              ; preds = %732, %729
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %3) #9
  ret void

735:                                              ; preds = %671
  unreachable
}

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

declare ptr @vl_malloc(i64 noundef) #6

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

declare double @vl_scalespace_get_level_sigma(ptr noundef, i64 noundef, i64 noundef) #6

; Function Attrs: nounwind uwtable
declare hidden void @_vl_dog_response(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @_vl_harris_response(ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef, double noundef, double noundef, double noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @_vl_det_hessian_response(ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef, double noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local void @vl_covdet_extract_laplacian_scales(ptr noundef) #0

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_VlCovDet", !6, i64 0, !6, i64 8, !11, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !13, i64 48, !13, i64 56, !12, i64 64, !13, i64 72, !6, i64 80, !13, i64 88, !13, i64 96, !6, i64 104, !13, i64 112, !11, i64 120, !7, i64 128, !7, i64 192, !11, i64 256, !7, i64 260, !7, i64 6984, !7, i64 13708, !7, i64 20432, !7, i64 27156, !7, i64 31512, !7, i64 75072}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!"long long", !7, i64 0}
!14 = !{!10, !13, i64 88}
!15 = !{i64 0, i64 8, !16, i64 8, i64 8, !16, i64 16, i64 8, !16, i64 24, i64 8, !16, i64 32, i64 8, !16, i64 40, i64 8, !16, i64 48, i64 8, !16, i64 56, i64 8, !17, i64 64, i64 8, !17}
!16 = !{!13, !13, i64 0}
!17 = !{!12, !12, i64 0}
!18 = !{!10, !11, i64 16}
!19 = !{!20, !13, i64 48}
!20 = !{!"_VlScaleSpaceGeometry", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !12, i64 56, !12, i64 64}
!21 = !{!10, !6, i64 8}
!22 = !{!20, !13, i64 16}
!23 = !{!24, !13, i64 0}
!24 = !{!"_VlScaleSpaceOctaveGeometry", !13, i64 0, !13, i64 8, !12, i64 16}
!25 = !{!24, !13, i64 8}
!26 = !{!20, !13, i64 24}
!27 = !{!20, !13, i64 40}
!28 = !{!24, !12, i64 16}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!10, !12, i64 24}
!33 = !{!11, !11, i64 0}
!34 = !{!35, !36, i64 36}
!35 = !{!"_VlCovDetExtremum3", !13, i64 0, !13, i64 8, !13, i64 16, !36, i64 24, !36, i64 28, !36, i64 32, !36, i64 36, !36, i64 40}
!36 = !{!"float", !7, i64 0}
!37 = !{!35, !36, i64 40}
!38 = !{!10, !12, i64 32}
!39 = !{!20, !12, i64 56}
!40 = !{!35, !36, i64 32}
!41 = !{!20, !13, i64 32}
!42 = !{!35, !36, i64 24}
!43 = !{!44, !36, i64 0}
!44 = !{!"_VlCovDetFeature", !45, i64 0, !36, i64 24, !36, i64 28, !36, i64 32, !36, i64 36}
!45 = !{!"_VlFrameOrientedEllipse", !36, i64 0, !36, i64 4, !36, i64 8, !36, i64 12, !36, i64 16, !36, i64 20}
!46 = !{!35, !36, i64 28}
!47 = !{!44, !36, i64 4}
!48 = !{!44, !36, i64 8}
!49 = !{!44, !36, i64 12}
!50 = !{!44, !36, i64 16}
!51 = !{!44, !36, i64 20}
!52 = !{!44, !36, i64 24}
!53 = !{!44, !36, i64 28}
!54 = distinct !{!54, !30}
!55 = !{!56, !36, i64 24}
!56 = !{!"_VlCovDetExtremum2", !13, i64 0, !13, i64 8, !36, i64 16, !36, i64 20, !36, i64 24, !36, i64 28}
!57 = !{!56, !36, i64 28}
!58 = !{!56, !36, i64 16}
!59 = !{!56, !36, i64 20}
!60 = distinct !{!60, !30}
!61 = distinct !{!61, !30}
!62 = distinct !{!62, !30}
!63 = !{!10, !12, i64 64}
!64 = !{!10, !13, i64 72}
!65 = !{!10, !6, i64 80}
!66 = distinct !{!66, !30}
!67 = distinct !{!67, !30}
!68 = !{i64 0, i64 4, !69, i64 4, i64 4, !69, i64 8, i64 4, !69, i64 12, i64 4, !69, i64 16, i64 4, !69, i64 20, i64 4, !69, i64 24, i64 4, !69, i64 28, i64 4, !69, i64 32, i64 4, !69, i64 36, i64 4, !69}
!69 = !{!36, !36, i64 0}
!70 = distinct !{!70, !30}


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

%struct._VlScaleSpaceGeometry = type { i64, i64, i64, i64, i64, i64, i64, double, double }
%struct._VlScaleSpaceOctaveGeometry = type { i64, i64, double }
%struct._VlCovDetExtremum3 = type { i64, i64, i64, float, float, float, float, float }
%struct._VlCovDetFeature = type { %struct._VlFrameOrientedEllipse, float, float, float, float }
%struct._VlFrameOrientedEllipse = type { float, float, float, float, float, float }
%struct._VlCovDetExtremum2 = type { i64, i64, float, float, float, float }

@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@__PRETTY_FUNCTION__.vl_covdet_detect = external hidden unnamed_addr constant [34 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @vl_find_local_extrema_3(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, double noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @vl_find_local_extrema_2(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_refine_local_extreum_3(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_refine_local_extreum_2(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

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

declare void @vl_free(ptr noundef) local_unnamed_addr #5

declare void @vl_scalespace_delete(ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_covdet_append_feature(ptr noundef, ptr noundef) local_unnamed_addr #0

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

declare i32 @vl_scalespacegeometry_is_equal(ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8, ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8) local_unnamed_addr #5

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

declare ptr @vl_scalespace_new_with_geometry(ptr noundef byval(%struct._VlScaleSpaceGeometry) align 8) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
define dso_local void @vl_covdet_detect(ptr noundef %0) local_unnamed_addr #0 {
  %2 = alloca %struct._VlScaleSpaceGeometry, align 8
  %3 = alloca %struct._VlScaleSpaceGeometry, align 8
  %4 = alloca %struct._VlScaleSpaceGeometry, align 8
  %5 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %6 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca %struct._VlScaleSpaceOctaveGeometry, align 8
  %10 = alloca %struct._VlCovDetExtremum3, align 8
  %11 = alloca %struct._VlCovDetFeature, align 8
  %12 = alloca %struct._VlCovDetExtremum2, align 8
  %13 = alloca %struct._VlCovDetFeature, align 8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %2) #9
  %14 = load ptr, ptr %0, align 8, !tbaa !5
  call void @vl_scalespace_get_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceGeometry) align 8 %2, ptr noundef %14) #9
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %3) #9
  %15 = load ptr, ptr %0, align 8, !tbaa !5
  %.not = icmp eq ptr %15, null
  br i1 %.not, label %16, label %17

16:                                               ; preds = %1
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.1, i32 noundef 1931, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_detect) #10
  unreachable

17:                                               ; preds = %1
  %18 = getelementptr inbounds i8, ptr %0, i64 88
  store i64 0, ptr %18, align 8, !tbaa !13
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(72) %3, ptr noundef nonnull align 8 dereferenceable(72) %2, i64 72, i1 false), !tbaa.struct !14
  %19 = getelementptr inbounds i8, ptr %0, i64 16
  %20 = load i32, ptr %19, align 8, !tbaa !17
  %21 = icmp eq i32 %20, 1
  br i1 %21, label %22, label %26

22:                                               ; preds = %17
  %23 = getelementptr inbounds i8, ptr %3, i64 48
  %24 = load i64, ptr %23, align 8, !tbaa !18
  %25 = add nsw i64 %24, -1
  store i64 %25, ptr %23, align 8, !tbaa !18
  br label %26

26:                                               ; preds = %22, %17
  %27 = getelementptr inbounds i8, ptr %0, i64 8
  %28 = load ptr, ptr %27, align 8, !tbaa !20
  %.not185 = icmp eq ptr %28, null
  br i1 %.not185, label %.thread, label %29

29:                                               ; preds = %26
  call void @vl_scalespace_get_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceGeometry) align 8 %4, ptr noundef nonnull %28) #9
  %30 = call i32 @vl_scalespacegeometry_is_equal(ptr noundef nonnull byval(%struct._VlScaleSpaceGeometry) align 8 %3, ptr noundef nonnull byval(%struct._VlScaleSpaceGeometry) align 8 %4) #9
  %.not186 = icmp eq i32 %30, 0
  br i1 %.not186, label %31, label %34

31:                                               ; preds = %29
  %.pr = load ptr, ptr %27, align 8, !tbaa !20
  %.not187 = icmp eq ptr %.pr, null
  br i1 %.not187, label %.thread, label %32

32:                                               ; preds = %31
  call void @vl_scalespace_delete(ptr noundef nonnull %.pr) #9
  br label %.thread

.thread:                                          ; preds = %26, %32, %31
  %33 = call ptr @vl_scalespace_new_with_geometry(ptr noundef nonnull byval(%struct._VlScaleSpaceGeometry) align 8 %3) #9
  store ptr %33, ptr %27, align 8, !tbaa !20
  br label %34

34:                                               ; preds = %.thread, %29
  %35 = load i32, ptr %19, align 8, !tbaa !17
  switch i32 %35, label %56 [
    i32 4, label %36
    i32 6, label %36
  ]

36:                                               ; preds = %34, %34
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  %37 = load ptr, ptr %0, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %2, i64 16
  %39 = load i64, ptr %38, align 8, !tbaa !21
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %5, ptr noundef %37, i64 noundef %39) #9
  %40 = load i64, ptr %5, align 8, !tbaa !22
  %41 = getelementptr inbounds i8, ptr %5, i64 8
  %42 = load i64, ptr %41, align 8, !tbaa !24
  %43 = shl i64 %40, 2
  %44 = mul i64 %43, %42
  %45 = call ptr @vl_malloc(i64 noundef %44) #9
  %46 = load i64, ptr %5, align 8, !tbaa !22
  %47 = load i64, ptr %41, align 8, !tbaa !24
  %48 = shl i64 %46, 2
  %49 = mul i64 %48, %47
  %50 = call ptr @vl_malloc(i64 noundef %49) #9
  %51 = load i64, ptr %5, align 8, !tbaa !22
  %52 = load i64, ptr %41, align 8, !tbaa !24
  %53 = shl i64 %51, 2
  %54 = mul i64 %53, %52
  %55 = call ptr @vl_malloc(i64 noundef %54) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %56

56:                                               ; preds = %34, %36
  %.0167 = phi ptr [ %55, %36 ], [ null, %34 ]
  %.0166 = phi ptr [ %50, %36 ], [ null, %34 ]
  %.0 = phi ptr [ %45, %36 ], [ null, %34 ]
  %57 = getelementptr inbounds i8, ptr %3, i64 16
  %58 = load i64, ptr %57, align 8, !tbaa !21
  %59 = getelementptr inbounds i8, ptr %3, i64 24
  %60 = load i64, ptr %59, align 8, !tbaa !25
  %.not188217 = icmp sgt i64 %58, %60
  br i1 %.not188217, label %._crit_edge221, label %.lr.ph220

.lr.ph220:                                        ; preds = %56
  %61 = getelementptr inbounds i8, ptr %3, i64 40
  %62 = getelementptr inbounds i8, ptr %3, i64 48
  %63 = getelementptr inbounds i8, ptr %6, i64 8
  %64 = getelementptr inbounds i8, ptr %6, i64 16
  br label %65

65:                                               ; preds = %.lr.ph220, %._crit_edge
  %.0168218 = phi i64 [ %58, %.lr.ph220 ], [ %95, %._crit_edge ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #9
  %66 = load ptr, ptr %27, align 8, !tbaa !20
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %6, ptr noundef %66, i64 noundef %.0168218) #9
  %67 = load i64, ptr %61, align 8, !tbaa !26
  %68 = load i64, ptr %62, align 8, !tbaa !18
  %.not207215 = icmp sgt i64 %67, %68
  br i1 %.not207215, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %65, %92
  %.0169216 = phi i64 [ %93, %92 ], [ %67, %65 ]
  %69 = load ptr, ptr %0, align 8, !tbaa !5
  %70 = call ptr @vl_scalespace_get_level(ptr noundef %69, i64 noundef %.0168218, i64 noundef %.0169216) #9
  %71 = load ptr, ptr %27, align 8, !tbaa !20
  %72 = call ptr @vl_scalespace_get_level(ptr noundef %71, i64 noundef %.0168218, i64 noundef %.0169216) #9
  %73 = load ptr, ptr %27, align 8, !tbaa !20
  %74 = call double @vl_scalespace_get_level_sigma(ptr noundef %73, i64 noundef %.0168218, i64 noundef %.0169216) #9
  %75 = load i32, ptr %19, align 8, !tbaa !17
  switch i32 %75, label %91 [
    i32 1, label %76
    i32 4, label %82
    i32 6, label %82
    i32 2, label %87
    i32 3, label %87
    i32 5, label %87
  ]

76:                                               ; preds = %.lr.ph
  %77 = load ptr, ptr %0, align 8, !tbaa !5
  %78 = add nsw i64 %.0169216, 1
  %79 = call ptr @vl_scalespace_get_level(ptr noundef %77, i64 noundef %.0168218, i64 noundef %78) #9
  %80 = load i64, ptr %6, align 8, !tbaa !22
  %81 = load i64, ptr %63, align 8, !tbaa !24
  call void @_vl_dog_response(ptr noundef %72, ptr noundef %79, ptr noundef %70, i64 noundef %80, i64 noundef %81)
  br label %92

82:                                               ; preds = %.lr.ph, %.lr.ph
  %83 = load i64, ptr %6, align 8, !tbaa !22
  %84 = load i64, ptr %63, align 8, !tbaa !24
  %85 = load double, ptr %64, align 8, !tbaa !27
  %86 = fmul double %74, 1.400000e+00
  call void @_vl_harris_response(ptr noundef %72, ptr noundef %70, i64 noundef %83, i64 noundef %84, double noundef %85, double noundef %74, double noundef %86, double noundef 5.000000e-02)
  br label %92

87:                                               ; preds = %.lr.ph, %.lr.ph, %.lr.ph
  %88 = load i64, ptr %6, align 8, !tbaa !22
  %89 = load i64, ptr %63, align 8, !tbaa !24
  %90 = load double, ptr %64, align 8, !tbaa !27
  call void @_vl_det_hessian_response(ptr noundef %72, ptr noundef %70, i64 noundef %88, i64 noundef %89, double noundef %90, double noundef %74)
  br label %92

91:                                               ; preds = %.lr.ph
  call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 1986, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_detect) #10
  unreachable

92:                                               ; preds = %87, %82, %76
  %93 = add nsw i64 %.0169216, 1
  %94 = load i64, ptr %62, align 8, !tbaa !18
  %.not207.not = icmp slt i64 %.0169216, %94
  br i1 %.not207.not, label %.lr.ph, label %._crit_edge, !llvm.loop !28

._crit_edge:                                      ; preds = %92, %65
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #9
  %95 = add nsw i64 %.0168218, 1
  %96 = load i64, ptr %59, align 8, !tbaa !25
  %.not188.not = icmp slt i64 %.0168218, %96
  br i1 %.not188.not, label %65, label %._crit_edge221.loopexit, !llvm.loop !30

._crit_edge221.loopexit:                          ; preds = %._crit_edge
  %.pre = load i64, ptr %57, align 8, !tbaa !21
  br label %._crit_edge221

._crit_edge221:                                   ; preds = %._crit_edge221.loopexit, %56
  %97 = phi i64 [ %96, %._crit_edge221.loopexit ], [ %60, %56 ]
  %98 = phi i64 [ %.pre, %._crit_edge221.loopexit ], [ %58, %56 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  store ptr null, ptr %7, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  store i64 0, ptr %8, align 8, !tbaa !15
  %.not189231 = icmp sgt i64 %98, %97
  br i1 %.not189231, label %._crit_edge236.thread, label %.lr.ph235

.lr.ph235:                                        ; preds = %._crit_edge221
  %99 = getelementptr inbounds i8, ptr %9, i64 16
  %100 = getelementptr inbounds i8, ptr %9, i64 8
  %101 = getelementptr inbounds i8, ptr %3, i64 48
  %102 = getelementptr inbounds i8, ptr %3, i64 40
  %103 = getelementptr inbounds i8, ptr %0, i64 24
  %104 = getelementptr inbounds i8, ptr %12, i64 24
  %105 = getelementptr inbounds i8, ptr %12, i64 28
  %106 = getelementptr inbounds i8, ptr %0, i64 32
  %107 = getelementptr inbounds i8, ptr %3, i64 56
  %108 = getelementptr inbounds i8, ptr %3, i64 32
  %109 = getelementptr inbounds i8, ptr %12, i64 16
  %110 = getelementptr inbounds i8, ptr %13, i64 8
  %111 = getelementptr inbounds i8, ptr %13, i64 12
  %112 = getelementptr inbounds i8, ptr %13, i64 20
  %113 = getelementptr inbounds i8, ptr %13, i64 24
  %114 = getelementptr inbounds i8, ptr %10, i64 36
  %115 = getelementptr inbounds i8, ptr %10, i64 40
  %116 = getelementptr inbounds i8, ptr %10, i64 32
  %117 = getelementptr inbounds i8, ptr %10, i64 24
  %118 = getelementptr inbounds i8, ptr %11, i64 8
  %119 = getelementptr inbounds i8, ptr %11, i64 12
  %120 = getelementptr inbounds i8, ptr %11, i64 20
  %121 = getelementptr inbounds i8, ptr %11, i64 24
  br label %122

122:                                              ; preds = %.lr.ph235, %.loopexit
  %.1232 = phi i64 [ %98, %.lr.ph235 ], [ %230, %.loopexit ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #9
  %123 = load ptr, ptr %27, align 8, !tbaa !20
  call void @vl_scalespace_get_octave_geometry(ptr dead_on_unwind nonnull writable sret(%struct._VlScaleSpaceOctaveGeometry) align 8 %9, ptr noundef %123, i64 noundef %.1232) #9
  %124 = load double, ptr %99, align 8, !tbaa !27
  %125 = load i64, ptr %9, align 8, !tbaa !22
  %126 = load i64, ptr %100, align 8, !tbaa !24
  %127 = load i64, ptr %101, align 8, !tbaa !18
  %128 = load i64, ptr %102, align 8, !tbaa !26
  %129 = sub nsw i64 %127, %128
  %130 = add nsw i64 %129, 1
  %131 = load i32, ptr %19, align 8, !tbaa !17
  %.off = add i32 %131, -1
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %136, label %.preheader212

.preheader212:                                    ; preds = %122
  %132 = icmp slt i64 %128, %127
  br i1 %132, label %.lr.ph227, label %.loopexit

.lr.ph227:                                        ; preds = %.preheader212
  %133 = sitofp i64 %.1232 to double
  %134 = insertelement <2 x double> poison, double %124, i64 0
  %135 = shufflevector <2 x double> %134, <2 x double> poison, <2 x i32> zeroinitializer
  br label %185

136:                                              ; preds = %122
  %137 = load ptr, ptr %27, align 8, !tbaa !20
  %138 = call ptr @vl_scalespace_get_level(ptr noundef %137, i64 noundef %.1232, i64 noundef %128) #9
  %139 = load double, ptr %103, align 8, !tbaa !32
  %140 = fmul double %139, 8.000000e-01
  %141 = call i64 @vl_find_local_extrema_3(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %138, i64 noundef %125, i64 noundef %126, i64 noundef %130, double noundef %140)
  %.not252 = icmp eq i64 %141, 0
  br i1 %.not252, label %.loopexit, label %.lr.ph230

.lr.ph230:                                        ; preds = %136
  %142 = sitofp i64 %.1232 to float
  %143 = insertelement <2 x double> poison, double %124, i64 0
  %144 = shufflevector <2 x double> %143, <2 x double> poison, <2 x i32> zeroinitializer
  br label %145

145:                                              ; preds = %.lr.ph230, %183
  %.0171228 = phi i64 [ 0, %.lr.ph230 ], [ %184, %183 ]
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %10) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %11, i8 0, i64 40, i1 false)
  %146 = load ptr, ptr %7, align 8, !tbaa !31
  %.idx = mul i64 %.0171228, 24
  %147 = getelementptr inbounds i8, ptr %146, i64 %.idx
  %148 = load i64, ptr %147, align 8, !tbaa !15
  %149 = getelementptr i8, ptr %147, i64 8
  %150 = load i64, ptr %149, align 8, !tbaa !15
  %151 = getelementptr i8, ptr %147, i64 16
  %152 = load i64, ptr %151, align 8, !tbaa !15
  %153 = call i32 @vl_refine_local_extreum_3(ptr noundef nonnull %10, ptr noundef %138, i64 noundef %125, i64 noundef %126, i64 noundef %130, i64 noundef %148, i64 noundef %150, i64 noundef %152)
  %154 = load float, ptr %114, align 4, !tbaa !33
  %155 = call float @llvm.fabs.f32(float %154)
  %156 = fpext float %155 to double
  %157 = load double, ptr %103, align 8, !tbaa !32
  %158 = fcmp uge double %157, %156
  %159 = and i32 %153, 1
  %160 = load float, ptr %115, align 8, !tbaa !36
  %161 = fpext float %160 to double
  %162 = load double, ptr %106, align 8, !tbaa !37
  %163 = fcmp ule double %162, %161
  %.not200 = select i1 %163, i1 true, i1 %158
  %.not196197 = icmp eq i32 %159, 0
  %.not196 = select i1 %.not200, i1 true, i1 %.not196197
  br i1 %.not196, label %183, label %164

164:                                              ; preds = %145
  %165 = load double, ptr %107, align 8, !tbaa !38
  %166 = load float, ptr %116, align 8, !tbaa !39
  %167 = load i64, ptr %102, align 8, !tbaa !26
  %168 = sitofp i64 %167 to float
  %169 = fadd float %166, %168
  %170 = load i64, ptr %108, align 8, !tbaa !40
  %171 = uitofp i64 %170 to float
  %172 = fdiv float %169, %171
  %173 = fadd float %172, %142
  %174 = fpext float %173 to double
  %exp2 = call double @exp2(double %174) #9
  %175 = fmul double %165, %exp2
  %176 = load <2 x float>, ptr %117, align 8, !tbaa !41
  %177 = fpext <2 x float> %176 to <2 x double>
  %178 = fmul <2 x double> %144, %177
  %179 = fptrunc <2 x double> %178 to <2 x float>
  store <2 x float> %179, ptr %11, align 8, !tbaa !41
  %180 = fptrunc double %175 to float
  store float %180, ptr %118, align 8, !tbaa !42
  store <2 x float> zeroinitializer, ptr %119, align 4, !tbaa !41
  store float %180, ptr %120, align 4, !tbaa !45
  %181 = load <2 x float>, ptr %114, align 4, !tbaa !41
  store <2 x float> %181, ptr %121, align 8, !tbaa !41
  %182 = call i32 @vl_covdet_append_feature(ptr noundef nonnull %0, ptr noundef nonnull %11)
  br label %183

183:                                              ; preds = %164, %145
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %10) #9
  %184 = add nuw i64 %.0171228, 1
  %exitcond254.not = icmp eq i64 %184, %141
  br i1 %exitcond254.not, label %.loopexit, label %145, !llvm.loop !46

185:                                              ; preds = %.lr.ph227, %._crit_edge225
  %.1170226 = phi i64 [ %128, %.lr.ph227 ], [ %227, %._crit_edge225 ]
  %186 = load ptr, ptr %27, align 8, !tbaa !20
  %187 = call ptr @vl_scalespace_get_level(ptr noundef %186, i64 noundef %.1232, i64 noundef %.1170226) #9
  %188 = load double, ptr %103, align 8, !tbaa !32
  %189 = fmul double %188, 8.000000e-01
  %190 = call i64 @vl_find_local_extrema_2(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef %187, i64 noundef %125, i64 noundef %126, double noundef %189)
  %.not251 = icmp eq i64 %190, 0
  br i1 %.not251, label %._crit_edge225, label %.lr.ph224

.lr.ph224:                                        ; preds = %185
  %191 = sitofp i64 %.1170226 to double
  br label %192

192:                                              ; preds = %.lr.ph224, %225
  %.1172222 = phi i64 [ 0, %.lr.ph224 ], [ %226, %225 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %13) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(40) %13, i8 0, i64 40, i1 false)
  %193 = load ptr, ptr %7, align 8, !tbaa !31
  %194 = shl i64 %.1172222, 1
  %195 = getelementptr inbounds i64, ptr %193, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !15
  %197 = or disjoint i64 %194, 1
  %198 = getelementptr inbounds i64, ptr %193, i64 %197
  %199 = load i64, ptr %198, align 8, !tbaa !15
  %200 = call i32 @vl_refine_local_extreum_2(ptr noundef nonnull %12, ptr noundef %187, i64 noundef %125, i64 noundef %126, i64 noundef %196, i64 noundef %199)
  %201 = load float, ptr %104, align 8, !tbaa !47
  %202 = call float @llvm.fabs.f32(float %201)
  %203 = fpext float %202 to double
  %204 = load double, ptr %103, align 8, !tbaa !32
  %205 = fcmp uge double %204, %203
  %206 = and i32 %200, 1
  %207 = load float, ptr %105, align 4, !tbaa !49
  %208 = fpext float %207 to double
  %209 = load double, ptr %106, align 8, !tbaa !37
  %210 = fcmp ule double %209, %208
  %.not205 = select i1 %210, i1 true, i1 %205
  %.not201202 = icmp eq i32 %206, 0
  %.not201 = select i1 %.not205, i1 true, i1 %.not201202
  br i1 %.not201, label %225, label %211

211:                                              ; preds = %192
  %212 = load double, ptr %107, align 8, !tbaa !38
  %213 = load i64, ptr %108, align 8, !tbaa !40
  %214 = uitofp i64 %213 to double
  %215 = fdiv double %191, %214
  %216 = fadd double %215, %133
  %exp2206 = call double @exp2(double %216) #9
  %217 = fmul double %212, %exp2206
  %218 = load <2 x float>, ptr %109, align 8, !tbaa !41
  %219 = fpext <2 x float> %218 to <2 x double>
  %220 = fmul <2 x double> %135, %219
  %221 = fptrunc <2 x double> %220 to <2 x float>
  store <2 x float> %221, ptr %13, align 8, !tbaa !41
  %222 = fptrunc double %217 to float
  store float %222, ptr %110, align 8, !tbaa !42
  store <2 x float> zeroinitializer, ptr %111, align 4, !tbaa !41
  store float %222, ptr %112, align 4, !tbaa !45
  %223 = load <2 x float>, ptr %104, align 8, !tbaa !41
  store <2 x float> %223, ptr %113, align 8, !tbaa !41
  %224 = call i32 @vl_covdet_append_feature(ptr noundef nonnull %0, ptr noundef nonnull %13)
  br label %225

225:                                              ; preds = %211, %192
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #9
  %226 = add nuw i64 %.1172222, 1
  %exitcond.not = icmp eq i64 %226, %190
  br i1 %exitcond.not, label %._crit_edge225, label %192, !llvm.loop !50

._crit_edge225:                                   ; preds = %225, %185
  %227 = add nsw i64 %.1170226, 1
  %228 = load i64, ptr %101, align 8, !tbaa !18
  %229 = icmp slt i64 %227, %228
  br i1 %229, label %185, label %.loopexit, !llvm.loop !51

.loopexit:                                        ; preds = %._crit_edge225, %183, %.preheader212, %136
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #9
  %230 = add nsw i64 %.1232, 1
  %231 = load i64, ptr %59, align 8, !tbaa !25
  %.not189.not = icmp slt i64 %.1232, %231
  br i1 %.not189.not, label %122, label %._crit_edge236, !llvm.loop !52

._crit_edge236:                                   ; preds = %.loopexit
  %.pre255 = load ptr, ptr %7, align 8, !tbaa !31
  %.not190 = icmp eq ptr %.pre255, null
  br i1 %.not190, label %._crit_edge236.thread, label %232

232:                                              ; preds = %._crit_edge236
  call void @vl_free(ptr noundef nonnull %.pre255) #9
  br label %._crit_edge236.thread

._crit_edge236.thread:                            ; preds = %._crit_edge221, %232, %._crit_edge236
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  %233 = load i32, ptr %19, align 8, !tbaa !17
  %.off208 = add i32 %233, -3
  %switch209 = icmp ult i32 %.off208, 2
  br i1 %switch209, label %234, label %235

234:                                              ; preds = %._crit_edge236.thread
  call void @vl_covdet_extract_laplacian_scales(ptr noundef nonnull %0)
  br label %235

235:                                              ; preds = %._crit_edge236.thread, %234
  %236 = getelementptr inbounds i8, ptr %0, i64 64
  %237 = load double, ptr %236, align 8, !tbaa !53
  %238 = fcmp une double %237, 0.000000e+00
  br i1 %238, label %239, label %326

239:                                              ; preds = %235
  %240 = getelementptr inbounds i8, ptr %0, i64 72
  store i64 0, ptr %240, align 8, !tbaa !54
  %241 = load i64, ptr %18, align 8, !tbaa !13
  %242 = trunc i64 %241 to i32
  %243 = icmp sgt i32 %242, 0
  br i1 %243, label %.lr.ph245, label %._crit_edge250

.lr.ph245:                                        ; preds = %239
  %244 = getelementptr inbounds i8, ptr %0, i64 80
  %245 = fadd double %237, 1.000000e+00
  br label %248

.preheader:                                       ; preds = %._crit_edge241
  %.pre257 = trunc i64 %308 to i32
  %246 = icmp sgt i32 %.pre257, 0
  br i1 %246, label %.lr.ph249, label %._crit_edge250

.lr.ph249:                                        ; preds = %.preheader
  %247 = getelementptr inbounds i8, ptr %0, i64 80
  br label %311

248:                                              ; preds = %.lr.ph245, %._crit_edge241
  %249 = phi i64 [ %241, %.lr.ph245 ], [ %308, %._crit_edge241 ]
  %.0173243 = phi i64 [ 0, %.lr.ph245 ], [ %309, %._crit_edge241 ]
  %250 = load ptr, ptr %244, align 8, !tbaa !55
  %251 = getelementptr inbounds %struct._VlCovDetFeature, ptr %250, i64 %.0173243
  %252 = load float, ptr %251, align 4, !tbaa !56
  %253 = fpext float %252 to double
  %254 = getelementptr inbounds i8, ptr %251, i64 4
  %255 = load float, ptr %254, align 4, !tbaa !57
  %256 = fpext float %255 to double
  %257 = getelementptr inbounds i8, ptr %251, i64 8
  %258 = load float, ptr %257, align 4, !tbaa !42
  %259 = fpext float %258 to double
  %260 = getelementptr inbounds i8, ptr %251, i64 24
  %261 = load float, ptr %260, align 4, !tbaa !58
  %262 = fpext float %261 to double
  %263 = trunc i64 %249 to i32
  %264 = icmp sgt i32 %263, 0
  br i1 %264, label %.lr.ph240, label %.._crit_edge241_crit_edge

.._crit_edge241_crit_edge:                        ; preds = %248
  %.pre258 = shl i64 %249, 32
  %.pre259 = ashr exact i64 %.pre258, 32
  br label %._crit_edge241

.lr.ph240:                                        ; preds = %248
  %265 = fmul double %245, %259
  %266 = fmul double %237, %259
  br label %267

267:                                              ; preds = %.lr.ph240, %303
  %.0175238 = phi i64 [ 0, %.lr.ph240 ], [ %304, %303 ]
  %268 = load ptr, ptr %244, align 8, !tbaa !55
  %269 = getelementptr inbounds %struct._VlCovDetFeature, ptr %268, i64 %.0175238
  %270 = load float, ptr %269, align 4, !tbaa !56
  %271 = fpext float %270 to double
  %272 = fsub double %271, %253
  %273 = getelementptr inbounds i8, ptr %269, i64 4
  %274 = load float, ptr %273, align 4, !tbaa !57
  %275 = fpext float %274 to double
  %276 = fsub double %275, %256
  %277 = getelementptr inbounds i8, ptr %269, i64 24
  %278 = load float, ptr %277, align 4, !tbaa !58
  %279 = fpext float %278 to double
  %280 = fcmp oeq float %278, 0.000000e+00
  br i1 %280, label %303, label %281

281:                                              ; preds = %267
  %282 = getelementptr inbounds i8, ptr %269, i64 8
  %283 = load float, ptr %282, align 4, !tbaa !42
  %284 = fpext float %283 to double
  %285 = fmul double %245, %284
  %286 = fcmp ogt double %285, %259
  %287 = fcmp ogt double %265, %284
  %or.cond = and i1 %287, %286
  br i1 %or.cond, label %288, label %303

288:                                              ; preds = %281
  %289 = call double @vl_abs_d(double noundef %272)
  %290 = fcmp olt double %289, %266
  br i1 %290, label %291, label %303

291:                                              ; preds = %288
  %292 = call double @vl_abs_d(double noundef %276)
  %293 = fcmp olt double %292, %266
  br i1 %293, label %294, label %303

294:                                              ; preds = %291
  %295 = call double @vl_abs_d(double noundef %262)
  %296 = call double @vl_abs_d(double noundef %279)
  %297 = fcmp ogt double %295, %296
  br i1 %297, label %298, label %303

298:                                              ; preds = %294
  %299 = load ptr, ptr %244, align 8, !tbaa !55
  %300 = getelementptr inbounds %struct._VlCovDetFeature, ptr %299, i64 %.0175238, i32 1
  store float 0.000000e+00, ptr %300, align 4, !tbaa !58
  %301 = load i64, ptr %240, align 8, !tbaa !54
  %302 = add i64 %301, 1
  store i64 %302, ptr %240, align 8, !tbaa !54
  br label %303

303:                                              ; preds = %281, %288, %291, %294, %298, %267
  %304 = add nuw nsw i64 %.0175238, 1
  %305 = load i64, ptr %18, align 8, !tbaa !13
  %sext195 = shl i64 %305, 32
  %306 = ashr exact i64 %sext195, 32
  %307 = icmp slt i64 %304, %306
  br i1 %307, label %267, label %._crit_edge241, !llvm.loop !59

._crit_edge241:                                   ; preds = %303, %.._crit_edge241_crit_edge
  %.pre-phi260 = phi i64 [ %.pre259, %.._crit_edge241_crit_edge ], [ %306, %303 ]
  %308 = phi i64 [ %249, %.._crit_edge241_crit_edge ], [ %305, %303 ]
  %309 = add nuw nsw i64 %.0173243, 1
  %310 = icmp slt i64 %309, %.pre-phi260
  br i1 %310, label %248, label %.preheader, !llvm.loop !60

311:                                              ; preds = %.lr.ph249, %321
  %312 = phi i64 [ %308, %.lr.ph249 ], [ %322, %321 ]
  %.1174248 = phi i64 [ 0, %.lr.ph249 ], [ %323, %321 ]
  %.1176247 = phi i64 [ 0, %.lr.ph249 ], [ %.2, %321 ]
  %313 = load ptr, ptr %247, align 8, !tbaa !55
  %314 = getelementptr inbounds %struct._VlCovDetFeature, ptr %313, i64 %.1174248, i32 1
  %315 = load float, ptr %314, align 4, !tbaa !58
  %316 = fcmp une float %315, 0.000000e+00
  br i1 %316, label %317, label %321

317:                                              ; preds = %311
  %318 = getelementptr inbounds %struct._VlCovDetFeature, ptr %313, i64 %.1174248
  %319 = add nsw i64 %.1176247, 1
  %320 = getelementptr inbounds %struct._VlCovDetFeature, ptr %313, i64 %.1176247
  call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(40) %320, ptr noundef nonnull align 4 dereferenceable(40) %318, i64 40, i1 false)
  %.pre256 = load i64, ptr %18, align 8, !tbaa !13
  br label %321

321:                                              ; preds = %317, %311
  %322 = phi i64 [ %.pre256, %317 ], [ %312, %311 ]
  %.2 = phi i64 [ %319, %317 ], [ %.1176247, %311 ]
  %323 = add nuw nsw i64 %.1174248, 1
  %sext191 = shl i64 %322, 32
  %324 = ashr exact i64 %sext191, 32
  %325 = icmp slt i64 %323, %324
  br i1 %325, label %311, label %._crit_edge250, !llvm.loop !61

._crit_edge250:                                   ; preds = %321, %239, %.preheader
  %.1176.lcssa = phi i64 [ 0, %.preheader ], [ 0, %239 ], [ %.2, %321 ]
  store i64 %.1176.lcssa, ptr %18, align 8, !tbaa !13
  br label %326

326:                                              ; preds = %._crit_edge250, %235
  %.not192 = icmp eq ptr %.0, null
  br i1 %.not192, label %328, label %327

327:                                              ; preds = %326
  call void @vl_free(ptr noundef nonnull %.0) #9
  br label %328

328:                                              ; preds = %327, %326
  %.not193 = icmp eq ptr %.0166, null
  br i1 %.not193, label %330, label %329

329:                                              ; preds = %328
  call void @vl_free(ptr noundef nonnull %.0166) #9
  br label %330

330:                                              ; preds = %329, %328
  %.not194 = icmp eq ptr %.0167, null
  br i1 %.not194, label %332, label %331

331:                                              ; preds = %330
  call void @vl_free(ptr noundef nonnull %.0167) #9
  br label %332

332:                                              ; preds = %331, %330
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %3) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %2) #9
  ret void
}

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

declare ptr @vl_malloc(i64 noundef) local_unnamed_addr #5

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

declare double @vl_scalespace_get_level_sigma(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare hidden void @_vl_dog_response(ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @_vl_harris_response(ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef, double noundef, double noundef, double noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @_vl_det_hessian_response(ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef, double noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @vl_covdet_extract_laplacian_scales(ptr noundef) local_unnamed_addr #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #7

declare double @exp2(double) local_unnamed_addr

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !7, i64 0}
!6 = !{!"_VlCovDet", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !12, i64 48, !12, i64 56, !11, i64 64, !12, i64 72, !7, i64 80, !12, i64 88, !12, i64 96, !7, i64 104, !12, i64 112, !10, i64 120, !8, i64 128, !8, i64 192, !10, i64 256, !8, i64 260, !8, i64 6984, !8, i64 13708, !8, i64 20432, !8, i64 27156, !8, i64 31512, !8, i64 75072}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!"long long", !8, i64 0}
!13 = !{!6, !12, i64 88}
!14 = !{i64 0, i64 8, !15, i64 8, i64 8, !15, i64 16, i64 8, !15, i64 24, i64 8, !15, i64 32, i64 8, !15, i64 40, i64 8, !15, i64 48, i64 8, !15, i64 56, i64 8, !16, i64 64, i64 8, !16}
!15 = !{!12, !12, i64 0}
!16 = !{!11, !11, i64 0}
!17 = !{!6, !10, i64 16}
!18 = !{!19, !12, i64 48}
!19 = !{!"_VlScaleSpaceGeometry", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !11, i64 56, !11, i64 64}
!20 = !{!6, !7, i64 8}
!21 = !{!19, !12, i64 16}
!22 = !{!23, !12, i64 0}
!23 = !{!"_VlScaleSpaceOctaveGeometry", !12, i64 0, !12, i64 8, !11, i64 16}
!24 = !{!23, !12, i64 8}
!25 = !{!19, !12, i64 24}
!26 = !{!19, !12, i64 40}
!27 = !{!23, !11, i64 16}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = !{!7, !7, i64 0}
!32 = !{!6, !11, i64 24}
!33 = !{!34, !35, i64 36}
!34 = !{!"_VlCovDetExtremum3", !12, i64 0, !12, i64 8, !12, i64 16, !35, i64 24, !35, i64 28, !35, i64 32, !35, i64 36, !35, i64 40}
!35 = !{!"float", !8, i64 0}
!36 = !{!34, !35, i64 40}
!37 = !{!6, !11, i64 32}
!38 = !{!19, !11, i64 56}
!39 = !{!34, !35, i64 32}
!40 = !{!19, !12, i64 32}
!41 = !{!35, !35, i64 0}
!42 = !{!43, !35, i64 8}
!43 = !{!"_VlCovDetFeature", !44, i64 0, !35, i64 24, !35, i64 28, !35, i64 32, !35, i64 36}
!44 = !{!"_VlFrameOrientedEllipse", !35, i64 0, !35, i64 4, !35, i64 8, !35, i64 12, !35, i64 16, !35, i64 20}
!45 = !{!43, !35, i64 20}
!46 = distinct !{!46, !29}
!47 = !{!48, !35, i64 24}
!48 = !{!"_VlCovDetExtremum2", !12, i64 0, !12, i64 8, !35, i64 16, !35, i64 20, !35, i64 24, !35, i64 28}
!49 = !{!48, !35, i64 28}
!50 = distinct !{!50, !29}
!51 = distinct !{!51, !29}
!52 = distinct !{!52, !29}
!53 = !{!6, !11, i64 64}
!54 = !{!6, !12, i64 72}
!55 = !{!6, !7, i64 80}
!56 = !{!43, !35, i64 0}
!57 = !{!43, !35, i64 4}
!58 = !{!43, !35, i64 24}
!59 = distinct !{!59, !29}
!60 = distinct !{!60, !29}
!61 = distinct !{!61, !29}


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