; LLVM IR from QiaoLiuHit/LSOTB-TIR :: vlfeat-0.9.19/vl (sift)

; 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._VlSiftFilt = type { double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, i32, i32, ptr, double, i64, ptr, i32, i32, double, double, double, double, double, ptr, i32 }

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

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #2

; 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 double @llvm.fmuladd.f64(double, double, double) #1

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @fast_expn(double noundef) #4

; Function Attrs: nounwind uwtable
define dso_local void @vl_sift_calc_raw_descriptor(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, double noundef %5, double noundef %6, double noundef %7, double noundef %8) #5 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca float, align 4
  %59 = alloca float, align 4
  %60 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store i32 %3, ptr %13, align 4, !tbaa !9
  store i32 %4, ptr %14, align 4, !tbaa !9
  store double %5, ptr %15, align 8, !tbaa !11
  store double %6, ptr %16, align 8, !tbaa !11
  store double %7, ptr %17, align 8, !tbaa !11
  store double %8, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct._VlSiftFilt, ptr %61, i32 0, i32 26
  %63 = load double, ptr %62, align 8, !tbaa !13
  store double %63, ptr %19, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %64 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %64, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %65 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %65, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 2, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %66 = load i32, ptr %20, align 4, !tbaa !9
  %67 = mul nsw i32 2, %66
  store i32 %67, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  %68 = load double, ptr %15, align 8, !tbaa !11
  %69 = fadd double %68, 5.000000e-01
  %70 = fptosi double %69 to i32
  store i32 %70, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %71 = load double, ptr %16, align 8, !tbaa !11
  %72 = fadd double %71, 5.000000e-01
  %73 = fptosi double %72 to i32
  store i32 %73, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %74 = load double, ptr %18, align 8, !tbaa !11
  %75 = call double @sin(double noundef %74) #6
  store double %75, ptr %26, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %76 = load double, ptr %18, align 8, !tbaa !11
  %77 = call double @cos(double noundef %76) #6
  store double %77, ptr %27, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %78 = load double, ptr %19, align 8, !tbaa !11
  %79 = load double, ptr %17, align 8, !tbaa !11
  %80 = call double @llvm.fmuladd.f64(double %78, double %79, double 0x3CB0000000000000)
  store double %80, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %81 = call double @sqrt(double noundef 2.000000e+00) #6
  %82 = load double, ptr %28, align 8, !tbaa !11
  %83 = fmul double %81, %82
  %84 = fmul double %83, 5.000000e+00
  %85 = fdiv double %84, 2.000000e+00
  %86 = fadd double %85, 5.000000e-01
  %87 = call double @llvm.floor.f64(double %86)
  %88 = fptosi double %87 to i32
  store i32 %88, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 1, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 32, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 8, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %89 = load i32, ptr %24, align 4, !tbaa !9
  %90 = icmp slt i32 %89, 0
  br i1 %90, label %103, label %91

91:                                               ; preds = %9
  %92 = load i32, ptr %24, align 4, !tbaa !9
  %93 = load i32, ptr %20, align 4, !tbaa !9
  %94 = icmp sge i32 %92, %93
  br i1 %94, label %103, label %95

95:                                               ; preds = %91
  %96 = load i32, ptr %25, align 4, !tbaa !9
  %97 = icmp slt i32 %96, 0
  br i1 %97, label %103, label %98

98:                                               ; preds = %95
  %99 = load i32, ptr %25, align 4, !tbaa !9
  %100 = load i32, ptr %21, align 4, !tbaa !9
  %101 = sub nsw i32 %100, 1
  %102 = icmp sge i32 %99, %101
  br i1 %102, label %103, label %104

103:                                              ; preds = %98, %95, %91, %9
  store i32 1, ptr %38, align 4
  br label %527

104:                                              ; preds = %98
  %105 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 4 %105, i8 0, i64 512, i1 false)
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = load i32, ptr %24, align 4, !tbaa !9
  %108 = mul nsw i32 %107, 2
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds float, ptr %106, i64 %109
  %111 = load i32, ptr %25, align 4, !tbaa !9
  %112 = load i32, ptr %23, align 4, !tbaa !9
  %113 = mul nsw i32 %111, %112
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds float, ptr %110, i64 %114
  store ptr %115, ptr %36, align 8, !tbaa !5
  %116 = load ptr, ptr %12, align 8, !tbaa !5
  %117 = getelementptr inbounds float, ptr %116, i64 64
  %118 = getelementptr inbounds float, ptr %117, i64 16
  store ptr %118, ptr %37, align 8, !tbaa !5
  %119 = load i32, ptr %29, align 4, !tbaa !9
  %120 = sub nsw i32 0, %119
  %121 = load i32, ptr %25, align 4, !tbaa !9
  %122 = sub nsw i32 0, %121
  %123 = icmp sgt i32 %120, %122
  br i1 %123, label %124, label %127

124:                                              ; preds = %104
  %125 = load i32, ptr %29, align 4, !tbaa !9
  %126 = sub nsw i32 0, %125
  br label %130

127:                                              ; preds = %104
  %128 = load i32, ptr %25, align 4, !tbaa !9
  %129 = sub nsw i32 0, %128
  br label %130

130:                                              ; preds = %127, %124
  %131 = phi i32 [ %126, %124 ], [ %129, %127 ]
  store i32 %131, ptr %35, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %404, %130
  %133 = load i32, ptr %35, align 4, !tbaa !9
  %134 = load i32, ptr %29, align 4, !tbaa !9
  %135 = load i32, ptr %21, align 4, !tbaa !9
  %136 = load i32, ptr %25, align 4, !tbaa !9
  %137 = sub nsw i32 %135, %136
  %138 = sub nsw i32 %137, 1
  %139 = icmp slt i32 %134, %138
  br i1 %139, label %140, label %142

140:                                              ; preds = %132
  %141 = load i32, ptr %29, align 4, !tbaa !9
  br label %147

142:                                              ; preds = %132
  %143 = load i32, ptr %21, align 4, !tbaa !9
  %144 = load i32, ptr %25, align 4, !tbaa !9
  %145 = sub nsw i32 %143, %144
  %146 = sub nsw i32 %145, 1
  br label %147

147:                                              ; preds = %142, %140
  %148 = phi i32 [ %141, %140 ], [ %146, %142 ]
  %149 = icmp sle i32 %133, %148
  br i1 %149, label %150, label %407

150:                                              ; preds = %147
  %151 = load i32, ptr %29, align 4, !tbaa !9
  %152 = sub nsw i32 0, %151
  %153 = load i32, ptr %24, align 4, !tbaa !9
  %154 = sub nsw i32 0, %153
  %155 = icmp sgt i32 %152, %154
  br i1 %155, label %156, label %159

156:                                              ; preds = %150
  %157 = load i32, ptr %29, align 4, !tbaa !9
  %158 = sub nsw i32 0, %157
  br label %162

159:                                              ; preds = %150
  %160 = load i32, ptr %24, align 4, !tbaa !9
  %161 = sub nsw i32 0, %160
  br label %162

162:                                              ; preds = %159, %156
  %163 = phi i32 [ %158, %156 ], [ %161, %159 ]
  store i32 %163, ptr %34, align 4, !tbaa !9
  br label %164

164:                                              ; preds = %400, %162
  %165 = load i32, ptr %34, align 4, !tbaa !9
  %166 = load i32, ptr %29, align 4, !tbaa !9
  %167 = load i32, ptr %20, align 4, !tbaa !9
  %168 = load i32, ptr %24, align 4, !tbaa !9
  %169 = sub nsw i32 %167, %168
  %170 = sub nsw i32 %169, 1
  %171 = icmp slt i32 %166, %170
  br i1 %171, label %172, label %174

172:                                              ; preds = %164
  %173 = load i32, ptr %29, align 4, !tbaa !9
  br label %179

174:                                              ; preds = %164
  %175 = load i32, ptr %20, align 4, !tbaa !9
  %176 = load i32, ptr %24, align 4, !tbaa !9
  %177 = sub nsw i32 %175, %176
  %178 = sub nsw i32 %177, 1
  br label %179

179:                                              ; preds = %174, %172
  %180 = phi i32 [ %173, %172 ], [ %178, %174 ]
  %181 = icmp sle i32 %165, %180
  br i1 %181, label %182, label %403

182:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  %183 = load ptr, ptr %36, align 8, !tbaa !5
  %184 = load i32, ptr %34, align 4, !tbaa !9
  %185 = mul nsw i32 %184, 2
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds float, ptr %183, i64 %186
  %188 = load i32, ptr %35, align 4, !tbaa !9
  %189 = load i32, ptr %23, align 4, !tbaa !9
  %190 = mul nsw i32 %188, %189
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds float, ptr %187, i64 %191
  %193 = getelementptr inbounds float, ptr %192, i64 0
  %194 = load float, ptr %193, align 4, !tbaa !16
  store float %194, ptr %39, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  %195 = load ptr, ptr %36, align 8, !tbaa !5
  %196 = load i32, ptr %34, align 4, !tbaa !9
  %197 = mul nsw i32 %196, 2
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds float, ptr %195, i64 %198
  %200 = load i32, ptr %35, align 4, !tbaa !9
  %201 = load i32, ptr %23, align 4, !tbaa !9
  %202 = mul nsw i32 %200, %201
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds float, ptr %199, i64 %203
  %205 = getelementptr inbounds float, ptr %204, i64 1
  %206 = load float, ptr %205, align 4, !tbaa !16
  store float %206, ptr %40, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  %207 = load float, ptr %40, align 4, !tbaa !16
  %208 = fpext float %207 to double
  %209 = load double, ptr %18, align 8, !tbaa !11
  %210 = fsub double %208, %209
  %211 = fptrunc double %210 to float
  %212 = call float @vl_mod_2pi_f(float noundef %211)
  store float %212, ptr %41, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  %213 = load i32, ptr %24, align 4, !tbaa !9
  %214 = load i32, ptr %34, align 4, !tbaa !9
  %215 = add nsw i32 %213, %214
  %216 = sitofp i32 %215 to double
  %217 = load double, ptr %15, align 8, !tbaa !11
  %218 = fsub double %216, %217
  %219 = fptrunc double %218 to float
  store float %219, ptr %42, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %220 = load i32, ptr %25, align 4, !tbaa !9
  %221 = load i32, ptr %35, align 4, !tbaa !9
  %222 = add nsw i32 %220, %221
  %223 = sitofp i32 %222 to double
  %224 = load double, ptr %16, align 8, !tbaa !11
  %225 = fsub double %223, %224
  %226 = fptrunc double %225 to float
  store float %226, ptr %43, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  %227 = load double, ptr %27, align 8, !tbaa !11
  %228 = load float, ptr %42, align 4, !tbaa !16
  %229 = fpext float %228 to double
  %230 = load double, ptr %26, align 8, !tbaa !11
  %231 = load float, ptr %43, align 4, !tbaa !16
  %232 = fpext float %231 to double
  %233 = fmul double %230, %232
  %234 = call double @llvm.fmuladd.f64(double %227, double %229, double %233)
  %235 = load double, ptr %28, align 8, !tbaa !11
  %236 = fdiv double %234, %235
  %237 = fptrunc double %236 to float
  store float %237, ptr %44, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  %238 = load double, ptr %26, align 8, !tbaa !11
  %239 = fneg double %238
  %240 = load float, ptr %42, align 4, !tbaa !16
  %241 = fpext float %240 to double
  %242 = load double, ptr %27, align 8, !tbaa !11
  %243 = load float, ptr %43, align 4, !tbaa !16
  %244 = fpext float %243 to double
  %245 = fmul double %242, %244
  %246 = call double @llvm.fmuladd.f64(double %239, double %241, double %245)
  %247 = load double, ptr %28, align 8, !tbaa !11
  %248 = fdiv double %246, %247
  %249 = fptrunc double %248 to float
  store float %249, ptr %45, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  %250 = load float, ptr %41, align 4, !tbaa !16
  %251 = fmul float 8.000000e+00, %250
  %252 = fpext float %251 to double
  %253 = fdiv double %252, 0x401921FB54442D18
  %254 = fptrunc double %253 to float
  store float %254, ptr %46, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  %255 = load ptr, ptr %10, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct._VlSiftFilt, ptr %255, i32 0, i32 27
  %257 = load double, ptr %256, align 8, !tbaa !18
  %258 = fptrunc double %257 to float
  store float %258, ptr %47, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  %259 = load float, ptr %44, align 4, !tbaa !16
  %260 = load float, ptr %44, align 4, !tbaa !16
  %261 = load float, ptr %45, align 4, !tbaa !16
  %262 = load float, ptr %45, align 4, !tbaa !16
  %263 = fmul float %261, %262
  %264 = call float @llvm.fmuladd.f32(float %259, float %260, float %263)
  %265 = fpext float %264 to double
  %266 = load float, ptr %47, align 4, !tbaa !16
  %267 = fpext float %266 to double
  %268 = fmul double 2.000000e+00, %267
  %269 = load float, ptr %47, align 4, !tbaa !16
  %270 = fpext float %269 to double
  %271 = fmul double %268, %270
  %272 = fdiv double %265, %271
  %273 = call double @fast_expn(double noundef %272)
  %274 = fptrunc double %273 to float
  store float %274, ptr %48, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  %275 = load float, ptr %44, align 4, !tbaa !16
  %276 = fpext float %275 to double
  %277 = fsub double %276, 5.000000e-01
  %278 = fptrunc double %277 to float
  %279 = call i64 @vl_floor_f(float noundef %278)
  %280 = trunc i64 %279 to i32
  store i32 %280, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  %281 = load float, ptr %45, align 4, !tbaa !16
  %282 = fpext float %281 to double
  %283 = fsub double %282, 5.000000e-01
  %284 = fptrunc double %283 to float
  %285 = call i64 @vl_floor_f(float noundef %284)
  %286 = trunc i64 %285 to i32
  store i32 %286, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  %287 = load float, ptr %46, align 4, !tbaa !16
  %288 = call i64 @vl_floor_f(float noundef %287)
  %289 = trunc i64 %288 to i32
  store i32 %289, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %290 = load float, ptr %44, align 4, !tbaa !16
  %291 = fpext float %290 to double
  %292 = load i32, ptr %49, align 4, !tbaa !9
  %293 = sitofp i32 %292 to double
  %294 = fadd double %293, 5.000000e-01
  %295 = fsub double %291, %294
  %296 = fptrunc double %295 to float
  store float %296, ptr %52, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  %297 = load float, ptr %45, align 4, !tbaa !16
  %298 = fpext float %297 to double
  %299 = load i32, ptr %50, align 4, !tbaa !9
  %300 = sitofp i32 %299 to double
  %301 = fadd double %300, 5.000000e-01
  %302 = fsub double %298, %301
  %303 = fptrunc double %302 to float
  store float %303, ptr %53, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  %304 = load float, ptr %46, align 4, !tbaa !16
  %305 = load i32, ptr %51, align 4, !tbaa !9
  %306 = sitofp i32 %305 to float
  %307 = fsub float %304, %306
  store float %307, ptr %54, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %396, %182
  %309 = load i32, ptr %55, align 4, !tbaa !9
  %310 = icmp slt i32 %309, 2
  br i1 %310, label %311, label %399

311:                                              ; preds = %308
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %312

312:                                              ; preds = %392, %311
  %313 = load i32, ptr %56, align 4, !tbaa !9
  %314 = icmp slt i32 %313, 2
  br i1 %314, label %315, label %395

315:                                              ; preds = %312
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %316

316:                                              ; preds = %388, %315
  %317 = load i32, ptr %57, align 4, !tbaa !9
  %318 = icmp slt i32 %317, 2
  br i1 %318, label %319, label %391

319:                                              ; preds = %316
  %320 = load i32, ptr %49, align 4, !tbaa !9
  %321 = load i32, ptr %55, align 4, !tbaa !9
  %322 = add nsw i32 %320, %321
  %323 = icmp sge i32 %322, -2
  br i1 %323, label %324, label %387

324:                                              ; preds = %319
  %325 = load i32, ptr %49, align 4, !tbaa !9
  %326 = load i32, ptr %55, align 4, !tbaa !9
  %327 = add nsw i32 %325, %326
  %328 = icmp slt i32 %327, 2
  br i1 %328, label %329, label %387

329:                                              ; preds = %324
  %330 = load i32, ptr %50, align 4, !tbaa !9
  %331 = load i32, ptr %56, align 4, !tbaa !9
  %332 = add nsw i32 %330, %331
  %333 = icmp sge i32 %332, -2
  br i1 %333, label %334, label %387

334:                                              ; preds = %329
  %335 = load i32, ptr %50, align 4, !tbaa !9
  %336 = load i32, ptr %56, align 4, !tbaa !9
  %337 = add nsw i32 %335, %336
  %338 = icmp slt i32 %337, 2
  br i1 %338, label %339, label %387

339:                                              ; preds = %334
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %340 = load float, ptr %48, align 4, !tbaa !16
  %341 = load float, ptr %39, align 4, !tbaa !16
  %342 = fmul float %340, %341
  %343 = load i32, ptr %55, align 4, !tbaa !9
  %344 = sub nsw i32 1, %343
  %345 = sitofp i32 %344 to float
  %346 = load float, ptr %52, align 4, !tbaa !16
  %347 = fsub float %345, %346
  %348 = call float @vl_abs_f(float noundef %347)
  %349 = fmul float %342, %348
  %350 = load i32, ptr %56, align 4, !tbaa !9
  %351 = sub nsw i32 1, %350
  %352 = sitofp i32 %351 to float
  %353 = load float, ptr %53, align 4, !tbaa !16
  %354 = fsub float %352, %353
  %355 = call float @vl_abs_f(float noundef %354)
  %356 = fmul float %349, %355
  %357 = load i32, ptr %57, align 4, !tbaa !9
  %358 = sub nsw i32 1, %357
  %359 = sitofp i32 %358 to float
  %360 = load float, ptr %54, align 4, !tbaa !16
  %361 = fsub float %359, %360
  %362 = call float @vl_abs_f(float noundef %361)
  %363 = fmul float %356, %362
  store float %363, ptr %58, align 4, !tbaa !16
  %364 = load float, ptr %58, align 4, !tbaa !16
  %365 = load ptr, ptr %37, align 8, !tbaa !5
  %366 = load i32, ptr %51, align 4, !tbaa !9
  %367 = load i32, ptr %57, align 4, !tbaa !9
  %368 = add nsw i32 %366, %367
  %369 = srem i32 %368, 8
  %370 = mul nsw i32 %369, 1
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds float, ptr %365, i64 %371
  %373 = load i32, ptr %50, align 4, !tbaa !9
  %374 = load i32, ptr %56, align 4, !tbaa !9
  %375 = add nsw i32 %373, %374
  %376 = mul nsw i32 %375, 32
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds float, ptr %372, i64 %377
  %379 = load i32, ptr %49, align 4, !tbaa !9
  %380 = load i32, ptr %55, align 4, !tbaa !9
  %381 = add nsw i32 %379, %380
  %382 = mul nsw i32 %381, 8
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds float, ptr %378, i64 %383
  %385 = load float, ptr %384, align 4, !tbaa !16
  %386 = fadd float %385, %364
  store float %386, ptr %384, align 4, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  br label %387

387:                                              ; preds = %339, %334, %329, %324, %319
  br label %388

388:                                              ; preds = %387
  %389 = load i32, ptr %57, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %57, align 4, !tbaa !9
  br label %316, !llvm.loop !19

391:                                              ; preds = %316
  br label %392

392:                                              ; preds = %391
  %393 = load i32, ptr %56, align 4, !tbaa !9
  %394 = add nsw i32 %393, 1
  store i32 %394, ptr %56, align 4, !tbaa !9
  br label %312, !llvm.loop !21

395:                                              ; preds = %312
  br label %396

396:                                              ; preds = %395
  %397 = load i32, ptr %55, align 4, !tbaa !9
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %55, align 4, !tbaa !9
  br label %308, !llvm.loop !22

399:                                              ; preds = %308
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  br label %400

400:                                              ; preds = %399
  %401 = load i32, ptr %34, align 4, !tbaa !9
  %402 = add nsw i32 %401, 1
  store i32 %402, ptr %34, align 4, !tbaa !9
  br label %164, !llvm.loop !23

403:                                              ; preds = %179
  br label %404

404:                                              ; preds = %403
  %405 = load i32, ptr %35, align 4, !tbaa !9
  %406 = add nsw i32 %405, 1
  store i32 %406, ptr %35, align 4, !tbaa !9
  br label %132, !llvm.loop !24

407:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %408 = load ptr, ptr %12, align 8, !tbaa !5
  %409 = load ptr, ptr %12, align 8, !tbaa !5
  %410 = getelementptr inbounds float, ptr %409, i64 128
  %411 = call float @normalize_histogram(ptr noundef %408, ptr noundef %410)
  store float %411, ptr %59, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  %412 = load i32, ptr %29, align 4, !tbaa !9
  %413 = load i32, ptr %20, align 4, !tbaa !9
  %414 = load i32, ptr %24, align 4, !tbaa !9
  %415 = sub nsw i32 %413, %414
  %416 = sub nsw i32 %415, 1
  %417 = icmp slt i32 %412, %416
  br i1 %417, label %418, label %420

418:                                              ; preds = %407
  %419 = load i32, ptr %29, align 4, !tbaa !9
  br label %425

420:                                              ; preds = %407
  %421 = load i32, ptr %20, align 4, !tbaa !9
  %422 = load i32, ptr %24, align 4, !tbaa !9
  %423 = sub nsw i32 %421, %422
  %424 = sub nsw i32 %423, 1
  br label %425

425:                                              ; preds = %420, %418
  %426 = phi i32 [ %419, %418 ], [ %424, %420 ]
  %427 = load i32, ptr %29, align 4, !tbaa !9
  %428 = sub nsw i32 0, %427
  %429 = load i32, ptr %24, align 4, !tbaa !9
  %430 = sub nsw i32 0, %429
  %431 = icmp sgt i32 %428, %430
  br i1 %431, label %432, label %435

432:                                              ; preds = %425
  %433 = load i32, ptr %29, align 4, !tbaa !9
  %434 = sub nsw i32 0, %433
  br label %438

435:                                              ; preds = %425
  %436 = load i32, ptr %24, align 4, !tbaa !9
  %437 = sub nsw i32 0, %436
  br label %438

438:                                              ; preds = %435, %432
  %439 = phi i32 [ %434, %432 ], [ %437, %435 ]
  %440 = sub nsw i32 %426, %439
  %441 = add nsw i32 %440, 1
  %442 = load i32, ptr %29, align 4, !tbaa !9
  %443 = load i32, ptr %21, align 4, !tbaa !9
  %444 = load i32, ptr %25, align 4, !tbaa !9
  %445 = sub nsw i32 %443, %444
  %446 = sub nsw i32 %445, 1
  %447 = icmp slt i32 %442, %446
  br i1 %447, label %448, label %450

448:                                              ; preds = %438
  %449 = load i32, ptr %29, align 4, !tbaa !9
  br label %455

450:                                              ; preds = %438
  %451 = load i32, ptr %21, align 4, !tbaa !9
  %452 = load i32, ptr %25, align 4, !tbaa !9
  %453 = sub nsw i32 %451, %452
  %454 = sub nsw i32 %453, 1
  br label %455

455:                                              ; preds = %450, %448
  %456 = phi i32 [ %449, %448 ], [ %454, %450 ]
  %457 = load i32, ptr %29, align 4, !tbaa !9
  %458 = sub nsw i32 0, %457
  %459 = load i32, ptr %25, align 4, !tbaa !9
  %460 = sub nsw i32 0, %459
  %461 = icmp sgt i32 %458, %460
  br i1 %461, label %462, label %465

462:                                              ; preds = %455
  %463 = load i32, ptr %29, align 4, !tbaa !9
  %464 = sub nsw i32 0, %463
  br label %468

465:                                              ; preds = %455
  %466 = load i32, ptr %25, align 4, !tbaa !9
  %467 = sub nsw i32 0, %466
  br label %468

468:                                              ; preds = %465, %462
  %469 = phi i32 [ %464, %462 ], [ %467, %465 ]
  %470 = sub nsw i32 %456, %469
  %471 = add nsw i32 %470, 1
  %472 = mul nsw i32 %441, %471
  store i32 %472, ptr %60, align 4, !tbaa !9
  %473 = load ptr, ptr %10, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct._VlSiftFilt, ptr %473, i32 0, i32 25
  %475 = load double, ptr %474, align 8, !tbaa !25
  %476 = fcmp une double %475, 0.000000e+00
  br i1 %476, label %477, label %500

477:                                              ; preds = %468
  %478 = load float, ptr %59, align 4, !tbaa !16
  %479 = fpext float %478 to double
  %480 = load ptr, ptr %10, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct._VlSiftFilt, ptr %480, i32 0, i32 25
  %482 = load double, ptr %481, align 8, !tbaa !25
  %483 = load i32, ptr %60, align 4, !tbaa !9
  %484 = sitofp i32 %483 to double
  %485 = fmul double %482, %484
  %486 = fcmp olt double %479, %485
  br i1 %486, label %487, label %500

487:                                              ; preds = %477
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %488

488:                                              ; preds = %496, %487
  %489 = load i32, ptr %33, align 4, !tbaa !9
  %490 = icmp slt i32 %489, 128
  br i1 %490, label %491, label %499

491:                                              ; preds = %488
  %492 = load ptr, ptr %12, align 8, !tbaa !5
  %493 = load i32, ptr %33, align 4, !tbaa !9
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds float, ptr %492, i64 %494
  store float 0.000000e+00, ptr %495, align 4, !tbaa !16
  br label %496

496:                                              ; preds = %491
  %497 = load i32, ptr %33, align 4, !tbaa !9
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %33, align 4, !tbaa !9
  br label %488, !llvm.loop !26

499:                                              ; preds = %488
  br label %526

500:                                              ; preds = %477, %468
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %501

501:                                              ; preds = %518, %500
  %502 = load i32, ptr %33, align 4, !tbaa !9
  %503 = icmp slt i32 %502, 128
  br i1 %503, label %504, label %521

504:                                              ; preds = %501
  %505 = load ptr, ptr %12, align 8, !tbaa !5
  %506 = load i32, ptr %33, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds float, ptr %505, i64 %507
  %509 = load float, ptr %508, align 4, !tbaa !16
  %510 = fpext float %509 to double
  %511 = fcmp ogt double %510, 2.000000e-01
  br i1 %511, label %512, label %517

512:                                              ; preds = %504
  %513 = load ptr, ptr %12, align 8, !tbaa !5
  %514 = load i32, ptr %33, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds float, ptr %513, i64 %515
  store float 0x3FC99999A0000000, ptr %516, align 4, !tbaa !16
  br label %517

517:                                              ; preds = %512, %504
  br label %518

518:                                              ; preds = %517
  %519 = load i32, ptr %33, align 4, !tbaa !9
  %520 = add nsw i32 %519, 1
  store i32 %520, ptr %33, align 4, !tbaa !9
  br label %501, !llvm.loop !27

521:                                              ; preds = %501
  %522 = load ptr, ptr %12, align 8, !tbaa !5
  %523 = load ptr, ptr %12, align 8, !tbaa !5
  %524 = getelementptr inbounds float, ptr %523, i64 128
  %525 = call float @normalize_histogram(ptr noundef %522, ptr noundef %524)
  br label %526

526:                                              ; preds = %521, %499
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  store i32 0, ptr %38, align 4
  br label %527

527:                                              ; preds = %526, %103
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  %528 = load i32, ptr %38, align 4
  switch i32 %528, label %530 [
    i32 0, label %529
    i32 1, label %529
  ]

529:                                              ; preds = %527, %527
  ret void

530:                                              ; preds = %527
  unreachable
}

; Function Attrs: nounwind
declare double @sin(double noundef) #2

; Function Attrs: nounwind
declare double @cos(double noundef) #2

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @normalize_histogram(ptr noundef, ptr noundef) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { 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 #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, !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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !12, i64 160}
!14 = !{!"_VlSiftFilt", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !6, i64 96, !12, i64 104, !15, i64 112, !6, i64 120, !10, i64 128, !10, i64 132, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !6, i64 176, !10, i64 184}
!15 = !{!"long long", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"float", !7, i64 0}
!18 = !{!14, !12, i64 168}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = !{!14, !12, i64 152}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.floor.f64(double) #0

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden double @fast_expn(double noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @vl_sift_calc_raw_descriptor(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, double noundef %5, double noundef %6, double noundef %7, double noundef %8) local_unnamed_addr #3 {
  %10 = getelementptr inbounds i8, ptr %0, i64 160
  %11 = load double, ptr %10, align 8, !tbaa !5
  %12 = shl nsw i32 %3, 1
  %13 = fadd double %5, 5.000000e-01
  %14 = fptosi double %13 to i32
  %15 = fadd double %6, 5.000000e-01
  %16 = fptosi double %15 to i32
  %17 = tail call double @sin(double noundef %8) #6
  %18 = tail call double @cos(double noundef %8) #6
  %19 = tail call double @llvm.fmuladd.f64(double %11, double %7, double 0x3CB0000000000000)
  %20 = fmul double %19, 0x3FF6A09E667F3BCD
  %21 = fmul double %20, 5.000000e+00
  %22 = fmul double %21, 5.000000e-01
  %23 = fadd double %22, 5.000000e-01
  %24 = tail call double @llvm.floor.f64(double %23)
  %25 = fptosi double %24 to i32
  %26 = icmp slt i32 %14, 0
  br i1 %26, label %.loopexit, label %27

27:                                               ; preds = %9
  %28 = icmp slt i32 %14, %3
  %29 = icmp sgt i32 %16, -1
  %or.cond.not184 = select i1 %28, i1 %29, i1 false
  %30 = add nsw i32 %4, -1
  %.not = icmp sgt i32 %30, %16
  %or.cond177 = select i1 %or.cond.not184, i1 %.not, i1 false
  br i1 %or.cond177, label %31, label %.loopexit

31:                                               ; preds = %27
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(512) %2, i8 0, i64 512, i1 false)
  %32 = shl nuw nsw i32 %14, 1
  %33 = zext nneg i32 %32 to i64
  %34 = getelementptr inbounds float, ptr %1, i64 %33
  %35 = mul nsw i32 %12, %16
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds float, ptr %34, i64 %36
  %38 = getelementptr inbounds i8, ptr %2, i64 320
  %39 = tail call i32 @llvm.smin.i32(i32 %25, i32 %16)
  %40 = sub nsw i32 0, %39
  %41 = xor i32 %16, -1
  %42 = add i32 %41, %4
  %. = tail call i32 @llvm.smin.i32(i32 %42, i32 %25)
  %.not175200 = icmp slt i32 %., %40
  br i1 %.not175200, label %._crit_edge204, label %.lr.ph203

.lr.ph203:                                        ; preds = %31
  %43 = tail call i32 @llvm.smin.i32(i32 %25, i32 %14)
  %44 = sub nsw i32 0, %43
  %45 = xor i32 %14, -1
  %46 = add nsw i32 %45, %3
  %.178 = tail call i32 @llvm.smin.i32(i32 %46, i32 %25)
  %.not176198 = icmp slt i32 %.178, %44
  %47 = fneg double %17
  %48 = getelementptr inbounds i8, ptr %0, i64 168
  br i1 %.not176198, label %._crit_edge204, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.lr.ph203
  %49 = sext i32 %44 to i64
  %50 = zext nneg i32 %14 to i64
  %51 = add i32 %43, %.178
  %52 = add i32 %51, 1
  %53 = sext i32 %25 to i64
  %smin = tail call i64 @llvm.smin.i64(i64 %53, i64 %50)
  %54 = trunc nsw i64 %smin to i32
  %55 = sub i32 %52, %54
  %56 = sext i32 %40 to i64
  %57 = sext i32 %12 to i64
  %58 = zext nneg i32 %16 to i64
  %59 = add i32 %39, %.
  %60 = add i32 %59, 1
  %smin224 = tail call i64 @llvm.smin.i64(i64 %53, i64 %58)
  %61 = trunc nsw i64 %smin224 to i32
  %62 = sub i32 %60, %61
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %._crit_edge
  %indvars.iv222 = phi i64 [ %56, %.lr.ph.preheader ], [ %indvars.iv.next223, %._crit_edge ]
  %63 = mul nsw i64 %indvars.iv222, %57
  %invariant.gep = getelementptr float, ptr %37, i64 %63
  %64 = trunc i64 %indvars.iv222 to i32
  %65 = add i32 %64, %16
  %66 = sitofp i32 %65 to double
  %67 = fsub double %66, %6
  %68 = fptrunc double %67 to float
  %69 = fpext float %68 to double
  %70 = fmul double %17, %69
  %71 = fmul double %18, %69
  br label %.preheader186

.preheader186:                                    ; preds = %.lr.ph, %.split196.us.1
  %indvars.iv = phi i64 [ %49, %.lr.ph ], [ %indvars.iv.next, %.split196.us.1 ]
  %gep.idx = shl i64 %indvars.iv, 3
  %gep = getelementptr i8, ptr %invariant.gep, i64 %gep.idx
  %72 = load float, ptr %gep, align 4, !tbaa !13
  %73 = getelementptr inbounds i8, ptr %gep, i64 4
  %74 = load float, ptr %73, align 4, !tbaa !13
  %75 = fpext float %74 to double
  %76 = fsub double %75, %8
  %77 = fptrunc double %76 to float
  %78 = tail call float @vl_mod_2pi_f(float noundef %77)
  %79 = trunc i64 %indvars.iv to i32
  %80 = add i32 %79, %14
  %81 = sitofp i32 %80 to double
  %82 = fsub double %81, %5
  %83 = fptrunc double %82 to float
  %84 = fpext float %83 to double
  %85 = tail call double @llvm.fmuladd.f64(double %18, double %84, double %70)
  %86 = fdiv double %85, %19
  %87 = fptrunc double %86 to float
  %88 = tail call double @llvm.fmuladd.f64(double %47, double %84, double %71)
  %89 = fdiv double %88, %19
  %90 = fptrunc double %89 to float
  %91 = fmul float %78, 8.000000e+00
  %92 = fpext float %91 to double
  %93 = fdiv double %92, 0x401921FB54442D18
  %94 = fptrunc double %93 to float
  %95 = load double, ptr %48, align 8, !tbaa !15
  %96 = fptrunc double %95 to float
  %97 = fmul float %90, %90
  %98 = tail call float @llvm.fmuladd.f32(float %87, float %87, float %97)
  %99 = fpext float %98 to double
  %100 = fpext float %96 to double
  %101 = fmul double %100, 2.000000e+00
  %102 = fmul double %101, %100
  %103 = fdiv double %99, %102
  %104 = tail call double @fast_expn(double noundef %103)
  %105 = fptrunc double %104 to float
  %106 = fpext float %87 to double
  %107 = fadd float %87, -5.000000e-01
  %108 = tail call i64 @vl_floor_f(float noundef %107)
  %109 = trunc i64 %108 to i32
  %110 = fpext float %90 to double
  %111 = fadd float %90, -5.000000e-01
  %112 = tail call i64 @vl_floor_f(float noundef %111)
  %113 = trunc i64 %112 to i32
  %114 = tail call i64 @vl_floor_f(float noundef %94)
  %115 = trunc i64 %114 to i32
  %116 = sitofp i32 %109 to double
  %117 = fadd double %116, 5.000000e-01
  %118 = fsub double %106, %117
  %119 = fptrunc double %118 to float
  %120 = sitofp i32 %113 to double
  %121 = fadd double %120, 5.000000e-01
  %122 = fsub double %110, %121
  %123 = fptrunc double %122 to float
  %124 = sitofp i32 %115 to float
  %125 = fmul float %72, %105
  %126 = fsub float %124, %94
  %sext = shl i64 %112, 32
  %127 = ashr exact i64 %sext, 32
  %sext234 = shl i64 %108, 32
  %128 = ashr exact i64 %sext234, 32
  %129 = add i32 %109, 2
  %or.cond179 = icmp ult i32 %129, 4
  %130 = fsub float 1.000000e+00, %119
  %131 = ashr exact i64 %sext234, 27
  %invariant.gep190 = getelementptr i8, ptr %38, i64 %131
  br i1 %or.cond179, label %.preheader185.us.preheader, label %.split196.us

.preheader185.us.preheader:                       ; preds = %.preheader186
  %132 = add i32 %113, 2
  %or.cond180.us = icmp ult i32 %132, 4
  br i1 %or.cond180.us, label %.preheader185.split.us.split.us.us.preheader, label %.split.us.us

.preheader185.split.us.split.us.us.preheader:     ; preds = %.preheader185.us.preheader
  %133 = ashr exact i64 %sext, 25
  %gep.us = getelementptr i8, ptr %invariant.gep190, i64 %133
  %134 = fsub float 1.000000e+00, %123
  %135 = tail call float @vl_abs_f(float noundef %130)
  %136 = fmul float %125, %135
  %137 = tail call float @vl_abs_f(float noundef %134)
  %138 = fmul float %136, %137
  %139 = fadd float %126, 1.000000e+00
  %140 = tail call float @vl_abs_f(float noundef %139)
  %141 = fmul float %138, %140
  %142 = srem i32 %115, 8
  %143 = sext i32 %142 to i64
  %gep189.us.us.us = getelementptr float, ptr %gep.us, i64 %143
  %144 = load float, ptr %gep189.us.us.us, align 4, !tbaa !13
  %145 = fadd float %144, %141
  store float %145, ptr %gep189.us.us.us, align 4, !tbaa !13
  %146 = tail call float @vl_abs_f(float noundef %130)
  %147 = fmul float %125, %146
  %148 = tail call float @vl_abs_f(float noundef %134)
  %149 = fmul float %147, %148
  %150 = tail call float @vl_abs_f(float noundef %126)
  %151 = fmul float %149, %150
  %152 = add nsw i32 %115, 1
  %153 = srem i32 %152, 8
  %154 = sext i32 %153 to i64
  %gep189.us.us.us.1 = getelementptr float, ptr %gep.us, i64 %154
  %155 = load float, ptr %gep189.us.us.us.1, align 4, !tbaa !13
  %156 = fadd float %155, %151
  store float %156, ptr %gep189.us.us.us.1, align 4, !tbaa !13
  br label %.split.us.us

.split.us.us:                                     ; preds = %.preheader185.us.preheader, %.preheader185.split.us.split.us.us.preheader
  %157 = add nsw i64 %127, 1
  %158 = trunc nsw i64 %157 to i32
  %159 = add i32 %158, 2
  %or.cond180.us.1 = icmp ult i32 %159, 4
  br i1 %or.cond180.us.1, label %.preheader185.split.us.split.us.us.preheader.1, label %.split196.us

.preheader185.split.us.split.us.us.preheader.1:   ; preds = %.split.us.us
  %gep.us.1.idx = shl nsw i64 %157, 7
  %gep.us.1 = getelementptr i8, ptr %invariant.gep190, i64 %gep.us.1.idx
  %160 = fsub float 0.000000e+00, %123
  %161 = tail call float @vl_abs_f(float noundef %130)
  %162 = fmul float %125, %161
  %163 = tail call float @vl_abs_f(float noundef %160)
  %164 = fmul float %162, %163
  %165 = fadd float %126, 1.000000e+00
  %166 = tail call float @vl_abs_f(float noundef %165)
  %167 = fmul float %164, %166
  %168 = srem i32 %115, 8
  %169 = sext i32 %168 to i64
  %gep189.us.us.us.1211 = getelementptr float, ptr %gep.us.1, i64 %169
  %170 = load float, ptr %gep189.us.us.us.1211, align 4, !tbaa !13
  %171 = fadd float %170, %167
  store float %171, ptr %gep189.us.us.us.1211, align 4, !tbaa !13
  %172 = tail call float @vl_abs_f(float noundef %130)
  %173 = fmul float %125, %172
  %174 = tail call float @vl_abs_f(float noundef %160)
  %175 = fmul float %173, %174
  %176 = tail call float @vl_abs_f(float noundef %126)
  %177 = fmul float %175, %176
  %178 = add nsw i32 %115, 1
  %179 = srem i32 %178, 8
  %180 = sext i32 %179 to i64
  %gep189.us.us.us.1.1 = getelementptr float, ptr %gep.us.1, i64 %180
  %181 = load float, ptr %gep189.us.us.us.1.1, align 4, !tbaa !13
  %182 = fadd float %181, %177
  store float %182, ptr %gep189.us.us.us.1.1, align 4, !tbaa !13
  br label %.split196.us

.split196.us:                                     ; preds = %.preheader185.split.us.split.us.us.preheader.1, %.split.us.us, %.preheader186
  %183 = add nsw i64 %128, 1
  %184 = trunc nsw i64 %183 to i32
  %185 = add i32 %184, 2
  %or.cond179.1 = icmp ult i32 %185, 4
  %186 = fsub float 0.000000e+00, %119
  %invariant.gep190.1.idx = shl nsw i64 %183, 5
  %invariant.gep190.1 = getelementptr i8, ptr %38, i64 %invariant.gep190.1.idx
  br i1 %or.cond179.1, label %.preheader185.us.preheader.1, label %.split196.us.1

.preheader185.us.preheader.1:                     ; preds = %.split196.us
  %187 = add i32 %113, 2
  %or.cond180.us.1213 = icmp ult i32 %187, 4
  br i1 %or.cond180.us.1213, label %.preheader185.split.us.split.us.us.preheader.1217, label %.split.us.us.1221

.preheader185.split.us.split.us.us.preheader.1217: ; preds = %.preheader185.us.preheader.1
  %188 = ashr exact i64 %sext, 25
  %gep.us.1214 = getelementptr i8, ptr %invariant.gep190.1, i64 %188
  %189 = fsub float 1.000000e+00, %123
  %190 = tail call float @vl_abs_f(float noundef %186)
  %191 = fmul float %125, %190
  %192 = tail call float @vl_abs_f(float noundef %189)
  %193 = fmul float %191, %192
  %194 = fadd float %126, 1.000000e+00
  %195 = tail call float @vl_abs_f(float noundef %194)
  %196 = fmul float %193, %195
  %197 = srem i32 %115, 8
  %198 = sext i32 %197 to i64
  %gep189.us.us.us.1218 = getelementptr float, ptr %gep.us.1214, i64 %198
  %199 = load float, ptr %gep189.us.us.us.1218, align 4, !tbaa !13
  %200 = fadd float %199, %196
  store float %200, ptr %gep189.us.us.us.1218, align 4, !tbaa !13
  %201 = tail call float @vl_abs_f(float noundef %186)
  %202 = fmul float %125, %201
  %203 = tail call float @vl_abs_f(float noundef %189)
  %204 = fmul float %202, %203
  %205 = tail call float @vl_abs_f(float noundef %126)
  %206 = fmul float %204, %205
  %207 = add nsw i32 %115, 1
  %208 = srem i32 %207, 8
  %209 = sext i32 %208 to i64
  %gep189.us.us.us.1.1219 = getelementptr float, ptr %gep.us.1214, i64 %209
  %210 = load float, ptr %gep189.us.us.us.1.1219, align 4, !tbaa !13
  %211 = fadd float %210, %206
  store float %211, ptr %gep189.us.us.us.1.1219, align 4, !tbaa !13
  br label %.split.us.us.1221

.split.us.us.1221:                                ; preds = %.preheader185.us.preheader.1, %.preheader185.split.us.split.us.us.preheader.1217
  %212 = add nsw i64 %127, 1
  %213 = trunc nsw i64 %212 to i32
  %214 = add i32 %213, 2
  %or.cond180.us.1.1 = icmp ult i32 %214, 4
  br i1 %or.cond180.us.1.1, label %.preheader185.split.us.split.us.us.preheader.1.1, label %.split196.us.1

.preheader185.split.us.split.us.us.preheader.1.1: ; preds = %.split.us.us.1221
  %gep.us.1.1.idx = shl nsw i64 %212, 7
  %gep.us.1.1 = getelementptr i8, ptr %invariant.gep190.1, i64 %gep.us.1.1.idx
  %215 = fsub float 0.000000e+00, %123
  %216 = tail call float @vl_abs_f(float noundef %186)
  %217 = fmul float %125, %216
  %218 = tail call float @vl_abs_f(float noundef %215)
  %219 = fmul float %217, %218
  %220 = fadd float %126, 1.000000e+00
  %221 = tail call float @vl_abs_f(float noundef %220)
  %222 = fmul float %219, %221
  %223 = srem i32 %115, 8
  %224 = sext i32 %223 to i64
  %gep189.us.us.us.1211.1 = getelementptr float, ptr %gep.us.1.1, i64 %224
  %225 = load float, ptr %gep189.us.us.us.1211.1, align 4, !tbaa !13
  %226 = fadd float %225, %222
  store float %226, ptr %gep189.us.us.us.1211.1, align 4, !tbaa !13
  %227 = tail call float @vl_abs_f(float noundef %186)
  %228 = fmul float %125, %227
  %229 = tail call float @vl_abs_f(float noundef %215)
  %230 = fmul float %228, %229
  %231 = tail call float @vl_abs_f(float noundef %126)
  %232 = fmul float %230, %231
  %233 = add nsw i32 %115, 1
  %234 = srem i32 %233, 8
  %235 = sext i32 %234 to i64
  %gep189.us.us.us.1.1.1 = getelementptr float, ptr %gep.us.1.1, i64 %235
  %236 = load float, ptr %gep189.us.us.us.1.1.1, align 4, !tbaa !13
  %237 = fadd float %236, %232
  store float %237, ptr %gep189.us.us.us.1.1.1, align 4, !tbaa !13
  br label %.split196.us.1

.split196.us.1:                                   ; preds = %.preheader185.split.us.split.us.us.preheader.1.1, %.split.us.us.1221, %.split196.us
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond.not = icmp eq i32 %55, %lftr.wideiv
  br i1 %exitcond.not, label %._crit_edge, label %.preheader186, !llvm.loop !16

._crit_edge:                                      ; preds = %.split196.us.1
  %indvars.iv.next223 = add nsw i64 %indvars.iv222, 1
  %lftr.wideiv225 = trunc i64 %indvars.iv.next223 to i32
  %exitcond226.not = icmp eq i32 %62, %lftr.wideiv225
  br i1 %exitcond226.not, label %._crit_edge204, label %.lr.ph, !llvm.loop !18

._crit_edge204:                                   ; preds = %._crit_edge, %.lr.ph203, %31
  %238 = getelementptr inbounds i8, ptr %2, i64 512
  %239 = tail call float @normalize_histogram(ptr noundef %2, ptr noundef nonnull %238)
  %240 = getelementptr inbounds i8, ptr %0, i64 152
  %241 = load double, ptr %240, align 8, !tbaa !19
  %242 = fcmp une double %241, 0.000000e+00
  br i1 %242, label %243, label %vector.body.preheader

243:                                              ; preds = %._crit_edge204
  %244 = xor i32 %14, -1
  %245 = add i32 %244, %3
  %.181 = tail call i32 @llvm.smin.i32(i32 %245, i32 %25)
  %246 = tail call i32 @llvm.smin.i32(i32 %25, i32 %14)
  %247 = add i32 %246, 1
  %248 = add i32 %247, %.181
  %249 = add i32 %39, 1
  %250 = add i32 %249, %.
  %251 = mul nsw i32 %248, %250
  %252 = fpext float %239 to double
  %253 = sitofp i32 %251 to double
  %254 = fmul double %241, %253
  %255 = fcmp ogt double %254, %252
  br i1 %255, label %.preheader.preheader, label %vector.body.preheader

vector.body.preheader:                            ; preds = %._crit_edge204, %243
  br label %vector.body

.preheader.preheader:                             ; preds = %243
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(512) %2, i8 0, i64 512, i1 false), !tbaa !13
  br label %.loopexit

vector.body:                                      ; preds = %vector.body.preheader, %pred.store.continue249
  %index = phi i64 [ %index.next, %pred.store.continue249 ], [ 0, %vector.body.preheader ]
  %256 = or disjoint i64 %index, 4
  %257 = getelementptr inbounds float, ptr %2, i64 %index
  %258 = getelementptr inbounds i8, ptr %257, i64 16
  %wide.load = load <4 x float>, ptr %257, align 4, !tbaa !13
  %wide.load235 = load <4 x float>, ptr %258, align 4, !tbaa !13
  %259 = fpext <4 x float> %wide.load to <4 x double>
  %260 = fpext <4 x float> %wide.load235 to <4 x double>
  %261 = fcmp ogt <4 x double> %259, <double 2.000000e-01, double 2.000000e-01, double 2.000000e-01, double 2.000000e-01>
  %262 = fcmp ogt <4 x double> %260, <double 2.000000e-01, double 2.000000e-01, double 2.000000e-01, double 2.000000e-01>
  %263 = extractelement <4 x i1> %261, i64 0
  br i1 %263, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body
  %264 = getelementptr inbounds float, ptr %2, i64 %index
  store float 0x3FC99999A0000000, ptr %264, align 4, !tbaa !13
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body
  %265 = extractelement <4 x i1> %261, i64 1
  br i1 %265, label %pred.store.if236, label %pred.store.continue237

pred.store.if236:                                 ; preds = %pred.store.continue
  %266 = or disjoint i64 %index, 1
  %267 = getelementptr inbounds float, ptr %2, i64 %266
  store float 0x3FC99999A0000000, ptr %267, align 4, !tbaa !13
  br label %pred.store.continue237

pred.store.continue237:                           ; preds = %pred.store.if236, %pred.store.continue
  %268 = extractelement <4 x i1> %261, i64 2
  br i1 %268, label %pred.store.if238, label %pred.store.continue239

pred.store.if238:                                 ; preds = %pred.store.continue237
  %269 = or disjoint i64 %index, 2
  %270 = getelementptr inbounds float, ptr %2, i64 %269
  store float 0x3FC99999A0000000, ptr %270, align 4, !tbaa !13
  br label %pred.store.continue239

pred.store.continue239:                           ; preds = %pred.store.if238, %pred.store.continue237
  %271 = extractelement <4 x i1> %261, i64 3
  br i1 %271, label %pred.store.if240, label %pred.store.continue241

pred.store.if240:                                 ; preds = %pred.store.continue239
  %272 = or disjoint i64 %index, 3
  %273 = getelementptr inbounds float, ptr %2, i64 %272
  store float 0x3FC99999A0000000, ptr %273, align 4, !tbaa !13
  br label %pred.store.continue241

pred.store.continue241:                           ; preds = %pred.store.if240, %pred.store.continue239
  %274 = extractelement <4 x i1> %262, i64 0
  br i1 %274, label %pred.store.if242, label %pred.store.continue243

pred.store.if242:                                 ; preds = %pred.store.continue241
  %275 = getelementptr inbounds float, ptr %2, i64 %256
  store float 0x3FC99999A0000000, ptr %275, align 4, !tbaa !13
  br label %pred.store.continue243

pred.store.continue243:                           ; preds = %pred.store.if242, %pred.store.continue241
  %276 = extractelement <4 x i1> %262, i64 1
  br i1 %276, label %pred.store.if244, label %pred.store.continue245

pred.store.if244:                                 ; preds = %pred.store.continue243
  %277 = or disjoint i64 %index, 5
  %278 = getelementptr inbounds float, ptr %2, i64 %277
  store float 0x3FC99999A0000000, ptr %278, align 4, !tbaa !13
  br label %pred.store.continue245

pred.store.continue245:                           ; preds = %pred.store.if244, %pred.store.continue243
  %279 = extractelement <4 x i1> %262, i64 2
  br i1 %279, label %pred.store.if246, label %pred.store.continue247

pred.store.if246:                                 ; preds = %pred.store.continue245
  %280 = or disjoint i64 %index, 6
  %281 = getelementptr inbounds float, ptr %2, i64 %280
  store float 0x3FC99999A0000000, ptr %281, align 4, !tbaa !13
  br label %pred.store.continue247

pred.store.continue247:                           ; preds = %pred.store.if246, %pred.store.continue245
  %282 = extractelement <4 x i1> %262, i64 3
  br i1 %282, label %pred.store.if248, label %pred.store.continue249

pred.store.if248:                                 ; preds = %pred.store.continue247
  %283 = or disjoint i64 %index, 7
  %284 = getelementptr inbounds float, ptr %2, i64 %283
  store float 0x3FC99999A0000000, ptr %284, align 4, !tbaa !13
  br label %pred.store.continue249

pred.store.continue249:                           ; preds = %pred.store.if248, %pred.store.continue247
  %index.next = add nuw i64 %index, 8
  %285 = icmp eq i64 %index.next, 128
  br i1 %285, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %pred.store.continue249
  %286 = tail call float @normalize_histogram(ptr noundef nonnull %2, ptr noundef nonnull %238)
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader.preheader, %middle.block, %9, %27
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sin(double noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @cos(double noundef) local_unnamed_addr #4

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

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden float @normalize_histogram(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smin.i64(i64, i64) #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { 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 #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 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !7, i64 160}
!6 = !{!"_VlSiftFilt", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !10, i64 88, !10, i64 92, !11, i64 96, !7, i64 104, !12, i64 112, !11, i64 120, !10, i64 128, !10, i64 132, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !11, i64 176, !10, i64 184}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long long", !8, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !8, i64 0}
!15 = !{!6, !7, i64 168}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = !{!6, !7, i64 152}
!20 = distinct !{!20, !17, !21, !22}
!21 = !{!"llvm.loop.isvectorized", i32 1}
!22 = !{!"llvm.loop.unroll.runtime.disable"}


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