; 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._VlFrameOrientedEllipse = type { float, float, 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.12 = external hidden unnamed_addr constant [5 x i8], align 1
@__PRETTY_FUNCTION__.vl_covdet_extract_laplacian_scales_for_frame = external hidden unnamed_addr constant [123 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

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

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_covdet_extract_patch_helper(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, double noundef, double noundef, ptr noundef, ptr noundef, double noundef, double noundef) #5

declare void @vl_svd2(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
define dso_local ptr @vl_covdet_extract_laplacian_scales_for_frame(ptr noundef %0, ptr noundef %1, ptr noundef byval(%struct._VlFrameOrientedEllipse) align 8 %2) #5 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca double, align 8
  %14 = alloca [10 x double], align 16
  %15 = alloca double, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca [4 x double], align 16
  %19 = alloca [2 x double], align 16
  %20 = alloca [4 x double], align 16
  %21 = alloca [4 x double], align 16
  %22 = alloca [4 x double], align 16
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i32, align 4
  %26 = alloca i64, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %37 = call double @sqrt(double noundef 2.000000e+00) #7
  %38 = fdiv double 1.000000e+00, %37
  store double %38, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %39 = load double, ptr %8, align 8, !tbaa !9
  %40 = fmul double 5.000000e-01, %39
  store double %40, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  store i64 16, ptr %11, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  store i64 33, ptr %12, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %41 = load double, ptr %9, align 8, !tbaa !9
  %42 = fmul double %41, 1.600000e+01
  store double %42, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 80, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  store double 1.000000e+00, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #7
  %43 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %2, i32 0, i32 2
  %44 = load float, ptr %43, align 8, !tbaa !13
  %45 = fpext float %44 to double
  store double %45, ptr %18, align 8, !tbaa !9
  %46 = getelementptr inbounds double, ptr %18, i64 1
  %47 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %2, i32 0, i32 4
  %48 = load float, ptr %47, align 8, !tbaa !16
  %49 = fpext float %48 to double
  store double %49, ptr %46, align 8, !tbaa !9
  %50 = getelementptr inbounds double, ptr %18, i64 2
  %51 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %2, i32 0, i32 3
  %52 = load float, ptr %51, align 4, !tbaa !17
  %53 = fpext float %52 to double
  store double %53, ptr %50, align 8, !tbaa !9
  %54 = getelementptr inbounds double, ptr %18, i64 3
  %55 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %2, i32 0, i32 5
  %56 = load float, ptr %55, align 4, !tbaa !18
  %57 = fpext float %56 to double
  store double %57, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #7
  %58 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %2, i32 0, i32 0
  %59 = load float, ptr %58, align 8, !tbaa !19
  %60 = fpext float %59 to double
  store double %60, ptr %19, align 8, !tbaa !9
  %61 = getelementptr inbounds double, ptr %19, i64 1
  %62 = getelementptr inbounds %struct._VlFrameOrientedEllipse, ptr %2, i32 0, i32 1
  %63 = load float, ptr %62, align 4, !tbaa !20
  %64 = fpext float %63 to double
  store double %64, ptr %61, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = icmp ne ptr %65, null
  br i1 %66, label %67, label %68

67:                                               ; preds = %3
  br label %69

68:                                               ; preds = %3
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.1, i32 noundef 2934, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_extract_laplacian_scales_for_frame) #8
  unreachable

69:                                               ; preds = %67
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = icmp ne ptr %70, null
  br i1 %71, label %72, label %73

72:                                               ; preds = %69
  br label %74

73:                                               ; preds = %69
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.1, i32 noundef 2935, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_extract_laplacian_scales_for_frame) #8
  unreachable

74:                                               ; preds = %72
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  store i64 0, ptr %75, align 8, !tbaa !11
  %76 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 0
  %77 = getelementptr inbounds [4 x double], ptr %21, i64 0, i64 0
  %78 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 0
  %79 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 0
  call void @vl_svd2(ptr noundef %76, ptr noundef %77, ptr noundef %78, ptr noundef %79)
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct._VlCovDet, ptr %81, i32 0, i32 23
  %83 = getelementptr inbounds [1089 x float], ptr %82, i64 0, i64 0
  %84 = load double, ptr %13, align 8, !tbaa !9
  %85 = load double, ptr %8, align 8, !tbaa !9
  %86 = getelementptr inbounds [4 x double], ptr %18, i64 0, i64 0
  %87 = getelementptr inbounds [2 x double], ptr %19, i64 0, i64 0
  %88 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 0
  %89 = load double, ptr %88, align 16, !tbaa !9
  %90 = getelementptr inbounds [4 x double], ptr %20, i64 0, i64 3
  %91 = load double, ptr %90, align 8, !tbaa !9
  %92 = call i32 @vl_covdet_extract_patch_helper(ptr noundef %80, ptr noundef %23, ptr noundef %24, ptr noundef %83, i64 noundef 16, double noundef %84, double noundef %85, ptr noundef %86, ptr noundef %87, double noundef %89, double noundef %91)
  store i32 %92, ptr %7, align 4, !tbaa !21
  %93 = load i32, ptr %7, align 4, !tbaa !21
  %94 = icmp ne i32 %93, 0
  br i1 %94, label %95, label %96

95:                                               ; preds = %74
  store ptr null, ptr %4, align 8
  store i32 1, ptr %25, align 4
  br label %270

96:                                               ; preds = %74
  %97 = load double, ptr %23, align 8, !tbaa !9
  %98 = load double, ptr %24, align 8, !tbaa !9
  %99 = fcmp oeq double %97, %98
  br i1 %99, label %100, label %102

100:                                              ; preds = %96
  %101 = load double, ptr %23, align 8, !tbaa !9
  store double %101, ptr %10, align 8, !tbaa !9
  br label %107

102:                                              ; preds = %96
  %103 = load double, ptr %23, align 8, !tbaa !9
  %104 = load double, ptr %24, align 8, !tbaa !9
  %105 = fmul double %103, %104
  %106 = call double @sqrt(double noundef %105) #7
  store double %106, ptr %10, align 8, !tbaa !9
  br label %107

107:                                              ; preds = %102, %100
  %108 = load ptr, ptr %5, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._VlCovDet, ptr %108, i32 0, i32 24
  %110 = getelementptr inbounds [10890 x float], ptr %109, i64 0, i64 0
  store ptr %110, ptr %16, align 8, !tbaa !5
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %111

111:                                              ; preds = %158, %107
  %112 = load i64, ptr %17, align 8, !tbaa !11
  %113 = icmp slt i64 %112, 10
  br i1 %113, label %114, label %161

114:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store double 0.000000e+00, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %115 = load i64, ptr %17, align 8, !tbaa !11
  %116 = sitofp i64 %115 to double
  %117 = fdiv double %116, 9.000000e+00
  %118 = fadd double -5.000000e-01, %117
  %119 = call double @pow(double noundef 2.000000e+00, double noundef %118) #7
  store double %119, ptr %28, align 8, !tbaa !9
  %120 = load double, ptr %28, align 8, !tbaa !9
  %121 = load double, ptr %28, align 8, !tbaa !9
  %122 = load double, ptr %8, align 8, !tbaa !9
  %123 = load double, ptr %8, align 8, !tbaa !9
  %124 = fmul double %122, %123
  %125 = fneg double %124
  %126 = call double @llvm.fmuladd.f64(double %120, double %121, double %125)
  %127 = load double, ptr %10, align 8, !tbaa !9
  %128 = load double, ptr %10, align 8, !tbaa !9
  %129 = call double @llvm.fmuladd.f64(double %127, double %128, double %126)
  %130 = call double @sqrt(double noundef %129) #7
  store double %130, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %26, align 8, !tbaa !11
  br label %131

131:                                              ; preds = %147, %114
  %132 = load i64, ptr %26, align 8, !tbaa !11
  %133 = icmp slt i64 %132, 1089
  br i1 %133, label %134, label %150

134:                                              ; preds = %131
  %135 = load ptr, ptr %16, align 8, !tbaa !5
  %136 = getelementptr inbounds float, ptr %135, i32 1
  store ptr %136, ptr %16, align 8, !tbaa !5
  %137 = load float, ptr %135, align 4, !tbaa !23
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct._VlCovDet, ptr %138, i32 0, i32 23
  %140 = load i64, ptr %26, align 8, !tbaa !11
  %141 = getelementptr inbounds [1089 x float], ptr %139, i64 0, i64 %140
  %142 = load float, ptr %141, align 4, !tbaa !23
  %143 = fmul float %137, %142
  %144 = fpext float %143 to double
  %145 = load double, ptr %27, align 8, !tbaa !9
  %146 = fadd double %145, %144
  store double %146, ptr %27, align 8, !tbaa !9
  br label %147

147:                                              ; preds = %134
  %148 = load i64, ptr %26, align 8, !tbaa !11
  %149 = add nsw i64 %148, 1
  store i64 %149, ptr %26, align 8, !tbaa !11
  br label %131, !llvm.loop !24

150:                                              ; preds = %131
  %151 = load double, ptr %27, align 8, !tbaa !9
  %152 = load double, ptr %28, align 8, !tbaa !9
  %153 = fmul double %151, %152
  %154 = load double, ptr %28, align 8, !tbaa !9
  %155 = fmul double %153, %154
  %156 = load i64, ptr %17, align 8, !tbaa !11
  %157 = getelementptr inbounds [10 x double], ptr %14, i64 0, i64 %156
  store double %155, ptr %157, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %158

158:                                              ; preds = %150
  %159 = load i64, ptr %17, align 8, !tbaa !11
  %160 = add nsw i64 %159, 1
  store i64 %160, ptr %17, align 8, !tbaa !11
  br label %111, !llvm.loop !26

161:                                              ; preds = %111
  store i64 1, ptr %17, align 8, !tbaa !11
  br label %162

162:                                              ; preds = %263, %161
  %163 = load i64, ptr %17, align 8, !tbaa !11
  %164 = icmp slt i64 %163, 9
  br i1 %164, label %165, label %266

165:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %166 = load i64, ptr %17, align 8, !tbaa !11
  %167 = sub nsw i64 %166, 1
  %168 = getelementptr inbounds [10 x double], ptr %14, i64 0, i64 %167
  %169 = load double, ptr %168, align 8, !tbaa !9
  store double %169, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %170 = load i64, ptr %17, align 8, !tbaa !11
  %171 = getelementptr inbounds [10 x double], ptr %14, i64 0, i64 %170
  %172 = load double, ptr %171, align 8, !tbaa !9
  store double %172, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %173 = load i64, ptr %17, align 8, !tbaa !11
  %174 = add nsw i64 %173, 1
  %175 = getelementptr inbounds [10 x double], ptr %14, i64 0, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !9
  store double %176, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct._VlCovDet, ptr %177, i32 0, i32 5
  %179 = load double, ptr %178, align 8, !tbaa !27
  store double %179, ptr %32, align 8, !tbaa !9
  %180 = load double, ptr %30, align 8, !tbaa !9
  %181 = load double, ptr %29, align 8, !tbaa !9
  %182 = fcmp ogt double %180, %181
  br i1 %182, label %183, label %187

183:                                              ; preds = %165
  %184 = load double, ptr %30, align 8, !tbaa !9
  %185 = load double, ptr %31, align 8, !tbaa !9
  %186 = fcmp ogt double %184, %185
  br i1 %186, label %195, label %187

187:                                              ; preds = %183, %165
  %188 = load double, ptr %30, align 8, !tbaa !9
  %189 = load double, ptr %29, align 8, !tbaa !9
  %190 = fcmp olt double %188, %189
  br i1 %190, label %191, label %262

191:                                              ; preds = %187
  %192 = load double, ptr %30, align 8, !tbaa !9
  %193 = load double, ptr %31, align 8, !tbaa !9
  %194 = fcmp olt double %192, %193
  br i1 %194, label %195, label %262

195:                                              ; preds = %191, %183
  %196 = load double, ptr %30, align 8, !tbaa !9
  %197 = call double @vl_abs_d(double noundef %196)
  %198 = load double, ptr %32, align 8, !tbaa !9
  %199 = fcmp oge double %197, %198
  br i1 %199, label %200, label %262

200:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %201 = load double, ptr %31, align 8, !tbaa !9
  %202 = load double, ptr %29, align 8, !tbaa !9
  %203 = fsub double %201, %202
  %204 = fmul double -5.000000e-01, %203
  %205 = load double, ptr %31, align 8, !tbaa !9
  %206 = load double, ptr %29, align 8, !tbaa !9
  %207 = fadd double %205, %206
  %208 = load double, ptr %30, align 8, !tbaa !9
  %209 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %208, double %207)
  %210 = fdiv double %204, %209
  store double %210, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %211 = load i64, ptr %17, align 8, !tbaa !11
  %212 = sitofp i64 %211 to double
  %213 = load double, ptr %33, align 8, !tbaa !9
  %214 = fadd double %212, %213
  store double %214, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %215 = load double, ptr %34, align 8, !tbaa !9
  %216 = fdiv double %215, 9.000000e+00
  %217 = fadd double -5.000000e-01, %216
  %218 = call double @pow(double noundef 2.000000e+00, double noundef %217) #7
  store double %218, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %219 = load double, ptr %35, align 8, !tbaa !9
  %220 = load double, ptr %35, align 8, !tbaa !9
  %221 = load double, ptr %8, align 8, !tbaa !9
  %222 = load double, ptr %8, align 8, !tbaa !9
  %223 = fmul double %221, %222
  %224 = fneg double %223
  %225 = call double @llvm.fmuladd.f64(double %219, double %220, double %224)
  %226 = load double, ptr %10, align 8, !tbaa !9
  %227 = load double, ptr %10, align 8, !tbaa !9
  %228 = call double @llvm.fmuladd.f64(double %226, double %227, double %225)
  %229 = call double @sqrt(double noundef %228) #7
  store double %229, ptr %35, align 8, !tbaa !9
  %230 = load double, ptr %35, align 8, !tbaa !9
  %231 = fdiv double %230, 1.000000e+00
  store double %231, ptr %36, align 8, !tbaa !9
  %232 = load ptr, ptr %6, align 8, !tbaa !5
  %233 = load i64, ptr %232, align 8, !tbaa !11
  %234 = icmp ult i64 %233, 4
  br i1 %234, label %235, label %261

