; 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._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
@__PRETTY_FUNCTION__.vl_covdet_new = external hidden unnamed_addr constant [40 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: nounwind uwtable
define dso_local ptr @vl_covdet_new(i32 noundef %0) #4 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca i64, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  store i32 %0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  %19 = call ptr @vl_calloc(i64 noundef 75112, i64 noundef 1)
  store ptr %19, ptr %3, align 8, !tbaa !9
  %20 = load i32, ptr %2, align 4, !tbaa !5
  %21 = load ptr, ptr %3, align 8, !tbaa !9
  %22 = getelementptr inbounds %struct._VlCovDet, ptr %21, i32 0, i32 2
  store i32 %20, ptr %22, align 8, !tbaa !11
  %23 = load ptr, ptr %3, align 8, !tbaa !9
  %24 = getelementptr inbounds %struct._VlCovDet, ptr %23, i32 0, i32 6
  store i64 3, ptr %24, align 8, !tbaa !15
  %25 = load ptr, ptr %3, align 8, !tbaa !9
  %26 = getelementptr inbounds %struct._VlCovDet, ptr %25, i32 0, i32 7
  store i64 -1, ptr %26, align 8, !tbaa !16
  %27 = load ptr, ptr %3, align 8, !tbaa !9
  %28 = getelementptr inbounds %struct._VlCovDet, ptr %27, i32 0, i32 2
  %29 = load i32, ptr %28, align 8, !tbaa !11
  switch i32 %29, label %51 [
    i32 1, label %30
    i32 4, label %37
    i32 6, label %37
    i32 2, label %44
    i32 3, label %44
    i32 5, label %44
  ]

30:                                               ; preds = %1
  %31 = load ptr, ptr %3, align 8, !tbaa !9
  %32 = getelementptr inbounds %struct._VlCovDet, ptr %31, i32 0, i32 3
  store double 1.000000e-02, ptr %32, align 8, !tbaa !17
  %33 = load ptr, ptr %3, align 8, !tbaa !9
  %34 = getelementptr inbounds %struct._VlCovDet, ptr %33, i32 0, i32 4
  store double 1.000000e+01, ptr %34, align 8, !tbaa !18
  %35 = load ptr, ptr %3, align 8, !tbaa !9
  %36 = getelementptr inbounds %struct._VlCovDet, ptr %35, i32 0, i32 5
  store double 0.000000e+00, ptr %36, align 8, !tbaa !19
  br label %52

37:                                               ; preds = %1, %1
  %38 = load ptr, ptr %3, align 8, !tbaa !9
  %39 = getelementptr inbounds %struct._VlCovDet, ptr %38, i32 0, i32 3
  store double 2.000000e-06, ptr %39, align 8, !tbaa !17
  %40 = load ptr, ptr %3, align 8, !tbaa !9
  %41 = getelementptr inbounds %struct._VlCovDet, ptr %40, i32 0, i32 4
  store double 1.000000e+01, ptr %41, align 8, !tbaa !18
  %42 = load ptr, ptr %3, align 8, !tbaa !9
  %43 = getelementptr inbounds %struct._VlCovDet, ptr %42, i32 0, i32 5
  store double 1.000000e-02, ptr %43, align 8, !tbaa !19
  br label %52

44:                                               ; preds = %1, %1, %1
  %45 = load ptr, ptr %3, align 8, !tbaa !9
  %46 = getelementptr inbounds %struct._VlCovDet, ptr %45, i32 0, i32 3
  store double 3.000000e-03, ptr %46, align 8, !tbaa !17
  %47 = load ptr, ptr %3, align 8, !tbaa !9
  %48 = getelementptr inbounds %struct._VlCovDet, ptr %47, i32 0, i32 4
  store double 1.000000e+01, ptr %48, align 8, !tbaa !18
  %49 = load ptr, ptr %3, align 8, !tbaa !9
  %50 = getelementptr inbounds %struct._VlCovDet, ptr %49, i32 0, i32 5
  store double 1.000000e-02, ptr %50, align 8, !tbaa !19
  br label %52

51:                                               ; preds = %1
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 1533, ptr noundef @__PRETTY_FUNCTION__.vl_covdet_new) #8
  unreachable

