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

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

; 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 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt5atan2ff(float noundef, float noundef) #1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z12LapOriImagesP12ImageContentS0_S0_(ptr noundef %0, ptr noundef %1, ptr noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca float, align 4
  %8 = alloca float, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %14)
  store i32 %15, ptr %10, align 4, !tbaa !9
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %16)
  store i32 %17, ptr %11, align 4, !tbaa !9
  %18 = load ptr, ptr %4, align 8, !tbaa !5
  %19 = getelementptr inbounds %class.ImageContent, ptr %18, i32 0, i32 4
  %20 = load ptr, ptr %19, align 8, !tbaa !11
  store ptr %20, ptr %9, align 8, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %21

21:                                               ; preds = %310, %3
  %22 = load i32, ptr %12, align 4, !tbaa !9
  %23 = load i32, ptr %10, align 4, !tbaa !9
  %24 = icmp slt i32 %22, %23
  br i1 %24, label %25, label %313

25:                                               ; preds = %21
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %26

26:                                               ; preds = %306, %25
  %27 = load i32, ptr %13, align 4, !tbaa !9
  %28 = load i32, ptr %11, align 4, !tbaa !9
  %29 = icmp slt i32 %27, %28
  br i1 %29, label %30, label %309

30:                                               ; preds = %26
  %31 = load i32, ptr %13, align 4, !tbaa !9
  %32 = icmp eq i32 %31, 0
  br i1 %32, label %38, label %33

33:                                               ; preds = %30
  %34 = load i32, ptr %13, align 4, !tbaa !9
  %35 = load i32, ptr %11, align 4, !tbaa !9
  %36 = sub nsw i32 %35, 1
  %37 = icmp eq i32 %34, %36
  br i1 %37, label %38, label %39

38:                                               ; preds = %33, %30
  store float 0.000000e+00, ptr %7, align 4, !tbaa !13
  br label %154

39:                                               ; preds = %33
  %40 = load i32, ptr %13, align 4, !tbaa !9
  %41 = icmp eq i32 %40, 1
  br i1 %41, label %42, label %77

42:                                               ; preds = %39
  %43 = load ptr, ptr %9, align 8, !tbaa !5
  %44 = load i32, ptr %12, align 4, !tbaa !9
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds ptr, ptr %43, i64 %45
  %47 = load ptr, ptr %46, align 8, !tbaa !5
  %48 = load i32, ptr %13, align 4, !tbaa !9
  %49 = add nsw i32 %48, 2
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds float, ptr %47, i64 %50
  %52 = load float, ptr %51, align 4, !tbaa !13
  %53 = load ptr, ptr %9, align 8, !tbaa !5
  %54 = load i32, ptr %12, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds ptr, ptr %53, i64 %55
  %57 = load ptr, ptr %56, align 8, !tbaa !5
  %58 = load i32, ptr %13, align 4, !tbaa !9
  %59 = sub nsw i32 %58, 1
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds float, ptr %57, i64 %60
  %62 = load float, ptr %61, align 4, !tbaa !13
  %63 = fadd float %52, %62
  %64 = fpext float %63 to double
  %65 = load ptr, ptr %9, align 8, !tbaa !5
  %66 = load i32, ptr %12, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds ptr, ptr %65, i64 %67
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %70 = load i32, ptr %13, align 4, !tbaa !9
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds float, ptr %69, i64 %71
  %73 = load float, ptr %72, align 4, !tbaa !13
  %74 = fpext float %73 to double
  %75 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %74, double %64)
  %76 = fptrunc double %75 to float
  store float %76, ptr %7, align 4, !tbaa !13
  br label %153

77:                                               ; preds = %39
  %78 = load i32, ptr %13, align 4, !tbaa !9
  %79 = load i32, ptr %11, align 4, !tbaa !9
  %80 = sub nsw i32 %79, 2
  %81 = icmp eq i32 %78, %80
  br i1 %81, label %82, label %117