235:                                              ; preds = %200
  %236 = load double, ptr %36, align 8, !tbaa !9
  %237 = load double, ptr %15, align 8, !tbaa !9
  %238 = fmul double %236, %237
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct._VlCovDet, ptr %239, i32 0, i32 17
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = load i64, ptr %241, align 8, !tbaa !11
  %243 = getelementptr inbounds [4 x %struct._VlCovDetFeatureLaplacianScale], ptr %240, i64 0, i64 %242
  %244 = getelementptr inbounds %struct._VlCovDetFeatureLaplacianScale, ptr %243, i32 0, i32 0
  store double %238, ptr %244, align 8, !tbaa !29
  %245 = load double, ptr %30, align 8, !tbaa !9
  %246 = load double, ptr %31, align 8, !tbaa !9
  %247 = load double, ptr %29, align 8, !tbaa !9
  %248 = fsub double %246, %247
  %249 = fmul double 5.000000e-01, %248
  %250 = load double, ptr %33, align 8, !tbaa !9
  %251 = call double @llvm.fmuladd.f64(double %249, double %250, double %245)
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct._VlCovDet, ptr %252, i32 0, i32 17
  %254 = load ptr, ptr %6, align 8, !tbaa !5
  %255 = load i64, ptr %254, align 8, !tbaa !11
  %256 = getelementptr inbounds [4 x %struct._VlCovDetFeatureLaplacianScale], ptr %253, i64 0, i64 %255
  %257 = getelementptr inbounds %struct._VlCovDetFeatureLaplacianScale, ptr %256, i32 0, i32 1
  store double %251, ptr %257, align 8, !tbaa !31
  %258 = load ptr, ptr %6, align 8, !tbaa !5
  %259 = load i64, ptr %258, align 8, !tbaa !11
  %260 = add i64 %259, 1
  store i64 %260, ptr %258, align 8, !tbaa !11
  br label %261