52:                                               ; preds = %44, %37, %30
  %53 = load ptr, ptr %3, align 8, !tbaa !9
  %54 = getelementptr inbounds %struct._VlCovDet, ptr %53, i32 0, i32 8
  store double 5.000000e-01, ptr %54, align 8, !tbaa !20
  %55 = load ptr, ptr %3, align 8, !tbaa !9
  %56 = getelementptr inbounds %struct._VlCovDet, ptr %55, i32 0, i32 10
  store ptr null, ptr %56, align 8, !tbaa !21
  %57 = load ptr, ptr %3, align 8, !tbaa !9
  %58 = getelementptr inbounds %struct._VlCovDet, ptr %57, i32 0, i32 11
  store i64 0, ptr %58, align 8, !tbaa !22
  %59 = load ptr, ptr %3, align 8, !tbaa !9
  %60 = getelementptr inbounds %struct._VlCovDet, ptr %59, i32 0, i32 12
  store i64 0, ptr %60, align 8, !tbaa !23
  %61 = load ptr, ptr %3, align 8, !tbaa !9
  %62 = getelementptr inbounds %struct._VlCovDet, ptr %61, i32 0, i32 13
  store ptr null, ptr %62, align 8, !tbaa !24
  %63 = load ptr, ptr %3, align 8, !tbaa !9
  %64 = getelementptr inbounds %struct._VlCovDet, ptr %63, i32 0, i32 14
  store i64 0, ptr %64, align 8, !tbaa !25
  %65 = load ptr, ptr %3, align 8, !tbaa !9
  %66 = getelementptr inbounds %struct._VlCovDet, ptr %65, i32 0, i32 15
  store i32 0, ptr %66, align 8, !tbaa !26
  %67 = load ptr, ptr %3, align 8, !tbaa !9
  %68 = getelementptr inbounds %struct._VlCovDet, ptr %67, i32 0, i32 18
  store i32 0, ptr %68, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  store i64 20, ptr %4, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  store double 0x3FDC18F9C18F9C19, ptr %7, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  store double 3.000000e+00, ptr %8, align 8, !tbaa !29
  store i64 -20, ptr %6, align 8, !tbaa !28
  br label %69

69:                                               ; preds = %111, %52
  %70 = load i64, ptr %6, align 8, !tbaa !28
  %71 = icmp sle i64 %70, 20
  br i1 %71, label %72, label %114

72:                                               ; preds = %69
  store i64 -20, ptr %5, align 8, !tbaa !28
  br label %73

73:                                               ; preds = %107, %72
  %74 = load i64, ptr %5, align 8, !tbaa !28
  %75 = icmp sle i64 %74, 20
  br i1 %75, label %76, label %110

76:                                               ; preds = %73
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %77 = load i64, ptr %5, align 8, !tbaa !28
  %78 = sitofp i64 %77 to double
  %79 = load double, ptr %7, align 8, !tbaa !29
  %80 = fmul double %78, %79
  %81 = load double, ptr %8, align 8, !tbaa !29
  %82 = fdiv double %80, %81
  store double %82, ptr %9, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  %83 = load i64, ptr %6, align 8, !tbaa !28
  %84 = sitofp i64 %83 to double
  %85 = load double, ptr %7, align 8, !tbaa !29
  %86 = fmul double %84, %85
  %87 = load double, ptr %8, align 8, !tbaa !29
  %88 = fdiv double %86, %87
  store double %88, ptr %10, align 8, !tbaa !29
  %89 = load double, ptr %9, align 8, !tbaa !29
  %90 = load double, ptr %9, align 8, !tbaa !29
  %91 = load double, ptr %10, align 8, !tbaa !29
  %92 = load double, ptr %10, align 8, !tbaa !29
  %93 = fmul double %91, %92
  %94 = call double @llvm.fmuladd.f64(double %89, double %90, double %93)
  %95 = fmul double -5.000000e-01, %94
  %96 = call double @exp(double noundef %95) #7
  %97 = fptrunc double %96 to float
  %98 = load ptr, ptr %3, align 8, !tbaa !9
  %99 = getelementptr inbounds %struct._VlCovDet, ptr %98, i32 0, i32 22
  %100 = load i64, ptr %5, align 8, !tbaa !28
  %101 = add nsw i64 %100, 20
  %102 = load i64, ptr %6, align 8, !tbaa !28
  %103 = add nsw i64 %102, 20
  %104 = mul nsw i64 41, %103
  %105 = add nsw i64 %101, %104
  %106 = getelementptr inbounds [1681 x float], ptr %99, i64 0, i64 %105
  store float %97, ptr %106, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %107

