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

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

@_ZL4size = external hidden global i32, align 4
@_ZL13table_exp_lap = external hidden global ptr, align 8

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12initGaussLapf(float noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_Z9drawGaussP12ImageContentiif(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %3) #3 {
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca float, align 4
  %9 = alloca ptr, align 8
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca float, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  store float %3, ptr %8, align 4, !tbaa !11
  %18 = load float, ptr %8, align 4, !tbaa !11
  call void @_Z12initGaussLapf(float noundef %18)
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %19 = load ptr, ptr @_ZL13table_exp_lap, align 8, !tbaa !5
  store ptr %19, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store float 0.000000e+00, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store float 1.000000e+03, ptr %11, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %20 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %21 = sub nsw i32 0, %20
  store i32 %21, ptr %12, align 4, !tbaa !9
  br label %22

22:                                               ; preds = %100, %4
  %23 = load i32, ptr %12, align 4, !tbaa !9
  %24 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %25 = icmp sle i32 %23, %24
  br i1 %25, label %27, label %26

26:                                               ; preds = %22
  store i32 2, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %103

27:                                               ; preds = %22
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %28 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %29 = sub nsw i32 0, %28
  store i32 %29, ptr %14, align 4, !tbaa !9
  br label %30

30:                                               ; preds = %96, %27
  %31 = load i32, ptr %14, align 4, !tbaa !9
  %32 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %33 = icmp sle i32 %31, %32
  br i1 %33, label %35, label %34

34:                                               ; preds = %30
  store i32 5, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %99

35:                                               ; preds = %30
  %36 = load float, ptr %10, align 4, !tbaa !11
  %37 = load ptr, ptr %9, align 8, !tbaa !5
  %38 = load i32, ptr %12, align 4, !tbaa !9
  %39 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %40 = add nsw i32 %38, %39
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds ptr, ptr %37, i64 %41
  %43 = load ptr, ptr %42, align 8, !tbaa !5
  %44 = load i32, ptr %14, align 4, !tbaa !9
  %45 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %46 = add nsw i32 %44, %45
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds float, ptr %43, i64 %47
  %49 = load float, ptr %48, align 4, !tbaa !11
  %50 = fcmp olt float %36, %49
  br i1 %50, label %51, label %65

51:                                               ; preds = %35
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = load i32, ptr %12, align 4, !tbaa !9
  %54 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %55 = add nsw i32 %53, %54
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds ptr, ptr %52, i64 %56
  %58 = load ptr, ptr %57, align 8, !tbaa !5
  %59 = load i32, ptr %14, align 4, !tbaa !9
  %60 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %61 = add nsw i32 %59, %60
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds float, ptr %58, i64 %62
  %64 = load float, ptr %63, align 4, !tbaa !11
  store float %64, ptr %10, align 4, !tbaa !11
  br label %65

65:                                               ; preds = %51, %35
  %66 = load float, ptr %11, align 4, !tbaa !11
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  %68 = load i32, ptr %12, align 4, !tbaa !9
  %69 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %70 = add nsw i32 %68, %69
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds ptr, ptr %67, i64 %71
  %73 = load ptr, ptr %72, align 8, !tbaa !5
  %74 = load i32, ptr %14, align 4, !tbaa !9
  %75 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %76 = add nsw i32 %74, %75
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds float, ptr %73, i64 %77
  %79 = load float, ptr %78, align 4, !tbaa !11
  %80 = fcmp ogt float %66, %79
  br i1 %80, label %81, label %95

81:                                               ; preds = %65
  %82 = load ptr, ptr %9, align 8, !tbaa !5
  %83 = load i32, ptr %12, align 4, !tbaa !9
  %84 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %85 = add nsw i32 %83, %84
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds ptr, ptr %82, i64 %86
  %88 = load ptr, ptr %87, align 8, !tbaa !5
  %89 = load i32, ptr %14, align 4, !tbaa !9
  %90 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %91 = add nsw i32 %89, %90
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds float, ptr %88, i64 %92
  %94 = load float, ptr %93, align 4, !tbaa !11
  store float %94, ptr %11, align 4, !tbaa !11
  br label %95

95:                                               ; preds = %81, %65
  br label %96

96:                                               ; preds = %95
  %97 = load i32, ptr %14, align 4, !tbaa !9
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %14, align 4, !tbaa !9
  br label %30, !llvm.loop !13

99:                                               ; preds = %34
  br label %100

100:                                              ; preds = %99
  %101 = load i32, ptr %12, align 4, !tbaa !9
  %102 = add nsw i32 %101, 1
  store i32 %102, ptr %12, align 4, !tbaa !9
  br label %22, !llvm.loop !15

103:                                              ; preds = %26
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store float 0.000000e+00, ptr %15, align 4, !tbaa !11
  %104 = load float, ptr %11, align 4, !tbaa !11
  %105 = call noundef float @_ZSt4fabsf(float noundef %104)
  %106 = load float, ptr %10, align 4, !tbaa !11
  %107 = fcmp ogt float %105, %106
  br i1 %107, label %108, label %114

108:                                              ; preds = %103
  %109 = load float, ptr %11, align 4, !tbaa !11
  %110 = call noundef float @_ZSt4fabsf(float noundef %109)
  %111 = fpext float %110 to double
  %112 = fdiv double 1.270000e+02, %111
  %113 = fptrunc double %112 to float
  store float %113, ptr %15, align 4, !tbaa !11
  br label %119

114:                                              ; preds = %103
  %115 = load float, ptr %10, align 4, !tbaa !11
  %116 = fpext float %115 to double
  %117 = fdiv double 1.270000e+02, %116
  %118 = fptrunc double %117 to float
  store float %118, ptr %15, align 4, !tbaa !11
  br label %119

119:                                              ; preds = %114, %108
  %120 = load i32, ptr %6, align 4, !tbaa !9
  %121 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %122 = icmp slt i32 %120, %121
  br i1 %122, label %141, label %123

123:                                              ; preds = %119
  %124 = load i32, ptr %7, align 4, !tbaa !9
  %125 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %126 = icmp slt i32 %124, %125
  br i1 %126, label %141, label %127

127:                                              ; preds = %123
  %128 = load i32, ptr %6, align 4, !tbaa !9
  %129 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %130 = add nsw i32 %128, %129
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %131)
  %133 = icmp sge i32 %130, %132
  br i1 %133, label %141, label %134