261:                                              ; preds = %235, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %262

262:                                              ; preds = %261, %195, %191, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  br label %263

263:                                              ; preds = %262
  %264 = load i64, ptr %17, align 8, !tbaa !11
  %265 = add nsw i64 %264, 1
  store i64 %265, ptr %17, align 8, !tbaa !11
  br label %162, !llvm.loop !32

266:                                              ; preds = %162
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct._VlCovDet, ptr %267, i32 0, i32 17
  %269 = getelementptr inbounds [4 x %struct._VlCovDetFeatureLaplacianScale], ptr %268, i64 0, i64 0
  store ptr %269, ptr %4, align 8
  store i32 1, ptr %25, align 4
  br label %270

270:                                              ; preds = %266, %95
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  %271 = load ptr, ptr %4, align 8
  ret ptr %271
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!14, !15, i64 8}
!14 = !{!"_VlFrameOrientedEllipse", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20}
!15 = !{!"float", !7, i64 0}
!16 = !{!14, !15, i64 16}
!17 = !{!14, !15, i64 12}
!18 = !{!14, !15, i64 20}
!19 = !{!14, !15, i64 0}
!20 = !{!14, !15, i64 4}
!21 = !{!22, !22, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!15, !15, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!28, !10, i64 40}
!28 = !{!"_VlCovDet", !6, i64 0, !6, i64 8, !22, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !12, i64 48, !12, i64 56, !10, i64 64, !12, i64 72, !6, i64 80, !12, i64 88, !12, i64 96, !6, i64 104, !12, i64 112, !22, i64 120, !7, i64 128, !7, i64 192, !22, i64 256, !7, i64 260, !7, i64 6984, !7, i64 13708, !7, i64 20432, !7, i64 27156, !7, i64 31512, !7, i64 75072}
!29 = !{!30, !10, i64 0}
!30 = !{!"_VlCovDetFeatureLaplacianScale", !10, i64 0, !10, i64 8}
!31 = !{!30, !10, i64 8}
!32 = distinct !{!32, !25}


; 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._VlFrameOrientedEllipse = type { float, float, float, float, float, float }
%struct._VlCovDetFeatureLaplacianScale = type { double, double }

