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

; 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.jacobian = type { ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr }
%struct.sparse_matrix = type { i32, i32, i32, ptr, ptr, ptr }
%struct.numjac_workspace = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [94 x i8], align 1
@__func__.numjac = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @numjac(ptr noundef %0, double noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, double noundef %6, i32 noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10) #3 {
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca double, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca [2048 x i8], align 16
  %53 = alloca i32, align 4
  %54 = alloca [2048 x i8], align 16
  store ptr %0, ptr %13, align 8, !tbaa !5
  store double %1, ptr %14, align 8, !tbaa !9
  store ptr %2, ptr %15, align 8, !tbaa !5
  store ptr %3, ptr %16, align 8, !tbaa !5
  store ptr %4, ptr %17, align 8, !tbaa !5
  store ptr %5, ptr %18, align 8, !tbaa !5
  store double %6, ptr %19, align 8, !tbaa !9
  store i32 %7, ptr %20, align 4, !tbaa !11
  store ptr %8, ptr %21, align 8, !tbaa !5
  store ptr %9, ptr %22, align 8, !tbaa !5
  store ptr %10, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store double 0x3C9CD2B297D889BC, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %55 = load double, ptr %24, align 8, !tbaa !9
  %56 = call double @pow(double noundef %55, double noundef 8.750000e-01) #5
  store double %56, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %57 = load double, ptr %24, align 8, !tbaa !9
  %58 = call double @pow(double noundef %57, double noundef 7.500000e-01) #5
  store double %58, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %59 = load double, ptr %24, align 8, !tbaa !9
  %60 = call double @pow(double noundef %59, double noundef 2.500000e-01) #5
  store double %60, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %61 = load double, ptr %24, align 8, !tbaa !9
  %62 = call double @pow(double noundef %61, double noundef 7.800000e-01) #5
  store double %62, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  store double 1.000000e-01, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  store double 0.000000e+00, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  store ptr null, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  store ptr null, ptr %51, align 8, !tbaa !5
  %63 = load ptr, ptr %17, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.jacobian, ptr %63, i32 0, i32 0
  %65 = load ptr, ptr %64, align 8, !tbaa !13
  store ptr %65, ptr %48, align 8, !tbaa !5
  %66 = load ptr, ptr %17, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.jacobian, ptr %66, i32 0, i32 1
  %68 = load ptr, ptr %67, align 8, !tbaa !15
  store ptr %68, ptr %49, align 8, !tbaa !5
  %69 = load ptr, ptr %17, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.jacobian, ptr %69, i32 0, i32 5
  %71 = load i32, ptr %70, align 8, !tbaa !16
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %84

73:                                               ; preds = %11
  %74 = load ptr, ptr %17, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.jacobian, ptr %74, i32 0, i32 17
  %76 = load ptr, ptr %75, align 8, !tbaa !17
  %77 = getelementptr inbounds %struct.sparse_matrix, ptr %76, i32 0, i32 3
  %78 = load ptr, ptr %77, align 8, !tbaa !18
  store ptr %78, ptr %50, align 8, !tbaa !5
  %79 = load ptr, ptr %17, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.jacobian, ptr %79, i32 0, i32 17
  %81 = load ptr, ptr %80, align 8, !tbaa !17
  %82 = getelementptr inbounds %struct.sparse_matrix, ptr %81, i32 0, i32 4
  %83 = load ptr, ptr %82, align 8, !tbaa !20
  store ptr %83, ptr %51, align 8, !tbaa !5
  br label %84

84:                                               ; preds = %73, %11
  %85 = load ptr, ptr %17, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.jacobian, ptr %85, i32 0, i32 12
  store i32 1, ptr %86, align 4, !tbaa !21
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %87

87:                                               ; preds = %147, %84
  %88 = load i32, ptr %37, align 4, !tbaa !11
  %89 = load i32, ptr %20, align 4, !tbaa !11
  %90 = icmp sle i32 %88, %89
  br i1 %90, label %91, label %150

91:                                               ; preds = %87
  %92 = load ptr, ptr %15, align 8, !tbaa !5
  %93 = load i32, ptr %37, align 4, !tbaa !11
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds double, ptr %92, i64 %94
  %96 = load double, ptr %95, align 8, !tbaa !9
  %97 = call double @llvm.fabs.f64(double %96)
  %98 = load double, ptr %19, align 8, !tbaa !9
  %99 = fcmp olt double %97, %98
  br i1 %99, label %100, label %102

100:                                              ; preds = %91
  %101 = load double, ptr %19, align 8, !tbaa !9
  br label %109

102:                                              ; preds = %91
  %103 = load ptr, ptr %15, align 8, !tbaa !5
  %104 = load i32, ptr %37, align 4, !tbaa !11
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds double, ptr %103, i64 %105
  %107 = load double, ptr %106, align 8, !tbaa !9
  %108 = call double @llvm.fabs.f64(double %107)
  br label %109

109:                                              ; preds = %102, %100
  %110 = phi double [ %101, %100 ], [ %108, %102 ]
  %111 = load ptr, ptr %18, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.numjac_workspace, ptr %111, i32 0, i32 0
  %113 = load ptr, ptr %112, align 8, !tbaa !22
  %114 = load i32, ptr %37, align 4, !tbaa !11
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds double, ptr %113, i64 %115
  store double %110, ptr %116, align 8, !tbaa !9
  %117 = load ptr, ptr %15, align 8, !tbaa !5
  %118 = load i32, ptr %37, align 4, !tbaa !11
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds double, ptr %117, i64 %119
  %121 = load double, ptr %120, align 8, !tbaa !9
  %122 = load ptr, ptr %49, align 8, !tbaa !5
  %123 = load i32, ptr %37, align 4, !tbaa !11
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds double, ptr %122, i64 %124
  %126 = load double, ptr %125, align 8, !tbaa !9
  %127 = load ptr, ptr %18, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.numjac_workspace, ptr %127, i32 0, i32 0
  %129 = load ptr, ptr %128, align 8, !tbaa !22
  %130 = load i32, ptr %37, align 4, !tbaa !11
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds double, ptr %129, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !9
  %134 = call double @llvm.fmuladd.f64(double %126, double %133, double %121)
  %135 = load ptr, ptr %15, align 8, !tbaa !5
  %136 = load i32, ptr %37, align 4, !tbaa !11
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds double, ptr %135, i64 %137
  %139 = load double, ptr %138, align 8, !tbaa !9
  %140 = fsub double %134, %139
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.numjac_workspace, ptr %141, i32 0, i32 1
  %143 = load ptr, ptr %142, align 8, !tbaa !24
  %144 = load i32, ptr %37, align 4, !tbaa !11
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds double, ptr %143, i64 %145
  store double %140, ptr %146, align 8, !tbaa !9
  br label %147

147:                                              ; preds = %109
  %148 = load i32, ptr %37, align 4, !tbaa !11
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %37, align 4, !tbaa !11
  br label %87, !llvm.loop !25

150:                                              ; preds = %87
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %151

151:                                              ; preds = %248, %150
  %152 = load i32, ptr %37, align 4, !tbaa !11
  %153 = load i32, ptr %20, align 4, !tbaa !11
  %154 = icmp sle i32 %152, %153
  br i1 %154, label %155, label %251

155:                                              ; preds = %151
  %156 = load ptr, ptr %18, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.numjac_workspace, ptr %156, i32 0, i32 1
  %158 = load ptr, ptr %157, align 8, !tbaa !24
  %159 = load i32, ptr %37, align 4, !tbaa !11
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds double, ptr %158, i64 %160
  %162 = load double, ptr %161, align 8, !tbaa !9
  %163 = fcmp oeq double %162, 0.000000e+00
  br i1 %163, label %164, label %247

164:                                              ; preds = %155
  br label %165

165:                                              ; preds = %245, %164
  %166 = load ptr, ptr %49, align 8, !tbaa !5
  %167 = load i32, ptr %37, align 4, !tbaa !11
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds double, ptr %166, i64 %168
  %170 = load double, ptr %169, align 8, !tbaa !9
  %171 = load double, ptr %29, align 8, !tbaa !9
  %172 = fcmp olt double %170, %171
  br i1 %172, label %173, label %237

173:                                              ; preds = %165
  %174 = load ptr, ptr %49, align 8, !tbaa !5
  %175 = load i32, ptr %37, align 4, !tbaa !11
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds double, ptr %174, i64 %176
  %178 = load double, ptr %177, align 8, !tbaa !9
  %179 = fmul double 1.000000e+02, %178
  %180 = load double, ptr %29, align 8, !tbaa !9
  %181 = fcmp olt double %179, %180
  br i1 %181, label %182, label %189

182:                                              ; preds = %173
  %183 = load ptr, ptr %49, align 8, !tbaa !5
  %184 = load i32, ptr %37, align 4, !tbaa !11
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %183, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !9
  %188 = fmul double 1.000000e+02, %187
  br label %191

189:                                              ; preds = %173
  %190 = load double, ptr %29, align 8, !tbaa !9
  br label %191

191:                                              ; preds = %189, %182
  %192 = phi double [ %188, %182 ], [ %190, %189 ]
  %193 = load ptr, ptr %49, align 8, !tbaa !5
  %194 = load i32, ptr %37, align 4, !tbaa !11
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds double, ptr %193, i64 %195
  store double %192, ptr %196, align 8, !tbaa !9
  %197 = load ptr, ptr %15, align 8, !tbaa !5
  %198 = load i32, ptr %37, align 4, !tbaa !11
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds double, ptr %197, i64 %199
  %201 = load double, ptr %200, align 8, !tbaa !9
  %202 = load ptr, ptr %49, align 8, !tbaa !5
  %203 = load i32, ptr %37, align 4, !tbaa !11
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds double, ptr %202, i64 %204
  %206 = load double, ptr %205, align 8, !tbaa !9
  %207 = load ptr, ptr %18, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.numjac_workspace, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !22
  %210 = load i32, ptr %37, align 4, !tbaa !11
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds double, ptr %209, i64 %211
  %213 = load double, ptr %212, align 8, !tbaa !9
  %214 = call double @llvm.fmuladd.f64(double %206, double %213, double %201)
  %215 = load ptr, ptr %15, align 8, !tbaa !5
  %216 = load i32, ptr %37, align 4, !tbaa !11
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds double, ptr %215, i64 %217
  %219 = load double, ptr %218, align 8, !tbaa !9
  %220 = fsub double %214, %219
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.numjac_workspace, ptr %221, i32 0, i32 1
  %223 = load ptr, ptr %222, align 8, !tbaa !24
  %224 = load i32, ptr %37, align 4, !tbaa !11
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds double, ptr %223, i64 %225
  store double %220, ptr %226, align 8, !tbaa !9
  %227 = load ptr, ptr %18, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.numjac_workspace, ptr %227, i32 0, i32 1
  %229 = load ptr, ptr %228, align 8, !tbaa !24
  %230 = load i32, ptr %37, align 4, !tbaa !11
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds double, ptr %229, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !9
  %234 = fcmp oeq double %233, 0.000000e+00
  br i1 %234, label %235, label %236

235:                                              ; preds = %191
  br label %246

236:                                              ; preds = %191
  br label %245

237:                                              ; preds = %165
  %238 = load double, ptr %19, align 8, !tbaa !9
  %239 = load ptr, ptr %18, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.numjac_workspace, ptr %239, i32 0, i32 1
  %241 = load ptr, ptr %240, align 8, !tbaa !24
  %242 = load i32, ptr %37, align 4, !tbaa !11
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds double, ptr %241, i64 %243
  store double %238, ptr %244, align 8, !tbaa !9
  br label %246

245:                                              ; preds = %236
  br label %165

246:                                              ; preds = %237, %235
  br label %247

247:                                              ; preds = %246, %155
  br label %248

248:                                              ; preds = %247
  %249 = load i32, ptr %37, align 4, !tbaa !11
  %250 = add nsw i32 %249, 1
  store i32 %250, ptr %37, align 4, !tbaa !11
  br label %151, !llvm.loop !27

251:                                              ; preds = %151
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %252

252:                                              ; preds = %295, %251
  %253 = load i32, ptr %37, align 4, !tbaa !11
  %254 = load i32, ptr %20, align 4, !tbaa !11
  %255 = icmp sle i32 %253, %254
  br i1 %255, label %256, label %298

256:                                              ; preds = %252
  %257 = load ptr, ptr %16, align 8, !tbaa !5
  %258 = load i32, ptr %37, align 4, !tbaa !11
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds double, ptr %257, i64 %259
  %261 = load double, ptr %260, align 8, !tbaa !9
  %262 = fcmp oge double %261, 0.000000e+00
  br i1 %262, label %263, label %278

263:                                              ; preds = %256
  %264 = load ptr, ptr %18, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.numjac_workspace, ptr %264, i32 0, i32 1
  %266 = load ptr, ptr %265, align 8, !tbaa !24
  %267 = load i32, ptr %37, align 4, !tbaa !11
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds double, ptr %266, i64 %268
  %270 = load double, ptr %269, align 8, !tbaa !9
  %271 = call double @llvm.fabs.f64(double %270)
  %272 = load ptr, ptr %18, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.numjac_workspace, ptr %272, i32 0, i32 1
  %274 = load ptr, ptr %273, align 8, !tbaa !24
  %275 = load i32, ptr %37, align 4, !tbaa !11
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds double, ptr %274, i64 %276
  store double %271, ptr %277, align 8, !tbaa !9
  br label %294

278:                                              ; preds = %256
  %279 = load ptr, ptr %18, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.numjac_workspace, ptr %279, i32 0, i32 1
  %281 = load ptr, ptr %280, align 8, !tbaa !24
  %282 = load i32, ptr %37, align 4, !tbaa !11
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %281, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !9
  %286 = call double @llvm.fabs.f64(double %285)
  %287 = fneg double %286
  %288 = load ptr, ptr %18, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.numjac_workspace, ptr %288, i32 0, i32 1
  %290 = load ptr, ptr %289, align 8, !tbaa !24
  %291 = load i32, ptr %37, align 4, !tbaa !11
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %290, i64 %292
  store double %287, ptr %293, align 8, !tbaa !9
  br label %294

294:                                              ; preds = %278, %263
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %37, align 4, !tbaa !11
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %37, align 4, !tbaa !11
  br label %252, !llvm.loop !28

298:                                              ; preds = %252
  %299 = load ptr, ptr %17, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.jacobian, ptr %299, i32 0, i32 5
  %301 = load i32, ptr %300, align 8, !tbaa !16
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %402

303:                                              ; preds = %298
  %304 = load ptr, ptr %17, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.jacobian, ptr %304, i32 0, i32 8
  %306 = load i32, ptr %305, align 4, !tbaa !29
  %307 = load ptr, ptr %17, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.jacobian, ptr %307, i32 0, i32 9
  %309 = load i32, ptr %308, align 8, !tbaa !30
  %310 = icmp sge i32 %306, %309
  br i1 %310, label %311, label %402

311:                                              ; preds = %303
  %312 = load ptr, ptr %17, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.jacobian, ptr %312, i32 0, i32 10
  %314 = load i32, ptr %313, align 4, !tbaa !31
  %315 = icmp eq i32 %314, 0
  br i1 %315, label %316, label %331

316:                                              ; preds = %311
  %317 = load ptr, ptr %17, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.jacobian, ptr %317, i32 0, i32 17
  %319 = load ptr, ptr %318, align 8, !tbaa !17
  %320 = load ptr, ptr %17, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.jacobian, ptr %320, i32 0, i32 14
  %322 = load ptr, ptr %321, align 8, !tbaa !32
  %323 = load ptr, ptr %17, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.jacobian, ptr %323, i32 0, i32 15
  %325 = load ptr, ptr %324, align 8, !tbaa !33
  %326 = call i32 @column_grouping(ptr noundef %319, ptr noundef %322, ptr noundef %325)
  %327 = load ptr, ptr %17, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.jacobian, ptr %327, i32 0, i32 16
  store i32 %326, ptr %328, align 8, !tbaa !34
  %329 = load ptr, ptr %17, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.jacobian, ptr %329, i32 0, i32 10
  store i32 1, ptr %330, align 4, !tbaa !31
  br label %331

331:                                              ; preds = %316, %311
  %332 = load ptr, ptr %17, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.jacobian, ptr %332, i32 0, i32 16
  %334 = load i32, ptr %333, align 8, !tbaa !34
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %41, align 4, !tbaa !11
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %336

336:                                              ; preds = %398, %331
  %337 = load i32, ptr %37, align 4, !tbaa !11
  %338 = load i32, ptr %41, align 4, !tbaa !11
  %339 = icmp sle i32 %337, %338
  br i1 %339, label %340, label %401

340:                                              ; preds = %336
  %341 = load i32, ptr %37, align 4, !tbaa !11
  %342 = sub nsw i32 %341, 1
  store i32 %342, ptr %42, align 4, !tbaa !11
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %343

343:                                              ; preds = %394, %340
  %344 = load i32, ptr %36, align 4, !tbaa !11
  %345 = load i32, ptr %20, align 4, !tbaa !11
  %346 = icmp sle i32 %344, %345
  br i1 %346, label %347, label %397

347:                                              ; preds = %343
  %348 = load ptr, ptr %15, align 8, !tbaa !5
  %349 = load i32, ptr %36, align 4, !tbaa !11
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds double, ptr %348, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !9
  %353 = load ptr, ptr %18, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.numjac_workspace, ptr %353, i32 0, i32 10
  %355 = load ptr, ptr %354, align 8, !tbaa !35
  %356 = load i32, ptr %36, align 4, !tbaa !11
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds ptr, ptr %355, i64 %357
  %359 = load ptr, ptr %358, align 8, !tbaa !5
  %360 = load i32, ptr %37, align 4, !tbaa !11
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds double, ptr %359, i64 %361
  store double %352, ptr %362, align 8, !tbaa !9
  %363 = load ptr, ptr %17, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.jacobian, ptr %363, i32 0, i32 14
  %365 = load ptr, ptr %364, align 8, !tbaa !32
  %366 = load i32, ptr %36, align 4, !tbaa !11
  %367 = sub nsw i32 %366, 1
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %365, i64 %368
  %370 = load i32, ptr %369, align 4, !tbaa !11
  %371 = load i32, ptr %42, align 4, !tbaa !11
  %372 = icmp eq i32 %370, %371
  br i1 %372, label %373, label %393

373:                                              ; preds = %347
  %374 = load ptr, ptr %18, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.numjac_workspace, ptr %374, i32 0, i32 1
  %376 = load ptr, ptr %375, align 8, !tbaa !24
  %377 = load i32, ptr %36, align 4, !tbaa !11
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds double, ptr %376, i64 %378
  %380 = load double, ptr %379, align 8, !tbaa !9
  %381 = load ptr, ptr %18, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.numjac_workspace, ptr %381, i32 0, i32 10
  %383 = load ptr, ptr %382, align 8, !tbaa !35
  %384 = load i32, ptr %36, align 4, !tbaa !11
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds ptr, ptr %383, i64 %385
  %387 = load ptr, ptr %386, align 8, !tbaa !5
  %388 = load i32, ptr %37, align 4, !tbaa !11
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds double, ptr %387, i64 %389
  %391 = load double, ptr %390, align 8, !tbaa !9
  %392 = fadd double %391, %380
  store double %392, ptr %390, align 8, !tbaa !9
  br label %393

393:                                              ; preds = %373, %347
  br label %394

394:                                              ; preds = %393
  %395 = load i32, ptr %36, align 4, !tbaa !11
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %36, align 4, !tbaa !11
  br label %343, !llvm.loop !36

397:                                              ; preds = %343
  br label %398

398:                                              ; preds = %397
  %399 = load i32, ptr %37, align 4, !tbaa !11
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %37, align 4, !tbaa !11
  br label %336, !llvm.loop !37

401:                                              ; preds = %336
  br label %456

402:                                              ; preds = %303, %298
  %403 = load i32, ptr %20, align 4, !tbaa !11
  store i32 %403, ptr %41, align 4, !tbaa !11
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %404

404:                                              ; preds = %452, %402
  %405 = load i32, ptr %37, align 4, !tbaa !11
  %406 = load i32, ptr %20, align 4, !tbaa !11
  %407 = icmp sle i32 %405, %406
  br i1 %407, label %408, label %455

408:                                              ; preds = %404
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %409

409:                                              ; preds = %429, %408
  %410 = load i32, ptr %36, align 4, !tbaa !11
  %411 = load i32, ptr %20, align 4, !tbaa !11
  %412 = icmp sle i32 %410, %411
  br i1 %412, label %413, label %432

413:                                              ; preds = %409
  %414 = load ptr, ptr %15, align 8, !tbaa !5
  %415 = load i32, ptr %36, align 4, !tbaa !11
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds double, ptr %414, i64 %416
  %418 = load double, ptr %417, align 8, !tbaa !9
  %419 = load ptr, ptr %18, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.numjac_workspace, ptr %419, i32 0, i32 10
  %421 = load ptr, ptr %420, align 8, !tbaa !35
  %422 = load i32, ptr %36, align 4, !tbaa !11
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds ptr, ptr %421, i64 %423
  %425 = load ptr, ptr %424, align 8, !tbaa !5
  %426 = load i32, ptr %37, align 4, !tbaa !11
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds double, ptr %425, i64 %427
  store double %418, ptr %428, align 8, !tbaa !9
  br label %429

429:                                              ; preds = %413
  %430 = load i32, ptr %36, align 4, !tbaa !11
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %36, align 4, !tbaa !11
  br label %409, !llvm.loop !38

432:                                              ; preds = %409
  %433 = load ptr, ptr %18, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.numjac_workspace, ptr %433, i32 0, i32 1
  %435 = load ptr, ptr %434, align 8, !tbaa !24
  %436 = load i32, ptr %37, align 4, !tbaa !11
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds double, ptr %435, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !9
  %440 = load ptr, ptr %18, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.numjac_workspace, ptr %440, i32 0, i32 10
  %442 = load ptr, ptr %441, align 8, !tbaa !35
  %443 = load i32, ptr %37, align 4, !tbaa !11
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds ptr, ptr %442, i64 %444
  %446 = load ptr, ptr %445, align 8, !tbaa !5
  %447 = load i32, ptr %37, align 4, !tbaa !11
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !9
  %451 = fadd double %450, %439
  store double %451, ptr %449, align 8, !tbaa !9
  br label %452

452:                                              ; preds = %432
  %453 = load i32, ptr %37, align 4, !tbaa !11
  %454 = add nsw i32 %453, 1
  store i32 %454, ptr %37, align 4, !tbaa !11
  br label %404, !llvm.loop !39

455:                                              ; preds = %404
  br label %456

456:                                              ; preds = %455, %401
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %457

457:                                              ; preds = %537, %456
  %458 = load i32, ptr %37, align 4, !tbaa !11
  %459 = load i32, ptr %41, align 4, !tbaa !11
  %460 = icmp sle i32 %458, %459
  br i1 %460, label %461, label %540

461:                                              ; preds = %457
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %462

462:                                              ; preds = %484, %461
  %463 = load i32, ptr %36, align 4, !tbaa !11
  %464 = load i32, ptr %20, align 4, !tbaa !11
  %465 = icmp sle i32 %463, %464
  br i1 %465, label %466, label %487

466:                                              ; preds = %462
  %467 = load ptr, ptr %18, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.numjac_workspace, ptr %467, i32 0, i32 10
  %469 = load ptr, ptr %468, align 8, !tbaa !35
  %470 = load i32, ptr %36, align 4, !tbaa !11
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds ptr, ptr %469, i64 %471
  %473 = load ptr, ptr %472, align 8, !tbaa !5
  %474 = load i32, ptr %37, align 4, !tbaa !11
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds double, ptr %473, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !9
  %478 = load ptr, ptr %18, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.numjac_workspace, ptr %478, i32 0, i32 8
  %480 = load ptr, ptr %479, align 8, !tbaa !40
  %481 = load i32, ptr %36, align 4, !tbaa !11
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds double, ptr %480, i64 %482
  store double %477, ptr %483, align 8, !tbaa !9
  br label %484

484:                                              ; preds = %466
  %485 = load i32, ptr %36, align 4, !tbaa !11
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %36, align 4, !tbaa !11
  br label %462, !llvm.loop !41

487:                                              ; preds = %462
  %488 = load ptr, ptr %13, align 8, !tbaa !5
  %489 = load double, ptr %14, align 8, !tbaa !9
  %490 = load ptr, ptr %18, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.numjac_workspace, ptr %490, i32 0, i32 8
  %492 = load ptr, ptr %491, align 8, !tbaa !40
  %493 = getelementptr inbounds double, ptr %492, i64 1
  %494 = load ptr, ptr %18, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.numjac_workspace, ptr %494, i32 0, i32 7
  %496 = load ptr, ptr %495, align 8, !tbaa !42
  %497 = getelementptr inbounds double, ptr %496, i64 1
  %498 = load ptr, ptr %22, align 8, !tbaa !5
  %499 = load ptr, ptr %23, align 8, !tbaa !5
  %500 = call i32 %488(double noundef %489, ptr noundef %493, ptr noundef %497, ptr noundef %498, ptr noundef %499)
  %501 = icmp eq i32 %500, 1
  br i1 %501, label %502, label %507

502:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 2048, ptr %52) #5
  %503 = getelementptr inbounds [2048 x i8], ptr %52, i64 0, i64 0
  %504 = load ptr, ptr %23, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %503, ptr noundef @.str.3, ptr noundef @.str.37, ptr noundef %504)
  %505 = load ptr, ptr %23, align 8, !tbaa !5
  %506 = getelementptr inbounds [2048 x i8], ptr %52, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %505, ptr noundef @.str.2, ptr noundef @__func__.numjac, i32 noundef 1298, ptr noundef %506)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %52) #5
  store i32 1, ptr %12, align 4
  store i32 1, ptr %53, align 4
  br label %1557

507:                                              ; preds = %487
  %508 = load ptr, ptr %21, align 8, !tbaa !5
  %509 = load i32, ptr %508, align 4, !tbaa !11
  %510 = add nsw i32 %509, 1
  store i32 %510, ptr %508, align 4, !tbaa !11
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %511

511:                                              ; preds = %533, %507
  %512 = load i32, ptr %36, align 4, !tbaa !11
  %513 = load i32, ptr %20, align 4, !tbaa !11
  %514 = icmp sle i32 %512, %513
  br i1 %514, label %515, label %536

515:                                              ; preds = %511
  %516 = load ptr, ptr %18, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.numjac_workspace, ptr %516, i32 0, i32 7
  %518 = load ptr, ptr %517, align 8, !tbaa !42
  %519 = load i32, ptr %36, align 4, !tbaa !11
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds double, ptr %518, i64 %520
  %522 = load double, ptr %521, align 8, !tbaa !9
  %523 = load ptr, ptr %18, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.numjac_workspace, ptr %523, i32 0, i32 10
  %525 = load ptr, ptr %524, align 8, !tbaa !35
  %526 = load i32, ptr %36, align 4, !tbaa !11
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds ptr, ptr %525, i64 %527
  %529 = load ptr, ptr %528, align 8, !tbaa !5
  %530 = load i32, ptr %37, align 4, !tbaa !11
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds double, ptr %529, i64 %531
  store double %522, ptr %532, align 8, !tbaa !9
  br label %533

533:                                              ; preds = %515
  %534 = load i32, ptr %36, align 4, !tbaa !11
  %535 = add nsw i32 %534, 1
  store i32 %535, ptr %36, align 4, !tbaa !11
  br label %511, !llvm.loop !43

536:                                              ; preds = %511
  br label %537

537:                                              ; preds = %536
  %538 = load i32, ptr %37, align 4, !tbaa !11
  %539 = add nsw i32 %538, 1
  store i32 %539, ptr %37, align 4, !tbaa !11
  br label %457, !llvm.loop !44

540:                                              ; preds = %457
  %541 = load ptr, ptr %17, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.jacobian, ptr %541, i32 0, i32 5
  %543 = load i32, ptr %542, align 8, !tbaa !16
  %544 = icmp ne i32 %543, 0
  br i1 %544, label %545, label %689

545:                                              ; preds = %540
  %546 = load ptr, ptr %17, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.jacobian, ptr %546, i32 0, i32 8
  %548 = load i32, ptr %547, align 4, !tbaa !29
  %549 = load ptr, ptr %17, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.jacobian, ptr %549, i32 0, i32 9
  %551 = load i32, ptr %550, align 8, !tbaa !30
  %552 = icmp sge i32 %548, %551
  br i1 %552, label %553, label %689

553:                                              ; preds = %545
  store i32 0, ptr %37, align 4, !tbaa !11
  br label %554

554:                                              ; preds = %685, %553
  %555 = load i32, ptr %37, align 4, !tbaa !11
  %556 = load i32, ptr %20, align 4, !tbaa !11
  %557 = icmp slt i32 %555, %556
  br i1 %557, label %558, label %688

558:                                              ; preds = %554
  %559 = load ptr, ptr %17, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.jacobian, ptr %559, i32 0, i32 14
  %561 = load ptr, ptr %560, align 8, !tbaa !32
  %562 = load i32, ptr %37, align 4, !tbaa !11
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds i32, ptr %561, i64 %563
  %565 = load i32, ptr %564, align 4, !tbaa !11
  store i32 %565, ptr %42, align 4, !tbaa !11
  store double 0.000000e+00, ptr %47, align 8, !tbaa !9
  store double 0.000000e+00, ptr %46, align 8, !tbaa !9
  %566 = load ptr, ptr %50, align 8, !tbaa !5
  %567 = load i32, ptr %37, align 4, !tbaa !11
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds i32, ptr %566, i64 %568
  %570 = load i32, ptr %569, align 4, !tbaa !11
  store i32 %570, ptr %36, align 4, !tbaa !11
  br label %571

571:                                              ; preds = %654, %558
  %572 = load i32, ptr %36, align 4, !tbaa !11
  %573 = load ptr, ptr %50, align 8, !tbaa !5
  %574 = load i32, ptr %37, align 4, !tbaa !11
  %575 = add nsw i32 %574, 1
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds i32, ptr %573, i64 %576
  %578 = load i32, ptr %577, align 4, !tbaa !11
  %579 = icmp slt i32 %572, %578
  br i1 %579, label %580, label %657

580:                                              ; preds = %571
  %581 = load ptr, ptr %51, align 8, !tbaa !5
  %582 = load i32, ptr %36, align 4, !tbaa !11
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds i32, ptr %581, i64 %583
  %585 = load i32, ptr %584, align 4, !tbaa !11
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %43, align 4, !tbaa !11
  %587 = load double, ptr %46, align 8, !tbaa !9
  %588 = load double, ptr %47, align 8, !tbaa !9
  %589 = call double @llvm.fabs.f64(double %588)
  %590 = fcmp olt double %587, %589
  br i1 %590, label %591, label %594

591:                                              ; preds = %580
  %592 = load double, ptr %47, align 8, !tbaa !9
  %593 = call double @llvm.fabs.f64(double %592)
  br label %596

594:                                              ; preds = %580
  %595 = load double, ptr %46, align 8, !tbaa !9
  br label %596

596:                                              ; preds = %594, %591
  %597 = phi double [ %593, %591 ], [ %595, %594 ]
  store double %597, ptr %46, align 8, !tbaa !9
  %598 = load ptr, ptr %18, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.numjac_workspace, ptr %598, i32 0, i32 10
  %600 = load ptr, ptr %599, align 8, !tbaa !35
  %601 = load i32, ptr %43, align 4, !tbaa !11
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds ptr, ptr %600, i64 %602
  %604 = load ptr, ptr %603, align 8, !tbaa !5
  %605 = load i32, ptr %42, align 4, !tbaa !11
  %606 = add nsw i32 %605, 1
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds double, ptr %604, i64 %607
  %609 = load double, ptr %608, align 8, !tbaa !9
  %610 = load ptr, ptr %16, align 8, !tbaa !5
  %611 = load i32, ptr %43, align 4, !tbaa !11
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds double, ptr %610, i64 %612
  %614 = load double, ptr %613, align 8, !tbaa !9
  %615 = fsub double %609, %614
  store double %615, ptr %47, align 8, !tbaa !9
  %616 = load double, ptr %47, align 8, !tbaa !9
  %617 = call double @llvm.fabs.f64(double %616)
  %618 = load double, ptr %46, align 8, !tbaa !9
  %619 = fcmp oge double %617, %618
  br i1 %619, label %620, label %637

620:                                              ; preds = %596
  %621 = load i32, ptr %43, align 4, !tbaa !11
  %622 = load ptr, ptr %18, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.numjac_workspace, ptr %622, i32 0, i32 12
  %624 = load ptr, ptr %623, align 8, !tbaa !45
  %625 = load i32, ptr %37, align 4, !tbaa !11
  %626 = add nsw i32 %625, 1
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds i32, ptr %624, i64 %627
  store i32 %621, ptr %628, align 4, !tbaa !11
  %629 = load double, ptr %47, align 8, !tbaa !9
  %630 = load ptr, ptr %18, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.numjac_workspace, ptr %630, i32 0, i32 2
  %632 = load ptr, ptr %631, align 8, !tbaa !46
  %633 = load i32, ptr %37, align 4, !tbaa !11
  %634 = add nsw i32 %633, 1
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds double, ptr %632, i64 %635
  store double %629, ptr %636, align 8, !tbaa !9
  br label %637

637:                                              ; preds = %620, %596
  %638 = load double, ptr %47, align 8, !tbaa !9
  %639 = load ptr, ptr %18, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.numjac_workspace, ptr %639, i32 0, i32 1
  %641 = load ptr, ptr %640, align 8, !tbaa !24
  %642 = load i32, ptr %37, align 4, !tbaa !11
  %643 = add nsw i32 %642, 1
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds double, ptr %641, i64 %644
  %646 = load double, ptr %645, align 8, !tbaa !9
  %647 = fdiv double %638, %646
  %648 = load ptr, ptr %17, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.jacobian, ptr %648, i32 0, i32 18
  %650 = load ptr, ptr %649, align 8, !tbaa !47
  %651 = load i32, ptr %36, align 4, !tbaa !11
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds double, ptr %650, i64 %652
  store double %647, ptr %653, align 8, !tbaa !9
  br label %654

654:                                              ; preds = %637
  %655 = load i32, ptr %36, align 4, !tbaa !11
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %36, align 4, !tbaa !11
  br label %571, !llvm.loop !48

657:                                              ; preds = %571
  %658 = load ptr, ptr %18, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.numjac_workspace, ptr %658, i32 0, i32 10
  %660 = load ptr, ptr %659, align 8, !tbaa !35
  %661 = load ptr, ptr %18, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.numjac_workspace, ptr %661, i32 0, i32 12
  %663 = load ptr, ptr %662, align 8, !tbaa !45
  %664 = load i32, ptr %37, align 4, !tbaa !11
  %665 = add nsw i32 %664, 1
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds i32, ptr %663, i64 %666
  %668 = load i32, ptr %667, align 4, !tbaa !11
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds ptr, ptr %660, i64 %669
  %671 = load ptr, ptr %670, align 8, !tbaa !5
  %672 = load i32, ptr %42, align 4, !tbaa !11
  %673 = add nsw i32 %672, 1
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds double, ptr %671, i64 %674
  %676 = load double, ptr %675, align 8, !tbaa !9
  %677 = call double @llvm.fabs.f64(double %676)
  %678 = load ptr, ptr %18, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.numjac_workspace, ptr %678, i32 0, i32 3
  %680 = load ptr, ptr %679, align 8, !tbaa !49
  %681 = load i32, ptr %37, align 4, !tbaa !11
  %682 = add nsw i32 %681, 1
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds double, ptr %680, i64 %683
  store double %677, ptr %684, align 8, !tbaa !9
  br label %685

685:                                              ; preds = %657
  %686 = load i32, ptr %37, align 4, !tbaa !11
  %687 = add nsw i32 %686, 1
  store i32 %687, ptr %37, align 4, !tbaa !11
  br label %554, !llvm.loop !50

688:                                              ; preds = %554
  br label %798

689:                                              ; preds = %545, %540
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %690

690:                                              ; preds = %794, %689
  %691 = load i32, ptr %37, align 4, !tbaa !11
  %692 = load i32, ptr %20, align 4, !tbaa !11
  %693 = icmp sle i32 %691, %692
  br i1 %693, label %694, label %797

694:                                              ; preds = %690
  store double 0.000000e+00, ptr %47, align 8, !tbaa !9
  store double 0.000000e+00, ptr %46, align 8, !tbaa !9
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %695

695:                                              ; preds = %766, %694
  %696 = load i32, ptr %36, align 4, !tbaa !11
  %697 = load i32, ptr %20, align 4, !tbaa !11
  %698 = icmp sle i32 %696, %697
  br i1 %698, label %699, label %769

699:                                              ; preds = %695
  %700 = load double, ptr %47, align 8, !tbaa !9
  %701 = call double @llvm.fabs.f64(double %700)
  %702 = load double, ptr %46, align 8, !tbaa !9
  %703 = fcmp olt double %701, %702
  br i1 %703, label %704, label %706

704:                                              ; preds = %699
  %705 = load double, ptr %46, align 8, !tbaa !9
  br label %709

706:                                              ; preds = %699
  %707 = load double, ptr %47, align 8, !tbaa !9
  %708 = call double @llvm.fabs.f64(double %707)
  br label %709

709:                                              ; preds = %706, %704
  %710 = phi double [ %705, %704 ], [ %708, %706 ]
  store double %710, ptr %46, align 8, !tbaa !9
  %711 = load ptr, ptr %18, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.numjac_workspace, ptr %711, i32 0, i32 10
  %713 = load ptr, ptr %712, align 8, !tbaa !35
  %714 = load i32, ptr %36, align 4, !tbaa !11
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds ptr, ptr %713, i64 %715
  %717 = load ptr, ptr %716, align 8, !tbaa !5
  %718 = load i32, ptr %37, align 4, !tbaa !11
  %719 = sext i32 %718 to i64
  %720 = getelementptr inbounds double, ptr %717, i64 %719
  %721 = load double, ptr %720, align 8, !tbaa !9
  %722 = load ptr, ptr %16, align 8, !tbaa !5
  %723 = load i32, ptr %36, align 4, !tbaa !11
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds double, ptr %722, i64 %724
  %726 = load double, ptr %725, align 8, !tbaa !9
  %727 = fsub double %721, %726
  store double %727, ptr %47, align 8, !tbaa !9
  %728 = load double, ptr %47, align 8, !tbaa !9
  %729 = load ptr, ptr %18, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.numjac_workspace, ptr %729, i32 0, i32 1
  %731 = load ptr, ptr %730, align 8, !tbaa !24
  %732 = load i32, ptr %37, align 4, !tbaa !11
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds double, ptr %731, i64 %733
  %735 = load double, ptr %734, align 8, !tbaa !9
  %736 = fdiv double %728, %735
  %737 = load ptr, ptr %48, align 8, !tbaa !5
  %738 = load i32, ptr %36, align 4, !tbaa !11
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds ptr, ptr %737, i64 %739
  %741 = load ptr, ptr %740, align 8, !tbaa !5
  %742 = load i32, ptr %37, align 4, !tbaa !11
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds double, ptr %741, i64 %743
  store double %736, ptr %744, align 8, !tbaa !9
  %745 = load double, ptr %47, align 8, !tbaa !9
  %746 = call double @llvm.fabs.f64(double %745)
  %747 = load double, ptr %46, align 8, !tbaa !9
  %748 = fcmp oge double %746, %747
  br i1 %748, label %749, label %765

749:                                              ; preds = %709
  %750 = load i32, ptr %36, align 4, !tbaa !11
  %751 = load ptr, ptr %18, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.numjac_workspace, ptr %751, i32 0, i32 12
  %753 = load ptr, ptr %752, align 8, !tbaa !45
  %754 = load i32, ptr %37, align 4, !tbaa !11
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds i32, ptr %753, i64 %755
  store i32 %750, ptr %756, align 4, !tbaa !11
  %757 = load double, ptr %47, align 8, !tbaa !9
  %758 = call double @llvm.fabs.f64(double %757)
  %759 = load ptr, ptr %18, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.numjac_workspace, ptr %759, i32 0, i32 2
  %761 = load ptr, ptr %760, align 8, !tbaa !46
  %762 = load i32, ptr %37, align 4, !tbaa !11
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds double, ptr %761, i64 %763
  store double %758, ptr %764, align 8, !tbaa !9
  br label %765

765:                                              ; preds = %749, %709
  br label %766

766:                                              ; preds = %765
  %767 = load i32, ptr %36, align 4, !tbaa !11
  %768 = add nsw i32 %767, 1
  store i32 %768, ptr %36, align 4, !tbaa !11
  br label %695, !llvm.loop !51

769:                                              ; preds = %695
  %770 = load ptr, ptr %18, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.numjac_workspace, ptr %770, i32 0, i32 10
  %772 = load ptr, ptr %771, align 8, !tbaa !35
  %773 = load ptr, ptr %18, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.numjac_workspace, ptr %773, i32 0, i32 12
  %775 = load ptr, ptr %774, align 8, !tbaa !45
  %776 = load i32, ptr %37, align 4, !tbaa !11
  %777 = sext i32 %776 to i64
  %778 = getelementptr inbounds i32, ptr %775, i64 %777
  %779 = load i32, ptr %778, align 4, !tbaa !11
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds ptr, ptr %772, i64 %780
  %782 = load ptr, ptr %781, align 8, !tbaa !5
  %783 = load i32, ptr %37, align 4, !tbaa !11
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds double, ptr %782, i64 %784
  %786 = load double, ptr %785, align 8, !tbaa !9
  %787 = call double @llvm.fabs.f64(double %786)
  %788 = load ptr, ptr %18, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.numjac_workspace, ptr %788, i32 0, i32 3
  %790 = load ptr, ptr %789, align 8, !tbaa !49
  %791 = load i32, ptr %37, align 4, !tbaa !11
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds double, ptr %790, i64 %792
  store double %787, ptr %793, align 8, !tbaa !9
  br label %794

794:                                              ; preds = %769
  %795 = load i32, ptr %37, align 4, !tbaa !11
  %796 = add nsw i32 %795, 1
  store i32 %796, ptr %37, align 4, !tbaa !11
  br label %690, !llvm.loop !52

797:                                              ; preds = %690
  br label %798

798:                                              ; preds = %797, %688
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %799

799:                                              ; preds = %816, %798
  %800 = load i32, ptr %36, align 4, !tbaa !11
  %801 = load i32, ptr %20, align 4, !tbaa !11
  %802 = icmp sle i32 %800, %801
  br i1 %802, label %803, label %819

803:                                              ; preds = %799
  %804 = load ptr, ptr %16, align 8, !tbaa !5
  %805 = load i32, ptr %36, align 4, !tbaa !11
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds double, ptr %804, i64 %806
  %808 = load double, ptr %807, align 8, !tbaa !9
  %809 = call double @llvm.fabs.f64(double %808)
  %810 = load ptr, ptr %18, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.numjac_workspace, ptr %810, i32 0, i32 4
  %812 = load ptr, ptr %811, align 8, !tbaa !53
  %813 = load i32, ptr %36, align 4, !tbaa !11
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds double, ptr %812, i64 %814
  store double %809, ptr %815, align 8, !tbaa !9
  br label %816

816:                                              ; preds = %803
  %817 = load i32, ptr %36, align 4, !tbaa !11
  %818 = add nsw i32 %817, 1
  store i32 %818, ptr %36, align 4, !tbaa !11
  br label %799, !llvm.loop !54

819:                                              ; preds = %799
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %820

820:                                              ; preds = %844, %819
  %821 = load i32, ptr %37, align 4, !tbaa !11
  %822 = load i32, ptr %20, align 4, !tbaa !11
  %823 = icmp sle i32 %821, %822
  br i1 %823, label %824, label %847

824:                                              ; preds = %820
  %825 = load ptr, ptr %18, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.numjac_workspace, ptr %825, i32 0, i32 4
  %827 = load ptr, ptr %826, align 8, !tbaa !53
  %828 = load ptr, ptr %18, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.numjac_workspace, ptr %828, i32 0, i32 12
  %830 = load ptr, ptr %829, align 8, !tbaa !45
  %831 = load i32, ptr %37, align 4, !tbaa !11
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds i32, ptr %830, i64 %832
  %834 = load i32, ptr %833, align 4, !tbaa !11
  %835 = sext i32 %834 to i64
  %836 = getelementptr inbounds double, ptr %827, i64 %835
  %837 = load double, ptr %836, align 8, !tbaa !9
  %838 = load ptr, ptr %18, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.numjac_workspace, ptr %838, i32 0, i32 5
  %840 = load ptr, ptr %839, align 8, !tbaa !55
  %841 = load i32, ptr %37, align 4, !tbaa !11
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds double, ptr %840, i64 %842
  store double %837, ptr %843, align 8, !tbaa !9
  br label %844

844:                                              ; preds = %824
  %845 = load i32, ptr %37, align 4, !tbaa !11
  %846 = add nsw i32 %845, 1
  store i32 %846, ptr %37, align 4, !tbaa !11
  br label %820, !llvm.loop !56

847:                                              ; preds = %820
  store i32 0, ptr %30, align 4, !tbaa !11
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %848

848:                                              ; preds = %895, %847
  %849 = load i32, ptr %37, align 4, !tbaa !11
  %850 = load i32, ptr %20, align 4, !tbaa !11
  %851 = icmp sle i32 %849, %850
  br i1 %851, label %852, label %898

852:                                              ; preds = %848
  %853 = load ptr, ptr %18, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.numjac_workspace, ptr %853, i32 0, i32 3
  %855 = load ptr, ptr %854, align 8, !tbaa !49
  %856 = load i32, ptr %37, align 4, !tbaa !11
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds double, ptr %855, i64 %857
  %859 = load double, ptr %858, align 8, !tbaa !9
  %860 = fcmp olt double %859, 1.000000e-50
  br i1 %860, label %861, label %870

861:                                              ; preds = %852
  %862 = load ptr, ptr %18, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.numjac_workspace, ptr %862, i32 0, i32 5
  %864 = load ptr, ptr %863, align 8, !tbaa !55
  %865 = load i32, ptr %37, align 4, !tbaa !11
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds double, ptr %864, i64 %866
  %868 = load double, ptr %867, align 8, !tbaa !9
  %869 = fcmp olt double %868, 1.000000e-50
  br i1 %869, label %880, label %870

870:                                              ; preds = %861, %852
  %871 = load ptr, ptr %18, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.numjac_workspace, ptr %871, i32 0, i32 2
  %873 = load ptr, ptr %872, align 8, !tbaa !46
  %874 = load i32, ptr %37, align 4, !tbaa !11
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds double, ptr %873, i64 %875
  %877 = load double, ptr %876, align 8, !tbaa !9
  %878 = call double @llvm.fabs.f64(double %877)
  %879 = fcmp olt double %878, 1.000000e-50
  br i1 %879, label %880, label %887

880:                                              ; preds = %870, %861
  %881 = load ptr, ptr %18, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.numjac_workspace, ptr %881, i32 0, i32 11
  %883 = load ptr, ptr %882, align 8, !tbaa !57
  %884 = load i32, ptr %37, align 4, !tbaa !11
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds i32, ptr %883, i64 %885
  store i32 1, ptr %886, align 4, !tbaa !11
  store i32 1, ptr %30, align 4, !tbaa !11
  br label %894

887:                                              ; preds = %870
  %888 = load ptr, ptr %18, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.numjac_workspace, ptr %888, i32 0, i32 11
  %890 = load ptr, ptr %889, align 8, !tbaa !57
  %891 = load i32, ptr %37, align 4, !tbaa !11
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds i32, ptr %890, i64 %892
  store i32 0, ptr %893, align 4, !tbaa !11
  br label %894

894:                                              ; preds = %887, %880
  br label %895

895:                                              ; preds = %894
  %896 = load i32, ptr %37, align 4, !tbaa !11
  %897 = add nsw i32 %896, 1
  store i32 %897, ptr %37, align 4, !tbaa !11
  br label %848, !llvm.loop !58

898:                                              ; preds = %848
  %899 = load i32, ptr %30, align 4, !tbaa !11
  %900 = icmp eq i32 %899, 1
  br i1 %900, label %901, label %1350

901:                                              ; preds = %898
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %902

902:                                              ; preds = %957, %901
  %903 = load i32, ptr %36, align 4, !tbaa !11
  %904 = load i32, ptr %20, align 4, !tbaa !11
  %905 = icmp sle i32 %903, %904
  br i1 %905, label %906, label %960

906:                                              ; preds = %902
  %907 = load ptr, ptr %15, align 8, !tbaa !5
  %908 = load i32, ptr %36, align 4, !tbaa !11
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds double, ptr %907, i64 %909
  %911 = load double, ptr %910, align 8, !tbaa !9
  %912 = load ptr, ptr %18, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.numjac_workspace, ptr %912, i32 0, i32 8
  %914 = load ptr, ptr %913, align 8, !tbaa !40
  %915 = load i32, ptr %36, align 4, !tbaa !11
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds double, ptr %914, i64 %916
  store double %911, ptr %917, align 8, !tbaa !9
  %918 = load ptr, ptr %18, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.numjac_workspace, ptr %918, i32 0, i32 3
  %920 = load ptr, ptr %919, align 8, !tbaa !49
  %921 = load i32, ptr %36, align 4, !tbaa !11
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds double, ptr %920, i64 %922
  %924 = load double, ptr %923, align 8, !tbaa !9
  %925 = load ptr, ptr %18, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.numjac_workspace, ptr %925, i32 0, i32 5
  %927 = load ptr, ptr %926, align 8, !tbaa !55
  %928 = load i32, ptr %36, align 4, !tbaa !11
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds double, ptr %927, i64 %929
  %931 = load double, ptr %930, align 8, !tbaa !9
  %932 = fcmp olt double %924, %931
  br i1 %932, label %933, label %941

933:                                              ; preds = %906
  %934 = load ptr, ptr %18, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.numjac_workspace, ptr %934, i32 0, i32 5
  %936 = load ptr, ptr %935, align 8, !tbaa !55
  %937 = load i32, ptr %36, align 4, !tbaa !11
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds double, ptr %936, i64 %938
  %940 = load double, ptr %939, align 8, !tbaa !9
  br label %949

