; LLVM IR from CLASS-SZ/class_sz :: class-sz/source (nonlinear)

; 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.nonlinear = type { i32, i32, i32, double, double, double, i16, i32, i32, i32, ptr, i16, i16, i32, i32, i32, i32, i32, i16, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, i16, [2048 x i8] }

@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [8 x i8], align 1
@__func__.nonlinear_pks_at_kvec_and_zvec = external hidden unnamed_addr constant [31 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [141 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [145 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [114 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [120 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @nonlinear_pk_at_z(ptr noundef, ptr noundef, i32 noundef, i32 noundef, double noundef, i32 noundef, ptr noundef, ptr noundef) #0

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

declare void @class_protect_sprintf(ptr noundef, ptr noundef, ...) #2

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

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

; Function Attrs: nounwind
declare double @exp(double noundef) #3

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

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

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

52:                                               ; preds = %9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %53 = load i32, ptr %15, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = mul i64 8, %54
  %56 = trunc i64 %55 to i32
  store i32 %56, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2048, ptr %32) #6
  %57 = getelementptr inbounds [2048 x i8], ptr %32, i64 0, i64 0
  %58 = load i32, ptr %31, align 4, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %57, ptr noundef @.str.15, ptr noundef @.str.32, i32 noundef %58)
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.nonlinear, ptr %59, i32 0, i32 45
  %61 = getelementptr inbounds [2048 x i8], ptr %60, i64 0, i64 0
  %62 = getelementptr inbounds [2048 x i8], ptr %32, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %61, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 788, ptr noundef %62)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %32) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %724

63:                                               ; preds = %9
  %64 = load ptr, ptr %12, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.nonlinear, ptr %64, i32 0, i32 11
  %66 = load i16, ptr %65, align 8, !tbaa !11
  %67 = icmp ne i16 %66, 0
  br i1 %67, label %68, label %125

68:                                               ; preds = %63
  %69 = load ptr, ptr %12, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.nonlinear, ptr %69, i32 0, i32 19
  %71 = load i32, ptr %70, align 4, !tbaa !15
  %72 = sext i32 %71 to i64
  %73 = mul i64 8, %72
  %74 = load i32, ptr %17, align 4, !tbaa !9
  %75 = sext i32 %74 to i64
  %76 = mul i64 %73, %75
  %77 = call noalias ptr @malloc(i64 noundef %76) #7
  store ptr %77, ptr %24, align 8, !tbaa !5
  %78 = load ptr, ptr %24, align 8, !tbaa !5
  %79 = icmp eq ptr %78, null
  br i1 %79, label %80, label %96

80:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %81 = load ptr, ptr %12, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.nonlinear, ptr %81, i32 0, i32 19
  %83 = load i32, ptr %82, align 4, !tbaa !15
  %84 = sext i32 %83 to i64
  %85 = mul i64 8, %84
  %86 = load i32, ptr %17, align 4, !tbaa !9
  %87 = sext i32 %86 to i64
  %88 = mul i64 %85, %87
  %89 = trunc i64 %88 to i32
  store i32 %89, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2048, ptr %35) #6
  %90 = getelementptr inbounds [2048 x i8], ptr %35, i64 0, i64 0
  %91 = load i32, ptr %34, align 4, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %90, ptr noundef @.str.15, ptr noundef @.str.33, i32 noundef %91)
  %92 = load ptr, ptr %12, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.nonlinear, ptr %92, i32 0, i32 45
  %94 = getelementptr inbounds [2048 x i8], ptr %93, i64 0, i64 0
  %95 = getelementptr inbounds [2048 x i8], ptr %35, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %94, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 792, ptr noundef %95)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %35) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  br label %724

96:                                               ; preds = %68
  %97 = load ptr, ptr %12, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.nonlinear, ptr %97, i32 0, i32 19
  %99 = load i32, ptr %98, align 4, !tbaa !15
  %100 = sext i32 %99 to i64
  %101 = mul i64 8, %100
  %102 = load i32, ptr %17, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = mul i64 %101, %103
  %105 = call noalias ptr @malloc(i64 noundef %104) #7
  store ptr %105, ptr %25, align 8, !tbaa !5
  %106 = load ptr, ptr %25, align 8, !tbaa !5
  %107 = icmp eq ptr %106, null
  br i1 %107, label %108, label %124

108:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  %109 = load ptr, ptr %12, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.nonlinear, ptr %109, i32 0, i32 19
  %111 = load i32, ptr %110, align 4, !tbaa !15
  %112 = sext i32 %111 to i64
  %113 = mul i64 8, %112
  %114 = load i32, ptr %17, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = mul i64 %113, %115
  %117 = trunc i64 %116 to i32
  store i32 %117, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2048, ptr %37) #6
  %118 = getelementptr inbounds [2048 x i8], ptr %37, i64 0, i64 0
  %119 = load i32, ptr %36, align 4, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %118, ptr noundef @.str.15, ptr noundef @.str.34, i32 noundef %119)
  %120 = load ptr, ptr %12, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.nonlinear, ptr %120, i32 0, i32 45
  %122 = getelementptr inbounds [2048 x i8], ptr %121, i64 0, i64 0
  %123 = getelementptr inbounds [2048 x i8], ptr %37, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %122, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 794, ptr noundef %123)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %37) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  br label %724

124:                                              ; preds = %96
  br label %125

125:                                              ; preds = %124, %63
  %126 = load ptr, ptr %12, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.nonlinear, ptr %126, i32 0, i32 12
  %128 = load i16, ptr %127, align 2, !tbaa !16
  %129 = icmp ne i16 %128, 0
  br i1 %129, label %130, label %187

130:                                              ; preds = %125
  %131 = load ptr, ptr %12, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.nonlinear, ptr %131, i32 0, i32 19
  %133 = load i32, ptr %132, align 4, !tbaa !15
  %134 = sext i32 %133 to i64
  %135 = mul i64 8, %134
  %136 = load i32, ptr %17, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = mul i64 %135, %137
  %139 = call noalias ptr @malloc(i64 noundef %138) #7
  store ptr %139, ptr %26, align 8, !tbaa !5
  %140 = load ptr, ptr %26, align 8, !tbaa !5
  %141 = icmp eq ptr %140, null
  br i1 %141, label %142, label %158

142:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  %143 = load ptr, ptr %12, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.nonlinear, ptr %143, i32 0, i32 19
  %145 = load i32, ptr %144, align 4, !tbaa !15
  %146 = sext i32 %145 to i64
  %147 = mul i64 8, %146
  %148 = load i32, ptr %17, align 4, !tbaa !9
  %149 = sext i32 %148 to i64
  %150 = mul i64 %147, %149
  %151 = trunc i64 %150 to i32
  store i32 %151, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2048, ptr %39) #6
  %152 = getelementptr inbounds [2048 x i8], ptr %39, i64 0, i64 0
  %153 = load i32, ptr %38, align 4, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %152, ptr noundef @.str.15, ptr noundef @.str.35, i32 noundef %153)
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.nonlinear, ptr %154, i32 0, i32 45
  %156 = getelementptr inbounds [2048 x i8], ptr %155, i64 0, i64 0
  %157 = getelementptr inbounds [2048 x i8], ptr %39, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %156, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 798, ptr noundef %157)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %39) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %724

158:                                              ; preds = %130
  %159 = load ptr, ptr %12, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.nonlinear, ptr %159, i32 0, i32 19
  %161 = load i32, ptr %160, align 4, !tbaa !15
  %162 = sext i32 %161 to i64
  %163 = mul i64 8, %162
  %164 = load i32, ptr %17, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = mul i64 %163, %165
  %167 = call noalias ptr @malloc(i64 noundef %166) #7
  store ptr %167, ptr %27, align 8, !tbaa !5
  %168 = load ptr, ptr %27, align 8, !tbaa !5
  %169 = icmp eq ptr %168, null
  br i1 %169, label %170, label %186

170:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  %171 = load ptr, ptr %12, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.nonlinear, ptr %171, i32 0, i32 19
  %173 = load i32, ptr %172, align 4, !tbaa !15
  %174 = sext i32 %173 to i64
  %175 = mul i64 8, %174
  %176 = load i32, ptr %17, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = mul i64 %175, %177
  %179 = trunc i64 %178 to i32
  store i32 %179, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2048, ptr %41) #6
  %180 = getelementptr inbounds [2048 x i8], ptr %41, i64 0, i64 0
  %181 = load i32, ptr %40, align 4, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %180, ptr noundef @.str.15, ptr noundef @.str.36, i32 noundef %181)
  %182 = load ptr, ptr %12, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.nonlinear, ptr %182, i32 0, i32 45
  %184 = getelementptr inbounds [2048 x i8], ptr %183, i64 0, i64 0
  %185 = getelementptr inbounds [2048 x i8], ptr %41, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %184, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 800, ptr noundef %185)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %41) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  br label %724

186:                                              ; preds = %158
  br label %187

187:                                              ; preds = %186, %125
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %188

188:                                              ; preds = %267, %187
  %189 = load i32, ptr %22, align 4, !tbaa !9
  %190 = load i32, ptr %17, align 4, !tbaa !9
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %192, label %270

192:                                              ; preds = %188
  %193 = load ptr, ptr %12, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.nonlinear, ptr %193, i32 0, i32 11
  %195 = load i16, ptr %194, align 8, !tbaa !11
  %196 = icmp ne i16 %195, 0
  br i1 %196, label %197, label %229

197:                                              ; preds = %192
  %198 = load ptr, ptr %11, align 8, !tbaa !5
  %199 = load ptr, ptr %12, align 8, !tbaa !5
  %200 = load i32, ptr %13, align 4, !tbaa !9
  %201 = load ptr, ptr %16, align 8, !tbaa !5
  %202 = load i32, ptr %22, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds double, ptr %201, i64 %203
  %205 = load double, ptr %204, align 8, !tbaa !17
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.nonlinear, ptr %206, i32 0, i32 13
  %208 = load i32, ptr %207, align 4, !tbaa !18
  %209 = load ptr, ptr %24, align 8, !tbaa !5
  %210 = load i32, ptr %22, align 4, !tbaa !9
  %211 = load ptr, ptr %12, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.nonlinear, ptr %211, i32 0, i32 19
  %213 = load i32, ptr %212, align 4, !tbaa !15
  %214 = mul nsw i32 %210, %213
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds double, ptr %209, i64 %215
  %217 = call i32 @nonlinear_pk_at_z(ptr noundef %198, ptr noundef %199, i32 noundef 1, i32 noundef %200, double noundef %205, i32 noundef %208, ptr noundef %216, ptr noundef null)
  %218 = icmp eq i32 %217, 1
  br i1 %218, label %219, label %228

219:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 2048, ptr %42) #6
  %220 = getelementptr inbounds [2048 x i8], ptr %42, i64 0, i64 0
  %221 = load ptr, ptr %12, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.nonlinear, ptr %221, i32 0, i32 45
  %223 = getelementptr inbounds [2048 x i8], ptr %222, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %220, ptr noundef @.str.4, ptr noundef @.str.37, ptr noundef %223)
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.nonlinear, ptr %224, i32 0, i32 45
  %226 = getelementptr inbounds [2048 x i8], ptr %225, i64 0, i64 0
  %227 = getelementptr inbounds [2048 x i8], ptr %42, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %226, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 817, ptr noundef %227)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %42) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %724

228:                                              ; preds = %197
  br label %229

229:                                              ; preds = %228, %192
  %230 = load ptr, ptr %12, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.nonlinear, ptr %230, i32 0, i32 12
  %232 = load i16, ptr %231, align 2, !tbaa !16
  %233 = icmp ne i16 %232, 0
  br i1 %233, label %234, label %266

234:                                              ; preds = %229
  %235 = load ptr, ptr %11, align 8, !tbaa !5
  %236 = load ptr, ptr %12, align 8, !tbaa !5
  %237 = load i32, ptr %13, align 4, !tbaa !9
  %238 = load ptr, ptr %16, align 8, !tbaa !5
  %239 = load i32, ptr %22, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds double, ptr %238, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !17
  %243 = load ptr, ptr %12, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.nonlinear, ptr %243, i32 0, i32 14
  %245 = load i32, ptr %244, align 8, !tbaa !19
  %246 = load ptr, ptr %26, align 8, !tbaa !5
  %247 = load i32, ptr %22, align 4, !tbaa !9
  %248 = load ptr, ptr %12, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.nonlinear, ptr %248, i32 0, i32 19
  %250 = load i32, ptr %249, align 4, !tbaa !15
  %251 = mul nsw i32 %247, %250
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %246, i64 %252
  %254 = call i32 @nonlinear_pk_at_z(ptr noundef %235, ptr noundef %236, i32 noundef 1, i32 noundef %237, double noundef %242, i32 noundef %245, ptr noundef %253, ptr noundef null)
  %255 = icmp eq i32 %254, 1
  br i1 %255, label %256, label %265

256:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 2048, ptr %43) #6
  %257 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.nonlinear, ptr %258, i32 0, i32 45
  %260 = getelementptr inbounds [2048 x i8], ptr %259, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %257, ptr noundef @.str.4, ptr noundef @.str.38, ptr noundef %260)
  %261 = load ptr, ptr %12, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.nonlinear, ptr %261, i32 0, i32 45
  %263 = getelementptr inbounds [2048 x i8], ptr %262, i64 0, i64 0
  %264 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %263, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 829, ptr noundef %264)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %43) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %724