107:                                              ; preds = %76
  %108 = load i64, ptr %5, align 8, !tbaa !28
  %109 = add nsw i64 %108, 1
  store i64 %109, ptr %5, align 8, !tbaa !28
  br label %73, !llvm.loop !32

110:                                              ; preds = %73
  br label %111

111:                                              ; preds = %110
  %112 = load i64, ptr %6, align 8, !tbaa !28
  %113 = add nsw i64 %112, 1
  store i64 %113, ptr %6, align 8, !tbaa !28
  br label %69, !llvm.loop !34

114:                                              ; preds = %69
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  store i64 0, ptr %11, align 8, !tbaa !28
  br label %115

115:                                              ; preds = %161, %114
  %116 = load i64, ptr %11, align 8, !tbaa !28
  %117 = icmp slt i64 %116, 10
  br i1 %117, label %118, label %164

118:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %119 = load i64, ptr %11, align 8, !tbaa !28
  %120 = sitofp i64 %119 to double
  %121 = fdiv double %120, 9.000000e+00
  %122 = fadd double -5.000000e-01, %121
  %123 = call double @pow(double noundef 2.000000e+00, double noundef %122) #7
  store double %123, ptr %12, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %124 = call double @sqrt(double noundef 2.000000e+00) #7
  %125 = fdiv double 1.000000e+00, %124
  store double %125, ptr %13, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %126 = load double, ptr %13, align 8, !tbaa !29
  %127 = fmul double 5.000000e-01, %126
  store double %127, ptr %14, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %128 = load double, ptr %12, align 8, !tbaa !29
  %129 = load double, ptr %12, align 8, !tbaa !29
  %130 = load double, ptr %13, align 8, !tbaa !29
  %131 = load double, ptr %13, align 8, !tbaa !29
  %132 = fmul double %130, %131
  %133 = fneg double %132
  %134 = call double @llvm.fmuladd.f64(double %128, double %129, double %133)
  %135 = call double @sqrt(double noundef %134) #7
  store double %135, ptr %15, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  store i64 16, ptr %16, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  store i64 33, ptr %17, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %136 = load ptr, ptr %3, align 8, !tbaa !9
  %137 = getelementptr inbounds %struct._VlCovDet, ptr %136, i32 0, i32 24
  %138 = getelementptr inbounds [10890 x float], ptr %137, i64 0, i64 0
  %139 = load i64, ptr %11, align 8, !tbaa !28
  %140 = mul i64 %139, 1089
  %141 = getelementptr inbounds float, ptr %138, i64 %140
  store ptr %141, ptr %18, align 8, !tbaa !9
  %142 = load ptr, ptr %18, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 4 %142, i8 0, i64 4356, i1 false)
  %143 = load ptr, ptr %18, align 8, !tbaa !9
  %144 = getelementptr inbounds float, ptr %143, i64 544
  store float -4.000000e+00, ptr %144, align 4, !tbaa !30
  %145 = load ptr, ptr %18, align 8, !tbaa !9
  %146 = getelementptr inbounds float, ptr %145, i64 543
  store float 1.000000e+00, ptr %146, align 4, !tbaa !30
  %147 = load ptr, ptr %18, align 8, !tbaa !9
  %148 = getelementptr inbounds float, ptr %147, i64 545
  store float 1.000000e+00, ptr %148, align 4, !tbaa !30
  %149 = load ptr, ptr %18, align 8, !tbaa !9
  %150 = getelementptr inbounds float, ptr %149, i64 577
  store float 1.000000e+00, ptr %150, align 4, !tbaa !30
  %151 = load ptr, ptr %18, align 8, !tbaa !9
  %152 = getelementptr inbounds float, ptr %151, i64 511
  store float 1.000000e+00, ptr %152, align 4, !tbaa !30
  %153 = load ptr, ptr %18, align 8, !tbaa !9
  %154 = load ptr, ptr %18, align 8, !tbaa !9
  %155 = load double, ptr %15, align 8, !tbaa !29
  %156 = load double, ptr %14, align 8, !tbaa !29
  %157 = fdiv double %155, %156
  %158 = load double, ptr %15, align 8, !tbaa !29
  %159 = load double, ptr %14, align 8, !tbaa !29
  %160 = fdiv double %158, %159
  call void @vl_imsmooth_f(ptr noundef %153, i64 noundef 33, ptr noundef %154, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef %157, double noundef %160)
  call void @llvm.lifetime.end.p0(i64 8, 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 8, 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
  br label %161

161:                                              ; preds = %118
  %162 = load i64, ptr %11, align 8, !tbaa !28
  %163 = add nsw i64 %162, 1
  store i64 %163, ptr %11, align 8, !tbaa !28
  br label %115, !llvm.loop !35

164:                                              ; preds = %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  %165 = load ptr, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  ret ptr %165
}