82:                                               ; preds = %77
  %83 = load ptr, ptr %9, align 8, !tbaa !5
  %84 = load i32, ptr %12, align 4, !tbaa !9
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds ptr, ptr %83, i64 %85
  %87 = load ptr, ptr %86, align 8, !tbaa !5
  %88 = load i32, ptr %13, align 4, !tbaa !9
  %89 = add nsw i32 %88, 1
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds float, ptr %87, i64 %90
  %92 = load float, ptr %91, align 4, !tbaa !13
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = load i32, ptr %12, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds ptr, ptr %93, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !5
  %98 = load i32, ptr %13, align 4, !tbaa !9
  %99 = sub nsw i32 %98, 2
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds float, ptr %97, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !13
  %103 = fadd float %92, %102
  %104 = fpext float %103 to double
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  %106 = load i32, ptr %12, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds ptr, ptr %105, i64 %107
  %109 = load ptr, ptr %108, align 8, !tbaa !5
  %110 = load i32, ptr %13, align 4, !tbaa !9
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds float, ptr %109, i64 %111
  %113 = load float, ptr %112, align 4, !tbaa !13
  %114 = fpext float %113 to double
  %115 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %114, double %104)
  %116 = fptrunc double %115 to float
  store float %116, ptr %7, align 4, !tbaa !13
  br label %152

117:                                              ; preds = %77
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = load i32, ptr %12, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds ptr, ptr %118, i64 %120
  %122 = load ptr, ptr %121, align 8, !tbaa !5
  %123 = load i32, ptr %13, align 4, !tbaa !9
  %124 = add nsw i32 %123, 2
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds float, ptr %122, i64 %125
  %127 = load float, ptr %126, align 4, !tbaa !13
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = load i32, ptr %12, align 4, !tbaa !9
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds ptr, ptr %128, i64 %130
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = load i32, ptr %13, align 4, !tbaa !9
  %134 = sub nsw i32 %133, 2
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds float, ptr %132, i64 %135
  %137 = load float, ptr %136, align 4, !tbaa !13
  %138 = fadd float %127, %137
  %139 = fpext float %138 to double
  %140 = load ptr, ptr %9, align 8, !tbaa !5
  %141 = load i32, ptr %12, align 4, !tbaa !9
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds ptr, ptr %140, i64 %142
  %144 = load ptr, ptr %143, align 8, !tbaa !5
  %145 = load i32, ptr %13, align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds float, ptr %144, i64 %146
  %148 = load float, ptr %147, align 4, !tbaa !13
  %149 = fpext float %148 to double
  %150 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %149, double %139)
  %151 = fptrunc double %150 to float
  store float %151, ptr %7, align 4, !tbaa !13
  br label %152

152:                                              ; preds = %117, %82
  br label %153

153:                                              ; preds = %152, %42
  br label %154

154:                                              ; preds = %153, %38
  %155 = load i32, ptr %12, align 4, !tbaa !9
  %156 = icmp eq i32 %155, 0
  br i1 %156, label %162, label %157

157:                                              ; preds = %154
  %158 = load i32, ptr %12, align 4, !tbaa !9
  %159 = load i32, ptr %10, align 4, !tbaa !9
  %160 = sub nsw i32 %159, 1
  %161 = icmp eq i32 %158, %160
  br i1 %161, label %162, label %163

162:                                              ; preds = %157, %154
  store float 0.000000e+00, ptr %8, align 4, !tbaa !13
  br label %278

163:                                              ; preds = %157
  %164 = load i32, ptr %12, align 4, !tbaa !9
  %165 = icmp eq i32 %164, 1
  br i1 %165, label %166, label %201