265:                                              ; preds = %234
  br label %266

266:                                              ; preds = %265, %229
  br label %267

267:                                              ; preds = %266
  %268 = load i32, ptr %22, align 4, !tbaa !9
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %22, align 4, !tbaa !9
  br label %188, !llvm.loop !20

270:                                              ; preds = %188
  %271 = load ptr, ptr %12, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.nonlinear, ptr %271, i32 0, i32 11
  %273 = load i16, ptr %272, align 8, !tbaa !11
  %274 = icmp ne i16 %273, 0
  br i1 %274, label %275, label %300

275:                                              ; preds = %270
  %276 = load ptr, ptr %12, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.nonlinear, ptr %276, i32 0, i32 21
  %278 = load ptr, ptr %277, align 8, !tbaa !22
  %279 = load ptr, ptr %12, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.nonlinear, ptr %279, i32 0, i32 19
  %281 = load i32, ptr %280, align 4, !tbaa !15
  %282 = load ptr, ptr %24, align 8, !tbaa !5
  %283 = load i32, ptr %17, align 4, !tbaa !9
  %284 = load ptr, ptr %25, align 8, !tbaa !5
  %285 = load ptr, ptr %12, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.nonlinear, ptr %285, i32 0, i32 45
  %287 = getelementptr inbounds [2048 x i8], ptr %286, i64 0, i64 0
  %288 = call i32 @array_spline_table_columns2(ptr noundef %278, i32 noundef %281, ptr noundef %282, i32 noundef %283, ptr noundef %284, i16 noundef signext 0, ptr noundef %287)
  %289 = icmp eq i32 %288, 1
  br i1 %289, label %290, label %299

290:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 2048, ptr %44) #6
  %291 = getelementptr inbounds [2048 x i8], ptr %44, i64 0, i64 0
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.nonlinear, ptr %292, i32 0, i32 45
  %294 = getelementptr inbounds [2048 x i8], ptr %293, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %291, ptr noundef @.str.4, ptr noundef @.str.39, ptr noundef %294)
  %295 = load ptr, ptr %12, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.nonlinear, ptr %295, i32 0, i32 45
  %297 = getelementptr inbounds [2048 x i8], ptr %296, i64 0, i64 0
  %298 = getelementptr inbounds [2048 x i8], ptr %44, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %297, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 845, ptr noundef %298)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %44) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %724

299:                                              ; preds = %275
  br label %300

300:                                              ; preds = %299, %270
  %301 = load ptr, ptr %12, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.nonlinear, ptr %301, i32 0, i32 12
  %303 = load i16, ptr %302, align 2, !tbaa !16
  %304 = icmp ne i16 %303, 0
  br i1 %304, label %305, label %330

305:                                              ; preds = %300
  %306 = load ptr, ptr %12, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.nonlinear, ptr %306, i32 0, i32 21
  %308 = load ptr, ptr %307, align 8, !tbaa !22
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.nonlinear, ptr %309, i32 0, i32 19
  %311 = load i32, ptr %310, align 4, !tbaa !15
  %312 = load ptr, ptr %26, align 8, !tbaa !5
  %313 = load i32, ptr %17, align 4, !tbaa !9
  %314 = load ptr, ptr %27, align 8, !tbaa !5
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.nonlinear, ptr %315, i32 0, i32 45
  %317 = getelementptr inbounds [2048 x i8], ptr %316, i64 0, i64 0
  %318 = call i32 @array_spline_table_columns2(ptr noundef %308, i32 noundef %311, ptr noundef %312, i32 noundef %313, ptr noundef %314, i16 noundef signext 0, ptr noundef %317)
  %319 = icmp eq i32 %318, 1
  br i1 %319, label %320, label %329

320:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 2048, ptr %45) #6
  %321 = getelementptr inbounds [2048 x i8], ptr %45, i64 0, i64 0
  %322 = load ptr, ptr %12, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.nonlinear, ptr %322, i32 0, i32 45
  %324 = getelementptr inbounds [2048 x i8], ptr %323, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %321, ptr noundef @.str.4, ptr noundef @.str.40, ptr noundef %324)
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.nonlinear, ptr %325, i32 0, i32 45
  %327 = getelementptr inbounds [2048 x i8], ptr %326, i64 0, i64 0
  %328 = getelementptr inbounds [2048 x i8], ptr %45, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %327, ptr noundef @.str.3, ptr noundef @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 857, ptr noundef %328)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %45) #6
  store i32 1, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %724

329:                                              ; preds = %305
  br label %330

330:                                              ; preds = %329, %300
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %331

331:                                              ; preds = %346, %330
  %332 = load i32, ptr %21, align 4, !tbaa !9
  %333 = load i32, ptr %15, align 4, !tbaa !9
  %334 = icmp slt i32 %332, %333
  br i1 %334, label %335, label %349

335:                                              ; preds = %331
  %336 = load ptr, ptr %14, align 8, !tbaa !5
  %337 = load i32, ptr %21, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds double, ptr %336, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !17
  %341 = call double @log(double noundef %340) #6
  %342 = load ptr, ptr %23, align 8, !tbaa !5
  %343 = load i32, ptr %21, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds double, ptr %342, i64 %344
  store double %341, ptr %345, align 8, !tbaa !17
  br label %346

346:                                              ; preds = %335
  %347 = load i32, ptr %21, align 4, !tbaa !9
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %21, align 4, !tbaa !9
  br label %331, !llvm.loop !23

349:                                              ; preds = %331
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %350

350:                                              ; preds = %405, %349
  %351 = load i32, ptr %21, align 4, !tbaa !9
  %352 = load i32, ptr %15, align 4, !tbaa !9
  %353 = icmp slt i32 %351, %352
  br i1 %353, label %354, label %408

354:                                              ; preds = %350
  %355 = load ptr, ptr %23, align 8, !tbaa !5
  %356 = load i32, ptr %21, align 4, !tbaa !9
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds double, ptr %355, i64 %357
  %359 = load double, ptr %358, align 8, !tbaa !17
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.nonlinear, ptr %360, i32 0, i32 21
  %362 = load ptr, ptr %361, align 8, !tbaa !22
  %363 = getelementptr inbounds double, ptr %362, i64 0
  %364 = load double, ptr %363, align 8, !tbaa !17
  %365 = fcmp oge double %359, %364
  br i1 %365, label %366, label %367

366:                                              ; preds = %354
  br label %408

367:                                              ; preds = %354
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %401, %367
  %369 = load i32, ptr %22, align 4, !tbaa !9
  %370 = load i32, ptr %17, align 4, !tbaa !9
  %371 = icmp slt i32 %369, %370
  br i1 %371, label %372, label %404

372:                                              ; preds = %368
  %373 = load ptr, ptr %12, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.nonlinear, ptr %373, i32 0, i32 11
  %375 = load i16, ptr %374, align 8, !tbaa !11
  %376 = icmp ne i16 %375, 0
  br i1 %376, label %377, label %386

377:                                              ; preds = %372
  %378 = load ptr, ptr %18, align 8, !tbaa !5
  %379 = load i32, ptr %22, align 4, !tbaa !9
  %380 = load i32, ptr %15, align 4, !tbaa !9
  %381 = mul nsw i32 %379, %380
  %382 = load i32, ptr %21, align 4, !tbaa !9
  %383 = add nsw i32 %381, %382
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds double, ptr %378, i64 %384
  store double 0.000000e+00, ptr %385, align 8, !tbaa !17
  br label %386

386:                                              ; preds = %377, %372
  %387 = load ptr, ptr %12, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.nonlinear, ptr %387, i32 0, i32 12
  %389 = load i16, ptr %388, align 2, !tbaa !16
  %390 = icmp ne i16 %389, 0
  br i1 %390, label %391, label %400

391:                                              ; preds = %386
  %392 = load ptr, ptr %19, align 8, !tbaa !5
  %393 = load i32, ptr %22, align 4, !tbaa !9
  %394 = load i32, ptr %15, align 4, !tbaa !9
  %395 = mul nsw i32 %393, %394
  %396 = load i32, ptr %21, align 4, !tbaa !9
  %397 = add nsw i32 %395, %396
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds double, ptr %392, i64 %398
  store double 0.000000e+00, ptr %399, align 8, !tbaa !17
  br label %400

400:                                              ; preds = %391, %386
  br label %401

401:                                              ; preds = %400
  %402 = load i32, ptr %22, align 4, !tbaa !9
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %22, align 4, !tbaa !9
  br label %368, !llvm.loop !24

404:                                              ; preds = %368
  br label %405

405:                                              ; preds = %404
  %406 = load i32, ptr %21, align 4, !tbaa !9
  %407 = add nsw i32 %406, 1
  store i32 %407, ptr %21, align 4, !tbaa !9
  br label %350, !llvm.loop !25

408:                                              ; preds = %366, %350
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %409

409:                                              ; preds = %658, %408
  %410 = load i32, ptr %20, align 4, !tbaa !9
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.nonlinear, ptr %411, i32 0, i32 19
  %413 = load i32, ptr %412, align 4, !tbaa !15
  %414 = sub nsw i32 %413, 1
  %415 = icmp slt i32 %410, %414
  br i1 %415, label %416, label %661

416:                                              ; preds = %409
  br label %417

417:                                              ; preds = %654, %416
  %418 = load i32, ptr %21, align 4, !tbaa !9
  %419 = load i32, ptr %15, align 4, !tbaa !9
  %420 = icmp slt i32 %418, %419
  br i1 %420, label %421, label %436

421:                                              ; preds = %417
  %422 = load ptr, ptr %23, 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 !17
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.nonlinear, ptr %427, i32 0, i32 21
  %429 = load ptr, ptr %428, align 8, !tbaa !22
  %430 = load i32, ptr %20, align 4, !tbaa !9
  %431 = add nsw i32 %430, 1
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds double, ptr %429, i64 %432
  %434 = load double, ptr %433, align 8, !tbaa !17
  %435 = fcmp ole double %426, %434
  br label %436

436:                                              ; preds = %421, %417
  %437 = phi i1 [ false, %417 ], [ %435, %421 ]
  br i1 %437, label %438, label %657

438:                                              ; preds = %436
  %439 = load ptr, ptr %12, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.nonlinear, ptr %439, i32 0, i32 21
  %441 = load ptr, ptr %440, align 8, !tbaa !22
  %442 = load i32, ptr %20, align 4, !tbaa !9
  %443 = add nsw i32 %442, 1
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds double, ptr %441, i64 %444
  %446 = load double, ptr %445, align 8, !tbaa !17
  %447 = load ptr, ptr %12, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.nonlinear, ptr %447, i32 0, i32 21
  %449 = load ptr, ptr %448, align 8, !tbaa !22
  %450 = load i32, ptr %20, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds double, ptr %449, i64 %451
  %453 = load double, ptr %452, align 8, !tbaa !17
  %454 = fsub double %446, %453
  store double %454, ptr %28, align 8, !tbaa !17
  %455 = load ptr, ptr %23, align 8, !tbaa !5
  %456 = load i32, ptr %21, align 4, !tbaa !9
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds double, ptr %455, i64 %457
  %459 = load double, ptr %458, align 8, !tbaa !17
  %460 = load ptr, ptr %12, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.nonlinear, ptr %460, i32 0, i32 21
  %462 = load ptr, ptr %461, align 8, !tbaa !22
  %463 = load i32, ptr %20, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = getelementptr inbounds double, ptr %462, i64 %464
  %466 = load double, ptr %465, align 8, !tbaa !17
  %467 = fsub double %459, %466
  %468 = load double, ptr %28, align 8, !tbaa !17
  %469 = fdiv double %467, %468
  store double %469, ptr %30, align 8, !tbaa !17
  %470 = load double, ptr %30, align 8, !tbaa !17
  %471 = fsub double 1.000000e+00, %470
  store double %471, ptr %29, align 8, !tbaa !17
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %472

472:                                              ; preds = %651, %438
  %473 = load i32, ptr %22, align 4, !tbaa !9
  %474 = load i32, ptr %17, align 4, !tbaa !9
  %475 = icmp slt i32 %473, %474
  br i1 %475, label %476, label %654

476:                                              ; preds = %472
  %477 = load ptr, ptr %12, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.nonlinear, ptr %477, i32 0, i32 11
  %479 = load i16, ptr %478, align 8, !tbaa !11
  %480 = icmp ne i16 %479, 0
  br i1 %480, label %481, label %563

481:                                              ; preds = %476
  %482 = load double, ptr %29, align 8, !tbaa !17
  %483 = load ptr, ptr %24, align 8, !tbaa !5
  %484 = load i32, ptr %22, align 4, !tbaa !9
  %485 = load ptr, ptr %12, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.nonlinear, ptr %485, i32 0, i32 19
  %487 = load i32, ptr %486, align 4, !tbaa !15
  %488 = mul nsw i32 %484, %487
  %489 = load i32, ptr %20, align 4, !tbaa !9
  %490 = add nsw i32 %488, %489
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds double, ptr %483, i64 %491
  %493 = load double, ptr %492, align 8, !tbaa !17
  %494 = load double, ptr %30, align 8, !tbaa !17
  %495 = load ptr, ptr %24, align 8, !tbaa !5
  %496 = load i32, ptr %22, align 4, !tbaa !9
  %497 = load ptr, ptr %12, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.nonlinear, ptr %497, i32 0, i32 19
  %499 = load i32, ptr %498, align 4, !tbaa !15
  %500 = mul nsw i32 %496, %499
  %501 = load i32, ptr %20, align 4, !tbaa !9
  %502 = add nsw i32 %500, %501
  %503 = add nsw i32 %502, 1
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds double, ptr %495, i64 %504
  %506 = load double, ptr %505, align 8, !tbaa !17
  %507 = fmul double %494, %506
  %508 = call double @llvm.fmuladd.f64(double %482, double %493, double %507)
  %509 = load double, ptr %29, align 8, !tbaa !17
  %510 = load double, ptr %29, align 8, !tbaa !17
  %511 = fmul double %509, %510
  %512 = load double, ptr %29, align 8, !tbaa !17
  %513 = load double, ptr %29, align 8, !tbaa !17
  %514 = fneg double %513
  %515 = call double @llvm.fmuladd.f64(double %511, double %512, double %514)
  %516 = load ptr, ptr %25, align 8, !tbaa !5
  %517 = load i32, ptr %22, align 4, !tbaa !9
  %518 = load ptr, ptr %12, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.nonlinear, ptr %518, i32 0, i32 19
  %520 = load i32, ptr %519, align 4, !tbaa !15
  %521 = mul nsw i32 %517, %520
  %522 = load i32, ptr %20, align 4, !tbaa !9
  %523 = add nsw i32 %521, %522
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds double, ptr %516, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !17
  %527 = load double, ptr %30, align 8, !tbaa !17
  %528 = load double, ptr %30, align 8, !tbaa !17
  %529 = fmul double %527, %528
  %530 = load double, ptr %30, align 8, !tbaa !17
  %531 = load double, ptr %30, align 8, !tbaa !17
  %532 = fneg double %531
  %533 = call double @llvm.fmuladd.f64(double %529, double %530, double %532)
  %534 = load ptr, ptr %25, align 8, !tbaa !5
  %535 = load i32, ptr %22, align 4, !tbaa !9
  %536 = load ptr, ptr %12, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.nonlinear, ptr %536, i32 0, i32 19
  %538 = load i32, ptr %537, align 4, !tbaa !15
  %539 = mul nsw i32 %535, %538
  %540 = load i32, ptr %20, align 4, !tbaa !9
  %541 = add nsw i32 %539, %540
  %542 = add nsw i32 %541, 1
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds double, ptr %534, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !17
  %546 = fmul double %533, %545
  %547 = call double @llvm.fmuladd.f64(double %515, double %526, double %546)
  %548 = load double, ptr %28, align 8, !tbaa !17
  %549 = fmul double %547, %548
  %550 = load double, ptr %28, align 8, !tbaa !17
  %551 = fmul double %549, %550
  %552 = fdiv double %551, 6.000000e+00
  %553 = fadd double %508, %552
  %554 = call double @exp(double noundef %553) #6
  %555 = load ptr, ptr %18, align 8, !tbaa !5
  %556 = load i32, ptr %22, align 4, !tbaa !9
  %557 = load i32, ptr %15, align 4, !tbaa !9
  %558 = mul nsw i32 %556, %557
  %559 = load i32, ptr %21, align 4, !tbaa !9
  %560 = add nsw i32 %558, %559
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds double, ptr %555, i64 %561
  store double %554, ptr %562, align 8, !tbaa !17
  br label %563

563:                                              ; preds = %481, %476
  %564 = load ptr, ptr %12, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.nonlinear, ptr %564, i32 0, i32 12
  %566 = load i16, ptr %565, align 2, !tbaa !16
  %567 = icmp ne i16 %566, 0
  br i1 %567, label %568, label %650

568:                                              ; preds = %563
  %569 = load double, ptr %29, align 8, !tbaa !17
  %570 = load ptr, ptr %26, align 8, !tbaa !5
  %571 = load i32, ptr %22, align 4, !tbaa !9
  %572 = load ptr, ptr %12, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.nonlinear, ptr %572, i32 0, i32 19
  %574 = load i32, ptr %573, align 4, !tbaa !15
  %575 = mul nsw i32 %571, %574
  %576 = load i32, ptr %20, align 4, !tbaa !9
  %577 = add nsw i32 %575, %576
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds double, ptr %570, i64 %578
  %580 = load double, ptr %579, align 8, !tbaa !17
  %581 = load double, ptr %30, align 8, !tbaa !17
  %582 = load ptr, ptr %26, align 8, !tbaa !5
  %583 = load i32, ptr %22, align 4, !tbaa !9
  %584 = load ptr, ptr %12, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.nonlinear, ptr %584, i32 0, i32 19
  %586 = load i32, ptr %585, align 4, !tbaa !15
  %587 = mul nsw i32 %583, %586
  %588 = load i32, ptr %20, align 4, !tbaa !9
  %589 = add nsw i32 %587, %588
  %590 = add nsw i32 %589, 1
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds double, ptr %582, i64 %591
  %593 = load double, ptr %592, align 8, !tbaa !17
  %594 = fmul double %581, %593
  %595 = call double @llvm.fmuladd.f64(double %569, double %580, double %594)
  %596 = load double, ptr %29, align 8, !tbaa !17
  %597 = load double, ptr %29, align 8, !tbaa !17
  %598 = fmul double %596, %597
  %599 = load double, ptr %29, align 8, !tbaa !17
  %600 = load double, ptr %29, align 8, !tbaa !17
  %601 = fneg double %600
  %602 = call double @llvm.fmuladd.f64(double %598, double %599, double %601)
  %603 = load ptr, ptr %27, align 8, !tbaa !5
  %604 = load i32, ptr %22, align 4, !tbaa !9
  %605 = load ptr, ptr %12, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.nonlinear, ptr %605, i32 0, i32 19
  %607 = load i32, ptr %606, align 4, !tbaa !15
  %608 = mul nsw i32 %604, %607
  %609 = load i32, ptr %20, align 4, !tbaa !9
  %610 = add nsw i32 %608, %609
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds double, ptr %603, i64 %611
  %613 = load double, ptr %612, align 8, !tbaa !17
  %614 = load double, ptr %30, align 8, !tbaa !17
  %615 = load double, ptr %30, align 8, !tbaa !17
  %616 = fmul double %614, %615
  %617 = load double, ptr %30, align 8, !tbaa !17
  %618 = load double, ptr %30, align 8, !tbaa !17
  %619 = fneg double %618
  %620 = call double @llvm.fmuladd.f64(double %616, double %617, double %619)
  %621 = load ptr, ptr %27, align 8, !tbaa !5
  %622 = load i32, ptr %22, align 4, !tbaa !9
  %623 = load ptr, ptr %12, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.nonlinear, ptr %623, i32 0, i32 19
  %625 = load i32, ptr %624, align 4, !tbaa !15
  %626 = mul nsw i32 %622, %625
  %627 = load i32, ptr %20, align 4, !tbaa !9
  %628 = add nsw i32 %626, %627
  %629 = add nsw i32 %628, 1
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds double, ptr %621, i64 %630
  %632 = load double, ptr %631, align 8, !tbaa !17
  %633 = fmul double %620, %632
  %634 = call double @llvm.fmuladd.f64(double %602, double %613, double %633)
  %635 = load double, ptr %28, align 8, !tbaa !17
  %636 = fmul double %634, %635
  %637 = load double, ptr %28, align 8, !tbaa !17
  %638 = fmul double %636, %637
  %639 = fdiv double %638, 6.000000e+00
  %640 = fadd double %595, %639
  %641 = call double @exp(double noundef %640) #6
  %642 = load ptr, ptr %19, align 8, !tbaa !5
  %643 = load i32, ptr %22, align 4, !tbaa !9
  %644 = load i32, ptr %15, align 4, !tbaa !9
  %645 = mul nsw i32 %643, %644
  %646 = load i32, ptr %21, align 4, !tbaa !9
  %647 = add nsw i32 %645, %646
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds double, ptr %642, i64 %648
  store double %641, ptr %649, align 8, !tbaa !17
  br label %650

650:                                              ; preds = %568, %563
  br label %651

651:                                              ; preds = %650
  %652 = load i32, ptr %22, align 4, !tbaa !9
  %653 = add nsw i32 %652, 1
  store i32 %653, ptr %22, align 4, !tbaa !9
  br label %472, !llvm.loop !26

654:                                              ; preds = %472
  %655 = load i32, ptr %21, align 4, !tbaa !9
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %21, align 4, !tbaa !9
  br label %417, !llvm.loop !27

657:                                              ; preds = %436
  br label %658

658:                                              ; preds = %657
  %659 = load i32, ptr %20, align 4, !tbaa !9
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %20, align 4, !tbaa !9
  br label %409, !llvm.loop !28

661:                                              ; preds = %409
  br label %662

662:                                              ; preds = %703, %661
  %663 = load i32, ptr %21, align 4, !tbaa !9
  %664 = load i32, ptr %15, align 4, !tbaa !9
  %665 = icmp slt i32 %663, %664
  br i1 %665, label %666, label %706

666:                                              ; preds = %662
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %667

667:                                              ; preds = %700, %666
  %668 = load i32, ptr %22, align 4, !tbaa !9
  %669 = load i32, ptr %17, align 4, !tbaa !9
  %670 = icmp slt i32 %668, %669
  br i1 %670, label %671, label %703

671:                                              ; preds = %667
  %672 = load ptr, ptr %12, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.nonlinear, ptr %672, i32 0, i32 11
  %674 = load i16, ptr %673, align 8, !tbaa !11
  %675 = icmp ne i16 %674, 0
  br i1 %675, label %676, label %685

676:                                              ; preds = %671
  %677 = load ptr, ptr %18, align 8, !tbaa !5
  %678 = load i32, ptr %22, align 4, !tbaa !9
  %679 = load i32, ptr %15, align 4, !tbaa !9
  %680 = mul nsw i32 %678, %679
  %681 = load i32, ptr %21, align 4, !tbaa !9
  %682 = add nsw i32 %680, %681
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds double, ptr %677, i64 %683
  store double 0.000000e+00, ptr %684, align 8, !tbaa !17
  br label %685

685:                                              ; preds = %676, %671
  %686 = load ptr, ptr %12, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.nonlinear, ptr %686, i32 0, i32 12
  %688 = load i16, ptr %687, align 2, !tbaa !16
  %689 = icmp ne i16 %688, 0
  br i1 %689, label %690, label %699

690:                                              ; preds = %685
  %691 = load ptr, ptr %19, align 8, !tbaa !5
  %692 = load i32, ptr %22, align 4, !tbaa !9
  %693 = load i32, ptr %15, align 4, !tbaa !9
  %694 = mul nsw i32 %692, %693
  %695 = load i32, ptr %21, align 4, !tbaa !9
  %696 = add nsw i32 %694, %695
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds double, ptr %691, i64 %697
  store double 0.000000e+00, ptr %698, align 8, !tbaa !17
  br label %699

699:                                              ; preds = %690, %685
  br label %700

700:                                              ; preds = %699
  %701 = load i32, ptr %22, align 4, !tbaa !9
  %702 = add nsw i32 %701, 1
  store i32 %702, ptr %22, align 4, !tbaa !9
  br label %667, !llvm.loop !29

703:                                              ; preds = %667
  %704 = load i32, ptr %21, align 4, !tbaa !9
  %705 = add nsw i32 %704, 1
  store i32 %705, ptr %21, align 4, !tbaa !9
  br label %662, !llvm.loop !30

706:                                              ; preds = %662
  %707 = load ptr, ptr %23, align 8, !tbaa !5
  call void @free(ptr noundef %707) #6
  %708 = load ptr, ptr %12, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.nonlinear, ptr %708, i32 0, i32 11
  %710 = load i16, ptr %709, align 8, !tbaa !11
  %711 = icmp ne i16 %710, 0
  br i1 %711, label %712, label %715

712:                                              ; preds = %706
  %713 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %713) #6
  %714 = load ptr, ptr %25, align 8, !tbaa !5
  call void @free(ptr noundef %714) #6
  br label %715

715:                                              ; preds = %712, %706
  %716 = load ptr, ptr %12, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.nonlinear, ptr %716, i32 0, i32 12
  %718 = load i16, ptr %717, align 2, !tbaa !16
  %719 = icmp ne i16 %718, 0
  br i1 %719, label %720, label %723

720:                                              ; preds = %715
  %721 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %721) #6
  %722 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %722) #6
  br label %723

723:                                              ; preds = %720, %715
  store i32 0, ptr %10, align 4
  store i32 1, ptr %33, align 4
  br label %724

724:                                              ; preds = %723, %320, %290, %256, %219, %170, %142, %108, %80, %52
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, 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 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, 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
  %725 = load i32, ptr %10, align 4
  ret i32 %725
}

declare i32 @array_spline_table_columns2(ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i16 noundef signext, ptr noundef) #2

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 "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 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { 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, !14, i64 64}
!12 = !{!"nonlinear", !10, i64 0, !10, i64 4, !10, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !14, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !6, i64 56, !14, i64 64, !14, i64 66, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !14, i64 88, !10, i64 92, !6, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !10, i64 184, !10, i64 188, !6, i64 192, !6, i64 200, !6, i64 208, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !6, i64 240, !6, i64 248, !6, i64 256, !14, i64 264, !7, i64 266}
!13 = !{!"double", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!12, !10, i64 92}
!16 = !{!12, !14, i64 66}
!17 = !{!13, !13, i64 0}
!18 = !{!12, !10, i64 68}
!19 = !{!12, !10, i64 72}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!12, !6, i64 104}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}


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