@.str.1 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@__PRETTY_FUNCTION__.vl_covdet_extract_laplacian_scales_for_frame = external hidden unnamed_addr constant [123 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @vl_covdet_extract_patch_helper(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, double noundef, double noundef, ptr noundef, ptr noundef, double noundef, double noundef) local_unnamed_addr #5

declare void @vl_svd2(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
define dso_local ptr @vl_covdet_extract_laplacian_scales_for_frame(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly byval(%struct._VlFrameOrientedEllipse) align 8 %2) local_unnamed_addr #5 {
  %4 = alloca [10 x double], align 16
  %5 = alloca [4 x double], align 16
  %6 = alloca [2 x double], align 16
  %7 = alloca [4 x double], align 16
  %8 = alloca [4 x double], align 16
  %9 = alloca [4 x double], align 16
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #7
  %12 = getelementptr inbounds i8, ptr %2, i64 8
  %13 = load <4 x float>, ptr %12, align 8
  %14 = shufflevector <4 x float> %13, <4 x float> poison, <2 x i32> <i32 0, i32 poison>
  %15 = getelementptr inbounds i8, ptr %2, i64 16
  %16 = load float, ptr %15, align 8, !tbaa !5
  %17 = insertelement <2 x float> %14, float %16, i64 1
  %18 = fpext <2 x float> %17 to <2 x double>
  store <2 x double> %18, ptr %5, align 16, !tbaa !10
  %19 = getelementptr inbounds i8, ptr %5, i64 16
  %20 = load <4 x float>, ptr %2, align 8
  %21 = shufflevector <4 x float> %20, <4 x float> poison, <2 x i32> <i32 3, i32 poison>
  %22 = getelementptr inbounds i8, ptr %2, i64 20
  %23 = load float, ptr %22, align 4, !tbaa !12
  %24 = insertelement <2 x float> %21, float %23, i64 1
  %25 = fpext <2 x float> %24 to <2 x double>
  store <2 x double> %25, ptr %19, align 16, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #7
  %26 = load <2 x float>, ptr %2, align 8, !tbaa !13
  %27 = fpext <2 x float> %26 to <2 x double>
  store <2 x double> %27, ptr %6, align 16, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %28, label %29

28:                                               ; preds = %3
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.1, i32 noundef 2934, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_extract_laplacian_scales_for_frame) #8
  unreachable

29:                                               ; preds = %3
  %.not88 = icmp eq ptr %1, null
  br i1 %.not88, label %30, label %31

30:                                               ; preds = %29
  tail call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.1, i32 noundef 2935, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_extract_laplacian_scales_for_frame) #8
  unreachable

31:                                               ; preds = %29
  store i64 0, ptr %1, align 8, !tbaa !14
  call void @vl_svd2(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %5) #7
  %32 = getelementptr inbounds i8, ptr %0, i64 27156
  %33 = load double, ptr %7, align 16, !tbaa !10
  %34 = getelementptr inbounds i8, ptr %7, i64 24
  %35 = load double, ptr %34, align 8, !tbaa !10
  %36 = call i32 @vl_covdet_extract_patch_helper(ptr noundef nonnull %0, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %32, i64 noundef 16, double noundef 0x4016A09E667F3BCC, double noundef 0x3FE6A09E667F3BCC, ptr noundef nonnull %5, ptr noundef nonnull %6, double noundef %33, double noundef %35)
  %.not89 = icmp eq i32 %36, 0
  br i1 %.not89, label %37, label %.loopexit

37:                                               ; preds = %31
  %38 = load double, ptr %10, align 8, !tbaa !10
  %39 = load double, ptr %11, align 8, !tbaa !10
  %40 = fcmp oeq double %38, %39
  br i1 %40, label %44, label %41

41:                                               ; preds = %37
  %42 = fmul double %38, %39
  %43 = call double @sqrt(double noundef %42) #7
  br label %44

44:                                               ; preds = %37, %41
  %.074 = phi double [ %43, %41 ], [ %38, %37 ]
  %45 = getelementptr inbounds i8, ptr %0, i64 31512
  %exp290 = call double @exp2(double -5.000000e-01) #7
  %46 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3CA9D9F7DFAF1114)
  %47 = call double @sqrt(double noundef %46) #7
  br label %48

48:                                               ; preds = %48, %44
  %.194 = phi ptr [ %45, %44 ], [ %65, %48 ]
  %.07893 = phi i64 [ 0, %44 ], [ %72, %48 ]
  %.07992 = phi double [ 0.000000e+00, %44 ], [ %71, %48 ]
  %49 = getelementptr inbounds i8, ptr %.194, i64 4
  %50 = load float, ptr %.194, align 4, !tbaa !13
  %51 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893
  %52 = load float, ptr %51, align 4, !tbaa !13
  %53 = fmul float %50, %52
  %54 = fpext float %53 to double
  %55 = fadd double %.07992, %54
  %56 = add nuw nsw i64 %.07893, 1
  %57 = getelementptr inbounds i8, ptr %.194, i64 8
  %58 = load float, ptr %49, align 4, !tbaa !13
  %59 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %56
  %60 = load float, ptr %59, align 4, !tbaa !13
  %61 = fmul float %58, %60
  %62 = fpext float %61 to double
  %63 = fadd double %55, %62
  %64 = add nuw nsw i64 %.07893, 2
  %65 = getelementptr inbounds i8, ptr %.194, i64 12
  %66 = load float, ptr %57, align 4, !tbaa !13
  %67 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %64
  %68 = load float, ptr %67, align 4, !tbaa !13
  %69 = fmul float %66, %68
  %70 = fpext float %69 to double
  %71 = fadd double %63, %70
  %72 = add nuw nsw i64 %.07893, 3
  %exitcond.not.2 = icmp eq i64 %72, 1089
  br i1 %exitcond.not.2, label %73, label %48, !llvm.loop !16

73:                                               ; preds = %48
  %scevgep = getelementptr i8, ptr %0, i64 35868
  %74 = fmul double %47, %71
  %75 = fmul double %47, %74
  store double %75, ptr %4, align 16, !tbaa !10
  %exp290.1 = call double @exp2(double 0xBFD8E38E38E38E39) #7
  %76 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FB550D2D56827B4)
  %77 = call double @sqrt(double noundef %76) #7
  br label %78