941:                                              ; preds = %906
  %942 = load ptr, ptr %18, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.numjac_workspace, ptr %942, i32 0, i32 3
  %944 = load ptr, ptr %943, align 8, !tbaa !49
  %945 = load i32, ptr %36, align 4, !tbaa !11
  %946 = sext i32 %945 to i64
  %947 = getelementptr inbounds double, ptr %944, i64 %946
  %948 = load double, ptr %947, align 8, !tbaa !9
  br label %949

949:                                              ; preds = %941, %933
  %950 = phi double [ %940, %933 ], [ %948, %941 ]
  %951 = load ptr, ptr %18, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.numjac_workspace, ptr %951, i32 0, i32 6
  %953 = load ptr, ptr %952, align 8, !tbaa !59
  %954 = load i32, ptr %36, align 4, !tbaa !11
  %955 = sext i32 %954 to i64
  %956 = getelementptr inbounds double, ptr %953, i64 %955
  store double %950, ptr %956, align 8, !tbaa !9
  br label %957

957:                                              ; preds = %949
  %958 = load i32, ptr %36, align 4, !tbaa !11
  %959 = add nsw i32 %958, 1
  store i32 %959, ptr %36, align 4, !tbaa !11
  br label %902, !llvm.loop !60

960:                                              ; preds = %902
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %961

961:                                              ; preds = %1346, %960
  %962 = load i32, ptr %37, align 4, !tbaa !11
  %963 = load i32, ptr %20, align 4, !tbaa !11
  %964 = icmp sle i32 %962, %963
  br i1 %964, label %965, label %1349

965:                                              ; preds = %961
  %966 = load ptr, ptr %18, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.numjac_workspace, ptr %966, i32 0, i32 11
  %968 = load ptr, ptr %967, align 8, !tbaa !57
  %969 = load i32, ptr %37, align 4, !tbaa !11
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds i32, ptr %968, i64 %970
  %972 = load i32, ptr %971, align 4, !tbaa !11
  %973 = icmp eq i32 %972, 1
  br i1 %973, label %974, label %1345

974:                                              ; preds = %965
  %975 = load ptr, ptr %18, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.numjac_workspace, ptr %975, i32 0, i32 2
  %977 = load ptr, ptr %976, align 8, !tbaa !46
  %978 = load i32, ptr %37, align 4, !tbaa !11
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds double, ptr %977, i64 %979
  %981 = load double, ptr %980, align 8, !tbaa !9
  %982 = load double, ptr %25, align 8, !tbaa !9
  %983 = load ptr, ptr %18, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.numjac_workspace, ptr %983, i32 0, i32 6
  %985 = load ptr, ptr %984, align 8, !tbaa !59
  %986 = load i32, ptr %37, align 4, !tbaa !11
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds double, ptr %985, i64 %987
  %989 = load double, ptr %988, align 8, !tbaa !9
  %990 = fmul double %982, %989
  %991 = fcmp ole double %981, %990
  br i1 %991, label %992, label %1345

992:                                              ; preds = %974
  %993 = load ptr, ptr %49, align 8, !tbaa !5
  %994 = load i32, ptr %37, align 4, !tbaa !11
  %995 = sext i32 %994 to i64
  %996 = getelementptr inbounds double, ptr %993, i64 %995
  %997 = load double, ptr %996, align 8, !tbaa !9
  %998 = call double @sqrt(double noundef %997) #5
  %999 = load double, ptr %29, align 8, !tbaa !9
  %1000 = fcmp olt double %998, %999
  br i1 %1000, label %1001, label %1008

1001:                                             ; preds = %992
  %1002 = load ptr, ptr %49, align 8, !tbaa !5
  %1003 = load i32, ptr %37, align 4, !tbaa !11
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds double, ptr %1002, i64 %1004
  %1006 = load double, ptr %1005, align 8, !tbaa !9
  %1007 = call double @sqrt(double noundef %1006) #5
  br label %1010

1008:                                             ; preds = %992
  %1009 = load double, ptr %29, align 8, !tbaa !9
  br label %1010

1010:                                             ; preds = %1008, %1001
  %1011 = phi double [ %1007, %1001 ], [ %1009, %1008 ]
  store double %1011, ptr %32, align 8, !tbaa !9
  %1012 = load ptr, ptr %15, align 8, !tbaa !5
  %1013 = load i32, ptr %37, align 4, !tbaa !11
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds double, ptr %1012, i64 %1014
  %1016 = load double, ptr %1015, align 8, !tbaa !9
  %1017 = load double, ptr %32, align 8, !tbaa !9
  %1018 = load ptr, ptr %18, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.numjac_workspace, ptr %1018, i32 0, i32 0
  %1020 = load ptr, ptr %1019, align 8, !tbaa !22
  %1021 = load i32, ptr %37, align 4, !tbaa !11
  %1022 = sext i32 %1021 to i64
  %1023 = getelementptr inbounds double, ptr %1020, i64 %1022
  %1024 = load double, ptr %1023, align 8, !tbaa !9
  %1025 = call double @llvm.fmuladd.f64(double %1017, double %1024, double %1016)
  %1026 = load ptr, ptr %15, align 8, !tbaa !5
  %1027 = load i32, ptr %37, align 4, !tbaa !11
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds double, ptr %1026, i64 %1028
  %1030 = load double, ptr %1029, align 8, !tbaa !9
  %1031 = fsub double %1025, %1030
  store double %1031, ptr %34, align 8, !tbaa !9
  %1032 = load double, ptr %32, align 8, !tbaa !9
  %1033 = load ptr, ptr %49, align 8, !tbaa !5
  %1034 = load i32, ptr %37, align 4, !tbaa !11
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds double, ptr %1033, i64 %1035
  %1037 = load double, ptr %1036, align 8, !tbaa !9
  %1038 = fcmp une double %1032, %1037
  br i1 %1038, label %1039, label %1344

1039:                                             ; preds = %1010
  %1040 = load double, ptr %34, align 8, !tbaa !9
  %1041 = fcmp une double %1040, 0.000000e+00
  br i1 %1041, label %1042, label %1344

1042:                                             ; preds = %1039
  %1043 = load ptr, ptr %16, align 8, !tbaa !5
  %1044 = load i32, ptr %37, align 4, !tbaa !11
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds double, ptr %1043, i64 %1045
  %1047 = load double, ptr %1046, align 8, !tbaa !9
  %1048 = fcmp oge double %1047, 0.000000e+00
  br i1 %1048, label %1049, label %1052

1049:                                             ; preds = %1042
  %1050 = load double, ptr %34, align 8, !tbaa !9
  %1051 = call double @llvm.fabs.f64(double %1050)
  store double %1051, ptr %34, align 8, !tbaa !9
  br label %1056

1052:                                             ; preds = %1042
  %1053 = load double, ptr %34, align 8, !tbaa !9
  %1054 = call double @llvm.fabs.f64(double %1053)
  %1055 = fneg double %1054
  store double %1055, ptr %34, align 8, !tbaa !9
  br label %1056

1056:                                             ; preds = %1052, %1049
  %1057 = load ptr, ptr %15, align 8, !tbaa !5
  %1058 = load i32, ptr %37, align 4, !tbaa !11
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds double, ptr %1057, i64 %1059
  %1061 = load double, ptr %1060, align 8, !tbaa !9
  %1062 = load double, ptr %34, align 8, !tbaa !9
  %1063 = fadd double %1061, %1062
  %1064 = load ptr, ptr %18, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.numjac_workspace, ptr %1064, i32 0, i32 8
  %1066 = load ptr, ptr %1065, align 8, !tbaa !40
  %1067 = load i32, ptr %37, align 4, !tbaa !11
  %1068 = sext i32 %1067 to i64
  %1069 = getelementptr inbounds double, ptr %1066, i64 %1068
  store double %1063, ptr %1069, align 8, !tbaa !9
  %1070 = load ptr, ptr %13, align 8, !tbaa !5
  %1071 = load double, ptr %14, align 8, !tbaa !9
  %1072 = load ptr, ptr %18, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.numjac_workspace, ptr %1072, i32 0, i32 8
  %1074 = load ptr, ptr %1073, align 8, !tbaa !40
  %1075 = getelementptr inbounds double, ptr %1074, i64 1
  %1076 = load ptr, ptr %18, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.numjac_workspace, ptr %1076, i32 0, i32 7
  %1078 = load ptr, ptr %1077, align 8, !tbaa !42
  %1079 = getelementptr inbounds double, ptr %1078, i64 1
  %1080 = load ptr, ptr %22, align 8, !tbaa !5
  %1081 = load ptr, ptr %23, align 8, !tbaa !5
  %1082 = call i32 %1070(double noundef %1071, ptr noundef %1075, ptr noundef %1079, ptr noundef %1080, ptr noundef %1081)
  %1083 = icmp eq i32 %1082, 1
  br i1 %1083, label %1084, label %1089

1084:                                             ; preds = %1056
  call void @llvm.lifetime.start.p0(i64 2048, ptr %54) #5
  %1085 = getelementptr inbounds [2048 x i8], ptr %54, i64 0, i64 0
  %1086 = load ptr, ptr %23, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1085, ptr noundef @.str.3, ptr noundef @.str.37, ptr noundef %1086)
  %1087 = load ptr, ptr %23, align 8, !tbaa !5
  %1088 = getelementptr inbounds [2048 x i8], ptr %54, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1087, ptr noundef @.str.2, ptr noundef @__func__.numjac, i32 noundef 1392, ptr noundef %1088)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %54) #5
  store i32 1, ptr %12, align 4
  store i32 1, ptr %53, align 4
  br label %1557

1089:                                             ; preds = %1056
  %1090 = load ptr, ptr %21, align 8, !tbaa !5
  %1091 = load i32, ptr %1090, align 4, !tbaa !11
  %1092 = add nsw i32 %1091, 1
  store i32 %1092, ptr %1090, align 4, !tbaa !11
  %1093 = load ptr, ptr %15, align 8, !tbaa !5
  %1094 = load i32, ptr %37, align 4, !tbaa !11
  %1095 = sext i32 %1094 to i64
  %1096 = getelementptr inbounds double, ptr %1093, i64 %1095
  %1097 = load double, ptr %1096, align 8, !tbaa !9
  %1098 = load ptr, ptr %18, align 8, !tbaa !5
  %1099 = getelementptr inbounds %struct.numjac_workspace, ptr %1098, i32 0, i32 8
  %1100 = load ptr, ptr %1099, align 8, !tbaa !40
  %1101 = load i32, ptr %37, align 4, !tbaa !11
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds double, ptr %1100, i64 %1102
  store double %1097, ptr %1103, align 8, !tbaa !9
  store i32 1, ptr %38, align 4, !tbaa !11
  store double 0.000000e+00, ptr %47, align 8, !tbaa !9
  store double 0.000000e+00, ptr %46, align 8, !tbaa !9
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %1104

1104:                                             ; preds = %1151, %1089
  %1105 = load i32, ptr %36, align 4, !tbaa !11
  %1106 = load i32, ptr %20, align 4, !tbaa !11
  %1107 = icmp sle i32 %1105, %1106
  br i1 %1107, label %1108, label %1154

1108:                                             ; preds = %1104
  %1109 = load double, ptr %46, align 8, !tbaa !9
  %1110 = load double, ptr %47, align 8, !tbaa !9
  %1111 = call double @llvm.fabs.f64(double %1110)
  %1112 = fcmp olt double %1109, %1111
  br i1 %1112, label %1113, label %1116

1113:                                             ; preds = %1108
  %1114 = load double, ptr %47, align 8, !tbaa !9
  %1115 = call double @llvm.fabs.f64(double %1114)
  br label %1118

1116:                                             ; preds = %1108
  %1117 = load double, ptr %46, align 8, !tbaa !9
  br label %1118

1118:                                             ; preds = %1116, %1113
  %1119 = phi double [ %1115, %1113 ], [ %1117, %1116 ]
  store double %1119, ptr %46, align 8, !tbaa !9
  %1120 = load ptr, ptr %18, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.numjac_workspace, ptr %1120, i32 0, i32 7
  %1122 = load ptr, ptr %1121, align 8, !tbaa !42
  %1123 = load i32, ptr %36, align 4, !tbaa !11
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds double, ptr %1122, i64 %1124
  %1126 = load double, ptr %1125, align 8, !tbaa !9
  %1127 = load ptr, ptr %16, align 8, !tbaa !5
  %1128 = load i32, ptr %36, align 4, !tbaa !11
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds double, ptr %1127, i64 %1129
  %1131 = load double, ptr %1130, align 8, !tbaa !9
  %1132 = fsub double %1126, %1131
  store double %1132, ptr %47, align 8, !tbaa !9
  %1133 = load double, ptr %47, align 8, !tbaa !9
  %1134 = load double, ptr %34, align 8, !tbaa !9
  %1135 = fdiv double %1133, %1134
  %1136 = load ptr, ptr %18, align 8, !tbaa !5
  %1137 = getelementptr inbounds %struct.numjac_workspace, ptr %1136, i32 0, i32 9
  %1138 = load ptr, ptr %1137, align 8, !tbaa !61
  %1139 = load i32, ptr %36, align 4, !tbaa !11
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds double, ptr %1138, i64 %1140
  store double %1135, ptr %1141, align 8, !tbaa !9
  %1142 = load double, ptr %47, align 8, !tbaa !9
  %1143 = call double @llvm.fabs.f64(double %1142)
  %1144 = load double, ptr %46, align 8, !tbaa !9
  %1145 = fcmp oge double %1143, %1144
  br i1 %1145, label %1146, label %1150

1146:                                             ; preds = %1118
  %1147 = load i32, ptr %36, align 4, !tbaa !11
  store i32 %1147, ptr %38, align 4, !tbaa !11
  %1148 = load double, ptr %47, align 8, !tbaa !9
  %1149 = call double @llvm.fabs.f64(double %1148)
  store double %1149, ptr %33, align 8, !tbaa !9
  br label %1150

1150:                                             ; preds = %1146, %1118
  br label %1151

1151:                                             ; preds = %1150
  %1152 = load i32, ptr %36, align 4, !tbaa !11
  %1153 = add nsw i32 %1152, 1
  store i32 %1153, ptr %36, align 4, !tbaa !11
  br label %1104, !llvm.loop !62

1154:                                             ; preds = %1104
  %1155 = load double, ptr %33, align 8, !tbaa !9
  %1156 = load double, ptr %34, align 8, !tbaa !9
  %1157 = call double @llvm.fabs.f64(double %1156)
  %1158 = fmul double %1155, %1157
  %1159 = load double, ptr %32, align 8, !tbaa !9
  %1160 = fmul double %1158, %1159
  store double %1160, ptr %39, align 8, !tbaa !9
  %1161 = load ptr, ptr %18, align 8, !tbaa !5
  %1162 = getelementptr inbounds %struct.numjac_workspace, ptr %1161, i32 0, i32 2
  %1163 = load ptr, ptr %1162, align 8, !tbaa !46
  %1164 = load i32, ptr %37, align 4, !tbaa !11
  %1165 = sext i32 %1164 to i64
  %1166 = getelementptr inbounds double, ptr %1163, i64 %1165
  %1167 = load double, ptr %1166, align 8, !tbaa !9
  %1168 = load ptr, ptr %18, align 8, !tbaa !5
  %1169 = getelementptr inbounds %struct.numjac_workspace, ptr %1168, i32 0, i32 1
  %1170 = load ptr, ptr %1169, align 8, !tbaa !24
  %1171 = load i32, ptr %37, align 4, !tbaa !11
  %1172 = sext i32 %1171 to i64
  %1173 = getelementptr inbounds double, ptr %1170, i64 %1172
  %1174 = load double, ptr %1173, align 8, !tbaa !9
  %1175 = call double @llvm.fabs.f64(double %1174)
  %1176 = fmul double %1167, %1175
  store double %1176, ptr %40, align 8, !tbaa !9
  %1177 = load double, ptr %39, align 8, !tbaa !9
  %1178 = load double, ptr %40, align 8, !tbaa !9
  %1179 = fcmp oge double %1177, %1178
  br i1 %1179, label %1180, label %1343

1180:                                             ; preds = %1154
  %1181 = load ptr, ptr %17, align 8, !tbaa !5
  %1182 = getelementptr inbounds %struct.jacobian, ptr %1181, i32 0, i32 5
  %1183 = load i32, ptr %1182, align 8, !tbaa !16
  %1184 = icmp ne i32 %1183, 0
  br i1 %1184, label %1185, label %1231

1185:                                             ; preds = %1180
  %1186 = load ptr, ptr %17, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.jacobian, ptr %1186, i32 0, i32 8
  %1188 = load i32, ptr %1187, align 4, !tbaa !29
  %1189 = load ptr, ptr %17, align 8, !tbaa !5
  %1190 = getelementptr inbounds %struct.jacobian, ptr %1189, i32 0, i32 9
  %1191 = load i32, ptr %1190, align 8, !tbaa !30
  %1192 = icmp sge i32 %1188, %1191
  br i1 %1192, label %1193, label %1231

1193:                                             ; preds = %1185
  %1194 = load ptr, ptr %50, align 8, !tbaa !5
  %1195 = load i32, ptr %37, align 4, !tbaa !11
  %1196 = sub nsw i32 %1195, 1
  %1197 = sext i32 %1196 to i64
  %1198 = getelementptr inbounds i32, ptr %1194, i64 %1197
  %1199 = load i32, ptr %1198, align 4, !tbaa !11
  store i32 %1199, ptr %36, align 4, !tbaa !11
  br label %1200

1200:                                             ; preds = %1227, %1193
  %1201 = load i32, ptr %36, align 4, !tbaa !11
  %1202 = load ptr, ptr %50, align 8, !tbaa !5
  %1203 = load i32, ptr %37, align 4, !tbaa !11
  %1204 = sext i32 %1203 to i64
  %1205 = getelementptr inbounds i32, ptr %1202, i64 %1204
  %1206 = load i32, ptr %1205, align 4, !tbaa !11
  %1207 = icmp slt i32 %1201, %1206
  br i1 %1207, label %1208, label %1230

1208:                                             ; preds = %1200
  %1209 = load ptr, ptr %18, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.numjac_workspace, ptr %1209, i32 0, i32 9
  %1211 = load ptr, ptr %1210, align 8, !tbaa !61
  %1212 = load ptr, ptr %51, align 8, !tbaa !5
  %1213 = load i32, ptr %36, align 4, !tbaa !11
  %1214 = sext i32 %1213 to i64
  %1215 = getelementptr inbounds i32, ptr %1212, i64 %1214
  %1216 = load i32, ptr %1215, align 4, !tbaa !11
  %1217 = add nsw i32 %1216, 1
  %1218 = sext i32 %1217 to i64
  %1219 = getelementptr inbounds double, ptr %1211, i64 %1218
  %1220 = load double, ptr %1219, align 8, !tbaa !9
  %1221 = load ptr, ptr %17, align 8, !tbaa !5
  %1222 = getelementptr inbounds %struct.jacobian, ptr %1221, i32 0, i32 18
  %1223 = load ptr, ptr %1222, align 8, !tbaa !47
  %1224 = load i32, ptr %36, align 4, !tbaa !11
  %1225 = sext i32 %1224 to i64
  %1226 = getelementptr inbounds double, ptr %1223, i64 %1225
  store double %1220, ptr %1226, align 8, !tbaa !9
  br label %1227

1227:                                             ; preds = %1208
  %1228 = load i32, ptr %36, align 4, !tbaa !11
  %1229 = add nsw i32 %1228, 1
  store i32 %1229, ptr %36, align 4, !tbaa !11
  br label %1200, !llvm.loop !63

1230:                                             ; preds = %1200
  br label %1256

1231:                                             ; preds = %1185, %1180
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %1232

1232:                                             ; preds = %1252, %1231
  %1233 = load i32, ptr %36, align 4, !tbaa !11
  %1234 = load i32, ptr %20, align 4, !tbaa !11
  %1235 = icmp sle i32 %1233, %1234
  br i1 %1235, label %1236, label %1255

1236:                                             ; preds = %1232
  %1237 = load ptr, ptr %18, align 8, !tbaa !5
  %1238 = getelementptr inbounds %struct.numjac_workspace, ptr %1237, i32 0, i32 9
  %1239 = load ptr, ptr %1238, align 8, !tbaa !61
  %1240 = load i32, ptr %36, align 4, !tbaa !11
  %1241 = sext i32 %1240 to i64
  %1242 = getelementptr inbounds double, ptr %1239, i64 %1241
  %1243 = load double, ptr %1242, align 8, !tbaa !9
  %1244 = load ptr, ptr %48, align 8, !tbaa !5
  %1245 = load i32, ptr %36, align 4, !tbaa !11
  %1246 = sext i32 %1245 to i64
  %1247 = getelementptr inbounds ptr, ptr %1244, i64 %1246
  %1248 = load ptr, ptr %1247, align 8, !tbaa !5
  %1249 = load i32, ptr %37, align 4, !tbaa !11
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds double, ptr %1248, i64 %1250
  store double %1243, ptr %1251, align 8, !tbaa !9
  br label %1252

1252:                                             ; preds = %1236
  %1253 = load i32, ptr %36, align 4, !tbaa !11
  %1254 = add nsw i32 %1253, 1
  store i32 %1254, ptr %36, align 4, !tbaa !11
  br label %1232, !llvm.loop !64

1255:                                             ; preds = %1232
  br label %1256

1256:                                             ; preds = %1255, %1230
  %1257 = load ptr, ptr %18, align 8, !tbaa !5
  %1258 = getelementptr inbounds %struct.numjac_workspace, ptr %1257, i32 0, i32 7
  %1259 = load ptr, ptr %1258, align 8, !tbaa !42
  %1260 = load i32, ptr %38, align 4, !tbaa !11
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds double, ptr %1259, i64 %1261
  %1263 = load double, ptr %1262, align 8, !tbaa !9
  %1264 = call double @llvm.fabs.f64(double %1263)
  %1265 = load ptr, ptr %18, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.numjac_workspace, ptr %1265, i32 0, i32 4
  %1267 = load ptr, ptr %1266, align 8, !tbaa !53
  %1268 = load i32, ptr %38, align 4, !tbaa !11
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds double, ptr %1267, i64 %1269
  %1271 = load double, ptr %1270, align 8, !tbaa !9
  %1272 = fcmp olt double %1264, %1271
  br i1 %1272, label %1273, label %1281

1273:                                             ; preds = %1256
  %1274 = load ptr, ptr %18, align 8, !tbaa !5
  %1275 = getelementptr inbounds %struct.numjac_workspace, ptr %1274, i32 0, i32 4
  %1276 = load ptr, ptr %1275, align 8, !tbaa !53
  %1277 = load i32, ptr %38, align 4, !tbaa !11
  %1278 = sext i32 %1277 to i64
  %1279 = getelementptr inbounds double, ptr %1276, i64 %1278
  %1280 = load double, ptr %1279, align 8, !tbaa !9
  br label %1290

1281:                                             ; preds = %1256
  %1282 = load ptr, ptr %18, align 8, !tbaa !5
  %1283 = getelementptr inbounds %struct.numjac_workspace, ptr %1282, i32 0, i32 7
  %1284 = load ptr, ptr %1283, align 8, !tbaa !42
  %1285 = load i32, ptr %38, align 4, !tbaa !11
  %1286 = sext i32 %1285 to i64
  %1287 = getelementptr inbounds double, ptr %1284, i64 %1286
  %1288 = load double, ptr %1287, align 8, !tbaa !9
  %1289 = call double @llvm.fabs.f64(double %1288)
  br label %1290

1290:                                             ; preds = %1281, %1273
  %1291 = phi double [ %1280, %1273 ], [ %1289, %1281 ]
  store double %1291, ptr %35, align 8, !tbaa !9
  %1292 = load double, ptr %33, align 8, !tbaa !9
  %1293 = load double, ptr %26, align 8, !tbaa !9
  %1294 = load double, ptr %35, align 8, !tbaa !9
  %1295 = fmul double %1293, %1294
  %1296 = fcmp ole double %1292, %1295
  br i1 %1296, label %1297, label %1313

1297:                                             ; preds = %1290
  %1298 = load double, ptr %32, align 8, !tbaa !9
  %1299 = fmul double 1.000000e+01, %1298
  %1300 = load double, ptr %29, align 8, !tbaa !9
  %1301 = fcmp olt double %1299, %1300
  br i1 %1301, label %1302, label %1305

1302:                                             ; preds = %1297
  %1303 = load double, ptr %32, align 8, !tbaa !9
  %1304 = fmul double 1.000000e+01, %1303
  br label %1307

1305:                                             ; preds = %1297
  %1306 = load double, ptr %29, align 8, !tbaa !9
  br label %1307

1307:                                             ; preds = %1305, %1302
  %1308 = phi double [ %1304, %1302 ], [ %1306, %1305 ]
  %1309 = load ptr, ptr %49, align 8, !tbaa !5
  %1310 = load i32, ptr %37, align 4, !tbaa !11
  %1311 = sext i32 %1310 to i64
  %1312 = getelementptr inbounds double, ptr %1309, i64 %1311
  store double %1308, ptr %1312, align 8, !tbaa !9
  br label %1342

