; LLVM IR from hlzz/libvot :: src/third_party/vlfeat/vl (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 [77 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_image = external hidden unnamed_addr constant [82 x i8], align 1
@__const.vl_hog_put_image.orientationWeights = external hidden unnamed_addr constant [2 x float], align 4
@__const.vl_hog_put_image.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
define dso_local void @vl_hog_put_image(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 float, align 4
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca i64, align 8
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  %42 = 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
  %43 = load i64, ptr %9, align 8, !tbaa !9
  %44 = load i64, ptr %10, align 8, !tbaa !9
  %45 = mul i64 %43, %44
  store i64 %45, 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
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = icmp ne ptr %46, null
  br i1 %47, label %48, label %49

48:                                               ; preds = %6
  br label %50

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

50:                                               ; preds = %48
  %51 = load ptr, ptr %8, align 8, !tbaa !5
  %52 = icmp ne ptr %51, null
  br i1 %52, label %53, label %54

53:                                               ; preds = %50
  br label %55

54:                                               ; preds = %50
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 607, ptr noundef @__PRETTY_FUNCTION__.vl_hog_put_image) #8
  unreachable

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

67:                                               ; preds = %466, %55
  %68 = load i64, ptr %16, align 8, !tbaa !9
  %69 = load i64, ptr %10, align 8, !tbaa !9
  %70 = trunc i64 %69 to i32
  %71 = sub nsw i32 %70, 1
  %72 = sext i32 %71 to i64
  %73 = icmp slt i64 %68, %72
  br i1 %73, label %74, label %469

74:                                               ; preds = %67
  store i64 1, ptr %15, align 8, !tbaa !9
  br label %75

75:                                               ; preds = %462, %74
  %76 = load i64, ptr %15, align 8, !tbaa !9
  %77 = load i64, ptr %9, align 8, !tbaa !9
  %78 = trunc i64 %77 to i32
  %79 = sub nsw i32 %78, 1
  %80 = sext i32 %79 to i64
  %81 = icmp slt i64 %76, %80
  br i1 %81, label %82, label %465

82:                                               ; preds = %75
  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.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 @__const.vl_hog_put_image.orientationWeights, 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_image.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
  %83 = load ptr, ptr %8, align 8, !tbaa !5
  %84 = load i64, ptr %16, align 8, !tbaa !9
  %85 = load i64, ptr %9, align 8, !tbaa !9
  %86 = mul i64 %84, %85
  %87 = getelementptr inbounds float, ptr %83, i64 %86
  %88 = load i64, ptr %15, align 8, !tbaa !9
  %89 = getelementptr inbounds float, ptr %87, i64 %88
  store ptr %89, 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
  store i64 0, ptr %17, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %129, %82
  %91 = load i64, ptr %17, align 8, !tbaa !9
  %92 = load i64, ptr %11, align 8, !tbaa !9
  %93 = icmp ult i64 %91, %92
  br i1 %93, label %94, label %132

94:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %95 = load ptr, ptr %33, align 8, !tbaa !5
  %96 = getelementptr inbounds float, ptr %95, i64 1
  %97 = load float, ptr %96, align 4, !tbaa !15
  %98 = load ptr, ptr %33, align 8, !tbaa !5
  %99 = getelementptr inbounds float, ptr %98, i64 -1
  %100 = load float, ptr %99, align 4, !tbaa !15
  %101 = fsub float %97, %100
  store float %101, ptr %35, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %102 = load ptr, ptr %33, align 8, !tbaa !5
  %103 = load i64, ptr %9, align 8, !tbaa !9
  %104 = getelementptr inbounds float, ptr %102, i64 %103
  %105 = load float, ptr %104, align 4, !tbaa !15
  %106 = load ptr, ptr %33, align 8, !tbaa !5
  %107 = load i64, ptr %9, align 8, !tbaa !9
  %108 = sub i64 0, %107
  %109 = getelementptr inbounds float, ptr %106, i64 %108
  %110 = load float, ptr %109, align 4, !tbaa !15
  %111 = fsub float %105, %110
  store float %111, ptr %36, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  %112 = load float, ptr %35, align 4, !tbaa !15
  %113 = load float, ptr %35, align 4, !tbaa !15
  %114 = load float, ptr %36, align 4, !tbaa !15
  %115 = load float, ptr %36, align 4, !tbaa !15
  %116 = fmul float %114, %115
  %117 = call float @llvm.fmuladd.f32(float %112, float %113, float %116)
  store float %117, ptr %37, align 4, !tbaa !15
  %118 = load float, ptr %37, align 4, !tbaa !15
  %119 = load float, ptr %34, align 4, !tbaa !15
  %120 = fcmp ogt float %118, %119
  br i1 %120, label %121, label %125

121:                                              ; preds = %94
  %122 = load float, ptr %35, align 4, !tbaa !15
  store float %122, ptr %18, align 4, !tbaa !15
  %123 = load float, ptr %36, align 4, !tbaa !15
  store float %123, ptr %19, align 4, !tbaa !15
  %124 = load float, ptr %37, align 4, !tbaa !15
  store float %124, ptr %34, align 4, !tbaa !15
  br label %125

125:                                              ; preds = %121, %94
  %126 = load i64, ptr %14, align 8, !tbaa !9
  %127 = load ptr, ptr %33, align 8, !tbaa !5
  %128 = getelementptr inbounds float, ptr %127, i64 %126
  store ptr %128, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %129

129:                                              ; preds = %125
  %130 = load i64, ptr %17, align 8, !tbaa !9
  %131 = add i64 %130, 1
  store i64 %131, ptr %17, align 8, !tbaa !9
  br label %90, !llvm.loop !17

132:                                              ; preds = %90
  %133 = load float, ptr %34, align 4, !tbaa !15
  %134 = call float @sqrtf(float noundef %133) #7
  store float %134, ptr %20, 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 %135

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

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

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

169:                                              ; preds = %161, %141
  %170 = load float, ptr %38, align 4, !tbaa !15
  %171 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %172 = load float, ptr %171, align 4, !tbaa !15
  %173 = fcmp ogt float %170, %172
  br i1 %173, label %174, label %185

174:                                              ; preds = %169
  %175 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 0
  %176 = load i64, ptr %175, align 16, !tbaa !9
  %177 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 1
  store i64 %176, ptr %177, align 8, !tbaa !9
  %178 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %179 = load float, ptr %178, align 4, !tbaa !15
  %180 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  store float %179, ptr %180, align 4, !tbaa !15
  %181 = load i64, ptr %39, align 8, !tbaa !9
  %182 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 0
  store i64 %181, ptr %182, align 16, !tbaa !9
  %183 = load float, ptr %38, align 4, !tbaa !15
  %184 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float %183, ptr %184, align 4, !tbaa !15
  br label %196

185:                                              ; preds = %169
  %186 = load float, ptr %38, align 4, !tbaa !15
  %187 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  %188 = load float, ptr %187, align 4, !tbaa !15
  %189 = fcmp ogt float %186, %188
  br i1 %189, label %190, label %195

190:                                              ; preds = %185
  %191 = load i64, ptr %39, align 8, !tbaa !9
  %192 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 1
  store i64 %191, ptr %192, align 8, !tbaa !9
  %193 = load float, ptr %38, align 4, !tbaa !15
  %194 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  store float %193, ptr %194, align 4, !tbaa !15
  br label %195

195:                                              ; preds = %190, %185
  br label %196

196:                                              ; preds = %195, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %197

197:                                              ; preds = %196
  %198 = load i64, ptr %17, align 8, !tbaa !9
  %199 = add i64 %198, 1
  store i64 %199, ptr %17, align 8, !tbaa !9
  br label %135, !llvm.loop !22

200:                                              ; preds = %135
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.VlHog_, ptr %201, i32 0, i32 4
  %203 = load i32, ptr %202, align 4, !tbaa !23
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %253

205:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %206 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %207 = load float, ptr %206, align 4, !tbaa !15
  %208 = fpext float %207 to double
  %209 = load float, ptr %20, align 4, !tbaa !15
  %210 = fpext float %209 to double
  %211 = fcmp ogt double %210, 1.000000e-10
  br i1 %211, label %212, label %215

212:                                              ; preds = %205
  %213 = load float, ptr %20, align 4, !tbaa !15
  %214 = fpext float %213 to double
  br label %216

215:                                              ; preds = %205
  br label %216

216:                                              ; preds = %215, %212
  %217 = phi double [ %214, %212 ], [ 1.000000e-10, %215 ]
  %218 = fdiv double %208, %217
  %219 = fcmp olt double %218, 1.000000e+00
  br i1 %219, label %220, label %234

220:                                              ; preds = %216
  %221 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %222 = load float, ptr %221, align 4, !tbaa !15
  %223 = fpext float %222 to double
  %224 = load float, ptr %20, align 4, !tbaa !15
  %225 = fpext float %224 to double
  %226 = fcmp ogt double %225, 1.000000e-10
  br i1 %226, label %227, label %230

227:                                              ; preds = %220
  %228 = load float, ptr %20, align 4, !tbaa !15
  %229 = fpext float %228 to double
  br label %231

230:                                              ; preds = %220
  br label %231

231:                                              ; preds = %230, %227
  %232 = phi double [ %229, %227 ], [ 1.000000e-10, %230 ]
  %233 = fdiv double %223, %232
  br label %235

234:                                              ; preds = %216
  br label %235

235:                                              ; preds = %234, %231
  %236 = phi double [ %233, %231 ], [ 1.000000e+00, %234 ]
  %237 = fptrunc double %236 to float
  %238 = call float @acosf(float noundef %237) #7
  store float %238, ptr %40, align 4, !tbaa !15
  %239 = load float, ptr %40, align 4, !tbaa !15
  %240 = fpext float %239 to double
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.VlHog_, ptr %241, i32 0, i32 2
  %243 = load i64, ptr %242, align 8, !tbaa !19
  %244 = uitofp i64 %243 to double
  %245 = fdiv double 0x400921FB54442D18, %244
  %246 = fdiv double %240, %245
  %247 = fptrunc double %246 to float
  %248 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  store float %247, ptr %248, align 4, !tbaa !15
  %249 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  %250 = load float, ptr %249, align 4, !tbaa !15
  %251 = fsub float 1.000000e+00, %250
  %252 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float %251, ptr %252, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  br label %256

253:                                              ; preds = %200
  %254 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float 1.000000e+00, ptr %254, align 4, !tbaa !15
  %255 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 1
  store i64 -1, ptr %255, align 8, !tbaa !9
  br label %256

256:                                              ; preds = %253, %235
  store i64 0, ptr %32, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %458, %256
  %258 = load i64, ptr %32, align 8, !tbaa !9
  %259 = icmp slt i64 %258, 2
  br i1 %259, label %260, label %461

260:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  %261 = load i64, ptr %32, align 8, !tbaa !9
  %262 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 %261
  %263 = load i64, ptr %262, align 8, !tbaa !9
  store i64 %263, ptr %23, align 8, !tbaa !9
  %264 = load i64, ptr %23, align 8, !tbaa !9
  %265 = icmp slt i64 %264, 0
  br i1 %265, label %266, label %267

266:                                              ; preds = %260
  store i32 16, ptr %42, align 4
  br label %455

267:                                              ; preds = %260
  %268 = load i64, ptr %15, align 8, !tbaa !9
  %269 = sitofp i64 %268 to double
  %270 = fadd double %269, 5.000000e-01
  %271 = load i64, ptr %12, align 8, !tbaa !9
  %272 = uitofp i64 %271 to double
  %273 = fdiv double %270, %272
  %274 = fsub double %273, 5.000000e-01
  %275 = fptrunc double %274 to float
  store float %275, ptr %24, align 4, !tbaa !15
  %276 = load i64, ptr %16, align 8, !tbaa !9
  %277 = sitofp i64 %276 to double
  %278 = fadd double %277, 5.000000e-01
  %279 = load i64, ptr %12, align 8, !tbaa !9
  %280 = uitofp i64 %279 to double
  %281 = fdiv double %278, %280
  %282 = fsub double %281, 5.000000e-01
  %283 = fptrunc double %282 to float
  store float %283, ptr %25, align 4, !tbaa !15
  %284 = load float, ptr %24, align 4, !tbaa !15
  %285 = call i64 @vl_floor_f(float noundef %284)
  store i64 %285, ptr %30, align 8, !tbaa !9
  %286 = load float, ptr %25, align 4, !tbaa !15
  %287 = call i64 @vl_floor_f(float noundef %286)
  store i64 %287, ptr %31, align 8, !tbaa !9
  %288 = load float, ptr %24, align 4, !tbaa !15
  %289 = load i64, ptr %30, align 8, !tbaa !9
  %290 = sitofp i64 %289 to float
  %291 = fsub float %288, %290
  store float %291, ptr %27, align 4, !tbaa !15
  %292 = load float, ptr %25, align 4, !tbaa !15
  %293 = load i64, ptr %31, align 8, !tbaa !9
  %294 = sitofp i64 %293 to float
  %295 = fsub float %292, %294
  store float %295, ptr %29, align 4, !tbaa !15
  %296 = load float, ptr %27, align 4, !tbaa !15
  %297 = fpext float %296 to double
  %298 = fsub double 1.000000e+00, %297
  %299 = fptrunc double %298 to float
  store float %299, ptr %26, align 4, !tbaa !15
  %300 = load float, ptr %29, align 4, !tbaa !15
  %301 = fpext float %300 to double
  %302 = fsub double 1.000000e+00, %301
  %303 = fptrunc double %302 to float
  store float %303, ptr %28, align 4, !tbaa !15
  %304 = load i64, ptr %32, align 8, !tbaa !9
  %305 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 %304
  %306 = load float, ptr %305, align 4, !tbaa !15
  store float %306, ptr %41, align 4, !tbaa !15
  %307 = load i64, ptr %30, align 8, !tbaa !9
  %308 = icmp sge i64 %307, 0
  br i1 %308, label %309, label %336

309:                                              ; preds = %267
  %310 = load i64, ptr %31, align 8, !tbaa !9
  %311 = icmp sge i64 %310, 0
  br i1 %311, label %312, label %336

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

336:                                              ; preds = %312, %309, %267
  %337 = load i64, ptr %30, align 8, !tbaa !9
  %338 = load ptr, ptr %7, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.VlHog_, ptr %338, i32 0, i32 12
  %340 = load i64, ptr %339, align 8, !tbaa !11
  %341 = trunc i64 %340 to i32
  %342 = sub nsw i32 %341, 1
  %343 = sext i32 %342 to i64
  %344 = icmp slt i64 %337, %343
  br i1 %344, label %345, label %373

345:                                              ; preds = %336
  %346 = load i64, ptr %31, align 8, !tbaa !9
  %347 = icmp sge i64 %346, 0
  br i1 %347, label %348, label %373

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

373:                                              ; preds = %348, %345, %336
  %374 = load i64, ptr %30, align 8, !tbaa !9
  %375 = load ptr, ptr %7, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.VlHog_, ptr %375, i32 0, i32 12
  %377 = load i64, ptr %376, align 8, !tbaa !11
  %378 = trunc i64 %377 to i32
  %379 = sub nsw i32 %378, 1
  %380 = sext i32 %379 to i64
  %381 = icmp slt i64 %374, %380
  br i1 %381, label %382, label %417

382:                                              ; preds = %373
  %383 = load i64, ptr %31, align 8, !tbaa !9
  %384 = load ptr, ptr %7, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.VlHog_, ptr %384, i32 0, i32 13
  %386 = load i64, ptr %385, align 8, !tbaa !14
  %387 = trunc i64 %386 to i32
  %388 = sub nsw i32 %387, 1
  %389 = sext i32 %388 to i64
  %390 = icmp slt i64 %383, %389
  br i1 %390, label %391, label %417

391:                                              ; preds = %382
  %392 = load float, ptr %20, align 4, !tbaa !15
  %393 = load float, ptr %41, align 4, !tbaa !15
  %394 = fmul float %392, %393
  %395 = load float, ptr %27, align 4, !tbaa !15
  %396 = fmul float %394, %395
  %397 = load float, ptr %29, align 4, !tbaa !15
  %398 = load ptr, ptr %7, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.VlHog_, ptr %398, i32 0, i32 10
  %400 = load ptr, ptr %399, align 8, !tbaa !24
  %401 = load i64, ptr %30, align 8, !tbaa !9
  %402 = add nsw i64 %401, 1
  %403 = load i64, ptr %31, align 8, !tbaa !9
  %404 = add nsw i64 %403, 1
  %405 = load ptr, ptr %7, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.VlHog_, ptr %405, i32 0, i32 12
  %407 = load i64, ptr %406, align 8, !tbaa !11
  %408 = mul i64 %404, %407
  %409 = add i64 %402, %408
  %410 = load i64, ptr %23, align 8, !tbaa !9
  %411 = load i64, ptr %13, align 8, !tbaa !9
  %412 = mul i64 %410, %411
  %413 = add i64 %409, %412
  %414 = getelementptr inbounds float, ptr %400, i64 %413
  %415 = load float, ptr %414, align 4, !tbaa !15
  %416 = call float @llvm.fmuladd.f32(float %396, float %397, float %415)
  store float %416, ptr %414, align 4, !tbaa !15
  br label %417

417:                                              ; preds = %391, %382, %373
  %418 = load i64, ptr %30, align 8, !tbaa !9
  %419 = icmp sge i64 %418, 0
  br i1 %419, label %420, label %454

420:                                              ; preds = %417
  %421 = load i64, ptr %31, align 8, !tbaa !9
  %422 = load ptr, ptr %7, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.VlHog_, ptr %422, i32 0, i32 13
  %424 = load i64, ptr %423, align 8, !tbaa !14
  %425 = trunc i64 %424 to i32
  %426 = sub nsw i32 %425, 1
  %427 = sext i32 %426 to i64
  %428 = icmp slt i64 %421, %427
  br i1 %428, label %429, label %454

429:                                              ; preds = %420
  %430 = load float, ptr %20, align 4, !tbaa !15
  %431 = load float, ptr %41, align 4, !tbaa !15
  %432 = fmul float %430, %431
  %433 = load float, ptr %26, align 4, !tbaa !15
  %434 = fmul float %432, %433
  %435 = load float, ptr %29, align 4, !tbaa !15
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.VlHog_, ptr %436, i32 0, i32 10
  %438 = load ptr, ptr %437, align 8, !tbaa !24
  %439 = load i64, ptr %30, align 8, !tbaa !9
  %440 = load i64, ptr %31, align 8, !tbaa !9
  %441 = add nsw i64 %440, 1
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.VlHog_, ptr %442, i32 0, i32 12
  %444 = load i64, ptr %443, align 8, !tbaa !11
  %445 = mul i64 %441, %444
  %446 = add i64 %439, %445
  %447 = load i64, ptr %23, align 8, !tbaa !9
  %448 = load i64, ptr %13, align 8, !tbaa !9
  %449 = mul i64 %447, %448
  %450 = add i64 %446, %449
  %451 = getelementptr inbounds float, ptr %438, i64 %450
  %452 = load float, ptr %451, align 4, !tbaa !15
  %453 = call float @llvm.fmuladd.f32(float %434, float %435, float %452)
  store float %453, ptr %451, align 4, !tbaa !15
  br label %454

454:                                              ; preds = %429, %420, %417
  store i32 0, ptr %42, align 4
  br label %455

455:                                              ; preds = %454, %266
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  %456 = load i32, ptr %42, align 4
  switch i32 %456, label %470 [
    i32 0, label %457
    i32 16, label %458
  ]

457:                                              ; preds = %455
  br label %458

458:                                              ; preds = %457, %455
  %459 = load i64, ptr %32, align 8, !tbaa !9
  %460 = add nsw i64 %459, 1
  store i64 %460, ptr %32, align 8, !tbaa !9
  br label %257, !llvm.loop !25

461:                                              ; preds = %257
  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
  br label %462

462:                                              ; preds = %461
  %463 = load i64, ptr %15, align 8, !tbaa !9
  %464 = add nsw i64 %463, 1
  store i64 %464, ptr %15, align 8, !tbaa !9
  br label %75, !llvm.loop !26

465:                                              ; preds = %75
  br label %466

466:                                              ; preds = %465
  %467 = load i64, ptr %16, align 8, !tbaa !9
  %468 = add nsw i64 %467, 1
  store i64 %468, ptr %16, align 8, !tbaa !9
  br label %67, !llvm.loop !27

469:                                              ; preds = %67
  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

470:                                              ; preds = %455
  unreachable
}

; 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: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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

; Function Attrs: nounwind
declare float @acosf(float noundef) #5

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

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: readwrite) }
attributes #5 = { 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 #6 = { inlinehint 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 #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 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!12, !10, i64 16}
!20 = !{!12, !6, i64 56}
!21 = !{!12, !6, i64 64}
!22 = distinct !{!22, !18}
!23 = !{!12, !13, i64 28}
!24 = !{!12, !6, i64 72}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}