78:                                               ; preds = %78, %73
  %.194.1 = phi ptr [ %scevgep, %73 ], [ %95, %78 ]
  %.07893.1 = phi i64 [ 0, %73 ], [ %102, %78 ]
  %.07992.1 = phi double [ 0.000000e+00, %73 ], [ %101, %78 ]
  %79 = getelementptr inbounds i8, ptr %.194.1, i64 4
  %80 = load float, ptr %.194.1, align 4, !tbaa !13
  %81 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.1
  %82 = load float, ptr %81, align 4, !tbaa !13
  %83 = fmul float %80, %82
  %84 = fpext float %83 to double
  %85 = fadd double %.07992.1, %84
  %86 = add nuw nsw i64 %.07893.1, 1
  %87 = getelementptr inbounds i8, ptr %.194.1, i64 8
  %88 = load float, ptr %79, align 4, !tbaa !13
  %89 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %86
  %90 = load float, ptr %89, align 4, !tbaa !13
  %91 = fmul float %88, %90
  %92 = fpext float %91 to double
  %93 = fadd double %85, %92
  %94 = add nuw nsw i64 %.07893.1, 2
  %95 = getelementptr inbounds i8, ptr %.194.1, i64 12
  %96 = load float, ptr %87, align 4, !tbaa !13
  %97 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %94
  %98 = load float, ptr %97, align 4, !tbaa !13
  %99 = fmul float %96, %98
  %100 = fpext float %99 to double
  %101 = fadd double %93, %100
  %102 = add nuw nsw i64 %.07893.1, 3
  %exitcond.1.not.2 = icmp eq i64 %102, 1089
  br i1 %exitcond.1.not.2, label %103, label %78, !llvm.loop !16

103:                                              ; preds = %78
  %scevgep.1 = getelementptr i8, ptr %0, i64 40224
  %104 = fmul double %77, %101
  %105 = fmul double %77, %104
  %106 = getelementptr inbounds i8, ptr %4, i64 8
  store double %105, ptr %106, align 8, !tbaa !10
  %exp290.2 = call double @exp2(double 0xBFD1C71C71C71C72) #7
  %107 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FC7172EF0DE4216)
  %108 = call double @sqrt(double noundef %107) #7
  br label %109

109:                                              ; preds = %109, %103
  %.194.2 = phi ptr [ %scevgep.1, %103 ], [ %126, %109 ]
  %.07893.2 = phi i64 [ 0, %103 ], [ %133, %109 ]
  %.07992.2 = phi double [ 0.000000e+00, %103 ], [ %132, %109 ]
  %110 = getelementptr inbounds i8, ptr %.194.2, i64 4
  %111 = load float, ptr %.194.2, align 4, !tbaa !13
  %112 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.2
  %113 = load float, ptr %112, align 4, !tbaa !13
  %114 = fmul float %111, %113
  %115 = fpext float %114 to double
  %116 = fadd double %.07992.2, %115
  %117 = add nuw nsw i64 %.07893.2, 1
  %118 = getelementptr inbounds i8, ptr %.194.2, i64 8
  %119 = load float, ptr %110, align 4, !tbaa !13
  %120 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %117
  %121 = load float, ptr %120, align 4, !tbaa !13
  %122 = fmul float %119, %121
  %123 = fpext float %122 to double
  %124 = fadd double %116, %123
  %125 = add nuw nsw i64 %.07893.2, 2
  %126 = getelementptr inbounds i8, ptr %.194.2, i64 12
  %127 = load float, ptr %118, align 4, !tbaa !13
  %128 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %125
  %129 = load float, ptr %128, align 4, !tbaa !13
  %130 = fmul float %127, %129
  %131 = fpext float %130 to double
  %132 = fadd double %124, %131
  %133 = add nuw nsw i64 %.07893.2, 3
  %exitcond.2.not.2 = icmp eq i64 %133, 1089
  br i1 %exitcond.2.not.2, label %134, label %109, !llvm.loop !16

134:                                              ; preds = %109
  %scevgep.2 = getelementptr i8, ptr %0, i64 44580
  %135 = fmul double %108, %132
  %136 = fmul double %108, %135
  %137 = getelementptr inbounds i8, ptr %4, i64 16
  store double %136, ptr %137, align 16, !tbaa !10
  %exp290.3 = call double @exp2(double 0xBFC5555555555556) #7
  %138 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FD2CBFD4A7ADC7A)
  %139 = call double @sqrt(double noundef %138) #7
  br label %140

140:                                              ; preds = %140, %134
  %.194.3 = phi ptr [ %scevgep.2, %134 ], [ %157, %140 ]
  %.07893.3 = phi i64 [ 0, %134 ], [ %164, %140 ]
  %.07992.3 = phi double [ 0.000000e+00, %134 ], [ %163, %140 ]
  %141 = getelementptr inbounds i8, ptr %.194.3, i64 4
  %142 = load float, ptr %.194.3, align 4, !tbaa !13
  %143 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.3
  %144 = load float, ptr %143, align 4, !tbaa !13
  %145 = fmul float %142, %144
  %146 = fpext float %145 to double
  %147 = fadd double %.07992.3, %146
  %148 = add nuw nsw i64 %.07893.3, 1
  %149 = getelementptr inbounds i8, ptr %.194.3, i64 8
  %150 = load float, ptr %141, align 4, !tbaa !13
  %151 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %148
  %152 = load float, ptr %151, align 4, !tbaa !13
  %153 = fmul float %150, %152
  %154 = fpext float %153 to double
  %155 = fadd double %147, %154
  %156 = add nuw nsw i64 %.07893.3, 2
  %157 = getelementptr inbounds i8, ptr %.194.3, i64 12
  %158 = load float, ptr %149, align 4, !tbaa !13
  %159 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %156
  %160 = load float, ptr %159, align 4, !tbaa !13
  %161 = fmul float %158, %160
  %162 = fpext float %161 to double
  %163 = fadd double %155, %162
  %164 = add nuw nsw i64 %.07893.3, 3
  %exitcond.3.not.2 = icmp eq i64 %164, 1089
  br i1 %exitcond.3.not.2, label %165, label %140, !llvm.loop !16