166:                                              ; preds = %163
  %167 = load ptr, ptr %9, align 8, !tbaa !5
  %168 = load i32, ptr %12, align 4, !tbaa !9
  %169 = add nsw i32 %168, 2
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds ptr, ptr %167, i64 %170
  %172 = load ptr, ptr %171, align 8, !tbaa !5
  %173 = load i32, ptr %13, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds float, ptr %172, i64 %174
  %176 = load float, ptr %175, align 4, !tbaa !13
  %177 = load ptr, ptr %9, align 8, !tbaa !5
  %178 = load i32, ptr %12, align 4, !tbaa !9
  %179 = sub nsw i32 %178, 1
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds ptr, ptr %177, i64 %180
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  %183 = load i32, ptr %13, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds float, ptr %182, i64 %184
  %186 = load float, ptr %185, align 4, !tbaa !13
  %187 = fadd float %176, %186
  %188 = fpext float %187 to double
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = load i32, ptr %12, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds ptr, ptr %189, i64 %191
  %193 = load ptr, ptr %192, align 8, !tbaa !5
  %194 = load i32, ptr %13, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds float, ptr %193, i64 %195
  %197 = load float, ptr %196, align 4, !tbaa !13
  %198 = fpext float %197 to double
  %199 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %198, double %188)
  %200 = fptrunc double %199 to float
  store float %200, ptr %8, align 4, !tbaa !13
  br label %277

201:                                              ; preds = %163
  %202 = load i32, ptr %12, align 4, !tbaa !9
  %203 = load i32, ptr %10, align 4, !tbaa !9
  %204 = sub nsw i32 %203, 2
  %205 = icmp eq i32 %202, %204
  br i1 %205, label %206, label %241

206:                                              ; preds = %201
  %207 = load ptr, ptr %9, align 8, !tbaa !5
  %208 = load i32, ptr %12, align 4, !tbaa !9
  %209 = add nsw i32 %208, 1
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds ptr, ptr %207, i64 %210
  %212 = load ptr, ptr %211, align 8, !tbaa !5
  %213 = load i32, ptr %13, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds float, ptr %212, i64 %214
  %216 = load float, ptr %215, align 4, !tbaa !13
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = load i32, ptr %12, align 4, !tbaa !9
  %219 = sub nsw i32 %218, 2
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds ptr, ptr %217, i64 %220
  %222 = load ptr, ptr %221, align 8, !tbaa !5
  %223 = load i32, ptr %13, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds float, ptr %222, i64 %224
  %226 = load float, ptr %225, align 4, !tbaa !13
  %227 = fadd float %216, %226
  %228 = fpext float %227 to double
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = load i32, ptr %12, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds ptr, ptr %229, i64 %231
  %233 = load ptr, ptr %232, align 8, !tbaa !5
  %234 = load i32, ptr %13, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds float, ptr %233, i64 %235
  %237 = load float, ptr %236, align 4, !tbaa !13
  %238 = fpext float %237 to double
  %239 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %238, double %228)
  %240 = fptrunc double %239 to float
  store float %240, ptr %8, align 4, !tbaa !13
  br label %276

241:                                              ; preds = %201
  %242 = load ptr, ptr %9, align 8, !tbaa !5
  %243 = load i32, ptr %12, align 4, !tbaa !9
  %244 = sub nsw i32 %243, 2
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds ptr, ptr %242, i64 %245
  %247 = load ptr, ptr %246, align 8, !tbaa !5
  %248 = load i32, ptr %13, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds float, ptr %247, i64 %249
  %251 = load float, ptr %250, align 4, !tbaa !13
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  %253 = load i32, ptr %12, align 4, !tbaa !9
  %254 = add nsw i32 %253, 2
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds ptr, ptr %252, i64 %255
  %257 = load ptr, ptr %256, align 8, !tbaa !5
  %258 = load i32, ptr %13, align 4, !tbaa !9
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds float, ptr %257, i64 %259
  %261 = load float, ptr %260, align 4, !tbaa !13
  %262 = fadd float %251, %261
  %263 = fpext float %262 to double
  %264 = load ptr, ptr %9, align 8, !tbaa !5
  %265 = load i32, ptr %12, align 4, !tbaa !9
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds ptr, ptr %264, i64 %266
  %268 = load ptr, ptr %267, align 8, !tbaa !5
  %269 = load i32, ptr %13, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds float, ptr %268, i64 %270
  %272 = load float, ptr %271, align 4, !tbaa !13
  %273 = fpext float %272 to double
  %274 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %273, double %263)
  %275 = fptrunc double %274 to float
  store float %275, ptr %8, align 4, !tbaa !13
  br label %276