@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [8 x i8], align 1
@__func__.nonlinear_pks_at_kvec_and_zvec = external hidden unnamed_addr constant [31 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [141 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [145 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [114 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [120 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @nonlinear_pk_at_z(ptr noundef, ptr noundef, i32 noundef, i32 noundef, double noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

declare void @class_protect_sprintf(ptr noundef, ptr noundef, ...) local_unnamed_addr #2

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @nonlinear_pks_at_kvec_and_zvec(ptr noundef %0, ptr noundef %1, i32 noundef %2, ptr nocapture noundef readonly %3, i32 noundef %4, ptr nocapture noundef readonly %5, i32 noundef %6, ptr nocapture noundef writeonly %7, ptr nocapture noundef writeonly %8) local_unnamed_addr #0 {
  %10 = ptrtoint ptr %7 to i64
  %11 = ptrtoint ptr %8 to i64
  %12 = ptrtoint ptr %7 to i64
  %13 = ptrtoint ptr %8 to i64
  %14 = alloca [2048 x i8], align 16
  %15 = alloca [2048 x i8], align 16
  %16 = alloca [2048 x i8], align 16
  %17 = alloca [2048 x i8], align 16
  %18 = alloca [2048 x i8], align 16
  %19 = alloca [2048 x i8], align 16
  %20 = alloca [2048 x i8], align 16
  %21 = alloca [2048 x i8], align 16
  %22 = alloca [2048 x i8], align 16
  %23 = sext i32 %4 to i64
  %24 = shl nsw i64 %23, 3
  %25 = tail call noalias ptr @malloc(i64 noundef %24) #8
  %26 = icmp eq ptr %25, null
  br i1 %26, label %27, label %30

27:                                               ; preds = %9
  %28 = trunc i64 %24 to i32
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %14) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %14, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.32, i32 noundef %28) #9
  %29 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %29, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 788, ptr noundef nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %14) #9
  br label %348

30:                                               ; preds = %9
  %31 = getelementptr inbounds i8, ptr %1, i64 64
  %32 = load i16, ptr %31, align 8, !tbaa !5
  %.not = icmp eq i16 %32, 0
  br i1 %.not, label %53, label %33

33:                                               ; preds = %30
  %34 = getelementptr inbounds i8, ptr %1, i64 92
  %35 = load i32, ptr %34, align 4, !tbaa !13
  %36 = sext i32 %35 to i64
  %37 = shl nsw i64 %36, 3
  %38 = sext i32 %6 to i64
  %39 = mul i64 %37, %38
  %40 = tail call noalias ptr @malloc(i64 noundef %39) #8
  %41 = icmp eq ptr %40, null
  br i1 %41, label %42, label %46

42:                                               ; preds = %33
  %43 = shl i32 %6, 3
  %44 = mul i32 %43, %35
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %15, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.33, i32 noundef %44) #9
  %45 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %45, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 792, ptr noundef nonnull %15) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %15) #9
  br label %348

46:                                               ; preds = %33
  %47 = tail call noalias ptr @malloc(i64 noundef %39) #8
  %48 = icmp eq ptr %47, null
  br i1 %48, label %49, label %53

49:                                               ; preds = %46
  %50 = shl i32 %6, 3
  %51 = mul i32 %50, %35
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %16) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %16, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.34, i32 noundef %51) #9
  %52 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %52, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 794, ptr noundef nonnull %16) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %16) #9
  br label %348

53:                                               ; preds = %46, %30
  %.0225 = phi ptr [ %47, %46 ], [ null, %30 ]
  %.0224 = phi ptr [ %40, %46 ], [ null, %30 ]
  %54 = getelementptr inbounds i8, ptr %1, i64 66
  %55 = load i16, ptr %54, align 2, !tbaa !14
  %.not237 = icmp eq i16 %55, 0
  br i1 %.not237, label %76, label %56

56:                                               ; preds = %53
  %57 = getelementptr inbounds i8, ptr %1, i64 92
  %58 = load i32, ptr %57, align 4, !tbaa !13
  %59 = sext i32 %58 to i64
  %60 = shl nsw i64 %59, 3
  %61 = sext i32 %6 to i64
  %62 = mul i64 %60, %61
  %63 = tail call noalias ptr @malloc(i64 noundef %62) #8
  %64 = icmp eq ptr %63, null
  br i1 %64, label %65, label %69

65:                                               ; preds = %56
  %66 = shl i32 %6, 3
  %67 = mul i32 %66, %58
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %17) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %17, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.35, i32 noundef %67) #9
  %68 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %68, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 798, ptr noundef nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %17) #9
  br label %348

69:                                               ; preds = %56
  %70 = tail call noalias ptr @malloc(i64 noundef %62) #8
  %71 = icmp eq ptr %70, null
  br i1 %71, label %72, label %76

72:                                               ; preds = %69
  %73 = shl i32 %6, 3
  %74 = mul i32 %73, %58
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %18) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %18, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.36, i32 noundef %74) #9
  %75 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %75, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 800, ptr noundef nonnull %18) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %18) #9
  br label %348

76:                                               ; preds = %69, %53
  %.0227 = phi ptr [ %70, %69 ], [ null, %53 ]
  %.0226 = phi ptr [ %63, %69 ], [ null, %53 ]
  %77 = icmp slt i32 %6, 1
  br i1 %77, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %76
  %78 = getelementptr inbounds i8, ptr %1, i64 68
  %79 = getelementptr inbounds i8, ptr %1, i64 92
  %80 = getelementptr inbounds i8, ptr %1, i64 72
  %wide.trip.count = zext nneg i32 %6 to i64
  br label %81

81:                                               ; preds = %.lr.ph, %111
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %111 ]
  %82 = load i16, ptr %31, align 8, !tbaa !5
  %.not248 = icmp eq i16 %82, 0
  br i1 %.not248, label %96, label %83

83:                                               ; preds = %81
  %84 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  %85 = load double, ptr %84, align 8, !tbaa !15
  %86 = load i32, ptr %78, align 4, !tbaa !16
  %87 = load i32, ptr %79, align 4, !tbaa !13
  %88 = trunc nuw nsw i64 %indvars.iv to i32
  %89 = mul nsw i32 %87, %88
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds double, ptr %.0224, i64 %90
  %92 = tail call i32 @nonlinear_pk_at_z(ptr noundef %0, ptr noundef nonnull %1, i32 noundef 1, i32 noundef %2, double noundef %85, i32 noundef %86, ptr noundef %91, ptr noundef null)
  %93 = icmp eq i32 %92, 1
  br i1 %93, label %94, label %96

94:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %19) #9
  %95 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %19, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.37, ptr noundef nonnull %95) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %95, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 817, ptr noundef nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %19) #9
  br label %348

96:                                               ; preds = %83, %81
  %97 = load i16, ptr %54, align 2, !tbaa !14
  %.not249 = icmp eq i16 %97, 0
  br i1 %.not249, label %111, label %98

98:                                               ; preds = %96
  %99 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  %100 = load double, ptr %99, align 8, !tbaa !15
  %101 = load i32, ptr %80, align 8, !tbaa !17
  %102 = load i32, ptr %79, align 4, !tbaa !13
  %103 = trunc nuw nsw i64 %indvars.iv to i32
  %104 = mul nsw i32 %102, %103
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds double, ptr %.0226, i64 %105
  %107 = tail call i32 @nonlinear_pk_at_z(ptr noundef %0, ptr noundef nonnull %1, i32 noundef 1, i32 noundef %2, double noundef %100, i32 noundef %101, ptr noundef %106, ptr noundef null)
  %108 = icmp eq i32 %107, 1
  br i1 %108, label %109, label %111

109:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %20) #9
  %110 = getelementptr inbounds i8, ptr %1, i64 266
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %20, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.38, ptr noundef nonnull %110) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %110, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 829, ptr noundef nonnull %20) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %20) #9
  br label %348

111:                                              ; preds = %96, %98
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %81, !llvm.loop !18

._crit_edge.loopexit:                             ; preds = %111
  %.pre = load i16, ptr %31, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %76
  %112 = phi i16 [ %.pre, %._crit_edge.loopexit ], [ %32, %76 ]
  %.not238 = icmp eq i16 %112, 0
  br i1 %.not238, label %122, label %113

113:                                              ; preds = %._crit_edge
  %114 = getelementptr inbounds i8, ptr %1, i64 104
  %115 = load ptr, ptr %114, align 8, !tbaa !20
  %116 = getelementptr inbounds i8, ptr %1, i64 92
  %117 = load i32, ptr %116, align 4, !tbaa !13
  %118 = getelementptr inbounds i8, ptr %1, i64 266
  %119 = tail call i32 @array_spline_table_columns2(ptr noundef %115, i32 noundef %117, ptr noundef %.0224, i32 noundef %6, ptr noundef %.0225, i16 noundef signext 0, ptr noundef nonnull %118) #9
  %120 = icmp eq i32 %119, 1
  br i1 %120, label %121, label %122

121:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %21) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %21, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.39, ptr noundef nonnull %118) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %118, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 845, ptr noundef nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %21) #9
  br label %348

122:                                              ; preds = %113, %._crit_edge
  %123 = load i16, ptr %54, align 2, !tbaa !14
  %.not239 = icmp eq i16 %123, 0
  br i1 %.not239, label %133, label %124

124:                                              ; preds = %122
  %125 = getelementptr inbounds i8, ptr %1, i64 104
  %126 = load ptr, ptr %125, align 8, !tbaa !20
  %127 = getelementptr inbounds i8, ptr %1, i64 92
  %128 = load i32, ptr %127, align 4, !tbaa !13
  %129 = getelementptr inbounds i8, ptr %1, i64 266
  %130 = tail call i32 @array_spline_table_columns2(ptr noundef %126, i32 noundef %128, ptr noundef %.0226, i32 noundef %6, ptr noundef %.0227, i16 noundef signext 0, ptr noundef nonnull %129) #9
  %131 = icmp eq i32 %130, 1
  br i1 %131, label %132, label %133

132:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %22) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %22, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.40, ptr noundef nonnull %129) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %129, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.nonlinear_pks_at_kvec_and_zvec, i32 noundef 857, ptr noundef nonnull %22) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %22) #9
  br label %348

133:                                              ; preds = %124, %122
  %134 = icmp sgt i32 %4, 0
  br i1 %134, label %.lr.ph257.preheader, label %._crit_edge266

.lr.ph257.preheader:                              ; preds = %133
  %wide.trip.count326 = zext nneg i32 %4 to i64
  br label %.lr.ph257

.preheader253:                                    ; preds = %.lr.ph257
  br i1 %134, label %.lr.ph265, label %._crit_edge266

.lr.ph265:                                        ; preds = %.preheader253
  %135 = getelementptr inbounds i8, ptr %1, i64 104
  %136 = load ptr, ptr %135, align 8, !tbaa !20
  br i1 %77, label %.lr.ph265.split, label %.lr.ph265.split.us.preheader

.lr.ph265.split.us.preheader:                     ; preds = %.lr.ph265
  %137 = zext nneg i32 %4 to i64
  %wide.trip.count336 = zext nneg i32 %6 to i64
  %wide.trip.count341 = zext nneg i32 %6 to i64
  %wide.trip.count346 = zext nneg i32 %6 to i64
  %138 = sub i64 %13, %12
  %min.iters.check463 = icmp ult i32 %6, 4
  %ident.check460.not = icmp ne i32 %4, 1
  %or.cond.not520 = or i1 %min.iters.check463, %ident.check460.not
  %diff.check = icmp ult i64 %138, 32
  %or.cond513 = or i1 %or.cond.not520, %diff.check
  %n.vec466 = and i64 %wide.trip.count336, 2147483644
  %cmp.n471 = icmp eq i64 %n.vec466, %wide.trip.count336
  %xtraiter = and i64 %wide.trip.count336, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %139 = add nsw i64 %wide.trip.count336, -1
  %min.iters.check450 = icmp ugt i32 %6, 3
  %ident.check447.not = icmp eq i32 %4, 1
  %or.cond514 = and i1 %min.iters.check450, %ident.check447.not
  %n.vec453 = and i64 %wide.trip.count336, 2147483644
  %cmp.n458 = icmp eq i64 %n.vec453, %wide.trip.count336
  %xtraiter535 = and i64 %wide.trip.count336, 3
  %lcmp.mod536.not = icmp eq i64 %xtraiter535, 0
  %min.iters.check = icmp ugt i32 %6, 3
  %ident.check.not = icmp eq i32 %4, 1
  %or.cond515 = and i1 %min.iters.check, %ident.check.not
  %n.vec = and i64 %wide.trip.count336, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count336
  %xtraiter537 = and i64 %wide.trip.count336, 3
  %lcmp.mod538.not = icmp eq i64 %xtraiter537, 0
  br label %.lr.ph265.split.us

