; LLVM IR from ox-vgg/vise :: src/search_engine/relja_retrival/external/KMCode_relja/descriptor (dog)

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

%class.ImageContent = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str.1 = external hidden unnamed_addr constant [119 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._Z7FindOriP12ImageContentS0_ii = 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_Z7FindOriP12ImageContentS0_ii(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) #4 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca [36 x float], align 16
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 36, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 144, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store float 3.000000e+00, ptr %22, align 4, !tbaa !11
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %23)
  store i32 %24, ptr %12, align 4, !tbaa !9
  %25 = load ptr, ptr %5, align 8, !tbaa !5
  %26 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %25)
  store i32 %26, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %27

27:                                               ; preds = %34, %4
  %28 = load i32, ptr %9, align 4, !tbaa !9
  %29 = icmp slt i32 %28, 36
  br i1 %29, label %30, label %37

30:                                               ; preds = %27
  %31 = load i32, ptr %9, align 4, !tbaa !9
  %32 = sext i32 %31 to i64
  %33 = getelementptr inbounds [36 x float], ptr %17, i64 0, i64 %32
  store float 0.000000e+00, ptr %33, align 4, !tbaa !11
  br label %34

34:                                               ; preds = %30
  %35 = load i32, ptr %9, align 4, !tbaa !9
  %36 = add nsw i32 %35, 1
  store i32 %36, ptr %9, align 4, !tbaa !9
  br label %27, !llvm.loop !13

37:                                               ; preds = %27
  %38 = load float, ptr %22, align 4, !tbaa !11
  %39 = fpext float %38 to double
  %40 = fmul double %39, 3.000000e+00
  %41 = fptosi double %40 to i32
  store i32 %41, ptr %14, align 4, !tbaa !9
  %42 = load i32, ptr %7, align 4, !tbaa !9
  %43 = load i32, ptr %14, align 4, !tbaa !9
  %44 = sub nsw i32 %42, %43
  store i32 %44, ptr %10, align 4, !tbaa !9
  br label %45

45:                                               ; preds = %176, %37
  %46 = load i32, ptr %10, align 4, !tbaa !9
  %47 = load i32, ptr %7, align 4, !tbaa !9
  %48 = load i32, ptr %14, align 4, !tbaa !9
  %49 = add nsw i32 %47, %48
  %50 = icmp sle i32 %46, %49
  br i1 %50, label %51, label %179

51:                                               ; preds = %45
  %52 = load i32, ptr %8, align 4, !tbaa !9
  %53 = load i32, ptr %14, align 4, !tbaa !9
  %54 = sub nsw i32 %52, %53
  store i32 %54, ptr %11, align 4, !tbaa !9
  br label %55

55:                                               ; preds = %172, %51
  %56 = load i32, ptr %11, align 4, !tbaa !9
  %57 = load i32, ptr %8, align 4, !tbaa !9
  %58 = load i32, ptr %14, align 4, !tbaa !9
  %59 = add nsw i32 %57, %58
  %60 = icmp sle i32 %56, %59
  br i1 %60, label %61, label %175

61:                                               ; preds = %55
  %62 = load i32, ptr %10, align 4, !tbaa !9
  %63 = icmp sge i32 %62, 0
  br i1 %63, label %64, label %171

64:                                               ; preds = %61
  %65 = load i32, ptr %11, align 4, !tbaa !9
  %66 = icmp sge i32 %65, 0
  br i1 %66, label %67, label %171

67:                                               ; preds = %64
  %68 = load i32, ptr %10, align 4, !tbaa !9
  %69 = load i32, ptr %12, align 4, !tbaa !9
  %70 = sub nsw i32 %69, 2
  %71 = icmp slt i32 %68, %70
  br i1 %71, label %72, label %171

72:                                               ; preds = %67
  %73 = load i32, ptr %11, align 4, !tbaa !9
  %74 = load i32, ptr %13, align 4, !tbaa !9
  %75 = sub nsw i32 %74, 2
  %76 = icmp slt i32 %73, %75
  br i1 %76, label %77, label %171

