; LLVM IR from ybj366533/YY-Camera :: yy_videolib/src/main/jni/yysticker/lib-sdm-core (hog)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.VlHog_ = type { i32, i64, i64, i32, i32, ptr, ptr, i64, ptr, ptr, ptr, ptr, i64, i64 }

@.str.1 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@__PRETTY_FUNCTION__.vl_hog_put_image2 = external hidden unnamed_addr constant [83 x i8], align 1
@__const.vl_hog_put_image2.orientationBins = external hidden unnamed_addr constant [2 x i64], align 16

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

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

; Function Attrs: nocallback nofree nosync nounwind 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: nounwind uwtable
declare hidden void @vl_hog_prepare_buffers(ptr noundef, i64 noundef, i64 noundef, i64 noundef) #3

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: nounwind
declare float @sqrtf(float noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i64 @vl_floor_f(float noundef) #3

; Function Attrs: nounwind uwtable
define dso_local void @vl_hog_put_image2(ptr noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, i64 noundef %5) #3 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca [2 x float], align 4
  %22 = alloca [2 x i64], align 16
  %23 = alloca i64, align 8
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca ptr, align 8
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca i64, align 8
  %37 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i64 %2, ptr %9, align 8, !tbaa !9
  store i64 %3, ptr %10, align 8, !tbaa !9
  store i64 %4, ptr %11, align 8, !tbaa !9
  store i64 %5, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  %38 = load i64, ptr %9, align 8, !tbaa !9
  %39 = load i64, ptr %10, align 8, !tbaa !9
  %40 = mul i64 %38, %39
  store i64 %40, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = icmp ne ptr %41, null
  br i1 %42, label %43, label %44

43:                                               ; preds = %6
  br label %45

44:                                               ; preds = %6
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 743, ptr noundef @__PRETTY_FUNCTION__.vl_hog_put_image2) #8
  unreachable

45:                                               ; preds = %43
  %46 = load ptr, ptr %8, align 8, !tbaa !5
  %47 = icmp ne ptr %46, null
  br i1 %47, label %48, label %49

48:                                               ; preds = %45
  br label %50

49:                                               ; preds = %45
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 744, ptr noundef @__PRETTY_FUNCTION__.vl_hog_put_image2) #8
  unreachable

50:                                               ; preds = %48
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = load i64, ptr %9, align 8, !tbaa !9
  %53 = load i64, ptr %10, align 8, !tbaa !9
  %54 = load i64, ptr %12, align 8, !tbaa !9
  call void @vl_hog_prepare_buffers(ptr noundef %51, i64 noundef %52, i64 noundef %53, i64 noundef %54)
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.VlHog_, ptr %55, i32 0, i32 12
  %57 = load i64, ptr %56, align 8, !tbaa !11
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.VlHog_, ptr %58, i32 0, i32 13
  %60 = load i64, ptr %59, align 8, !tbaa !14
  %61 = mul i64 %57, %60
  store i64 %61, ptr %13, align 8, !tbaa !9
  store i64 1, ptr %16, align 8, !tbaa !9
  br label %62

62:                                               ; preds = %375, %50
  %63 = load i64, ptr %16, align 8, !tbaa !9
  %64 = load i64, ptr %10, align 8, !tbaa !9
  %65 = trunc i64 %64 to i32
  %66 = sub nsw i32 %65, 1
  %67 = sext i32 %66 to i64
  %68 = icmp slt i64 %63, %67
  br i1 %68, label %69, label %378

69:                                               ; preds = %62
  store i64 1, ptr %15, align 8, !tbaa !9
  br label %70

70:                                               ; preds = %371, %69
  %71 = load i64, ptr %15, align 8, !tbaa !9
  %72 = load i64, ptr %9, align 8, !tbaa !9
  %73 = trunc i64 %72 to i32
  %74 = sub nsw i32 %73, 1
  %75 = sext i32 %74 to i64
  %76 = icmp slt i64 %71, %75
  br i1 %76, label %77, label %374

77:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store float 0.000000e+00, ptr %18, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store float 0.000000e+00, ptr %19, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  call void @llvm.memset.p0.i64(ptr align 4 %21, i8 0, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 @__const.vl_hog_put_image2.orientationBins, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  store i64 0, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %78 = load ptr, ptr %8, align 8, !tbaa !5
  %79 = load i64, ptr %16, align 8, !tbaa !9
  %80 = load i64, ptr %9, align 8, !tbaa !9
  %81 = mul i64 %79, %80
  %82 = getelementptr inbounds float, ptr %78, i64 %81
  %83 = load i64, ptr %15, align 8, !tbaa !9
  %84 = getelementptr inbounds float, ptr %82, i64 %83
  store ptr %84, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  store float 0.000000e+00, ptr %34, align 4, !tbaa !15
  %85 = load ptr, ptr %33, align 8, !tbaa !5
  %86 = getelementptr inbounds float, ptr %85, i64 1
  %87 = load float, ptr %86, align 4, !tbaa !15
  %88 = load ptr, ptr %33, align 8, !tbaa !5
  %89 = getelementptr inbounds float, ptr %88, i64 -1
  %90 = load float, ptr %89, align 4, !tbaa !15
  %91 = fsub float %87, %90
  store float %91, ptr %18, align 4, !tbaa !15
  %92 = load ptr, ptr %33, align 8, !tbaa !5
  %93 = load i64, ptr %9, align 8, !tbaa !9
  %94 = getelementptr inbounds float, ptr %92, i64 %93
  %95 = load float, ptr %94, align 4, !tbaa !15
  %96 = load ptr, ptr %33, align 8, !tbaa !5
  %97 = load i64, ptr %9, align 8, !tbaa !9
  %98 = sub i64 0, %97
  %99 = getelementptr inbounds float, ptr %96, i64 %98
  %100 = load float, ptr %99, align 4, !tbaa !15
  %101 = fsub float %95, %100
  store float %101, ptr %19, align 4, !tbaa !15
  %102 = load float, ptr %18, align 4, !tbaa !15
  %103 = load float, ptr %18, align 4, !tbaa !15
  %104 = load float, ptr %19, align 4, !tbaa !15
  %105 = load float, ptr %19, align 4, !tbaa !15
  %106 = fmul float %104, %105
  %107 = call float @llvm.fmuladd.f32(float %102, float %103, float %106)
  store float %107, ptr %34, align 4, !tbaa !15
  %108 = load float, ptr %34, align 4, !tbaa !15
  %109 = call float @sqrtf(float noundef %108) #7
  store float %109, ptr %20, align 4, !tbaa !15
  %110 = load float, ptr %20, align 4, !tbaa !15
  %111 = fpext float %110 to double
  %112 = fcmp ogt double %111, 1.000000e-10
  br i1 %112, label %113, label %116

113:                                              ; preds = %77
  %114 = load float, ptr %20, align 4, !tbaa !15
  %115 = fpext float %114 to double
  br label %117

116:                                              ; preds = %77
  br label %117

117:                                              ; preds = %116, %113
  %118 = phi double [ %115, %113 ], [ 1.000000e-10, %116 ]
  %119 = load float, ptr %18, align 4, !tbaa !15
  %120 = fpext float %119 to double
  %121 = fdiv double %120, %118
  %122 = fptrunc double %121 to float
  store float %122, ptr %18, align 4, !tbaa !15
  %123 = load float, ptr %20, align 4, !tbaa !15
  %124 = fpext float %123 to double
  %125 = fcmp ogt double %124, 1.000000e-10
  br i1 %125, label %126, label %129

126:                                              ; preds = %117
  %127 = load float, ptr %20, align 4, !tbaa !15
  %128 = fpext float %127 to double
  br label %130

129:                                              ; preds = %117
  br label %130

130:                                              ; preds = %129, %126
  %131 = phi double [ %128, %126 ], [ 1.000000e-10, %129 ]
  %132 = load float, ptr %19, align 4, !tbaa !15
  %133 = fpext float %132 to double
  %134 = fdiv double %133, %131
  %135 = fptrunc double %134 to float
  store float %135, ptr %19, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %136

136:                                              ; preds = %181, %130
  %137 = load i64, ptr %17, align 8, !tbaa !9
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.VlHog_, ptr %138, i32 0, i32 2
  %140 = load i64, ptr %139, align 8, !tbaa !17
  %141 = icmp ult i64 %137, %140
  br i1 %141, label %142, label %184

142:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %143 = load float, ptr %18, align 4, !tbaa !15
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.VlHog_, ptr %144, i32 0, i32 8
  %146 = load ptr, ptr %145, align 8, !tbaa !18
  %147 = load i64, ptr %17, align 8, !tbaa !9
  %148 = getelementptr inbounds float, ptr %146, i64 %147
  %149 = load float, ptr %148, align 4, !tbaa !15
  %150 = load float, ptr %19, align 4, !tbaa !15
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.VlHog_, ptr %151, i32 0, i32 9
  %153 = load ptr, ptr %152, align 8, !tbaa !19
  %154 = load i64, ptr %17, align 8, !tbaa !9
  %155 = getelementptr inbounds float, ptr %153, i64 %154
  %156 = load float, ptr %155, align 4, !tbaa !15
  %157 = fmul float %150, %156
  %158 = call float @llvm.fmuladd.f32(float %143, float %149, float %157)
  store float %158, ptr %35, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %159 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %159, ptr %36, align 8, !tbaa !9
  %160 = load float, ptr %35, align 4, !tbaa !15
  %161 = fcmp olt float %160, 0.000000e+00
  br i1 %161, label %162, label %170

162:                                              ; preds = %142
  %163 = load float, ptr %35, align 4, !tbaa !15
  %164 = fneg float %163
  store float %164, ptr %35, align 4, !tbaa !15
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.VlHog_, ptr %165, i32 0, i32 2
  %167 = load i64, ptr %166, align 8, !tbaa !17
  %168 = load i64, ptr %36, align 8, !tbaa !9
  %169 = add i64 %168, %167
  store i64 %169, ptr %36, align 8, !tbaa !9
  br label %170

170:                                              ; preds = %162, %142
  %171 = load float, ptr %35, align 4, !tbaa !15
  %172 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %173 = load float, ptr %172, align 4, !tbaa !15
  %174 = fcmp ogt float %171, %173
  br i1 %174, label %175, label %180

175:                                              ; preds = %170
  %176 = load i64, ptr %36, align 8, !tbaa !9
  %177 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 0
  store i64 %176, ptr %177, align 16, !tbaa !9
  %178 = load float, ptr %35, align 4, !tbaa !15
  %179 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float %178, ptr %179, align 4, !tbaa !15
  br label %180

180:                                              ; preds = %175, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %181

181:                                              ; preds = %180
  %182 = load i64, ptr %17, align 8, !tbaa !9
  %183 = add i64 %182, 1
  store i64 %183, ptr %17, align 8, !tbaa !9
  br label %136, !llvm.loop !20

184:                                              ; preds = %136
  %185 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float 1.000000e+00, ptr %185, align 4, !tbaa !15
  %186 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 0
  %187 = load i64, ptr %186, align 16, !tbaa !9
  store i64 %187, ptr %23, align 8, !tbaa !9
  %188 = load i64, ptr %23, align 8, !tbaa !9
  %189 = icmp slt i64 %188, 0
  br i1 %189, label %190, label %191

190:                                              ; preds = %184
  store i32 7, ptr %37, align 4
  br label %368

191:                                              ; preds = %184
  %192 = load i64, ptr %15, align 8, !tbaa !9
  %193 = sitofp i64 %192 to double
  %194 = fadd double %193, 5.000000e-01
  %195 = load i64, ptr %12, align 8, !tbaa !9
  %196 = uitofp i64 %195 to double
  %197 = fdiv double %194, %196
  %198 = fsub double %197, 5.000000e-01
  %199 = fptrunc double %198 to float
  store float %199, ptr %24, align 4, !tbaa !15
  %200 = load i64, ptr %16, align 8, !tbaa !9
  %201 = sitofp i64 %200 to double
  %202 = fadd double %201, 5.000000e-01
  %203 = load i64, ptr %12, align 8, !tbaa !9
  %204 = uitofp i64 %203 to double
  %205 = fdiv double %202, %204
  %206 = fsub double %205, 5.000000e-01
  %207 = fptrunc double %206 to float
  store float %207, ptr %25, align 4, !tbaa !15
  %208 = load float, ptr %24, align 4, !tbaa !15
  %209 = call i64 @vl_floor_f(float noundef %208)
  store i64 %209, ptr %30, align 8, !tbaa !9
  %210 = load float, ptr %25, align 4, !tbaa !15
  %211 = call i64 @vl_floor_f(float noundef %210)
  store i64 %211, ptr %31, align 8, !tbaa !9
  %212 = load float, ptr %24, align 4, !tbaa !15
  %213 = load i64, ptr %30, align 8, !tbaa !9
  %214 = sitofp i64 %213 to float
  %215 = fsub float %212, %214
  store float %215, ptr %27, align 4, !tbaa !15
  %216 = load float, ptr %25, align 4, !tbaa !15
  %217 = load i64, ptr %31, align 8, !tbaa !9
  %218 = sitofp i64 %217 to float
  %219 = fsub float %216, %218
  store float %219, ptr %29, align 4, !tbaa !15
  %220 = load float, ptr %27, align 4, !tbaa !15
  %221 = fpext float %220 to double
  %222 = fsub double 1.000000e+00, %221
  %223 = fptrunc double %222 to float
  store float %223, ptr %26, align 4, !tbaa !15
  %224 = load float, ptr %29, align 4, !tbaa !15
  %225 = fpext float %224 to double
  %226 = fsub double 1.000000e+00, %225
  %227 = fptrunc double %226 to float
  store float %227, ptr %28, align 4, !tbaa !15
  %228 = load i64, ptr %30, align 8, !tbaa !9
  %229 = icmp sge i64 %228, 0
  br i1 %229, label %230, label %255

230:                                              ; preds = %191
  %231 = load i64, ptr %31, align 8, !tbaa !9
  %232 = icmp sge i64 %231, 0
  br i1 %232, label %233, label %255

233:                                              ; preds = %230
  %234 = load float, ptr %20, align 4, !tbaa !15
  %235 = load float, ptr %26, align 4, !tbaa !15
  %236 = fmul float %234, %235
  %237 = load float, ptr %28, align 4, !tbaa !15
  %238 = load ptr, ptr %7, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.VlHog_, ptr %238, i32 0, i32 10
  %240 = load ptr, ptr %239, align 8, !tbaa !22
  %241 = load i64, ptr %30, align 8, !tbaa !9
  %242 = load i64, ptr %31, align 8, !tbaa !9
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.VlHog_, ptr %243, i32 0, i32 12
  %245 = load i64, ptr %244, align 8, !tbaa !11
  %246 = mul i64 %242, %245
  %247 = add i64 %241, %246
  %248 = load i64, ptr %23, align 8, !tbaa !9
  %249 = load i64, ptr %13, align 8, !tbaa !9
  %250 = mul i64 %248, %249
  %251 = add i64 %247, %250
  %252 = getelementptr inbounds float, ptr %240, i64 %251
  %253 = load float, ptr %252, align 4, !tbaa !15
  %254 = call float @llvm.fmuladd.f32(float %236, float %237, float %253)
  store float %254, ptr %252, align 4, !tbaa !15
  br label %255

255:                                              ; preds = %233, %230, %191
  %256 = load i64, ptr %30, align 8, !tbaa !9
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.VlHog_, ptr %257, i32 0, i32 12
  %259 = load i64, ptr %258, align 8, !tbaa !11
  %260 = trunc i64 %259 to i32
  %261 = sub nsw i32 %260, 1
  %262 = sext i32 %261 to i64
  %263 = icmp slt i64 %256, %262
  br i1 %263, label %264, label %290

264:                                              ; preds = %255
  %265 = load i64, ptr %31, align 8, !tbaa !9
  %266 = icmp sge i64 %265, 0
  br i1 %266, label %267, label %290

267:                                              ; preds = %264
  %268 = load float, ptr %20, align 4, !tbaa !15
  %269 = load float, ptr %27, align 4, !tbaa !15
  %270 = fmul float %268, %269
  %271 = load float, ptr %28, align 4, !tbaa !15
  %272 = load ptr, ptr %7, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.VlHog_, ptr %272, i32 0, i32 10
  %274 = load ptr, ptr %273, align 8, !tbaa !22
  %275 = load i64, ptr %30, align 8, !tbaa !9
  %276 = add nsw i64 %275, 1
  %277 = load i64, ptr %31, align 8, !tbaa !9
  %278 = load ptr, ptr %7, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.VlHog_, ptr %278, i32 0, i32 12
  %280 = load i64, ptr %279, align 8, !tbaa !11
  %281 = mul i64 %277, %280
  %282 = add i64 %276, %281
  %283 = load i64, ptr %23, align 8, !tbaa !9
  %284 = load i64, ptr %13, align 8, !tbaa !9
  %285 = mul i64 %283, %284
  %286 = add i64 %282, %285
  %287 = getelementptr inbounds float, ptr %274, i64 %286
  %288 = load float, ptr %287, align 4, !tbaa !15
  %289 = call float @llvm.fmuladd.f32(float %270, float %271, float %288)
  store float %289, ptr %287, align 4, !tbaa !15
  br label %290

290:                                              ; preds = %267, %264, %255
  %291 = load i64, ptr %30, align 8, !tbaa !9
  %292 = load ptr, ptr %7, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.VlHog_, ptr %292, i32 0, i32 12
  %294 = load i64, ptr %293, align 8, !tbaa !11
  %295 = trunc i64 %294 to i32
  %296 = sub nsw i32 %295, 1
  %297 = sext i32 %296 to i64
  %298 = icmp slt i64 %291, %297
  br i1 %298, label %299, label %332

299:                                              ; preds = %290
  %300 = load i64, ptr %31, align 8, !tbaa !9
  %301 = load ptr, ptr %7, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.VlHog_, ptr %301, i32 0, i32 13
  %303 = load i64, ptr %302, align 8, !tbaa !14
  %304 = trunc i64 %303 to i32
  %305 = sub nsw i32 %304, 1
  %306 = sext i32 %305 to i64
  %307 = icmp slt i64 %300, %306
  br i1 %307, label %308, label %332

308:                                              ; preds = %299
  %309 = load float, ptr %20, align 4, !tbaa !15
  %310 = load float, ptr %27, align 4, !tbaa !15
  %311 = fmul float %309, %310
  %312 = load float, ptr %29, align 4, !tbaa !15
  %313 = load ptr, ptr %7, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.VlHog_, ptr %313, i32 0, i32 10
  %315 = load ptr, ptr %314, align 8, !tbaa !22
  %316 = load i64, ptr %30, align 8, !tbaa !9
  %317 = add nsw i64 %316, 1
  %318 = load i64, ptr %31, align 8, !tbaa !9
  %319 = add nsw i64 %318, 1
  %320 = load ptr, ptr %7, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.VlHog_, ptr %320, i32 0, i32 12
  %322 = load i64, ptr %321, align 8, !tbaa !11
  %323 = mul i64 %319, %322
  %324 = add i64 %317, %323
  %325 = load i64, ptr %23, align 8, !tbaa !9
  %326 = load i64, ptr %13, align 8, !tbaa !9
  %327 = mul i64 %325, %326
  %328 = add i64 %324, %327
  %329 = getelementptr inbounds float, ptr %315, i64 %328
  %330 = load float, ptr %329, align 4, !tbaa !15
  %331 = call float @llvm.fmuladd.f32(float %311, float %312, float %330)
  store float %331, ptr %329, align 4, !tbaa !15
  br label %332

332:                                              ; preds = %308, %299, %290
  %333 = load i64, ptr %30, align 8, !tbaa !9
  %334 = icmp sge i64 %333, 0
  br i1 %334, label %335, label %367

335:                                              ; preds = %332
  %336 = load i64, ptr %31, align 8, !tbaa !9
  %337 = load ptr, ptr %7, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.VlHog_, ptr %337, i32 0, i32 13
  %339 = load i64, ptr %338, align 8, !tbaa !14
  %340 = trunc i64 %339 to i32
  %341 = sub nsw i32 %340, 1
  %342 = sext i32 %341 to i64
  %343 = icmp slt i64 %336, %342
  br i1 %343, label %344, label %367

344:                                              ; preds = %335
  %345 = load float, ptr %20, align 4, !tbaa !15
  %346 = load float, ptr %26, align 4, !tbaa !15
  %347 = fmul float %345, %346
  %348 = load float, ptr %29, align 4, !tbaa !15
  %349 = load ptr, ptr %7, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.VlHog_, ptr %349, i32 0, i32 10
  %351 = load ptr, ptr %350, align 8, !tbaa !22
  %352 = load i64, ptr %30, align 8, !tbaa !9
  %353 = load i64, ptr %31, align 8, !tbaa !9
  %354 = add nsw i64 %353, 1
  %355 = load ptr, ptr %7, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.VlHog_, ptr %355, i32 0, i32 12
  %357 = load i64, ptr %356, align 8, !tbaa !11
  %358 = mul i64 %354, %357
  %359 = add i64 %352, %358
  %360 = load i64, ptr %23, align 8, !tbaa !9
  %361 = load i64, ptr %13, align 8, !tbaa !9
  %362 = mul i64 %360, %361
  %363 = add i64 %359, %362
  %364 = getelementptr inbounds float, ptr %351, i64 %363
  %365 = load float, ptr %364, align 4, !tbaa !15
  %366 = call float @llvm.fmuladd.f32(float %347, float %348, float %365)
  store float %366, ptr %364, align 4, !tbaa !15
  br label %367

367:                                              ; preds = %344, %335, %332
  store i32 0, ptr %37, align 4
  br label %368

368:                                              ; preds = %367, %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, 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
  %369 = load i32, ptr %37, align 4
  switch i32 %369, label %379 [
    i32 0, label %370
    i32 7, label %371
  ]

370:                                              ; preds = %368
  br label %371

371:                                              ; preds = %370, %368
  %372 = load i64, ptr %15, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %15, align 8, !tbaa !9
  br label %70, !llvm.loop !23

374:                                              ; preds = %70
  br label %375

375:                                              ; preds = %374
  %376 = load i64, ptr %16, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %16, align 8, !tbaa !9
  br label %62, !llvm.loop !24

378:                                              ; preds = %62
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  ret void

379:                                              ; preds = %368
  unreachable
}

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