165:                                              ; preds = %140
  %scevgep.3 = getelementptr i8, ptr %0, i64 48936
  %166 = fmul double %139, %163
  %167 = fmul double %139, %166
  %168 = getelementptr inbounds i8, ptr %4, i64 24
  store double %167, ptr %168, align 8, !tbaa !10
  %exp290.4 = call double @exp2(double 0xBFAC71C71C71C720) #7
  %169 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FDB4188025DE89C)
  %170 = call double @sqrt(double noundef %169) #7
  br label %171

171:                                              ; preds = %171, %165
  %.194.4 = phi ptr [ %scevgep.3, %165 ], [ %188, %171 ]
  %.07893.4 = phi i64 [ 0, %165 ], [ %195, %171 ]
  %.07992.4 = phi double [ 0.000000e+00, %165 ], [ %194, %171 ]
  %172 = getelementptr inbounds i8, ptr %.194.4, i64 4
  %173 = load float, ptr %.194.4, align 4, !tbaa !13
  %174 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.4
  %175 = load float, ptr %174, align 4, !tbaa !13
  %176 = fmul float %173, %175
  %177 = fpext float %176 to double
  %178 = fadd double %.07992.4, %177
  %179 = add nuw nsw i64 %.07893.4, 1
  %180 = getelementptr inbounds i8, ptr %.194.4, i64 8
  %181 = load float, ptr %172, align 4, !tbaa !13
  %182 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %179
  %183 = load float, ptr %182, align 4, !tbaa !13
  %184 = fmul float %181, %183
  %185 = fpext float %184 to double
  %186 = fadd double %178, %185
  %187 = add nuw nsw i64 %.07893.4, 2
  %188 = getelementptr inbounds i8, ptr %.194.4, i64 12
  %189 = load float, ptr %180, align 4, !tbaa !13
  %190 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %187
  %191 = load float, ptr %190, align 4, !tbaa !13
  %192 = fmul float %189, %191
  %193 = fpext float %192 to double
  %194 = fadd double %186, %193
  %195 = add nuw nsw i64 %.07893.4, 3
  %exitcond.4.not.2 = icmp eq i64 %195, 1089
  br i1 %exitcond.4.not.2, label %196, label %171, !llvm.loop !16

196:                                              ; preds = %171
  %scevgep.4 = getelementptr i8, ptr %0, i64 53292
  %197 = fmul double %170, %194
  %198 = fmul double %170, %197
  %199 = getelementptr inbounds i8, ptr %4, i64 32
  store double %198, ptr %199, align 16, !tbaa !10
  %exp290.5 = call double @exp2(double 0x3FAC71C71C71C720) #7
  %200 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FE28FD9710899A3)
  %201 = call double @sqrt(double noundef %200) #7
  br label %202

202:                                              ; preds = %202, %196
  %.194.5 = phi ptr [ %scevgep.4, %196 ], [ %219, %202 ]
  %.07893.5 = phi i64 [ 0, %196 ], [ %226, %202 ]
  %.07992.5 = phi double [ 0.000000e+00, %196 ], [ %225, %202 ]
  %203 = getelementptr inbounds i8, ptr %.194.5, i64 4
  %204 = load float, ptr %.194.5, align 4, !tbaa !13
  %205 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.5
  %206 = load float, ptr %205, align 4, !tbaa !13
  %207 = fmul float %204, %206
  %208 = fpext float %207 to double
  %209 = fadd double %.07992.5, %208
  %210 = add nuw nsw i64 %.07893.5, 1
  %211 = getelementptr inbounds i8, ptr %.194.5, i64 8
  %212 = load float, ptr %203, align 4, !tbaa !13
  %213 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %210
  %214 = load float, ptr %213, align 4, !tbaa !13
  %215 = fmul float %212, %214
  %216 = fpext float %215 to double
  %217 = fadd double %209, %216
  %218 = add nuw nsw i64 %.07893.5, 2
  %219 = getelementptr inbounds i8, ptr %.194.5, i64 12
  %220 = load float, ptr %211, align 4, !tbaa !13
  %221 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %218
  %222 = load float, ptr %221, align 4, !tbaa !13
  %223 = fmul float %220, %222
  %224 = fpext float %223 to double
  %225 = fadd double %217, %224
  %226 = add nuw nsw i64 %.07893.5, 3
  %exitcond.5.not.2 = icmp eq i64 %226, 1089
  br i1 %exitcond.5.not.2, label %227, label %202, !llvm.loop !16

227:                                              ; preds = %202
  %scevgep.5 = getelementptr i8, ptr %0, i64 57648
  %228 = fmul double %201, %225
  %229 = fmul double %201, %228
  %230 = getelementptr inbounds i8, ptr %4, i64 40
  store double %229, ptr %230, align 8, !tbaa !10
  %exp290.6 = call double @exp2(double 0x3FC5555555555554) #7
  %231 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FE85145F31AE517)
  %232 = call double @sqrt(double noundef %231) #7
  br label %233

233:                                              ; preds = %233, %227
  %.194.6 = phi ptr [ %scevgep.5, %227 ], [ %250, %233 ]
  %.07893.6 = phi i64 [ 0, %227 ], [ %257, %233 ]
  %.07992.6 = phi double [ 0.000000e+00, %227 ], [ %256, %233 ]
  %234 = getelementptr inbounds i8, ptr %.194.6, i64 4
  %235 = load float, ptr %.194.6, align 4, !tbaa !13
  %236 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.6
  %237 = load float, ptr %236, align 4, !tbaa !13
  %238 = fmul float %235, %237
  %239 = fpext float %238 to double
  %240 = fadd double %.07992.6, %239
  %241 = add nuw nsw i64 %.07893.6, 1
  %242 = getelementptr inbounds i8, ptr %.194.6, i64 8
  %243 = load float, ptr %234, align 4, !tbaa !13
  %244 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %241
  %245 = load float, ptr %244, align 4, !tbaa !13
  %246 = fmul float %243, %245
  %247 = fpext float %246 to double
  %248 = fadd double %240, %247
  %249 = add nuw nsw i64 %.07893.6, 2
  %250 = getelementptr inbounds i8, ptr %.194.6, i64 12
  %251 = load float, ptr %242, align 4, !tbaa !13
  %252 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %249
  %253 = load float, ptr %252, align 4, !tbaa !13
  %254 = fmul float %251, %253
  %255 = fpext float %254 to double
  %256 = fadd double %248, %255
  %257 = add nuw nsw i64 %.07893.6, 3
  %exitcond.6.not.2 = icmp eq i64 %257, 1089
  br i1 %exitcond.6.not.2, label %258, label %233, !llvm.loop !16