declare ptr @vl_calloc(i64 noundef, i64 noundef) #5

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

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

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

declare void @vl_imsmooth_f(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, double noundef) #5

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 = { 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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !6, i64 16}
!12 = !{!"_VlCovDet", !10, i64 0, !10, i64 8, !6, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !14, i64 56, !13, i64 64, !14, i64 72, !10, i64 80, !14, i64 88, !14, i64 96, !10, i64 104, !14, i64 112, !6, i64 120, !7, i64 128, !7, i64 192, !6, i64 256, !7, i64 260, !7, i64 6984, !7, i64 13708, !7, i64 20432, !7, i64 27156, !7, i64 31512, !7, i64 75072}
!13 = !{!"double", !7, i64 0}
!14 = !{!"long long", !7, i64 0}
!15 = !{!12, !14, i64 48}
!16 = !{!12, !14, i64 56}
!17 = !{!12, !13, i64 24}
!18 = !{!12, !13, i64 32}
!19 = !{!12, !13, i64 40}
!20 = !{!12, !13, i64 64}
!21 = !{!12, !10, i64 80}
!22 = !{!12, !14, i64 88}
!23 = !{!12, !14, i64 96}
!24 = !{!12, !10, i64 104}
!25 = !{!12, !14, i64 112}
!26 = !{!12, !6, i64 120}
!27 = !{!12, !6, i64 256}
!28 = !{!14, !14, i64 0}
!29 = !{!13, !13, i64 0}
!30 = !{!31, !31, i64 0}
!31 = !{!"float", !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}


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

@.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_new = external hidden unnamed_addr constant [40 x i8], align 1
@switch.table.vl_covdet_new = private unnamed_addr constant [6 x double] [double 1.000000e-02, double 3.000000e-03, double 3.000000e-03, double 2.000000e-06, double 3.000000e-03, double 2.000000e-06], align 8
@switch.table.vl_covdet_new.1 = private unnamed_addr constant [6 x double] [double 0.000000e+00, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02], align 8

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @vl_covdet_new(i32 noundef %0) local_unnamed_addr #2 {
  %2 = tail call ptr @vl_calloc(i64 noundef 75112, i64 noundef 1) #6
  %3 = getelementptr inbounds i8, ptr %2, i64 16
  store i32 %0, ptr %3, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %2, i64 48
  store i64 3, ptr %4, align 8, !tbaa !13
  %5 = getelementptr inbounds i8, ptr %2, i64 56
  store i64 -1, ptr %5, align 8, !tbaa !14
  %switch.tableidx = add i32 %0, -1
  %6 = icmp ult i32 %switch.tableidx, 6
  br i1 %6, label %switch.lookup, label %7

7:                                                ; preds = %1
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 1533, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_covdet_new) #7
  unreachable