.lr.ph265.split.us:                               ; preds = %.lr.ph265.split.us.preheader, %._crit_edge260.us
  %indvars.iv348 = phi i64 [ 0, %.lr.ph265.split.us.preheader ], [ %indvars.iv.next349, %._crit_edge260.us ]
  %140 = getelementptr inbounds double, ptr %25, i64 %indvars.iv348
  %141 = load double, ptr %140, align 8, !tbaa !15
  %142 = load double, ptr %136, align 8, !tbaa !15
  %143 = fcmp ult double %141, %142
  br i1 %143, label %.preheader252.us, label %._crit_edge266.loopexit.split.loop.exit

.lr.ph259.split.split.us274:                      ; preds = %.lr.ph259.split.split.us274.prol.loopexit, %.lr.ph259.split.split.us274
  %indvars.iv333 = phi i64 [ %indvars.iv.next334.1, %.lr.ph259.split.split.us274 ], [ %indvars.iv333.unr, %.lr.ph259.split.split.us274.prol.loopexit ]
  %144 = mul nuw nsw i64 %indvars.iv333, %137
  %145 = add nuw nsw i64 %144, %indvars.iv348
  %146 = getelementptr inbounds double, ptr %7, i64 %145
  store double 0.000000e+00, ptr %146, align 8, !tbaa !15
  %147 = getelementptr inbounds double, ptr %8, i64 %145
  store double 0.000000e+00, ptr %147, align 8, !tbaa !15
  %indvars.iv.next334 = add nuw nsw i64 %indvars.iv333, 1
  %148 = mul nuw nsw i64 %indvars.iv.next334, %137
  %149 = add nuw nsw i64 %148, %indvars.iv348
  %150 = getelementptr inbounds double, ptr %7, i64 %149
  store double 0.000000e+00, ptr %150, align 8, !tbaa !15
  %151 = getelementptr inbounds double, ptr %8, i64 %149
  store double 0.000000e+00, ptr %151, align 8, !tbaa !15
  %indvars.iv.next334.1 = add nuw nsw i64 %indvars.iv333, 2
  %exitcond337.not.1 = icmp eq i64 %indvars.iv.next334.1, %wide.trip.count336
  br i1 %exitcond337.not.1, label %._crit_edge260.us, label %.lr.ph259.split.split.us274, !llvm.loop !21

.preheader252.us:                                 ; preds = %.lr.ph265.split.us
  %152 = load i16, ptr %31, align 8, !tbaa !5
  %.not240.us = icmp eq i16 %152, 0
  %153 = load i16, ptr %54, align 2, !tbaa !14
  %.not241.us = icmp eq i16 %153, 0
  br i1 %.not240.us, label %.lr.ph259.split.us.us, label %.lr.ph259.split.us271

.lr.ph259.split.us271:                            ; preds = %.preheader252.us
  br i1 %.not241.us, label %.lr.ph259.split.split.us.us.preheader, label %.lr.ph259.split.split.us274.preheader

.lr.ph259.split.split.us274.preheader:            ; preds = %.lr.ph259.split.us271
  br i1 %or.cond513, label %.lr.ph259.split.split.us274.preheader531, label %vector.body468

.lr.ph259.split.split.us274.preheader531:         ; preds = %middle.block461, %.lr.ph259.split.split.us274.preheader
  %indvars.iv333.ph = phi i64 [ 0, %.lr.ph259.split.split.us274.preheader ], [ %n.vec466, %middle.block461 ]
  br i1 %lcmp.mod.not, label %.lr.ph259.split.split.us274.prol.loopexit, label %.lr.ph259.split.split.us274.prol

.lr.ph259.split.split.us274.prol:                 ; preds = %.lr.ph259.split.split.us274.preheader531
  %154 = mul nuw nsw i64 %indvars.iv333.ph, %137
  %155 = add nuw nsw i64 %154, %indvars.iv348
  %156 = getelementptr inbounds double, ptr %7, i64 %155
  store double 0.000000e+00, ptr %156, align 8, !tbaa !15
  %157 = getelementptr inbounds double, ptr %8, i64 %155
  store double 0.000000e+00, ptr %157, align 8, !tbaa !15
  %indvars.iv.next334.prol = or disjoint i64 %indvars.iv333.ph, 1
  br label %.lr.ph259.split.split.us274.prol.loopexit

.lr.ph259.split.split.us274.prol.loopexit:        ; preds = %.lr.ph259.split.split.us274.prol, %.lr.ph259.split.split.us274.preheader531
  %indvars.iv333.unr = phi i64 [ %indvars.iv333.ph, %.lr.ph259.split.split.us274.preheader531 ], [ %indvars.iv.next334.prol, %.lr.ph259.split.split.us274.prol ]
  %158 = icmp eq i64 %indvars.iv333.ph, %139
  br i1 %158, label %._crit_edge260.us, label %.lr.ph259.split.split.us274

vector.body468:                                   ; preds = %.lr.ph259.split.split.us274.preheader, %vector.body468
  %index469 = phi i64 [ %index.next470, %vector.body468 ], [ 0, %.lr.ph259.split.split.us274.preheader ]
  %159 = add nuw nsw i64 %index469, %indvars.iv348
  %160 = getelementptr inbounds double, ptr %7, i64 %159
  %161 = getelementptr inbounds i8, ptr %160, i64 16
  store <2 x double> zeroinitializer, ptr %160, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %161, align 8, !tbaa !15
  %162 = getelementptr inbounds double, ptr %8, i64 %159
  %163 = getelementptr inbounds i8, ptr %162, i64 16
  store <2 x double> zeroinitializer, ptr %162, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %163, align 8, !tbaa !15
  %index.next470 = add nuw i64 %index469, 4
  %164 = icmp eq i64 %index.next470, %n.vec466
  br i1 %164, label %middle.block461, label %vector.body468, !llvm.loop !23

middle.block461:                                  ; preds = %vector.body468
  br i1 %cmp.n471, label %._crit_edge260.us, label %.lr.ph259.split.split.us274.preheader531

.lr.ph259.split.split.us.us.preheader:            ; preds = %.lr.ph259.split.us271
  %invariant.gep = getelementptr inbounds double, ptr %7, i64 %indvars.iv348
  br i1 %or.cond514, label %vector.body455, label %.lr.ph259.split.split.us.us.preheader529

.lr.ph259.split.split.us.us.preheader529:         ; preds = %middle.block448, %.lr.ph259.split.split.us.us.preheader
  %indvars.iv338.ph = phi i64 [ 0, %.lr.ph259.split.split.us.us.preheader ], [ %n.vec453, %middle.block448 ]
  br i1 %lcmp.mod536.not, label %.lr.ph259.split.split.us.us.prol.loopexit, label %.lr.ph259.split.split.us.us.prol

.lr.ph259.split.split.us.us.prol:                 ; preds = %.lr.ph259.split.split.us.us.preheader529, %.lr.ph259.split.split.us.us.prol
  %indvars.iv338.prol = phi i64 [ %indvars.iv.next339.prol, %.lr.ph259.split.split.us.us.prol ], [ %indvars.iv338.ph, %.lr.ph259.split.split.us.us.preheader529 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph259.split.split.us.us.prol ], [ 0, %.lr.ph259.split.split.us.us.preheader529 ]
  %165 = mul nuw nsw i64 %indvars.iv338.prol, %137
  %gep.prol = getelementptr inbounds double, ptr %invariant.gep, i64 %165
  store double 0.000000e+00, ptr %gep.prol, align 8, !tbaa !15
  %indvars.iv.next339.prol = add nuw nsw i64 %indvars.iv338.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter535
  br i1 %prol.iter.cmp.not, label %.lr.ph259.split.split.us.us.prol.loopexit, label %.lr.ph259.split.split.us.us.prol, !llvm.loop !25

.lr.ph259.split.split.us.us.prol.loopexit:        ; preds = %.lr.ph259.split.split.us.us.prol, %.lr.ph259.split.split.us.us.preheader529
  %indvars.iv338.unr = phi i64 [ %indvars.iv338.ph, %.lr.ph259.split.split.us.us.preheader529 ], [ %indvars.iv.next339.prol, %.lr.ph259.split.split.us.us.prol ]
  %166 = sub nsw i64 %indvars.iv338.ph, %wide.trip.count336
  %167 = icmp ugt i64 %166, -4
  br i1 %167, label %._crit_edge260.us, label %.lr.ph259.split.split.us.us

vector.body455:                                   ; preds = %.lr.ph259.split.split.us.us.preheader, %vector.body455
  %index456 = phi i64 [ %index.next457, %vector.body455 ], [ 0, %.lr.ph259.split.split.us.us.preheader ]
  %168 = getelementptr inbounds double, ptr %invariant.gep, i64 %index456
  %169 = getelementptr inbounds i8, ptr %168, i64 16
  store <2 x double> zeroinitializer, ptr %168, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %169, align 8, !tbaa !15
  %index.next457 = add nuw i64 %index456, 4
  %170 = icmp eq i64 %index.next457, %n.vec453
  br i1 %170, label %middle.block448, label %vector.body455, !llvm.loop !27

middle.block448:                                  ; preds = %vector.body455
  br i1 %cmp.n458, label %._crit_edge260.us, label %.lr.ph259.split.split.us.us.preheader529

._crit_edge260.us:                                ; preds = %.lr.ph259.split.split.us274.prol.loopexit, %.lr.ph259.split.split.us274, %.lr.ph259.split.split.us.us.prol.loopexit, %.lr.ph259.split.split.us.us, %.lr.ph259.split.us.split.us276.prol.loopexit, %.lr.ph259.split.us.split.us276, %middle.block461, %middle.block448, %middle.block, %.lr.ph259.split.us.us
  %indvars.iv.next349 = add nuw nsw i64 %indvars.iv348, 1
  %exitcond352.not = icmp eq i64 %indvars.iv.next349, %137
  br i1 %exitcond352.not, label %._crit_edge266, label %.lr.ph265.split.us, !llvm.loop !28

.lr.ph259.split.us.us:                            ; preds = %.preheader252.us
  br i1 %.not241.us, label %._crit_edge260.us, label %.lr.ph259.split.us.split.us276.preheader

.lr.ph259.split.us.split.us276.preheader:         ; preds = %.lr.ph259.split.us.us
  %invariant.gep418 = getelementptr inbounds double, ptr %8, i64 %indvars.iv348
  br i1 %or.cond515, label %vector.body, label %.lr.ph259.split.us.split.us276.preheader528

vector.body:                                      ; preds = %.lr.ph259.split.us.split.us276.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph259.split.us.split.us276.preheader ]
  %171 = getelementptr inbounds double, ptr %invariant.gep418, i64 %index
  %172 = getelementptr inbounds i8, ptr %171, i64 16
  store <2 x double> zeroinitializer, ptr %171, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %172, align 8, !tbaa !15
  %index.next = add nuw i64 %index, 4
  %173 = icmp eq i64 %index.next, %n.vec
  br i1 %173, label %middle.block, label %vector.body, !llvm.loop !29

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge260.us, label %.lr.ph259.split.us.split.us276.preheader528

.lr.ph259.split.us.split.us276.preheader528:      ; preds = %middle.block, %.lr.ph259.split.us.split.us276.preheader
  %indvars.iv343.ph = phi i64 [ 0, %.lr.ph259.split.us.split.us276.preheader ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod538.not, label %.lr.ph259.split.us.split.us276.prol.loopexit, label %.lr.ph259.split.us.split.us276.prol

.lr.ph259.split.us.split.us276.prol:              ; preds = %.lr.ph259.split.us.split.us276.preheader528, %.lr.ph259.split.us.split.us276.prol
  %indvars.iv343.prol = phi i64 [ %indvars.iv.next344.prol, %.lr.ph259.split.us.split.us276.prol ], [ %indvars.iv343.ph, %.lr.ph259.split.us.split.us276.preheader528 ]
  %prol.iter539 = phi i64 [ %prol.iter539.next, %.lr.ph259.split.us.split.us276.prol ], [ 0, %.lr.ph259.split.us.split.us276.preheader528 ]
  %174 = mul nuw nsw i64 %indvars.iv343.prol, %137
  %gep419.prol = getelementptr inbounds double, ptr %invariant.gep418, i64 %174
  store double 0.000000e+00, ptr %gep419.prol, align 8, !tbaa !15
  %indvars.iv.next344.prol = add nuw nsw i64 %indvars.iv343.prol, 1
  %prol.iter539.next = add i64 %prol.iter539, 1
  %prol.iter539.cmp.not = icmp eq i64 %prol.iter539.next, %xtraiter537
  br i1 %prol.iter539.cmp.not, label %.lr.ph259.split.us.split.us276.prol.loopexit, label %.lr.ph259.split.us.split.us276.prol, !llvm.loop !30

.lr.ph259.split.us.split.us276.prol.loopexit:     ; preds = %.lr.ph259.split.us.split.us276.prol, %.lr.ph259.split.us.split.us276.preheader528
  %indvars.iv343.unr = phi i64 [ %indvars.iv343.ph, %.lr.ph259.split.us.split.us276.preheader528 ], [ %indvars.iv.next344.prol, %.lr.ph259.split.us.split.us276.prol ]
  %175 = sub nsw i64 %indvars.iv343.ph, %wide.trip.count336
  %176 = icmp ugt i64 %175, -4
  br i1 %176, label %._crit_edge260.us, label %.lr.ph259.split.us.split.us276

.lr.ph259.split.us.split.us276:                   ; preds = %.lr.ph259.split.us.split.us276.prol.loopexit, %.lr.ph259.split.us.split.us276
  %indvars.iv343 = phi i64 [ %indvars.iv.next344.3, %.lr.ph259.split.us.split.us276 ], [ %indvars.iv343.unr, %.lr.ph259.split.us.split.us276.prol.loopexit ]
  %177 = mul nuw nsw i64 %indvars.iv343, %137
  %gep419 = getelementptr inbounds double, ptr %invariant.gep418, i64 %177
  store double 0.000000e+00, ptr %gep419, align 8, !tbaa !15
  %indvars.iv.next344 = add nuw nsw i64 %indvars.iv343, 1
  %178 = mul nuw nsw i64 %indvars.iv.next344, %137
  %gep419.1 = getelementptr inbounds double, ptr %invariant.gep418, i64 %178
  store double 0.000000e+00, ptr %gep419.1, align 8, !tbaa !15
  %indvars.iv.next344.1 = add nuw nsw i64 %indvars.iv343, 2
  %179 = mul nuw nsw i64 %indvars.iv.next344.1, %137
  %gep419.2 = getelementptr inbounds double, ptr %invariant.gep418, i64 %179
  store double 0.000000e+00, ptr %gep419.2, align 8, !tbaa !15
  %indvars.iv.next344.2 = add nuw nsw i64 %indvars.iv343, 3
  %180 = mul nuw nsw i64 %indvars.iv.next344.2, %137
  %gep419.3 = getelementptr inbounds double, ptr %invariant.gep418, i64 %180
  store double 0.000000e+00, ptr %gep419.3, align 8, !tbaa !15
  %indvars.iv.next344.3 = add nuw nsw i64 %indvars.iv343, 4
  %exitcond347.not.3 = icmp eq i64 %indvars.iv.next344.3, %wide.trip.count346
  br i1 %exitcond347.not.3, label %._crit_edge260.us, label %.lr.ph259.split.us.split.us276, !llvm.loop !31

.lr.ph259.split.split.us.us:                      ; preds = %.lr.ph259.split.split.us.us.prol.loopexit, %.lr.ph259.split.split.us.us
  %indvars.iv338 = phi i64 [ %indvars.iv.next339.3, %.lr.ph259.split.split.us.us ], [ %indvars.iv338.unr, %.lr.ph259.split.split.us.us.prol.loopexit ]
  %181 = mul nuw nsw i64 %indvars.iv338, %137
  %gep = getelementptr inbounds double, ptr %invariant.gep, i64 %181
  store double 0.000000e+00, ptr %gep, align 8, !tbaa !15
  %indvars.iv.next339 = add nuw nsw i64 %indvars.iv338, 1
  %182 = mul nuw nsw i64 %indvars.iv.next339, %137
  %gep.1 = getelementptr inbounds double, ptr %invariant.gep, i64 %182
  store double 0.000000e+00, ptr %gep.1, align 8, !tbaa !15
  %indvars.iv.next339.1 = add nuw nsw i64 %indvars.iv338, 2
  %183 = mul nuw nsw i64 %indvars.iv.next339.1, %137
  %gep.2 = getelementptr inbounds double, ptr %invariant.gep, i64 %183
  store double 0.000000e+00, ptr %gep.2, align 8, !tbaa !15
  %indvars.iv.next339.2 = add nuw nsw i64 %indvars.iv338, 3
  %184 = mul nuw nsw i64 %indvars.iv.next339.2, %137
  %gep.3 = getelementptr inbounds double, ptr %invariant.gep, i64 %184
  store double 0.000000e+00, ptr %gep.3, align 8, !tbaa !15
  %indvars.iv.next339.3 = add nuw nsw i64 %indvars.iv338, 4
  %exitcond342.not.3 = icmp eq i64 %indvars.iv.next339.3, %wide.trip.count341
  br i1 %exitcond342.not.3, label %._crit_edge260.us, label %.lr.ph259.split.split.us.us, !llvm.loop !32

.lr.ph265.split:                                  ; preds = %.lr.ph265
  %185 = load double, ptr %136, align 8, !tbaa !15
  %wide.trip.count331 = zext nneg i32 %4 to i64
  br label %190

.lr.ph257:                                        ; preds = %.lr.ph257.preheader, %.lr.ph257
  %indvars.iv323 = phi i64 [ 0, %.lr.ph257.preheader ], [ %indvars.iv.next324, %.lr.ph257 ]
  %186 = getelementptr inbounds double, ptr %3, i64 %indvars.iv323
  %187 = load double, ptr %186, align 8, !tbaa !15
  %188 = tail call double @log(double noundef %187) #9
  %189 = getelementptr inbounds double, ptr %25, i64 %indvars.iv323
  store double %188, ptr %189, align 8, !tbaa !15
  %indvars.iv.next324 = add nuw nsw i64 %indvars.iv323, 1
  %exitcond327.not = icmp eq i64 %indvars.iv.next324, %wide.trip.count326
  br i1 %exitcond327.not, label %.preheader253, label %.lr.ph257, !llvm.loop !33

190:                                              ; preds = %.lr.ph265.split, %.preheader252
  %indvars.iv328 = phi i64 [ 0, %.lr.ph265.split ], [ %indvars.iv.next329, %.preheader252 ]
  %191 = getelementptr inbounds double, ptr %25, i64 %indvars.iv328
  %192 = load double, ptr %191, align 8, !tbaa !15
  %193 = fcmp ult double %192, %185
  br i1 %193, label %.preheader252, label %._crit_edge266.loopexit414.split.loop.exit

.preheader252:                                    ; preds = %190
  %indvars.iv.next329 = add nuw nsw i64 %indvars.iv328, 1
  %exitcond332.not = icmp eq i64 %indvars.iv.next329, %wide.trip.count331
  br i1 %exitcond332.not, label %._crit_edge266, label %190, !llvm.loop !28

._crit_edge266.loopexit.split.loop.exit:          ; preds = %.lr.ph265.split.us
  %194 = trunc nuw nsw i64 %indvars.iv348 to i32
  br label %._crit_edge266

._crit_edge266.loopexit414.split.loop.exit:       ; preds = %190
  %195 = trunc nuw nsw i64 %indvars.iv328 to i32
  br label %._crit_edge266

._crit_edge266:                                   ; preds = %._crit_edge260.us, %.preheader252, %._crit_edge266.loopexit414.split.loop.exit, %._crit_edge266.loopexit.split.loop.exit, %133, %.preheader253
  %.1.lcssa = phi i32 [ 0, %.preheader253 ], [ 0, %133 ], [ %194, %._crit_edge266.loopexit.split.loop.exit ], [ %195, %._crit_edge266.loopexit414.split.loop.exit ], [ %4, %.preheader252 ], [ %4, %._crit_edge260.us ]
  %196 = getelementptr inbounds i8, ptr %1, i64 92
  %197 = load i32, ptr %196, align 4, !tbaa !13
  %198 = icmp sgt i32 %197, 1
  br i1 %198, label %.preheader251.lr.ph, label %.preheader250

.preheader251.lr.ph:                              ; preds = %._crit_edge266
  %199 = getelementptr inbounds i8, ptr %1, i64 104
  br i1 %77, label %.preheader251.lr.ph.split, label %.preheader251.us.preheader

.preheader251.us.preheader:                       ; preds = %.preheader251.lr.ph
  %wide.trip.count365 = zext nneg i32 %6 to i64
  br label %.preheader251.us

.preheader251.us:                                 ; preds = %.preheader251.us.preheader, %.critedge.us
  %200 = phi i32 [ %197, %.preheader251.us.preheader ], [ %203, %.critedge.us ]
  %indvars.iv372 = phi i64 [ 0, %.preheader251.us.preheader ], [ %indvars.iv.next373, %.critedge.us ]
  %.2289.us = phi i32 [ %.1.lcssa, %.preheader251.us.preheader ], [ %.3.lcssa.us, %.critedge.us ]
  %201 = icmp slt i32 %.2289.us, %4
  br i1 %201, label %.lr.ph283.us, label %.critedge.us

.critedge.us.loopexit.split.loop.exit:            ; preds = %211
  %202 = trunc nsw i64 %indvars.iv367 to i32
  br label %.critedge.us.loopexit

.critedge.us.loopexit:                            ; preds = %._crit_edge281.us.us, %.critedge.us.loopexit.split.loop.exit
  %.3.lcssa.us.ph = phi i32 [ %202, %.critedge.us.loopexit.split.loop.exit ], [ %smax369, %._crit_edge281.us.us ]
  %.pre405 = load i32, ptr %196, align 4, !tbaa !13
  br label %.critedge.us

.critedge.us:                                     ; preds = %.critedge.us.loopexit, %.preheader251.us
  %203 = phi i32 [ %200, %.preheader251.us ], [ %.pre405, %.critedge.us.loopexit ]
  %.3.lcssa.us = phi i32 [ %.2289.us, %.preheader251.us ], [ %.3.lcssa.us.ph, %.critedge.us.loopexit ]
  %indvars.iv.next373 = add nuw nsw i64 %indvars.iv372, 1
  %204 = add nsw i32 %203, -1
  %205 = sext i32 %204 to i64
  %206 = icmp slt i64 %indvars.iv.next373, %205
  br i1 %206, label %.preheader251.us, label %.preheader250, !llvm.loop !34

.lr.ph283.us:                                     ; preds = %.preheader251.us
  %207 = sext i32 %.2289.us to i64
  %208 = add nsw i32 %.2289.us, 1
  %smax369 = tail call i32 @llvm.smax.i32(i32 %4, i32 %208)
  %209 = trunc nuw nsw i64 %indvars.iv372 to i32
  %210 = trunc nuw nsw i64 %indvars.iv372 to i32
  br label %211

211:                                              ; preds = %._crit_edge281.us.us, %.lr.ph283.us
  %indvars.iv367 = phi i64 [ %indvars.iv.next368, %._crit_edge281.us.us ], [ %207, %.lr.ph283.us ]
  %212 = getelementptr inbounds double, ptr %25, i64 %indvars.iv367
  %213 = load double, ptr %212, align 8, !tbaa !15
  %214 = load ptr, ptr %199, align 8, !tbaa !20
  %215 = getelementptr inbounds double, ptr %214, i64 %indvars.iv372
  %216 = getelementptr inbounds i8, ptr %215, i64 8
  %217 = load double, ptr %216, align 8, !tbaa !15
  %218 = fcmp ugt double %213, %217
  br i1 %218, label %.critedge.us.loopexit.split.loop.exit, label %.lr.ph280.us.us

.lr.ph280.us.us:                                  ; preds = %211
  %219 = load double, ptr %215, align 8, !tbaa !15
  %220 = fsub double %217, %219
  %221 = fsub double %213, %219
  %222 = fdiv double %221, %220
  %223 = fsub double 1.000000e+00, %222
  %224 = fmul double %223, %223
  %225 = fneg double %223
  %226 = tail call double @llvm.fmuladd.f64(double %224, double %223, double %225)
  %227 = fmul double %222, %222
  %228 = fneg double %222
  %229 = tail call double @llvm.fmuladd.f64(double %227, double %222, double %228)
  %invariant.gep424 = getelementptr double, ptr %7, i64 %indvars.iv367
  %invariant.gep426 = getelementptr double, ptr %8, i64 %indvars.iv367
  br label %230

230:                                              ; preds = %286, %.lr.ph280.us.us
  %indvars.iv362 = phi i64 [ %indvars.iv.next363, %286 ], [ 0, %.lr.ph280.us.us ]
  %231 = load i16, ptr %31, align 8, !tbaa !5
  %.not246.us.us = icmp eq i16 %231, 0
  br i1 %.not246.us.us, label %258, label %232

232:                                              ; preds = %230
  %233 = load i32, ptr %196, align 4, !tbaa !13
  %234 = trunc nuw nsw i64 %indvars.iv362 to i32
  %235 = mul nsw i32 %233, %234
  %236 = add nsw i32 %235, %209
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds double, ptr %.0224, i64 %237
  %239 = load double, ptr %238, align 8, !tbaa !15
  %240 = add nsw i32 %236, 1
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds double, ptr %.0224, i64 %241
  %243 = load double, ptr %242, align 8, !tbaa !15
  %244 = fmul double %222, %243
  %245 = tail call double @llvm.fmuladd.f64(double %223, double %239, double %244)
  %246 = getelementptr inbounds double, ptr %.0225, i64 %237
  %247 = load double, ptr %246, align 8, !tbaa !15
  %248 = getelementptr inbounds double, ptr %.0225, i64 %241
  %249 = load double, ptr %248, align 8, !tbaa !15
  %250 = fmul double %229, %249
  %251 = tail call double @llvm.fmuladd.f64(double %226, double %247, double %250)
  %252 = fmul double %220, %251
  %253 = fmul double %220, %252
  %254 = fdiv double %253, 6.000000e+00
  %255 = fadd double %245, %254
  %256 = tail call double @exp(double noundef %255) #9
  %257 = mul nsw i64 %indvars.iv362, %23
  %gep425 = getelementptr double, ptr %invariant.gep424, i64 %257
  store double %256, ptr %gep425, align 8, !tbaa !15
  br label %258

258:                                              ; preds = %232, %230
  %259 = load i16, ptr %54, align 2, !tbaa !14
  %.not247.us.us = icmp eq i16 %259, 0
  br i1 %.not247.us.us, label %286, label %260

260:                                              ; preds = %258
  %261 = load i32, ptr %196, align 4, !tbaa !13
  %262 = trunc nuw nsw i64 %indvars.iv362 to i32
  %263 = mul nsw i32 %261, %262
  %264 = add nsw i32 %263, %210
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds double, ptr %.0226, i64 %265
  %267 = load double, ptr %266, align 8, !tbaa !15
  %268 = add nsw i32 %264, 1
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds double, ptr %.0226, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !15
  %272 = fmul double %222, %271
  %273 = tail call double @llvm.fmuladd.f64(double %223, double %267, double %272)
  %274 = getelementptr inbounds double, ptr %.0227, i64 %265
  %275 = load double, ptr %274, align 8, !tbaa !15
  %276 = getelementptr inbounds double, ptr %.0227, i64 %269
  %277 = load double, ptr %276, align 8, !tbaa !15
  %278 = fmul double %229, %277
  %279 = tail call double @llvm.fmuladd.f64(double %226, double %275, double %278)
  %280 = fmul double %220, %279
  %281 = fmul double %220, %280
  %282 = fdiv double %281, 6.000000e+00
  %283 = fadd double %273, %282
  %284 = tail call double @exp(double noundef %283) #9
  %285 = mul nsw i64 %indvars.iv362, %23
  %gep427 = getelementptr double, ptr %invariant.gep426, i64 %285
  store double %284, ptr %gep427, align 8, !tbaa !15
  br label %286

286:                                              ; preds = %260, %258
  %indvars.iv.next363 = add nuw nsw i64 %indvars.iv362, 1
  %exitcond366.not = icmp eq i64 %indvars.iv.next363, %wide.trip.count365
  br i1 %exitcond366.not, label %._crit_edge281.us.us, label %230, !llvm.loop !35

._crit_edge281.us.us:                             ; preds = %286
  %indvars.iv.next368 = add nsw i64 %indvars.iv367, 1
  %exitcond371.not = icmp eq i64 %indvars.iv.next368, %23
  br i1 %exitcond371.not, label %.critedge.us.loopexit, label %211, !llvm.loop !36

.preheader251.lr.ph.split:                        ; preds = %.preheader251.lr.ph
  %smax = add nsw i32 %197, -1
  %wide.trip.count360 = zext nneg i32 %smax to i64
  br label %.preheader251

.preheader251:                                    ; preds = %.preheader251.lr.ph.split, %.critedge
  %indvars.iv357 = phi i64 [ 0, %.preheader251.lr.ph.split ], [ %indvars.iv.next358, %.critedge ]
  %.2289 = phi i32 [ %.1.lcssa, %.preheader251.lr.ph.split ], [ %.3.lcssa, %.critedge ]
  %287 = icmp slt i32 %.2289, %4
  br i1 %287, label %.lr.ph283, label %.critedge

.lr.ph283:                                        ; preds = %.preheader251
  %288 = load ptr, ptr %199, align 8, !tbaa !20
  %289 = getelementptr inbounds double, ptr %288, i64 %indvars.iv357
  %290 = getelementptr inbounds i8, ptr %289, i64 8
  %291 = load double, ptr %290, align 8, !tbaa !15
  %292 = sext i32 %.2289 to i64
  br label %339

.preheader250:                                    ; preds = %.critedge.us, %.critedge, %._crit_edge266
  %.2.lcssa = phi i32 [ %.1.lcssa, %._crit_edge266 ], [ %.3.lcssa, %.critedge ], [ %.3.lcssa.us, %.critedge.us ]
  %293 = icmp sge i32 %.2.lcssa, %4
  %brmerge = or i1 %293, %77
  br i1 %brmerge, label %._crit_edge301, label %.preheader.lr.ph.split.us

.preheader.lr.ph.split.us:                        ; preds = %.preheader250
  %294 = load i16, ptr %31, align 8, !tbaa !5
  %.not244.us = icmp eq i16 %294, 0
  %295 = load i16, ptr %54, align 2, !tbaa !14
  %.not245.us = icmp eq i16 %295, 0
  br i1 %.not244.us, label %.preheader.lr.ph.split.us.split.us, label %.preheader.lr.ph.split.us.split

.preheader.lr.ph.split.us.split.us:               ; preds = %.preheader.lr.ph.split.us
  br i1 %.not245.us, label %.thread, label %.preheader.us.us.preheader

.thread:                                          ; preds = %.preheader.lr.ph.split.us.split.us
  tail call void @free(ptr noundef %25) #9
  br label %348

.preheader.us.us.preheader:                       ; preds = %.preheader.lr.ph.split.us.split.us
  %296 = sext i32 %.2.lcssa to i64
  %wide.trip.count398 = zext nneg i32 %6 to i64
  %min.iters.check504 = icmp ugt i32 %6, 3
  %ident.check501.not = icmp eq i32 %4, 1
  %or.cond516 = and i1 %min.iters.check504, %ident.check501.not
  %n.vec507 = and i64 %wide.trip.count398, 2147483644
  %cmp.n512 = icmp eq i64 %n.vec507, %wide.trip.count398
  %xtraiter546 = and i64 %wide.trip.count398, 3
  %lcmp.mod547.not = icmp eq i64 %xtraiter546, 0
  br label %.preheader.us.us

.preheader.us.us:                                 ; preds = %.preheader.us.us.preheader, %._crit_edge296.split.us.split.us306.us
  %indvars.iv400 = phi i64 [ %296, %.preheader.us.us.preheader ], [ %indvars.iv.next401, %._crit_edge296.split.us.split.us306.us ]
  %invariant.gep432 = getelementptr double, ptr %8, i64 %indvars.iv400
  br i1 %or.cond516, label %vector.body509, label %scalar.ph503.preheader

vector.body509:                                   ; preds = %.preheader.us.us, %vector.body509
  %index510 = phi i64 [ %index.next511, %vector.body509 ], [ 0, %.preheader.us.us ]
  %297 = getelementptr double, ptr %invariant.gep432, i64 %index510
  %298 = getelementptr i8, ptr %297, i64 16
  store <2 x double> zeroinitializer, ptr %297, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %298, align 8, !tbaa !15
  %index.next511 = add nuw i64 %index510, 4
  %299 = icmp eq i64 %index.next511, %n.vec507
  br i1 %299, label %middle.block502, label %vector.body509, !llvm.loop !37

middle.block502:                                  ; preds = %vector.body509
  br i1 %cmp.n512, label %._crit_edge296.split.us.split.us306.us, label %scalar.ph503.preheader

scalar.ph503.preheader:                           ; preds = %middle.block502, %.preheader.us.us
  %indvars.iv395.ph = phi i64 [ 0, %.preheader.us.us ], [ %n.vec507, %middle.block502 ]
  br i1 %lcmp.mod547.not, label %scalar.ph503.prol.loopexit, label %scalar.ph503.prol

scalar.ph503.prol:                                ; preds = %scalar.ph503.preheader, %scalar.ph503.prol
  %indvars.iv395.prol = phi i64 [ %indvars.iv.next396.prol, %scalar.ph503.prol ], [ %indvars.iv395.ph, %scalar.ph503.preheader ]
  %prol.iter548 = phi i64 [ %prol.iter548.next, %scalar.ph503.prol ], [ 0, %scalar.ph503.preheader ]
  %300 = mul nsw i64 %indvars.iv395.prol, %23
  %gep433.prol = getelementptr double, ptr %invariant.gep432, i64 %300
  store double 0.000000e+00, ptr %gep433.prol, align 8, !tbaa !15
  %indvars.iv.next396.prol = add nuw nsw i64 %indvars.iv395.prol, 1
  %prol.iter548.next = add i64 %prol.iter548, 1
  %prol.iter548.cmp.not = icmp eq i64 %prol.iter548.next, %xtraiter546
  br i1 %prol.iter548.cmp.not, label %scalar.ph503.prol.loopexit, label %scalar.ph503.prol, !llvm.loop !38

scalar.ph503.prol.loopexit:                       ; preds = %scalar.ph503.prol, %scalar.ph503.preheader
  %indvars.iv395.unr = phi i64 [ %indvars.iv395.ph, %scalar.ph503.preheader ], [ %indvars.iv.next396.prol, %scalar.ph503.prol ]
  %301 = sub nsw i64 %indvars.iv395.ph, %wide.trip.count398
  %302 = icmp ugt i64 %301, -4
  br i1 %302, label %._crit_edge296.split.us.split.us306.us, label %scalar.ph503

scalar.ph503:                                     ; preds = %scalar.ph503.prol.loopexit, %scalar.ph503
  %indvars.iv395 = phi i64 [ %indvars.iv.next396.3, %scalar.ph503 ], [ %indvars.iv395.unr, %scalar.ph503.prol.loopexit ]
  %303 = mul nsw i64 %indvars.iv395, %23
  %gep433 = getelementptr double, ptr %invariant.gep432, i64 %303
  store double 0.000000e+00, ptr %gep433, align 8, !tbaa !15
  %indvars.iv.next396 = add nuw nsw i64 %indvars.iv395, 1
  %304 = mul nsw i64 %indvars.iv.next396, %23
  %gep433.1 = getelementptr double, ptr %invariant.gep432, i64 %304
  store double 0.000000e+00, ptr %gep433.1, align 8, !tbaa !15
  %indvars.iv.next396.1 = add nuw nsw i64 %indvars.iv395, 2
  %305 = mul nsw i64 %indvars.iv.next396.1, %23
  %gep433.2 = getelementptr double, ptr %invariant.gep432, i64 %305
  store double 0.000000e+00, ptr %gep433.2, align 8, !tbaa !15
  %indvars.iv.next396.2 = add nuw nsw i64 %indvars.iv395, 3
  %306 = mul nsw i64 %indvars.iv.next396.2, %23
  %gep433.3 = getelementptr double, ptr %invariant.gep432, i64 %306
  store double 0.000000e+00, ptr %gep433.3, align 8, !tbaa !15
  %indvars.iv.next396.3 = add nuw nsw i64 %indvars.iv395, 4
  %exitcond399.not.3 = icmp eq i64 %indvars.iv.next396.3, %wide.trip.count398
  br i1 %exitcond399.not.3, label %._crit_edge296.split.us.split.us306.us, label %scalar.ph503, !llvm.loop !39

._crit_edge296.split.us.split.us306.us:           ; preds = %scalar.ph503.prol.loopexit, %scalar.ph503, %middle.block502
  %indvars.iv.next401 = add nsw i64 %indvars.iv400, 1
  %exitcond404.not = icmp eq i64 %indvars.iv.next401, %23
  br i1 %exitcond404.not, label %._crit_edge301, label %.preheader.us.us, !llvm.loop !40

.preheader.lr.ph.split.us.split:                  ; preds = %.preheader.lr.ph.split.us
  %307 = sext i32 %.2.lcssa to i64
  %wide.trip.count388 = zext nneg i32 %6 to i64
  br i1 %.not245.us, label %.preheader.us.us310.preheader, label %.preheader.us.preheader

.preheader.us.us310.preheader:                    ; preds = %.preheader.lr.ph.split.us.split
  %min.iters.check491 = icmp ugt i32 %6, 3
  %ident.check488.not = icmp eq i32 %4, 1
  %or.cond517 = and i1 %min.iters.check491, %ident.check488.not
  %n.vec494 = and i64 %wide.trip.count388, 2147483644
  %cmp.n499 = icmp eq i64 %n.vec494, %wide.trip.count388
  %xtraiter543 = and i64 %wide.trip.count388, 3
  %lcmp.mod544.not = icmp eq i64 %xtraiter543, 0
  br label %.preheader.us.us310

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph.split.us.split
  %308 = sub i64 %11, %10
  %min.iters.check478 = icmp ult i32 %6, 4
  %ident.check473.not = icmp ne i32 %4, 1
  %or.cond518.not521 = or i1 %min.iters.check478, %ident.check473.not
  %diff.check475 = icmp ult i64 %308, 32
  %or.cond519 = or i1 %or.cond518.not521, %diff.check475
  %n.vec481 = and i64 %wide.trip.count388, 2147483644
  %cmp.n486 = icmp eq i64 %n.vec481, %wide.trip.count388
  %xtraiter540 = and i64 %wide.trip.count388, 1
  %lcmp.mod541.not = icmp eq i64 %xtraiter540, 0
  %309 = add nsw i64 %wide.trip.count388, -1
  br label %.preheader.us

.preheader.us.us310:                              ; preds = %.preheader.us.us310.preheader, %._crit_edge296.split.split.us.us.us
  %indvars.iv390 = phi i64 [ %indvars.iv.next391, %._crit_edge296.split.split.us.us.us ], [ %307, %.preheader.us.us310.preheader ]
  %invariant.gep430 = getelementptr double, ptr %7, i64 %indvars.iv390
  br i1 %or.cond517, label %vector.body496, label %scalar.ph490.preheader

vector.body496:                                   ; preds = %.preheader.us.us310, %vector.body496
  %index497 = phi i64 [ %index.next498, %vector.body496 ], [ 0, %.preheader.us.us310 ]
  %310 = getelementptr double, ptr %invariant.gep430, i64 %index497
  %311 = getelementptr i8, ptr %310, i64 16
  store <2 x double> zeroinitializer, ptr %310, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %311, align 8, !tbaa !15
  %index.next498 = add nuw i64 %index497, 4
  %312 = icmp eq i64 %index.next498, %n.vec494
  br i1 %312, label %middle.block489, label %vector.body496, !llvm.loop !41

middle.block489:                                  ; preds = %vector.body496
  br i1 %cmp.n499, label %._crit_edge296.split.split.us.us.us, label %scalar.ph490.preheader

scalar.ph490.preheader:                           ; preds = %middle.block489, %.preheader.us.us310
  %indvars.iv385.ph = phi i64 [ 0, %.preheader.us.us310 ], [ %n.vec494, %middle.block489 ]
  br i1 %lcmp.mod544.not, label %scalar.ph490.prol.loopexit, label %scalar.ph490.prol

scalar.ph490.prol:                                ; preds = %scalar.ph490.preheader, %scalar.ph490.prol
  %indvars.iv385.prol = phi i64 [ %indvars.iv.next386.prol, %scalar.ph490.prol ], [ %indvars.iv385.ph, %scalar.ph490.preheader ]
  %prol.iter545 = phi i64 [ %prol.iter545.next, %scalar.ph490.prol ], [ 0, %scalar.ph490.preheader ]
  %313 = mul nsw i64 %indvars.iv385.prol, %23
  %gep431.prol = getelementptr double, ptr %invariant.gep430, i64 %313
  store double 0.000000e+00, ptr %gep431.prol, align 8, !tbaa !15
  %indvars.iv.next386.prol = add nuw nsw i64 %indvars.iv385.prol, 1
  %prol.iter545.next = add i64 %prol.iter545, 1
  %prol.iter545.cmp.not = icmp eq i64 %prol.iter545.next, %xtraiter543
  br i1 %prol.iter545.cmp.not, label %scalar.ph490.prol.loopexit, label %scalar.ph490.prol, !llvm.loop !42

scalar.ph490.prol.loopexit:                       ; preds = %scalar.ph490.prol, %scalar.ph490.preheader
  %indvars.iv385.unr = phi i64 [ %indvars.iv385.ph, %scalar.ph490.preheader ], [ %indvars.iv.next386.prol, %scalar.ph490.prol ]
  %314 = sub nsw i64 %indvars.iv385.ph, %wide.trip.count388
  %315 = icmp ugt i64 %314, -4
  br i1 %315, label %._crit_edge296.split.split.us.us.us, label %scalar.ph490

scalar.ph490:                                     ; preds = %scalar.ph490.prol.loopexit, %scalar.ph490
  %indvars.iv385 = phi i64 [ %indvars.iv.next386.3, %scalar.ph490 ], [ %indvars.iv385.unr, %scalar.ph490.prol.loopexit ]
  %316 = mul nsw i64 %indvars.iv385, %23
  %gep431 = getelementptr double, ptr %invariant.gep430, i64 %316
  store double 0.000000e+00, ptr %gep431, align 8, !tbaa !15
  %indvars.iv.next386 = add nuw nsw i64 %indvars.iv385, 1
  %317 = mul nsw i64 %indvars.iv.next386, %23
  %gep431.1 = getelementptr double, ptr %invariant.gep430, i64 %317
  store double 0.000000e+00, ptr %gep431.1, align 8, !tbaa !15
  %indvars.iv.next386.1 = add nuw nsw i64 %indvars.iv385, 2
  %318 = mul nsw i64 %indvars.iv.next386.1, %23
  %gep431.2 = getelementptr double, ptr %invariant.gep430, i64 %318
  store double 0.000000e+00, ptr %gep431.2, align 8, !tbaa !15
  %indvars.iv.next386.2 = add nuw nsw i64 %indvars.iv385, 3
  %319 = mul nsw i64 %indvars.iv.next386.2, %23
  %gep431.3 = getelementptr double, ptr %invariant.gep430, i64 %319
  store double 0.000000e+00, ptr %gep431.3, align 8, !tbaa !15
  %indvars.iv.next386.3 = add nuw nsw i64 %indvars.iv385, 4
  %exitcond389.not.3 = icmp eq i64 %indvars.iv.next386.3, %wide.trip.count388
  br i1 %exitcond389.not.3, label %._crit_edge296.split.split.us.us.us, label %scalar.ph490, !llvm.loop !43

._crit_edge296.split.split.us.us.us:              ; preds = %scalar.ph490.prol.loopexit, %scalar.ph490, %middle.block489
  %indvars.iv.next391 = add nsw i64 %indvars.iv390, 1
  %exitcond394.not = icmp eq i64 %indvars.iv.next391, %23
  br i1 %exitcond394.not, label %._crit_edge301, label %.preheader.us.us310, !llvm.loop !40

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge296.split.split.us303
  %indvars.iv380 = phi i64 [ %indvars.iv.next381, %._crit_edge296.split.split.us303 ], [ %307, %.preheader.us.preheader ]
  br i1 %or.cond519, label %scalar.ph477.preheader, label %vector.body483

vector.body483:                                   ; preds = %.preheader.us, %vector.body483
  %index484 = phi i64 [ %index.next485, %vector.body483 ], [ 0, %.preheader.us ]
  %320 = add nsw i64 %index484, %indvars.iv380
  %321 = getelementptr inbounds double, ptr %7, i64 %320
  %322 = getelementptr inbounds i8, ptr %321, i64 16
  store <2 x double> zeroinitializer, ptr %321, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %322, align 8, !tbaa !15
  %323 = getelementptr inbounds double, ptr %8, i64 %320
  %324 = getelementptr inbounds i8, ptr %323, i64 16
  store <2 x double> zeroinitializer, ptr %323, align 8, !tbaa !15
  store <2 x double> zeroinitializer, ptr %324, align 8, !tbaa !15
  %index.next485 = add nuw i64 %index484, 4
  %325 = icmp eq i64 %index.next485, %n.vec481
  br i1 %325, label %middle.block476, label %vector.body483, !llvm.loop !44

middle.block476:                                  ; preds = %vector.body483
  br i1 %cmp.n486, label %._crit_edge296.split.split.us303, label %scalar.ph477.preheader

scalar.ph477.preheader:                           ; preds = %middle.block476, %.preheader.us
  %indvars.iv375.ph = phi i64 [ 0, %.preheader.us ], [ %n.vec481, %middle.block476 ]
  br i1 %lcmp.mod541.not, label %scalar.ph477.prol.loopexit, label %scalar.ph477.prol

scalar.ph477.prol:                                ; preds = %scalar.ph477.preheader
  %326 = mul nsw i64 %indvars.iv375.ph, %23
  %327 = add nsw i64 %326, %indvars.iv380
  %328 = getelementptr inbounds double, ptr %7, i64 %327
  store double 0.000000e+00, ptr %328, align 8, !tbaa !15
  %329 = getelementptr inbounds double, ptr %8, i64 %327
  store double 0.000000e+00, ptr %329, align 8, !tbaa !15
  %indvars.iv.next376.prol = or disjoint i64 %indvars.iv375.ph, 1
  br label %scalar.ph477.prol.loopexit

scalar.ph477.prol.loopexit:                       ; preds = %scalar.ph477.prol, %scalar.ph477.preheader
  %indvars.iv375.unr = phi i64 [ %indvars.iv375.ph, %scalar.ph477.preheader ], [ %indvars.iv.next376.prol, %scalar.ph477.prol ]
  %330 = icmp eq i64 %indvars.iv375.ph, %309
  br i1 %330, label %._crit_edge296.split.split.us303, label %scalar.ph477

scalar.ph477:                                     ; preds = %scalar.ph477.prol.loopexit, %scalar.ph477
  %indvars.iv375 = phi i64 [ %indvars.iv.next376.1, %scalar.ph477 ], [ %indvars.iv375.unr, %scalar.ph477.prol.loopexit ]
  %331 = mul nsw i64 %indvars.iv375, %23
  %332 = add nsw i64 %331, %indvars.iv380
  %333 = getelementptr inbounds double, ptr %7, i64 %332
  store double 0.000000e+00, ptr %333, align 8, !tbaa !15
  %334 = getelementptr inbounds double, ptr %8, i64 %332
  store double 0.000000e+00, ptr %334, align 8, !tbaa !15
  %indvars.iv.next376 = add nuw nsw i64 %indvars.iv375, 1
  %335 = mul nsw i64 %indvars.iv.next376, %23
  %336 = add nsw i64 %335, %indvars.iv380
  %337 = getelementptr inbounds double, ptr %7, i64 %336
  store double 0.000000e+00, ptr %337, align 8, !tbaa !15
  %338 = getelementptr inbounds double, ptr %8, i64 %336
  store double 0.000000e+00, ptr %338, align 8, !tbaa !15
  %indvars.iv.next376.1 = add nuw nsw i64 %indvars.iv375, 2
  %exitcond379.not.1 = icmp eq i64 %indvars.iv.next376.1, %wide.trip.count388
  br i1 %exitcond379.not.1, label %._crit_edge296.split.split.us303, label %scalar.ph477, !llvm.loop !45

._crit_edge296.split.split.us303:                 ; preds = %scalar.ph477.prol.loopexit, %scalar.ph477, %middle.block476
  %indvars.iv.next381 = add nsw i64 %indvars.iv380, 1
  %exitcond384.not = icmp eq i64 %indvars.iv.next381, %23
  br i1 %exitcond384.not, label %._crit_edge301, label %.preheader.us, !llvm.loop !40

339:                                              ; preds = %.lr.ph283, %343
  %indvars.iv353 = phi i64 [ %292, %.lr.ph283 ], [ %indvars.iv.next354, %343 ]
  %340 = getelementptr inbounds double, ptr %25, i64 %indvars.iv353
  %341 = load double, ptr %340, align 8, !tbaa !15
  %342 = fcmp ugt double %341, %291
  br i1 %342, label %.critedge.loopexit.split.loop.exit, label %343

343:                                              ; preds = %339
  %indvars.iv.next354 = add nsw i64 %indvars.iv353, 1
  %exitcond356.not = icmp eq i64 %indvars.iv.next354, %23
  br i1 %exitcond356.not, label %.critedge, label %339, !llvm.loop !36

.critedge.loopexit.split.loop.exit:               ; preds = %339
  %344 = trunc nsw i64 %indvars.iv353 to i32
  br label %.critedge

.critedge:                                        ; preds = %343, %.critedge.loopexit.split.loop.exit, %.preheader251
  %.3.lcssa = phi i32 [ %.2289, %.preheader251 ], [ %344, %.critedge.loopexit.split.loop.exit ], [ %4, %343 ]
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %exitcond361.not = icmp eq i64 %indvars.iv.next358, %wide.trip.count360
  br i1 %exitcond361.not, label %.preheader250, label %.preheader251, !llvm.loop !34

._crit_edge301:                                   ; preds = %._crit_edge296.split.split.us303, %._crit_edge296.split.split.us.us.us, %._crit_edge296.split.us.split.us306.us, %.preheader250
  %.pr = load i16, ptr %31, align 8, !tbaa !5
  tail call void @free(ptr noundef %25) #9
  %.not242 = icmp eq i16 %.pr, 0
  br i1 %.not242, label %346, label %345

345:                                              ; preds = %._crit_edge301
  tail call void @free(ptr noundef %.0224) #9
  tail call void @free(ptr noundef %.0225) #9
  br label %346

346:                                              ; preds = %345, %._crit_edge301
  %.pr407 = load i16, ptr %54, align 2, !tbaa !14
  %.not243 = icmp eq i16 %.pr407, 0
  br i1 %.not243, label %348, label %347

347:                                              ; preds = %346
  tail call void @free(ptr noundef %.0226) #9
  tail call void @free(ptr noundef %.0227) #9
  br label %348

348:                                              ; preds = %.thread, %346, %347, %132, %121, %109, %94, %72, %65, %49, %42, %27
  %.0 = phi i32 [ 1, %27 ], [ 1, %42 ], [ 1, %49 ], [ 1, %65 ], [ 1, %72 ], [ 1, %94 ], [ 1, %109 ], [ 1, %121 ], [ 1, %132 ], [ 0, %347 ], [ 0, %346 ], [ 0, %.thread ]
  ret i32 %.0
}

declare i32 @array_spline_table_columns2(ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i16 noundef signext, ptr noundef) local_unnamed_addr #2

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { 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 #6 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !11, i64 64}
!6 = !{!"nonlinear", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !11, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !12, i64 56, !11, i64 64, !11, i64 66, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !11, i64 88, !7, i64 92, !12, i64 96, !12, i64 104, !12, i64 112, !7, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !7, i64 184, !7, i64 188, !12, i64 192, !12, i64 200, !12, i64 208, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !12, i64 240, !12, i64 248, !12, i64 256, !11, i64 264, !8, i64 266}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!6, !7, i64 92}
!14 = !{!6, !11, i64 66}
!15 = !{!10, !10, i64 0}
!16 = !{!6, !7, i64 68}
!17 = !{!6, !7, i64 72}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!6, !12, i64 104}
!21 = distinct !{!21, !19, !22}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = distinct !{!23, !19, !22, !24}
!24 = !{!"llvm.loop.unroll.runtime.disable"}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!27 = distinct !{!27, !19, !22, !24}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19, !22, !24}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !19, !22}
!32 = distinct !{!32, !19, !22}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19, !22, !24}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !19, !22}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19, !22, !24}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !19, !22}
!44 = distinct !{!44, !19, !22, !24}
!45 = distinct !{!45, !19, !22}


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