77:                                               ; preds = %72
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %class.ImageContent, ptr %78, i32 0, i32 4
  %80 = load ptr, ptr %79, align 8, !tbaa !15
  %81 = load i32, ptr %10, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds ptr, ptr %80, i64 %82
  %84 = load ptr, ptr %83, align 8, !tbaa !5
  %85 = load i32, ptr %11, align 4, !tbaa !9
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds float, ptr %84, i64 %86
  %88 = load float, ptr %87, align 4, !tbaa !11
  store float %88, ptr %19, align 4, !tbaa !11
  %89 = load i32, ptr %10, align 4, !tbaa !9
  %90 = load i32, ptr %7, align 4, !tbaa !9
  %91 = sub nsw i32 %89, %90
  %92 = load i32, ptr %10, align 4, !tbaa !9
  %93 = load i32, ptr %7, align 4, !tbaa !9
  %94 = sub nsw i32 %92, %93
  %95 = mul nsw i32 %91, %94
  %96 = load i32, ptr %11, align 4, !tbaa !9
  %97 = load i32, ptr %8, align 4, !tbaa !9
  %98 = sub nsw i32 %96, %97
  %99 = load i32, ptr %11, align 4, !tbaa !9
  %100 = load i32, ptr %8, align 4, !tbaa !9
  %101 = sub nsw i32 %99, %100
  %102 = mul nsw i32 %98, %101
  %103 = add nsw i32 %95, %102
  %104 = sitofp i32 %103 to float
  store float %104, ptr %18, align 4, !tbaa !11
  %105 = load float, ptr %19, align 4, !tbaa !11
  %106 = fpext float %105 to double
  %107 = fcmp ogt double %106, 0.000000e+00
  br i1 %107, label %108, label %170

108:                                              ; preds = %77
  %109 = load float, ptr %18, align 4, !tbaa !11
  %110 = fpext float %109 to double
  %111 = load i32, ptr %14, align 4, !tbaa !9
  %112 = load i32, ptr %14, align 4, !tbaa !9
  %113 = mul nsw i32 %111, %112
  %114 = sitofp i32 %113 to double
  %115 = fadd double %114, 5.000000e-01
  %116 = fcmp olt double %110, %115
  br i1 %116, label %117, label %170

117:                                              ; preds = %108
  %118 = load float, ptr %18, align 4, !tbaa !11
  %119 = fneg float %118
  %120 = fpext float %119 to double
  %121 = load float, ptr %22, align 4, !tbaa !11
  %122 = fpext float %121 to double
  %123 = fmul double 2.000000e+00, %122
  %124 = load float, ptr %22, align 4, !tbaa !11
  %125 = fpext float %124 to double
  %126 = fmul double %123, %125
  %127 = fdiv double %120, %126
  %128 = call double @exp(double noundef %127) #7
  %129 = fptrunc double %128 to float
  store float %129, ptr %20, align 4, !tbaa !11
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  %131 = getelementptr inbounds %class.ImageContent, ptr %130, i32 0, i32 4
  %132 = load ptr, ptr %131, align 8, !tbaa !15
  %133 = load i32, ptr %10, align 4, !tbaa !9
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds ptr, ptr %132, i64 %134
  %136 = load ptr, ptr %135, align 8, !tbaa !5
  %137 = load i32, ptr %11, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds float, ptr %136, i64 %138
  %140 = load float, ptr %139, align 4, !tbaa !11
  store float %140, ptr %21, align 4, !tbaa !11
  %141 = load float, ptr %21, align 4, !tbaa !11
  %142 = fpext float %141 to double
  %143 = fadd double %142, 0x400921FB54442D18
  %144 = fadd double %143, 1.000000e-03
  %145 = fmul double 3.600000e+01, %144
  %146 = fdiv double %145, 0x401921FB54442D18
  %147 = fptosi double %146 to i32
  store i32 %147, ptr %15, align 4, !tbaa !9
  %148 = load i32, ptr %15, align 4, !tbaa !9
  %149 = icmp sge i32 %148, 0
  br i1 %149, label %150, label %153