switch.lookup:                                    ; preds = %1
  %8 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [6 x double], ptr @switch.table.vl_covdet_new, i64 0, i64 %8
  %switch.load = load double, ptr %switch.gep, align 8
  %9 = zext nneg i32 %switch.tableidx to i64
  %switch.gep73 = getelementptr inbounds [6 x double], ptr @switch.table.vl_covdet_new.1, i64 0, i64 %9
  %switch.load74 = load double, ptr %switch.gep73, align 8
  %10 = getelementptr inbounds i8, ptr %2, i64 24
  store double %switch.load, ptr %10, align 8, !tbaa !15
  %11 = getelementptr inbounds i8, ptr %2, i64 32
  store double 1.000000e+01, ptr %11, align 8, !tbaa !16
  %12 = getelementptr inbounds i8, ptr %2, i64 40
  store double %switch.load74, ptr %12, align 8, !tbaa !17
  %13 = getelementptr inbounds i8, ptr %2, i64 64
  store double 5.000000e-01, ptr %13, align 8, !tbaa !18
  %14 = getelementptr inbounds i8, ptr %2, i64 80
  %15 = getelementptr inbounds i8, ptr %2, i64 256
  store i32 0, ptr %15, align 8, !tbaa !19
  %16 = getelementptr inbounds i8, ptr %2, i64 20432
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(44) %14, i8 0, i64 44, i1 false)
  br label %.preheader63

.preheader63:                                     ; preds = %switch.lookup, %84
  %.06165 = phi i64 [ -20, %switch.lookup ], [ %85, %84 ]
  %17 = sitofp i64 %.06165 to double
  %18 = fmul double %17, 0x3FDC18F9C18F9C19
  %19 = fdiv double %18, 3.000000e+00
  %20 = fmul double %19, %19
  %21 = mul nsw i64 %.06165, 41
  %22 = add nsw i64 %21, 840
  br label %73