; 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 [107 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@__PRETTY_FUNCTION__.vl_hog_put_image2 = external hidden unnamed_addr constant [83 x i8], align 1
@__const.vl_hog_put_image2.orientationBins = external hidden unnamed_addr constant [2 x i64], align 16

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

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

; Function Attrs: nounwind uwtable
declare hidden void @vl_hog_prepare_buffers(ptr noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i64 @vl_floor_f(float noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @vl_hog_put_image2(ptr noundef %0, ptr noundef readonly %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, i64 noundef %5) local_unnamed_addr #2 {
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %7, label %8

7:                                                ; preds = %6
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 743, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_put_image2) #4
  unreachable

8:                                                ; preds = %6
  %.not132 = icmp eq ptr %1, null
  br i1 %.not132, label %9, label %10

9:                                                ; preds = %8
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 744, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_put_image2) #4
  unreachable

10:                                               ; preds = %8
  tail call void @vl_hog_prepare_buffers(ptr noundef nonnull %0, i64 noundef %2, i64 noundef %3, i64 noundef %5)
  %11 = getelementptr inbounds i8, ptr %0, i64 88
  %12 = load i64, ptr %11, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %0, i64 96
  %14 = load i64, ptr %13, align 8, !tbaa !12
  %15 = mul i64 %14, %12
  %16 = shl i64 %3, 32
  %sext = add i64 %16, -4294967296
  %17 = ashr exact i64 %sext, 32
  %18 = icmp sgt i64 %17, 1
  br i1 %18, label %.preheader.lr.ph, label %._crit_edge145

.preheader.lr.ph:                                 ; preds = %10
  %19 = shl i64 %2, 32
  %sext133 = add i64 %19, -4294967296
  %20 = ashr exact i64 %sext133, 32
  %21 = icmp sgt i64 %20, 1
  %.sroa.0.0.copyload = load i64, ptr @__const.vl_hog_put_image2.orientationBins, align 16
  %22 = sub i64 0, %2
  %23 = getelementptr inbounds i8, ptr %0, i64 16
  %24 = getelementptr inbounds i8, ptr %0, i64 56
  %25 = getelementptr inbounds i8, ptr %0, i64 64
  %26 = uitofp i64 %5 to double
  %27 = getelementptr inbounds i8, ptr %0, i64 72
  br i1 %21, label %.preheader.us, label %._crit_edge145

.preheader.us:                                    ; preds = %.preheader.lr.ph, %._crit_edge143.us
  %.0120144.us = phi i64 [ %152, %._crit_edge143.us ], [ 1, %.preheader.lr.ph ]
  %28 = mul i64 %.0120144.us, %2
  %29 = getelementptr inbounds float, ptr %1, i64 %28
  %30 = uitofp nneg i64 %.0120144.us to double
  %31 = fadd double %30, 5.000000e-01
  %32 = fdiv double %31, %26
  %33 = fadd double %32, -5.000000e-01
  %34 = fptrunc double %33 to float
  br label %35

35:                                               ; preds = %.preheader.us, %136
  %.0119141.us = phi i64 [ 1, %.preheader.us ], [ %137, %136 ]
  %36 = getelementptr inbounds float, ptr %29, i64 %.0119141.us
  %37 = getelementptr inbounds i8, ptr %36, i64 4
  %38 = load float, ptr %37, align 4, !tbaa !13
  %39 = getelementptr inbounds i8, ptr %36, i64 -4
  %40 = load float, ptr %39, align 4, !tbaa !13
  %41 = fsub float %38, %40
  %42 = getelementptr inbounds float, ptr %36, i64 %2
  %43 = load float, ptr %42, align 4, !tbaa !13
  %44 = getelementptr inbounds float, ptr %36, i64 %22
  %45 = load float, ptr %44, align 4, !tbaa !13
  %46 = fsub float %43, %45
  %47 = fmul float %46, %46
  %48 = tail call float @llvm.fmuladd.f32(float %41, float %41, float %47)
  %sqrt.us = tail call float @llvm.sqrt.f32(float %48)
  %49 = fpext float %sqrt.us to double
  %50 = fcmp ogt double %49, 1.000000e-10
  %51 = select i1 %50, double %49, double 1.000000e-10
  %52 = fpext float %41 to double
  %53 = fdiv double %52, %51
  %54 = fptrunc double %53 to float
  %55 = fpext float %46 to double
  %56 = fdiv double %55, %51
  %57 = fptrunc double %56 to float
  %58 = load i64, ptr %23, align 8, !tbaa !15
  %.not146 = icmp eq i64 %58, 0
  br i1 %.not146, label %._crit_edge.us, label %.lr.ph.us

._crit_edge.us:                                   ; preds = %138, %35
  %.sroa.0.0.lcssa.us = phi i64 [ %.sroa.0.0.copyload, %35 ], [ %.sroa.0.1.us, %138 ]
  %59 = icmp slt i64 %.sroa.0.0.lcssa.us, 0
  br i1 %59, label %136, label %60

60:                                               ; preds = %._crit_edge.us
  %61 = uitofp nneg i64 %.0119141.us to double
  %62 = fadd double %61, 5.000000e-01
  %63 = fdiv double %62, %26
  %64 = fadd double %63, -5.000000e-01
  %65 = fptrunc double %64 to float
  %66 = tail call i64 @vl_floor_f(float noundef %65)
  %67 = tail call i64 @vl_floor_f(float noundef %34)
  %68 = sitofp i64 %66 to float
  %69 = fsub float %65, %68
  %70 = sitofp i64 %67 to float
  %71 = fsub float %34, %70
  %72 = fsub float 1.000000e+00, %69
  %73 = fsub float 1.000000e+00, %71
  %74 = icmp sgt i64 %66, -1
  %75 = icmp sgt i64 %67, -1
  %or.cond.us = select i1 %74, i1 %75, i1 false
  %.pre = load i64, ptr %11, align 8, !tbaa !5
  br i1 %or.cond.us, label %76, label %86

76:                                               ; preds = %60
  %77 = fmul float %sqrt.us, %72
  %78 = load ptr, ptr %27, align 8, !tbaa !16
  %79 = mul i64 %.pre, %67
  %80 = mul i64 %.sroa.0.0.lcssa.us, %15
  %81 = getelementptr float, ptr %78, i64 %66
  %82 = getelementptr float, ptr %81, i64 %79
  %83 = getelementptr float, ptr %82, i64 %80
  %84 = load float, ptr %83, align 4, !tbaa !13
  %85 = tail call float @llvm.fmuladd.f32(float %77, float %73, float %84)
  store float %85, ptr %83, align 4, !tbaa !13
  br label %86

86:                                               ; preds = %76, %60
  %87 = shl i64 %.pre, 32
  %sext134.us = add i64 %87, -4294967296
  %88 = ashr exact i64 %sext134.us, 32
  %89 = icmp slt i64 %66, %88
  %or.cond3.us = select i1 %89, i1 %75, i1 false
  br i1 %or.cond3.us, label %90, label %101

90:                                               ; preds = %86
  %91 = fmul float %sqrt.us, %69
  %92 = load ptr, ptr %27, align 8, !tbaa !16
  %93 = mul i64 %.pre, %67
  %94 = mul i64 %.sroa.0.0.lcssa.us, %15
  %95 = getelementptr float, ptr %92, i64 %66
  %96 = getelementptr i8, ptr %95, i64 4
  %97 = getelementptr float, ptr %96, i64 %93
  %98 = getelementptr float, ptr %97, i64 %94
  %99 = load float, ptr %98, align 4, !tbaa !13
  %100 = tail call float @llvm.fmuladd.f32(float %91, float %73, float %99)
  store float %100, ptr %98, align 4, !tbaa !13
  br label %101

101:                                              ; preds = %90, %86
  br i1 %89, label %102, label %119

102:                                              ; preds = %101
  %103 = load i64, ptr %13, align 8, !tbaa !12
  %104 = shl i64 %103, 32
  %sext136.us = add i64 %104, -4294967296
  %105 = ashr exact i64 %sext136.us, 32
  %106 = icmp slt i64 %67, %105
  br i1 %106, label %107, label %119

107:                                              ; preds = %102
  %108 = fmul float %sqrt.us, %69
  %109 = load ptr, ptr %27, align 8, !tbaa !16
  %110 = add nsw i64 %67, 1
  %111 = mul i64 %.pre, %110
  %112 = mul i64 %.sroa.0.0.lcssa.us, %15
  %113 = getelementptr float, ptr %109, i64 %66
  %114 = getelementptr i8, ptr %113, i64 4
  %115 = getelementptr float, ptr %114, i64 %111
  %116 = getelementptr float, ptr %115, i64 %112
  %117 = load float, ptr %116, align 4, !tbaa !13
  %118 = tail call float @llvm.fmuladd.f32(float %108, float %71, float %117)
  store float %118, ptr %116, align 4, !tbaa !13
  br label %119

119:                                              ; preds = %107, %102, %101
  br i1 %74, label %120, label %136

120:                                              ; preds = %119
  %121 = load i64, ptr %13, align 8, !tbaa !12
  %122 = shl i64 %121, 32
  %sext137.us = add i64 %122, -4294967296
  %123 = ashr exact i64 %sext137.us, 32
  %124 = icmp slt i64 %67, %123
  br i1 %124, label %125, label %136

125:                                              ; preds = %120
  %126 = fmul float %sqrt.us, %72
  %127 = load ptr, ptr %27, align 8, !tbaa !16
  %128 = add nsw i64 %67, 1
  %129 = mul i64 %.pre, %128
  %130 = mul i64 %.sroa.0.0.lcssa.us, %15
  %131 = getelementptr float, ptr %127, i64 %66
  %132 = getelementptr float, ptr %131, i64 %129
  %133 = getelementptr float, ptr %132, i64 %130
  %134 = load float, ptr %133, align 4, !tbaa !13
  %135 = tail call float @llvm.fmuladd.f32(float %126, float %71, float %134)
  store float %135, ptr %133, align 4, !tbaa !13
  br label %136

136:                                              ; preds = %125, %120, %119, %._crit_edge.us
  %137 = add nuw nsw i64 %.0119141.us, 1
  %exitcond148.not = icmp eq i64 %137, %20
  br i1 %exitcond148.not, label %._crit_edge143.us, label %35, !llvm.loop !17

138:                                              ; preds = %.lr.ph.us, %138
  %.0121140.us = phi i64 [ 0, %.lr.ph.us ], [ %149, %138 ]
  %.sroa.050.2139.us = phi float [ 0.000000e+00, %.lr.ph.us ], [ %.sroa.050.3.us, %138 ]
  %.sroa.0.0138.us = phi i64 [ %.sroa.0.0.copyload, %.lr.ph.us ], [ %.sroa.0.1.us, %138 ]
  %139 = getelementptr inbounds float, ptr %150, i64 %.0121140.us
  %140 = load float, ptr %139, align 4, !tbaa !13
  %141 = getelementptr inbounds float, ptr %151, i64 %.0121140.us
  %142 = load float, ptr %141, align 4, !tbaa !13
  %143 = fmul float %142, %57
  %144 = tail call float @llvm.fmuladd.f32(float %54, float %140, float %143)
  %145 = fcmp olt float %144, 0.000000e+00
  %146 = fneg float %144
  %.0118.us = select i1 %145, float %146, float %144
  %147 = select i1 %145, i64 %58, i64 0
  %.0.us = add i64 %147, %.0121140.us
  %148 = fcmp ogt float %.0118.us, %.sroa.050.2139.us
  %.sroa.0.1.us = select i1 %148, i64 %.0.us, i64 %.sroa.0.0138.us
  %.sroa.050.3.us = select i1 %148, float %.0118.us, float %.sroa.050.2139.us
  %149 = add nuw i64 %.0121140.us, 1
  %exitcond.not = icmp eq i64 %149, %58
  br i1 %exitcond.not, label %._crit_edge.us, label %138, !llvm.loop !19

.lr.ph.us:                                        ; preds = %35
  %150 = load ptr, ptr %24, align 8, !tbaa !20
  %151 = load ptr, ptr %25, align 8, !tbaa !21
  br label %138

._crit_edge143.us:                                ; preds = %136
  %152 = add nuw nsw i64 %.0120144.us, 1
  %exitcond149.not = icmp eq i64 %152, %17
  br i1 %exitcond149.not, label %._crit_edge145, label %.preheader.us, !llvm.loop !22

._crit_edge145:                                   ; preds = %._crit_edge143.us, %.preheader.lr.ph, %10
  ret void
}

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 88}
!6 = !{!"VlHog_", !7, i64 0, !10, i64 8, !10, i64 16, !7, i64 24, !7, i64 28, !11, i64 32, !11, i64 40, !10, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !10, i64 88, !10, i64 96}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!6, !10, i64 96}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !8, i64 0}
!15 = !{!6, !10, i64 16}
!16 = !{!6, !11, i64 72}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!6, !11, i64 56}
!21 = !{!6, !11, i64 64}
!22 = distinct !{!22, !18}


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