150:                                              ; preds = %117
  %151 = load i32, ptr %15, align 4, !tbaa !9
  %152 = icmp sle i32 %151, 36
  br label %153

153:                                              ; preds = %150, %117
  %154 = phi i1 [ false, %117 ], [ %152, %150 ]
  br i1 %154, label %155, label %156

155:                                              ; preds = %153
  br label %158

156:                                              ; preds = %153
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 444, ptr noundef @__PRETTY_FUNCTION__._Z7FindOriP12ImageContentS0_ii) #8
  unreachable

157:                                              ; No predecessors!
  br label %158

158:                                              ; preds = %157, %155
  %159 = load i32, ptr %15, align 4, !tbaa !9
  %160 = icmp sgt i32 %159, 35
  br i1 %160, label %161, label %162

161:                                              ; preds = %158
  store i32 35, ptr %15, align 4, !tbaa !9
  br label %162

162:                                              ; preds = %161, %158
  %163 = load float, ptr %20, align 4, !tbaa !11
  %164 = load float, ptr %19, align 4, !tbaa !11
  %165 = load i32, ptr %15, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [36 x float], ptr %17, i64 0, i64 %166
  %168 = load float, ptr %167, align 4, !tbaa !11
  %169 = call float @llvm.fmuladd.f32(float %163, float %164, float %168)
  store float %169, ptr %167, align 4, !tbaa !11
  br label %170

170:                                              ; preds = %162, %108, %77
  br label %171

171:                                              ; preds = %170, %72, %67, %64, %61
  br label %172

172:                                              ; preds = %171
  %173 = load i32, ptr %11, align 4, !tbaa !9
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %11, align 4, !tbaa !9
  br label %55, !llvm.loop !17

175:                                              ; preds = %55
  br label %176

176:                                              ; preds = %175
  %177 = load i32, ptr %10, align 4, !tbaa !9
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %10, align 4, !tbaa !9
  br label %45, !llvm.loop !18

179:                                              ; preds = %45
  %180 = getelementptr inbounds [36 x float], ptr %17, i64 0, i64 0
  call void @_Z15SmoothHistogramPfi(ptr noundef %180, i32 noundef 36)
  %181 = getelementptr inbounds [36 x float], ptr %17, i64 0, i64 0
  call void @_Z15SmoothHistogramPfi(ptr noundef %181, i32 noundef 36)
  %182 = getelementptr inbounds [36 x float], ptr %17, i64 0, i64 0
  %183 = call noundef float @_Z12FindOriPeaksPfi(ptr noundef %182, i32 noundef 36)
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  ret float %183
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z15SmoothHistogramPfi(ptr noundef, i32 noundef) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_Z12FindOriPeaksPfi(ptr noundef, i32 noundef) #5

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

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