.preheader:                                       ; preds = %84
  %23 = getelementptr inbounds i8, ptr %2, i64 31512
  %exp2 = tail call double @exp2(double -5.000000e-01) #6
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %23, i8 0, i64 4356, i1 false)
  %24 = getelementptr inbounds i8, ptr %2, i64 33684
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %24, align 4, !tbaa !20
  %25 = getelementptr inbounds i8, ptr %2, i64 33692
  store float 1.000000e+00, ptr %25, align 4, !tbaa !20
  %26 = getelementptr inbounds i8, ptr %2, i64 33820
  store float 1.000000e+00, ptr %26, align 4, !tbaa !20
  %27 = getelementptr inbounds i8, ptr %2, i64 33556
  store float 1.000000e+00, ptr %27, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %23, i64 noundef 33, ptr noundef nonnull %23, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x3E64567513E692E9, double noundef 0x3E64567513E692E9) #6
  %exp2.1 = tail call double @exp2(double 0xBFD8E38E38E38E39) #6
  %28 = getelementptr inbounds i8, ptr %2, i64 35868
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %28, i8 0, i64 4356, i1 false)
  %29 = getelementptr inbounds i8, ptr %2, i64 38040
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %29, align 4, !tbaa !20
  %30 = getelementptr inbounds i8, ptr %2, i64 38048
  store float 1.000000e+00, ptr %30, align 4, !tbaa !20
  %31 = getelementptr inbounds i8, ptr %2, i64 38176
  store float 1.000000e+00, ptr %31, align 4, !tbaa !20
  %32 = getelementptr inbounds i8, ptr %2, i64 37912
  store float 1.000000e+00, ptr %32, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %28, i64 noundef 33, ptr noundef nonnull %28, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x3FEA1DFA4ED0D6BA, double noundef 0x3FEA1DFA4ED0D6BA) #6
  %exp2.2 = tail call double @exp2(double 0xBFD1C71C71C71C72) #6
  %33 = getelementptr inbounds i8, ptr %2, i64 40224
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %33, i8 0, i64 4356, i1 false)
  %34 = getelementptr inbounds i8, ptr %2, i64 42396
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %34, align 4, !tbaa !20
  %35 = getelementptr inbounds i8, ptr %2, i64 42404
  store float 1.000000e+00, ptr %35, align 4, !tbaa !20
  %36 = getelementptr inbounds i8, ptr %2, i64 42532
  store float 1.000000e+00, ptr %36, align 4, !tbaa !20
  %37 = getelementptr inbounds i8, ptr %2, i64 42268
  store float 1.000000e+00, ptr %37, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %33, i64 noundef 33, ptr noundef nonnull %33, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x3FF33897119B38E7, double noundef 0x3FF33897119B38E7) #6
  %exp2.3 = tail call double @exp2(double 0xBFC5555555555556) #6
  %38 = getelementptr inbounds i8, ptr %2, i64 44580
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %38, i8 0, i64 4356, i1 false)
  %39 = getelementptr inbounds i8, ptr %2, i64 46752
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %39, align 4, !tbaa !20
  %40 = getelementptr inbounds i8, ptr %2, i64 46760
  store float 1.000000e+00, ptr %40, align 4, !tbaa !20
  %41 = getelementptr inbounds i8, ptr %2, i64 46888
  store float 1.000000e+00, ptr %41, align 4, !tbaa !20
  %42 = getelementptr inbounds i8, ptr %2, i64 46624
  store float 1.000000e+00, ptr %42, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %38, i64 noundef 33, ptr noundef nonnull %38, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x3FF88685332D356C, double noundef 0x3FF88685332D356C) #6
  %exp2.4 = tail call double @exp2(double 0xBFAC71C71C71C720) #6
  %43 = getelementptr inbounds i8, ptr %2, i64 48936
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %43, i8 0, i64 4356, i1 false)
  %44 = getelementptr inbounds i8, ptr %2, i64 51108
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %44, align 4, !tbaa !20
  %45 = getelementptr inbounds i8, ptr %2, i64 51116
  store float 1.000000e+00, ptr %45, align 4, !tbaa !20
  %46 = getelementptr inbounds i8, ptr %2, i64 51244
  store float 1.000000e+00, ptr %46, align 4, !tbaa !20
  %47 = getelementptr inbounds i8, ptr %2, i64 50980
  store float 1.000000e+00, ptr %47, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %43, i64 noundef 33, ptr noundef nonnull %43, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x3FFD886B4739D845, double noundef 0x3FFD886B4739D845) #6
  %exp2.5 = tail call double @exp2(double 0x3FAC71C71C71C720) #6
  %48 = getelementptr inbounds i8, ptr %2, i64 53292
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %48, i8 0, i64 4356, i1 false)
  %49 = getelementptr inbounds i8, ptr %2, i64 55464
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %49, align 4, !tbaa !20
  %50 = getelementptr inbounds i8, ptr %2, i64 55472
  store float 1.000000e+00, ptr %50, align 4, !tbaa !20
  %51 = getelementptr inbounds i8, ptr %2, i64 55600
  store float 1.000000e+00, ptr %51, align 4, !tbaa !20
  %52 = getelementptr inbounds i8, ptr %2, i64 55336
  store float 1.000000e+00, ptr %52, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %48, i64 noundef 33, ptr noundef nonnull %48, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x40013BC112D4A709, double noundef 0x40013BC112D4A709) #6
  %exp2.6 = tail call double @exp2(double 0x3FC5555555555554) #6
  %53 = getelementptr inbounds i8, ptr %2, i64 57648
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %53, i8 0, i64 4356, i1 false)
  %54 = getelementptr inbounds i8, ptr %2, i64 59820
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %54, align 4, !tbaa !20
  %55 = getelementptr inbounds i8, ptr %2, i64 59828
  store float 1.000000e+00, ptr %55, align 4, !tbaa !20
  %56 = getelementptr inbounds i8, ptr %2, i64 59956
  store float 1.000000e+00, ptr %56, align 4, !tbaa !20
  %57 = getelementptr inbounds i8, ptr %2, i64 59692
  store float 1.000000e+00, ptr %57, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %53, i64 noundef 33, ptr noundef nonnull %53, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x4003B9A02A86CC2E, double noundef 0x4003B9A02A86CC2E) #6
  %exp2.7 = tail call double @exp2(double 0x3FD1C71C71C71C72) #6
  %58 = getelementptr inbounds i8, ptr %2, i64 62004
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %58, i8 0, i64 4356, i1 false)
  %59 = getelementptr inbounds i8, ptr %2, i64 64176
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %59, align 4, !tbaa !20
  %60 = getelementptr inbounds i8, ptr %2, i64 64184
  store float 1.000000e+00, ptr %60, align 4, !tbaa !20
  %61 = getelementptr inbounds i8, ptr %2, i64 64312
  store float 1.000000e+00, ptr %61, align 4, !tbaa !20
  %62 = getelementptr inbounds i8, ptr %2, i64 64048
  store float 1.000000e+00, ptr %62, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %58, i64 noundef 33, ptr noundef nonnull %58, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x4006484978430861, double noundef 0x4006484978430861) #6
  %exp2.8 = tail call double @exp2(double 0x3FD8E38E38E38E38) #6
  %63 = getelementptr inbounds i8, ptr %2, i64 66360
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %63, i8 0, i64 4356, i1 false)
  %64 = getelementptr inbounds i8, ptr %2, i64 68532
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %64, align 4, !tbaa !20
  %65 = getelementptr inbounds i8, ptr %2, i64 68540
  store float 1.000000e+00, ptr %65, align 4, !tbaa !20
  %66 = getelementptr inbounds i8, ptr %2, i64 68668
  store float 1.000000e+00, ptr %66, align 4, !tbaa !20
  %67 = getelementptr inbounds i8, ptr %2, i64 68404
  store float 1.000000e+00, ptr %67, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %63, i64 noundef 33, ptr noundef nonnull %63, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x4008EFAFC12F0219, double noundef 0x4008EFAFC12F0219) #6
  %exp2.9 = tail call double @exp2(double 5.000000e-01) #6
  %68 = getelementptr inbounds i8, ptr %2, i64 70716
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4356) %68, i8 0, i64 4356, i1 false)
  %69 = getelementptr inbounds i8, ptr %2, i64 72888
  store <2 x float> <float 1.000000e+00, float -4.000000e+00>, ptr %69, align 4, !tbaa !20
  %70 = getelementptr inbounds i8, ptr %2, i64 72896
  store float 1.000000e+00, ptr %70, align 4, !tbaa !20
  %71 = getelementptr inbounds i8, ptr %2, i64 73024
  store float 1.000000e+00, ptr %71, align 4, !tbaa !20
  %72 = getelementptr inbounds i8, ptr %2, i64 72760
  store float 1.000000e+00, ptr %72, align 4, !tbaa !20
  tail call void @vl_imsmooth_f(ptr noundef nonnull %68, i64 noundef 33, ptr noundef nonnull %68, i64 noundef 33, i64 noundef 33, i64 noundef 33, double noundef 0x400BB67AE8584CAC, double noundef 0x400BB67AE8584CAC) #6
  ret ptr %2