258:                                              ; preds = %233
  %scevgep.6 = getelementptr i8, ptr %0, i64 62004
  %259 = fmul double %232, %256
  %260 = fmul double %232, %259
  %261 = getelementptr inbounds i8, ptr %4, i64 48
  store double %260, ptr %261, align 16, !tbaa !10
  %exp290.7 = call double @exp2(double 0x3FD1C71C71C71C72) #7
  %262 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FEF0810A1440F40)
  %263 = call double @sqrt(double noundef %262) #7
  br label %264

264:                                              ; preds = %264, %258
  %.194.7 = phi ptr [ %scevgep.6, %258 ], [ %281, %264 ]
  %.07893.7 = phi i64 [ 0, %258 ], [ %288, %264 ]
  %.07992.7 = phi double [ 0.000000e+00, %258 ], [ %287, %264 ]
  %265 = getelementptr inbounds i8, ptr %.194.7, i64 4
  %266 = load float, ptr %.194.7, align 4, !tbaa !13
  %267 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.7
  %268 = load float, ptr %267, align 4, !tbaa !13
  %269 = fmul float %266, %268
  %270 = fpext float %269 to double
  %271 = fadd double %.07992.7, %270
  %272 = add nuw nsw i64 %.07893.7, 1
  %273 = getelementptr inbounds i8, ptr %.194.7, i64 8
  %274 = load float, ptr %265, align 4, !tbaa !13
  %275 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %272
  %276 = load float, ptr %275, align 4, !tbaa !13
  %277 = fmul float %274, %276
  %278 = fpext float %277 to double
  %279 = fadd double %271, %278
  %280 = add nuw nsw i64 %.07893.7, 2
  %281 = getelementptr inbounds i8, ptr %.194.7, i64 12
  %282 = load float, ptr %273, align 4, !tbaa !13
  %283 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %280
  %284 = load float, ptr %283, align 4, !tbaa !13
  %285 = fmul float %282, %284
  %286 = fpext float %285 to double
  %287 = fadd double %279, %286
  %288 = add nuw nsw i64 %.07893.7, 3
  %exitcond.7.not.2 = icmp eq i64 %288, 1089
  br i1 %exitcond.7.not.2, label %289, label %264, !llvm.loop !16

289:                                              ; preds = %264
  %scevgep.7 = getelementptr i8, ptr %0, i64 66360
  %290 = fmul double %263, %287
  %291 = fmul double %263, %290
  %292 = getelementptr inbounds i8, ptr %4, i64 56
  store double %291, ptr %292, align 8, !tbaa !10
  %exp290.8 = call double @exp2(double 0x3FD8E38E38E38E38) #7
  %293 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FF36E8AEEE17ED4)
  %294 = call double @sqrt(double noundef %293) #7
  br label %295

295:                                              ; preds = %295, %289
  %.194.8 = phi ptr [ %scevgep.7, %289 ], [ %312, %295 ]
  %.07893.8 = phi i64 [ 0, %289 ], [ %319, %295 ]
  %.07992.8 = phi double [ 0.000000e+00, %289 ], [ %318, %295 ]
  %296 = getelementptr inbounds i8, ptr %.194.8, i64 4
  %297 = load float, ptr %.194.8, align 4, !tbaa !13
  %298 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.8
  %299 = load float, ptr %298, align 4, !tbaa !13
  %300 = fmul float %297, %299
  %301 = fpext float %300 to double
  %302 = fadd double %.07992.8, %301
  %303 = add nuw nsw i64 %.07893.8, 1
  %304 = getelementptr inbounds i8, ptr %.194.8, i64 8
  %305 = load float, ptr %296, align 4, !tbaa !13
  %306 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %303
  %307 = load float, ptr %306, align 4, !tbaa !13
  %308 = fmul float %305, %307
  %309 = fpext float %308 to double
  %310 = fadd double %302, %309
  %311 = add nuw nsw i64 %.07893.8, 2
  %312 = getelementptr inbounds i8, ptr %.194.8, i64 12
  %313 = load float, ptr %304, align 4, !tbaa !13
  %314 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %311
  %315 = load float, ptr %314, align 4, !tbaa !13
  %316 = fmul float %313, %315
  %317 = fpext float %316 to double
  %318 = fadd double %310, %317
  %319 = add nuw nsw i64 %.07893.8, 3
  %exitcond.8.not.2 = icmp eq i64 %319, 1089
  br i1 %exitcond.8.not.2, label %320, label %295, !llvm.loop !16

320:                                              ; preds = %295
  %scevgep.8 = getelementptr i8, ptr %0, i64 70716
  %321 = fmul double %294, %318
  %322 = fmul double %294, %321
  %323 = getelementptr inbounds i8, ptr %4, i64 64
  store double %322, ptr %323, align 16, !tbaa !10
  %exp290.9 = call double @exp2(double 5.000000e-01) #7
  %324 = call double @llvm.fmuladd.f64(double %.074, double %.074, double 0x3FF8000000000002)
  %325 = call double @sqrt(double noundef %324) #7
  br label %326