1313:                                             ; preds = %1290
  %1314 = load double, ptr %33, align 8, !tbaa !9
  %1315 = load double, ptr %27, align 8, !tbaa !9
  %1316 = load double, ptr %35, align 8, !tbaa !9
  %1317 = fmul double %1315, %1316
  %1318 = fcmp ogt double %1314, %1317
  br i1 %1318, label %1319, label %1335

1319:                                             ; preds = %1313
  %1320 = load double, ptr %32, align 8, !tbaa !9
  %1321 = fmul double 1.000000e-01, %1320
  %1322 = load double, ptr %28, align 8, !tbaa !9
  %1323 = fcmp olt double %1321, %1322
  br i1 %1323, label %1324, label %1326

1324:                                             ; preds = %1319
  %1325 = load double, ptr %28, align 8, !tbaa !9
  br label %1329

1326:                                             ; preds = %1319
  %1327 = load double, ptr %32, align 8, !tbaa !9
  %1328 = fmul double 1.000000e-01, %1327
  br label %1329

1329:                                             ; preds = %1326, %1324
  %1330 = phi double [ %1325, %1324 ], [ %1328, %1326 ]
  %1331 = load ptr, ptr %49, align 8, !tbaa !5
  %1332 = load i32, ptr %37, align 4, !tbaa !11
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds double, ptr %1331, i64 %1333
  store double %1330, ptr %1334, align 8, !tbaa !9
  br label %1341

1335:                                             ; preds = %1313
  %1336 = load double, ptr %32, align 8, !tbaa !9
  %1337 = load ptr, ptr %49, align 8, !tbaa !5
  %1338 = load i32, ptr %37, align 4, !tbaa !11
  %1339 = sext i32 %1338 to i64
  %1340 = getelementptr inbounds double, ptr %1337, i64 %1339
  store double %1336, ptr %1340, align 8, !tbaa !9
  br label %1341

1341:                                             ; preds = %1335, %1329
  br label %1342

1342:                                             ; preds = %1341, %1307
  br label %1343

1343:                                             ; preds = %1342, %1154
  br label %1344

1344:                                             ; preds = %1343, %1039, %1010
  br label %1345

1345:                                             ; preds = %1344, %974, %965
  br label %1346

1346:                                             ; preds = %1345
  %1347 = load i32, ptr %37, align 4, !tbaa !11
  %1348 = add nsw i32 %1347, 1
  store i32 %1348, ptr %37, align 4, !tbaa !11
  br label %961, !llvm.loop !65

1349:                                             ; preds = %961
  br label %1350

1350:                                             ; preds = %1349, %898
  %1351 = load ptr, ptr %17, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.jacobian, ptr %1351, i32 0, i32 5
  %1353 = load i32, ptr %1352, align 8, !tbaa !16
  %1354 = icmp ne i32 %1353, 0
  br i1 %1354, label %1355, label %1556

1355:                                             ; preds = %1350
  %1356 = load ptr, ptr %17, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.jacobian, ptr %1356, i32 0, i32 8
  %1358 = load i32, ptr %1357, align 4, !tbaa !29
  %1359 = load ptr, ptr %17, align 8, !tbaa !5
  %1360 = getelementptr inbounds %struct.jacobian, ptr %1359, i32 0, i32 9
  %1361 = load i32, ptr %1360, align 8, !tbaa !30
  %1362 = icmp slt i32 %1358, %1361
  br i1 %1362, label %1363, label %1556

1363:                                             ; preds = %1355
  store i32 0, ptr %44, align 4, !tbaa !11
  %1364 = load ptr, ptr %50, align 8, !tbaa !5
  %1365 = getelementptr inbounds i32, ptr %1364, i64 0
  store i32 0, ptr %1365, align 4, !tbaa !11
  store i32 0, ptr %31, align 4, !tbaa !11
  store i32 1, ptr %37, align 4, !tbaa !11
  br label %1366

1366:                                             ; preds = %1528, %1363
  %1367 = load i32, ptr %37, align 4, !tbaa !11
  %1368 = load i32, ptr %20, align 4, !tbaa !11
  %1369 = icmp sle i32 %1367, %1368
  br i1 %1369, label %1370, label %1531

1370:                                             ; preds = %1366
  store i32 1, ptr %36, align 4, !tbaa !11
  br label %1371

1371:                                             ; preds = %1513, %1370
  %1372 = load i32, ptr %36, align 4, !tbaa !11
  %1373 = load i32, ptr %20, align 4, !tbaa !11
  %1374 = icmp sle i32 %1372, %1373
  br i1 %1374, label %1375, label %1516

1375:                                             ; preds = %1371
  %1376 = load i32, ptr %36, align 4, !tbaa !11
  %1377 = load i32, ptr %37, align 4, !tbaa !11
  %1378 = icmp eq i32 %1376, %1377
  br i1 %1378, label %1391, label %1379

1379:                                             ; preds = %1375
  %1380 = load ptr, ptr %48, align 8, !tbaa !5
  %1381 = load i32, ptr %36, align 4, !tbaa !11
  %1382 = sext i32 %1381 to i64
  %1383 = getelementptr inbounds ptr, ptr %1380, i64 %1382
  %1384 = load ptr, ptr %1383, align 8, !tbaa !5
  %1385 = load i32, ptr %37, align 4, !tbaa !11
  %1386 = sext i32 %1385 to i64
  %1387 = getelementptr inbounds double, ptr %1384, i64 %1386
  %1388 = load double, ptr %1387, align 8, !tbaa !9
  %1389 = call double @llvm.fabs.f64(double %1388)
  %1390 = fcmp une double %1389, 0.000000e+00
  br i1 %1390, label %1391, label %1512

1391:                                             ; preds = %1379, %1375
  %1392 = load i32, ptr %44, align 4, !tbaa !11
  %1393 = load ptr, ptr %17, align 8, !tbaa !5
  %1394 = getelementptr inbounds %struct.jacobian, ptr %1393, i32 0, i32 7
  %1395 = load i32, ptr %1394, align 8, !tbaa !66
  %1396 = icmp sge i32 %1392, %1395
  br i1 %1396, label %1397, label %1400

1397:                                             ; preds = %1391
  %1398 = load ptr, ptr %17, align 8, !tbaa !5
  %1399 = getelementptr inbounds %struct.jacobian, ptr %1398, i32 0, i32 5
  store i32 0, ptr %1399, align 8, !tbaa !16
  br label %1516

1400:                                             ; preds = %1391
  %1401 = load i32, ptr %31, align 4, !tbaa !11
  %1402 = icmp eq i32 %1401, 0
  br i1 %1402, label %1403, label %1427

1403:                                             ; preds = %1400
  %1404 = load ptr, ptr %17, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct.jacobian, ptr %1404, i32 0, i32 11
  %1406 = load i32, ptr %1405, align 8, !tbaa !67
  %1407 = icmp eq i32 %1406, 1
  br i1 %1407, label %1408, label %1427

1408:                                             ; preds = %1403
  %1409 = load i32, ptr %44, align 4, !tbaa !11
  %1410 = load ptr, ptr %50, align 8, !tbaa !5
  %1411 = load i32, ptr %37, align 4, !tbaa !11
  %1412 = sub nsw i32 %1411, 1
  %1413 = sext i32 %1412 to i64
  %1414 = getelementptr inbounds i32, ptr %1410, i64 %1413
  %1415 = load i32, ptr %1414, align 4, !tbaa !11
  %1416 = icmp slt i32 %1409, %1415
  br i1 %1416, label %1425, label %1417

1417:                                             ; preds = %1408
  %1418 = load i32, ptr %44, align 4, !tbaa !11
  %1419 = load ptr, ptr %50, align 8, !tbaa !5
  %1420 = load i32, ptr %37, align 4, !tbaa !11
  %1421 = sext i32 %1420 to i64
  %1422 = getelementptr inbounds i32, ptr %1419, i64 %1421
  %1423 = load i32, ptr %1422, align 4, !tbaa !11
  %1424 = icmp sge i32 %1418, %1423
  br i1 %1424, label %1425, label %1426

1425:                                             ; preds = %1417, %1408
  store i32 1, ptr %31, align 4, !tbaa !11
  br label %1426

1426:                                             ; preds = %1425, %1417
  br label %1427

1427:                                             ; preds = %1426, %1403, %1400
  %1428 = load i32, ptr %31, align 4, !tbaa !11
  %1429 = icmp eq i32 %1428, 0
  br i1 %1429, label %1430, label %1488

1430:                                             ; preds = %1427
  %1431 = load ptr, ptr %17, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.jacobian, ptr %1431, i32 0, i32 11
  %1433 = load i32, ptr %1432, align 8, !tbaa !67
  %1434 = icmp eq i32 %1433, 1
  br i1 %1434, label %1435, label %1488

1435:                                             ; preds = %1430
  %1436 = load ptr, ptr %51, align 8, !tbaa !5
  %1437 = load i32, ptr %44, align 4, !tbaa !11
  %1438 = sext i32 %1437 to i64
  %1439 = getelementptr inbounds i32, ptr %1436, i64 %1438
  %1440 = load i32, ptr %1439, align 4, !tbaa !11
  %1441 = load i32, ptr %36, align 4, !tbaa !11
  %1442 = sub nsw i32 %1441, 1
  %1443 = icmp ne i32 %1440, %1442
  br i1 %1443, label %1444, label %1487

1444:                                             ; preds = %1435
  store i32 1, ptr %31, align 4, !tbaa !11
  %1445 = load i32, ptr %44, align 4, !tbaa !11
  store i32 %1445, ptr %45, align 4, !tbaa !11
  br label %1446

1446:                                             ; preds = %1483, %1444
  %1447 = load i32, ptr %45, align 4, !tbaa !11
  %1448 = load ptr, ptr %50, align 8, !tbaa !5
  %1449 = load i32, ptr %37, align 4, !tbaa !11
  %1450 = sext i32 %1449 to i64
  %1451 = getelementptr inbounds i32, ptr %1448, i64 %1450
  %1452 = load i32, ptr %1451, align 4, !tbaa !11
  %1453 = icmp slt i32 %1447, %1452
  br i1 %1453, label %1454, label %1463

1454:                                             ; preds = %1446
  %1455 = load ptr, ptr %51, align 8, !tbaa !5
  %1456 = load i32, ptr %45, align 4, !tbaa !11
  %1457 = sext i32 %1456 to i64
  %1458 = getelementptr inbounds i32, ptr %1455, i64 %1457
  %1459 = load i32, ptr %1458, align 4, !tbaa !11
  %1460 = load i32, ptr %36, align 4, !tbaa !11
  %1461 = sub nsw i32 %1460, 1
  %1462 = icmp sle i32 %1459, %1461
  br label %1463

1463:                                             ; preds = %1454, %1446
  %1464 = phi i1 [ false, %1446 ], [ %1462, %1454 ]
  br i1 %1464, label %1465, label %1486

1465:                                             ; preds = %1463
  %1466 = load ptr, ptr %51, align 8, !tbaa !5
  %1467 = load i32, ptr %45, align 4, !tbaa !11
  %1468 = sext i32 %1467 to i64
  %1469 = getelementptr inbounds i32, ptr %1466, i64 %1468
  %1470 = load i32, ptr %1469, align 4, !tbaa !11
  %1471 = load i32, ptr %36, align 4, !tbaa !11
  %1472 = sub nsw i32 %1471, 1
  %1473 = icmp eq i32 %1470, %1472
  br i1 %1473, label %1474, label %1476

1474:                                             ; preds = %1465
  store i32 0, ptr %31, align 4, !tbaa !11
  %1475 = load i32, ptr %45, align 4, !tbaa !11
  store i32 %1475, ptr %44, align 4, !tbaa !11
  br label %1486

1476:                                             ; preds = %1465
  %1477 = load ptr, ptr %17, align 8, !tbaa !5
  %1478 = getelementptr inbounds %struct.jacobian, ptr %1477, i32 0, i32 18
  %1479 = load ptr, ptr %1478, align 8, !tbaa !47
  %1480 = load i32, ptr %45, align 4, !tbaa !11
  %1481 = sext i32 %1480 to i64
  %1482 = getelementptr inbounds double, ptr %1479, i64 %1481
  store double 0.000000e+00, ptr %1482, align 8, !tbaa !9
  br label %1483

1483:                                             ; preds = %1476
  %1484 = load i32, ptr %45, align 4, !tbaa !11
  %1485 = add nsw i32 %1484, 1
  store i32 %1485, ptr %45, align 4, !tbaa !11
  br label %1446, !llvm.loop !68

1486:                                             ; preds = %1474, %1463
  br label %1487

1487:                                             ; preds = %1486, %1435
  br label %1488

1488:                                             ; preds = %1487, %1430, %1427
  %1489 = load i32, ptr %36, align 4, !tbaa !11
  %1490 = sub nsw i32 %1489, 1
  %1491 = load ptr, ptr %51, align 8, !tbaa !5
  %1492 = load i32, ptr %44, align 4, !tbaa !11
  %1493 = sext i32 %1492 to i64
  %1494 = getelementptr inbounds i32, ptr %1491, i64 %1493
  store i32 %1490, ptr %1494, align 4, !tbaa !11
  %1495 = load ptr, ptr %48, align 8, !tbaa !5
  %1496 = load i32, ptr %36, align 4, !tbaa !11
  %1497 = sext i32 %1496 to i64
  %1498 = getelementptr inbounds ptr, ptr %1495, i64 %1497
  %1499 = load ptr, ptr %1498, align 8, !tbaa !5
  %1500 = load i32, ptr %37, align 4, !tbaa !11
  %1501 = sext i32 %1500 to i64
  %1502 = getelementptr inbounds double, ptr %1499, i64 %1501
  %1503 = load double, ptr %1502, align 8, !tbaa !9
  %1504 = load ptr, ptr %17, align 8, !tbaa !5
  %1505 = getelementptr inbounds %struct.jacobian, ptr %1504, i32 0, i32 18
  %1506 = load ptr, ptr %1505, align 8, !tbaa !47
  %1507 = load i32, ptr %44, align 4, !tbaa !11
  %1508 = sext i32 %1507 to i64
  %1509 = getelementptr inbounds double, ptr %1506, i64 %1508
  store double %1503, ptr %1509, align 8, !tbaa !9
  %1510 = load i32, ptr %44, align 4, !tbaa !11
  %1511 = add nsw i32 %1510, 1
  store i32 %1511, ptr %44, align 4, !tbaa !11
  br label %1512

1512:                                             ; preds = %1488, %1379
  br label %1513

1513:                                             ; preds = %1512
  %1514 = load i32, ptr %36, align 4, !tbaa !11
  %1515 = add nsw i32 %1514, 1
  store i32 %1515, ptr %36, align 4, !tbaa !11
  br label %1371, !llvm.loop !69

1516:                                             ; preds = %1397, %1371
  %1517 = load ptr, ptr %17, align 8, !tbaa !5
  %1518 = getelementptr inbounds %struct.jacobian, ptr %1517, i32 0, i32 5
  %1519 = load i32, ptr %1518, align 8, !tbaa !16
  %1520 = icmp eq i32 %1519, 0
  br i1 %1520, label %1521, label %1522

1521:                                             ; preds = %1516
  br label %1531

1522:                                             ; preds = %1516
  %1523 = load i32, ptr %44, align 4, !tbaa !11
  %1524 = load ptr, ptr %50, align 8, !tbaa !5
  %1525 = load i32, ptr %37, align 4, !tbaa !11
  %1526 = sext i32 %1525 to i64
  %1527 = getelementptr inbounds i32, ptr %1524, i64 %1526
  store i32 %1523, ptr %1527, align 4, !tbaa !11
  br label %1528

1528:                                             ; preds = %1522
  %1529 = load i32, ptr %37, align 4, !tbaa !11
  %1530 = add nsw i32 %1529, 1
  store i32 %1530, ptr %37, align 4, !tbaa !11
  br label %1366, !llvm.loop !70

1531:                                             ; preds = %1521, %1366
  %1532 = load ptr, ptr %17, align 8, !tbaa !5
  %1533 = getelementptr inbounds %struct.jacobian, ptr %1532, i32 0, i32 5
  %1534 = load i32, ptr %1533, align 8, !tbaa !16
  %1535 = icmp eq i32 %1534, 1
  br i1 %1535, label %1536, label %1555

1536:                                             ; preds = %1531
  %1537 = load ptr, ptr %17, align 8, !tbaa !5
  %1538 = getelementptr inbounds %struct.jacobian, ptr %1537, i32 0, i32 11
  %1539 = load i32, ptr %1538, align 8, !tbaa !67
  %1540 = icmp eq i32 %1539, 1
  br i1 %1540, label %1541, label %1549

1541:                                             ; preds = %1536
  %1542 = load i32, ptr %31, align 4, !tbaa !11
  %1543 = icmp eq i32 %1542, 0
  br i1 %1543, label %1544, label %1549

1544:                                             ; preds = %1541
  %1545 = load ptr, ptr %17, align 8, !tbaa !5
  %1546 = getelementptr inbounds %struct.jacobian, ptr %1545, i32 0, i32 8
  %1547 = load i32, ptr %1546, align 4, !tbaa !29
  %1548 = add nsw i32 %1547, 1
  store i32 %1548, ptr %1546, align 4, !tbaa !29
  br label %1552

1549:                                             ; preds = %1541, %1536
  %1550 = load ptr, ptr %17, align 8, !tbaa !5
  %1551 = getelementptr inbounds %struct.jacobian, ptr %1550, i32 0, i32 8
  store i32 0, ptr %1551, align 4, !tbaa !29
  br label %1552

1552:                                             ; preds = %1549, %1544
  %1553 = load ptr, ptr %17, align 8, !tbaa !5
  %1554 = getelementptr inbounds %struct.jacobian, ptr %1553, i32 0, i32 11
  store i32 1, ptr %1554, align 8, !tbaa !67
  br label %1555

1555:                                             ; preds = %1552, %1531
  br label %1556

1556:                                             ; preds = %1555, %1355, %1350
  store i32 0, ptr %12, align 4
  store i32 1, ptr %53, align 4
  br label %1557

1557:                                             ; preds = %1556, %1084, %502
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  %1558 = load i32, ptr %12, align 4
  ret i32 %1558
}

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

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #4

declare i32 @column_grouping(ptr noundef, ptr noundef, ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"jacobian", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !6, i64 80, !6, i64 88, !12, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136}
!15 = !{!14, !6, i64 8}
!16 = !{!14, !12, i64 40}
!17 = !{!14, !6, i64 104}
!18 = !{!19, !6, i64 16}
!19 = !{!"sparse_matrix", !12, i64 0, !12, i64 4, !12, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!20 = !{!19, !6, i64 24}
!21 = !{!14, !12, i64 68}
!22 = !{!23, !6, i64 0}
!23 = !{!"numjac_workspace", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96}
!24 = !{!23, !6, i64 8}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = distinct !{!28, !26}
!29 = !{!14, !12, i64 52}
!30 = !{!14, !12, i64 56}
!31 = !{!14, !12, i64 60}
!32 = !{!14, !6, i64 80}
!33 = !{!14, !6, i64 88}
!34 = !{!14, !12, i64 96}
!35 = !{!23, !6, i64 80}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = distinct !{!38, !26}
!39 = distinct !{!39, !26}
!40 = !{!23, !6, i64 64}
!41 = distinct !{!41, !26}
!42 = !{!23, !6, i64 56}
!43 = distinct !{!43, !26}
!44 = distinct !{!44, !26}
!45 = !{!23, !6, i64 96}
!46 = !{!23, !6, i64 16}
!47 = !{!14, !6, i64 112}
!48 = distinct !{!48, !26}
!49 = !{!23, !6, i64 24}
!50 = distinct !{!50, !26}
!51 = distinct !{!51, !26}
!52 = distinct !{!52, !26}
!53 = !{!23, !6, i64 32}
!54 = distinct !{!54, !26}
!55 = !{!23, !6, i64 40}
!56 = distinct !{!56, !26}
!57 = !{!23, !6, i64 88}
!58 = distinct !{!58, !26}
!59 = !{!23, !6, i64 48}
!60 = distinct !{!60, !26}
!61 = !{!23, !6, i64 72}
!62 = distinct !{!62, !26}
!63 = distinct !{!63, !26}
!64 = distinct !{!64, !26}
!65 = distinct !{!65, !26}
!66 = !{!14, !12, i64 48}
!67 = !{!14, !12, i64 64}
!68 = distinct !{!68, !26}
!69 = distinct !{!69, !26}
!70 = distinct !{!70, !26}


; 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.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [94 x i8], align 1
@__func__.numjac = external hidden unnamed_addr constant [7 x i8], align 1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @numjac(ptr nocapture noundef readonly %0, double noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef %4, ptr nocapture noundef readonly %5, double noundef %6, i32 noundef %7, ptr nocapture noundef %8, ptr noundef %9, ptr noundef %10) local_unnamed_addr #3 {
  %12 = ptrtoint ptr %2 to i64
  %13 = ptrtoint ptr %3 to i64
  %14 = alloca [2048 x i8], align 16
  %15 = alloca [2048 x i8], align 16
  %16 = load ptr, ptr %4, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %4, i64 8
  %18 = load ptr, ptr %17, align 8, !tbaa !11
  %19 = getelementptr inbounds i8, ptr %4, i64 40
  %20 = load i32, ptr %19, align 8, !tbaa !12
  %.not = icmp eq i32 %20, 0
  br i1 %.not, label %28, label %21

21:                                               ; preds = %11
  %22 = getelementptr inbounds i8, ptr %4, i64 104
  %23 = load ptr, ptr %22, align 8, !tbaa !13
  %24 = getelementptr inbounds i8, ptr %23, i64 16
  %25 = load ptr, ptr %24, align 8, !tbaa !14
  %26 = getelementptr inbounds i8, ptr %23, i64 24
  %27 = load ptr, ptr %26, align 8, !tbaa !16
  br label %28

28:                                               ; preds = %21, %11
  %.0470 = phi ptr [ %25, %21 ], [ null, %11 ]
  %.0 = phi ptr [ %27, %21 ], [ null, %11 ]
  %29 = getelementptr inbounds i8, ptr %4, i64 68
  store i32 1, ptr %29, align 4, !tbaa !17
  %.not528593 = icmp slt i32 %7, 1
  br i1 %.not528593, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %28
  %30 = load ptr, ptr %5, align 8, !tbaa !18
  %31 = getelementptr inbounds i8, ptr %5, i64 8
  %32 = load ptr, ptr %31, align 8, !tbaa !20
  %33 = add nuw i32 %7, 1
  %wide.trip.count = zext i32 %33 to i64
  %34 = zext nneg i32 %7 to i64
  %min.iters.check = icmp ult i32 %7, 12
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph
  %indvars.iv.ph = phi i64 [ 1, %vector.memcheck ], [ 1, %.lr.ph ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph
  %scevgep = getelementptr i8, ptr %30, i64 8
  %35 = shl nuw nsw i64 %wide.trip.count, 3
  %scevgep871 = getelementptr i8, ptr %30, i64 %35
  %scevgep872 = getelementptr i8, ptr %32, i64 8
  %scevgep873 = getelementptr i8, ptr %32, i64 %35
  %scevgep874 = getelementptr i8, ptr %2, i64 8
  %scevgep875 = getelementptr i8, ptr %2, i64 %35
  %scevgep876 = getelementptr i8, ptr %18, i64 8
  %scevgep877 = getelementptr i8, ptr %18, i64 %35
  %bound0 = icmp ult ptr %scevgep, %scevgep873
  %bound1 = icmp ult ptr %scevgep872, %scevgep871
  %found.conflict = and i1 %bound0, %bound1
  %bound0878 = icmp ult ptr %scevgep, %scevgep875
  %bound1879 = icmp ult ptr %scevgep874, %scevgep871
  %found.conflict880 = and i1 %bound0878, %bound1879
  %conflict.rdx = or i1 %found.conflict, %found.conflict880
  %bound0881 = icmp ult ptr %scevgep, %scevgep877
  %bound1882 = icmp ult ptr %scevgep876, %scevgep871
  %found.conflict883 = and i1 %bound0881, %bound1882
  %conflict.rdx884 = or i1 %conflict.rdx, %found.conflict883
  %bound0885 = icmp ult ptr %scevgep872, %scevgep875
  %bound1886 = icmp ult ptr %scevgep874, %scevgep873
  %found.conflict887 = and i1 %bound0885, %bound1886
  %conflict.rdx888 = or i1 %conflict.rdx884, %found.conflict887
  %bound0889 = icmp ult ptr %scevgep872, %scevgep877
  %bound1890 = icmp ult ptr %scevgep876, %scevgep873
  %found.conflict891 = and i1 %bound0889, %bound1890
  %conflict.rdx892 = or i1 %conflict.rdx888, %found.conflict891
  br i1 %conflict.rdx892, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %34, 2147483646
  %ind.end = or i64 %34, 1
  %broadcast.splatinsert = insertelement <2 x double> poison, double %6, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %36 = getelementptr inbounds double, ptr %2, i64 %offset.idx
  %wide.load = load <2 x double>, ptr %36, align 8, !tbaa !21, !alias.scope !23
  %37 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %wide.load)
  %38 = fcmp olt <2 x double> %37, %broadcast.splat
  %39 = select <2 x i1> %38, <2 x double> %broadcast.splat, <2 x double> %37
  %40 = getelementptr inbounds double, ptr %30, i64 %offset.idx
  store <2 x double> %39, ptr %40, align 8, !tbaa !21, !alias.scope !26, !noalias !28
  %41 = getelementptr inbounds double, ptr %18, i64 %offset.idx
  %wide.load894 = load <2 x double>, ptr %41, align 8, !tbaa !21, !alias.scope !31
  %42 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %wide.load894, <2 x double> %39, <2 x double> %wide.load)
  %43 = fsub <2 x double> %42, %wide.load
  %44 = getelementptr inbounds double, ptr %32, i64 %offset.idx
  store <2 x double> %43, ptr %44, align 8, !tbaa !21, !alias.scope !32, !noalias !33
  %index.next = add nuw i64 %index, 2
  %45 = icmp eq i64 %index.next, %n.vec
  br i1 %45, label %middle.block, label %vector.body, !llvm.loop !34

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %34
  br i1 %cmp.n, label %.preheader587, label %scalar.ph.preheader

.preheader587:                                    ; preds = %scalar.ph, %middle.block
  br i1 %.not528593, label %._crit_edge, label %.lr.ph597

.lr.ph597:                                        ; preds = %.preheader587
  %46 = getelementptr inbounds i8, ptr %5, i64 8
  %47 = load ptr, ptr %46, align 8, !tbaa !20
  %48 = add nuw i32 %7, 1
  %wide.trip.count719 = zext i32 %48 to i64
  br label %64

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %49 = getelementptr inbounds double, ptr %2, i64 %indvars.iv
  %50 = load double, ptr %49, align 8, !tbaa !21
  %51 = tail call double @llvm.fabs.f64(double %50)
  %52 = fcmp olt double %51, %6
  %. = select i1 %52, double %6, double %51
  %53 = getelementptr inbounds double, ptr %30, i64 %indvars.iv
  store double %., ptr %53, align 8, !tbaa !21
  %54 = load double, ptr %49, align 8, !tbaa !21
  %55 = getelementptr inbounds double, ptr %18, i64 %indvars.iv
  %56 = load double, ptr %55, align 8, !tbaa !21
  %57 = tail call double @llvm.fmuladd.f64(double %56, double %., double %54)
  %58 = fsub double %57, %54
  %59 = getelementptr inbounds double, ptr %32, i64 %indvars.iv
  store double %58, ptr %59, align 8, !tbaa !21
  %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 %.preheader587, label %scalar.ph, !llvm.loop !38

.preheader584:                                    ; preds = %.loopexit586
  br i1 %.not528593, label %._crit_edge, label %.lr.ph600

.lr.ph600:                                        ; preds = %.preheader584
  %60 = getelementptr inbounds i8, ptr %5, i64 8
  %61 = zext nneg i32 %7 to i64
  %xtraiter = and i64 %61, 1
  %62 = icmp eq i32 %33, 2
  br i1 %62, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph600.new

.lr.ph600.new:                                    ; preds = %.lr.ph600
  %unroll_iter = and i64 %61, 2147483646
  %63 = load ptr, ptr %60, align 8, !tbaa !20
  br label %84

64:                                               ; preds = %.lr.ph597, %.loopexit586
  %indvars.iv716 = phi i64 [ 1, %.lr.ph597 ], [ %indvars.iv.next717, %.loopexit586 ]
  %65 = getelementptr inbounds double, ptr %47, i64 %indvars.iv716
  %66 = load double, ptr %65, align 8, !tbaa !21
  %67 = fcmp oeq double %66, 0.000000e+00
  br i1 %67, label %.preheader585, label %.loopexit586

.preheader585:                                    ; preds = %64
  %68 = getelementptr inbounds double, ptr %18, i64 %indvars.iv716
  %69 = getelementptr inbounds double, ptr %2, i64 %indvars.iv716
  br label %70

70:                                               ; preds = %.preheader585, %73
  %71 = load double, ptr %68, align 8, !tbaa !21
  %72 = fcmp olt double %71, 1.000000e-01
  br i1 %72, label %73, label %83

73:                                               ; preds = %70
  %74 = fmul double %71, 1.000000e+02
  %75 = fcmp olt double %74, 1.000000e-01
  %.560 = select i1 %75, double %74, double 1.000000e-01
  store double %.560, ptr %68, align 8, !tbaa !21
  %76 = load double, ptr %69, align 8, !tbaa !21
  %77 = load ptr, ptr %5, align 8, !tbaa !18
  %78 = getelementptr inbounds double, ptr %77, i64 %indvars.iv716
  %79 = load double, ptr %78, align 8, !tbaa !21
  %80 = tail call double @llvm.fmuladd.f64(double %.560, double %79, double %76)
  %81 = fsub double %80, %76
  store double %81, ptr %65, align 8, !tbaa !21
  %82 = fcmp oeq double %81, 0.000000e+00
  br i1 %82, label %.loopexit586, label %70

83:                                               ; preds = %70
  store double %6, ptr %65, align 8, !tbaa !21
  br label %.loopexit586

.loopexit586:                                     ; preds = %73, %64, %83
  %indvars.iv.next717 = add nuw nsw i64 %indvars.iv716, 1
  %exitcond720.not = icmp eq i64 %indvars.iv.next717, %wide.trip.count719
  br i1 %exitcond720.not, label %.preheader584, label %64, !llvm.loop !39

84:                                               ; preds = %84, %.lr.ph600.new
  %indvars.iv721 = phi i64 [ 1, %.lr.ph600.new ], [ %indvars.iv.next722.1, %84 ]
  %niter = phi i64 [ 0, %.lr.ph600.new ], [ %niter.next.1, %84 ]
  %85 = getelementptr inbounds double, ptr %3, i64 %indvars.iv721
  %86 = load double, ptr %85, align 8, !tbaa !21
  %87 = fcmp ult double %86, 0.000000e+00
  %88 = getelementptr inbounds double, ptr %63, i64 %indvars.iv721
  %89 = load double, ptr %88, align 8, !tbaa !21
  %90 = tail call double @llvm.fabs.f64(double %89)
  %91 = fneg double %90
  %.sink = select i1 %87, double %91, double %90
  store double %.sink, ptr %88, align 8, !tbaa !21
  %indvars.iv.next722 = add nuw nsw i64 %indvars.iv721, 1
  %92 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next722
  %93 = load double, ptr %92, align 8, !tbaa !21
  %94 = fcmp ult double %93, 0.000000e+00
  %95 = getelementptr inbounds double, ptr %63, i64 %indvars.iv.next722
  %96 = load double, ptr %95, align 8, !tbaa !21
  %97 = tail call double @llvm.fabs.f64(double %96)
  %98 = fneg double %97
  %.sink.1 = select i1 %94, double %98, double %97
  store double %.sink.1, ptr %95, align 8, !tbaa !21
  %indvars.iv.next722.1 = add nuw nsw i64 %indvars.iv721, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %84, !llvm.loop !40

._crit_edge.loopexit.unr-lcssa:                   ; preds = %84, %.lr.ph600
  %indvars.iv721.unr = phi i64 [ 1, %.lr.ph600 ], [ %indvars.iv.next722.1, %84 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %99 = getelementptr inbounds double, ptr %3, i64 %indvars.iv721.unr
  %100 = load double, ptr %99, align 8, !tbaa !21
  %101 = fcmp ult double %100, 0.000000e+00
  %102 = load ptr, ptr %60, align 8, !tbaa !20
  %103 = getelementptr inbounds double, ptr %102, i64 %indvars.iv721.unr
  %104 = load double, ptr %103, align 8, !tbaa !21
  %105 = tail call double @llvm.fabs.f64(double %104)
  %106 = fneg double %105
  %.sink.epil = select i1 %101, double %106, double %105
  store double %.sink.epil, ptr %103, align 8, !tbaa !21
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %28, %.preheader587, %.preheader584
  br i1 %.not, label %151, label %107

107:                                              ; preds = %._crit_edge
  %108 = getelementptr inbounds i8, ptr %4, i64 52
  %109 = load i32, ptr %108, align 4, !tbaa !41
  %110 = getelementptr inbounds i8, ptr %4, i64 56
  %111 = load i32, ptr %110, align 8, !tbaa !42
  %.not532 = icmp slt i32 %109, %111
  br i1 %.not532, label %151, label %112

112:                                              ; preds = %107
  %113 = getelementptr inbounds i8, ptr %4, i64 60
  %114 = load i32, ptr %113, align 4, !tbaa !43
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %._crit_edge833

._crit_edge833:                                   ; preds = %112
  %.phi.trans.insert = getelementptr inbounds i8, ptr %4, i64 96
  %.pre = load i32, ptr %.phi.trans.insert, align 8, !tbaa !44
  br label %125

116:                                              ; preds = %112
  %117 = getelementptr inbounds i8, ptr %4, i64 104
  %118 = load ptr, ptr %117, align 8, !tbaa !13
  %119 = getelementptr inbounds i8, ptr %4, i64 80
  %120 = load ptr, ptr %119, align 8, !tbaa !45
  %121 = getelementptr inbounds i8, ptr %4, i64 88
  %122 = load ptr, ptr %121, align 8, !tbaa !46
  %123 = tail call i32 @column_grouping(ptr noundef %118, ptr noundef %120, ptr noundef %122) #6
  %124 = getelementptr inbounds i8, ptr %4, i64 96
  store i32 %123, ptr %124, align 8, !tbaa !44
  store i32 1, ptr %113, align 4, !tbaa !43
  br label %125

125:                                              ; preds = %._crit_edge833, %116
  %126 = phi i32 [ %.pre, %._crit_edge833 ], [ %123, %116 ]
  %127 = add nsw i32 %126, 1
  %.not535606 = icmp slt i32 %126, 0
  br i1 %.not535606, label %._crit_edge627, label %.lr.ph609

.lr.ph609:                                        ; preds = %125
  %128 = getelementptr inbounds i8, ptr %5, i64 8
  br i1 %.not528593, label %.preheader580.lr.ph, label %.lr.ph609.split

.lr.ph609.split:                                  ; preds = %.lr.ph609
  %129 = getelementptr inbounds i8, ptr %4, i64 80
  %130 = getelementptr inbounds i8, ptr %5, i64 80
  %131 = load ptr, ptr %130, align 8, !tbaa !47
  %132 = load ptr, ptr %129, align 8, !tbaa !45
  %invariant.gep = getelementptr i8, ptr %132, i64 -4
  %133 = add nuw i32 %7, 1
  %134 = add nuw i32 %126, 2
  %wide.trip.count734 = zext i32 %134 to i64
  %wide.trip.count729 = zext i32 %133 to i64
  br label %.lr.ph604

.lr.ph604:                                        ; preds = %.lr.ph609.split, %._crit_edge605
  %indvars.iv731 = phi i64 [ 1, %.lr.ph609.split ], [ %indvars.iv.next732, %._crit_edge605 ]
  %135 = add nsw i64 %indvars.iv731, -1
  br label %136

136:                                              ; preds = %.lr.ph604, %150
  %indvars.iv726 = phi i64 [ 1, %.lr.ph604 ], [ %indvars.iv.next727, %150 ]
  %137 = getelementptr inbounds double, ptr %2, i64 %indvars.iv726
  %138 = load double, ptr %137, align 8, !tbaa !21
  %139 = getelementptr inbounds ptr, ptr %131, i64 %indvars.iv726
  %140 = load ptr, ptr %139, align 8, !tbaa !48
  %141 = getelementptr inbounds double, ptr %140, i64 %indvars.iv731
  store double %138, ptr %141, align 8, !tbaa !21
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv726
  %142 = load i32, ptr %gep, align 4, !tbaa !49
  %143 = zext i32 %142 to i64
  %144 = icmp eq i64 %135, %143
  br i1 %144, label %145, label %150

145:                                              ; preds = %136
  %146 = load ptr, ptr %128, align 8, !tbaa !20
  %147 = getelementptr inbounds double, ptr %146, i64 %indvars.iv726
  %148 = load double, ptr %147, align 8, !tbaa !21
  %149 = fadd double %138, %148
  store double %149, ptr %141, align 8, !tbaa !21
  br label %150

150:                                              ; preds = %136, %145
  %indvars.iv.next727 = add nuw nsw i64 %indvars.iv726, 1
  %exitcond730.not = icmp eq i64 %indvars.iv.next727, %wide.trip.count729
  br i1 %exitcond730.not, label %._crit_edge605, label %136, !llvm.loop !50

._crit_edge605:                                   ; preds = %150
  %indvars.iv.next732 = add nuw nsw i64 %indvars.iv731, 1
  %exitcond735 = icmp eq i64 %indvars.iv.next732, %wide.trip.count734
  br i1 %exitcond735, label %.loopexit582, label %.lr.ph604, !llvm.loop !51

151:                                              ; preds = %107, %._crit_edge
  br i1 %.not528593, label %._crit_edge627, label %.preheader581.lr.ph

.preheader581.lr.ph:                              ; preds = %151
  %152 = getelementptr inbounds i8, ptr %5, i64 80
  %153 = getelementptr inbounds i8, ptr %5, i64 8
  %154 = load ptr, ptr %153, align 8, !tbaa !20
  %155 = load ptr, ptr %152, align 8, !tbaa !47
  %156 = add nuw i32 %7, 1
  %wide.trip.count744 = zext i32 %156 to i64
  %157 = zext nneg i32 %7 to i64
  %158 = add nsw i64 %wide.trip.count744, -2
  %xtraiter949 = and i64 %157, 3
  %159 = icmp ult i64 %158, 3
  %unroll_iter951 = and i64 %157, 2147483644
  %lcmp.mod950.not = icmp eq i64 %xtraiter949, 0
  br label %.lr.ph612

.lr.ph612:                                        ; preds = %._crit_edge613, %.preheader581.lr.ph
  %indvars.iv741 = phi i64 [ 1, %.preheader581.lr.ph ], [ %indvars.iv.next742, %._crit_edge613 ]
  br i1 %159, label %._crit_edge613.unr-lcssa, label %.lr.ph612.new

.lr.ph612.new:                                    ; preds = %.lr.ph612, %.lr.ph612.new
  %indvars.iv736 = phi i64 [ %indvars.iv.next737.3, %.lr.ph612.new ], [ 1, %.lr.ph612 ]
  %niter952 = phi i64 [ %niter952.next.3, %.lr.ph612.new ], [ 0, %.lr.ph612 ]
  %160 = getelementptr inbounds double, ptr %2, i64 %indvars.iv736
  %161 = load double, ptr %160, align 8, !tbaa !21
  %162 = getelementptr inbounds ptr, ptr %155, i64 %indvars.iv736
  %163 = load ptr, ptr %162, align 8, !tbaa !48
  %164 = getelementptr inbounds double, ptr %163, i64 %indvars.iv741
  store double %161, ptr %164, align 8, !tbaa !21
  %indvars.iv.next737 = add nuw nsw i64 %indvars.iv736, 1
  %165 = getelementptr inbounds double, ptr %2, i64 %indvars.iv.next737
  %166 = load double, ptr %165, align 8, !tbaa !21
  %167 = getelementptr inbounds ptr, ptr %155, i64 %indvars.iv.next737
  %168 = load ptr, ptr %167, align 8, !tbaa !48
  %169 = getelementptr inbounds double, ptr %168, i64 %indvars.iv741
  store double %166, ptr %169, align 8, !tbaa !21
  %indvars.iv.next737.1 = add nuw nsw i64 %indvars.iv736, 2
  %170 = getelementptr inbounds double, ptr %2, i64 %indvars.iv.next737.1
  %171 = load double, ptr %170, align 8, !tbaa !21
  %172 = getelementptr inbounds ptr, ptr %155, i64 %indvars.iv.next737.1
  %173 = load ptr, ptr %172, align 8, !tbaa !48
  %174 = getelementptr inbounds double, ptr %173, i64 %indvars.iv741
  store double %171, ptr %174, align 8, !tbaa !21
  %indvars.iv.next737.2 = add nuw nsw i64 %indvars.iv736, 3
  %175 = getelementptr inbounds double, ptr %2, i64 %indvars.iv.next737.2
  %176 = load double, ptr %175, align 8, !tbaa !21
  %177 = getelementptr inbounds ptr, ptr %155, i64 %indvars.iv.next737.2
  %178 = load ptr, ptr %177, align 8, !tbaa !48
  %179 = getelementptr inbounds double, ptr %178, i64 %indvars.iv741
  store double %176, ptr %179, align 8, !tbaa !21
  %indvars.iv.next737.3 = add nuw nsw i64 %indvars.iv736, 4
  %niter952.next.3 = add i64 %niter952, 4
  %niter952.ncmp.3 = icmp eq i64 %niter952.next.3, %unroll_iter951
  br i1 %niter952.ncmp.3, label %._crit_edge613.unr-lcssa, label %.lr.ph612.new, !llvm.loop !52

._crit_edge613.unr-lcssa:                         ; preds = %.lr.ph612.new, %.lr.ph612
  %indvars.iv736.unr = phi i64 [ 1, %.lr.ph612 ], [ %indvars.iv.next737.3, %.lr.ph612.new ]
  br i1 %lcmp.mod950.not, label %._crit_edge613, label %.epil.preheader948

.epil.preheader948:                               ; preds = %._crit_edge613.unr-lcssa, %.epil.preheader948
  %indvars.iv736.epil = phi i64 [ %indvars.iv.next737.epil, %.epil.preheader948 ], [ %indvars.iv736.unr, %._crit_edge613.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader948 ], [ 0, %._crit_edge613.unr-lcssa ]
  %180 = getelementptr inbounds double, ptr %2, i64 %indvars.iv736.epil
  %181 = load double, ptr %180, align 8, !tbaa !21
  %182 = getelementptr inbounds ptr, ptr %155, i64 %indvars.iv736.epil
  %183 = load ptr, ptr %182, align 8, !tbaa !48
  %184 = getelementptr inbounds double, ptr %183, i64 %indvars.iv741
  store double %181, ptr %184, align 8, !tbaa !21
  %indvars.iv.next737.epil = add nuw nsw i64 %indvars.iv736.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter949
  br i1 %epil.iter.cmp.not, label %._crit_edge613, label %.epil.preheader948, !llvm.loop !53

._crit_edge613:                                   ; preds = %.epil.preheader948, %._crit_edge613.unr-lcssa
  %185 = getelementptr inbounds double, ptr %154, i64 %indvars.iv741
  %186 = load double, ptr %185, align 8, !tbaa !21
  %187 = getelementptr inbounds ptr, ptr %155, i64 %indvars.iv741
  %188 = load ptr, ptr %187, align 8, !tbaa !48
  %189 = getelementptr inbounds double, ptr %188, i64 %indvars.iv741
  %190 = load double, ptr %189, align 8, !tbaa !21
  %191 = fadd double %186, %190
  store double %191, ptr %189, align 8, !tbaa !21
  %indvars.iv.next742 = add nuw nsw i64 %indvars.iv741, 1
  %exitcond745.not = icmp eq i64 %indvars.iv.next742, %wide.trip.count744
  br i1 %exitcond745.not, label %.loopexit582, label %.lr.ph612, !llvm.loop !55

.loopexit582:                                     ; preds = %._crit_edge605, %._crit_edge613
  %.0486 = phi i32 [ %7, %._crit_edge613 ], [ %127, %._crit_edge605 ]
  %.not536625 = icmp slt i32 %.0486, 1
  br i1 %.not536625, label %._crit_edge627, label %.preheader580.lr.ph

.preheader580.lr.ph:                              ; preds = %.lr.ph609, %.loopexit582
  %.0486849 = phi i32 [ %.0486, %.loopexit582 ], [ %127, %.lr.ph609 ]
  %192 = getelementptr inbounds i8, ptr %5, i64 80
  %193 = getelementptr inbounds i8, ptr %5, i64 64
  %194 = getelementptr inbounds i8, ptr %5, i64 56
  %195 = add i32 %7, 1
  %196 = add nuw i32 %.0486849, 1
  %wide.trip.count759 = zext i32 %196 to i64
  %wide.trip.count749 = zext i32 %195 to i64
  %197 = add nsw i64 %wide.trip.count749, -1
  %198 = add nsw i64 %wide.trip.count749, -2
  %xtraiter954 = and i64 %197, 3
  %199 = icmp ult i64 %198, 3
  %unroll_iter957 = and i64 %197, -4
  %lcmp.mod956.not = icmp eq i64 %xtraiter954, 0
  %xtraiter960 = and i64 %197, 3
  %200 = icmp ult i64 %198, 3
  %unroll_iter963 = and i64 %197, -4
  %lcmp.mod962.not = icmp eq i64 %xtraiter960, 0
  br label %.preheader580

.preheader580:                                    ; preds = %.preheader580.lr.ph, %._crit_edge624
  %indvars.iv756 = phi i64 [ 1, %.preheader580.lr.ph ], [ %indvars.iv.next757, %._crit_edge624 ]
  %.pre834 = load ptr, ptr %193, align 8, !tbaa !56
  br i1 %.not528593, label %._crit_edge619, label %.lr.ph618

.lr.ph618:                                        ; preds = %.preheader580
  %201 = load ptr, ptr %192, align 8, !tbaa !47
  br i1 %199, label %._crit_edge619.loopexit.unr-lcssa, label %.lr.ph618.new

.lr.ph618.new:                                    ; preds = %.lr.ph618, %.lr.ph618.new
  %indvars.iv746 = phi i64 [ %indvars.iv.next747.3, %.lr.ph618.new ], [ 1, %.lr.ph618 ]
  %niter958 = phi i64 [ %niter958.next.3, %.lr.ph618.new ], [ 0, %.lr.ph618 ]
  %202 = getelementptr inbounds ptr, ptr %201, i64 %indvars.iv746
  %203 = load ptr, ptr %202, align 8, !tbaa !48
  %204 = getelementptr inbounds double, ptr %203, i64 %indvars.iv756
  %205 = load double, ptr %204, align 8, !tbaa !21
  %206 = getelementptr inbounds double, ptr %.pre834, i64 %indvars.iv746
  store double %205, ptr %206, align 8, !tbaa !21
  %indvars.iv.next747 = add nuw nsw i64 %indvars.iv746, 1
  %207 = getelementptr inbounds ptr, ptr %201, i64 %indvars.iv.next747
  %208 = load ptr, ptr %207, align 8, !tbaa !48
  %209 = getelementptr inbounds double, ptr %208, i64 %indvars.iv756
  %210 = load double, ptr %209, align 8, !tbaa !21
  %211 = getelementptr inbounds double, ptr %.pre834, i64 %indvars.iv.next747
  store double %210, ptr %211, align 8, !tbaa !21
  %indvars.iv.next747.1 = add nuw nsw i64 %indvars.iv746, 2
  %212 = getelementptr inbounds ptr, ptr %201, i64 %indvars.iv.next747.1
  %213 = load ptr, ptr %212, align 8, !tbaa !48
  %214 = getelementptr inbounds double, ptr %213, i64 %indvars.iv756
  %215 = load double, ptr %214, align 8, !tbaa !21
  %216 = getelementptr inbounds double, ptr %.pre834, i64 %indvars.iv.next747.1
  store double %215, ptr %216, align 8, !tbaa !21
  %indvars.iv.next747.2 = add nuw nsw i64 %indvars.iv746, 3
  %217 = getelementptr inbounds ptr, ptr %201, i64 %indvars.iv.next747.2
  %218 = load ptr, ptr %217, align 8, !tbaa !48
  %219 = getelementptr inbounds double, ptr %218, i64 %indvars.iv756
  %220 = load double, ptr %219, align 8, !tbaa !21
  %221 = getelementptr inbounds double, ptr %.pre834, i64 %indvars.iv.next747.2
  store double %220, ptr %221, align 8, !tbaa !21
  %indvars.iv.next747.3 = add nuw nsw i64 %indvars.iv746, 4
  %niter958.next.3 = add i64 %niter958, 4
  %niter958.ncmp.3 = icmp eq i64 %niter958.next.3, %unroll_iter957
  br i1 %niter958.ncmp.3, label %._crit_edge619.loopexit.unr-lcssa, label %.lr.ph618.new, !llvm.loop !57

._crit_edge619.loopexit.unr-lcssa:                ; preds = %.lr.ph618.new, %.lr.ph618
  %indvars.iv746.unr = phi i64 [ 1, %.lr.ph618 ], [ %indvars.iv.next747.3, %.lr.ph618.new ]
  br i1 %lcmp.mod956.not, label %._crit_edge619, label %.epil.preheader953

.epil.preheader953:                               ; preds = %._crit_edge619.loopexit.unr-lcssa, %.epil.preheader953
  %indvars.iv746.epil = phi i64 [ %indvars.iv.next747.epil, %.epil.preheader953 ], [ %indvars.iv746.unr, %._crit_edge619.loopexit.unr-lcssa ]
  %epil.iter955 = phi i64 [ %epil.iter955.next, %.epil.preheader953 ], [ 0, %._crit_edge619.loopexit.unr-lcssa ]
  %222 = getelementptr inbounds ptr, ptr %201, i64 %indvars.iv746.epil
  %223 = load ptr, ptr %222, align 8, !tbaa !48
  %224 = getelementptr inbounds double, ptr %223, i64 %indvars.iv756
  %225 = load double, ptr %224, align 8, !tbaa !21
  %226 = getelementptr inbounds double, ptr %.pre834, i64 %indvars.iv746.epil
  store double %225, ptr %226, align 8, !tbaa !21
  %indvars.iv.next747.epil = add nuw nsw i64 %indvars.iv746.epil, 1
  %epil.iter955.next = add i64 %epil.iter955, 1
  %epil.iter955.cmp.not = icmp eq i64 %epil.iter955.next, %xtraiter954
  br i1 %epil.iter955.cmp.not, label %._crit_edge619, label %.epil.preheader953, !llvm.loop !58

._crit_edge619:                                   ; preds = %._crit_edge619.loopexit.unr-lcssa, %.epil.preheader953, %.preheader580
  %227 = getelementptr inbounds i8, ptr %.pre834, i64 8
  %228 = load ptr, ptr %194, align 8, !tbaa !59
  %229 = getelementptr inbounds i8, ptr %228, i64 8
  %230 = tail call i32 %0(double noundef %1, ptr noundef nonnull %227, ptr noundef nonnull %229, ptr noundef %9, ptr noundef %10) #6
  %231 = icmp eq i32 %230, 1
  br i1 %231, label %232, label %233

232:                                              ; preds = %._crit_edge619
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %14) #6
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %14, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.37, ptr noundef %10) #6
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %10, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.numjac, i32 noundef 1298, ptr noundef nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %14) #6
  br label %.thread567

233:                                              ; preds = %._crit_edge619
  %234 = load i32, ptr %8, align 4, !tbaa !49
  %235 = add nsw i32 %234, 1
  store i32 %235, ptr %8, align 4, !tbaa !49
  br i1 %.not528593, label %._crit_edge624, label %.lr.ph623

.lr.ph623:                                        ; preds = %233
  %236 = load ptr, ptr %194, align 8, !tbaa !59
  %237 = load ptr, ptr %192, align 8, !tbaa !47
  br i1 %200, label %._crit_edge624.loopexit.unr-lcssa, label %.lr.ph623.new

.lr.ph623.new:                                    ; preds = %.lr.ph623, %.lr.ph623.new
  %indvars.iv751 = phi i64 [ %indvars.iv.next752.3, %.lr.ph623.new ], [ 1, %.lr.ph623 ]
  %niter964 = phi i64 [ %niter964.next.3, %.lr.ph623.new ], [ 0, %.lr.ph623 ]
  %238 = getelementptr inbounds double, ptr %236, i64 %indvars.iv751
  %239 = load double, ptr %238, align 8, !tbaa !21
  %240 = getelementptr inbounds ptr, ptr %237, i64 %indvars.iv751
  %241 = load ptr, ptr %240, align 8, !tbaa !48
  %242 = getelementptr inbounds double, ptr %241, i64 %indvars.iv756
  store double %239, ptr %242, align 8, !tbaa !21
  %indvars.iv.next752 = add nuw nsw i64 %indvars.iv751, 1
  %243 = getelementptr inbounds double, ptr %236, i64 %indvars.iv.next752
  %244 = load double, ptr %243, align 8, !tbaa !21
  %245 = getelementptr inbounds ptr, ptr %237, i64 %indvars.iv.next752
  %246 = load ptr, ptr %245, align 8, !tbaa !48
  %247 = getelementptr inbounds double, ptr %246, i64 %indvars.iv756
  store double %244, ptr %247, align 8, !tbaa !21
  %indvars.iv.next752.1 = add nuw nsw i64 %indvars.iv751, 2
  %248 = getelementptr inbounds double, ptr %236, i64 %indvars.iv.next752.1
  %249 = load double, ptr %248, align 8, !tbaa !21
  %250 = getelementptr inbounds ptr, ptr %237, i64 %indvars.iv.next752.1
  %251 = load ptr, ptr %250, align 8, !tbaa !48
  %252 = getelementptr inbounds double, ptr %251, i64 %indvars.iv756
  store double %249, ptr %252, align 8, !tbaa !21
  %indvars.iv.next752.2 = add nuw nsw i64 %indvars.iv751, 3
  %253 = getelementptr inbounds double, ptr %236, i64 %indvars.iv.next752.2
  %254 = load double, ptr %253, align 8, !tbaa !21
  %255 = getelementptr inbounds ptr, ptr %237, i64 %indvars.iv.next752.2
  %256 = load ptr, ptr %255, align 8, !tbaa !48
  %257 = getelementptr inbounds double, ptr %256, i64 %indvars.iv756
  store double %254, ptr %257, align 8, !tbaa !21
  %indvars.iv.next752.3 = add nuw nsw i64 %indvars.iv751, 4
  %niter964.next.3 = add i64 %niter964, 4
  %niter964.ncmp.3 = icmp eq i64 %niter964.next.3, %unroll_iter963
  br i1 %niter964.ncmp.3, label %._crit_edge624.loopexit.unr-lcssa, label %.lr.ph623.new, !llvm.loop !60

._crit_edge624.loopexit.unr-lcssa:                ; preds = %.lr.ph623.new, %.lr.ph623
  %indvars.iv751.unr = phi i64 [ 1, %.lr.ph623 ], [ %indvars.iv.next752.3, %.lr.ph623.new ]
  br i1 %lcmp.mod962.not, label %._crit_edge624, label %.epil.preheader959

.epil.preheader959:                               ; preds = %._crit_edge624.loopexit.unr-lcssa, %.epil.preheader959
  %indvars.iv751.epil = phi i64 [ %indvars.iv.next752.epil, %.epil.preheader959 ], [ %indvars.iv751.unr, %._crit_edge624.loopexit.unr-lcssa ]
  %epil.iter961 = phi i64 [ %epil.iter961.next, %.epil.preheader959 ], [ 0, %._crit_edge624.loopexit.unr-lcssa ]
  %258 = getelementptr inbounds double, ptr %236, i64 %indvars.iv751.epil
  %259 = load double, ptr %258, align 8, !tbaa !21
  %260 = getelementptr inbounds ptr, ptr %237, i64 %indvars.iv751.epil
  %261 = load ptr, ptr %260, align 8, !tbaa !48
  %262 = getelementptr inbounds double, ptr %261, i64 %indvars.iv756
  store double %259, ptr %262, align 8, !tbaa !21
  %indvars.iv.next752.epil = add nuw nsw i64 %indvars.iv751.epil, 1
  %epil.iter961.next = add i64 %epil.iter961, 1
  %epil.iter961.cmp.not = icmp eq i64 %epil.iter961.next, %xtraiter960
  br i1 %epil.iter961.cmp.not, label %._crit_edge624, label %.epil.preheader959, !llvm.loop !61

._crit_edge624:                                   ; preds = %._crit_edge624.loopexit.unr-lcssa, %.epil.preheader959, %233
  %indvars.iv.next757 = add nuw nsw i64 %indvars.iv756, 1
  %exitcond760.not = icmp eq i64 %indvars.iv.next757, %wide.trip.count759
  br i1 %exitcond760.not, label %._crit_edge627, label %.preheader580, !llvm.loop !62

._crit_edge627:                                   ; preds = %._crit_edge624, %125, %151, %.loopexit582
  %263 = load i32, ptr %19, align 8, !tbaa !12
  %.not537 = icmp eq i32 %263, 0
  br i1 %.not537, label %334, label %264

264:                                              ; preds = %._crit_edge627
  %265 = getelementptr inbounds i8, ptr %4, i64 52
  %266 = load i32, ptr %265, align 4, !tbaa !41
  %267 = getelementptr inbounds i8, ptr %4, i64 56
  %268 = load i32, ptr %267, align 8, !tbaa !42
  %.not538 = icmp slt i32 %266, %268
  br i1 %.not538, label %334, label %.preheader578

.preheader578:                                    ; preds = %264
  %269 = icmp sgt i32 %7, 0
  br i1 %269, label %.lr.ph636, label %.loopexit572

.lr.ph636:                                        ; preds = %.preheader578
  %270 = getelementptr inbounds i8, ptr %4, i64 80
  %271 = load ptr, ptr %270, align 8, !tbaa !45
  %272 = getelementptr inbounds i8, ptr %5, i64 80
  %273 = getelementptr inbounds i8, ptr %5, i64 96
  %274 = getelementptr inbounds i8, ptr %5, i64 16
  %275 = getelementptr inbounds i8, ptr %5, i64 8
  %276 = getelementptr inbounds i8, ptr %4, i64 112
  %277 = load ptr, ptr %272, align 8, !tbaa !47
  %278 = load ptr, ptr %273, align 8, !tbaa !63
  %279 = getelementptr inbounds i8, ptr %5, i64 24
  %280 = load ptr, ptr %279, align 8, !tbaa !64
  %wide.trip.count767 = zext nneg i32 %7 to i64
  %.pre835 = load i32, ptr %.0470, align 4, !tbaa !49
  br label %281

281:                                              ; preds = %.lr.ph636, %._crit_edge633
  %282 = phi i32 [ %.pre835, %.lr.ph636 ], [ %323, %._crit_edge633 ]
  %indvars.iv764 = phi i64 [ 0, %.lr.ph636 ], [ %indvars.iv.next765, %._crit_edge633 ]
  %283 = getelementptr inbounds i32, ptr %271, i64 %indvars.iv764
  %284 = load i32, ptr %283, align 4, !tbaa !49
  %indvars.iv.next765 = add nuw nsw i64 %indvars.iv764, 1
  %285 = getelementptr inbounds i32, ptr %.0470, i64 %indvars.iv.next765
  %286 = load i32, ptr %285, align 4, !tbaa !49
  %287 = icmp slt i32 %282, %286
  %288 = sext i32 %284 to i64
  br i1 %287, label %.lr.ph632, label %._crit_edge633

.lr.ph632:                                        ; preds = %281
  %289 = load ptr, ptr %275, align 8, !tbaa !20
  %290 = getelementptr inbounds double, ptr %289, i64 %indvars.iv.next765
  %291 = load ptr, ptr %276, align 8, !tbaa !65
  %292 = sext i32 %282 to i64
  %293 = getelementptr inbounds i32, ptr %278, i64 %indvars.iv.next765
  br label %294

294:                                              ; preds = %.lr.ph632, %316
  %295 = phi i32 [ %286, %.lr.ph632 ], [ %317, %316 ]
  %indvars.iv761 = phi i64 [ %292, %.lr.ph632 ], [ %indvars.iv.next762, %316 ]
  %.0473630 = phi double [ 0.000000e+00, %.lr.ph632 ], [ %310, %316 ]
  %.0475629 = phi double [ 0.000000e+00, %.lr.ph632 ], [ %301, %316 ]
  %296 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv761
  %297 = load i32, ptr %296, align 4, !tbaa !49
  %298 = add nsw i32 %297, 1
  %299 = tail call double @llvm.fabs.f64(double %.0473630)
  %300 = fcmp olt double %.0475629, %299
  %301 = select i1 %300, double %299, double %.0475629
  %302 = sext i32 %298 to i64
  %303 = getelementptr inbounds ptr, ptr %277, i64 %302
  %304 = load ptr, ptr %303, align 8, !tbaa !48
  %305 = getelementptr double, ptr %304, i64 %288
  %306 = getelementptr i8, ptr %305, i64 8
  %307 = load double, ptr %306, align 8, !tbaa !21
  %308 = getelementptr inbounds double, ptr %3, i64 %302
  %309 = load double, ptr %308, align 8, !tbaa !21
  %310 = fsub double %307, %309
  %311 = tail call double @llvm.fabs.f64(double %310)
  %312 = fcmp ult double %311, %301
  br i1 %312, label %316, label %313

313:                                              ; preds = %294
  store i32 %298, ptr %293, align 4, !tbaa !49
  %314 = load ptr, ptr %274, align 8, !tbaa !66
  %315 = getelementptr inbounds double, ptr %314, i64 %indvars.iv.next765
  store double %310, ptr %315, align 8, !tbaa !21
  %.pre836 = load i32, ptr %285, align 4, !tbaa !49
  br label %316

316:                                              ; preds = %313, %294
  %317 = phi i32 [ %.pre836, %313 ], [ %295, %294 ]
  %318 = load double, ptr %290, align 8, !tbaa !21
  %319 = fdiv double %310, %318
  %320 = getelementptr inbounds double, ptr %291, i64 %indvars.iv761
  store double %319, ptr %320, align 8, !tbaa !21
  %indvars.iv.next762 = add nsw i64 %indvars.iv761, 1
  %321 = sext i32 %317 to i64
  %322 = icmp slt i64 %indvars.iv.next762, %321
  br i1 %322, label %294, label %._crit_edge633, !llvm.loop !67

._crit_edge633:                                   ; preds = %316, %281
  %323 = phi i32 [ %286, %281 ], [ %317, %316 ]
  %324 = getelementptr inbounds i32, ptr %278, i64 %indvars.iv.next765
  %325 = load i32, ptr %324, align 4, !tbaa !49
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds ptr, ptr %277, i64 %326
  %328 = load ptr, ptr %327, align 8, !tbaa !48
  %329 = getelementptr double, ptr %328, i64 %288
  %330 = getelementptr i8, ptr %329, i64 8
  %331 = load double, ptr %330, align 8, !tbaa !21
  %332 = tail call double @llvm.fabs.f64(double %331)
  %333 = getelementptr inbounds double, ptr %280, i64 %indvars.iv.next765
  store double %332, ptr %333, align 8, !tbaa !21
  %exitcond768.not = icmp eq i64 %indvars.iv.next765, %wide.trip.count767
  br i1 %exitcond768.not, label %.loopexit577, label %281, !llvm.loop !68

334:                                              ; preds = %264, %._crit_edge627
  br i1 %.not528593, label %.loopexit572, label %.preheader576.lr.ph

.preheader576.lr.ph:                              ; preds = %334
  %335 = getelementptr inbounds i8, ptr %5, i64 80
  %336 = getelementptr inbounds i8, ptr %5, i64 8
  %337 = getelementptr inbounds i8, ptr %5, i64 96
  %338 = getelementptr inbounds i8, ptr %5, i64 16
  %339 = load ptr, ptr %335, align 8, !tbaa !47
  %340 = load ptr, ptr %337, align 8, !tbaa !63
  %341 = getelementptr inbounds i8, ptr %5, i64 24
  %342 = load ptr, ptr %341, align 8, !tbaa !64
  %343 = add nuw i32 %7, 1
  %wide.trip.count777 = zext i32 %343 to i64
  %344 = load ptr, ptr %336, align 8, !tbaa !20
  br label %.lr.ph641

.lr.ph641:                                        ; preds = %._crit_edge642, %.preheader576.lr.ph
  %indvars.iv774 = phi i64 [ 1, %.preheader576.lr.ph ], [ %indvars.iv.next775, %._crit_edge642 ]
  %345 = getelementptr inbounds double, ptr %344, i64 %indvars.iv774
  %346 = getelementptr inbounds i32, ptr %340, i64 %indvars.iv774
  br label %347

347:                                              ; preds = %.lr.ph641, %369
  %indvars.iv769 = phi i64 [ 1, %.lr.ph641 ], [ %indvars.iv.next770, %369 ]
  %.1474640 = phi double [ 0.000000e+00, %.lr.ph641 ], [ %357, %369 ]
  %.1476639 = phi double [ 0.000000e+00, %.lr.ph641 ], [ %350, %369 ]
  %348 = tail call double @llvm.fabs.f64(double %.1474640)
  %349 = fcmp olt double %348, %.1476639
  %350 = select i1 %349, double %.1476639, double %348
  %351 = getelementptr inbounds ptr, ptr %339, i64 %indvars.iv769
  %352 = load ptr, ptr %351, align 8, !tbaa !48
  %353 = getelementptr inbounds double, ptr %352, i64 %indvars.iv774
  %354 = load double, ptr %353, align 8, !tbaa !21
  %355 = getelementptr inbounds double, ptr %3, i64 %indvars.iv769
  %356 = load double, ptr %355, align 8, !tbaa !21
  %357 = fsub double %354, %356
  %358 = load double, ptr %345, align 8, !tbaa !21
  %359 = fdiv double %357, %358
  %360 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv769
  %361 = load ptr, ptr %360, align 8, !tbaa !48
  %362 = getelementptr inbounds double, ptr %361, i64 %indvars.iv774
  store double %359, ptr %362, align 8, !tbaa !21
  %363 = tail call double @llvm.fabs.f64(double %357)
  %364 = fcmp ult double %363, %350
  br i1 %364, label %369, label %365

365:                                              ; preds = %347
  %366 = trunc nuw nsw i64 %indvars.iv769 to i32
  store i32 %366, ptr %346, align 4, !tbaa !49
  %367 = load ptr, ptr %338, align 8, !tbaa !66
  %368 = getelementptr inbounds double, ptr %367, i64 %indvars.iv774
  store double %363, ptr %368, align 8, !tbaa !21
  br label %369

369:                                              ; preds = %347, %365
  %indvars.iv.next770 = add nuw nsw i64 %indvars.iv769, 1
  %exitcond773.not = icmp eq i64 %indvars.iv.next770, %wide.trip.count777
  br i1 %exitcond773.not, label %._crit_edge642, label %347, !llvm.loop !69

._crit_edge642:                                   ; preds = %369
  %370 = getelementptr inbounds i32, ptr %340, i64 %indvars.iv774
  %371 = load i32, ptr %370, align 4, !tbaa !49
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds ptr, ptr %339, i64 %372
  %374 = load ptr, ptr %373, align 8, !tbaa !48
  %375 = getelementptr inbounds double, ptr %374, i64 %indvars.iv774
  %376 = load double, ptr %375, align 8, !tbaa !21
  %377 = tail call double @llvm.fabs.f64(double %376)
  %378 = getelementptr inbounds double, ptr %342, i64 %indvars.iv774
  store double %377, ptr %378, align 8, !tbaa !21
  %indvars.iv.next775 = add nuw nsw i64 %indvars.iv774, 1
  %exitcond778.not = icmp eq i64 %indvars.iv.next775, %wide.trip.count777
  br i1 %exitcond778.not, label %.loopexit577, label %.lr.ph641, !llvm.loop !70

.loopexit577:                                     ; preds = %._crit_edge633, %._crit_edge642
  br i1 %.not528593, label %.loopexit572, label %.lr.ph648

.lr.ph648:                                        ; preds = %.loopexit577
  %379 = getelementptr inbounds i8, ptr %5, i64 32
  %380 = load ptr, ptr %379, align 8, !tbaa !71
  %381 = add nuw i32 %7, 1
  %wide.trip.count782 = zext i32 %381 to i64
  %382 = zext nneg i32 %7 to i64
  %min.iters.check898 = icmp ult i32 %7, 4
  %383 = ptrtoint ptr %380 to i64
  %384 = sub i64 %383, %13
  %diff.check = icmp ult i64 %384, 32
  %or.cond942 = select i1 %min.iters.check898, i1 true, i1 %diff.check
  br i1 %or.cond942, label %scalar.ph897.preheader, label %vector.ph899

scalar.ph897.preheader:                           ; preds = %middle.block896, %.lr.ph648
  %indvars.iv779.ph = phi i64 [ 1, %.lr.ph648 ], [ %ind.end902, %middle.block896 ]
  %385 = sub nsw i64 %wide.trip.count782, %indvars.iv779.ph
  %386 = zext nneg i32 %7 to i64
  %387 = sub nsw i64 %386, %indvars.iv779.ph
  %xtraiter965 = and i64 %385, 3
  %lcmp.mod966.not = icmp eq i64 %xtraiter965, 0
  br i1 %lcmp.mod966.not, label %scalar.ph897.prol.loopexit, label %scalar.ph897.prol

scalar.ph897.prol:                                ; preds = %scalar.ph897.preheader, %scalar.ph897.prol
  %indvars.iv779.prol = phi i64 [ %indvars.iv.next780.prol, %scalar.ph897.prol ], [ %indvars.iv779.ph, %scalar.ph897.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph897.prol ], [ 0, %scalar.ph897.preheader ]
  %388 = getelementptr inbounds double, ptr %3, i64 %indvars.iv779.prol
  %389 = load double, ptr %388, align 8, !tbaa !21
  %390 = tail call double @llvm.fabs.f64(double %389)
  %391 = getelementptr inbounds double, ptr %380, i64 %indvars.iv779.prol
  store double %390, ptr %391, align 8, !tbaa !21
  %indvars.iv.next780.prol = add nuw nsw i64 %indvars.iv779.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter965
  br i1 %prol.iter.cmp.not, label %scalar.ph897.prol.loopexit, label %scalar.ph897.prol, !llvm.loop !72

scalar.ph897.prol.loopexit:                       ; preds = %scalar.ph897.prol, %scalar.ph897.preheader
  %indvars.iv779.unr = phi i64 [ %indvars.iv779.ph, %scalar.ph897.preheader ], [ %indvars.iv.next780.prol, %scalar.ph897.prol ]
  %392 = icmp ult i64 %387, 3
  br i1 %392, label %.preheader575, label %scalar.ph897

vector.ph899:                                     ; preds = %.lr.ph648
  %n.vec901 = and i64 %382, 2147483644
  %ind.end902 = or disjoint i64 %n.vec901, 1
  br label %vector.body904

vector.body904:                                   ; preds = %vector.body904, %vector.ph899
  %index905 = phi i64 [ 0, %vector.ph899 ], [ %index.next909, %vector.body904 ]
  %offset.idx906 = or disjoint i64 %index905, 1
  %393 = getelementptr inbounds double, ptr %3, i64 %offset.idx906
  %394 = getelementptr inbounds i8, ptr %393, i64 16
  %wide.load907 = load <2 x double>, ptr %393, align 8, !tbaa !21
  %wide.load908 = load <2 x double>, ptr %394, align 8, !tbaa !21
  %395 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %wide.load907)
  %396 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %wide.load908)
  %397 = getelementptr inbounds double, ptr %380, i64 %offset.idx906
  %398 = getelementptr inbounds i8, ptr %397, i64 16
  store <2 x double> %395, ptr %397, align 8, !tbaa !21
  store <2 x double> %396, ptr %398, align 8, !tbaa !21
  %index.next909 = add nuw i64 %index905, 4
  %399 = icmp eq i64 %index.next909, %n.vec901
  br i1 %399, label %middle.block896, label %vector.body904, !llvm.loop !73

middle.block896:                                  ; preds = %vector.body904
  %cmp.n910 = icmp eq i64 %n.vec901, %382
  br i1 %cmp.n910, label %.preheader575, label %scalar.ph897.preheader

.preheader575:                                    ; preds = %scalar.ph897.prol.loopexit, %scalar.ph897, %middle.block896
  br i1 %.not528593, label %.loopexit572, label %.lr.ph651

.lr.ph651:                                        ; preds = %.preheader575
  %400 = getelementptr inbounds i8, ptr %5, i64 32
  %401 = load ptr, ptr %400, align 8, !tbaa !71
  %402 = getelementptr inbounds i8, ptr %5, i64 96
  %403 = load ptr, ptr %402, align 8, !tbaa !63
  %404 = getelementptr inbounds i8, ptr %5, i64 40
  %405 = load ptr, ptr %404, align 8, !tbaa !74
  %406 = zext nneg i32 %7 to i64
  %407 = add nsw i64 %wide.trip.count782, -2
  %xtraiter968 = and i64 %406, 3
  %408 = icmp ult i64 %407, 3
  br i1 %408, label %.preheader574.unr-lcssa, label %.lr.ph651.new

.lr.ph651.new:                                    ; preds = %.lr.ph651
  %unroll_iter971 = and i64 %406, 2147483644
  br label %437

scalar.ph897:                                     ; preds = %scalar.ph897.prol.loopexit, %scalar.ph897
  %indvars.iv779 = phi i64 [ %indvars.iv.next780.3, %scalar.ph897 ], [ %indvars.iv779.unr, %scalar.ph897.prol.loopexit ]
  %409 = getelementptr inbounds double, ptr %3, i64 %indvars.iv779
  %410 = load double, ptr %409, align 8, !tbaa !21
  %411 = tail call double @llvm.fabs.f64(double %410)
  %412 = getelementptr inbounds double, ptr %380, i64 %indvars.iv779
  store double %411, ptr %412, align 8, !tbaa !21
  %indvars.iv.next780 = add nuw nsw i64 %indvars.iv779, 1
  %413 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next780
  %414 = load double, ptr %413, align 8, !tbaa !21
  %415 = tail call double @llvm.fabs.f64(double %414)
  %416 = getelementptr inbounds double, ptr %380, i64 %indvars.iv.next780
  store double %415, ptr %416, align 8, !tbaa !21
  %indvars.iv.next780.1 = add nuw nsw i64 %indvars.iv779, 2
  %417 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next780.1
  %418 = load double, ptr %417, align 8, !tbaa !21
  %419 = tail call double @llvm.fabs.f64(double %418)
  %420 = getelementptr inbounds double, ptr %380, i64 %indvars.iv.next780.1
  store double %419, ptr %420, align 8, !tbaa !21
  %indvars.iv.next780.2 = add nuw nsw i64 %indvars.iv779, 3
  %421 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next780.2
  %422 = load double, ptr %421, align 8, !tbaa !21
  %423 = tail call double @llvm.fabs.f64(double %422)
  %424 = getelementptr inbounds double, ptr %380, i64 %indvars.iv.next780.2
  store double %423, ptr %424, align 8, !tbaa !21
  %indvars.iv.next780.3 = add nuw nsw i64 %indvars.iv779, 4
  %exitcond783.not.3 = icmp eq i64 %indvars.iv.next780.3, %wide.trip.count782
  br i1 %exitcond783.not.3, label %.preheader575, label %scalar.ph897, !llvm.loop !75

.preheader574.unr-lcssa:                          ; preds = %437, %.lr.ph651
  %indvars.iv784.unr = phi i64 [ 1, %.lr.ph651 ], [ %indvars.iv.next785.3, %437 ]
  %lcmp.mod970.not = icmp eq i64 %xtraiter968, 0
  br i1 %lcmp.mod970.not, label %.preheader574, label %.epil.preheader967

.epil.preheader967:                               ; preds = %.preheader574.unr-lcssa, %.epil.preheader967
  %indvars.iv784.epil = phi i64 [ %indvars.iv.next785.epil, %.epil.preheader967 ], [ %indvars.iv784.unr, %.preheader574.unr-lcssa ]
  %epil.iter969 = phi i64 [ %epil.iter969.next, %.epil.preheader967 ], [ 0, %.preheader574.unr-lcssa ]
  %425 = getelementptr inbounds i32, ptr %403, i64 %indvars.iv784.epil
  %426 = load i32, ptr %425, align 4, !tbaa !49
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds double, ptr %401, i64 %427
  %429 = load double, ptr %428, align 8, !tbaa !21
  %430 = getelementptr inbounds double, ptr %405, i64 %indvars.iv784.epil
  store double %429, ptr %430, align 8, !tbaa !21
  %indvars.iv.next785.epil = add nuw nsw i64 %indvars.iv784.epil, 1
  %epil.iter969.next = add i64 %epil.iter969, 1
  %epil.iter969.cmp.not = icmp eq i64 %epil.iter969.next, %xtraiter968
  br i1 %epil.iter969.cmp.not, label %.preheader574, label %.epil.preheader967, !llvm.loop !76

.preheader574:                                    ; preds = %.epil.preheader967, %.preheader574.unr-lcssa
  br i1 %.not528593, label %.loopexit572, label %.lr.ph655

.lr.ph655:                                        ; preds = %.preheader574
  %431 = getelementptr inbounds i8, ptr %5, i64 24
  %432 = load ptr, ptr %431, align 8, !tbaa !64
  %433 = getelementptr inbounds i8, ptr %5, i64 40
  %434 = getelementptr inbounds i8, ptr %5, i64 16
  %435 = getelementptr inbounds i8, ptr %5, i64 88
  %436 = add nuw i32 %7, 1
  %wide.trip.count792 = zext i32 %436 to i64
  br label %462

437:                                              ; preds = %437, %.lr.ph651.new
  %indvars.iv784 = phi i64 [ 1, %.lr.ph651.new ], [ %indvars.iv.next785.3, %437 ]
  %niter972 = phi i64 [ 0, %.lr.ph651.new ], [ %niter972.next.3, %437 ]
  %438 = getelementptr inbounds i32, ptr %403, i64 %indvars.iv784
  %439 = load i32, ptr %438, align 4, !tbaa !49
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds double, ptr %401, i64 %440
  %442 = load double, ptr %441, align 8, !tbaa !21
  %443 = getelementptr inbounds double, ptr %405, i64 %indvars.iv784
  store double %442, ptr %443, align 8, !tbaa !21
  %indvars.iv.next785 = add nuw nsw i64 %indvars.iv784, 1
  %444 = getelementptr inbounds i32, ptr %403, i64 %indvars.iv.next785
  %445 = load i32, ptr %444, align 4, !tbaa !49
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds double, ptr %401, i64 %446
  %448 = load double, ptr %447, align 8, !tbaa !21
  %449 = getelementptr inbounds double, ptr %405, i64 %indvars.iv.next785
  store double %448, ptr %449, align 8, !tbaa !21
  %indvars.iv.next785.1 = add nuw nsw i64 %indvars.iv784, 2
  %450 = getelementptr inbounds i32, ptr %403, i64 %indvars.iv.next785.1
  %451 = load i32, ptr %450, align 4, !tbaa !49
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds double, ptr %401, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !21
  %455 = getelementptr inbounds double, ptr %405, i64 %indvars.iv.next785.1
  store double %454, ptr %455, align 8, !tbaa !21
  %indvars.iv.next785.2 = add nuw nsw i64 %indvars.iv784, 3
  %456 = getelementptr inbounds i32, ptr %403, i64 %indvars.iv.next785.2
  %457 = load i32, ptr %456, align 4, !tbaa !49
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds double, ptr %401, i64 %458
  %460 = load double, ptr %459, align 8, !tbaa !21
  %461 = getelementptr inbounds double, ptr %405, i64 %indvars.iv.next785.2
  store double %460, ptr %461, align 8, !tbaa !21
  %indvars.iv.next785.3 = add nuw nsw i64 %indvars.iv784, 4
  %niter972.next.3 = add i64 %niter972, 4
  %niter972.ncmp.3 = icmp eq i64 %niter972.next.3, %unroll_iter971
  br i1 %niter972.ncmp.3, label %.preheader574.unr-lcssa, label %437, !llvm.loop !77

462:                                              ; preds = %.lr.ph655, %._crit_edge837
  %indvars.iv789 = phi i64 [ 1, %.lr.ph655 ], [ %indvars.iv.next790, %._crit_edge837 ]
  %.0472654 = phi i32 [ 0, %.lr.ph655 ], [ %.1, %._crit_edge837 ]
  %463 = getelementptr inbounds double, ptr %432, i64 %indvars.iv789
  %464 = load double, ptr %463, align 8, !tbaa !21
  %465 = fcmp olt double %464, 1.000000e-50
  br i1 %465, label %466, label %._crit_edge840

._crit_edge840:                                   ; preds = %462
  %.pre839.pre = load ptr, ptr %435, align 8, !tbaa !78
  br label %471

466:                                              ; preds = %462
  %467 = load ptr, ptr %433, align 8, !tbaa !74
  %468 = getelementptr inbounds double, ptr %467, i64 %indvars.iv789
  %469 = load double, ptr %468, align 8, !tbaa !21
  %470 = fcmp olt double %469, 1.000000e-50
  %.pre839.pre841 = load ptr, ptr %435, align 8, !tbaa !78
  br i1 %470, label %._crit_edge837, label %471

471:                                              ; preds = %._crit_edge840, %466
  %.pre839 = phi ptr [ %.pre839.pre, %._crit_edge840 ], [ %.pre839.pre841, %466 ]
  %472 = load ptr, ptr %434, align 8, !tbaa !66
  %473 = getelementptr inbounds double, ptr %472, i64 %indvars.iv789
  %474 = load double, ptr %473, align 8, !tbaa !21
  %475 = tail call double @llvm.fabs.f64(double %474)
  %476 = fcmp olt double %475, 1.000000e-50
  br i1 %476, label %._crit_edge837, label %477

477:                                              ; preds = %471
  br label %._crit_edge837

._crit_edge837:                                   ; preds = %471, %466, %477
  %.sink863 = phi ptr [ %.pre839, %477 ], [ %.pre839, %471 ], [ %.pre839.pre841, %466 ]
  %.sink861 = phi i32 [ 0, %477 ], [ 1, %471 ], [ 1, %466 ]
  %.1 = phi i32 [ %.0472654, %477 ], [ 1, %471 ], [ 1, %466 ]
  %478 = getelementptr inbounds i32, ptr %.sink863, i64 %indvars.iv789
  store i32 %.sink861, ptr %478, align 4, !tbaa !49
  %indvars.iv.next790 = add nuw nsw i64 %indvars.iv789, 1
  %exitcond793.not = icmp eq i64 %indvars.iv.next790, %wide.trip.count792
  br i1 %exitcond793.not, label %._crit_edge656, label %462, !llvm.loop !79

._crit_edge656:                                   ; preds = %._crit_edge837
  %479 = icmp ne i32 %.1, 1
  %brmerge = or i1 %479, %.not528593
  br i1 %brmerge, label %.loopexit572, label %.lr.ph659

.lr.ph659:                                        ; preds = %._crit_edge656
  %480 = getelementptr inbounds i8, ptr %5, i64 64
  %481 = load ptr, ptr %480, align 8, !tbaa !56
  %482 = getelementptr inbounds i8, ptr %5, i64 24
  %483 = load ptr, ptr %482, align 8, !tbaa !64
  %484 = getelementptr inbounds i8, ptr %5, i64 40
  %485 = load ptr, ptr %484, align 8, !tbaa !74
  %486 = getelementptr inbounds i8, ptr %5, i64 48
  %487 = load ptr, ptr %486, align 8, !tbaa !80
  %488 = add nuw i32 %7, 1
  %wide.trip.count797 = zext i32 %488 to i64
  %489 = zext nneg i32 %7 to i64
  %min.iters.check927 = icmp ult i32 %7, 20
  br i1 %min.iters.check927, label %scalar.ph926.preheader, label %vector.memcheck911

scalar.ph926.preheader:                           ; preds = %middle.block925, %vector.memcheck911, %.lr.ph659
  %indvars.iv794.ph = phi i64 [ 1, %vector.memcheck911 ], [ 1, %.lr.ph659 ], [ %ind.end931, %middle.block925 ]
  %490 = zext nneg i32 %7 to i64
  %491 = and i32 %7, 1
  %lcmp.mod974.not = icmp eq i32 %491, 0
  br i1 %lcmp.mod974.not, label %scalar.ph926.prol.loopexit, label %scalar.ph926.prol

scalar.ph926.prol:                                ; preds = %scalar.ph926.preheader
  %492 = getelementptr inbounds double, ptr %2, i64 %indvars.iv794.ph
  %493 = load double, ptr %492, align 8, !tbaa !21
  %494 = getelementptr inbounds double, ptr %481, i64 %indvars.iv794.ph
  store double %493, ptr %494, align 8, !tbaa !21
  %495 = getelementptr inbounds double, ptr %483, i64 %indvars.iv794.ph
  %496 = load double, ptr %495, align 8, !tbaa !21
  %497 = getelementptr inbounds double, ptr %485, i64 %indvars.iv794.ph
  %498 = load double, ptr %497, align 8, !tbaa !21
  %499 = fcmp olt double %496, %498
  %.561.prol = select i1 %499, double %498, double %496
  %500 = getelementptr inbounds double, ptr %487, i64 %indvars.iv794.ph
  store double %.561.prol, ptr %500, align 8, !tbaa !21
  %indvars.iv.next795.prol = add nuw nsw i64 %indvars.iv794.ph, 1
  br label %scalar.ph926.prol.loopexit

scalar.ph926.prol.loopexit:                       ; preds = %scalar.ph926.prol, %scalar.ph926.preheader
  %indvars.iv794.unr = phi i64 [ %indvars.iv794.ph, %scalar.ph926.preheader ], [ %indvars.iv.next795.prol, %scalar.ph926.prol ]
  %501 = icmp eq i64 %indvars.iv794.ph, %490
  br i1 %501, label %.preheader571, label %scalar.ph926

vector.memcheck911:                               ; preds = %.lr.ph659
  %502 = ptrtoint ptr %487 to i64
  %503 = ptrtoint ptr %485 to i64
  %504 = ptrtoint ptr %483 to i64
  %505 = ptrtoint ptr %481 to i64
  %506 = sub i64 %502, %505
  %diff.check912 = icmp ult i64 %506, 16
  %507 = sub i64 %505, %12
  %diff.check913 = icmp ult i64 %507, 16
  %conflict.rdx914 = or i1 %diff.check912, %diff.check913
  %508 = sub i64 %504, %505
  %diff.check915 = icmp ult i64 %508, 16
  %conflict.rdx916 = or i1 %conflict.rdx914, %diff.check915
  %509 = sub i64 %503, %505
  %diff.check917 = icmp ult i64 %509, 16
  %conflict.rdx918 = or i1 %conflict.rdx916, %diff.check917
  %510 = sub i64 %502, %12
  %diff.check919 = icmp ult i64 %510, 16
  %conflict.rdx920 = or i1 %conflict.rdx918, %diff.check919
  %511 = sub i64 %502, %504
  %diff.check921 = icmp ult i64 %511, 16
  %conflict.rdx922 = or i1 %conflict.rdx920, %diff.check921
  %512 = sub i64 %502, %503
  %diff.check923 = icmp ult i64 %512, 16
  %conflict.rdx924 = or i1 %conflict.rdx922, %diff.check923
  br i1 %conflict.rdx924, label %scalar.ph926.preheader, label %vector.ph928

vector.ph928:                                     ; preds = %vector.memcheck911
  %n.vec930 = and i64 %489, 2147483646
  %ind.end931 = or i64 %489, 1
  br label %vector.body933

vector.body933:                                   ; preds = %vector.body933, %vector.ph928
  %index934 = phi i64 [ 0, %vector.ph928 ], [ %index.next939, %vector.body933 ]
  %offset.idx935 = or disjoint i64 %index934, 1
  %513 = getelementptr inbounds double, ptr %2, i64 %offset.idx935
  %wide.load936 = load <2 x double>, ptr %513, align 8, !tbaa !21
  %514 = getelementptr inbounds double, ptr %481, i64 %offset.idx935
  store <2 x double> %wide.load936, ptr %514, align 8, !tbaa !21
  %515 = getelementptr inbounds double, ptr %483, i64 %offset.idx935
  %wide.load937 = load <2 x double>, ptr %515, align 8, !tbaa !21
  %516 = getelementptr inbounds double, ptr %485, i64 %offset.idx935
  %wide.load938 = load <2 x double>, ptr %516, align 8, !tbaa !21
  %517 = fcmp olt <2 x double> %wide.load937, %wide.load938
  %518 = select <2 x i1> %517, <2 x double> %wide.load938, <2 x double> %wide.load937
  %519 = getelementptr inbounds double, ptr %487, i64 %offset.idx935
  store <2 x double> %518, ptr %519, align 8, !tbaa !21
  %index.next939 = add nuw i64 %index934, 2
  %520 = icmp eq i64 %index.next939, %n.vec930
  br i1 %520, label %middle.block925, label %vector.body933, !llvm.loop !81

middle.block925:                                  ; preds = %vector.body933
  %cmp.n940 = icmp eq i64 %n.vec930, %489
  br i1 %cmp.n940, label %.preheader571, label %scalar.ph926.preheader

.preheader571:                                    ; preds = %scalar.ph926.prol.loopexit, %scalar.ph926, %middle.block925
  br i1 %.not528593, label %.loopexit572, label %.lr.ph685

.lr.ph685:                                        ; preds = %.preheader571
  %521 = getelementptr inbounds i8, ptr %5, i64 88
  %522 = getelementptr inbounds i8, ptr %5, i64 16
  %523 = getelementptr inbounds i8, ptr %5, i64 48
  %524 = getelementptr inbounds i8, ptr %5, i64 64
  %525 = getelementptr inbounds i8, ptr %5, i64 56
  %526 = getelementptr inbounds i8, ptr %5, i64 72
  %527 = getelementptr inbounds i8, ptr %5, i64 8
  %528 = getelementptr inbounds i8, ptr %4, i64 52
  %529 = getelementptr inbounds i8, ptr %4, i64 56
  %530 = getelementptr inbounds i8, ptr %4, i64 112
  %531 = getelementptr inbounds i8, ptr %5, i64 32
  %532 = add nuw i32 %7, 1
  %wide.trip.count817 = zext i32 %532 to i64
  %xtraiter980 = and i64 %406, 3
  %533 = icmp ult i64 %407, 3
  %unroll_iter983 = and i64 %406, 2147483644
  %lcmp.mod982.not = icmp eq i64 %xtraiter980, 0
  br label %552

scalar.ph926:                                     ; preds = %scalar.ph926.prol.loopexit, %scalar.ph926
  %indvars.iv794 = phi i64 [ %indvars.iv.next795.1, %scalar.ph926 ], [ %indvars.iv794.unr, %scalar.ph926.prol.loopexit ]
  %534 = getelementptr inbounds double, ptr %2, i64 %indvars.iv794
  %535 = load double, ptr %534, align 8, !tbaa !21
  %536 = getelementptr inbounds double, ptr %481, i64 %indvars.iv794
  store double %535, ptr %536, align 8, !tbaa !21
  %537 = getelementptr inbounds double, ptr %483, i64 %indvars.iv794
  %538 = load double, ptr %537, align 8, !tbaa !21
  %539 = getelementptr inbounds double, ptr %485, i64 %indvars.iv794
  %540 = load double, ptr %539, align 8, !tbaa !21
  %541 = fcmp olt double %538, %540
  %.561 = select i1 %541, double %540, double %538
  %542 = getelementptr inbounds double, ptr %487, i64 %indvars.iv794
  store double %.561, ptr %542, align 8, !tbaa !21
  %indvars.iv.next795 = add nuw nsw i64 %indvars.iv794, 1
  %543 = getelementptr inbounds double, ptr %2, i64 %indvars.iv.next795
  %544 = load double, ptr %543, align 8, !tbaa !21
  %545 = getelementptr inbounds double, ptr %481, i64 %indvars.iv.next795
  store double %544, ptr %545, align 8, !tbaa !21
  %546 = getelementptr inbounds double, ptr %483, i64 %indvars.iv.next795
  %547 = load double, ptr %546, align 8, !tbaa !21
  %548 = getelementptr inbounds double, ptr %485, i64 %indvars.iv.next795
  %549 = load double, ptr %548, align 8, !tbaa !21
  %550 = fcmp olt double %547, %549
  %.561.1 = select i1 %550, double %549, double %547
  %551 = getelementptr inbounds double, ptr %487, i64 %indvars.iv.next795
  store double %.561.1, ptr %551, align 8, !tbaa !21
  %indvars.iv.next795.1 = add nuw nsw i64 %indvars.iv794, 2
  %exitcond798.not.1 = icmp eq i64 %indvars.iv.next795.1, %wide.trip.count797
  br i1 %exitcond798.not.1, label %.preheader571, label %scalar.ph926, !llvm.loop !82

552:                                              ; preds = %.lr.ph685, %724
  %indvars.iv814 = phi i64 [ 1, %.lr.ph685 ], [ %indvars.iv.next815, %724 ]
  %.0487684 = phi double [ 0.000000e+00, %.lr.ph685 ], [ %.3490, %724 ]
  %553 = load ptr, ptr %521, align 8, !tbaa !78
  %554 = getelementptr inbounds i32, ptr %553, i64 %indvars.iv814
  %555 = load i32, ptr %554, align 4, !tbaa !49
  %556 = icmp eq i32 %555, 1
  br i1 %556, label %557, label %724

557:                                              ; preds = %552
  %558 = load ptr, ptr %522, align 8, !tbaa !66
  %559 = getelementptr inbounds double, ptr %558, i64 %indvars.iv814
  %560 = load double, ptr %559, align 8, !tbaa !21
  %561 = load ptr, ptr %523, align 8, !tbaa !80
  %562 = getelementptr inbounds double, ptr %561, i64 %indvars.iv814
  %563 = load double, ptr %562, align 8, !tbaa !21
  %564 = fmul double %563, 0x3D06849B86A12B9B
  %565 = fcmp ugt double %560, %564
  br i1 %565, label %724, label %566

566:                                              ; preds = %557
  %567 = getelementptr inbounds double, ptr %18, i64 %indvars.iv814
  %568 = load double, ptr %567, align 8, !tbaa !21
  %569 = tail call double @sqrt(double noundef %568) #6
  %570 = fcmp olt double %569, 1.000000e-01
  br i1 %570, label %571, label %574

571:                                              ; preds = %566
  %572 = load double, ptr %567, align 8, !tbaa !21
  %573 = tail call double @sqrt(double noundef %572) #6
  br label %574

574:                                              ; preds = %566, %571
  %575 = phi double [ %573, %571 ], [ 1.000000e-01, %566 ]
  %576 = getelementptr inbounds double, ptr %2, i64 %indvars.iv814
  %577 = load double, ptr %576, align 8, !tbaa !21
  %578 = load ptr, ptr %5, align 8, !tbaa !18
  %579 = getelementptr inbounds double, ptr %578, i64 %indvars.iv814
  %580 = load double, ptr %579, align 8, !tbaa !21
  %581 = tail call double @llvm.fmuladd.f64(double %575, double %580, double %577)
  %582 = fsub double %581, %577
  %583 = load double, ptr %567, align 8, !tbaa !21
  %584 = fcmp une double %575, %583
  %585 = fcmp une double %582, 0.000000e+00
  %or.cond = select i1 %584, i1 %585, i1 false
  br i1 %or.cond, label %586, label %724

586:                                              ; preds = %574
  %587 = getelementptr inbounds double, ptr %3, i64 %indvars.iv814
  %588 = load double, ptr %587, align 8, !tbaa !21
  %589 = fcmp ult double %588, 0.000000e+00
  %590 = tail call double @llvm.fabs.f64(double %582)
  %591 = fneg double %590
  %.0491 = select i1 %589, double %591, double %590
  %592 = fadd double %577, %.0491
  %593 = load ptr, ptr %524, align 8, !tbaa !56
  %594 = getelementptr inbounds double, ptr %593, i64 %indvars.iv814
  store double %592, ptr %594, align 8, !tbaa !21
  %595 = getelementptr inbounds i8, ptr %593, i64 8
  %596 = load ptr, ptr %525, align 8, !tbaa !59
  %597 = getelementptr inbounds i8, ptr %596, i64 8
  %598 = tail call i32 %0(double noundef %1, ptr noundef nonnull %595, ptr noundef nonnull %597, ptr noundef %9, ptr noundef %10) #6
  %599 = icmp eq i32 %598, 1
  br i1 %599, label %600, label %.lr.ph667

600:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %15) #6
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %15, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.37, ptr noundef %10) #6
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %10, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.numjac, i32 noundef 1392, ptr noundef nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %15) #6
  br label %.thread567

.lr.ph667:                                        ; preds = %586
  %601 = load i32, ptr %8, align 4, !tbaa !49
  %602 = add nsw i32 %601, 1
  store i32 %602, ptr %8, align 4, !tbaa !49
  %603 = load double, ptr %576, align 8, !tbaa !21
  %604 = load ptr, ptr %524, align 8, !tbaa !56
  %605 = getelementptr inbounds double, ptr %604, i64 %indvars.iv814
  store double %603, ptr %605, align 8, !tbaa !21
  %606 = load ptr, ptr %525, align 8, !tbaa !59
  %607 = load ptr, ptr %526, align 8, !tbaa !83
  br label %608

608:                                              ; preds = %.lr.ph667, %608
  %indvars.iv799 = phi i64 [ 1, %.lr.ph667 ], [ %indvars.iv.next800, %608 ]
  %.2665 = phi double [ 0.000000e+00, %.lr.ph667 ], [ %616, %608 ]
  %.2477664 = phi double [ 0.000000e+00, %.lr.ph667 ], [ %611, %608 ]
  %.1488663 = phi double [ %.0487684, %.lr.ph667 ], [ %.2489, %608 ]
  %.0492662 = phi i32 [ 1, %.lr.ph667 ], [ %.1493, %608 ]
  %609 = tail call double @llvm.fabs.f64(double %.2665)
  %610 = fcmp olt double %.2477664, %609
  %611 = select i1 %610, double %609, double %.2477664
  %612 = getelementptr inbounds double, ptr %606, i64 %indvars.iv799
  %613 = load double, ptr %612, align 8, !tbaa !21
  %614 = getelementptr inbounds double, ptr %3, i64 %indvars.iv799
  %615 = load double, ptr %614, align 8, !tbaa !21
  %616 = fsub double %613, %615
  %617 = fdiv double %616, %.0491
  %618 = getelementptr inbounds double, ptr %607, i64 %indvars.iv799
  store double %617, ptr %618, align 8, !tbaa !21
  %619 = tail call double @llvm.fabs.f64(double %616)
  %620 = fcmp ult double %619, %611
  %621 = trunc nuw nsw i64 %indvars.iv799 to i32
  %.1493 = select i1 %620, i32 %.0492662, i32 %621
  %.2489 = select i1 %620, double %.1488663, double %619
  %indvars.iv.next800 = add nuw nsw i64 %indvars.iv799, 1
  %exitcond803.not = icmp eq i64 %indvars.iv.next800, %wide.trip.count817
  br i1 %exitcond803.not, label %._crit_edge668, label %608, !llvm.loop !84

._crit_edge668:                                   ; preds = %608
  %622 = fmul double %590, %.2489
  %623 = fmul double %575, %622
  %624 = load ptr, ptr %522, align 8, !tbaa !66
  %625 = getelementptr inbounds double, ptr %624, i64 %indvars.iv814
  %626 = load double, ptr %625, align 8, !tbaa !21
  %627 = load ptr, ptr %527, align 8, !tbaa !20
  %628 = getelementptr inbounds double, ptr %627, i64 %indvars.iv814
  %629 = load double, ptr %628, align 8, !tbaa !21
  %630 = tail call double @llvm.fabs.f64(double %629)
  %631 = fmul double %626, %630
  %632 = fcmp ult double %623, %631
  br i1 %632, label %724, label %633

633:                                              ; preds = %._crit_edge668
  %634 = load i32, ptr %19, align 8, !tbaa !12
  %.not554 = icmp eq i32 %634, 0
  br i1 %.not554, label %.lr.ph679, label %635

635:                                              ; preds = %633
  %636 = load i32, ptr %528, align 4, !tbaa !41
  %637 = load i32, ptr %529, align 8, !tbaa !42
  %.not555 = icmp slt i32 %636, %637
  br i1 %.not555, label %.lr.ph679, label %638

638:                                              ; preds = %635
  %639 = add nsw i64 %indvars.iv814, -1
  %640 = getelementptr inbounds i32, ptr %.0470, i64 %639
  %641 = load i32, ptr %640, align 4, !tbaa !49
  %642 = getelementptr inbounds i32, ptr %.0470, i64 %indvars.iv814
  %643 = load i32, ptr %642, align 4, !tbaa !49
  %644 = icmp slt i32 %641, %643
  br i1 %644, label %.lr.ph673, label %.loopexit

.lr.ph673:                                        ; preds = %638
  %645 = load ptr, ptr %526, align 8, !tbaa !83
  %invariant.gep674 = getelementptr i8, ptr %645, i64 8
  %646 = load ptr, ptr %530, align 8, !tbaa !65
  %647 = sext i32 %641 to i64
  %wide.trip.count807 = sext i32 %643 to i64
  %648 = sub nsw i64 %wide.trip.count807, %647
  %xtraiter976 = and i64 %648, 3
  %lcmp.mod977.not = icmp eq i64 %xtraiter976, 0
  br i1 %lcmp.mod977.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph673, %.prol.preheader
  %indvars.iv804.prol = phi i64 [ %indvars.iv.next805.prol, %.prol.preheader ], [ %647, %.lr.ph673 ]
  %prol.iter978 = phi i64 [ %prol.iter978.next, %.prol.preheader ], [ 0, %.lr.ph673 ]
  %649 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv804.prol
  %650 = load i32, ptr %649, align 4, !tbaa !49
  %651 = sext i32 %650 to i64
  %gep675.prol = getelementptr double, ptr %invariant.gep674, i64 %651
  %652 = load double, ptr %gep675.prol, align 8, !tbaa !21
  %653 = getelementptr inbounds double, ptr %646, i64 %indvars.iv804.prol
  store double %652, ptr %653, align 8, !tbaa !21
  %indvars.iv.next805.prol = add nsw i64 %indvars.iv804.prol, 1
  %prol.iter978.next = add i64 %prol.iter978, 1
  %prol.iter978.cmp.not = icmp eq i64 %prol.iter978.next, %xtraiter976
  br i1 %prol.iter978.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !85

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph673
  %indvars.iv804.unr = phi i64 [ %647, %.lr.ph673 ], [ %indvars.iv.next805.prol, %.prol.preheader ]
  %654 = sub nsw i64 %647, %wide.trip.count807
  %655 = icmp ugt i64 %654, -4
  br i1 %655, label %.loopexit, label %.lr.ph673.new

.lr.ph673.new:                                    ; preds = %.prol.loopexit, %.lr.ph673.new
  %indvars.iv804 = phi i64 [ %indvars.iv.next805.3, %.lr.ph673.new ], [ %indvars.iv804.unr, %.prol.loopexit ]
  %656 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv804
  %657 = load i32, ptr %656, align 4, !tbaa !49
  %658 = sext i32 %657 to i64
  %gep675 = getelementptr double, ptr %invariant.gep674, i64 %658
  %659 = load double, ptr %gep675, align 8, !tbaa !21
  %660 = getelementptr inbounds double, ptr %646, i64 %indvars.iv804
  store double %659, ptr %660, align 8, !tbaa !21
  %indvars.iv.next805 = add nsw i64 %indvars.iv804, 1
  %661 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv.next805
  %662 = load i32, ptr %661, align 4, !tbaa !49
  %663 = sext i32 %662 to i64
  %gep675.1 = getelementptr double, ptr %invariant.gep674, i64 %663
  %664 = load double, ptr %gep675.1, align 8, !tbaa !21
  %665 = getelementptr inbounds double, ptr %646, i64 %indvars.iv.next805
  store double %664, ptr %665, align 8, !tbaa !21
  %indvars.iv.next805.1 = add nsw i64 %indvars.iv804, 2
  %666 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv.next805.1
  %667 = load i32, ptr %666, align 4, !tbaa !49
  %668 = sext i32 %667 to i64
  %gep675.2 = getelementptr double, ptr %invariant.gep674, i64 %668
  %669 = load double, ptr %gep675.2, align 8, !tbaa !21
  %670 = getelementptr inbounds double, ptr %646, i64 %indvars.iv.next805.1
  store double %669, ptr %670, align 8, !tbaa !21
  %indvars.iv.next805.2 = add nsw i64 %indvars.iv804, 3
  %671 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv.next805.2
  %672 = load i32, ptr %671, align 4, !tbaa !49
  %673 = sext i32 %672 to i64
  %gep675.3 = getelementptr double, ptr %invariant.gep674, i64 %673
  %674 = load double, ptr %gep675.3, align 8, !tbaa !21
  %675 = getelementptr inbounds double, ptr %646, i64 %indvars.iv.next805.2
  store double %674, ptr %675, align 8, !tbaa !21
  %indvars.iv.next805.3 = add nsw i64 %indvars.iv804, 4
  %exitcond808.not.3 = icmp eq i64 %indvars.iv.next805.3, %wide.trip.count807
  br i1 %exitcond808.not.3, label %.loopexit, label %.lr.ph673.new, !llvm.loop !86

.lr.ph679:                                        ; preds = %633, %635
  %676 = load ptr, ptr %526, align 8, !tbaa !83
  br i1 %533, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph679.new

.lr.ph679.new:                                    ; preds = %.lr.ph679, %.lr.ph679.new
  %indvars.iv809 = phi i64 [ %indvars.iv.next810.3, %.lr.ph679.new ], [ 1, %.lr.ph679 ]
  %niter984 = phi i64 [ %niter984.next.3, %.lr.ph679.new ], [ 0, %.lr.ph679 ]
  %677 = getelementptr inbounds double, ptr %676, i64 %indvars.iv809
  %678 = load double, ptr %677, align 8, !tbaa !21
  %679 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv809
  %680 = load ptr, ptr %679, align 8, !tbaa !48
  %681 = getelementptr inbounds double, ptr %680, i64 %indvars.iv814
  store double %678, ptr %681, align 8, !tbaa !21
  %indvars.iv.next810 = add nuw nsw i64 %indvars.iv809, 1
  %682 = getelementptr inbounds double, ptr %676, i64 %indvars.iv.next810
  %683 = load double, ptr %682, align 8, !tbaa !21
  %684 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv.next810
  %685 = load ptr, ptr %684, align 8, !tbaa !48
  %686 = getelementptr inbounds double, ptr %685, i64 %indvars.iv814
  store double %683, ptr %686, align 8, !tbaa !21
  %indvars.iv.next810.1 = add nuw nsw i64 %indvars.iv809, 2
  %687 = getelementptr inbounds double, ptr %676, i64 %indvars.iv.next810.1
  %688 = load double, ptr %687, align 8, !tbaa !21
  %689 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv.next810.1
  %690 = load ptr, ptr %689, align 8, !tbaa !48
  %691 = getelementptr inbounds double, ptr %690, i64 %indvars.iv814
  store double %688, ptr %691, align 8, !tbaa !21
  %indvars.iv.next810.2 = add nuw nsw i64 %indvars.iv809, 3
  %692 = getelementptr inbounds double, ptr %676, i64 %indvars.iv.next810.2
  %693 = load double, ptr %692, align 8, !tbaa !21
  %694 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv.next810.2
  %695 = load ptr, ptr %694, align 8, !tbaa !48
  %696 = getelementptr inbounds double, ptr %695, i64 %indvars.iv814
  store double %693, ptr %696, align 8, !tbaa !21
  %indvars.iv.next810.3 = add nuw nsw i64 %indvars.iv809, 4
  %niter984.next.3 = add i64 %niter984, 4
  %niter984.ncmp.3 = icmp eq i64 %niter984.next.3, %unroll_iter983
  br i1 %niter984.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph679.new, !llvm.loop !87

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph679.new, %.lr.ph679
  %indvars.iv809.unr = phi i64 [ 1, %.lr.ph679 ], [ %indvars.iv.next810.3, %.lr.ph679.new ]
  br i1 %lcmp.mod982.not, label %.loopexit, label %.epil.preheader979

.epil.preheader979:                               ; preds = %.loopexit.loopexit.unr-lcssa, %.epil.preheader979
  %indvars.iv809.epil = phi i64 [ %indvars.iv.next810.epil, %.epil.preheader979 ], [ %indvars.iv809.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter981 = phi i64 [ %epil.iter981.next, %.epil.preheader979 ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %697 = getelementptr inbounds double, ptr %676, i64 %indvars.iv809.epil
  %698 = load double, ptr %697, align 8, !tbaa !21
  %699 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv809.epil
  %700 = load ptr, ptr %699, align 8, !tbaa !48
  %701 = getelementptr inbounds double, ptr %700, i64 %indvars.iv814
  store double %698, ptr %701, align 8, !tbaa !21
  %indvars.iv.next810.epil = add nuw nsw i64 %indvars.iv809.epil, 1
  %epil.iter981.next = add i64 %epil.iter981, 1
  %epil.iter981.cmp.not = icmp eq i64 %epil.iter981.next, %xtraiter980
  br i1 %epil.iter981.cmp.not, label %.loopexit, label %.epil.preheader979, !llvm.loop !88

.loopexit:                                        ; preds = %.prol.loopexit, %.lr.ph673.new, %.loopexit.loopexit.unr-lcssa, %.epil.preheader979, %638
  %702 = load ptr, ptr %525, align 8, !tbaa !59
  %703 = sext i32 %.1493 to i64
  %704 = getelementptr inbounds double, ptr %702, i64 %703
  %705 = load double, ptr %704, align 8, !tbaa !21
  %706 = tail call double @llvm.fabs.f64(double %705)
  %707 = load ptr, ptr %531, align 8, !tbaa !71
  %708 = getelementptr inbounds double, ptr %707, i64 %703
  %709 = load double, ptr %708, align 8, !tbaa !21
  %710 = fcmp olt double %706, %709
  %.562 = select i1 %710, double %709, double %706
  %711 = fmul double %.562, 0x3D719799812DEA11
  %712 = fcmp ugt double %.2489, %711
  br i1 %712, label %717, label %713

713:                                              ; preds = %.loopexit
  %714 = fmul double %575, 1.000000e+01
  %715 = fcmp olt double %714, 1.000000e-01
  %716 = select i1 %715, double %714, double 1.000000e-01
  br label %.sink.split

717:                                              ; preds = %.loopexit
  %718 = fmul double %.562, 1.000000e-04
  %719 = fcmp ogt double %.2489, %718
  br i1 %719, label %720, label %.sink.split

720:                                              ; preds = %717
  %721 = fmul double %575, 1.000000e-01
  %722 = fcmp olt double %721, 0x3D574D20C3619027
  %723 = select i1 %722, double 0x3D574D20C3619027, double %721
  br label %.sink.split

.sink.split:                                      ; preds = %717, %713, %720
  %.sink865 = phi double [ %723, %720 ], [ %716, %713 ], [ %575, %717 ]
  store double %.sink865, ptr %567, align 8, !tbaa !21
  br label %724

724:                                              ; preds = %.sink.split, %552, %557, %._crit_edge668, %574
  %.3490 = phi double [ %.2489, %._crit_edge668 ], [ %.0487684, %574 ], [ %.0487684, %557 ], [ %.0487684, %552 ], [ %.2489, %.sink.split ]
  %indvars.iv.next815 = add nuw nsw i64 %indvars.iv814, 1
  %exitcond818.not = icmp eq i64 %indvars.iv.next815, %wide.trip.count817
  br i1 %exitcond818.not, label %.loopexit572, label %552, !llvm.loop !89

.loopexit572:                                     ; preds = %724, %._crit_edge656, %334, %.preheader578, %.loopexit577, %.preheader575, %.preheader574, %.preheader571
  %725 = load i32, ptr %19, align 8, !tbaa !12
  %.not546 = icmp eq i32 %725, 0
  br i1 %.not546, label %.thread567, label %726

726:                                              ; preds = %.loopexit572
  %727 = getelementptr inbounds i8, ptr %4, i64 52
  %728 = load i32, ptr %727, align 4, !tbaa !41
  %729 = getelementptr inbounds i8, ptr %4, i64 56
  %730 = load i32, ptr %729, align 8, !tbaa !42
  %731 = icmp slt i32 %728, %730
  br i1 %731, label %732, label %.thread567

732:                                              ; preds = %726
  store i32 0, ptr %.0470, align 4, !tbaa !49
  br i1 %.not528593, label %._crit_edge708, label %.preheader569.lr.ph

.preheader569.lr.ph:                              ; preds = %732
  %733 = getelementptr inbounds i8, ptr %4, i64 48
  %734 = getelementptr inbounds i8, ptr %4, i64 64
  %735 = getelementptr inbounds i8, ptr %4, i64 112
  %736 = add nuw i32 %7, 1
  %wide.trip.count831 = zext i32 %736 to i64
  br label %.lr.ph700

.lr.ph700:                                        ; preds = %789, %.preheader569.lr.ph
  %indvars.iv828 = phi i64 [ 1, %.preheader569.lr.ph ], [ %indvars.iv.next829, %789 ]
  %.0479707 = phi i32 [ 0, %.preheader569.lr.ph ], [ %.3, %789 ]
  %.0482706 = phi i32 [ 0, %.preheader569.lr.ph ], [ %.4, %789 ]
  %737 = add nsw i64 %indvars.iv828, -1
  %738 = getelementptr inbounds i32, ptr %.0470, i64 %737
  %739 = getelementptr inbounds i32, ptr %.0470, i64 %indvars.iv828
  br label %740

740:                                              ; preds = %.lr.ph700, %787
  %indvars.iv823 = phi i64 [ 1, %.lr.ph700 ], [ %indvars.iv.next824, %787 ]
  %.1480699 = phi i32 [ %.0479707, %.lr.ph700 ], [ %.3, %787 ]
  %.1483698 = phi i32 [ %.0482706, %.lr.ph700 ], [ %.4, %787 ]
  %741 = icmp eq i64 %indvars.iv823, %indvars.iv828
  br i1 %741, label %748, label %742

742:                                              ; preds = %740
  %743 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv823
  %744 = load ptr, ptr %743, align 8, !tbaa !48
  %745 = getelementptr inbounds double, ptr %744, i64 %indvars.iv828
  %746 = load double, ptr %745, align 8, !tbaa !21
  %747 = fcmp une double %746, 0.000000e+00
  br i1 %747, label %748, label %787

748:                                              ; preds = %742, %740
  %749 = load i32, ptr %733, align 8, !tbaa !90
  %.not549 = icmp slt i32 %.1480699, %749
  br i1 %.not549, label %750, label %.thread564

.thread564:                                       ; preds = %748
  store i32 0, ptr %19, align 8, !tbaa !12
  br label %.thread567

750:                                              ; preds = %748
  %751 = icmp eq i32 %.1483698, 0
  br i1 %751, label %752, label %.critedge

752:                                              ; preds = %750
  %753 = load i32, ptr %734, align 8, !tbaa !91
  %754 = icmp eq i32 %753, 1
  br i1 %754, label %755, label %.critedge

755:                                              ; preds = %752
  %756 = load i32, ptr %738, align 4, !tbaa !49
  %757 = icmp slt i32 %.1480699, %756
  br i1 %757, label %.critedge, label %758

758:                                              ; preds = %755
  %759 = load i32, ptr %739, align 4, !tbaa !49
  %.not550 = icmp slt i32 %.1480699, %759
  br i1 %.not550, label %760, label %.critedge

760:                                              ; preds = %758
  %761 = sext i32 %.1480699 to i64
  %762 = getelementptr inbounds i32, ptr %.0, i64 %761
  %763 = load i32, ptr %762, align 4, !tbaa !49
  %764 = add nsw i64 %indvars.iv823, -1
  %765 = zext i32 %763 to i64
  %.not551 = icmp eq i64 %764, %765
  br i1 %.not551, label %.critedge, label %.lr.ph687

.lr.ph687:                                        ; preds = %760, %772
  %indvars.iv819 = phi i64 [ %indvars.iv.next820, %772 ], [ %761, %760 ]
  %766 = getelementptr inbounds i32, ptr %.0, i64 %indvars.iv819
  %767 = load i32, ptr %766, align 4, !tbaa !49
  %768 = sext i32 %767 to i64
  %.not552.not = icmp sgt i64 %indvars.iv823, %768
  br i1 %.not552.not, label %769, label %.critedge

769:                                              ; preds = %.lr.ph687
  %770 = zext i32 %767 to i64
  %771 = icmp eq i64 %764, %770
  br i1 %771, label %.critedge.loopexit.split.loop.exit, label %772

772:                                              ; preds = %769
  %773 = load ptr, ptr %735, align 8, !tbaa !65
  %774 = getelementptr inbounds double, ptr %773, i64 %indvars.iv819
  store double 0.000000e+00, ptr %774, align 8, !tbaa !21
  %indvars.iv.next820 = add nsw i64 %indvars.iv819, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next820 to i32
  %exitcond822.not = icmp eq i32 %759, %lftr.wideiv
  br i1 %exitcond822.not, label %.critedge, label %.lr.ph687, !llvm.loop !92

.critedge.loopexit.split.loop.exit:               ; preds = %769
  %775 = trunc nsw i64 %indvars.iv819 to i32
  br label %.critedge

.critedge:                                        ; preds = %772, %.lr.ph687, %.critedge.loopexit.split.loop.exit, %752, %755, %758, %750, %760
  %.3485 = phi i32 [ 0, %760 ], [ 1, %750 ], [ 1, %758 ], [ 1, %755 ], [ 0, %752 ], [ 0, %.critedge.loopexit.split.loop.exit ], [ 1, %.lr.ph687 ], [ 1, %772 ]
  %.2481 = phi i32 [ %.1480699, %760 ], [ %.1480699, %750 ], [ %.1480699, %758 ], [ %.1480699, %755 ], [ %.1480699, %752 ], [ %775, %.critedge.loopexit.split.loop.exit ], [ %.1480699, %.lr.ph687 ], [ %.1480699, %772 ]
  %776 = sext i32 %.2481 to i64
  %777 = getelementptr inbounds i32, ptr %.0, i64 %776
  %778 = trunc i64 %indvars.iv823 to i32
  %779 = add i32 %778, -1
  store i32 %779, ptr %777, align 4, !tbaa !49
  %780 = getelementptr inbounds ptr, ptr %16, i64 %indvars.iv823
  %781 = load ptr, ptr %780, align 8, !tbaa !48
  %782 = getelementptr inbounds double, ptr %781, i64 %indvars.iv828
  %783 = load double, ptr %782, align 8, !tbaa !21
  %784 = load ptr, ptr %735, align 8, !tbaa !65
  %785 = getelementptr inbounds double, ptr %784, i64 %776
  store double %783, ptr %785, align 8, !tbaa !21
  %786 = add nsw i32 %.2481, 1
  br label %787

787:                                              ; preds = %742, %.critedge
  %.4 = phi i32 [ %.3485, %.critedge ], [ %.1483698, %742 ]
  %.3 = phi i32 [ %786, %.critedge ], [ %.1480699, %742 ]
  %indvars.iv.next824 = add nuw nsw i64 %indvars.iv823, 1
  %exitcond827.not = icmp eq i64 %indvars.iv.next824, %wide.trip.count831
  br i1 %exitcond827.not, label %._crit_edge701, label %740, !llvm.loop !93

._crit_edge701:                                   ; preds = %787
  %.pr = load i32, ptr %19, align 8, !tbaa !12
  %788 = icmp eq i32 %.pr, 0
  br i1 %788, label %.thread567, label %789

789:                                              ; preds = %._crit_edge701
  %790 = getelementptr inbounds i32, ptr %.0470, i64 %indvars.iv828
  store i32 %.3, ptr %790, align 4, !tbaa !49
  %indvars.iv.next829 = add nuw nsw i64 %indvars.iv828, 1
  %exitcond832.not = icmp eq i64 %indvars.iv.next829, %wide.trip.count831
  br i1 %exitcond832.not, label %._crit_edge708.loopexit, label %.lr.ph700, !llvm.loop !94

._crit_edge708.loopexit:                          ; preds = %789
  %791 = icmp eq i32 %.4, 0
  br label %._crit_edge708

._crit_edge708:                                   ; preds = %._crit_edge708.loopexit, %732
  %.0482.lcssa = phi i1 [ true, %732 ], [ %791, %._crit_edge708.loopexit ]
  %.pr566 = load i32, ptr %19, align 8, !tbaa !12
  %792 = icmp eq i32 %.pr566, 1
  br i1 %792, label %793, label %.thread567

793:                                              ; preds = %._crit_edge708
  %794 = getelementptr inbounds i8, ptr %4, i64 64
  %795 = load i32, ptr %794, align 8, !tbaa !91
  %796 = icmp eq i32 %795, 1
  %or.cond3 = select i1 %796, i1 %.0482.lcssa, i1 false
  br i1 %or.cond3, label %797, label %800

797:                                              ; preds = %793
  %798 = load i32, ptr %727, align 4, !tbaa !41
  %799 = add nsw i32 %798, 1
  br label %800

800:                                              ; preds = %793, %797
  %storemerge = phi i32 [ %799, %797 ], [ 0, %793 ]
  store i32 %storemerge, ptr %727, align 4, !tbaa !41
  store i32 1, ptr %794, align 8, !tbaa !91
  br label %.thread567

.thread567:                                       ; preds = %._crit_edge701, %.thread564, %.loopexit572, %726, %800, %._crit_edge708, %600, %232
  %.0471 = phi i32 [ 1, %232 ], [ 1, %600 ], [ 0, %._crit_edge708 ], [ 0, %800 ], [ 0, %726 ], [ 0, %.loopexit572 ], [ 0, %.thread564 ], [ 0, %._crit_edge701 ]
  ret i32 %.0471
}

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

declare i32 @column_grouping(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"jacobian", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !7, i64 80, !7, i64 88, !10, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !7, i64 8}
!12 = !{!6, !10, i64 40}
!13 = !{!6, !7, i64 104}
!14 = !{!15, !7, i64 16}
!15 = !{!"sparse_matrix", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !7, i64 24, !7, i64 32}
!16 = !{!15, !7, i64 24}
!17 = !{!6, !10, i64 68}
!18 = !{!19, !7, i64 0}
!19 = !{!"numjac_workspace", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96}
!20 = !{!19, !7, i64 8}
!21 = !{!22, !22, i64 0}
!22 = !{!"double", !8, i64 0}
!23 = !{!24}
!24 = distinct !{!24, !25}
!25 = distinct !{!25, !"LVerDomain"}
!26 = !{!27}
!27 = distinct !{!27, !25}
!28 = !{!29, !24, !30}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = !{!30}
!32 = !{!29}
!33 = !{!24, !30}
!34 = distinct !{!34, !35, !36, !37}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!"llvm.loop.isvectorized", i32 1}
!37 = !{!"llvm.loop.unroll.runtime.disable"}
!38 = distinct !{!38, !35, !36}
!39 = distinct !{!39, !35}
!40 = distinct !{!40, !35}
!41 = !{!6, !10, i64 52}
!42 = !{!6, !10, i64 56}
!43 = !{!6, !10, i64 60}
!44 = !{!6, !10, i64 96}
!45 = !{!6, !7, i64 80}
!46 = !{!6, !7, i64 88}
!47 = !{!19, !7, i64 80}
!48 = !{!7, !7, i64 0}
!49 = !{!10, !10, i64 0}
!50 = distinct !{!50, !35}
!51 = distinct !{!51, !35}
!52 = distinct !{!52, !35}
!53 = distinct !{!53, !54}
!54 = !{!"llvm.loop.unroll.disable"}
!55 = distinct !{!55, !35}
!56 = !{!19, !7, i64 64}
!57 = distinct !{!57, !35}
!58 = distinct !{!58, !54}
!59 = !{!19, !7, i64 56}
!60 = distinct !{!60, !35}
!61 = distinct !{!61, !54}
!62 = distinct !{!62, !35}
!63 = !{!19, !7, i64 96}
!64 = !{!19, !7, i64 24}
!65 = !{!6, !7, i64 112}
!66 = !{!19, !7, i64 16}
!67 = distinct !{!67, !35}
!68 = distinct !{!68, !35}
!69 = distinct !{!69, !35}
!70 = distinct !{!70, !35}
!71 = !{!19, !7, i64 32}
!72 = distinct !{!72, !54}
!73 = distinct !{!73, !35, !36, !37}
!74 = !{!19, !7, i64 40}
!75 = distinct !{!75, !35, !36}
!76 = distinct !{!76, !54}
!77 = distinct !{!77, !35}
!78 = !{!19, !7, i64 88}
!79 = distinct !{!79, !35}
!80 = !{!19, !7, i64 48}
!81 = distinct !{!81, !35, !36, !37}
!82 = distinct !{!82, !35, !36}
!83 = !{!19, !7, i64 72}
!84 = distinct !{!84, !35}
!85 = distinct !{!85, !54}
!86 = distinct !{!86, !35}
!87 = distinct !{!87, !35}
!88 = distinct !{!88, !54}
!89 = distinct !{!89, !35}
!90 = !{!6, !10, i64 48}
!91 = !{!6, !10, i64 64}
!92 = distinct !{!92, !35}
!93 = distinct !{!93, !35}
!94 = distinct !{!94, !35}


; Effective O3 passes: BDCEPass,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