134:                                              ; preds = %127
  %135 = load i32, ptr %7, align 4, !tbaa !9
  %136 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %137 = add nsw i32 %135, %136
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %138)
  %140 = icmp sge i32 %137, %139
  br i1 %140, label %141, label %142

141:                                              ; preds = %134, %127, %123, %119
  store i32 1, ptr %13, align 4
  br label %196

142:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %143 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %144 = sub nsw i32 0, %143
  store i32 %144, ptr %16, align 4, !tbaa !9
  br label %145

145:                                              ; preds = %192, %142
  %146 = load i32, ptr %16, align 4, !tbaa !9
  %147 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %148 = icmp sle i32 %146, %147
  br i1 %148, label %150, label %149

149:                                              ; preds = %145
  store i32 8, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %195

150:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %151 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %152 = sub nsw i32 0, %151
  store i32 %152, ptr %17, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %188, %150
  %154 = load i32, ptr %17, align 4, !tbaa !9
  %155 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %156 = icmp sle i32 %154, %155
  br i1 %156, label %158, label %157

157:                                              ; preds = %153
  store i32 11, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %191

158:                                              ; preds = %153
  %159 = load float, ptr %15, align 4, !tbaa !11
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  %161 = load i32, ptr %16, align 4, !tbaa !9
  %162 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %163 = add nsw i32 %161, %162
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds ptr, ptr %160, i64 %164
  %166 = load ptr, ptr %165, align 8, !tbaa !5
  %167 = load i32, ptr %17, align 4, !tbaa !9
  %168 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %169 = add nsw i32 %167, %168
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds float, ptr %166, i64 %170
  %172 = load float, ptr %171, align 4, !tbaa !11
  %173 = call float @llvm.fmuladd.f32(float %159, float %172, float 1.280000e+02)
  %174 = load ptr, ptr %5, align 8, !tbaa !5
  %175 = getelementptr inbounds %class.ImageContent, ptr %174, i32 0, i32 4
  %176 = load ptr, ptr %175, align 8, !tbaa !16
  %177 = load i32, ptr %7, align 4, !tbaa !9
  %178 = load i32, ptr %16, align 4, !tbaa !9
  %179 = add nsw i32 %177, %178
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds ptr, ptr %176, i64 %180
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  %183 = load i32, ptr %6, align 4, !tbaa !9
  %184 = load i32, ptr %17, align 4, !tbaa !9
  %185 = add nsw i32 %183, %184
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds float, ptr %182, i64 %186
  store float %173, ptr %187, align 4, !tbaa !11
  br label %188