; 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 [119 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._Z7FindOriP12ImageContentS0_ii = external hidden unnamed_addr constant [40 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef float @_Z7FindOriP12ImageContentS0_ii(ptr noundef nonnull %0, ptr nocapture noundef readonly %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #4 {
  %5 = alloca [36 x float], align 16
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %5) #8
  %6 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %7 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(144) %5, i8 0, i64 144, i1 false), !tbaa !5
  %8 = add nsw i32 %2, -9
  %9 = add nsw i32 %2, 9
  %10 = add nsw i32 %3, -9
  %11 = add nsw i32 %3, 9
  %12 = add nsw i32 %6, -2
  %13 = add nsw i32 %7, -2
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  %15 = getelementptr inbounds i8, ptr %1, i64 16
  br label %16

16:                                               ; preds = %4, %.split64.us
  %.05265 = phi i32 [ %8, %4 ], [ %63, %.split64.us ]
  %17 = icmp slt i32 %.05265, %12
  %18 = zext nneg i32 %.05265 to i64
  %19 = sub nsw i32 %.05265, %2
  %20 = mul nsw i32 %19, %19
  %.fr = freeze i1 %17
  br i1 %.fr, label %.split, label %.split64.us

.split:                                           ; preds = %16, %61
  %.05362 = phi i32 [ %62, %61 ], [ %10, %16 ]
  %21 = or i32 %.05362, %.05265
  %or.cond = icmp sgt i32 %21, -1
  %22 = icmp slt i32 %.05362, %13
  %or.cond59 = select i1 %or.cond, i1 %22, i1 false
  br i1 %or.cond59, label %23, label %61

23:                                               ; preds = %.split
  %24 = load ptr, ptr %14, align 8, !tbaa !9
  %25 = getelementptr inbounds ptr, ptr %24, i64 %18
  %26 = load ptr, ptr %25, align 8, !tbaa !13
  %27 = zext nneg i32 %.05362 to i64
  %28 = getelementptr inbounds float, ptr %26, i64 %27
  %29 = load float, ptr %28, align 4, !tbaa !5
  %30 = sub nsw i32 %.05362, %3
  %31 = mul nsw i32 %30, %30
  %32 = add nuw nsw i32 %31, %20
  %33 = fcmp ogt float %29, 0.000000e+00
  %34 = icmp ult i32 %32, 82
  %or.cond60 = select i1 %33, i1 %34, i1 false
  br i1 %or.cond60, label %35, label %61

35:                                               ; preds = %23
  %36 = uitofp nneg i32 %32 to float
  %37 = fneg float %36
  %38 = fpext float %37 to double
  %39 = fdiv double %38, 1.800000e+01
  %40 = tail call double @exp(double noundef %39) #8
  %41 = load ptr, ptr %15, align 8, !tbaa !9
  %42 = getelementptr inbounds ptr, ptr %41, i64 %18
  %43 = load ptr, ptr %42, align 8, !tbaa !13
  %44 = getelementptr inbounds float, ptr %43, i64 %27
  %45 = load float, ptr %44, align 4, !tbaa !5
  %46 = fpext float %45 to double
  %47 = fadd double %46, 0x400921FB54442D18
  %48 = fadd double %47, 1.000000e-03
  %49 = fmul double %48, 3.600000e+01
  %50 = fdiv double %49, 0x401921FB54442D18
  %51 = fptosi double %50 to i32
  %52 = icmp ult i32 %51, 37
  br i1 %52, label %54, label %53

53:                                               ; preds = %35
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 444, ptr noundef nonnull @__PRETTY_FUNCTION__._Z7FindOriP12ImageContentS0_ii) #9
  unreachable

54:                                               ; preds = %35
  %55 = fptrunc double %40 to float
  %56 = tail call i32 @llvm.umin.i32(i32 %51, i32 35)
  %57 = zext nneg i32 %56 to i64
  %58 = getelementptr inbounds [36 x float], ptr %5, i64 0, i64 %57
  %59 = load float, ptr %58, align 4, !tbaa !5
  %60 = tail call float @llvm.fmuladd.f32(float %55, float %29, float %59)
  store float %60, ptr %58, align 4, !tbaa !5
  br label %61

61:                                               ; preds = %.split, %54, %23
  %62 = add nsw i32 %.05362, 1
  %.not55.not = icmp slt i32 %.05362, %11
  br i1 %.not55.not, label %.split, label %.split64.us, !llvm.loop !14

.split64.us:                                      ; preds = %61, %16
  %63 = add nsw i32 %.05265, 1
  %.not.not = icmp slt i32 %.05265, %9
  br i1 %.not.not, label %16, label %64, !llvm.loop !16

64:                                               ; preds = %.split64.us
  call void @_Z15SmoothHistogramPfi(ptr noundef nonnull %5, i32 noundef 36)
  call void @_Z15SmoothHistogramPfi(ptr noundef nonnull %5, i32 noundef 36)
  %65 = call noundef float @_Z12FindOriPeaksPfi(ptr noundef nonnull %5, i32 noundef 36)
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %5) #8
  ret float %65
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z15SmoothHistogramPfi(ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_Z12FindOriPeaksPfi(ptr noundef, i32 noundef) local_unnamed_addr #4

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { mustprogress 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 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 16}
!10 = !{!"_ZTS12ImageContent", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72}
!11 = !{!"int", !7, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!12, !12, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass