; LLVM IR from CLASS-SZ/class_sz :: class-sz/tools (arrays)

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

@.str.17 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@__func__.array_logspline_table_lines = external hidden unnamed_addr constant [28 x i8], align 1

; 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 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: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @array_logspline_table_lines(ptr noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, i16 noundef signext %5, ptr noundef %6) #4 {
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i16, align 2
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca double, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i32 %1, ptr %10, align 4, !tbaa !9
  store ptr %2, ptr %11, align 8, !tbaa !5
  store i32 %3, ptr %12, align 4, !tbaa !9
  store ptr %4, ptr %13, align 8, !tbaa !5
  store i16 %5, ptr %14, align 2, !tbaa !11
  store ptr %6, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %26 = load i32, ptr %10, align 4, !tbaa !9
  %27 = sub nsw i32 %26, 1
  %28 = load i32, ptr %12, align 4, !tbaa !9
  %29 = mul nsw i32 %27, %28
  %30 = sext i32 %29 to i64
  %31 = mul i64 %30, 8
  %32 = call noalias ptr @malloc(i64 noundef %31) #6
  store ptr %32, ptr %19, align 8, !tbaa !5
  %33 = load i32, ptr %12, align 4, !tbaa !9
  %34 = sext i32 %33 to i64
  %35 = mul i64 %34, 8
  %36 = call noalias ptr @malloc(i64 noundef %35) #6
  store ptr %36, ptr %16, align 8, !tbaa !5
  %37 = load i32, ptr %12, align 4, !tbaa !9
  %38 = sext i32 %37 to i64
  %39 = mul i64 %38, 8
  %40 = call noalias ptr @malloc(i64 noundef %39) #6
  store ptr %40, ptr %17, align 8, !tbaa !5
  %41 = load i32, ptr %12, align 4, !tbaa !9
  %42 = sext i32 %41 to i64
  %43 = mul i64 %42, 8
  %44 = call noalias ptr @malloc(i64 noundef %43) #6
  store ptr %44, ptr %18, align 8, !tbaa !5
  %45 = load ptr, ptr %19, align 8, !tbaa !5
  %46 = icmp eq ptr %45, null
  br i1 %46, label %47, label %50

47:                                               ; preds = %7
  %48 = load ptr, ptr %15, align 8, !tbaa !5
  %49 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %48, ptr noundef @.str.17, ptr noundef @__func__.array_logspline_table_lines, i32 noundef 737) #5
  store i32 1, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

50:                                               ; preds = %7
  %51 = load ptr, ptr %16, align 8, !tbaa !5
  %52 = icmp eq ptr %51, null
  br i1 %52, label %53, label %56

53:                                               ; preds = %50
  %54 = load ptr, ptr %15, align 8, !tbaa !5
  %55 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %54, ptr noundef @.str.19, ptr noundef @__func__.array_logspline_table_lines, i32 noundef 741) #5
  store i32 1, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

56:                                               ; preds = %50
  %57 = load ptr, ptr %17, align 8, !tbaa !5
  %58 = icmp eq ptr %57, null
  br i1 %58, label %59, label %62

59:                                               ; preds = %56
  %60 = load ptr, ptr %15, align 8, !tbaa !5
  %61 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %60, ptr noundef @.str.20, ptr noundef @__func__.array_logspline_table_lines, i32 noundef 745) #5
  store i32 1, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

62:                                               ; preds = %56
  %63 = load ptr, ptr %18, align 8, !tbaa !5
  %64 = icmp eq ptr %63, null
  br i1 %64, label %65, label %68

65:                                               ; preds = %62
  %66 = load ptr, ptr %15, align 8, !tbaa !5
  %67 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %66, ptr noundef @.str.21, ptr noundef @__func__.array_logspline_table_lines, i32 noundef 749) #5
  store i32 1, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

68:                                               ; preds = %62
  %69 = load i32, ptr %10, align 4, !tbaa !9
  %70 = icmp eq i32 %69, 2
  br i1 %70, label %71, label %72

71:                                               ; preds = %68
  store i16 0, ptr %14, align 2, !tbaa !11
  br label %72

72:                                               ; preds = %71, %68
  store i32 0, ptr %21, align 4, !tbaa !9
  %73 = load i16, ptr %14, align 2, !tbaa !11
  %74 = sext i16 %73 to i32
  %75 = icmp eq i32 %74, 0
  br i1 %75, label %76, label %102

76:                                               ; preds = %72
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %77

77:                                               ; preds = %98, %76
  %78 = load i32, ptr %22, align 4, !tbaa !9
  %79 = load i32, ptr %12, align 4, !tbaa !9
  %80 = icmp slt i32 %78, %79
  br i1 %80, label %81, label %101

81:                                               ; preds = %77
  %82 = load ptr, ptr %19, align 8, !tbaa !5
  %83 = load i32, ptr %21, align 4, !tbaa !9
  %84 = load i32, ptr %12, align 4, !tbaa !9
  %85 = mul nsw i32 %83, %84
  %86 = load i32, ptr %22, align 4, !tbaa !9
  %87 = add nsw i32 %85, %86
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds double, ptr %82, i64 %88
  store double 0.000000e+00, ptr %89, align 8, !tbaa !13
  %90 = load ptr, ptr %13, align 8, !tbaa !5
  %91 = load i32, ptr %21, align 4, !tbaa !9
  %92 = load i32, ptr %12, align 4, !tbaa !9
  %93 = mul nsw i32 %91, %92
  %94 = load i32, ptr %22, align 4, !tbaa !9
  %95 = add nsw i32 %93, %94
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds double, ptr %90, i64 %96
  store double 0.000000e+00, ptr %97, align 8, !tbaa !13
  br label %98

98:                                               ; preds = %81
  %99 = load i32, ptr %22, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %22, align 4, !tbaa !9
  br label %77, !llvm.loop !15

101:                                              ; preds = %77
  br label %289

102:                                              ; preds = %72
  %103 = load i16, ptr %14, align 2, !tbaa !11
  %104 = sext i16 %103 to i32
  %105 = icmp eq i32 %104, 1
  br i1 %105, label %106, label %283

106:                                              ; preds = %102
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %279, %106
  %108 = load i32, ptr %22, align 4, !tbaa !9
  %109 = load i32, ptr %12, align 4, !tbaa !9
  %110 = icmp slt i32 %108, %109
  br i1 %110, label %111, label %282

111:                                              ; preds = %107
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = getelementptr inbounds double, ptr %112, i64 2
  %114 = load double, ptr %113, align 8, !tbaa !13
  %115 = call double @log(double noundef %114) #5
  %116 = load ptr, ptr %9, align 8, !tbaa !5
  %117 = getelementptr inbounds double, ptr %116, i64 0
  %118 = load double, ptr %117, align 8, !tbaa !13
  %119 = call double @log(double noundef %118) #5
  %120 = fsub double %115, %119
  %121 = load ptr, ptr %9, align 8, !tbaa !5
  %122 = getelementptr inbounds double, ptr %121, i64 2
  %123 = load double, ptr %122, align 8, !tbaa !13
  %124 = call double @log(double noundef %123) #5
  %125 = load ptr, ptr %9, align 8, !tbaa !5
  %126 = getelementptr inbounds double, ptr %125, i64 0
  %127 = load double, ptr %126, align 8, !tbaa !13
  %128 = call double @log(double noundef %127) #5
  %129 = fsub double %124, %128
  %130 = fmul double %120, %129
  %131 = load ptr, ptr %11, align 8, !tbaa !5
  %132 = load i32, ptr %12, align 4, !tbaa !9
  %133 = mul nsw i32 1, %132
  %134 = load i32, ptr %22, align 4, !tbaa !9
  %135 = add nsw i32 %133, %134
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds double, ptr %131, i64 %136
  %138 = load double, ptr %137, align 8, !tbaa !13
  %139 = call double @log(double noundef %138) #5
  %140 = load ptr, ptr %11, align 8, !tbaa !5
  %141 = load i32, ptr %12, align 4, !tbaa !9
  %142 = mul nsw i32 0, %141
  %143 = load i32, ptr %22, align 4, !tbaa !9
  %144 = add nsw i32 %142, %143
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds double, ptr %140, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !13
  %148 = call double @log(double noundef %147) #5
  %149 = fsub double %139, %148
  %150 = load ptr, ptr %9, align 8, !tbaa !5
  %151 = getelementptr inbounds double, ptr %150, i64 1
  %152 = load double, ptr %151, align 8, !tbaa !13
  %153 = call double @log(double noundef %152) #5
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds double, ptr %154, i64 0
  %156 = load double, ptr %155, align 8, !tbaa !13
  %157 = call double @log(double noundef %156) #5
  %158 = fsub double %153, %157
  %159 = load ptr, ptr %9, align 8, !tbaa !5
  %160 = getelementptr inbounds double, ptr %159, i64 1
  %161 = load double, ptr %160, align 8, !tbaa !13
  %162 = call double @log(double noundef %161) #5
  %163 = load ptr, ptr %9, align 8, !tbaa !5
  %164 = getelementptr inbounds double, ptr %163, i64 0
  %165 = load double, ptr %164, align 8, !tbaa !13
  %166 = call double @log(double noundef %165) #5
  %167 = fsub double %162, %166
  %168 = fmul double %158, %167
  %169 = load ptr, ptr %11, align 8, !tbaa !5
  %170 = load i32, ptr %12, align 4, !tbaa !9
  %171 = mul nsw i32 2, %170
  %172 = load i32, ptr %22, align 4, !tbaa !9
  %173 = add nsw i32 %171, %172
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %169, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !13
  %177 = call double @log(double noundef %176) #5
  %178 = load ptr, ptr %11, align 8, !tbaa !5
  %179 = load i32, ptr %12, align 4, !tbaa !9
  %180 = mul nsw i32 0, %179
  %181 = load i32, ptr %22, align 4, !tbaa !9
  %182 = add nsw i32 %180, %181
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds double, ptr %178, i64 %183
  %185 = load double, ptr %184, align 8, !tbaa !13
  %186 = call double @log(double noundef %185) #5
  %187 = fsub double %177, %186
  %188 = fmul double %168, %187
  %189 = fneg double %188
  %190 = call double @llvm.fmuladd.f64(double %130, double %149, double %189)
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = getelementptr inbounds double, ptr %191, i64 2
  %193 = load double, ptr %192, align 8, !tbaa !13
  %194 = call double @log(double noundef %193) #5
  %195 = load ptr, ptr %9, align 8, !tbaa !5
  %196 = getelementptr inbounds double, ptr %195, i64 0
  %197 = load double, ptr %196, align 8, !tbaa !13
  %198 = call double @log(double noundef %197) #5
  %199 = fsub double %194, %198
  %200 = load ptr, ptr %9, align 8, !tbaa !5
  %201 = getelementptr inbounds double, ptr %200, i64 1
  %202 = load double, ptr %201, align 8, !tbaa !13
  %203 = call double @log(double noundef %202) #5
  %204 = load ptr, ptr %9, align 8, !tbaa !5
  %205 = getelementptr inbounds double, ptr %204, i64 0
  %206 = load double, ptr %205, align 8, !tbaa !13
  %207 = call double @log(double noundef %206) #5
  %208 = fsub double %203, %207
  %209 = fmul double %199, %208
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  %211 = getelementptr inbounds double, ptr %210, i64 2
  %212 = load double, ptr %211, align 8, !tbaa !13
  %213 = call double @log(double noundef %212) #5
  %214 = load ptr, ptr %9, align 8, !tbaa !5
  %215 = getelementptr inbounds double, ptr %214, i64 1
  %216 = load double, ptr %215, align 8, !tbaa !13
  %217 = call double @log(double noundef %216) #5
  %218 = fsub double %213, %217
  %219 = fmul double %209, %218
  %220 = fdiv double %190, %219
  store double %220, ptr %23, align 8, !tbaa !13
  %221 = load ptr, ptr %13, align 8, !tbaa !5
  %222 = load i32, ptr %21, align 4, !tbaa !9
  %223 = load i32, ptr %12, align 4, !tbaa !9
  %224 = mul nsw i32 %222, %223
  %225 = load i32, ptr %22, align 4, !tbaa !9
  %226 = add nsw i32 %224, %225
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds double, ptr %221, i64 %227
  store double -5.000000e-01, ptr %228, align 8, !tbaa !13
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = getelementptr inbounds double, ptr %229, i64 1
  %231 = load double, ptr %230, align 8, !tbaa !13
  %232 = call double @log(double noundef %231) #5
  %233 = load ptr, ptr %9, align 8, !tbaa !5
  %234 = getelementptr inbounds double, ptr %233, i64 0
  %235 = load double, ptr %234, align 8, !tbaa !13
  %236 = call double @log(double noundef %235) #5
  %237 = fsub double %232, %236
  %238 = fdiv double 3.000000e+00, %237
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = load i32, ptr %12, align 4, !tbaa !9
  %241 = mul nsw i32 1, %240
  %242 = load i32, ptr %22, align 4, !tbaa !9
  %243 = add nsw i32 %241, %242
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %239, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !13
  %247 = call double @log(double noundef %246) #5
  %248 = load ptr, ptr %11, align 8, !tbaa !5
  %249 = load i32, ptr %12, align 4, !tbaa !9
  %250 = mul nsw i32 0, %249
  %251 = load i32, ptr %22, align 4, !tbaa !9
  %252 = add nsw i32 %250, %251
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds double, ptr %248, i64 %253
  %255 = load double, ptr %254, align 8, !tbaa !13
  %256 = call double @log(double noundef %255) #5
  %257 = fsub double %247, %256
  %258 = load ptr, ptr %9, align 8, !tbaa !5
  %259 = getelementptr inbounds double, ptr %258, i64 1
  %260 = load double, ptr %259, align 8, !tbaa !13
  %261 = call double @log(double noundef %260) #5
  %262 = load ptr, ptr %9, align 8, !tbaa !5
  %263 = getelementptr inbounds double, ptr %262, i64 0
  %264 = load double, ptr %263, align 8, !tbaa !13
  %265 = call double @log(double noundef %264) #5
  %266 = fsub double %261, %265
  %267 = fdiv double %257, %266
  %268 = load double, ptr %23, align 8, !tbaa !13
  %269 = fsub double %267, %268
  %270 = fmul double %238, %269
  %271 = load ptr, ptr %19, align 8, !tbaa !5
  %272 = load i32, ptr %21, align 4, !tbaa !9
  %273 = load i32, ptr %12, align 4, !tbaa !9
  %274 = mul nsw i32 %272, %273
  %275 = load i32, ptr %22, align 4, !tbaa !9
  %276 = add nsw i32 %274, %275
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %271, i64 %277
  store double %270, ptr %278, align 8, !tbaa !13
  br label %279

279:                                              ; preds = %111
  %280 = load i32, ptr %22, align 4, !tbaa !9
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %22, align 4, !tbaa !9
  br label %107, !llvm.loop !17

282:                                              ; preds = %107
  br label %288

283:                                              ; preds = %102
  %284 = load ptr, ptr %15, align 8, !tbaa !5
  %285 = load i16, ptr %14, align 2, !tbaa !11
  %286 = sext i16 %285 to i32
  %287 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %284, ptr noundef @.str.18, ptr noundef @__func__.array_logspline_table_lines, i32 noundef 784, i32 noundef %286) #5
  store i32 1, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

288:                                              ; preds = %282
  br label %289

289:                                              ; preds = %288, %101
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %503, %289
  %291 = load i32, ptr %21, align 4, !tbaa !9
  %292 = load i32, ptr %10, align 4, !tbaa !9
  %293 = sub nsw i32 %292, 1
  %294 = icmp slt i32 %291, %293
  br i1 %294, label %295, label %506

295:                                              ; preds = %290
  %296 = load ptr, ptr %9, align 8, !tbaa !5
  %297 = load i32, ptr %21, align 4, !tbaa !9
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds double, ptr %296, i64 %298
  %300 = load double, ptr %299, align 8, !tbaa !13
  %301 = call double @log(double noundef %300) #5
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = load i32, ptr %21, align 4, !tbaa !9
  %304 = sub nsw i32 %303, 1
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds double, ptr %302, i64 %305
  %307 = load double, ptr %306, align 8, !tbaa !13
  %308 = call double @log(double noundef %307) #5
  %309 = fsub double %301, %308
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = load i32, ptr %21, align 4, !tbaa !9
  %312 = add nsw i32 %311, 1
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds double, ptr %310, i64 %313
  %315 = load double, ptr %314, align 8, !tbaa !13
  %316 = call double @log(double noundef %315) #5
  %317 = load ptr, ptr %9, align 8, !tbaa !5
  %318 = load i32, ptr %21, align 4, !tbaa !9
  %319 = sub nsw i32 %318, 1
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds double, ptr %317, i64 %320
  %322 = load double, ptr %321, align 8, !tbaa !13
  %323 = call double @log(double noundef %322) #5
  %324 = fsub double %316, %323
  %325 = fdiv double %309, %324
  store double %325, ptr %20, align 8, !tbaa !13
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %326

326:                                              ; preds = %499, %295
  %327 = load i32, ptr %22, align 4, !tbaa !9
  %328 = load i32, ptr %12, align 4, !tbaa !9
  %329 = icmp slt i32 %327, %328
  br i1 %329, label %330, label %502

330:                                              ; preds = %326
  %331 = load double, ptr %20, align 8, !tbaa !13
  %332 = load ptr, ptr %13, align 8, !tbaa !5
  %333 = load i32, ptr %21, align 4, !tbaa !9
  %334 = sub nsw i32 %333, 1
  %335 = load i32, ptr %12, align 4, !tbaa !9
  %336 = mul nsw i32 %334, %335
  %337 = load i32, ptr %22, align 4, !tbaa !9
  %338 = add nsw i32 %336, %337
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds double, ptr %332, i64 %339
  %341 = load double, ptr %340, align 8, !tbaa !13
  %342 = call double @llvm.fmuladd.f64(double %331, double %341, double 2.000000e+00)
  %343 = load ptr, ptr %16, align 8, !tbaa !5
  %344 = load i32, ptr %22, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds double, ptr %343, i64 %345
  store double %342, ptr %346, align 8, !tbaa !13
  %347 = load double, ptr %20, align 8, !tbaa !13
  %348 = fsub double %347, 1.000000e+00
  %349 = load ptr, ptr %16, align 8, !tbaa !5
  %350 = load i32, ptr %22, align 4, !tbaa !9
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds double, ptr %349, i64 %351
  %353 = load double, ptr %352, align 8, !tbaa !13
  %354 = fdiv double %348, %353
  %355 = load ptr, ptr %13, align 8, !tbaa !5
  %356 = load i32, ptr %21, align 4, !tbaa !9
  %357 = load i32, ptr %12, align 4, !tbaa !9
  %358 = mul nsw i32 %356, %357
  %359 = load i32, ptr %22, align 4, !tbaa !9
  %360 = add nsw i32 %358, %359
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds double, ptr %355, i64 %361
  store double %354, ptr %362, align 8, !tbaa !13
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = load i32, ptr %21, align 4, !tbaa !9
  %365 = add nsw i32 %364, 1
  %366 = load i32, ptr %12, align 4, !tbaa !9
  %367 = mul nsw i32 %365, %366
  %368 = load i32, ptr %22, align 4, !tbaa !9
  %369 = add nsw i32 %367, %368
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds double, ptr %363, i64 %370
  %372 = load double, ptr %371, align 8, !tbaa !13
  %373 = call double @log(double noundef %372) #5
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = load i32, ptr %21, align 4, !tbaa !9
  %376 = load i32, ptr %12, align 4, !tbaa !9
  %377 = mul nsw i32 %375, %376
  %378 = load i32, ptr %22, align 4, !tbaa !9
  %379 = add nsw i32 %377, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %374, i64 %380
  %382 = load double, ptr %381, align 8, !tbaa !13
  %383 = call double @log(double noundef %382) #5
  %384 = fsub double %373, %383
  %385 = load ptr, ptr %9, align 8, !tbaa !5
  %386 = load i32, ptr %21, align 4, !tbaa !9
  %387 = add nsw i32 %386, 1
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds double, ptr %385, i64 %388
  %390 = load double, ptr %389, align 8, !tbaa !13
  %391 = call double @log(double noundef %390) #5
  %392 = load ptr, ptr %9, align 8, !tbaa !5
  %393 = load i32, ptr %21, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds double, ptr %392, i64 %394
  %396 = load double, ptr %395, align 8, !tbaa !13
  %397 = call double @log(double noundef %396) #5
  %398 = fsub double %391, %397
  %399 = fdiv double %384, %398
  %400 = load ptr, ptr %11, align 8, !tbaa !5
  %401 = load i32, ptr %21, align 4, !tbaa !9
  %402 = load i32, ptr %12, align 4, !tbaa !9
  %403 = mul nsw i32 %401, %402
  %404 = load i32, ptr %22, align 4, !tbaa !9
  %405 = add nsw i32 %403, %404
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds double, ptr %400, i64 %406
  %408 = load double, ptr %407, align 8, !tbaa !13
  %409 = call double @log(double noundef %408) #5
  %410 = load ptr, ptr %11, align 8, !tbaa !5
  %411 = load i32, ptr %21, align 4, !tbaa !9
  %412 = sub nsw i32 %411, 1
  %413 = load i32, ptr %12, align 4, !tbaa !9
  %414 = mul nsw i32 %412, %413
  %415 = load i32, ptr %22, align 4, !tbaa !9
  %416 = add nsw i32 %414, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds double, ptr %410, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !13
  %420 = call double @log(double noundef %419) #5
  %421 = fsub double %409, %420
  %422 = load ptr, ptr %9, align 8, !tbaa !5
  %423 = load i32, ptr %21, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds double, ptr %422, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !13
  %427 = call double @log(double noundef %426) #5
  %428 = load ptr, ptr %9, align 8, !tbaa !5
  %429 = load i32, ptr %21, align 4, !tbaa !9
  %430 = sub nsw i32 %429, 1
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds double, ptr %428, i64 %431
  %433 = load double, ptr %432, align 8, !tbaa !13
  %434 = call double @log(double noundef %433) #5
  %435 = fsub double %427, %434
  %436 = fdiv double %421, %435
  %437 = fsub double %399, %436
  %438 = load ptr, ptr %19, align 8, !tbaa !5
  %439 = load i32, ptr %21, align 4, !tbaa !9
  %440 = load i32, ptr %12, align 4, !tbaa !9
  %441 = mul nsw i32 %439, %440
  %442 = load i32, ptr %22, align 4, !tbaa !9
  %443 = add nsw i32 %441, %442
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds double, ptr %438, i64 %444
  store double %437, ptr %445, align 8, !tbaa !13
  %446 = load ptr, ptr %19, align 8, !tbaa !5
  %447 = load i32, ptr %21, align 4, !tbaa !9
  %448 = load i32, ptr %12, align 4, !tbaa !9
  %449 = mul nsw i32 %447, %448
  %450 = load i32, ptr %22, align 4, !tbaa !9
  %451 = add nsw i32 %449, %450
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds double, ptr %446, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !13
  %455 = fmul double 6.000000e+00, %454
  %456 = load ptr, ptr %9, align 8, !tbaa !5
  %457 = load i32, ptr %21, align 4, !tbaa !9
  %458 = add nsw i32 %457, 1
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds double, ptr %456, i64 %459
  %461 = load double, ptr %460, align 8, !tbaa !13
  %462 = call double @log(double noundef %461) #5
  %463 = load ptr, ptr %9, align 8, !tbaa !5
  %464 = load i32, ptr %21, align 4, !tbaa !9
  %465 = sub nsw i32 %464, 1
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds double, ptr %463, i64 %466
  %468 = load double, ptr %467, align 8, !tbaa !13
  %469 = call double @log(double noundef %468) #5
  %470 = fsub double %462, %469
  %471 = fdiv double %455, %470
  %472 = load double, ptr %20, align 8, !tbaa !13
  %473 = load ptr, ptr %19, align 8, !tbaa !5
  %474 = load i32, ptr %21, align 4, !tbaa !9
  %475 = sub nsw i32 %474, 1
  %476 = load i32, ptr %12, align 4, !tbaa !9
  %477 = mul nsw i32 %475, %476
  %478 = load i32, ptr %22, align 4, !tbaa !9
  %479 = add nsw i32 %477, %478
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds double, ptr %473, i64 %480
  %482 = load double, ptr %481, align 8, !tbaa !13
  %483 = fneg double %472
  %484 = call double @llvm.fmuladd.f64(double %483, double %482, double %471)
  %485 = load ptr, ptr %16, align 8, !tbaa !5
  %486 = load i32, ptr %22, align 4, !tbaa !9
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds double, ptr %485, i64 %487
  %489 = load double, ptr %488, align 8, !tbaa !13
  %490 = fdiv double %484, %489
  %491 = load ptr, ptr %19, align 8, !tbaa !5
  %492 = load i32, ptr %21, align 4, !tbaa !9
  %493 = load i32, ptr %12, align 4, !tbaa !9
  %494 = mul nsw i32 %492, %493
  %495 = load i32, ptr %22, align 4, !tbaa !9
  %496 = add nsw i32 %494, %495
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds double, ptr %491, i64 %497
  store double %490, ptr %498, align 8, !tbaa !13
  br label %499

499:                                              ; preds = %330
  %500 = load i32, ptr %22, align 4, !tbaa !9
  %501 = add nsw i32 %500, 1
  store i32 %501, ptr %22, align 4, !tbaa !9
  br label %326, !llvm.loop !18

502:                                              ; preds = %326
  br label %503

503:                                              ; preds = %502
  %504 = load i32, ptr %21, align 4, !tbaa !9
  %505 = add nsw i32 %504, 1
  store i32 %505, ptr %21, align 4, !tbaa !9
  br label %290, !llvm.loop !19

506:                                              ; preds = %290
  %507 = load i16, ptr %14, align 2, !tbaa !11
  %508 = sext i16 %507 to i32
  %509 = icmp eq i32 %508, 0
  br i1 %509, label %510, label %528

510:                                              ; preds = %506
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %511

511:                                              ; preds = %524, %510
  %512 = load i32, ptr %22, align 4, !tbaa !9
  %513 = load i32, ptr %12, align 4, !tbaa !9
  %514 = icmp slt i32 %512, %513
  br i1 %514, label %515, label %527

515:                                              ; preds = %511
  %516 = load ptr, ptr %18, align 8, !tbaa !5
  %517 = load i32, ptr %22, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds double, ptr %516, i64 %518
  store double 0.000000e+00, ptr %519, align 8, !tbaa !13
  %520 = load ptr, ptr %17, align 8, !tbaa !5
  %521 = load i32, ptr %22, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds double, ptr %520, i64 %522
  store double 0.000000e+00, ptr %523, align 8, !tbaa !13
  br label %524

524:                                              ; preds = %515
  %525 = load i32, ptr %22, align 4, !tbaa !9
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %22, align 4, !tbaa !9
  br label %511, !llvm.loop !20

527:                                              ; preds = %511
  br label %773

528:                                              ; preds = %506
  %529 = load i16, ptr %14, align 2, !tbaa !11
  %530 = sext i16 %529 to i32
  %531 = icmp eq i32 %530, 1
  br i1 %531, label %532, label %767

532:                                              ; preds = %528
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %533

533:                                              ; preds = %763, %532
  %534 = load i32, ptr %22, align 4, !tbaa !9
  %535 = load i32, ptr %12, align 4, !tbaa !9
  %536 = icmp slt i32 %534, %535
  br i1 %536, label %537, label %766

537:                                              ; preds = %533
  %538 = load ptr, ptr %9, align 8, !tbaa !5
  %539 = load i32, ptr %10, align 4, !tbaa !9
  %540 = sub nsw i32 %539, 3
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds double, ptr %538, i64 %541
  %543 = load double, ptr %542, align 8, !tbaa !13
  %544 = call double @log(double noundef %543) #5
  %545 = load ptr, ptr %9, align 8, !tbaa !5
  %546 = load i32, ptr %10, align 4, !tbaa !9
  %547 = sub nsw i32 %546, 1
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds double, ptr %545, i64 %548
  %550 = load double, ptr %549, align 8, !tbaa !13
  %551 = call double @log(double noundef %550) #5
  %552 = fsub double %544, %551
  %553 = load ptr, ptr %9, align 8, !tbaa !5
  %554 = load i32, ptr %10, align 4, !tbaa !9
  %555 = sub nsw i32 %554, 3
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds double, ptr %553, i64 %556
  %558 = load double, ptr %557, align 8, !tbaa !13
  %559 = call double @log(double noundef %558) #5
  %560 = load ptr, ptr %9, align 8, !tbaa !5
  %561 = load i32, ptr %10, align 4, !tbaa !9
  %562 = sub nsw i32 %561, 1
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %560, i64 %563
  %565 = load double, ptr %564, align 8, !tbaa !13
  %566 = call double @log(double noundef %565) #5
  %567 = fsub double %559, %566
  %568 = fmul double %552, %567
  %569 = load ptr, ptr %11, align 8, !tbaa !5
  %570 = load i32, ptr %10, align 4, !tbaa !9
  %571 = sub nsw i32 %570, 2
  %572 = load i32, ptr %12, align 4, !tbaa !9
  %573 = mul nsw i32 %571, %572
  %574 = load i32, ptr %22, align 4, !tbaa !9
  %575 = add nsw i32 %573, %574
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds double, ptr %569, i64 %576
  %578 = load double, ptr %577, align 8, !tbaa !13
  %579 = call double @log(double noundef %578) #5
  %580 = load ptr, ptr %11, align 8, !tbaa !5
  %581 = load i32, ptr %10, align 4, !tbaa !9
  %582 = sub nsw i32 %581, 1
  %583 = load i32, ptr %12, align 4, !tbaa !9
  %584 = mul nsw i32 %582, %583
  %585 = load i32, ptr %22, align 4, !tbaa !9
  %586 = add nsw i32 %584, %585
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds double, ptr %580, i64 %587
  %589 = load double, ptr %588, align 8, !tbaa !13
  %590 = call double @log(double noundef %589) #5
  %591 = fsub double %579, %590
  %592 = load ptr, ptr %9, align 8, !tbaa !5
  %593 = load i32, ptr %10, align 4, !tbaa !9
  %594 = sub nsw i32 %593, 2
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds double, ptr %592, i64 %595
  %597 = load double, ptr %596, align 8, !tbaa !13
  %598 = call double @log(double noundef %597) #5
  %599 = load ptr, ptr %9, align 8, !tbaa !5
  %600 = load i32, ptr %10, align 4, !tbaa !9
  %601 = sub nsw i32 %600, 1
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds double, ptr %599, i64 %602
  %604 = load double, ptr %603, align 8, !tbaa !13
  %605 = call double @log(double noundef %604) #5
  %606 = fsub double %598, %605
  %607 = load ptr, ptr %9, align 8, !tbaa !5
  %608 = load i32, ptr %10, align 4, !tbaa !9
  %609 = sub nsw i32 %608, 2
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds double, ptr %607, i64 %610
  %612 = load double, ptr %611, align 8, !tbaa !13
  %613 = call double @log(double noundef %612) #5
  %614 = load ptr, ptr %9, align 8, !tbaa !5
  %615 = load i32, ptr %10, align 4, !tbaa !9
  %616 = sub nsw i32 %615, 1
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds double, ptr %614, i64 %617
  %619 = load double, ptr %618, align 8, !tbaa !13
  %620 = call double @log(double noundef %619) #5
  %621 = fsub double %613, %620
  %622 = fmul double %606, %621
  %623 = load ptr, ptr %11, align 8, !tbaa !5
  %624 = load i32, ptr %10, align 4, !tbaa !9
  %625 = sub nsw i32 %624, 3
  %626 = load i32, ptr %12, align 4, !tbaa !9
  %627 = mul nsw i32 %625, %626
  %628 = load i32, ptr %22, align 4, !tbaa !9
  %629 = add nsw i32 %627, %628
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds double, ptr %623, i64 %630
  %632 = load double, ptr %631, align 8, !tbaa !13
  %633 = call double @log(double noundef %632) #5
  %634 = load ptr, ptr %11, align 8, !tbaa !5
  %635 = load i32, ptr %10, align 4, !tbaa !9
  %636 = sub nsw i32 %635, 1
  %637 = load i32, ptr %12, align 4, !tbaa !9
  %638 = mul nsw i32 %636, %637
  %639 = load i32, ptr %22, align 4, !tbaa !9
  %640 = add nsw i32 %638, %639
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds double, ptr %634, i64 %641
  %643 = load double, ptr %642, align 8, !tbaa !13
  %644 = call double @log(double noundef %643) #5
  %645 = fsub double %633, %644
  %646 = fmul double %622, %645
  %647 = fneg double %646
  %648 = call double @llvm.fmuladd.f64(double %568, double %591, double %647)
  %649 = load ptr, ptr %9, align 8, !tbaa !5
  %650 = load i32, ptr %10, align 4, !tbaa !9
  %651 = sub nsw i32 %650, 3
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds double, ptr %649, i64 %652
  %654 = load double, ptr %653, align 8, !tbaa !13
  %655 = call double @log(double noundef %654) #5
  %656 = load ptr, ptr %9, align 8, !tbaa !5
  %657 = load i32, ptr %10, align 4, !tbaa !9
  %658 = sub nsw i32 %657, 1
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds double, ptr %656, i64 %659
  %661 = load double, ptr %660, align 8, !tbaa !13
  %662 = call double @log(double noundef %661) #5
  %663 = fsub double %655, %662
  %664 = load ptr, ptr %9, align 8, !tbaa !5
  %665 = load i32, ptr %10, align 4, !tbaa !9
  %666 = sub nsw i32 %665, 2
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds double, ptr %664, i64 %667
  %669 = load double, ptr %668, align 8, !tbaa !13
  %670 = call double @log(double noundef %669) #5
  %671 = load ptr, ptr %9, align 8, !tbaa !5
  %672 = load i32, ptr %10, align 4, !tbaa !9
  %673 = sub nsw i32 %672, 1
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds double, ptr %671, i64 %674
  %676 = load double, ptr %675, align 8, !tbaa !13
  %677 = call double @log(double noundef %676) #5
  %678 = fsub double %670, %677
  %679 = fmul double %663, %678
  %680 = load ptr, ptr %9, align 8, !tbaa !5
  %681 = load i32, ptr %10, align 4, !tbaa !9
  %682 = sub nsw i32 %681, 3
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds double, ptr %680, i64 %683
  %685 = load double, ptr %684, align 8, !tbaa !13
  %686 = call double @log(double noundef %685) #5
  %687 = load ptr, ptr %9, align 8, !tbaa !5
  %688 = load i32, ptr %10, align 4, !tbaa !9
  %689 = sub nsw i32 %688, 2
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds double, ptr %687, i64 %690
  %692 = load double, ptr %691, align 8, !tbaa !13
  %693 = call double @log(double noundef %692) #5
  %694 = fsub double %686, %693
  %695 = fmul double %679, %694
  %696 = fdiv double %648, %695
  store double %696, ptr %24, align 8, !tbaa !13
  %697 = load ptr, ptr %17, align 8, !tbaa !5
  %698 = load i32, ptr %22, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds double, ptr %697, i64 %699
  store double 5.000000e-01, ptr %700, align 8, !tbaa !13
  %701 = load ptr, ptr %9, align 8, !tbaa !5
  %702 = load i32, ptr %10, align 4, !tbaa !9
  %703 = sub nsw i32 %702, 1
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds double, ptr %701, i64 %704
  %706 = load double, ptr %705, align 8, !tbaa !13
  %707 = call double @log(double noundef %706) #5
  %708 = load ptr, ptr %9, align 8, !tbaa !5
  %709 = load i32, ptr %10, align 4, !tbaa !9
  %710 = sub nsw i32 %709, 2
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds double, ptr %708, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !13
  %714 = call double @log(double noundef %713) #5
  %715 = fsub double %707, %714
  %716 = fdiv double 3.000000e+00, %715
  %717 = load double, ptr %24, align 8, !tbaa !13
  %718 = load ptr, ptr %11, align 8, !tbaa !5
  %719 = load i32, ptr %10, align 4, !tbaa !9
  %720 = sub nsw i32 %719, 1
  %721 = load i32, ptr %12, align 4, !tbaa !9
  %722 = mul nsw i32 %720, %721
  %723 = load i32, ptr %22, align 4, !tbaa !9
  %724 = add nsw i32 %722, %723
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds double, ptr %718, i64 %725
  %727 = load double, ptr %726, align 8, !tbaa !13
  %728 = call double @log(double noundef %727) #5
  %729 = load ptr, ptr %11, align 8, !tbaa !5
  %730 = load i32, ptr %10, align 4, !tbaa !9
  %731 = sub nsw i32 %730, 2
  %732 = load i32, ptr %12, align 4, !tbaa !9
  %733 = mul nsw i32 %731, %732
  %734 = load i32, ptr %22, align 4, !tbaa !9
  %735 = add nsw i32 %733, %734
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds double, ptr %729, i64 %736
  %738 = load double, ptr %737, align 8, !tbaa !13
  %739 = call double @log(double noundef %738) #5
  %740 = fsub double %728, %739
  %741 = load ptr, ptr %9, align 8, !tbaa !5
  %742 = load i32, ptr %10, align 4, !tbaa !9
  %743 = sub nsw i32 %742, 1
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds double, ptr %741, i64 %744
  %746 = load double, ptr %745, align 8, !tbaa !13
  %747 = call double @log(double noundef %746) #5
  %748 = load ptr, ptr %9, align 8, !tbaa !5
  %749 = load i32, ptr %10, align 4, !tbaa !9
  %750 = sub nsw i32 %749, 2
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds double, ptr %748, i64 %751
  %753 = load double, ptr %752, align 8, !tbaa !13
  %754 = call double @log(double noundef %753) #5
  %755 = fsub double %747, %754
  %756 = fdiv double %740, %755
  %757 = fsub double %717, %756
  %758 = fmul double %716, %757
  %759 = load ptr, ptr %18, align 8, !tbaa !5
  %760 = load i32, ptr %22, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds double, ptr %759, i64 %761
  store double %758, ptr %762, align 8, !tbaa !13
  br label %763

763:                                              ; preds = %537
  %764 = load i32, ptr %22, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %22, align 4, !tbaa !9
  br label %533, !llvm.loop !21

766:                                              ; preds = %533
  br label %772

767:                                              ; preds = %528
  %768 = load ptr, ptr %15, align 8, !tbaa !5
  %769 = load i16, ptr %14, align 2, !tbaa !11
  %770 = sext i16 %769 to i32
  %771 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %768, ptr noundef @.str.18, ptr noundef @__func__.array_logspline_table_lines, i32 noundef 842, i32 noundef %770) #5
  store i32 1, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

772:                                              ; preds = %766
  br label %773

773:                                              ; preds = %772, %527
  %774 = load i32, ptr %10, align 4, !tbaa !9
  %775 = sub nsw i32 %774, 1
  store i32 %775, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %776

776:                                              ; preds = %828, %773
  %777 = load i32, ptr %22, align 4, !tbaa !9
  %778 = load i32, ptr %12, align 4, !tbaa !9
  %779 = icmp slt i32 %777, %778
  br i1 %779, label %780, label %831

780:                                              ; preds = %776
  %781 = load ptr, ptr %18, align 8, !tbaa !5
  %782 = load i32, ptr %22, align 4, !tbaa !9
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds double, ptr %781, i64 %783
  %785 = load double, ptr %784, align 8, !tbaa !13
  %786 = load ptr, ptr %17, align 8, !tbaa !5
  %787 = load i32, ptr %22, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds double, ptr %786, i64 %788
  %790 = load double, ptr %789, align 8, !tbaa !13
  %791 = load ptr, ptr %19, align 8, !tbaa !5
  %792 = load i32, ptr %21, align 4, !tbaa !9
  %793 = sub nsw i32 %792, 1
  %794 = load i32, ptr %12, align 4, !tbaa !9
  %795 = mul nsw i32 %793, %794
  %796 = load i32, ptr %22, align 4, !tbaa !9
  %797 = add nsw i32 %795, %796
  %798 = sext i32 %797 to i64
  %799 = getelementptr inbounds double, ptr %791, i64 %798
  %800 = load double, ptr %799, align 8, !tbaa !13
  %801 = fneg double %790
  %802 = call double @llvm.fmuladd.f64(double %801, double %800, double %785)
  %803 = load ptr, ptr %17, align 8, !tbaa !5
  %804 = load i32, ptr %22, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds double, ptr %803, i64 %805
  %807 = load double, ptr %806, align 8, !tbaa !13
  %808 = load ptr, ptr %13, align 8, !tbaa !5
  %809 = load i32, ptr %21, align 4, !tbaa !9
  %810 = sub nsw i32 %809, 1
  %811 = load i32, ptr %12, align 4, !tbaa !9
  %812 = mul nsw i32 %810, %811
  %813 = load i32, ptr %22, align 4, !tbaa !9
  %814 = add nsw i32 %812, %813
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds double, ptr %808, i64 %815
  %817 = load double, ptr %816, align 8, !tbaa !13
  %818 = call double @llvm.fmuladd.f64(double %807, double %817, double 1.000000e+00)
  %819 = fdiv double %802, %818
  %820 = load ptr, ptr %13, align 8, !tbaa !5
  %821 = load i32, ptr %21, align 4, !tbaa !9
  %822 = load i32, ptr %12, align 4, !tbaa !9
  %823 = mul nsw i32 %821, %822
  %824 = load i32, ptr %22, align 4, !tbaa !9
  %825 = add nsw i32 %823, %824
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds double, ptr %820, i64 %826
  store double %819, ptr %827, align 8, !tbaa !13
  br label %828

828:                                              ; preds = %780
  %829 = load i32, ptr %22, align 4, !tbaa !9
  %830 = add nsw i32 %829, 1
  store i32 %830, ptr %22, align 4, !tbaa !9
  br label %776, !llvm.loop !22

831:                                              ; preds = %776
  %832 = load i32, ptr %10, align 4, !tbaa !9
  %833 = sub nsw i32 %832, 2
  store i32 %833, ptr %21, align 4, !tbaa !9
  br label %834

834:                                              ; preds = %884, %831
  %835 = load i32, ptr %21, align 4, !tbaa !9
  %836 = icmp sge i32 %835, 0
  br i1 %836, label %837, label %887

837:                                              ; preds = %834
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %838

838:                                              ; preds = %880, %837
  %839 = load i32, ptr %22, align 4, !tbaa !9
  %840 = load i32, ptr %12, align 4, !tbaa !9
  %841 = icmp slt i32 %839, %840
  br i1 %841, label %842, label %883

842:                                              ; preds = %838
  %843 = load ptr, ptr %13, align 8, !tbaa !5
  %844 = load i32, ptr %21, align 4, !tbaa !9
  %845 = load i32, ptr %12, align 4, !tbaa !9
  %846 = mul nsw i32 %844, %845
  %847 = load i32, ptr %22, align 4, !tbaa !9
  %848 = add nsw i32 %846, %847
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %843, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !13
  %852 = load ptr, ptr %13, align 8, !tbaa !5
  %853 = load i32, ptr %21, align 4, !tbaa !9
  %854 = add nsw i32 %853, 1
  %855 = load i32, ptr %12, align 4, !tbaa !9
  %856 = mul nsw i32 %854, %855
  %857 = load i32, ptr %22, align 4, !tbaa !9
  %858 = add nsw i32 %856, %857
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %852, i64 %859
  %861 = load double, ptr %860, align 8, !tbaa !13
  %862 = load ptr, ptr %19, align 8, !tbaa !5
  %863 = load i32, ptr %21, align 4, !tbaa !9
  %864 = load i32, ptr %12, align 4, !tbaa !9
  %865 = mul nsw i32 %863, %864
  %866 = load i32, ptr %22, align 4, !tbaa !9
  %867 = add nsw i32 %865, %866
  %868 = sext i32 %867 to i64
  %869 = getelementptr inbounds double, ptr %862, i64 %868
  %870 = load double, ptr %869, align 8, !tbaa !13
  %871 = call double @llvm.fmuladd.f64(double %851, double %861, double %870)
  %872 = load ptr, ptr %13, align 8, !tbaa !5
  %873 = load i32, ptr %21, align 4, !tbaa !9
  %874 = load i32, ptr %12, align 4, !tbaa !9
  %875 = mul nsw i32 %873, %874
  %876 = load i32, ptr %22, align 4, !tbaa !9
  %877 = add nsw i32 %875, %876
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds double, ptr %872, i64 %878
  store double %871, ptr %879, align 8, !tbaa !13
  br label %880

880:                                              ; preds = %842
  %881 = load i32, ptr %22, align 4, !tbaa !9
  %882 = add nsw i32 %881, 1
  store i32 %882, ptr %22, align 4, !tbaa !9
  br label %838, !llvm.loop !23

883:                                              ; preds = %838
  br label %884

884:                                              ; preds = %883
  %885 = load i32, ptr %21, align 4, !tbaa !9
  %886 = add nsw i32 %885, -1
  store i32 %886, ptr %21, align 4, !tbaa !9
  br label %834, !llvm.loop !24

887:                                              ; preds = %834
  %888 = load ptr, ptr %17, align 8, !tbaa !5
  call void @free(ptr noundef %888) #5
  %889 = load ptr, ptr %18, align 8, !tbaa !5
  call void @free(ptr noundef %889) #5
  %890 = load ptr, ptr %16, align 8, !tbaa !5
  call void @free(ptr noundef %890) #5
  %891 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %891) #5
  store i32 0, ptr %8, align 4
  store i32 1, ptr %25, align 4
  br label %892

892:                                              ; preds = %887, %767, %283, %65, %59, %53, %47
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  %893 = load i32, ptr %8, align 4
  ret i32 %893
}

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

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 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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 }
attributes #6 = { nounwind allocsize(0) }

!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 = !{!"short", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}


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

@.str.17 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@__func__.array_logspline_table_lines = external hidden unnamed_addr constant [28 x i8], align 1

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

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @array_logspline_table_lines(ptr nocapture noundef readonly %0, i32 noundef %1, ptr nocapture noundef readonly %2, i32 noundef %3, ptr nocapture noundef %4, i16 noundef signext %5, ptr nocapture noundef writeonly %6) local_unnamed_addr #4 {
  %8 = add nsw i32 %1, -1
  %9 = mul nsw i32 %8, %3
  %10 = sext i32 %9 to i64
  %11 = shl nsw i64 %10, 3
  %12 = tail call noalias ptr @malloc(i64 noundef %11) #8
  %13 = sext i32 %3 to i64
  %14 = shl nsw i64 %13, 3
  %15 = tail call noalias ptr @malloc(i64 noundef %14) #8
  %16 = tail call noalias ptr @malloc(i64 noundef %14) #8
  %17 = icmp eq ptr %12, null
  br i1 %17, label %18, label %20

18:                                               ; preds = %7
  %19 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.17, ptr noundef nonnull @__func__.array_logspline_table_lines, i32 noundef 737) #9
  br label %372

20:                                               ; preds = %7
  %21 = icmp eq ptr %15, null
  br i1 %21, label %22, label %24

22:                                               ; preds = %20
  %23 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.20, ptr noundef nonnull @__func__.array_logspline_table_lines, i32 noundef 745) #9
  br label %372

24:                                               ; preds = %20
  %25 = icmp eq ptr %16, null
  br i1 %25, label %26, label %28

26:                                               ; preds = %24
  %27 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.21, ptr noundef nonnull @__func__.array_logspline_table_lines, i32 noundef 749) #9
  br label %372

28:                                               ; preds = %24
  %29 = icmp eq i32 %1, 2
  %spec.select = select i1 %29, i16 0, i16 %5
  %30 = sext i16 %spec.select to i32
  %31 = icmp eq i16 %spec.select, 0
  br i1 %31, label %.preheader299, label %35

.preheader299:                                    ; preds = %28
  %32 = icmp sgt i32 %3, 0
  br i1 %32, label %.lr.ph305.preheader, label %.loopexit300

.lr.ph305.preheader:                              ; preds = %.preheader299
  %33 = zext nneg i32 %3 to i64
  %34 = shl nuw nsw i64 %33, 3
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %12, i8 0, i64 %34, i1 false), !tbaa !5
  tail call void @llvm.memset.p0.i64(ptr align 8 %4, i8 0, i64 %34, i1 false), !tbaa !5
  br label %.loopexit300

35:                                               ; preds = %28
  %36 = icmp eq i16 %spec.select, 1
  br i1 %36, label %.preheader301, label %124

.preheader301:                                    ; preds = %35
  %37 = icmp sgt i32 %3, 0
  br i1 %37, label %.lr.ph, label %.loopexit300

.lr.ph:                                           ; preds = %.preheader301
  %38 = getelementptr inbounds i8, ptr %0, i64 16
  %39 = getelementptr inbounds i8, ptr %0, i64 8
  %40 = shl nuw nsw i32 %3, 1
  %41 = zext nneg i32 %3 to i64
  %42 = zext nneg i32 %40 to i64
  %invariant.gep = getelementptr inbounds double, ptr %2, i64 %41
  %invariant.gep362 = getelementptr inbounds double, ptr %2, i64 %42
  br label %43