326:                                              ; preds = %326, %320
  %.194.9 = phi ptr [ %scevgep.8, %320 ], [ %343, %326 ]
  %.07893.9 = phi i64 [ 0, %320 ], [ %350, %326 ]
  %.07992.9 = phi double [ 0.000000e+00, %320 ], [ %349, %326 ]
  %327 = getelementptr inbounds i8, ptr %.194.9, i64 4
  %328 = load float, ptr %.194.9, align 4, !tbaa !13
  %329 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %.07893.9
  %330 = load float, ptr %329, align 4, !tbaa !13
  %331 = fmul float %328, %330
  %332 = fpext float %331 to double
  %333 = fadd double %.07992.9, %332
  %334 = add nuw nsw i64 %.07893.9, 1
  %335 = getelementptr inbounds i8, ptr %.194.9, i64 8
  %336 = load float, ptr %327, align 4, !tbaa !13
  %337 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %334
  %338 = load float, ptr %337, align 4, !tbaa !13
  %339 = fmul float %336, %338
  %340 = fpext float %339 to double
  %341 = fadd double %333, %340
  %342 = add nuw nsw i64 %.07893.9, 2
  %343 = getelementptr inbounds i8, ptr %.194.9, i64 12
  %344 = load float, ptr %335, align 4, !tbaa !13
  %345 = getelementptr inbounds [1089 x float], ptr %32, i64 0, i64 %342
  %346 = load float, ptr %345, align 4, !tbaa !13
  %347 = fmul float %344, %346
  %348 = fpext float %347 to double
  %349 = fadd double %341, %348
  %350 = add nuw nsw i64 %.07893.9, 3
  %exitcond.9.not.2 = icmp eq i64 %350, 1089
  br i1 %exitcond.9.not.2, label %.preheader, label %326, !llvm.loop !16

.preheader:                                       ; preds = %326
  %351 = fmul double %325, %349
  %352 = fmul double %325, %351
  %353 = getelementptr inbounds i8, ptr %4, i64 72
  store double %352, ptr %353, align 8, !tbaa !10
  %354 = getelementptr inbounds i8, ptr %0, i64 40
  %355 = getelementptr inbounds i8, ptr %0, i64 192
  br label %356

356:                                              ; preds = %.preheader, %392
  %357 = phi double [ %105, %.preheader ], [ %361, %392 ]
  %358 = phi double [ %75, %.preheader ], [ %357, %392 ]
  %.17797 = phi i64 [ 1, %.preheader ], [ %359, %392 ]
  %359 = add nuw nsw i64 %.17797, 1
  %360 = getelementptr inbounds [10 x double], ptr %4, i64 0, i64 %359
  %361 = load double, ptr %360, align 8, !tbaa !10
  %362 = load double, ptr %354, align 8, !tbaa !18
  %363 = fcmp ogt double %357, %358
  %364 = fcmp ogt double %357, %361
  %or.cond = select i1 %363, i1 %364, i1 false
  br i1 %or.cond, label %368, label %365

365:                                              ; preds = %356
  %366 = fcmp olt double %357, %358
  %367 = fcmp olt double %357, %361
  %or.cond91 = select i1 %366, i1 %367, i1 false
  br i1 %or.cond91, label %368, label %392

368:                                              ; preds = %365, %356
  %369 = call double @vl_abs_d(double noundef %357)
  %370 = fcmp ult double %369, %362
  br i1 %370, label %392, label %371

371:                                              ; preds = %368
  %372 = fsub double %361, %358
  %373 = fmul double %372, -5.000000e-01
  %374 = fadd double %358, %361
  %375 = call double @llvm.fmuladd.f64(double %357, double -2.000000e+00, double %374)
  %376 = fdiv double %373, %375
  %377 = uitofp nneg i64 %.17797 to double
  %378 = fadd double %376, %377
  %379 = fdiv double %378, 9.000000e+00
  %380 = fadd double %379, -5.000000e-01
  %exp2 = call double @exp2(double %380) #7
  %381 = call double @llvm.fmuladd.f64(double %exp2, double %exp2, double 0xBFDFFFFFFFFFFFFE)
  %382 = call double @llvm.fmuladd.f64(double %.074, double %.074, double %381)
  %383 = call double @sqrt(double noundef %382) #7
  %384 = load i64, ptr %1, align 8, !tbaa !14
  %385 = icmp ult i64 %384, 4
  br i1 %385, label %386, label %392

386:                                              ; preds = %371
  %387 = getelementptr inbounds [4 x %struct._VlCovDetFeatureLaplacianScale], ptr %355, i64 0, i64 %384
  store double %383, ptr %387, align 8, !tbaa !22
  %388 = fmul double %372, 5.000000e-01
  %389 = call double @llvm.fmuladd.f64(double %388, double %376, double %357)
  %390 = getelementptr inbounds [4 x %struct._VlCovDetFeatureLaplacianScale], ptr %355, i64 0, i64 %384, i32 1
  store double %389, ptr %390, align 8, !tbaa !24
  %391 = add nuw nsw i64 %384, 1
  store i64 %391, ptr %1, align 8, !tbaa !14
  br label %392

392:                                              ; preds = %371, %386, %368, %365
  %exitcond100.not = icmp eq i64 %359, 9
  br i1 %exitcond100.not, label %.loopexit, label %356, !llvm.loop !25

.loopexit:                                        ; preds = %392, %31
  %.0 = phi ptr [ null, %31 ], [ %355, %392 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %4) #7
  ret ptr %.0
}

declare double @exp2(double) local_unnamed_addr

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { mustprogress nofree nounwind willreturn memory(write) "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 = { 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 #5 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 = { nounwind }
attributes #8 = { 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 16}
!6 = !{!"_VlFrameOrientedEllipse", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !7, i64 20}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long long", !8, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !11, i64 40}
!19 = !{!"_VlCovDet", !20, i64 0, !20, i64 8, !21, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !15, i64 48, !15, i64 56, !11, i64 64, !15, i64 72, !20, i64 80, !15, i64 88, !15, i64 96, !20, i64 104, !15, i64 112, !21, i64 120, !8, i64 128, !8, i64 192, !21, i64 256, !8, i64 260, !8, i64 6984, !8, i64 13708, !8, i64 20432, !8, i64 27156, !8, i64 31512, !8, i64 75072}
!20 = !{!"any pointer", !8, i64 0}
!21 = !{!"int", !8, i64 0}
!22 = !{!23, !11, i64 0}
!23 = !{!"_VlCovDetFeatureLaplacianScale", !11, i64 0, !11, i64 8}
!24 = !{!23, !11, i64 8}
!25 = distinct !{!25, !17}


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