; 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 [77 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_image = external hidden unnamed_addr constant [82 x i8], align 1
@__const.vl_hog_put_image.orientationWeights = external hidden unnamed_addr constant [2 x float], align 4
@__const.vl_hog_put_image.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
define dso_local void @vl_hog_put_image(ptr noundef %0, ptr noundef readonly %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, i64 noundef %5) local_unnamed_addr #2 {
  %7 = mul i64 %3, %2
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %8, label %9

8:                                                ; preds = %6
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 606, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_put_image) #5
  unreachable

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

10:                                               ; preds = %9
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 607, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_put_image) #5
  unreachable

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

.preheader.lr.ph:                                 ; preds = %11
  %20 = shl i64 %2, 32
  %sext166 = add i64 %20, -4294967296
  %21 = ashr exact i64 %sext166, 32
  %22 = icmp sgt i64 %21, 1
  %23 = load float, ptr @__const.vl_hog_put_image.orientationWeights, align 4
  %24 = load float, ptr getelementptr inbounds (i8, ptr @__const.vl_hog_put_image.orientationWeights, i64 4), align 4
  %.not202 = icmp eq i64 %4, 0
  %25 = sub i64 0, %2
  %26 = getelementptr inbounds i8, ptr %0, i64 16
  %27 = getelementptr inbounds i8, ptr %0, i64 56
  %28 = getelementptr inbounds i8, ptr %0, i64 64
  %29 = getelementptr inbounds i8, ptr %0, i64 28
  %30 = uitofp i64 %5 to double
  %31 = getelementptr inbounds i8, ptr %0, i64 72
  br i1 %22, label %.preheader.us.preheader, label %._crit_edge201

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %.sroa.0.0.copyload.pre.pre = load i64, ptr @__const.vl_hog_put_image.orientationBins, align 16
  %.sroa.6.0.copyload.pre.pre = load i64, ptr getelementptr inbounds (i8, ptr @__const.vl_hog_put_image.orientationBins, i64 8), align 8
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge199.us
  %.0139200.us = phi i64 [ %257, %._crit_edge199.us ], [ 1, %.preheader.us.preheader ]
  %32 = mul i64 %.0139200.us, %2
  %33 = getelementptr inbounds float, ptr %1, i64 %32
  %34 = uitofp nneg i64 %.0139200.us to double
  %35 = fadd double %34, 5.000000e-01
  %36 = fdiv double %35, %30
  %37 = fadd double %36, -5.000000e-01
  %38 = fptrunc double %37 to float
  br label %39

39:                                               ; preds = %.preheader.us, %220
  %.0197.us = phi i64 [ 1, %.preheader.us ], [ %221, %220 ]
  br i1 %.not202, label %._crit_edge.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %39
  %40 = getelementptr inbounds float, ptr %33, i64 %.0197.us
  br label %.lr.ph.us

._crit_edge.us:                                   ; preds = %.lr.ph.us, %39
  %.0147.lcssa.us = phi float [ 0.000000e+00, %39 ], [ %.1148.us, %.lr.ph.us ]
  %.0145.lcssa.us = phi float [ 0.000000e+00, %39 ], [ %.1146.us, %.lr.ph.us ]
  %.0143.lcssa.us = phi float [ 0.000000e+00, %39 ], [ %.1144.us, %.lr.ph.us ]
  %41 = tail call float @sqrtf(float noundef %.0147.lcssa.us) #6
  %42 = load i64, ptr %26, align 8, !tbaa !13
  %.not203 = icmp eq i64 %42, 0
  br i1 %.not203, label %._crit_edge189.us, label %.lr.ph188.us

._crit_edge189.us:                                ; preds = %237, %._crit_edge.us
  %.sroa.9.0 = phi float [ %24, %._crit_edge.us ], [ %238, %237 ]
  %.sroa.6.0 = phi i64 [ %.sroa.6.0.copyload.pre.pre, %._crit_edge.us ], [ %.0140195.us, %237 ]
  %.0140183.lcssa.us = phi i64 [ %.sroa.0.0.copyload.pre.pre, %._crit_edge.us ], [ %.0140182.us, %237 ]
  %.0141180.lcssa.us = phi float [ %23, %._crit_edge.us ], [ %.0141179.us, %237 ]
  %43 = load i32, ptr %29, align 4, !tbaa !14
  %.not167.us = icmp eq i32 %43, 0
  br i1 %.not167.us, label %61, label %44

44:                                               ; preds = %._crit_edge189.us
  %45 = fpext float %.0141180.lcssa.us to double
  %46 = fpext float %41 to double
  %47 = fcmp ogt double %46, 1.000000e-10
  %48 = select i1 %47, double %46, double 1.000000e-10
  %49 = fdiv double %45, %48
  %50 = fcmp olt double %49, 1.000000e+00
  %51 = select i1 %50, double %49, double 1.000000e+00
  %52 = fptrunc double %51 to float
  %53 = tail call float @acosf(float noundef %52) #6
  %54 = fpext float %53 to double
  %55 = load i64, ptr %26, align 8, !tbaa !13
  %56 = uitofp i64 %55 to double
  %57 = fdiv double 0x400921FB54442D18, %56
  %58 = fdiv double %54, %57
  %59 = fptrunc double %58 to float
  %60 = fsub float 1.000000e+00, %59
  br label %61

61:                                               ; preds = %._crit_edge189.us, %44
  %.sroa.9.1 = phi float [ %59, %44 ], [ %.sroa.9.0, %._crit_edge189.us ]
  %.sroa.0209.0 = phi float [ %60, %44 ], [ 1.000000e+00, %._crit_edge189.us ]
  %.sroa.6.1 = phi i64 [ %.sroa.6.0, %44 ], [ -1, %._crit_edge189.us ]
  %62 = uitofp nneg i64 %.0197.us to double
  %63 = fadd double %62, 5.000000e-01
  %64 = fdiv double %63, %30
  %65 = fadd double %64, -5.000000e-01
  %66 = fptrunc double %65 to float
  %67 = icmp slt i64 %.0140183.lcssa.us, 0
  br i1 %67, label %143, label %68

68:                                               ; preds = %61
  %69 = tail call i64 @vl_floor_f(float noundef %66)
  %70 = tail call i64 @vl_floor_f(float noundef %38)
  %71 = sitofp i64 %69 to float
  %72 = fsub float %66, %71
  %73 = sitofp i64 %70 to float
  %74 = fsub float %38, %73
  %75 = fsub float 1.000000e+00, %72
  %76 = fsub float 1.000000e+00, %74
  %77 = icmp sgt i64 %69, -1
  %78 = icmp sgt i64 %70, -1
  %or.cond.us = select i1 %77, i1 %78, i1 false
  %.pre = load i64, ptr %12, align 8, !tbaa !5
  br i1 %or.cond.us, label %79, label %90

79:                                               ; preds = %68
  %80 = fmul float %41, %.sroa.0209.0
  %81 = fmul float %80, %75
  %82 = load ptr, ptr %31, align 8, !tbaa !15
  %83 = mul i64 %.pre, %70
  %84 = mul i64 %.0140183.lcssa.us, %16
  %85 = getelementptr float, ptr %82, i64 %69
  %86 = getelementptr float, ptr %85, i64 %83
  %87 = getelementptr float, ptr %86, i64 %84
  %88 = load float, ptr %87, align 4, !tbaa !16
  %89 = tail call float @llvm.fmuladd.f32(float %81, float %76, float %88)
  store float %89, ptr %87, align 4, !tbaa !16
  br label %90

90:                                               ; preds = %79, %68
  %91 = shl i64 %.pre, 32
  %sext168.us = add i64 %91, -4294967296
  %92 = ashr exact i64 %sext168.us, 32
  %93 = icmp slt i64 %69, %92
  %or.cond3.us = select i1 %93, i1 %78, i1 false
  br i1 %or.cond3.us, label %94, label %106

94:                                               ; preds = %90
  %95 = fmul float %41, %.sroa.0209.0
  %96 = fmul float %72, %95
  %97 = load ptr, ptr %31, align 8, !tbaa !15
  %98 = mul i64 %.pre, %70
  %99 = mul i64 %.0140183.lcssa.us, %16
  %100 = getelementptr float, ptr %97, i64 %69
  %101 = getelementptr i8, ptr %100, i64 4
  %102 = getelementptr float, ptr %101, i64 %98
  %103 = getelementptr float, ptr %102, i64 %99
  %104 = load float, ptr %103, align 4, !tbaa !16
  %105 = tail call float @llvm.fmuladd.f32(float %96, float %76, float %104)
  store float %105, ptr %103, align 4, !tbaa !16
  br label %106

106:                                              ; preds = %94, %90
  br i1 %93, label %107, label %125

107:                                              ; preds = %106
  %108 = load i64, ptr %14, align 8, !tbaa !12
  %109 = shl i64 %108, 32
  %sext170.us = add i64 %109, -4294967296
  %110 = ashr exact i64 %sext170.us, 32
  %111 = icmp slt i64 %70, %110
  br i1 %111, label %112, label %125

112:                                              ; preds = %107
  %113 = fmul float %41, %.sroa.0209.0
  %114 = fmul float %72, %113
  %115 = load ptr, ptr %31, align 8, !tbaa !15
  %116 = add nsw i64 %70, 1
  %117 = mul i64 %.pre, %116
  %118 = mul i64 %.0140183.lcssa.us, %16
  %119 = getelementptr float, ptr %115, i64 %69
  %120 = getelementptr i8, ptr %119, i64 4
  %121 = getelementptr float, ptr %120, i64 %117
  %122 = getelementptr float, ptr %121, i64 %118
  %123 = load float, ptr %122, align 4, !tbaa !16
  %124 = tail call float @llvm.fmuladd.f32(float %114, float %74, float %123)
  store float %124, ptr %122, align 4, !tbaa !16
  br label %125

125:                                              ; preds = %112, %107, %106
  br i1 %77, label %126, label %143

126:                                              ; preds = %125
  %127 = load i64, ptr %14, align 8, !tbaa !12
  %128 = shl i64 %127, 32
  %sext171.us = add i64 %128, -4294967296
  %129 = ashr exact i64 %sext171.us, 32
  %130 = icmp slt i64 %70, %129
  br i1 %130, label %131, label %143

131:                                              ; preds = %126
  %132 = fmul float %41, %.sroa.0209.0
  %133 = fmul float %132, %75
  %134 = load ptr, ptr %31, align 8, !tbaa !15
  %135 = add nsw i64 %70, 1
  %136 = mul i64 %.pre, %135
  %137 = mul i64 %.0140183.lcssa.us, %16
  %138 = getelementptr float, ptr %134, i64 %69
  %139 = getelementptr float, ptr %138, i64 %136
  %140 = getelementptr float, ptr %139, i64 %137
  %141 = load float, ptr %140, align 4, !tbaa !16
  %142 = tail call float @llvm.fmuladd.f32(float %133, float %74, float %141)
  store float %142, ptr %140, align 4, !tbaa !16
  br label %143

143:                                              ; preds = %131, %126, %125, %61
  %144 = icmp slt i64 %.sroa.6.1, 0
  br i1 %144, label %220, label %145

145:                                              ; preds = %143
  %146 = tail call i64 @vl_floor_f(float noundef %66)
  %147 = tail call i64 @vl_floor_f(float noundef %38)
  %148 = sitofp i64 %146 to float
  %149 = fsub float %66, %148
  %150 = sitofp i64 %147 to float
  %151 = fsub float %38, %150
  %152 = fsub float 1.000000e+00, %149
  %153 = fsub float 1.000000e+00, %151
  %154 = icmp sgt i64 %146, -1
  %155 = icmp sgt i64 %147, -1
  %or.cond.us.1 = select i1 %154, i1 %155, i1 false
  %.pre211 = load i64, ptr %12, align 8, !tbaa !5
  br i1 %or.cond.us.1, label %156, label %167

156:                                              ; preds = %145
  %157 = fmul float %41, %.sroa.9.1
  %158 = fmul float %157, %152
  %159 = load ptr, ptr %31, align 8, !tbaa !15
  %160 = mul i64 %.pre211, %147
  %161 = mul i64 %.sroa.6.1, %16
  %162 = getelementptr float, ptr %159, i64 %146
  %163 = getelementptr float, ptr %162, i64 %160
  %164 = getelementptr float, ptr %163, i64 %161
  %165 = load float, ptr %164, align 4, !tbaa !16
  %166 = tail call float @llvm.fmuladd.f32(float %158, float %153, float %165)
  store float %166, ptr %164, align 4, !tbaa !16
  br label %167

167:                                              ; preds = %156, %145
  %168 = shl i64 %.pre211, 32
  %sext168.us.1 = add i64 %168, -4294967296
  %169 = ashr exact i64 %sext168.us.1, 32
  %170 = icmp slt i64 %146, %169
  %or.cond3.us.1 = select i1 %170, i1 %155, i1 false
  br i1 %or.cond3.us.1, label %171, label %183

171:                                              ; preds = %167
  %172 = fmul float %41, %.sroa.9.1
  %173 = fmul float %149, %172
  %174 = load ptr, ptr %31, align 8, !tbaa !15
  %175 = mul i64 %.pre211, %147
  %176 = mul i64 %.sroa.6.1, %16
  %177 = getelementptr float, ptr %174, i64 %146
  %178 = getelementptr i8, ptr %177, i64 4
  %179 = getelementptr float, ptr %178, i64 %175
  %180 = getelementptr float, ptr %179, i64 %176
  %181 = load float, ptr %180, align 4, !tbaa !16
  %182 = tail call float @llvm.fmuladd.f32(float %173, float %153, float %181)
  store float %182, ptr %180, align 4, !tbaa !16
  br label %183

183:                                              ; preds = %171, %167
  br i1 %170, label %184, label %202

184:                                              ; preds = %183
  %185 = load i64, ptr %14, align 8, !tbaa !12
  %186 = shl i64 %185, 32
  %sext170.us.1 = add i64 %186, -4294967296
  %187 = ashr exact i64 %sext170.us.1, 32
  %188 = icmp slt i64 %147, %187
  br i1 %188, label %189, label %202

189:                                              ; preds = %184
  %190 = fmul float %41, %.sroa.9.1
  %191 = fmul float %149, %190
  %192 = load ptr, ptr %31, align 8, !tbaa !15
  %193 = add nsw i64 %147, 1
  %194 = mul i64 %.pre211, %193
  %195 = mul i64 %.sroa.6.1, %16
  %196 = getelementptr float, ptr %192, i64 %146
  %197 = getelementptr i8, ptr %196, i64 4
  %198 = getelementptr float, ptr %197, i64 %194
  %199 = getelementptr float, ptr %198, i64 %195
  %200 = load float, ptr %199, align 4, !tbaa !16
  %201 = tail call float @llvm.fmuladd.f32(float %191, float %151, float %200)
  store float %201, ptr %199, align 4, !tbaa !16
  br label %202

202:                                              ; preds = %189, %184, %183
  br i1 %154, label %203, label %220

203:                                              ; preds = %202
  %204 = load i64, ptr %14, align 8, !tbaa !12
  %205 = shl i64 %204, 32
  %sext171.us.1 = add i64 %205, -4294967296
  %206 = ashr exact i64 %sext171.us.1, 32
  %207 = icmp slt i64 %147, %206
  br i1 %207, label %208, label %220

208:                                              ; preds = %203
  %209 = fmul float %41, %.sroa.9.1
  %210 = fmul float %209, %152
  %211 = load ptr, ptr %31, align 8, !tbaa !15
  %212 = add nsw i64 %147, 1
  %213 = mul i64 %.pre211, %212
  %214 = mul i64 %.sroa.6.1, %16
  %215 = getelementptr float, ptr %211, i64 %146
  %216 = getelementptr float, ptr %215, i64 %213
  %217 = getelementptr float, ptr %216, i64 %214
  %218 = load float, ptr %217, align 4, !tbaa !16
  %219 = tail call float @llvm.fmuladd.f32(float %210, float %151, float %218)
  store float %219, ptr %217, align 4, !tbaa !16
  br label %220

220:                                              ; preds = %208, %203, %202, %143
  %221 = add nuw nsw i64 %.0197.us, 1
  %exitcond206.not = icmp eq i64 %221, %21
  br i1 %exitcond206.not, label %._crit_edge199.us, label %39, !llvm.loop !18

222:                                              ; preds = %.lr.ph188.us, %237
  %.0140194.us = phi i64 [ %.sroa.6.0.copyload.pre.pre, %.lr.ph188.us ], [ %.0140195.us, %237 ]
  %223 = phi float [ %24, %.lr.ph188.us ], [ %238, %237 ]
  %.1186.us = phi i64 [ 0, %.lr.ph188.us ], [ %239, %237 ]
  %.0141180185.us = phi float [ %23, %.lr.ph188.us ], [ %.0141179.us, %237 ]
  %.0140183184.us = phi i64 [ %.sroa.0.0.copyload.pre.pre, %.lr.ph188.us ], [ %.0140182.us, %237 ]
  %224 = getelementptr inbounds float, ptr %255, i64 %.1186.us
  %225 = load float, ptr %224, align 4, !tbaa !16
  %226 = getelementptr inbounds float, ptr %256, i64 %.1186.us
  %227 = load float, ptr %226, align 4, !tbaa !16
  %228 = fmul float %.0145.lcssa.us, %227
  %229 = tail call float @llvm.fmuladd.f32(float %.0143.lcssa.us, float %225, float %228)
  %230 = fcmp olt float %229, 0.000000e+00
  %231 = fneg float %229
  %.0141.us = select i1 %230, float %231, float %229
  %232 = select i1 %230, i64 %42, i64 0
  %.0140.us = add i64 %232, %.1186.us
  %233 = fcmp ogt float %.0141.us, %.0141180185.us
  br i1 %233, label %237, label %234

234:                                              ; preds = %222
  %235 = fcmp ogt float %.0141.us, %223
  br i1 %235, label %236, label %237

236:                                              ; preds = %234
  br label %237

237:                                              ; preds = %222, %236, %234
  %.0140195.us = phi i64 [ %.0140194.us, %234 ], [ %.0140.us, %236 ], [ %.0140183184.us, %222 ]
  %238 = phi float [ %223, %234 ], [ %.0141.us, %236 ], [ %.0141180185.us, %222 ]
  %.0140182.us = phi i64 [ %.0140183184.us, %234 ], [ %.0140183184.us, %236 ], [ %.0140.us, %222 ]
  %.0141179.us = phi float [ %.0141180185.us, %234 ], [ %.0141180185.us, %236 ], [ %.0141.us, %222 ]
  %239 = add nuw i64 %.1186.us, 1
  %exitcond205.not = icmp eq i64 %239, %42
  br i1 %exitcond205.not, label %._crit_edge189.us, label %222, !llvm.loop !20

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %.lr.ph.us
  %.0142176.us = phi i64 [ %254, %.lr.ph.us ], [ 0, %.lr.ph.us.preheader ]
  %.0143175.us = phi float [ %.1144.us, %.lr.ph.us ], [ 0.000000e+00, %.lr.ph.us.preheader ]
  %.0145174.us = phi float [ %.1146.us, %.lr.ph.us ], [ 0.000000e+00, %.lr.ph.us.preheader ]
  %.0147173.us = phi float [ %.1148.us, %.lr.ph.us ], [ 0.000000e+00, %.lr.ph.us.preheader ]
  %.0149172.us = phi ptr [ %253, %.lr.ph.us ], [ %40, %.lr.ph.us.preheader ]
  %240 = getelementptr inbounds i8, ptr %.0149172.us, i64 4
  %241 = load float, ptr %240, align 4, !tbaa !16
  %242 = getelementptr inbounds i8, ptr %.0149172.us, i64 -4
  %243 = load float, ptr %242, align 4, !tbaa !16
  %244 = fsub float %241, %243
  %245 = getelementptr inbounds float, ptr %.0149172.us, i64 %2
  %246 = load float, ptr %245, align 4, !tbaa !16
  %247 = getelementptr inbounds float, ptr %.0149172.us, i64 %25
  %248 = load float, ptr %247, align 4, !tbaa !16
  %249 = fsub float %246, %248
  %250 = fmul float %249, %249
  %251 = tail call float @llvm.fmuladd.f32(float %244, float %244, float %250)
  %252 = fcmp ogt float %251, %.0147173.us
  %.1148.us = select i1 %252, float %251, float %.0147173.us
  %.1146.us = select i1 %252, float %249, float %.0145174.us
  %.1144.us = select i1 %252, float %244, float %.0143175.us
  %253 = getelementptr inbounds float, ptr %.0149172.us, i64 %7
  %254 = add nuw i64 %.0142176.us, 1
  %exitcond.not = icmp eq i64 %254, %4
  br i1 %exitcond.not, label %._crit_edge.us, label %.lr.ph.us, !llvm.loop !21

.lr.ph188.us:                                     ; preds = %._crit_edge.us
  %255 = load ptr, ptr %27, align 8, !tbaa !22
  %256 = load ptr, ptr %28, align 8, !tbaa !23
  br label %222

._crit_edge199.us:                                ; preds = %220
  %257 = add nuw nsw i64 %.0139200.us, 1
  %exitcond207.not = icmp eq i64 %257, %18
  br i1 %exitcond207.not, label %._crit_edge201, label %.preheader.us, !llvm.loop !24

._crit_edge201:                                   ; preds = %._crit_edge199.us, %.preheader.lr.ph, %11
  ret void
}

; 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: mustprogress nofree nounwind willreturn memory(write)
declare float @sqrtf(float noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @acosf(float noundef) local_unnamed_addr #3

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

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


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