43:                                               ; preds = %.lr.ph, %43
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %43 ]
  %44 = load double, ptr %38, align 8, !tbaa !5
  %45 = tail call double @log(double noundef %44) #9
  %46 = load double, ptr %0, align 8, !tbaa !5
  %47 = tail call double @log(double noundef %46) #9
  %48 = fsub double %45, %47
  %49 = load double, ptr %38, align 8, !tbaa !5
  %50 = tail call double @log(double noundef %49) #9
  %51 = load double, ptr %0, align 8, !tbaa !5
  %52 = tail call double @log(double noundef %51) #9
  %53 = fsub double %50, %52
  %54 = fmul double %48, %53
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %indvars.iv
  %55 = load double, ptr %gep, align 8, !tbaa !5
  %56 = tail call double @log(double noundef %55) #9
  %57 = getelementptr inbounds double, ptr %2, i64 %indvars.iv
  %58 = load double, ptr %57, align 8, !tbaa !5
  %59 = tail call double @log(double noundef %58) #9
  %60 = fsub double %56, %59
  %61 = load double, ptr %39, align 8, !tbaa !5
  %62 = tail call double @log(double noundef %61) #9
  %63 = load double, ptr %0, align 8, !tbaa !5
  %64 = tail call double @log(double noundef %63) #9
  %65 = fsub double %62, %64
  %66 = load double, ptr %39, align 8, !tbaa !5
  %67 = tail call double @log(double noundef %66) #9
  %68 = load double, ptr %0, align 8, !tbaa !5
  %69 = tail call double @log(double noundef %68) #9
  %70 = fsub double %67, %69
  %gep363 = getelementptr inbounds double, ptr %invariant.gep362, i64 %indvars.iv
  %71 = load double, ptr %gep363, align 8, !tbaa !5
  %72 = tail call double @log(double noundef %71) #9
  %73 = load double, ptr %57, align 8, !tbaa !5
  %74 = tail call double @log(double noundef %73) #9
  %75 = fsub double %72, %74
  %76 = fneg double %65
  %77 = fmul double %70, %76
  %78 = fmul double %77, %75
  %79 = tail call double @llvm.fmuladd.f64(double %54, double %60, double %78)
  %80 = load double, ptr %38, align 8, !tbaa !5
  %81 = tail call double @log(double noundef %80) #9
  %82 = load double, ptr %0, align 8, !tbaa !5
  %83 = tail call double @log(double noundef %82) #9
  %84 = fsub double %81, %83
  %85 = load double, ptr %39, align 8, !tbaa !5
  %86 = tail call double @log(double noundef %85) #9
  %87 = load double, ptr %0, align 8, !tbaa !5
  %88 = tail call double @log(double noundef %87) #9
  %89 = fsub double %86, %88
  %90 = fmul double %84, %89
  %91 = load double, ptr %38, align 8, !tbaa !5
  %92 = tail call double @log(double noundef %91) #9
  %93 = load double, ptr %39, align 8, !tbaa !5
  %94 = tail call double @log(double noundef %93) #9
  %95 = fsub double %92, %94
  %96 = fmul double %90, %95
  %97 = fdiv double %79, %96
  %98 = getelementptr inbounds double, ptr %4, i64 %indvars.iv
  store double -5.000000e-01, ptr %98, align 8, !tbaa !5
  %99 = load double, ptr %39, align 8, !tbaa !5
  %100 = tail call double @log(double noundef %99) #9
  %101 = load double, ptr %0, align 8, !tbaa !5
  %102 = tail call double @log(double noundef %101) #9
  %103 = load double, ptr %gep, align 8, !tbaa !5
  %104 = tail call double @log(double noundef %103) #9
  %105 = load double, ptr %57, align 8, !tbaa !5
  %106 = tail call double @log(double noundef %105) #9
  %107 = fsub double %104, %106
  %108 = load double, ptr %39, align 8, !tbaa !5
  %109 = tail call double @log(double noundef %108) #9
  %110 = load double, ptr %0, align 8, !tbaa !5
  %111 = tail call double @log(double noundef %110) #9
  %112 = insertelement <2 x double> poison, double %100, i64 0
  %113 = insertelement <2 x double> %112, double %109, i64 1
  %114 = insertelement <2 x double> poison, double %102, i64 0
  %115 = insertelement <2 x double> %114, double %111, i64 1
  %116 = fsub <2 x double> %113, %115
  %117 = insertelement <2 x double> <double 3.000000e+00, double poison>, double %107, i64 1
  %118 = fdiv <2 x double> %117, %116
  %119 = extractelement <2 x double> %118, i64 1
  %120 = fsub double %119, %97
  %121 = extractelement <2 x double> %118, i64 0
  %122 = fmul double %121, %120
  %123 = getelementptr inbounds double, ptr %12, i64 %indvars.iv
  store double %122, ptr %123, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %41
  br i1 %exitcond.not, label %.loopexit300, label %43, !llvm.loop !9

124:                                              ; preds = %35
  %125 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull @__func__.array_logspline_table_lines, i32 noundef 784, i32 noundef %30) #9
  br label %372

.loopexit300:                                     ; preds = %43, %.lr.ph305.preheader, %.preheader301, %.preheader299
  %126 = icmp sgt i32 %1, 2
  br i1 %126, label %.lr.ph309, label %._crit_edge

.lr.ph309:                                        ; preds = %.loopexit300
  %127 = icmp sgt i32 %3, 0
  %wide.trip.count338 = zext nneg i32 %8 to i64
  %wide.trip.count333 = zext nneg i32 %3 to i64
  br label %128

.loopexit298:                                     ; preds = %149, %128
  %exitcond339.not = icmp eq i64 %indvars.iv.next336, %wide.trip.count338
  br i1 %exitcond339.not, label %._crit_edge, label %128, !llvm.loop !11

128:                                              ; preds = %.lr.ph309, %.loopexit298
  %indvars.iv335 = phi i64 [ 1, %.lr.ph309 ], [ %indvars.iv.next336, %.loopexit298 ]
  %129 = getelementptr inbounds double, ptr %0, i64 %indvars.iv335
  %130 = load double, ptr %129, align 8, !tbaa !5
  %131 = tail call double @log(double noundef %130) #9
  %132 = add nsw i64 %indvars.iv335, -1
  %133 = getelementptr inbounds double, ptr %0, i64 %132
  %134 = load double, ptr %133, align 8, !tbaa !5
  %135 = tail call double @log(double noundef %134) #9
  %136 = fsub double %131, %135
  %indvars.iv.next336 = add nuw nsw i64 %indvars.iv335, 1
  %137 = getelementptr inbounds double, ptr %0, i64 %indvars.iv.next336
  %138 = load double, ptr %137, align 8, !tbaa !5
  %139 = tail call double @log(double noundef %138) #9
  %140 = load double, ptr %133, align 8, !tbaa !5
  %141 = tail call double @log(double noundef %140) #9
  %142 = fsub double %139, %141
  %143 = fdiv double %136, %142
  br i1 %127, label %.lr.ph307, label %.loopexit298

.lr.ph307:                                        ; preds = %128
  %144 = mul nsw i64 %132, %13
  %145 = fadd double %143, -1.000000e+00
  %146 = mul nuw nsw i64 %indvars.iv335, %13
  %147 = mul nuw nsw i64 %indvars.iv.next336, %13
  %148 = fneg double %143
  %invariant.gep364 = getelementptr double, ptr %2, i64 %147
  br label %149

149:                                              ; preds = %.lr.ph307, %149
  %indvars.iv330 = phi i64 [ 0, %.lr.ph307 ], [ %indvars.iv.next331, %149 ]
  %150 = add nsw i64 %indvars.iv330, %144
  %151 = getelementptr inbounds double, ptr %4, i64 %150
  %152 = load double, ptr %151, align 8, !tbaa !5
  %153 = tail call double @llvm.fmuladd.f64(double %143, double %152, double 2.000000e+00)
  %154 = fdiv double %145, %153
  %155 = add nuw nsw i64 %indvars.iv330, %146
  %156 = getelementptr inbounds double, ptr %4, i64 %155
  store double %154, ptr %156, align 8, !tbaa !5
  %gep365 = getelementptr double, ptr %invariant.gep364, i64 %indvars.iv330
  %157 = load double, ptr %gep365, align 8, !tbaa !5
  %158 = tail call double @log(double noundef %157) #9
  %159 = getelementptr inbounds double, ptr %2, i64 %155
  %160 = load double, ptr %159, align 8, !tbaa !5
  %161 = tail call double @log(double noundef %160) #9
  %162 = fsub double %158, %161
  %163 = load double, ptr %137, align 8, !tbaa !5
  %164 = tail call double @log(double noundef %163) #9
  %165 = load double, ptr %129, align 8, !tbaa !5
  %166 = tail call double @log(double noundef %165) #9
  %167 = fsub double %164, %166
  %168 = fdiv double %162, %167
  %169 = load double, ptr %159, align 8, !tbaa !5
  %170 = tail call double @log(double noundef %169) #9
  %171 = getelementptr inbounds double, ptr %2, i64 %150
  %172 = load double, ptr %171, align 8, !tbaa !5
  %173 = tail call double @log(double noundef %172) #9
  %174 = fsub double %170, %173
  %175 = load double, ptr %129, align 8, !tbaa !5
  %176 = tail call double @log(double noundef %175) #9
  %177 = load double, ptr %133, align 8, !tbaa !5
  %178 = tail call double @log(double noundef %177) #9
  %179 = fsub double %176, %178
  %180 = fdiv double %174, %179
  %181 = fsub double %168, %180
  %182 = getelementptr inbounds double, ptr %12, i64 %155
  store double %181, ptr %182, align 8, !tbaa !5
  %183 = fmul double %181, 6.000000e+00
  %184 = load double, ptr %137, align 8, !tbaa !5
  %185 = tail call double @log(double noundef %184) #9
  %186 = load double, ptr %133, align 8, !tbaa !5
  %187 = tail call double @log(double noundef %186) #9
  %188 = fsub double %185, %187
  %189 = fdiv double %183, %188
  %190 = getelementptr inbounds double, ptr %12, i64 %150
  %191 = load double, ptr %190, align 8, !tbaa !5
  %192 = tail call double @llvm.fmuladd.f64(double %148, double %191, double %189)
  %193 = fdiv double %192, %153
  store double %193, ptr %182, align 8, !tbaa !5
  %indvars.iv.next331 = add nuw nsw i64 %indvars.iv330, 1
  %exitcond334.not = icmp eq i64 %indvars.iv.next331, %wide.trip.count333
  br i1 %exitcond334.not, label %.loopexit298, label %149, !llvm.loop !12

._crit_edge:                                      ; preds = %.loopexit298, %.loopexit300
  br i1 %31, label %.preheader295, label %197

.preheader295:                                    ; preds = %._crit_edge
  %194 = icmp sgt i32 %3, 0
  br i1 %194, label %.loopexit.thread361, label %._crit_edge317

.loopexit.thread361:                              ; preds = %.preheader295
  %195 = zext nneg i32 %3 to i64
  %196 = shl nuw nsw i64 %195, 3
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %16, i8 0, i64 %196, i1 false), !tbaa !5
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %15, i8 0, i64 %196, i1 false), !tbaa !5
  br label %.lr.ph316

197:                                              ; preds = %._crit_edge
  %198 = icmp eq i16 %spec.select, 1
  br i1 %198, label %.preheader296, label %292

.preheader296:                                    ; preds = %197
  %199 = icmp sgt i32 %3, 0
  br i1 %199, label %.lr.ph311, label %._crit_edge317

.lr.ph311:                                        ; preds = %.preheader296
  %200 = add nsw i32 %1, -3
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds double, ptr %0, i64 %201
  %203 = sext i32 %8 to i64
  %204 = getelementptr inbounds double, ptr %0, i64 %203
  %205 = add nsw i32 %1, -2
  %206 = mul nsw i32 %205, %3
  %207 = sext i32 %205 to i64
  %208 = getelementptr inbounds double, ptr %0, i64 %207
  %209 = mul nsw i32 %200, %3
  %210 = sext i32 %206 to i64
  %211 = sext i32 %209 to i64
  %wide.trip.count343 = zext nneg i32 %3 to i64
  %invariant.gep366 = getelementptr double, ptr %2, i64 %210
  %invariant.gep368 = getelementptr double, ptr %2, i64 %10
  %invariant.gep370 = getelementptr double, ptr %2, i64 %211
  br label %212

212:                                              ; preds = %.lr.ph311, %212
  %indvars.iv340 = phi i64 [ 0, %.lr.ph311 ], [ %indvars.iv.next341, %212 ]
  %213 = load double, ptr %202, align 8, !tbaa !5
  %214 = tail call double @log(double noundef %213) #9
  %215 = load double, ptr %204, align 8, !tbaa !5
  %216 = tail call double @log(double noundef %215) #9
  %217 = fsub double %214, %216
  %218 = load double, ptr %202, align 8, !tbaa !5
  %219 = tail call double @log(double noundef %218) #9
  %220 = load double, ptr %204, align 8, !tbaa !5
  %221 = tail call double @log(double noundef %220) #9
  %222 = fsub double %219, %221
  %223 = fmul double %217, %222
  %gep367 = getelementptr double, ptr %invariant.gep366, i64 %indvars.iv340
  %224 = load double, ptr %gep367, align 8, !tbaa !5
  %225 = tail call double @log(double noundef %224) #9
  %gep369 = getelementptr double, ptr %invariant.gep368, i64 %indvars.iv340
  %226 = load double, ptr %gep369, align 8, !tbaa !5
  %227 = tail call double @log(double noundef %226) #9
  %228 = fsub double %225, %227
  %229 = load double, ptr %208, align 8, !tbaa !5
  %230 = tail call double @log(double noundef %229) #9
  %231 = load double, ptr %204, align 8, !tbaa !5
  %232 = tail call double @log(double noundef %231) #9
  %233 = fsub double %230, %232
  %234 = load double, ptr %208, align 8, !tbaa !5
  %235 = tail call double @log(double noundef %234) #9
  %236 = load double, ptr %204, align 8, !tbaa !5
  %237 = tail call double @log(double noundef %236) #9
  %238 = fsub double %235, %237
  %gep371 = getelementptr double, ptr %invariant.gep370, i64 %indvars.iv340
  %239 = load double, ptr %gep371, align 8, !tbaa !5
  %240 = tail call double @log(double noundef %239) #9
  %241 = load double, ptr %gep369, align 8, !tbaa !5
  %242 = tail call double @log(double noundef %241) #9
  %243 = fsub double %240, %242
  %244 = fneg double %233
  %245 = fmul double %238, %244
  %246 = fmul double %245, %243
  %247 = tail call double @llvm.fmuladd.f64(double %223, double %228, double %246)
  %248 = load double, ptr %202, align 8, !tbaa !5
  %249 = tail call double @log(double noundef %248) #9
  %250 = load double, ptr %204, align 8, !tbaa !5
  %251 = tail call double @log(double noundef %250) #9
  %252 = fsub double %249, %251
  %253 = load double, ptr %208, align 8, !tbaa !5
  %254 = tail call double @log(double noundef %253) #9
  %255 = load double, ptr %204, align 8, !tbaa !5
  %256 = tail call double @log(double noundef %255) #9
  %257 = fsub double %254, %256
  %258 = fmul double %252, %257
  %259 = load double, ptr %202, align 8, !tbaa !5
  %260 = tail call double @log(double noundef %259) #9
  %261 = load double, ptr %208, align 8, !tbaa !5
  %262 = tail call double @log(double noundef %261) #9
  %263 = fsub double %260, %262
  %264 = fmul double %258, %263
  %265 = fdiv double %247, %264
  %266 = getelementptr inbounds double, ptr %15, i64 %indvars.iv340
  store double 5.000000e-01, ptr %266, align 8, !tbaa !5
  %267 = load double, ptr %204, align 8, !tbaa !5
  %268 = tail call double @log(double noundef %267) #9
  %269 = load double, ptr %208, align 8, !tbaa !5
  %270 = tail call double @log(double noundef %269) #9
  %271 = load double, ptr %gep369, align 8, !tbaa !5
  %272 = tail call double @log(double noundef %271) #9
  %273 = load double, ptr %gep367, align 8, !tbaa !5
  %274 = tail call double @log(double noundef %273) #9
  %275 = fsub double %272, %274
  %276 = load double, ptr %204, align 8, !tbaa !5
  %277 = tail call double @log(double noundef %276) #9
  %278 = load double, ptr %208, align 8, !tbaa !5
  %279 = tail call double @log(double noundef %278) #9
  %280 = insertelement <2 x double> poison, double %268, i64 0
  %281 = insertelement <2 x double> %280, double %277, i64 1
  %282 = insertelement <2 x double> poison, double %270, i64 0
  %283 = insertelement <2 x double> %282, double %279, i64 1
  %284 = fsub <2 x double> %281, %283
  %285 = insertelement <2 x double> <double 3.000000e+00, double poison>, double %275, i64 1
  %286 = fdiv <2 x double> %285, %284
  %287 = extractelement <2 x double> %286, i64 1
  %288 = fsub double %265, %287
  %289 = extractelement <2 x double> %286, i64 0
  %290 = fmul double %289, %288
  %291 = getelementptr inbounds double, ptr %16, i64 %indvars.iv340
  store double %290, ptr %291, align 8, !tbaa !5
  %indvars.iv.next341 = add nuw nsw i64 %indvars.iv340, 1
  %exitcond344.not = icmp eq i64 %indvars.iv.next341, %wide.trip.count343
  br i1 %exitcond344.not, label %.lr.ph316, label %212, !llvm.loop !13

292:                                              ; preds = %197
  %293 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %6, ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull @__func__.array_logspline_table_lines, i32 noundef 842, i32 noundef %30) #9
  br label %372

.lr.ph316:                                        ; preds = %212, %.loopexit.thread361
  %294 = add nsw i32 %1, -2
  %295 = mul nsw i32 %294, %3
  %296 = sext i32 %295 to i64
  %wide.trip.count351 = zext nneg i32 %3 to i64
  %invariant.gep372 = getelementptr double, ptr %4, i64 %10
  %min.iters.check = icmp ult i32 %3, 2
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph316
  %297 = sub nsw i64 %10, %296
  %298 = and i64 %297, 2305843009213693950
  %diff.check = icmp eq i64 %298, 0
  br i1 %diff.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count351, 2147483646
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %299 = getelementptr inbounds double, ptr %16, i64 %index
  %wide.load = load <2 x double>, ptr %299, align 8, !tbaa !5
  %300 = getelementptr inbounds double, ptr %15, i64 %index
  %wide.load377 = load <2 x double>, ptr %300, align 8, !tbaa !5
  %301 = add nsw i64 %index, %296
  %302 = getelementptr inbounds double, ptr %12, i64 %301
  %wide.load378 = load <2 x double>, ptr %302, align 8, !tbaa !5
  %303 = fneg <2 x double> %wide.load377
  %304 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %303, <2 x double> %wide.load378, <2 x double> %wide.load)
  %305 = getelementptr inbounds double, ptr %4, i64 %301
  %wide.load379 = load <2 x double>, ptr %305, align 8, !tbaa !5
  %306 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load377, <2 x double> %wide.load379, <2 x double> <double 1.000000e+00, double 1.000000e+00>)
  %307 = fdiv <2 x double> %304, %306
  %308 = getelementptr double, ptr %invariant.gep372, i64 %index
  store <2 x double> %307, ptr %308, align 8, !tbaa !5
  %index.next = add nuw i64 %index, 2
  %309 = icmp eq i64 %index.next, %n.vec
  br i1 %309, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count351
  br i1 %cmp.n, label %._crit_edge317, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph316
  %indvars.iv348.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph316 ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv348 = phi i64 [ %indvars.iv.next349, %scalar.ph ], [ %indvars.iv348.ph, %scalar.ph.preheader ]
  %310 = getelementptr inbounds double, ptr %16, i64 %indvars.iv348
  %311 = load double, ptr %310, align 8, !tbaa !5
  %312 = getelementptr inbounds double, ptr %15, i64 %indvars.iv348
  %313 = load double, ptr %312, align 8, !tbaa !5
  %314 = add nsw i64 %indvars.iv348, %296
  %315 = getelementptr inbounds double, ptr %12, i64 %314
  %316 = load double, ptr %315, align 8, !tbaa !5
  %317 = fneg double %313
  %318 = tail call double @llvm.fmuladd.f64(double %317, double %316, double %311)
  %319 = getelementptr inbounds double, ptr %4, i64 %314
  %320 = load double, ptr %319, align 8, !tbaa !5
  %321 = tail call double @llvm.fmuladd.f64(double %313, double %320, double 1.000000e+00)
  %322 = fdiv double %318, %321
  %gep373 = getelementptr double, ptr %invariant.gep372, i64 %indvars.iv348
  store double %322, ptr %gep373, align 8, !tbaa !5
  %indvars.iv.next349 = add nuw nsw i64 %indvars.iv348, 1
  %exitcond352.not = icmp eq i64 %indvars.iv.next349, %wide.trip.count351
  br i1 %exitcond352.not, label %._crit_edge317, label %scalar.ph, !llvm.loop !17

._crit_edge317:                                   ; preds = %scalar.ph, %middle.block, %.preheader295, %.preheader296
  %.not376 = phi i1 [ true, %.preheader296 ], [ true, %.preheader295 ], [ false, %middle.block ], [ false, %scalar.ph ]
  %323 = icmp slt i32 %1, 2
  %brmerge = or i1 %323, %.not376
  br i1 %brmerge, label %._crit_edge322, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %._crit_edge317
  %324 = add nsw i32 %1, -2
  %325 = zext i32 %324 to i64
  %wide.trip.count356 = zext i32 %3 to i64
  %326 = mul nsw i64 %13, %325
  %327 = shl i64 %326, 3
  %scevgep = getelementptr i8, ptr %4, i64 %327
  %328 = shl nuw nsw i64 %wide.trip.count356, 3
  %scevgep381 = getelementptr i8, ptr %4, i64 %328
  %329 = add nuw nsw i64 %325, 1
  %330 = mul i64 %329, %13
  %331 = shl i64 %330, 3
  %scevgep382 = getelementptr i8, ptr %4, i64 %331
  %332 = add nsw i64 %13, %wide.trip.count356
  %333 = shl nsw i64 %332, 3
  %scevgep383 = getelementptr i8, ptr %4, i64 %333
  %min.iters.check387 = icmp ult i32 %3, 4
  %bound0 = icmp ult ptr %scevgep, %scevgep383
  %bound1 = icmp ult ptr %scevgep382, %scevgep381
  %found.conflict = and i1 %bound0, %bound1
  %stride.check = icmp sgt i32 %3, 0
  %334 = or i1 %found.conflict, %stride.check
  %n.vec390 = and i64 %wide.trip.count356, 2147483644
  %cmp.n401 = icmp eq i64 %n.vec390, %wide.trip.count356
  %xtraiter = and i64 %wide.trip.count356, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %335 = add nsw i64 %wide.trip.count356, -1
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge320.us
  %indvars.iv358 = phi i64 [ %325, %.preheader.us.preheader ], [ %indvars.iv.next359, %._crit_edge320.us ]
  %336 = mul nsw i64 %indvars.iv358, %13
  %337 = add nuw nsw i64 %indvars.iv358, 1
  %338 = mul nsw i64 %337, %13
  %invariant.gep374 = getelementptr double, ptr %4, i64 %338
  %brmerge402 = select i1 %min.iters.check387, i1 true, i1 %334
  br i1 %brmerge402, label %scalar.ph386.preheader, label %vector.body392

vector.body392:                                   ; preds = %.preheader.us, %vector.body392
  %index393 = phi i64 [ %index.next400, %vector.body392 ], [ 0, %.preheader.us ]
  %339 = add nsw i64 %index393, %336
  %340 = getelementptr inbounds double, ptr %4, i64 %339
  %341 = getelementptr inbounds i8, ptr %340, i64 16
  %wide.load394 = load <2 x double>, ptr %340, align 8, !tbaa !5, !alias.scope !18, !noalias !21
  %wide.load395 = load <2 x double>, ptr %341, align 8, !tbaa !5, !alias.scope !18, !noalias !21
  %342 = getelementptr double, ptr %invariant.gep374, i64 %index393
  %343 = getelementptr i8, ptr %342, i64 16
  %wide.load396 = load <2 x double>, ptr %342, align 8, !tbaa !5, !alias.scope !21
  %wide.load397 = load <2 x double>, ptr %343, align 8, !tbaa !5, !alias.scope !21
  %344 = getelementptr inbounds double, ptr %12, i64 %339
  %345 = getelementptr inbounds i8, ptr %344, i64 16
  %wide.load398 = load <2 x double>, ptr %344, align 8, !tbaa !5
  %wide.load399 = load <2 x double>, ptr %345, align 8, !tbaa !5
  %346 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load394, <2 x double> %wide.load396, <2 x double> %wide.load398)
  %347 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load395, <2 x double> %wide.load397, <2 x double> %wide.load399)
  store <2 x double> %346, ptr %340, align 8, !tbaa !5, !alias.scope !18, !noalias !21
  store <2 x double> %347, ptr %341, align 8, !tbaa !5, !alias.scope !18, !noalias !21
  %index.next400 = add nuw i64 %index393, 4
  %348 = icmp eq i64 %index.next400, %n.vec390
  br i1 %348, label %middle.block385, label %vector.body392, !llvm.loop !23

middle.block385:                                  ; preds = %vector.body392
  br i1 %cmp.n401, label %._crit_edge320.us, label %scalar.ph386.preheader

scalar.ph386.preheader:                           ; preds = %.preheader.us, %middle.block385
  %indvars.iv353.ph = phi i64 [ 0, %.preheader.us ], [ %n.vec390, %middle.block385 ]
  br i1 %lcmp.mod.not, label %scalar.ph386.prol.loopexit, label %scalar.ph386.prol

scalar.ph386.prol:                                ; preds = %scalar.ph386.preheader
  %349 = add nsw i64 %indvars.iv353.ph, %336
  %350 = getelementptr inbounds double, ptr %4, i64 %349
  %351 = load double, ptr %350, align 8, !tbaa !5
  %gep375.prol = getelementptr double, ptr %invariant.gep374, i64 %indvars.iv353.ph
  %352 = load double, ptr %gep375.prol, align 8, !tbaa !5
  %353 = getelementptr inbounds double, ptr %12, i64 %349
  %354 = load double, ptr %353, align 8, !tbaa !5
  %355 = tail call double @llvm.fmuladd.f64(double %351, double %352, double %354)
  store double %355, ptr %350, align 8, !tbaa !5
  %indvars.iv.next354.prol = or disjoint i64 %indvars.iv353.ph, 1
  br label %scalar.ph386.prol.loopexit

scalar.ph386.prol.loopexit:                       ; preds = %scalar.ph386.prol, %scalar.ph386.preheader
  %indvars.iv353.unr = phi i64 [ %indvars.iv353.ph, %scalar.ph386.preheader ], [ %indvars.iv.next354.prol, %scalar.ph386.prol ]
  %356 = icmp eq i64 %indvars.iv353.ph, %335
  br i1 %356, label %._crit_edge320.us, label %scalar.ph386

scalar.ph386:                                     ; preds = %scalar.ph386.prol.loopexit, %scalar.ph386
  %indvars.iv353 = phi i64 [ %indvars.iv.next354.1, %scalar.ph386 ], [ %indvars.iv353.unr, %scalar.ph386.prol.loopexit ]
  %357 = add nsw i64 %indvars.iv353, %336
  %358 = getelementptr inbounds double, ptr %4, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !5
  %gep375 = getelementptr double, ptr %invariant.gep374, i64 %indvars.iv353
  %360 = load double, ptr %gep375, align 8, !tbaa !5
  %361 = getelementptr inbounds double, ptr %12, i64 %357
  %362 = load double, ptr %361, align 8, !tbaa !5
  %363 = tail call double @llvm.fmuladd.f64(double %359, double %360, double %362)
  store double %363, ptr %358, align 8, !tbaa !5
  %indvars.iv.next354 = add nuw nsw i64 %indvars.iv353, 1
  %364 = add nsw i64 %indvars.iv.next354, %336
  %365 = getelementptr inbounds double, ptr %4, i64 %364
  %366 = load double, ptr %365, align 8, !tbaa !5
  %gep375.1 = getelementptr double, ptr %invariant.gep374, i64 %indvars.iv.next354
  %367 = load double, ptr %gep375.1, align 8, !tbaa !5
  %368 = getelementptr inbounds double, ptr %12, i64 %364
  %369 = load double, ptr %368, align 8, !tbaa !5
  %370 = tail call double @llvm.fmuladd.f64(double %366, double %367, double %369)
  store double %370, ptr %365, align 8, !tbaa !5
  %indvars.iv.next354.1 = add nuw nsw i64 %indvars.iv353, 2
  %exitcond357.not.1 = icmp eq i64 %indvars.iv.next354.1, %wide.trip.count356
  br i1 %exitcond357.not.1, label %._crit_edge320.us, label %scalar.ph386, !llvm.loop !24

._crit_edge320.us:                                ; preds = %scalar.ph386.prol.loopexit, %scalar.ph386, %middle.block385
  %indvars.iv.next359 = add nsw i64 %indvars.iv358, -1
  %371 = icmp sgt i64 %indvars.iv358, 0
  br i1 %371, label %.preheader.us, label %._crit_edge322, !llvm.loop !25

._crit_edge322:                                   ; preds = %._crit_edge320.us, %._crit_edge317
  tail call void @free(ptr noundef %15) #9
  tail call void @free(ptr noundef %16) #9
  tail call void @free(ptr noundef %12) #9
  br label %372

372:                                              ; preds = %._crit_edge322, %292, %124, %26, %22, %18
  %.0 = phi i32 [ 1, %18 ], [ 1, %22 ], [ 1, %26 ], [ 0, %._crit_edge322 ], [ 1, %292 ], [ 1, %124 ]
  ret i32 %.0
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { nofree 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 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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 = { 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 #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { 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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10, !15, !16}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !10, !15}
!18 = !{!19}
!19 = distinct !{!19, !20}
!20 = distinct !{!20, !"LVerDomain"}
!21 = !{!22}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !10, !15, !16}
!24 = distinct !{!24, !10, !15}
!25 = distinct !{!25, !10}


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