276:                                              ; preds = %241, %206
  br label %277

277:                                              ; preds = %276, %166
  br label %278

278:                                              ; preds = %277, %162
  %279 = load float, ptr %7, align 4, !tbaa !13
  %280 = load float, ptr %8, align 4, !tbaa !13
  %281 = fadd float %279, %280
  %282 = call noundef float @_ZSt4fabsf(float noundef %281)
  %283 = load ptr, ptr %5, align 8, !tbaa !5
  %284 = getelementptr inbounds %class.ImageContent, ptr %283, i32 0, i32 4
  %285 = load ptr, ptr %284, align 8, !tbaa !11
  %286 = load i32, ptr %12, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds ptr, ptr %285, i64 %287
  %289 = load ptr, ptr %288, align 8, !tbaa !5
  %290 = load i32, ptr %13, align 4, !tbaa !9
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds float, ptr %289, i64 %291
  store float %282, ptr %292, align 4, !tbaa !13
  %293 = load float, ptr %8, align 4, !tbaa !13
  %294 = load float, ptr %7, align 4, !tbaa !13
  %295 = call noundef float @_ZSt5atan2ff(float noundef %293, float noundef %294)
  %296 = load ptr, ptr %6, align 8, !tbaa !5
  %297 = getelementptr inbounds %class.ImageContent, ptr %296, i32 0, i32 4
  %298 = load ptr, ptr %297, align 8, !tbaa !11
  %299 = load i32, ptr %12, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds ptr, ptr %298, i64 %300
  %302 = load ptr, ptr %301, align 8, !tbaa !5
  %303 = load i32, ptr %13, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds float, ptr %302, i64 %304
  store float %295, ptr %305, align 4, !tbaa !13
  br label %306

306:                                              ; preds = %278
  %307 = load i32, ptr %13, align 4, !tbaa !9
  %308 = add nsw i32 %307, 1
  store i32 %308, ptr %13, align 4, !tbaa !9
  br label %26, !llvm.loop !15

309:                                              ; preds = %26
  br label %310

310:                                              ; preds = %309
  %311 = load i32, ptr %12, align 4, !tbaa !9
  %312 = add nsw i32 %311, 1
  store i32 %312, ptr %12, align 4, !tbaa !9
  br label %21, !llvm.loop !17