188:                                              ; preds = %158
  %189 = load i32, ptr %17, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %17, align 4, !tbaa !9
  br label %153, !llvm.loop !18

191:                                              ; preds = %157
  br label %192

192:                                              ; preds = %191
  %193 = load i32, ptr %16, align 4, !tbaa !9
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %16, align 4, !tbaa !9
  br label %145, !llvm.loop !19

195:                                              ; preds = %149
  store i32 0, ptr %13, align 4
  br label %196

196:                                              ; preds = %195, %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  %197 = load i32, ptr %13, align 4
  switch i32 %197, label %199 [
    i32 0, label %198
    i32 1, label %198
  ]

198:                                              ; preds = %196, %196
  ret void

199:                                              ; preds = %196
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) #2

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { 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 = distinct !{!15, !14}
!16 = !{!17, !6, i64 16}
!17 = !{!"_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}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !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"

@_ZL4size = external hidden local_unnamed_addr global i32, align 4
@_ZL13table_exp_lap = external hidden local_unnamed_addr global ptr, align 8

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #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 uwtable
declare dso_local void @_Z12initGaussLapf(float noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z9drawGaussP12ImageContentiif(ptr noundef %0, i32 noundef %1, i32 noundef %2, float noundef %3) local_unnamed_addr #2 {
  tail call void @_Z12initGaussLapf(float noundef %3)
  %5 = load ptr, ptr @_ZL13table_exp_lap, align 8, !tbaa !5
  %6 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %.not69 = icmp slt i32 %6, 0
  br i1 %.not69, label %._crit_edge73, label %.preheader63.preheader

.preheader63.preheader:                           ; preds = %4
  %7 = sub nsw i32 0, %6
  %8 = sext i32 %7 to i64
  %9 = zext nneg i32 %6 to i64
  %10 = add nuw i32 %6, 1
  %invariant.gep98 = getelementptr ptr, ptr %5, i64 %9
  %indvars.iv.next.prol = add nsw i64 %8, 1
  %11 = icmp eq i32 %6, 0
  br label %.preheader63

.preheader63:                                     ; preds = %.preheader63.preheader, %._crit_edge
  %indvars.iv83 = phi i64 [ %8, %.preheader63.preheader ], [ %indvars.iv.next84, %._crit_edge ]
  %.04571 = phi float [ 1.000000e+03, %.preheader63.preheader ], [ %.2.lcssa, %._crit_edge ]
  %.04670 = phi float [ 0.000000e+00, %.preheader63.preheader ], [ %.248.lcssa, %._crit_edge ]
  %gep99 = getelementptr ptr, ptr %invariant.gep98, i64 %indvars.iv83
  %12 = load ptr, ptr %gep99, align 8, !tbaa !5
  %invariant.gep = getelementptr float, ptr %12, i64 %9
  %gep.prol = getelementptr float, ptr %invariant.gep, i64 %8
  %13 = load float, ptr %gep.prol, align 4, !tbaa !11
  %14 = fcmp olt float %.04670, %13
  %.248.prol = select i1 %14, float %13, float %.04670
  %15 = fcmp ogt float %.04571, %13
  %.2.prol = select i1 %15, float %13, float %.04571
  br i1 %11, label %._crit_edge, label %.preheader63.new

.preheader63.new:                                 ; preds = %.preheader63
  %invariant.gep111 = getelementptr i8, ptr %invariant.gep, i64 4
  br label %18

._crit_edge73:                                    ; preds = %._crit_edge, %4
  %.046.lcssa = phi float [ 0.000000e+00, %4 ], [ %.248.lcssa, %._crit_edge ]
  %.045.lcssa = phi float [ 1.000000e+03, %4 ], [ %.2.lcssa, %._crit_edge ]
  %16 = tail call noundef float @_ZSt4fabsf(float noundef %.045.lcssa)
  %17 = fcmp ogt float %16, %.046.lcssa
  br i1 %17, label %25, label %27

._crit_edge:                                      ; preds = %18, %.preheader63
  %.248.lcssa = phi float [ %.248.prol, %.preheader63 ], [ %.248.1, %18 ]
  %.2.lcssa = phi float [ %.2.prol, %.preheader63 ], [ %.2.1, %18 ]
  %indvars.iv.next84 = add nsw i64 %indvars.iv83, 1
  %lftr.wideiv86 = trunc i64 %indvars.iv.next84 to i32
  %exitcond87.not = icmp eq i32 %10, %lftr.wideiv86
  br i1 %exitcond87.not, label %._crit_edge73, label %.preheader63, !llvm.loop !13

18:                                               ; preds = %18, %.preheader63.new
  %indvars.iv = phi i64 [ %indvars.iv.next.prol, %.preheader63.new ], [ %indvars.iv.next.1, %18 ]
  %.166 = phi float [ %.2.prol, %.preheader63.new ], [ %.2.1, %18 ]
  %.14765 = phi float [ %.248.prol, %.preheader63.new ], [ %.248.1, %18 ]
  %gep = getelementptr float, ptr %invariant.gep, i64 %indvars.iv
  %19 = load float, ptr %gep, align 4, !tbaa !11
  %20 = fcmp olt float %.14765, %19
  %.248 = select i1 %20, float %19, float %.14765
  %21 = fcmp ogt float %.166, %19
  %.2 = select i1 %21, float %19, float %.166
  %gep112 = getelementptr float, ptr %invariant.gep111, i64 %indvars.iv
  %22 = load float, ptr %gep112, align 4, !tbaa !11
  %23 = fcmp olt float %.248, %22
  %.248.1 = select i1 %23, float %22, float %.248
  %24 = fcmp ogt float %.2, %22
  %.2.1 = select i1 %24, float %22, float %.2
  %indvars.iv.next.1 = add nsw i64 %indvars.iv, 2
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.not.1 = icmp eq i32 %10, %lftr.wideiv.1
  br i1 %exitcond.not.1, label %._crit_edge, label %18, !llvm.loop !15

25:                                               ; preds = %._crit_edge73
  %26 = tail call noundef float @_ZSt4fabsf(float noundef %.045.lcssa)
  br label %27

27:                                               ; preds = %._crit_edge73, %25
  %.pn = phi float [ %26, %25 ], [ %.046.lcssa, %._crit_edge73 ]
  %.042 = fdiv float 1.270000e+02, %.pn
  %28 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %29 = icmp sgt i32 %28, %1
  %30 = icmp sgt i32 %28, %2
  %or.cond = or i1 %29, %30
  br i1 %or.cond, label %.loopexit, label %31

31:                                               ; preds = %27
  %32 = add nsw i32 %28, %1
  %33 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %.not58 = icmp slt i32 %32, %33
  br i1 %.not58, label %34, label %.loopexit

34:                                               ; preds = %31
  %35 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %36 = add nsw i32 %35, %2
  %37 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %.not59 = icmp slt i32 %36, %37
  br i1 %.not59, label %38, label %.loopexit

38:                                               ; preds = %34
  %39 = load i32, ptr @_ZL4size, align 4, !tbaa !9
  %.not6080 = icmp slt i32 %39, 0
  br i1 %.not6080, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %38
  %40 = sub nsw i32 0, %39
  %41 = getelementptr inbounds i8, ptr %0, i64 16
  %42 = load ptr, ptr %41, align 8, !tbaa !16
  %43 = sext i32 %40 to i64
  %44 = zext nneg i32 %39 to i64
  %45 = sext i32 %1 to i64
  %46 = add nuw i32 %39, 1
  %47 = sext i32 %2 to i64
  %invariant.gep104 = getelementptr ptr, ptr %5, i64 %44
  %invariant.gep106 = getelementptr ptr, ptr %42, i64 %47
  %48 = sub nsw i64 %45, %44
  %49 = shl nsw i64 %48, 2
  %50 = shl nuw i32 %39, 1
  %51 = add nuw i32 %39, 1
  %min.iters.check = icmp ult i32 %39, 4
  %52 = and i32 %50, -8
  %n.vec = zext i32 %52 to i64
  %ind.end = add nsw i64 %n.vec, %43
  %broadcast.splatinsert = insertelement <4 x float> poison, float %.042, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge79
  %indvars.iv93 = phi i64 [ %43, %.preheader.lr.ph ], [ %indvars.iv.next94, %._crit_edge79 ]
  %gep105 = getelementptr ptr, ptr %invariant.gep104, i64 %indvars.iv93
  %53 = load ptr, ptr %gep105, align 8, !tbaa !5
  %gep107 = getelementptr ptr, ptr %invariant.gep106, i64 %indvars.iv93
  %54 = load ptr, ptr %gep107, align 8, !tbaa !5
  %invariant.gep100 = getelementptr float, ptr %53, i64 %44
  %invariant.gep102 = getelementptr float, ptr %54, i64 %45
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %vector.body, %vector.memcheck, %.preheader
  %indvars.iv88.ph = phi i64 [ %43, %vector.memcheck ], [ %43, %.preheader ], [ %ind.end, %vector.body ]
  %55 = trunc i64 %indvars.iv88.ph to i32
  %56 = sub i32 %51, %55
  %57 = sub i32 %39, %55
  %xtraiter109 = and i32 %56, 3
  %lcmp.mod110.not = icmp eq i32 %xtraiter109, 0
  br i1 %lcmp.mod110.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv88.prol = phi i64 [ %indvars.iv.next89.prol, %scalar.ph.prol ], [ %indvars.iv88.ph, %scalar.ph.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %gep101.prol = getelementptr float, ptr %invariant.gep100, i64 %indvars.iv88.prol
  %58 = load float, ptr %gep101.prol, align 4, !tbaa !11
  %59 = tail call float @llvm.fmuladd.f32(float %.042, float %58, float 1.280000e+02)
  %gep103.prol = getelementptr float, ptr %invariant.gep102, i64 %indvars.iv88.prol
  store float %59, ptr %gep103.prol, align 4, !tbaa !11
  %indvars.iv.next89.prol = add nsw i64 %indvars.iv88.prol, 1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter109
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !18

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv88.unr = phi i64 [ %indvars.iv88.ph, %scalar.ph.preheader ], [ %indvars.iv.next89.prol, %scalar.ph.prol ]
  %60 = icmp ult i32 %57, 3
  br i1 %60, label %._crit_edge79, label %scalar.ph

vector.memcheck:                                  ; preds = %.preheader
  %61 = ptrtoint ptr %54 to i64
  %62 = ptrtoint ptr %53 to i64
  %63 = add i64 %49, %61
  %64 = sub i64 %63, %62
  %diff.check = icmp ult i64 %64, 32
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %offset.idx = add i64 %index, %43
  %65 = getelementptr float, ptr %invariant.gep100, i64 %offset.idx
  %66 = getelementptr i8, ptr %65, i64 16
  %wide.load = load <4 x float>, ptr %65, align 4, !tbaa !11
  %wide.load108 = load <4 x float>, ptr %66, align 4, !tbaa !11
  %67 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load, <4 x float> <float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02>)
  %68 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load108, <4 x float> <float 1.280000e+02, float 1.280000e+02, float 1.280000e+02, float 1.280000e+02>)
  %69 = getelementptr float, ptr %invariant.gep102, i64 %offset.idx
  %70 = getelementptr i8, ptr %69, i64 16
  store <4 x float> %67, ptr %69, align 4, !tbaa !11
  store <4 x float> %68, ptr %70, align 4, !tbaa !11
  %index.next = add nuw i64 %index, 8
  %71 = icmp eq i64 %index.next, %n.vec
  br i1 %71, label %scalar.ph.preheader, label %vector.body, !llvm.loop !20

._crit_edge79:                                    ; preds = %scalar.ph, %scalar.ph.prol.loopexit
  %indvars.iv.next94 = add nsw i64 %indvars.iv93, 1
  %lftr.wideiv96 = trunc i64 %indvars.iv.next94 to i32
  %exitcond97.not = icmp eq i32 %46, %lftr.wideiv96
  br i1 %exitcond97.not, label %.loopexit, label %.preheader, !llvm.loop !23

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv88 = phi i64 [ %indvars.iv.next89.3, %scalar.ph ], [ %indvars.iv88.unr, %scalar.ph.prol.loopexit ]
  %gep101 = getelementptr float, ptr %invariant.gep100, i64 %indvars.iv88
  %72 = load float, ptr %gep101, align 4, !tbaa !11
  %73 = tail call float @llvm.fmuladd.f32(float %.042, float %72, float 1.280000e+02)
  %gep103 = getelementptr float, ptr %invariant.gep102, i64 %indvars.iv88
  store float %73, ptr %gep103, align 4, !tbaa !11
  %indvars.iv.next89 = add nsw i64 %indvars.iv88, 1
  %gep101.1 = getelementptr float, ptr %invariant.gep100, i64 %indvars.iv.next89
  %74 = load float, ptr %gep101.1, align 4, !tbaa !11
  %75 = tail call float @llvm.fmuladd.f32(float %.042, float %74, float 1.280000e+02)
  %gep103.1 = getelementptr float, ptr %invariant.gep102, i64 %indvars.iv.next89
  store float %75, ptr %gep103.1, align 4, !tbaa !11
  %indvars.iv.next89.1 = add nsw i64 %indvars.iv88, 2
  %gep101.2 = getelementptr float, ptr %invariant.gep100, i64 %indvars.iv.next89.1
  %76 = load float, ptr %gep101.2, align 4, !tbaa !11
  %77 = tail call float @llvm.fmuladd.f32(float %.042, float %76, float 1.280000e+02)
  %gep103.2 = getelementptr float, ptr %invariant.gep102, i64 %indvars.iv.next89.1
  store float %77, ptr %gep103.2, align 4, !tbaa !11
  %indvars.iv.next89.2 = add nsw i64 %indvars.iv88, 3
  %gep101.3 = getelementptr float, ptr %invariant.gep100, i64 %indvars.iv.next89.2
  %78 = load float, ptr %gep101.3, align 4, !tbaa !11
  %79 = tail call float @llvm.fmuladd.f32(float %.042, float %78, float 1.280000e+02)
  %gep103.3 = getelementptr float, ptr %invariant.gep102, i64 %indvars.iv.next89.2
  store float %79, ptr %gep103.3, align 4, !tbaa !11
  %indvars.iv.next89.3 = add nsw i64 %indvars.iv88, 4
  %lftr.wideiv91.3 = trunc i64 %indvars.iv.next89.3 to i32
  %exitcond92.not.3 = icmp eq i32 %46, %lftr.wideiv91.3
  br i1 %exitcond92.not.3, label %._crit_edge79, label %scalar.ph, !llvm.loop !24

.loopexit:                                        ; preds = %._crit_edge79, %38, %27, %31, %34
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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 = distinct !{!15, !14}
!16 = !{!17, !6, i64 16}
!17 = !{!"_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}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !14, !21, !22}
!21 = !{!"llvm.loop.isvectorized", i32 1}
!22 = !{!"llvm.loop.unroll.runtime.disable"}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14, !21}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,SROAPass,SimplifyCFGPass,TailCallElimPass