73:                                               ; preds = %.preheader63, %73
  %.064 = phi i64 [ -20, %.preheader63 ], [ %83, %73 ]
  %74 = sitofp i64 %.064 to double
  %75 = fmul double %74, 0x3FDC18F9C18F9C19
  %76 = fdiv double %75, 3.000000e+00
  %77 = tail call double @llvm.fmuladd.f64(double %76, double %76, double %20)
  %78 = fmul double %77, -5.000000e-01
  %79 = tail call double @exp(double noundef %78) #6
  %80 = fptrunc double %79 to float
  %81 = add nsw i64 %22, %.064
  %82 = getelementptr inbounds [1681 x float], ptr %16, i64 0, i64 %81
  store float %80, ptr %82, align 4, !tbaa !20
  %83 = add nsw i64 %.064, 1
  %exitcond.not = icmp eq i64 %83, 21
  br i1 %exitcond.not, label %84, label %73, !llvm.loop !22

84:                                               ; preds = %73
  %85 = add nsw i64 %.06165, 1
  %exitcond67.not = icmp eq i64 %85, 21
  br i1 %exitcond67.not, label %.preheader, label %.preheader63, !llvm.loop !24
}

declare ptr @vl_calloc(i64 noundef, i64 noundef) local_unnamed_addr #3

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

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

declare void @vl_imsmooth_f(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, double noundef) local_unnamed_addr #3

declare double @exp2(double) local_unnamed_addr

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 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 #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }
attributes #7 = { 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, !10, i64 16}
!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 48}
!14 = !{!6, !12, i64 56}
!15 = !{!6, !11, i64 24}
!16 = !{!6, !11, i64 32}
!17 = !{!6, !11, i64 40}
!18 = !{!6, !11, i64 64}
!19 = !{!6, !10, i64 256}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !8, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,MemCpyOptPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass