; LLVM IR from szad670401/HyperLandmark :: Prj-Win/src (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 [76 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.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
  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
  %41 = load i64, ptr %9, align 8, !tbaa !9
  %42 = load i64, ptr %10, align 8, !tbaa !9
  %43 = mul i64 %41, %42
  store i64 %43, 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
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = icmp ne ptr %44, null
  br i1 %45, label %46, label %47

46:                                               ; preds = %6
  br label %48

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

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

51:                                               ; preds = %48
  br label %53

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

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

65:                                               ; preds = %476, %53
  %66 = load i64, ptr %16, align 8, !tbaa !9
  %67 = load i64, ptr %10, align 8, !tbaa !9
  %68 = trunc i64 %67 to i32
  %69 = sub nsw i32 %68, 1
  %70 = sext i32 %69 to i64
  %71 = icmp slt i64 %66, %70
  br i1 %71, label %72, label %479

72:                                               ; preds = %65
  store i64 1, ptr %15, align 8, !tbaa !9
  br label %73

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

80:                                               ; preds = %73
  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_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
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = load i64, ptr %16, align 8, !tbaa !9
  %83 = load i64, ptr %9, align 8, !tbaa !9
  %84 = mul i64 %82, %83
  %85 = getelementptr inbounds float, ptr %81, i64 %84
  %86 = load i64, ptr %15, align 8, !tbaa !9
  %87 = getelementptr inbounds float, ptr %85, i64 %86
  store ptr %87, 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 %88

88:                                               ; preds = %127, %80
  %89 = load i64, ptr %17, align 8, !tbaa !9
  %90 = load i64, ptr %11, align 8, !tbaa !9
  %91 = icmp ult i64 %89, %90
  br i1 %91, label %92, label %130

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

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

123:                                              ; preds = %119, %92
  %124 = load i64, ptr %14, align 8, !tbaa !9
  %125 = load ptr, ptr %33, align 8, !tbaa !5
  %126 = getelementptr inbounds float, ptr %125, i64 %124
  store ptr %126, 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 %127

127:                                              ; preds = %123
  %128 = load i64, ptr %17, align 8, !tbaa !9
  %129 = add i64 %128, 1
  store i64 %129, ptr %17, align 8, !tbaa !9
  br label %88, !llvm.loop !17

130:                                              ; preds = %88
  %131 = load float, ptr %34, align 4, !tbaa !15
  %132 = call float @sqrtf(float noundef %131) #7
  store float %132, ptr %20, align 4, !tbaa !15
  %133 = load float, ptr %20, align 4, !tbaa !15
  %134 = fpext float %133 to double
  %135 = fcmp ogt double %134, 1.000000e-10
  br i1 %135, label %136, label %139

136:                                              ; preds = %130
  %137 = load float, ptr %20, align 4, !tbaa !15
  %138 = fpext float %137 to double
  br label %140

139:                                              ; preds = %130
  br label %140

140:                                              ; preds = %139, %136
  %141 = phi double [ %138, %136 ], [ 1.000000e-10, %139 ]
  %142 = load float, ptr %18, align 4, !tbaa !15
  %143 = fpext float %142 to double
  %144 = fdiv double %143, %141
  %145 = fptrunc double %144 to float
  store float %145, ptr %18, align 4, !tbaa !15
  %146 = load float, ptr %20, align 4, !tbaa !15
  %147 = fpext float %146 to double
  %148 = fcmp ogt double %147, 1.000000e-10
  br i1 %148, label %149, label %152

149:                                              ; preds = %140
  %150 = load float, ptr %20, align 4, !tbaa !15
  %151 = fpext float %150 to double
  br label %153

152:                                              ; preds = %140
  br label %153

153:                                              ; preds = %152, %149
  %154 = phi double [ %151, %149 ], [ 1.000000e-10, %152 ]
  %155 = load float, ptr %19, align 4, !tbaa !15
  %156 = fpext float %155 to double
  %157 = fdiv double %156, %154
  %158 = fptrunc double %157 to float
  store float %158, 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 %159

159:                                              ; preds = %221, %153
  %160 = load i64, ptr %17, align 8, !tbaa !9
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.VlHog_, ptr %161, i32 0, i32 2
  %163 = load i64, ptr %162, align 8, !tbaa !19
  %164 = icmp ult i64 %160, %163
  br i1 %164, label %165, label %224

165:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %166 = load float, ptr %18, align 4, !tbaa !15
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.VlHog_, ptr %167, i32 0, i32 8
  %169 = load ptr, ptr %168, align 8, !tbaa !20
  %170 = load i64, ptr %17, align 8, !tbaa !9
  %171 = getelementptr inbounds float, ptr %169, i64 %170
  %172 = load float, ptr %171, align 4, !tbaa !15
  %173 = load float, ptr %19, align 4, !tbaa !15
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.VlHog_, ptr %174, i32 0, i32 9
  %176 = load ptr, ptr %175, align 8, !tbaa !21
  %177 = load i64, ptr %17, align 8, !tbaa !9
  %178 = getelementptr inbounds float, ptr %176, i64 %177
  %179 = load float, ptr %178, align 4, !tbaa !15
  %180 = fmul float %173, %179
  %181 = call float @llvm.fmuladd.f32(float %166, float %172, float %180)
  store float %181, ptr %38, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  %182 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %182, ptr %39, align 8, !tbaa !9
  %183 = load float, ptr %38, align 4, !tbaa !15
  %184 = fcmp olt float %183, 0.000000e+00
  br i1 %184, label %185, label %193

185:                                              ; preds = %165
  %186 = load float, ptr %38, align 4, !tbaa !15
  %187 = fneg float %186
  store float %187, ptr %38, align 4, !tbaa !15
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.VlHog_, ptr %188, i32 0, i32 2
  %190 = load i64, ptr %189, align 8, !tbaa !19
  %191 = load i64, ptr %39, align 8, !tbaa !9
  %192 = add i64 %191, %190
  store i64 %192, ptr %39, align 8, !tbaa !9
  br label %193

193:                                              ; preds = %185, %165
  %194 = load float, ptr %38, align 4, !tbaa !15
  %195 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %196 = load float, ptr %195, align 4, !tbaa !15
  %197 = fcmp ogt float %194, %196
  br i1 %197, label %198, label %209

198:                                              ; preds = %193
  %199 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 0
  %200 = load i64, ptr %199, align 16, !tbaa !9
  %201 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 1
  store i64 %200, ptr %201, align 8, !tbaa !9
  %202 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %203 = load float, ptr %202, align 4, !tbaa !15
  %204 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  store float %203, ptr %204, align 4, !tbaa !15
  %205 = load i64, ptr %39, align 8, !tbaa !9
  %206 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 0
  store i64 %205, ptr %206, align 16, !tbaa !9
  %207 = load float, ptr %38, align 4, !tbaa !15
  %208 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float %207, ptr %208, align 4, !tbaa !15
  br label %220

209:                                              ; preds = %193
  %210 = load float, ptr %38, align 4, !tbaa !15
  %211 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  %212 = load float, ptr %211, align 4, !tbaa !15
  %213 = fcmp ogt float %210, %212
  br i1 %213, label %214, label %219

214:                                              ; preds = %209
  %215 = load i64, ptr %39, align 8, !tbaa !9
  %216 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 1
  store i64 %215, ptr %216, align 8, !tbaa !9
  %217 = load float, ptr %38, align 4, !tbaa !15
  %218 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 1
  store float %217, ptr %218, align 4, !tbaa !15
  br label %219

219:                                              ; preds = %214, %209
  br label %220

220:                                              ; preds = %219, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %221

221:                                              ; preds = %220
  %222 = load i64, ptr %17, align 8, !tbaa !9
  %223 = add i64 %222, 1
  store i64 %223, ptr %17, align 8, !tbaa !9
  br label %159, !llvm.loop !22

224:                                              ; preds = %159
  %225 = load ptr, ptr %7, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.VlHog_, ptr %225, i32 0, i32 4
  %227 = load i32, ptr %226, align 4, !tbaa !23
  %228 = icmp ne i32 %227, 0
  br i1 %228, label %229, label %257

229:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %230 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %231 = load float, ptr %230, align 4, !tbaa !15
  %232 = fpext float %231 to double
  %233 = fcmp olt double %232, 1.000000e+00
  br i1 %233, label %234, label %238

234:                                              ; preds = %229
  %235 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  %236 = load float, ptr %235, align 4, !tbaa !15
  %237 = fpext float %236 to double
  br label %239

238:                                              ; preds = %229
  br label %239

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

257:                                              ; preds = %224
  %258 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 0
  store float 1.000000e+00, ptr %258, align 4, !tbaa !15
  %259 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 1
  store i64 -1, ptr %259, align 8, !tbaa !9
  br label %260

260:                                              ; preds = %257, %239
  store i64 0, ptr %32, align 8, !tbaa !9
  br label %261

261:                                              ; preds = %468, %260
  %262 = load i64, ptr %32, align 8, !tbaa !9
  %263 = icmp slt i64 %262, 2
  br i1 %263, label %264, label %471

264:                                              ; preds = %261
  %265 = load i64, ptr %32, align 8, !tbaa !9
  %266 = getelementptr inbounds [2 x i64], ptr %22, i64 0, i64 %265
  %267 = load i64, ptr %266, align 8, !tbaa !9
  store i64 %267, ptr %23, align 8, !tbaa !9
  %268 = load i64, ptr %23, align 8, !tbaa !9
  %269 = icmp slt i64 %268, 0
  br i1 %269, label %270, label %271

270:                                              ; preds = %264
  br label %468

271:                                              ; preds = %264
  %272 = load i64, ptr %15, align 8, !tbaa !9
  %273 = sitofp i64 %272 to double
  %274 = fadd double %273, 5.000000e-01
  %275 = load i64, ptr %12, align 8, !tbaa !9
  %276 = uitofp i64 %275 to double
  %277 = fdiv double %274, %276
  %278 = fsub double %277, 5.000000e-01
  %279 = fptrunc double %278 to float
  store float %279, ptr %24, align 4, !tbaa !15
  %280 = load i64, ptr %16, align 8, !tbaa !9
  %281 = sitofp i64 %280 to double
  %282 = fadd double %281, 5.000000e-01
  %283 = load i64, ptr %12, align 8, !tbaa !9
  %284 = uitofp i64 %283 to double
  %285 = fdiv double %282, %284
  %286 = fsub double %285, 5.000000e-01
  %287 = fptrunc double %286 to float
  store float %287, ptr %25, align 4, !tbaa !15
  %288 = load float, ptr %24, align 4, !tbaa !15
  %289 = call i64 @vl_floor_f(float noundef %288)
  store i64 %289, ptr %30, align 8, !tbaa !9
  %290 = load float, ptr %25, align 4, !tbaa !15
  %291 = call i64 @vl_floor_f(float noundef %290)
  store i64 %291, ptr %31, align 8, !tbaa !9
  %292 = load float, ptr %24, align 4, !tbaa !15
  %293 = load i64, ptr %30, align 8, !tbaa !9
  %294 = sitofp i64 %293 to float
  %295 = fsub float %292, %294
  store float %295, ptr %27, align 4, !tbaa !15
  %296 = load float, ptr %25, align 4, !tbaa !15
  %297 = load i64, ptr %31, align 8, !tbaa !9
  %298 = sitofp i64 %297 to float
  %299 = fsub float %296, %298
  store float %299, ptr %29, align 4, !tbaa !15
  %300 = load float, ptr %27, 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 %26, align 4, !tbaa !15
  %304 = load float, ptr %29, align 4, !tbaa !15
  %305 = fpext float %304 to double
  %306 = fsub double 1.000000e+00, %305
  %307 = fptrunc double %306 to float
  store float %307, ptr %28, align 4, !tbaa !15
  %308 = load i64, ptr %32, align 8, !tbaa !9
  %309 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 %308
  %310 = load float, ptr %309, align 4, !tbaa !15
  %311 = load float, ptr %26, align 4, !tbaa !15
  %312 = fmul float %311, %310
  store float %312, ptr %26, align 4, !tbaa !15
  %313 = load i64, ptr %32, align 8, !tbaa !9
  %314 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 %313
  %315 = load float, ptr %314, align 4, !tbaa !15
  %316 = load float, ptr %27, align 4, !tbaa !15
  %317 = fmul float %316, %315
  store float %317, ptr %27, align 4, !tbaa !15
  %318 = load i64, ptr %32, align 8, !tbaa !9
  %319 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 %318
  %320 = load float, ptr %319, align 4, !tbaa !15
  %321 = load float, ptr %28, align 4, !tbaa !15
  %322 = fmul float %321, %320
  store float %322, ptr %28, align 4, !tbaa !15
  %323 = load i64, ptr %32, align 8, !tbaa !9
  %324 = getelementptr inbounds [2 x float], ptr %21, i64 0, i64 %323
  %325 = load float, ptr %324, align 4, !tbaa !15
  %326 = load float, ptr %29, align 4, !tbaa !15
  %327 = fmul float %326, %325
  store float %327, ptr %29, align 4, !tbaa !15
  %328 = load i64, ptr %30, align 8, !tbaa !9
  %329 = icmp sge i64 %328, 0
  br i1 %329, label %330, label %355

330:                                              ; preds = %271
  %331 = load i64, ptr %31, align 8, !tbaa !9
  %332 = icmp sge i64 %331, 0
  br i1 %332, label %333, label %355

333:                                              ; preds = %330
  %334 = load float, ptr %20, align 4, !tbaa !15
  %335 = load float, ptr %26, align 4, !tbaa !15
  %336 = fmul float %334, %335
  %337 = load float, ptr %28, align 4, !tbaa !15
  %338 = load ptr, ptr %7, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.VlHog_, ptr %338, i32 0, i32 10
  %340 = load ptr, ptr %339, align 8, !tbaa !24
  %341 = load i64, ptr %30, align 8, !tbaa !9
  %342 = load i64, ptr %31, align 8, !tbaa !9
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.VlHog_, ptr %343, i32 0, i32 12
  %345 = load i64, ptr %344, align 8, !tbaa !11
  %346 = mul i64 %342, %345
  %347 = add i64 %341, %346
  %348 = load i64, ptr %23, align 8, !tbaa !9
  %349 = load i64, ptr %13, align 8, !tbaa !9
  %350 = mul i64 %348, %349
  %351 = add i64 %347, %350
  %352 = getelementptr inbounds float, ptr %340, i64 %351
  %353 = load float, ptr %352, align 4, !tbaa !15
  %354 = call float @llvm.fmuladd.f32(float %336, float %337, float %353)
  store float %354, ptr %352, align 4, !tbaa !15
  br label %355

355:                                              ; preds = %333, %330, %271
  %356 = load i64, ptr %30, align 8, !tbaa !9
  %357 = load ptr, ptr %7, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.VlHog_, ptr %357, i32 0, i32 12
  %359 = load i64, ptr %358, align 8, !tbaa !11
  %360 = trunc i64 %359 to i32
  %361 = sub nsw i32 %360, 1
  %362 = sext i32 %361 to i64
  %363 = icmp slt i64 %356, %362
  br i1 %363, label %364, label %390

364:                                              ; preds = %355
  %365 = load i64, ptr %31, align 8, !tbaa !9
  %366 = icmp sge i64 %365, 0
  br i1 %366, label %367, label %390

367:                                              ; preds = %364
  %368 = load float, ptr %20, align 4, !tbaa !15
  %369 = load float, ptr %27, align 4, !tbaa !15
  %370 = fmul float %368, %369
  %371 = load float, ptr %28, align 4, !tbaa !15
  %372 = load ptr, ptr %7, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.VlHog_, ptr %372, i32 0, i32 10
  %374 = load ptr, ptr %373, align 8, !tbaa !24
  %375 = load i64, ptr %30, align 8, !tbaa !9
  %376 = add nsw i64 %375, 1
  %377 = load i64, ptr %31, align 8, !tbaa !9
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.VlHog_, ptr %378, i32 0, i32 12
  %380 = load i64, ptr %379, align 8, !tbaa !11
  %381 = mul i64 %377, %380
  %382 = add i64 %376, %381
  %383 = load i64, ptr %23, align 8, !tbaa !9
  %384 = load i64, ptr %13, align 8, !tbaa !9
  %385 = mul i64 %383, %384
  %386 = add i64 %382, %385
  %387 = getelementptr inbounds float, ptr %374, i64 %386
  %388 = load float, ptr %387, align 4, !tbaa !15
  %389 = call float @llvm.fmuladd.f32(float %370, float %371, float %388)
  store float %389, ptr %387, align 4, !tbaa !15
  br label %390

390:                                              ; preds = %367, %364, %355
  %391 = load i64, ptr %30, align 8, !tbaa !9
  %392 = load ptr, ptr %7, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.VlHog_, ptr %392, i32 0, i32 12
  %394 = load i64, ptr %393, align 8, !tbaa !11
  %395 = trunc i64 %394 to i32
  %396 = sub nsw i32 %395, 1
  %397 = sext i32 %396 to i64
  %398 = icmp slt i64 %391, %397
  br i1 %398, label %399, label %432

399:                                              ; preds = %390
  %400 = load i64, ptr %31, align 8, !tbaa !9
  %401 = load ptr, ptr %7, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.VlHog_, ptr %401, i32 0, i32 13
  %403 = load i64, ptr %402, align 8, !tbaa !14
  %404 = trunc i64 %403 to i32
  %405 = sub nsw i32 %404, 1
  %406 = sext i32 %405 to i64
  %407 = icmp slt i64 %400, %406
  br i1 %407, label %408, label %432

408:                                              ; preds = %399
  %409 = load float, ptr %20, align 4, !tbaa !15
  %410 = load float, ptr %27, align 4, !tbaa !15
  %411 = fmul float %409, %410
  %412 = load float, ptr %29, align 4, !tbaa !15
  %413 = load ptr, ptr %7, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.VlHog_, ptr %413, i32 0, i32 10
  %415 = load ptr, ptr %414, align 8, !tbaa !24
  %416 = load i64, ptr %30, align 8, !tbaa !9
  %417 = add nsw i64 %416, 1
  %418 = load i64, ptr %31, align 8, !tbaa !9
  %419 = add nsw i64 %418, 1
  %420 = load ptr, ptr %7, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.VlHog_, ptr %420, i32 0, i32 12
  %422 = load i64, ptr %421, align 8, !tbaa !11
  %423 = mul i64 %419, %422
  %424 = add i64 %417, %423
  %425 = load i64, ptr %23, align 8, !tbaa !9
  %426 = load i64, ptr %13, align 8, !tbaa !9
  %427 = mul i64 %425, %426
  %428 = add i64 %424, %427
  %429 = getelementptr inbounds float, ptr %415, i64 %428
  %430 = load float, ptr %429, align 4, !tbaa !15
  %431 = call float @llvm.fmuladd.f32(float %411, float %412, float %430)
  store float %431, ptr %429, align 4, !tbaa !15
  br label %432

432:                                              ; preds = %408, %399, %390
  %433 = load i64, ptr %30, align 8, !tbaa !9
  %434 = icmp sge i64 %433, 0
  br i1 %434, label %435, label %467

435:                                              ; preds = %432
  %436 = load i64, ptr %31, align 8, !tbaa !9
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.VlHog_, ptr %437, i32 0, i32 13
  %439 = load i64, ptr %438, align 8, !tbaa !14
  %440 = trunc i64 %439 to i32
  %441 = sub nsw i32 %440, 1
  %442 = sext i32 %441 to i64
  %443 = icmp slt i64 %436, %442
  br i1 %443, label %444, label %467

444:                                              ; preds = %435
  %445 = load float, ptr %20, align 4, !tbaa !15
  %446 = load float, ptr %26, align 4, !tbaa !15
  %447 = fmul float %445, %446
  %448 = load float, ptr %29, align 4, !tbaa !15
  %449 = load ptr, ptr %7, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.VlHog_, ptr %449, i32 0, i32 10
  %451 = load ptr, ptr %450, align 8, !tbaa !24
  %452 = load i64, ptr %30, align 8, !tbaa !9
  %453 = load i64, ptr %31, align 8, !tbaa !9
  %454 = add nsw i64 %453, 1
  %455 = load ptr, ptr %7, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.VlHog_, ptr %455, i32 0, i32 12
  %457 = load i64, ptr %456, align 8, !tbaa !11
  %458 = mul i64 %454, %457
  %459 = add i64 %452, %458
  %460 = load i64, ptr %23, align 8, !tbaa !9
  %461 = load i64, ptr %13, align 8, !tbaa !9
  %462 = mul i64 %460, %461
  %463 = add i64 %459, %462
  %464 = getelementptr inbounds float, ptr %451, i64 %463
  %465 = load float, ptr %464, align 4, !tbaa !15
  %466 = call float @llvm.fmuladd.f32(float %447, float %448, float %465)
  store float %466, ptr %464, align 4, !tbaa !15
  br label %467

467:                                              ; preds = %444, %435, %432
  br label %468

468:                                              ; preds = %467, %270
  %469 = load i64, ptr %32, align 8, !tbaa !9
  %470 = add nsw i64 %469, 1
  store i64 %470, ptr %32, align 8, !tbaa !9
  br label %261, !llvm.loop !25

471:                                              ; preds = %261
  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 %472

472:                                              ; preds = %471
  %473 = load i64, ptr %15, align 8, !tbaa !9
  %474 = add nsw i64 %473, 1
  store i64 %474, ptr %15, align 8, !tbaa !9
  br label %73, !llvm.loop !26

475:                                              ; preds = %73
  br label %476

476:                                              ; preds = %475
  %477 = load i64, ptr %16, align 8, !tbaa !9
  %478 = add nsw i64 %477, 1
  store i64 %478, ptr %16, align 8, !tbaa !9
  br label %65, !llvm.loop !27

479:                                              ; preds = %65
  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
}

; 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
declare float @acosf(float noundef) #6

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

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 = 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 [76 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.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 608, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_put_image) #4
  unreachable

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

10:                                               ; preds = %9
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 609, ptr noundef nonnull @__PRETTY_FUNCTION__.vl_hog_put_image) #4
  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_edge205

.preheader.lr.ph:                                 ; preds = %11
  %20 = shl i64 %2, 32
  %sext170 = add i64 %20, -4294967296
  %21 = ashr exact i64 %sext170, 32
  %22 = icmp sgt i64 %21, 1
  %.not206 = icmp eq i64 %4, 0
  %23 = sub i64 0, %2
  %24 = getelementptr inbounds i8, ptr %0, i64 16
  %25 = getelementptr inbounds i8, ptr %0, i64 56
  %26 = getelementptr inbounds i8, ptr %0, i64 64
  %27 = getelementptr inbounds i8, ptr %0, i64 28
  %28 = uitofp i64 %5 to double
  %29 = getelementptr inbounds i8, ptr %0, i64 72
  br i1 %22, label %.preheader.us.preheader, label %._crit_edge205

.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_edge203.us
  %.0146204.us = phi i64 [ %257, %._crit_edge203.us ], [ 1, %.preheader.us.preheader ]
  %30 = mul i64 %.0146204.us, %2
  %31 = getelementptr inbounds float, ptr %1, i64 %30
  %32 = uitofp nneg i64 %.0146204.us to double
  %33 = fadd double %32, 5.000000e-01
  %34 = fdiv double %33, %28
  %35 = fadd double %34, -5.000000e-01
  %36 = fptrunc double %35 to float
  br label %37

37:                                               ; preds = %.preheader.us, %220
  %.0201.us = phi i64 [ 1, %.preheader.us ], [ %221, %220 ]
  br i1 %.not206, label %._crit_edge.us, label %.lr.ph.us.preheader

.lr.ph.us.preheader:                              ; preds = %37
  %38 = getelementptr inbounds float, ptr %31, i64 %.0201.us
  br label %.lr.ph.us

._crit_edge.us:                                   ; preds = %.lr.ph.us, %37
  %.0154.lcssa.us = phi float [ 0.000000e+00, %37 ], [ %.1155.us, %.lr.ph.us ]
  %.0150.lcssa.us = phi float [ 0.000000e+00, %37 ], [ %.1151.us, %.lr.ph.us ]
  %.0148.lcssa.us = phi float [ 0.000000e+00, %37 ], [ %.1149.us, %.lr.ph.us ]
  %39 = tail call float @sqrtf(float noundef %.0150.lcssa.us) #5
  %40 = fpext float %39 to double
  %41 = fcmp ogt double %40, 1.000000e-10
  %42 = select i1 %41, double %40, double 1.000000e-10
  %43 = fpext float %.0148.lcssa.us to double
  %44 = fdiv double %43, %42
  %45 = fptrunc double %44 to float
  %46 = fpext float %.0154.lcssa.us to double
  %47 = fdiv double %46, %42
  %48 = fptrunc double %47 to float
  %49 = load i64, ptr %24, align 8, !tbaa !13
  %.not207 = icmp eq i64 %49, 0
  br i1 %.not207, label %._crit_edge193.us, label %.lr.ph192.us

._crit_edge193.us:                                ; preds = %237, %._crit_edge.us
  %.sroa.9.0 = phi float [ 0.000000e+00, %._crit_edge.us ], [ %238, %237 ]
  %.sroa.6.0 = phi i64 [ %.sroa.6.0.copyload.pre.pre, %._crit_edge.us ], [ %.0144199.us, %237 ]
  %.0144187.lcssa.us = phi i64 [ %.sroa.0.0.copyload.pre.pre, %._crit_edge.us ], [ %.0144186.us, %237 ]
  %.0145184.lcssa.us = phi float [ 0.000000e+00, %._crit_edge.us ], [ %.0145183.us, %237 ]
  %50 = load i32, ptr %27, align 4, !tbaa !14
  %.not171.us = icmp eq i32 %50, 0
  br i1 %.not171.us, label %61, label %51

51:                                               ; preds = %._crit_edge193.us
  %52 = fcmp olt float %.0145184.lcssa.us, 1.000000e+00
  %narrow.sel.us = select i1 %52, float %.0145184.lcssa.us, float 1.000000e+00
  %53 = tail call float @acosf(float noundef %narrow.sel.us) #5
  %54 = fpext float %53 to double
  %55 = load i64, ptr %24, 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_edge193.us, %51
  %.sroa.9.1 = phi float [ %59, %51 ], [ %.sroa.9.0, %._crit_edge193.us ]
  %.sroa.0213.0 = phi float [ %60, %51 ], [ 1.000000e+00, %._crit_edge193.us ]
  %.sroa.6.1 = phi i64 [ %.sroa.6.0, %51 ], [ -1, %._crit_edge193.us ]
  %62 = uitofp nneg i64 %.0201.us to double
  %63 = fadd double %62, 5.000000e-01
  %64 = fdiv double %63, %28
  %65 = fadd double %64, -5.000000e-01
  %66 = fptrunc double %65 to float
  %67 = icmp slt i64 %.0144187.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 %36)
  %71 = sitofp i64 %69 to float
  %72 = fsub float %66, %71
  %73 = sitofp i64 %70 to float
  %74 = fsub float %36, %73
  %75 = fsub float 1.000000e+00, %72
  %76 = fsub float 1.000000e+00, %74
  %77 = fmul float %.sroa.0213.0, %75
  %78 = fmul float %72, %.sroa.0213.0
  %79 = fmul float %.sroa.0213.0, %76
  %80 = fmul float %.sroa.0213.0, %74
  %81 = icmp sgt i64 %69, -1
  %82 = icmp sgt i64 %70, -1
  %or.cond.us = select i1 %81, i1 %82, i1 false
  %.pre = load i64, ptr %12, align 8, !tbaa !5
  br i1 %or.cond.us, label %83, label %93

83:                                               ; preds = %68
  %84 = fmul float %39, %77
  %85 = load ptr, ptr %29, align 8, !tbaa !15
  %86 = mul i64 %.pre, %70
  %87 = mul i64 %.0144187.lcssa.us, %16
  %88 = getelementptr float, ptr %85, i64 %69
  %89 = getelementptr float, ptr %88, i64 %86
  %90 = getelementptr float, ptr %89, i64 %87
  %91 = load float, ptr %90, align 4, !tbaa !16
  %92 = tail call float @llvm.fmuladd.f32(float %84, float %79, float %91)
  store float %92, ptr %90, align 4, !tbaa !16
  br label %93

93:                                               ; preds = %83, %68
  %94 = shl i64 %.pre, 32
  %sext172.us = add i64 %94, -4294967296
  %95 = ashr exact i64 %sext172.us, 32
  %96 = icmp slt i64 %69, %95
  %or.cond3.us = select i1 %96, i1 %82, i1 false
  br i1 %or.cond3.us, label %97, label %108

97:                                               ; preds = %93
  %98 = fmul float %39, %78
  %99 = load ptr, ptr %29, align 8, !tbaa !15
  %100 = mul i64 %.pre, %70
  %101 = mul i64 %.0144187.lcssa.us, %16
  %102 = getelementptr float, ptr %99, i64 %69
  %103 = getelementptr i8, ptr %102, i64 4
  %104 = getelementptr float, ptr %103, i64 %100
  %105 = getelementptr float, ptr %104, i64 %101
  %106 = load float, ptr %105, align 4, !tbaa !16
  %107 = tail call float @llvm.fmuladd.f32(float %98, float %79, float %106)
  store float %107, ptr %105, align 4, !tbaa !16
  br label %108

108:                                              ; preds = %97, %93
  br i1 %96, label %109, label %126

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

114:                                              ; preds = %109
  %115 = fmul float %39, %78
  %116 = load ptr, ptr %29, align 8, !tbaa !15
  %117 = add nsw i64 %70, 1
  %118 = mul i64 %.pre, %117
  %119 = mul i64 %.0144187.lcssa.us, %16
  %120 = getelementptr float, ptr %116, i64 %69
  %121 = getelementptr i8, ptr %120, i64 4
  %122 = getelementptr float, ptr %121, i64 %118
  %123 = getelementptr float, ptr %122, i64 %119
  %124 = load float, ptr %123, align 4, !tbaa !16
  %125 = tail call float @llvm.fmuladd.f32(float %115, float %80, float %124)
  store float %125, ptr %123, align 4, !tbaa !16
  br label %126

126:                                              ; preds = %114, %109, %108
  br i1 %81, label %127, label %143

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

132:                                              ; preds = %127
  %133 = fmul float %39, %77
  %134 = load ptr, ptr %29, align 8, !tbaa !15
  %135 = add nsw i64 %70, 1
  %136 = mul i64 %.pre, %135
  %137 = mul i64 %.0144187.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 %80, float %141)
  store float %142, ptr %140, align 4, !tbaa !16
  br label %143

143:                                              ; preds = %132, %127, %126, %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 %36)
  %148 = sitofp i64 %146 to float
  %149 = fsub float %66, %148
  %150 = sitofp i64 %147 to float
  %151 = fsub float %36, %150
  %152 = fsub float 1.000000e+00, %149
  %153 = fsub float 1.000000e+00, %151
  %154 = fmul float %.sroa.9.1, %152
  %155 = fmul float %149, %.sroa.9.1
  %156 = fmul float %.sroa.9.1, %153
  %157 = fmul float %.sroa.9.1, %151
  %158 = icmp sgt i64 %146, -1
  %159 = icmp sgt i64 %147, -1
  %or.cond.us.1 = select i1 %158, i1 %159, i1 false
  %.pre215 = load i64, ptr %12, align 8, !tbaa !5
  br i1 %or.cond.us.1, label %160, label %170

160:                                              ; preds = %145
  %161 = fmul float %39, %154
  %162 = load ptr, ptr %29, align 8, !tbaa !15
  %163 = mul i64 %.pre215, %147
  %164 = mul i64 %.sroa.6.1, %16
  %165 = getelementptr float, ptr %162, i64 %146
  %166 = getelementptr float, ptr %165, i64 %163
  %167 = getelementptr float, ptr %166, i64 %164
  %168 = load float, ptr %167, align 4, !tbaa !16
  %169 = tail call float @llvm.fmuladd.f32(float %161, float %156, float %168)
  store float %169, ptr %167, align 4, !tbaa !16
  br label %170

170:                                              ; preds = %160, %145
  %171 = shl i64 %.pre215, 32
  %sext172.us.1 = add i64 %171, -4294967296
  %172 = ashr exact i64 %sext172.us.1, 32
  %173 = icmp slt i64 %146, %172
  %or.cond3.us.1 = select i1 %173, i1 %159, i1 false
  br i1 %or.cond3.us.1, label %174, label %185

174:                                              ; preds = %170
  %175 = fmul float %39, %155
  %176 = load ptr, ptr %29, align 8, !tbaa !15
  %177 = mul i64 %.pre215, %147
  %178 = mul i64 %.sroa.6.1, %16
  %179 = getelementptr float, ptr %176, i64 %146
  %180 = getelementptr i8, ptr %179, i64 4
  %181 = getelementptr float, ptr %180, i64 %177
  %182 = getelementptr float, ptr %181, i64 %178
  %183 = load float, ptr %182, align 4, !tbaa !16
  %184 = tail call float @llvm.fmuladd.f32(float %175, float %156, float %183)
  store float %184, ptr %182, align 4, !tbaa !16
  br label %185

185:                                              ; preds = %174, %170
  br i1 %173, label %186, label %203

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

191:                                              ; preds = %186
  %192 = fmul float %39, %155
  %193 = load ptr, ptr %29, align 8, !tbaa !15
  %194 = add nsw i64 %147, 1
  %195 = mul i64 %.pre215, %194
  %196 = mul i64 %.sroa.6.1, %16
  %197 = getelementptr float, ptr %193, i64 %146
  %198 = getelementptr i8, ptr %197, i64 4
  %199 = getelementptr float, ptr %198, i64 %195
  %200 = getelementptr float, ptr %199, i64 %196
  %201 = load float, ptr %200, align 4, !tbaa !16
  %202 = tail call float @llvm.fmuladd.f32(float %192, float %157, float %201)
  store float %202, ptr %200, align 4, !tbaa !16
  br label %203

203:                                              ; preds = %191, %186, %185
  br i1 %158, label %204, label %220

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

209:                                              ; preds = %204
  %210 = fmul float %39, %154
  %211 = load ptr, ptr %29, align 8, !tbaa !15
  %212 = add nsw i64 %147, 1
  %213 = mul i64 %.pre215, %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 %157, float %218)
  store float %219, ptr %217, align 4, !tbaa !16
  br label %220

220:                                              ; preds = %209, %204, %203, %143
  %221 = add nuw nsw i64 %.0201.us, 1
  %exitcond210.not = icmp eq i64 %221, %21
  br i1 %exitcond210.not, label %._crit_edge203.us, label %37, !llvm.loop !18

222:                                              ; preds = %.lr.ph192.us, %237
  %.0144198.us = phi i64 [ %.sroa.6.0.copyload.pre.pre, %.lr.ph192.us ], [ %.0144199.us, %237 ]
  %223 = phi float [ 0.000000e+00, %.lr.ph192.us ], [ %238, %237 ]
  %.1190.us = phi i64 [ 0, %.lr.ph192.us ], [ %239, %237 ]
  %.0145184189.us = phi float [ 0.000000e+00, %.lr.ph192.us ], [ %.0145183.us, %237 ]
  %.0144187188.us = phi i64 [ %.sroa.0.0.copyload.pre.pre, %.lr.ph192.us ], [ %.0144186.us, %237 ]
  %224 = getelementptr inbounds float, ptr %255, i64 %.1190.us
  %225 = load float, ptr %224, align 4, !tbaa !16
  %226 = getelementptr inbounds float, ptr %256, i64 %.1190.us
  %227 = load float, ptr %226, align 4, !tbaa !16
  %228 = fmul float %227, %48
  %229 = tail call float @llvm.fmuladd.f32(float %45, float %225, float %228)
  %230 = fcmp olt float %229, 0.000000e+00
  %231 = fneg float %229
  %.0145.us = select i1 %230, float %231, float %229
  %232 = select i1 %230, i64 %49, i64 0
  %.0144.us = add i64 %232, %.1190.us
  %233 = fcmp ogt float %.0145.us, %.0145184189.us
  br i1 %233, label %237, label %234

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

236:                                              ; preds = %234
  br label %237

237:                                              ; preds = %222, %236, %234
  %.0144199.us = phi i64 [ %.0144198.us, %234 ], [ %.0144.us, %236 ], [ %.0144187188.us, %222 ]
  %238 = phi float [ %223, %234 ], [ %.0145.us, %236 ], [ %.0145184189.us, %222 ]
  %.0144186.us = phi i64 [ %.0144187188.us, %234 ], [ %.0144187188.us, %236 ], [ %.0144.us, %222 ]
  %.0145183.us = phi float [ %.0145184189.us, %234 ], [ %.0145184189.us, %236 ], [ %.0145.us, %222 ]
  %239 = add nuw i64 %.1190.us, 1
  %exitcond209.not = icmp eq i64 %239, %49
  br i1 %exitcond209.not, label %._crit_edge193.us, label %222, !llvm.loop !20

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %.lr.ph.us
  %.0147180.us = phi i64 [ %254, %.lr.ph.us ], [ 0, %.lr.ph.us.preheader ]
  %.0148179.us = phi float [ %.1149.us, %.lr.ph.us ], [ 0.000000e+00, %.lr.ph.us.preheader ]
  %.0150178.us = phi float [ %.1151.us, %.lr.ph.us ], [ 0.000000e+00, %.lr.ph.us.preheader ]
  %.0152177.us = phi ptr [ %253, %.lr.ph.us ], [ %38, %.lr.ph.us.preheader ]
  %.0154176.us = phi float [ %.1155.us, %.lr.ph.us ], [ 0.000000e+00, %.lr.ph.us.preheader ]
  %240 = getelementptr inbounds i8, ptr %.0152177.us, i64 4
  %241 = load float, ptr %240, align 4, !tbaa !16
  %242 = getelementptr inbounds i8, ptr %.0152177.us, i64 -4
  %243 = load float, ptr %242, align 4, !tbaa !16
  %244 = fsub float %241, %243
  %245 = getelementptr inbounds float, ptr %.0152177.us, i64 %2
  %246 = load float, ptr %245, align 4, !tbaa !16
  %247 = getelementptr inbounds float, ptr %.0152177.us, i64 %23
  %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, %.0150178.us
  %.1155.us = select i1 %252, float %249, float %.0154176.us
  %.1151.us = select i1 %252, float %251, float %.0150178.us
  %.1149.us = select i1 %252, float %244, float %.0148179.us
  %253 = getelementptr inbounds float, ptr %.0152177.us, i64 %7
  %254 = add nuw i64 %.0147180.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.ph192.us:                                     ; preds = %._crit_edge.us
  %255 = load ptr, ptr %25, align 8, !tbaa !22
  %256 = load ptr, ptr %26, align 8, !tbaa !23
  br label %222

._crit_edge203.us:                                ; preds = %220
  %257 = add nuw nsw i64 %.0146204.us, 1
  %exitcond211.not = icmp eq i64 %257, %18
  br i1 %exitcond211.not, label %._crit_edge205, label %.preheader.us, !llvm.loop !24

._crit_edge205:                                   ; preds = %._crit_edge203.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: nounwind uwtable
declare hidden i64 @vl_floor_f(float noundef) local_unnamed_addr #2

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 = { noreturn nounwind }
attributes #5 = { 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