313:                                              ; preds = %21
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #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
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

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

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 = { 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, !6, i64 16}
!12 = !{!"_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}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}


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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt5atan2ff(float noundef, float 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: mustprogress nounwind uwtable
define dso_local void @_Z12LapOriImagesP12ImageContentS0_S0_(ptr noundef nonnull %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2) local_unnamed_addr #2 {
  %4 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %5 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %6 = getelementptr inbounds i8, ptr %0, i64 16
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = icmp sgt i32 %4, 0
  br i1 %8, label %.preheader.lr.ph, label %._crit_edge94

.preheader.lr.ph:                                 ; preds = %3
  %9 = icmp sgt i32 %5, 0
  %10 = getelementptr inbounds i8, ptr %7, i64 24
  %11 = getelementptr inbounds i8, ptr %7, i64 8
  %12 = getelementptr inbounds i8, ptr %1, i64 16
  %13 = getelementptr inbounds i8, ptr %2, i64 16
  br i1 %9, label %.preheader.us.preheader, label %._crit_edge94

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %14 = add nsw i32 %4, -2
  %15 = add nsw i32 %4, -1
  %16 = add nsw i32 %5, -2
  %17 = add nsw i32 %5, -1
  %18 = zext nneg i32 %17 to i64
  %19 = zext i32 %16 to i64
  %20 = zext nneg i32 %15 to i64
  %21 = zext i32 %14 to i64
  %wide.trip.count107 = zext nneg i32 %4 to i64
  %wide.trip.count = zext nneg i32 %5 to i64
  %exitcond.peel.not = icmp eq i32 %5, 1
  %22 = icmp eq i32 %17, 1
  %exitcond.peel102.not = icmp eq i32 %5, 2
  br label %23

23:                                               ; preds = %._crit_edge.us, %.preheader.us.preheader
  %indvars.iv104 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next105, %._crit_edge.us ]
  %24 = getelementptr ptr, ptr %7, i64 %indvars.iv104
  %25 = icmp eq i64 %indvars.iv104, 0
  %26 = icmp eq i64 %indvars.iv104, %20
  %or.cond91.us = select i1 %25, i1 true, i1 %26
  %27 = icmp eq i64 %indvars.iv104, 1
  %28 = icmp eq i64 %indvars.iv104, %21
  %29 = getelementptr i8, ptr %24, i64 -16
  %30 = getelementptr inbounds i8, ptr %24, i64 16
  %31 = getelementptr inbounds i8, ptr %24, i64 8
  br i1 %or.cond91.us, label %67, label %32

32:                                               ; preds = %23
  br i1 %27, label %55, label %33

33:                                               ; preds = %32
  %34 = load ptr, ptr %24, align 8, !tbaa !11
  %35 = load float, ptr %34, align 4, !tbaa !12
  %36 = fpext float %35 to double
  br i1 %28, label %46, label %37

37:                                               ; preds = %33
  %38 = load ptr, ptr %29, align 8, !tbaa !11
  %39 = load float, ptr %38, align 4, !tbaa !12
  %40 = load ptr, ptr %30, align 8, !tbaa !11
  %41 = load float, ptr %40, align 4, !tbaa !12
  %42 = fadd float %39, %41
  %43 = fpext float %42 to double
  %44 = tail call double @llvm.fmuladd.f64(double %36, double -2.000000e+00, double %43)
  %45 = fptrunc double %44 to float
  br label %67

46:                                               ; preds = %33
  %47 = load ptr, ptr %31, align 8, !tbaa !11
  %48 = load float, ptr %47, align 4, !tbaa !12
  %49 = load ptr, ptr %29, align 8, !tbaa !11
  %50 = load float, ptr %49, align 4, !tbaa !12
  %51 = fadd float %48, %50
  %52 = fpext float %51 to double
  %53 = tail call double @llvm.fmuladd.f64(double %36, double -2.000000e+00, double %52)
  %54 = fptrunc double %53 to float
  br label %67

55:                                               ; preds = %32
  %56 = load ptr, ptr %10, align 8, !tbaa !11
  %57 = load float, ptr %56, align 4, !tbaa !12
  %58 = load ptr, ptr %7, align 8, !tbaa !11
  %59 = load float, ptr %58, align 4, !tbaa !12
  %60 = fadd float %57, %59
  %61 = fpext float %60 to double
  %62 = load ptr, ptr %11, align 8, !tbaa !11
  %63 = load float, ptr %62, align 4, !tbaa !12
  %64 = fpext float %63 to double
  %65 = tail call double @llvm.fmuladd.f64(double %64, double -2.000000e+00, double %61)
  %66 = fptrunc double %65 to float
  br label %67

67:                                               ; preds = %55, %46, %37, %23
  %.086.us.peel = phi float [ %66, %55 ], [ %54, %46 ], [ %45, %37 ], [ 0.000000e+00, %23 ]
  %68 = fadd float %.086.us.peel, 0.000000e+00
  %69 = tail call noundef float @_ZSt4fabsf(float noundef %68)
  %70 = load ptr, ptr %12, align 8, !tbaa !5
  %71 = getelementptr inbounds ptr, ptr %70, i64 %indvars.iv104
  %72 = load ptr, ptr %71, align 8, !tbaa !11
  store float %69, ptr %72, align 4, !tbaa !12
  %73 = tail call noundef float @_ZSt5atan2ff(float noundef %.086.us.peel, float noundef 0.000000e+00)
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = getelementptr inbounds ptr, ptr %74, i64 %indvars.iv104
  %76 = load ptr, ptr %75, align 8, !tbaa !11
  store float %73, ptr %76, align 4, !tbaa !12
  br i1 %exitcond.peel.not, label %._crit_edge.us, label %.peel.next

.peel.next:                                       ; preds = %67
  br i1 %22, label %89, label %77

77:                                               ; preds = %.peel.next
  %78 = load ptr, ptr %24, align 8, !tbaa !11
  %79 = getelementptr inbounds i8, ptr %78, i64 12
  %80 = load float, ptr %79, align 4, !tbaa !12
  %81 = load float, ptr %78, align 4, !tbaa !12
  %82 = fadd float %80, %81
  %83 = fpext float %82 to double
  %84 = getelementptr inbounds i8, ptr %78, i64 4
  %85 = load float, ptr %84, align 4, !tbaa !12
  %86 = fpext float %85 to double
  %87 = tail call double @llvm.fmuladd.f64(double %86, double -2.000000e+00, double %83)
  %88 = fptrunc double %87 to float
  br label %89

89:                                               ; preds = %77, %.peel.next
  %.085.us.peel99 = phi float [ %88, %77 ], [ 0.000000e+00, %.peel.next ]
  br i1 %or.cond91.us, label %133, label %90

90:                                               ; preds = %89
  br i1 %27, label %118, label %91

91:                                               ; preds = %90
  %92 = load ptr, ptr %24, align 8, !tbaa !11
  %93 = getelementptr inbounds i8, ptr %92, i64 4
  %94 = load float, ptr %93, align 4, !tbaa !12
  %95 = fpext float %94 to double
  br i1 %28, label %107, label %96

96:                                               ; preds = %91
  %97 = load ptr, ptr %29, align 8, !tbaa !11
  %98 = getelementptr inbounds i8, ptr %97, i64 4
  %99 = load float, ptr %98, align 4, !tbaa !12
  %100 = load ptr, ptr %30, align 8, !tbaa !11
  %101 = getelementptr inbounds i8, ptr %100, i64 4
  %102 = load float, ptr %101, align 4, !tbaa !12
  %103 = fadd float %99, %102
  %104 = fpext float %103 to double
  %105 = tail call double @llvm.fmuladd.f64(double %95, double -2.000000e+00, double %104)
  %106 = fptrunc double %105 to float
  br label %133

107:                                              ; preds = %91
  %108 = load ptr, ptr %31, align 8, !tbaa !11
  %109 = getelementptr inbounds i8, ptr %108, i64 4
  %110 = load float, ptr %109, align 4, !tbaa !12
  %111 = load ptr, ptr %29, align 8, !tbaa !11
  %112 = getelementptr inbounds i8, ptr %111, i64 4
  %113 = load float, ptr %112, align 4, !tbaa !12
  %114 = fadd float %110, %113
  %115 = fpext float %114 to double
  %116 = tail call double @llvm.fmuladd.f64(double %95, double -2.000000e+00, double %115)
  %117 = fptrunc double %116 to float
  br label %133

118:                                              ; preds = %90
  %119 = load ptr, ptr %10, align 8, !tbaa !11
  %120 = getelementptr inbounds i8, ptr %119, i64 4
  %121 = load float, ptr %120, align 4, !tbaa !12
  %122 = load ptr, ptr %7, align 8, !tbaa !11
  %123 = getelementptr inbounds i8, ptr %122, i64 4
  %124 = load float, ptr %123, align 4, !tbaa !12
  %125 = fadd float %121, %124
  %126 = fpext float %125 to double
  %127 = load ptr, ptr %11, align 8, !tbaa !11
  %128 = getelementptr inbounds i8, ptr %127, i64 4
  %129 = load float, ptr %128, align 4, !tbaa !12
  %130 = fpext float %129 to double
  %131 = tail call double @llvm.fmuladd.f64(double %130, double -2.000000e+00, double %126)
  %132 = fptrunc double %131 to float
  br label %133

133:                                              ; preds = %118, %107, %96, %89
  %.086.us.peel100 = phi float [ %132, %118 ], [ %117, %107 ], [ %106, %96 ], [ 0.000000e+00, %89 ]
  %134 = fadd float %.085.us.peel99, %.086.us.peel100
  %135 = tail call noundef float @_ZSt4fabsf(float noundef %134)
  %136 = load ptr, ptr %12, align 8, !tbaa !5
  %137 = getelementptr inbounds ptr, ptr %136, i64 %indvars.iv104
  %138 = load ptr, ptr %137, align 8, !tbaa !11
  %139 = getelementptr inbounds i8, ptr %138, i64 4
  store float %135, ptr %139, align 4, !tbaa !12
  %140 = tail call noundef float @_ZSt5atan2ff(float noundef %.086.us.peel100, float noundef %.085.us.peel99)
  %141 = load ptr, ptr %13, align 8, !tbaa !5
  %142 = getelementptr inbounds ptr, ptr %141, i64 %indvars.iv104
  %143 = load ptr, ptr %142, align 8, !tbaa !11
  %144 = getelementptr inbounds i8, ptr %143, i64 4
  store float %140, ptr %144, align 4, !tbaa !12
  br i1 %exitcond.peel102.not, label %._crit_edge.us, label %.peel.next97

.peel.next97:                                     ; preds = %133, %203
  %indvars.iv = phi i64 [ %indvars.iv.next, %203 ], [ 2, %133 ]
  %145 = icmp eq i64 %indvars.iv, %18
  br i1 %145, label %159, label %.sink.split

.sink.split:                                      ; preds = %.peel.next97
  %146 = icmp eq i64 %indvars.iv, %19
  %147 = load ptr, ptr %24, align 8, !tbaa !11
  %. = select i1 %146, i64 4, i64 8
  %148 = getelementptr inbounds float, ptr %147, i64 %indvars.iv
  %149 = getelementptr inbounds i8, ptr %148, i64 %.
  %150 = load float, ptr %149, align 4, !tbaa !12
  %151 = getelementptr i8, ptr %148, i64 -8
  %152 = load float, ptr %151, align 4, !tbaa !12
  %153 = fadd float %150, %152
  %154 = fpext float %153 to double
  %155 = load float, ptr %148, align 4, !tbaa !12
  %156 = fpext float %155 to double
  %157 = tail call double @llvm.fmuladd.f64(double %156, double -2.000000e+00, double %154)
  %158 = fptrunc double %157 to float
  br label %159

159:                                              ; preds = %.sink.split, %.peel.next97
  %.085.us = phi float [ 0.000000e+00, %.peel.next97 ], [ %158, %.sink.split ]
  br i1 %or.cond91.us, label %203, label %160

160:                                              ; preds = %159
  br i1 %27, label %188, label %161

161:                                              ; preds = %160
  %162 = load ptr, ptr %24, align 8, !tbaa !11
  %163 = getelementptr inbounds float, ptr %162, i64 %indvars.iv
  %164 = load float, ptr %163, align 4, !tbaa !12
  %165 = fpext float %164 to double
  br i1 %28, label %177, label %166

166:                                              ; preds = %161
  %167 = load ptr, ptr %29, align 8, !tbaa !11
  %168 = getelementptr inbounds float, ptr %167, i64 %indvars.iv
  %169 = load float, ptr %168, align 4, !tbaa !12
  %170 = load ptr, ptr %30, align 8, !tbaa !11
  %171 = getelementptr inbounds float, ptr %170, i64 %indvars.iv
  %172 = load float, ptr %171, align 4, !tbaa !12
  %173 = fadd float %169, %172
  %174 = fpext float %173 to double
  %175 = tail call double @llvm.fmuladd.f64(double %165, double -2.000000e+00, double %174)
  %176 = fptrunc double %175 to float
  br label %203

177:                                              ; preds = %161
  %178 = load ptr, ptr %31, align 8, !tbaa !11
  %179 = getelementptr inbounds float, ptr %178, i64 %indvars.iv
  %180 = load float, ptr %179, align 4, !tbaa !12
  %181 = load ptr, ptr %29, align 8, !tbaa !11
  %182 = getelementptr inbounds float, ptr %181, i64 %indvars.iv
  %183 = load float, ptr %182, align 4, !tbaa !12
  %184 = fadd float %180, %183
  %185 = fpext float %184 to double
  %186 = tail call double @llvm.fmuladd.f64(double %165, double -2.000000e+00, double %185)
  %187 = fptrunc double %186 to float
  br label %203

188:                                              ; preds = %160
  %189 = load ptr, ptr %10, align 8, !tbaa !11
  %190 = getelementptr inbounds float, ptr %189, i64 %indvars.iv
  %191 = load float, ptr %190, align 4, !tbaa !12
  %192 = load ptr, ptr %7, align 8, !tbaa !11
  %193 = getelementptr inbounds float, ptr %192, i64 %indvars.iv
  %194 = load float, ptr %193, align 4, !tbaa !12
  %195 = fadd float %191, %194
  %196 = fpext float %195 to double
  %197 = load ptr, ptr %11, align 8, !tbaa !11
  %198 = getelementptr inbounds float, ptr %197, i64 %indvars.iv
  %199 = load float, ptr %198, align 4, !tbaa !12
  %200 = fpext float %199 to double
  %201 = tail call double @llvm.fmuladd.f64(double %200, double -2.000000e+00, double %196)
  %202 = fptrunc double %201 to float
  br label %203

203:                                              ; preds = %188, %177, %166, %159
  %.086.us = phi float [ %202, %188 ], [ %187, %177 ], [ %176, %166 ], [ 0.000000e+00, %159 ]
  %204 = fadd float %.085.us, %.086.us
  %205 = tail call noundef float @_ZSt4fabsf(float noundef %204)
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = getelementptr inbounds ptr, ptr %206, i64 %indvars.iv104
  %208 = load ptr, ptr %207, align 8, !tbaa !11
  %209 = getelementptr inbounds float, ptr %208, i64 %indvars.iv
  store float %205, ptr %209, align 4, !tbaa !12
  %210 = tail call noundef float @_ZSt5atan2ff(float noundef %.086.us, float noundef %.085.us)
  %211 = load ptr, ptr %13, align 8, !tbaa !5
  %212 = getelementptr inbounds ptr, ptr %211, i64 %indvars.iv104
  %213 = load ptr, ptr %212, align 8, !tbaa !11
  %214 = getelementptr inbounds float, ptr %213, i64 %indvars.iv
  store float %210, ptr %214, align 4, !tbaa !12
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %.peel.next97, !llvm.loop !14

._crit_edge.us:                                   ; preds = %203, %133, %67
  %indvars.iv.next105 = add nuw nsw i64 %indvars.iv104, 1
  %exitcond108.not = icmp eq i64 %indvars.iv.next105, %wide.trip.count107
  br i1 %exitcond108.not, label %._crit_edge94, label %23, !llvm.loop !17

._crit_edge94:                                    ; preds = %._crit_edge.us, %.preheader.lr.ph, %3
  ret void
}

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

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

!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 = !{!"_ZTS12ImageContent", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!10, !10, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"float", !8, i64 0}
!14 = distinct !{!14, !15, !16}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!"llvm.loop.peeled.count", i32 2}
!17 = distinct !{!17, !15}


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