; 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.numjac_workspace = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@__func__.evolver_ndf15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @evolver_ndf15(ptr noundef %0, double noundef %1, double noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5, ptr noundef %6, double noundef %7, double noundef %8, ptr noundef %9, double noundef %10, ptr noundef %11, i32 noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) #0 {
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca ptr, align 8
  %28 = alloca double, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca [5 x double], align 16
  %35 = alloca [5 x double], align 16
  %36 = alloca [5 x double], align 16
  %37 = alloca [5 x double], align 16
  %38 = alloca double, align 8
  %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 i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca %struct.jacobian, align 8
  %69 = alloca %struct.numjac_workspace, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca double, align 8
  %80 = alloca double, align 8
  %81 = alloca double, align 8
  %82 = alloca double, align 8
  %83 = alloca double, align 8
  %84 = alloca double, align 8
  %85 = alloca double, align 8
  %86 = alloca double, align 8
  %87 = alloca double, align 8
  %88 = alloca double, align 8
  %89 = alloca double, align 8
  %90 = alloca double, align 8
  %91 = alloca double, align 8
  %92 = alloca double, align 8
  %93 = alloca double, align 8
  %94 = alloca double, align 8
  %95 = alloca double, align 8
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca [6 x i32], align 16
  %104 = alloca i32, align 4
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca i32, align 4
  %110 = alloca i32, align 4
  %111 = alloca ptr, align 8
  %112 = alloca i32, align 4
  %113 = alloca i32, align 4
  %114 = alloca [2048 x i8], align 16
  %115 = alloca i32, align 4
  %116 = alloca [2048 x i8], align 16
  %117 = alloca [2048 x i8], align 16
  %118 = alloca [2048 x i8], align 16
  %119 = alloca [2048 x i8], align 16
  %120 = alloca [2048 x i8], align 16
  %121 = alloca [2048 x i8], align 16
  %122 = alloca [2048 x i8], align 16
  %123 = alloca [2048 x i8], align 16
  %124 = alloca [2048 x i8], align 16
  %125 = alloca [2048 x i8], align 16
  %126 = alloca [2048 x i8], align 16
  %127 = alloca [2048 x i8], align 16
  %128 = alloca [2048 x i8], align 16
  %129 = alloca [2048 x i8], align 16
  %130 = alloca [2048 x i8], align 16
  %131 = alloca [2048 x i8], align 16
  %132 = alloca [2048 x i8], align 16
  %133 = alloca [2048 x i8], align 16
  %134 = alloca [2048 x i8], align 16
  %135 = alloca [2048 x i8], align 16
  %136 = alloca [2048 x i8], align 16
  %137 = alloca [2048 x i8], align 16
  store ptr %0, ptr %18, align 8, !tbaa !5
  store double %1, ptr %19, align 8, !tbaa !9
  store double %2, ptr %20, align 8, !tbaa !9
  store ptr %3, ptr %21, align 8, !tbaa !5
  store ptr %4, ptr %22, align 8, !tbaa !5
  store i32 %5, ptr %23, align 4, !tbaa !11
  store ptr %6, ptr %24, align 8, !tbaa !5
  store double %7, ptr %25, align 8, !tbaa !9
  store double %8, ptr %26, align 8, !tbaa !9
  store ptr %9, ptr %27, align 8, !tbaa !5
  store double %10, ptr %28, align 8, !tbaa !9
  store ptr %11, ptr %29, align 8, !tbaa !5
  store i32 %12, ptr %30, align 4, !tbaa !11
  store ptr %13, ptr %31, align 8, !tbaa !5
  store ptr %14, ptr %32, align 8, !tbaa !5
  store ptr %15, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %34) #7
  call void @llvm.memset.p0.i64(ptr align 16 %34, i8 0, i64 40, i1 false)
  %138 = getelementptr inbounds [5 x double], ptr %34, i32 0, i32 0
  store double 1.000000e+00, ptr %138, align 16
  %139 = getelementptr inbounds [5 x double], ptr %34, i32 0, i32 1
  store double 1.500000e+00, ptr %139, align 8
  %140 = getelementptr inbounds [5 x double], ptr %34, i32 0, i32 2
  store double 0x3FFD555555555555, ptr %140, align 16
  %141 = getelementptr inbounds [5 x double], ptr %34, i32 0, i32 3
  store double 0x4000AAAAAAAAAAAB, ptr %141, align 8
  %142 = getelementptr inbounds [5 x double], ptr %34, i32 0, i32 4
  store double 0x4002444444444444, ptr %142, align 16
  call void @llvm.lifetime.start.p0(i64 40, ptr %35) #7
  call void @llvm.memset.p0.i64(ptr align 16 %35, i8 0, i64 40, i1 false)
  %143 = getelementptr inbounds [5 x double], ptr %35, i32 0, i32 0
  store double -1.850000e-01, ptr %143, align 16
  %144 = getelementptr inbounds [5 x double], ptr %35, i32 0, i32 1
  store double 0xBFBC71C71C71C71C, ptr %144, align 8
  %145 = getelementptr inbounds [5 x double], ptr %35, i32 0, i32 2
  store double 0xBFB5119CE075F6FD, ptr %145, align 16
  %146 = getelementptr inbounds [5 x double], ptr %35, i32 0, i32 3
  store double -4.150000e-02, ptr %146, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %37) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  store double 1.000000e-15, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  store double 0x3C9CD2B297D889BC, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  %147 = load double, ptr %38, align 8, !tbaa !9
  store double %147, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #7
  store i32 4, ptr %41, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  store i32 5, ptr %42, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  call void @llvm.lifetime.start.p0(i64 144, ptr %68) #7
  call void @llvm.lifetime.start.p0(i64 104, ptr %69) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #7
  store double 0.000000e+00, ptr %73, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  store double 0.000000e+00, ptr %84, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #7
  store double 0.000000e+00, ptr %91, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %103) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %109) #7
  %148 = load i32, ptr %23, align 4, !tbaa !11
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %109, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #7
  store i32 0, ptr %110, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #7
  %150 = load i32, ptr %109, align 4, !tbaa !11
  %151 = mul nsw i32 15, %150
  %152 = sext i32 %151 to i64
  %153 = mul i64 %152, 8
  %154 = load i32, ptr %109, align 4, !tbaa !11
  %155 = sext i32 %154 to i64
  %156 = mul i64 %155, 4
  %157 = add i64 %153, %156
  %158 = load i32, ptr %109, align 4, !tbaa !11
  %159 = sext i32 %158 to i64
  %160 = mul i64 %159, 8
  %161 = add i64 %157, %160
  %162 = load i32, ptr %23, align 4, !tbaa !11
  %163 = mul nsw i32 7, %162
  %164 = add nsw i32 %163, 1
  %165 = sext i32 %164 to i64
  %166 = mul i64 %165, 8
  %167 = add i64 %161, %166
  %168 = trunc i64 %167 to i32
  store i32 %168, ptr %112, align 4, !tbaa !11
  %169 = load i32, ptr %112, align 4, !tbaa !11
  %170 = sext i32 %169 to i64
  %171 = call noalias ptr @malloc(i64 noundef %170) #8
  store ptr %171, ptr %111, align 8, !tbaa !5
  %172 = load ptr, ptr %111, align 8, !tbaa !5
  %173 = icmp eq ptr %172, null
  br i1 %173, label %174, label %180

174:                                              ; preds = %16
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #7
  %175 = load i32, ptr %112, align 4, !tbaa !11
  store i32 %175, ptr %113, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2048, ptr %114) #7
  %176 = getelementptr inbounds [2048 x i8], ptr %114, i64 0, i64 0
  %177 = load i32, ptr %113, align 4, !tbaa !11
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %176, ptr noundef @.str, ptr noundef @.str.1, i32 noundef %177)
  %178 = load ptr, ptr %33, align 8, !tbaa !5
  %179 = getelementptr inbounds [2048 x i8], ptr %114, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %178, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 127, ptr noundef %179)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %114) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #7
  br label %2312

180:                                              ; preds = %16
  %181 = load ptr, ptr %111, align 8, !tbaa !5
  store ptr %181, ptr %51, align 8, !tbaa !5
  %182 = load ptr, ptr %51, align 8, !tbaa !5
  %183 = load i32, ptr %109, align 4, !tbaa !11
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %182, i64 %184
  store ptr %185, ptr %53, align 8, !tbaa !5
  %186 = load ptr, ptr %53, align 8, !tbaa !5
  %187 = load i32, ptr %109, align 4, !tbaa !11
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds double, ptr %186, i64 %188
  store ptr %189, ptr %54, align 8, !tbaa !5
  %190 = load ptr, ptr %54, align 8, !tbaa !5
  %191 = load i32, ptr %109, align 4, !tbaa !11
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds double, ptr %190, i64 %192
  store ptr %193, ptr %55, align 8, !tbaa !5
  %194 = load ptr, ptr %55, align 8, !tbaa !5
  %195 = load i32, ptr %109, align 4, !tbaa !11
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds double, ptr %194, i64 %196
  store ptr %197, ptr %52, align 8, !tbaa !5
  %198 = load ptr, ptr %52, align 8, !tbaa !5
  %199 = load i32, ptr %109, align 4, !tbaa !11
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds double, ptr %198, i64 %200
  store ptr %201, ptr %57, align 8, !tbaa !5
  %202 = load ptr, ptr %57, align 8, !tbaa !5
  %203 = load i32, ptr %109, align 4, !tbaa !11
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds double, ptr %202, i64 %204
  store ptr %205, ptr %58, align 8, !tbaa !5
  %206 = load ptr, ptr %58, align 8, !tbaa !5
  %207 = load i32, ptr %109, align 4, !tbaa !11
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  store ptr %209, ptr %59, align 8, !tbaa !5
  %210 = load ptr, ptr %59, align 8, !tbaa !5
  %211 = load i32, ptr %109, align 4, !tbaa !11
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds double, ptr %210, i64 %212
  store ptr %213, ptr %60, align 8, !tbaa !5
  %214 = load ptr, ptr %60, align 8, !tbaa !5
  %215 = load i32, ptr %109, align 4, !tbaa !11
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds double, ptr %214, i64 %216
  store ptr %217, ptr %61, align 8, !tbaa !5
  %218 = load ptr, ptr %61, align 8, !tbaa !5
  %219 = load i32, ptr %109, align 4, !tbaa !11
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds double, ptr %218, i64 %220
  store ptr %221, ptr %62, align 8, !tbaa !5
  %222 = load ptr, ptr %62, align 8, !tbaa !5
  %223 = load i32, ptr %109, align 4, !tbaa !11
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %222, i64 %224
  store ptr %225, ptr %65, align 8, !tbaa !5
  %226 = load ptr, ptr %65, align 8, !tbaa !5
  %227 = load i32, ptr %109, align 4, !tbaa !11
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds double, ptr %226, i64 %228
  store ptr %229, ptr %66, align 8, !tbaa !5
  %230 = load ptr, ptr %66, align 8, !tbaa !5
  %231 = load i32, ptr %109, align 4, !tbaa !11
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds double, ptr %230, i64 %232
  store ptr %233, ptr %63, align 8, !tbaa !5
  %234 = load ptr, ptr %63, align 8, !tbaa !5
  %235 = load i32, ptr %109, align 4, !tbaa !11
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds double, ptr %234, i64 %236
  store ptr %237, ptr %64, align 8, !tbaa !5
  %238 = load ptr, ptr %64, align 8, !tbaa !5
  %239 = load i32, ptr %109, align 4, !tbaa !11
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds double, ptr %238, i64 %240
  store ptr %241, ptr %50, align 8, !tbaa !5
  %242 = load ptr, ptr %50, align 8, !tbaa !5
  %243 = load i32, ptr %109, align 4, !tbaa !11
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds i32, ptr %242, i64 %244
  store ptr %245, ptr %67, align 8, !tbaa !5
  %246 = load ptr, ptr %67, align 8, !tbaa !5
  %247 = load i32, ptr %109, align 4, !tbaa !11
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds ptr, ptr %246, i64 %248
  %250 = load ptr, ptr %67, align 8, !tbaa !5
  %251 = getelementptr inbounds ptr, ptr %250, i64 1
  store ptr %249, ptr %251, align 8, !tbaa !5
  store i32 2, ptr %105, align 4, !tbaa !11
  br label %252

252:                                              ; preds = %268, %180
  %253 = load i32, ptr %105, align 4, !tbaa !11
  %254 = load i32, ptr %23, align 4, !tbaa !11
  %255 = icmp sle i32 %253, %254
  br i1 %255, label %256, label %271

256:                                              ; preds = %252
  %257 = load ptr, ptr %67, align 8, !tbaa !5
  %258 = load i32, ptr %105, align 4, !tbaa !11
  %259 = sub nsw i32 %258, 1
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds ptr, ptr %257, i64 %260
  %262 = load ptr, ptr %261, align 8, !tbaa !5
  %263 = getelementptr inbounds double, ptr %262, i64 7
  %264 = load ptr, ptr %67, align 8, !tbaa !5
  %265 = load i32, ptr %105, align 4, !tbaa !11
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds ptr, ptr %264, i64 %266
  store ptr %263, ptr %267, align 8, !tbaa !5
  br label %268

268:                                              ; preds = %256
  %269 = load i32, ptr %105, align 4, !tbaa !11
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %105, align 4, !tbaa !11
  br label %252, !llvm.loop !13

271:                                              ; preds = %252
  %272 = load ptr, ptr %67, align 8, !tbaa !5
  %273 = getelementptr inbounds ptr, ptr %272, i64 0
  store ptr null, ptr %273, align 8, !tbaa !5
  store i32 1, ptr %105, align 4, !tbaa !11
  br label %274

274:                                              ; preds = %295, %271
  %275 = load i32, ptr %105, align 4, !tbaa !11
  %276 = load i32, ptr %23, align 4, !tbaa !11
  %277 = icmp sle i32 %275, %276
  br i1 %277, label %278, label %298

278:                                              ; preds = %274
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %279

279:                                              ; preds = %291, %278
  %280 = load i32, ptr %106, align 4, !tbaa !11
  %281 = icmp sle i32 %280, 7
  br i1 %281, label %282, label %294

282:                                              ; preds = %279
  %283 = load ptr, ptr %67, align 8, !tbaa !5
  %284 = load i32, ptr %105, align 4, !tbaa !11
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds ptr, ptr %283, i64 %285
  %287 = load ptr, ptr %286, align 8, !tbaa !5
  %288 = load i32, ptr %106, align 4, !tbaa !11
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds double, ptr %287, i64 %289
  store double 0.000000e+00, ptr %290, align 8, !tbaa !9
  br label %291

291:                                              ; preds = %282
  %292 = load i32, ptr %106, align 4, !tbaa !11
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr %106, align 4, !tbaa !11
  br label %279, !llvm.loop !15

294:                                              ; preds = %279
  br label %295

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

298:                                              ; preds = %274
  %299 = load ptr, ptr %21, align 8, !tbaa !5
  %300 = getelementptr inbounds double, ptr %299, i64 -1
  store ptr %300, ptr %56, align 8, !tbaa !5
  %301 = load i32, ptr %23, align 4, !tbaa !11
  %302 = load ptr, ptr %33, align 8, !tbaa !5
  %303 = call i32 @initialize_jacobian(ptr noundef %68, i32 noundef %301, ptr noundef %302)
  %304 = icmp eq i32 %303, 1
  br i1 %304, label %305, label %310

305:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 2048, ptr %116) #7
  %306 = getelementptr inbounds [2048 x i8], ptr %116, i64 0, i64 0
  %307 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %306, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef %307)
  %308 = load ptr, ptr %33, align 8, !tbaa !5
  %309 = getelementptr inbounds [2048 x i8], ptr %116, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %308, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 186, ptr noundef %309)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %116) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

310:                                              ; preds = %298
  %311 = load i32, ptr %23, align 4, !tbaa !11
  %312 = load ptr, ptr %33, align 8, !tbaa !5
  %313 = call i32 @initialize_numjac_workspace(ptr noundef %69, i32 noundef %311, ptr noundef %312)
  %314 = icmp eq i32 %313, 1
  br i1 %314, label %315, label %320

315:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 2048, ptr %117) #7
  %316 = getelementptr inbounds [2048 x i8], ptr %117, i64 0, i64 0
  %317 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %316, ptr noundef @.str.3, ptr noundef @.str.5, ptr noundef %317)
  %318 = load ptr, ptr %33, align 8, !tbaa !5
  %319 = getelementptr inbounds [2048 x i8], ptr %117, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %318, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 189, ptr noundef %319)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %117) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

320:                                              ; preds = %310
  store i32 0, ptr %106, align 4, !tbaa !11
  br label %321

321:                                              ; preds = %355, %320
  %322 = load i32, ptr %106, align 4, !tbaa !11
  %323 = icmp slt i32 %322, 5
  br i1 %323, label %324, label %358

324:                                              ; preds = %321
  %325 = load i32, ptr %106, align 4, !tbaa !11
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds [5 x double], ptr %34, i64 0, i64 %326
  %328 = load double, ptr %327, align 8, !tbaa !9
  %329 = load i32, ptr %106, align 4, !tbaa !11
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds [5 x double], ptr %35, i64 0, i64 %330
  %332 = load double, ptr %331, align 8, !tbaa !9
  %333 = fsub double 1.000000e+00, %332
  %334 = fmul double %328, %333
  %335 = fdiv double 1.000000e+00, %334
  %336 = load i32, ptr %106, align 4, !tbaa !11
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds [5 x double], ptr %36, i64 0, i64 %337
  store double %335, ptr %338, align 8, !tbaa !9
  %339 = load i32, ptr %106, align 4, !tbaa !11
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [5 x double], ptr %35, i64 0, i64 %340
  %342 = load double, ptr %341, align 8, !tbaa !9
  %343 = load i32, ptr %106, align 4, !tbaa !11
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds [5 x double], ptr %34, i64 0, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !9
  %347 = load i32, ptr %106, align 4, !tbaa !11
  %348 = sitofp i32 %347 to double
  %349 = fadd double 2.000000e+00, %348
  %350 = fdiv double 1.000000e+00, %349
  %351 = call double @llvm.fmuladd.f64(double %342, double %346, double %350)
  %352 = load i32, ptr %106, align 4, !tbaa !11
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [5 x double], ptr %37, i64 0, i64 %353
  store double %351, ptr %354, align 8, !tbaa !9
  br label %355

355:                                              ; preds = %324
  %356 = load i32, ptr %106, align 4, !tbaa !11
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %106, align 4, !tbaa !11
  br label %321, !llvm.loop !17

358:                                              ; preds = %321
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %359

359:                                              ; preds = %393, %358
  %360 = load i32, ptr %106, align 4, !tbaa !11
  %361 = load i32, ptr %23, align 4, !tbaa !11
  %362 = icmp sle i32 %360, %361
  br i1 %362, label %363, label %396

363:                                              ; preds = %359
  %364 = load ptr, ptr %21, align 8, !tbaa !5
  %365 = load i32, ptr %106, align 4, !tbaa !11
  %366 = sub nsw i32 %365, 1
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds double, ptr %364, i64 %367
  %369 = load double, ptr %368, align 8, !tbaa !9
  %370 = load ptr, ptr %52, align 8, !tbaa !5
  %371 = load i32, ptr %106, align 4, !tbaa !11
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %370, i64 %372
  store double %369, ptr %373, align 8, !tbaa !9
  %374 = load ptr, ptr %32, align 8, !tbaa !5
  %375 = icmp eq ptr %374, null
  br i1 %375, label %376, label %387

376:                                              ; preds = %363
  %377 = load ptr, ptr %22, align 8, !tbaa !5
  %378 = load i32, ptr %106, align 4, !tbaa !11
  %379 = sub nsw i32 %378, 1
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds i32, ptr %377, i64 %380
  %382 = load i32, ptr %381, align 4, !tbaa !11
  %383 = load ptr, ptr %50, align 8, !tbaa !5
  %384 = load i32, ptr %106, align 4, !tbaa !11
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds i32, ptr %383, i64 %385
  store i32 %382, ptr %386, align 4, !tbaa !11
  br label %392

387:                                              ; preds = %363
  %388 = load ptr, ptr %50, align 8, !tbaa !5
  %389 = load i32, ptr %106, align 4, !tbaa !11
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %388, i64 %390
  store i32 1, ptr %391, align 4, !tbaa !11
  br label %392

392:                                              ; preds = %387, %376
  br label %393

393:                                              ; preds = %392
  %394 = load i32, ptr %106, align 4, !tbaa !11
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %106, align 4, !tbaa !11
  br label %359, !llvm.loop !18

396:                                              ; preds = %359
  %397 = load double, ptr %19, align 8, !tbaa !9
  store double %397, ptr %71, align 8, !tbaa !9
  %398 = load double, ptr %20, align 8, !tbaa !9
  store double %398, ptr %72, align 8, !tbaa !9
  store i32 0, ptr %100, align 4, !tbaa !11
  br label %399

399:                                              ; preds = %407, %396
  %400 = load ptr, ptr %29, align 8, !tbaa !5
  %401 = load i32, ptr %100, align 4, !tbaa !11
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds double, ptr %400, i64 %402
  %404 = load double, ptr %403, align 8, !tbaa !9
  %405 = load double, ptr %71, align 8, !tbaa !9
  %406 = fcmp olt double %404, %405
  br i1 %406, label %407, label %410

407:                                              ; preds = %399
  %408 = load i32, ptr %100, align 4, !tbaa !11
  %409 = add nsw i32 %408, 1
  store i32 %409, ptr %100, align 4, !tbaa !11
  br label %399, !llvm.loop !19

410:                                              ; preds = %399
  %411 = load i32, ptr %110, align 4, !tbaa !11
  %412 = icmp sgt i32 %411, 1
  br i1 %412, label %413, label %436

413:                                              ; preds = %410
  store i32 0, ptr %108, align 4, !tbaa !11
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %414

414:                                              ; preds = %429, %413
  %415 = load i32, ptr %106, align 4, !tbaa !11
  %416 = load i32, ptr %23, align 4, !tbaa !11
  %417 = icmp sle i32 %415, %416
  br i1 %417, label %418, label %432

418:                                              ; preds = %414
  %419 = load ptr, ptr %50, align 8, !tbaa !5
  %420 = load i32, ptr %106, align 4, !tbaa !11
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !11
  %424 = icmp eq i32 %423, 1
  br i1 %424, label %425, label %428

425:                                              ; preds = %418
  %426 = load i32, ptr %108, align 4, !tbaa !11
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr %108, align 4, !tbaa !11
  br label %428

428:                                              ; preds = %425, %418
  br label %429

429:                                              ; preds = %428
  %430 = load i32, ptr %106, align 4, !tbaa !11
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %106, align 4, !tbaa !11
  br label %414, !llvm.loop !20

432:                                              ; preds = %414
  %433 = load i32, ptr %108, align 4, !tbaa !11
  %434 = load i32, ptr %23, align 4, !tbaa !11
  %435 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef %433, i32 noundef %434)
  br label %436

436:                                              ; preds = %432, %410
  %437 = load double, ptr %72, align 8, !tbaa !9
  %438 = load double, ptr %71, align 8, !tbaa !9
  %439 = fsub double %437, %438
  %440 = call double @llvm.fabs.f64(double %439)
  store double %440, ptr %75, align 8, !tbaa !9
  store i32 0, ptr %106, align 4, !tbaa !11
  br label %441

441:                                              ; preds = %448, %436
  %442 = load i32, ptr %106, align 4, !tbaa !11
  %443 = icmp slt i32 %442, 6
  br i1 %443, label %444, label %451

444:                                              ; preds = %441
  %445 = load i32, ptr %106, align 4, !tbaa !11
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 %446
  store i32 0, ptr %447, align 4, !tbaa !11
  br label %448

448:                                              ; preds = %444
  %449 = load i32, ptr %106, align 4, !tbaa !11
  %450 = add nsw i32 %449, 1
  store i32 %450, ptr %106, align 4, !tbaa !11
  br label %441, !llvm.loop !21

451:                                              ; preds = %441
  %452 = load ptr, ptr %18, align 8, !tbaa !5
  %453 = load double, ptr %71, align 8, !tbaa !9
  %454 = load ptr, ptr %52, align 8, !tbaa !5
  %455 = getelementptr inbounds double, ptr %454, i64 1
  %456 = load ptr, ptr %51, align 8, !tbaa !5
  %457 = getelementptr inbounds double, ptr %456, i64 1
  %458 = load ptr, ptr %24, align 8, !tbaa !5
  %459 = load ptr, ptr %33, align 8, !tbaa !5
  %460 = call i32 %452(double noundef %453, ptr noundef %455, ptr noundef %457, ptr noundef %458, ptr noundef %459)
  %461 = icmp eq i32 %460, 1
  br i1 %461, label %462, label %467

462:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 2048, ptr %118) #7
  %463 = getelementptr inbounds [2048 x i8], ptr %118, i64 0, i64 0
  %464 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %463, ptr noundef @.str.3, ptr noundef @.str.7, ptr noundef %464)
  %465 = load ptr, ptr %33, align 8, !tbaa !5
  %466 = getelementptr inbounds [2048 x i8], ptr %118, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %465, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 226, ptr noundef %466)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %118) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

467:                                              ; preds = %451
  %468 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 2
  %469 = load i32, ptr %468, align 8, !tbaa !11
  %470 = add nsw i32 %469, 1
  store i32 %470, ptr %468, align 8, !tbaa !11
  %471 = load double, ptr %72, align 8, !tbaa !9
  %472 = load double, ptr %71, align 8, !tbaa !9
  %473 = fsub double %471, %472
  %474 = fcmp olt double %473, 0.000000e+00
  br i1 %474, label %475, label %476

475:                                              ; preds = %467
  store i32 -1, ptr %102, align 4, !tbaa !11
  br label %477

476:                                              ; preds = %467
  store i32 1, ptr %102, align 4, !tbaa !11
  br label %477

477:                                              ; preds = %476, %475
  %478 = load double, ptr %72, align 8, !tbaa !9
  %479 = load double, ptr %71, align 8, !tbaa !9
  %480 = fsub double %478, %479
  %481 = fdiv double %480, 1.000000e+01
  store double %481, ptr %78, align 8, !tbaa !9
  %482 = load double, ptr %71, align 8, !tbaa !9
  store double %482, ptr %70, align 8, !tbaa !9
  store i32 0, ptr %104, align 4, !tbaa !11
  %483 = load ptr, ptr %18, align 8, !tbaa !5
  %484 = load double, ptr %70, align 8, !tbaa !9
  %485 = load ptr, ptr %52, align 8, !tbaa !5
  %486 = load ptr, ptr %51, align 8, !tbaa !5
  %487 = load double, ptr %38, align 8, !tbaa !9
  %488 = load i32, ptr %23, align 4, !tbaa !11
  %489 = load ptr, ptr %24, align 8, !tbaa !5
  %490 = load ptr, ptr %33, align 8, !tbaa !5
  %491 = call i32 @numjac(ptr noundef %483, double noundef %484, ptr noundef %485, ptr noundef %486, ptr noundef %68, ptr noundef %69, double noundef %487, i32 noundef %488, ptr noundef %104, ptr noundef %489, ptr noundef %490)
  %492 = icmp eq i32 %491, 1
  br i1 %492, label %493, label %498

493:                                              ; preds = %477
  call void @llvm.lifetime.start.p0(i64 2048, ptr %119) #7
  %494 = getelementptr inbounds [2048 x i8], ptr %119, i64 0, i64 0
  %495 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %494, ptr noundef @.str.3, ptr noundef @.str.8, ptr noundef %495)
  %496 = load ptr, ptr %33, align 8, !tbaa !5
  %497 = getelementptr inbounds [2048 x i8], ptr %119, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %496, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 241, ptr noundef %497)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %119) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

498:                                              ; preds = %477
  %499 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 3
  %500 = load i32, ptr %499, align 4, !tbaa !11
  %501 = add nsw i32 %500, 1
  store i32 %501, ptr %499, align 4, !tbaa !11
  %502 = load i32, ptr %104, align 4, !tbaa !11
  %503 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 2
  %504 = load i32, ptr %503, align 8, !tbaa !11
  %505 = add nsw i32 %504, %502
  store i32 %505, ptr %503, align 8, !tbaa !11
  store i32 1, ptr %43, align 4, !tbaa !11
  %506 = load double, ptr %39, align 8, !tbaa !9
  %507 = fmul double 1.600000e+01, %506
  %508 = load double, ptr %70, align 8, !tbaa !9
  %509 = call double @llvm.fabs.f64(double %508)
  %510 = fmul double %507, %509
  store double %510, ptr %77, align 8, !tbaa !9
  store double 0.000000e+00, ptr %74, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %511

511:                                              ; preds = %578, %498
  %512 = load i32, ptr %107, align 4, !tbaa !11
  %513 = load i32, ptr %23, align 4, !tbaa !11
  %514 = icmp sle i32 %512, %513
  br i1 %514, label %515, label %581

515:                                              ; preds = %511
  %516 = load ptr, ptr %52, align 8, !tbaa !5
  %517 = load i32, ptr %107, align 4, !tbaa !11
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds double, ptr %516, i64 %518
  %520 = load double, ptr %519, align 8, !tbaa !9
  %521 = call double @llvm.fabs.f64(double %520)
  %522 = load double, ptr %40, align 8, !tbaa !9
  %523 = fcmp olt double %521, %522
  br i1 %523, label %524, label %526

524:                                              ; preds = %515
  %525 = load double, ptr %40, align 8, !tbaa !9
  br label %533

526:                                              ; preds = %515
  %527 = load ptr, ptr %52, align 8, !tbaa !5
  %528 = load i32, ptr %107, align 4, !tbaa !11
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds double, ptr %527, i64 %529
  %531 = load double, ptr %530, align 8, !tbaa !9
  %532 = call double @llvm.fabs.f64(double %531)
  br label %533

533:                                              ; preds = %526, %524
  %534 = phi double [ %525, %524 ], [ %532, %526 ]
  %535 = load ptr, ptr %53, align 8, !tbaa !5
  %536 = load i32, ptr %107, align 4, !tbaa !11
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds double, ptr %535, i64 %537
  store double %534, ptr %538, align 8, !tbaa !9
  %539 = load double, ptr %74, align 8, !tbaa !9
  %540 = load double, ptr %25, align 8, !tbaa !9
  %541 = call double @sqrt(double noundef %540) #7
  %542 = fdiv double 1.250000e+00, %541
  %543 = load ptr, ptr %51, align 8, !tbaa !5
  %544 = load i32, ptr %107, align 4, !tbaa !11
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds double, ptr %543, i64 %545
  %547 = load double, ptr %546, align 8, !tbaa !9
  %548 = load ptr, ptr %53, align 8, !tbaa !5
  %549 = load i32, ptr %107, align 4, !tbaa !11
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds double, ptr %548, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !9
  %553 = fdiv double %547, %552
  %554 = call double @llvm.fabs.f64(double %553)
  %555 = fmul double %542, %554
  %556 = fcmp olt double %539, %555
  br i1 %556, label %557, label %574

557:                                              ; preds = %533
  %558 = load double, ptr %25, align 8, !tbaa !9
  %559 = call double @sqrt(double noundef %558) #7
  %560 = fdiv double 1.250000e+00, %559
  %561 = load ptr, ptr %51, align 8, !tbaa !5
  %562 = load i32, ptr %107, align 4, !tbaa !11
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %561, i64 %563
  %565 = load double, ptr %564, align 8, !tbaa !9
  %566 = load ptr, ptr %53, align 8, !tbaa !5
  %567 = load i32, ptr %107, align 4, !tbaa !11
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds double, ptr %566, i64 %568
  %570 = load double, ptr %569, align 8, !tbaa !9
  %571 = fdiv double %565, %570
  %572 = call double @llvm.fabs.f64(double %571)
  %573 = fmul double %560, %572
  br label %576

574:                                              ; preds = %533
  %575 = load double, ptr %74, align 8, !tbaa !9
  br label %576

576:                                              ; preds = %574, %557
  %577 = phi double [ %573, %557 ], [ %575, %574 ]
  store double %577, ptr %74, align 8, !tbaa !9
  br label %578

578:                                              ; preds = %576
  %579 = load i32, ptr %107, align 4, !tbaa !11
  %580 = add nsw i32 %579, 1
  store i32 %580, ptr %107, align 4, !tbaa !11
  br label %511, !llvm.loop !22

581:                                              ; preds = %511
  %582 = load double, ptr %78, align 8, !tbaa !9
  %583 = load double, ptr %75, align 8, !tbaa !9
  %584 = fcmp olt double %582, %583
  br i1 %584, label %585, label %587

585:                                              ; preds = %581
  %586 = load double, ptr %78, align 8, !tbaa !9
  br label %589

587:                                              ; preds = %581
  %588 = load double, ptr %75, align 8, !tbaa !9
  br label %589

589:                                              ; preds = %587, %585
  %590 = phi double [ %586, %585 ], [ %588, %587 ]
  store double %590, ptr %76, align 8, !tbaa !9
  %591 = load double, ptr %76, align 8, !tbaa !9
  %592 = load double, ptr %74, align 8, !tbaa !9
  %593 = fmul double %591, %592
  %594 = fcmp ogt double %593, 1.000000e+00
  br i1 %594, label %595, label %598

595:                                              ; preds = %589
  %596 = load double, ptr %74, align 8, !tbaa !9
  %597 = fdiv double 1.000000e+00, %596
  store double %597, ptr %76, align 8, !tbaa !9
  br label %598

598:                                              ; preds = %595, %589
  %599 = load double, ptr %76, align 8, !tbaa !9
  %600 = load double, ptr %77, align 8, !tbaa !9
  %601 = fcmp olt double %599, %600
  br i1 %601, label %602, label %604

602:                                              ; preds = %598
  %603 = load double, ptr %77, align 8, !tbaa !9
  br label %606

604:                                              ; preds = %598
  %605 = load double, ptr %76, align 8, !tbaa !9
  br label %606

606:                                              ; preds = %604, %602
  %607 = phi double [ %603, %602 ], [ %605, %604 ]
  store double %607, ptr %76, align 8, !tbaa !9
  %608 = load i32, ptr %102, align 4, !tbaa !11
  %609 = sitofp i32 %608 to double
  %610 = load double, ptr %76, align 8, !tbaa !9
  %611 = fmul double %609, %610
  store double %611, ptr %79, align 8, !tbaa !9
  %612 = load double, ptr %70, align 8, !tbaa !9
  %613 = load i32, ptr %102, align 4, !tbaa !11
  %614 = sitofp i32 %613 to double
  %615 = load double, ptr %39, align 8, !tbaa !9
  %616 = call double @sqrt(double noundef %615) #7
  %617 = load double, ptr %70, align 8, !tbaa !9
  %618 = call double @llvm.fabs.f64(double %617)
  %619 = load double, ptr %70, align 8, !tbaa !9
  %620 = load double, ptr %79, align 8, !tbaa !9
  %621 = fadd double %619, %620
  %622 = call double @llvm.fabs.f64(double %621)
  %623 = fcmp olt double %618, %622
  br i1 %623, label %624, label %629

624:                                              ; preds = %606
  %625 = load double, ptr %70, align 8, !tbaa !9
  %626 = load double, ptr %79, align 8, !tbaa !9
  %627 = fadd double %625, %626
  %628 = call double @llvm.fabs.f64(double %627)
  br label %632

629:                                              ; preds = %606
  %630 = load double, ptr %70, align 8, !tbaa !9
  %631 = call double @llvm.fabs.f64(double %630)
  br label %632

632:                                              ; preds = %629, %624
  %633 = phi double [ %628, %624 ], [ %631, %629 ]
  %634 = fmul double %616, %633
  %635 = load double, ptr %76, align 8, !tbaa !9
  %636 = fcmp olt double %634, %635
  br i1 %636, label %637, label %658

637:                                              ; preds = %632
  %638 = load double, ptr %39, align 8, !tbaa !9
  %639 = call double @sqrt(double noundef %638) #7
  %640 = load double, ptr %70, align 8, !tbaa !9
  %641 = call double @llvm.fabs.f64(double %640)
  %642 = load double, ptr %70, align 8, !tbaa !9
  %643 = load double, ptr %79, align 8, !tbaa !9
  %644 = fadd double %642, %643
  %645 = call double @llvm.fabs.f64(double %644)
  %646 = fcmp olt double %641, %645
  br i1 %646, label %647, label %652

647:                                              ; preds = %637
  %648 = load double, ptr %70, align 8, !tbaa !9
  %649 = load double, ptr %79, align 8, !tbaa !9
  %650 = fadd double %648, %649
  %651 = call double @llvm.fabs.f64(double %650)
  br label %655

652:                                              ; preds = %637
  %653 = load double, ptr %70, align 8, !tbaa !9
  %654 = call double @llvm.fabs.f64(double %653)
  br label %655

655:                                              ; preds = %652, %647
  %656 = phi double [ %651, %647 ], [ %654, %652 ]
  %657 = fmul double %639, %656
  br label %660

658:                                              ; preds = %632
  %659 = load double, ptr %76, align 8, !tbaa !9
  br label %660

660:                                              ; preds = %658, %655
  %661 = phi double [ %657, %655 ], [ %659, %658 ]
  %662 = call double @llvm.fmuladd.f64(double %614, double %661, double %612)
  %663 = load double, ptr %70, align 8, !tbaa !9
  %664 = fsub double %662, %663
  store double %664, ptr %80, align 8, !tbaa !9
  %665 = load ptr, ptr %18, align 8, !tbaa !5
  %666 = load double, ptr %70, align 8, !tbaa !9
  %667 = load double, ptr %80, align 8, !tbaa !9
  %668 = fadd double %666, %667
  %669 = load ptr, ptr %52, align 8, !tbaa !5
  %670 = getelementptr inbounds double, ptr %669, i64 1
  %671 = load ptr, ptr %63, align 8, !tbaa !5
  %672 = getelementptr inbounds double, ptr %671, i64 1
  %673 = load ptr, ptr %24, align 8, !tbaa !5
  %674 = load ptr, ptr %33, align 8, !tbaa !5
  %675 = call i32 %665(double noundef %668, ptr noundef %670, ptr noundef %672, ptr noundef %673, ptr noundef %674)
  %676 = icmp eq i32 %675, 1
  br i1 %676, label %677, label %682

677:                                              ; preds = %660
  call void @llvm.lifetime.start.p0(i64 2048, ptr %120) #7
  %678 = getelementptr inbounds [2048 x i8], ptr %120, i64 0, i64 0
  %679 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %678, ptr noundef @.str.3, ptr noundef @.str.9, ptr noundef %679)
  %680 = load ptr, ptr %33, align 8, !tbaa !5
  %681 = getelementptr inbounds [2048 x i8], ptr %120, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %680, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 264, ptr noundef %681)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %120) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

682:                                              ; preds = %660
  %683 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 2
  %684 = load i32, ptr %683, align 8, !tbaa !11
  %685 = add nsw i32 %684, 1
  store i32 %685, ptr %683, align 8, !tbaa !11
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %686

686:                                              ; preds = %725, %682
  %687 = load i32, ptr %106, align 4, !tbaa !11
  %688 = load i32, ptr %23, align 4, !tbaa !11
  %689 = icmp sle i32 %687, %688
  br i1 %689, label %690, label %728

690:                                              ; preds = %686
  %691 = load ptr, ptr %54, align 8, !tbaa !5
  %692 = load i32, ptr %106, align 4, !tbaa !11
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds double, ptr %691, i64 %693
  store double 0.000000e+00, ptr %694, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %695

695:                                              ; preds = %721, %690
  %696 = load i32, ptr %107, align 4, !tbaa !11
  %697 = load i32, ptr %23, align 4, !tbaa !11
  %698 = icmp sle i32 %696, %697
  br i1 %698, label %699, label %724

699:                                              ; preds = %695
  %700 = getelementptr inbounds %struct.jacobian, ptr %68, i32 0, i32 0
  %701 = load ptr, ptr %700, align 8, !tbaa !23
  %702 = load i32, ptr %106, align 4, !tbaa !11
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds ptr, ptr %701, i64 %703
  %705 = load ptr, ptr %704, align 8, !tbaa !5
  %706 = load i32, ptr %107, align 4, !tbaa !11
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds double, ptr %705, i64 %707
  %709 = load double, ptr %708, align 8, !tbaa !9
  %710 = load ptr, ptr %51, align 8, !tbaa !5
  %711 = load i32, ptr %107, align 4, !tbaa !11
  %712 = sext i32 %711 to i64
  %713 = getelementptr inbounds double, ptr %710, i64 %712
  %714 = load double, ptr %713, align 8, !tbaa !9
  %715 = load ptr, ptr %54, align 8, !tbaa !5
  %716 = load i32, ptr %106, align 4, !tbaa !11
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds double, ptr %715, i64 %717
  %719 = load double, ptr %718, align 8, !tbaa !9
  %720 = call double @llvm.fmuladd.f64(double %709, double %714, double %719)
  store double %720, ptr %718, align 8, !tbaa !9
  br label %721

721:                                              ; preds = %699
  %722 = load i32, ptr %107, align 4, !tbaa !11
  %723 = add nsw i32 %722, 1
  store i32 %723, ptr %107, align 4, !tbaa !11
  br label %695, !llvm.loop !25

724:                                              ; preds = %695
  br label %725

725:                                              ; preds = %724
  %726 = load i32, ptr %106, align 4, !tbaa !11
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %106, align 4, !tbaa !11
  br label %686, !llvm.loop !26

728:                                              ; preds = %686
  store double 0.000000e+00, ptr %74, align 8, !tbaa !9
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %729

729:                                              ; preds = %794, %728
  %730 = load i32, ptr %106, align 4, !tbaa !11
  %731 = load i32, ptr %23, align 4, !tbaa !11
  %732 = icmp sle i32 %730, %731
  br i1 %732, label %733, label %797

733:                                              ; preds = %729
  %734 = load ptr, ptr %63, align 8, !tbaa !5
  %735 = load i32, ptr %106, align 4, !tbaa !11
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds double, ptr %734, i64 %736
  %738 = load double, ptr %737, align 8, !tbaa !9
  %739 = load ptr, ptr %51, align 8, !tbaa !5
  %740 = load i32, ptr %106, align 4, !tbaa !11
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds double, ptr %739, i64 %741
  %743 = load double, ptr %742, align 8, !tbaa !9
  %744 = fsub double %738, %743
  %745 = load double, ptr %80, align 8, !tbaa !9
  %746 = fdiv double %744, %745
  %747 = load ptr, ptr %54, align 8, !tbaa !5
  %748 = load i32, ptr %106, align 4, !tbaa !11
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds double, ptr %747, i64 %749
  %751 = load double, ptr %750, align 8, !tbaa !9
  %752 = fadd double %751, %746
  store double %752, ptr %750, align 8, !tbaa !9
  %753 = load double, ptr %74, align 8, !tbaa !9
  %754 = load ptr, ptr %54, align 8, !tbaa !5
  %755 = load i32, ptr %106, align 4, !tbaa !11
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds double, ptr %754, i64 %756
  %758 = load double, ptr %757, align 8, !tbaa !9
  %759 = load ptr, ptr %53, align 8, !tbaa !5
  %760 = load i32, ptr %106, align 4, !tbaa !11
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds double, ptr %759, i64 %761
  %763 = load double, ptr %762, align 8, !tbaa !9
  %764 = fdiv double %758, %763
  %765 = call double @llvm.fabs.f64(double %764)
  %766 = fmul double 5.000000e-01, %765
  %767 = load double, ptr %25, align 8, !tbaa !9
  %768 = fdiv double %766, %767
  %769 = call double @sqrt(double noundef %768) #7
  %770 = fmul double 1.250000e+00, %769
  %771 = fcmp olt double %753, %770
  br i1 %771, label %772, label %790

772:                                              ; preds = %733
  %773 = load ptr, ptr %54, align 8, !tbaa !5
  %774 = load i32, ptr %106, align 4, !tbaa !11
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds double, ptr %773, i64 %775
  %777 = load double, ptr %776, align 8, !tbaa !9
  %778 = load ptr, ptr %53, align 8, !tbaa !5
  %779 = load i32, ptr %106, align 4, !tbaa !11
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds double, ptr %778, i64 %780
  %782 = load double, ptr %781, align 8, !tbaa !9
  %783 = fdiv double %777, %782
  %784 = call double @llvm.fabs.f64(double %783)
  %785 = fmul double 5.000000e-01, %784
  %786 = load double, ptr %25, align 8, !tbaa !9
  %787 = fdiv double %785, %786
  %788 = call double @sqrt(double noundef %787) #7
  %789 = fmul double 1.250000e+00, %788
  br label %792

790:                                              ; preds = %733
  %791 = load double, ptr %74, align 8, !tbaa !9
  br label %792

792:                                              ; preds = %790, %772
  %793 = phi double [ %789, %772 ], [ %791, %790 ]
  store double %793, ptr %74, align 8, !tbaa !9
  br label %794

794:                                              ; preds = %792
  %795 = load i32, ptr %106, align 4, !tbaa !11
  %796 = add nsw i32 %795, 1
  store i32 %796, ptr %106, align 4, !tbaa !11
  br label %729, !llvm.loop !27

797:                                              ; preds = %729
  %798 = load double, ptr %78, align 8, !tbaa !9
  %799 = load double, ptr %75, align 8, !tbaa !9
  %800 = fcmp olt double %798, %799
  br i1 %800, label %801, label %803

801:                                              ; preds = %797
  %802 = load double, ptr %78, align 8, !tbaa !9
  br label %805

803:                                              ; preds = %797
  %804 = load double, ptr %75, align 8, !tbaa !9
  br label %805

805:                                              ; preds = %803, %801
  %806 = phi double [ %802, %801 ], [ %804, %803 ]
  store double %806, ptr %76, align 8, !tbaa !9
  %807 = load double, ptr %76, align 8, !tbaa !9
  %808 = load double, ptr %74, align 8, !tbaa !9
  %809 = fmul double %807, %808
  %810 = fcmp ogt double %809, 1.000000e+00
  br i1 %810, label %811, label %814

811:                                              ; preds = %805
  %812 = load double, ptr %74, align 8, !tbaa !9
  %813 = fdiv double 1.000000e+00, %812
  store double %813, ptr %76, align 8, !tbaa !9
  br label %814

814:                                              ; preds = %811, %805
  %815 = load double, ptr %76, align 8, !tbaa !9
  %816 = load double, ptr %77, align 8, !tbaa !9
  %817 = fcmp olt double %815, %816
  br i1 %817, label %818, label %820

818:                                              ; preds = %814
  %819 = load double, ptr %77, align 8, !tbaa !9
  br label %822

820:                                              ; preds = %814
  %821 = load double, ptr %76, align 8, !tbaa !9
  br label %822

822:                                              ; preds = %820, %818
  %823 = phi double [ %819, %818 ], [ %821, %820 ]
  store double %823, ptr %76, align 8, !tbaa !9
  %824 = load i32, ptr %102, align 4, !tbaa !11
  %825 = sitofp i32 %824 to double
  %826 = load double, ptr %76, align 8, !tbaa !9
  %827 = fmul double %825, %826
  store double %827, ptr %79, align 8, !tbaa !9
  store i32 1, ptr %96, align 4, !tbaa !11
  %828 = load i32, ptr %96, align 4, !tbaa !11
  store i32 %828, ptr %97, align 4, !tbaa !11
  %829 = load double, ptr %76, align 8, !tbaa !9
  store double %829, ptr %81, align 8, !tbaa !9
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %830

830:                                              ; preds = %848, %822
  %831 = load i32, ptr %106, align 4, !tbaa !11
  %832 = load i32, ptr %23, align 4, !tbaa !11
  %833 = icmp sle i32 %831, %832
  br i1 %833, label %834, label %851

834:                                              ; preds = %830
  %835 = load double, ptr %79, align 8, !tbaa !9
  %836 = load ptr, ptr %51, align 8, !tbaa !5
  %837 = load i32, ptr %106, align 4, !tbaa !11
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds double, ptr %836, i64 %838
  %840 = load double, ptr %839, align 8, !tbaa !9
  %841 = fmul double %835, %840
  %842 = load ptr, ptr %67, align 8, !tbaa !5
  %843 = load i32, ptr %106, align 4, !tbaa !11
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds ptr, ptr %842, i64 %844
  %846 = load ptr, ptr %845, align 8, !tbaa !5
  %847 = getelementptr inbounds double, ptr %846, i64 1
  store double %841, ptr %847, align 8, !tbaa !9
  br label %848

848:                                              ; preds = %834
  %849 = load i32, ptr %106, align 4, !tbaa !11
  %850 = add nsw i32 %849, 1
  store i32 %850, ptr %106, align 4, !tbaa !11
  br label %830, !llvm.loop !28

851:                                              ; preds = %830
  %852 = load double, ptr %79, align 8, !tbaa !9
  %853 = load i32, ptr %96, align 4, !tbaa !11
  %854 = sub nsw i32 %853, 1
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds [5 x double], ptr %36, i64 0, i64 %855
  %857 = load double, ptr %856, align 8, !tbaa !9
  %858 = fmul double %852, %857
  store double %858, ptr %82, align 8, !tbaa !9
  store i32 0, ptr %98, align 4, !tbaa !11
  %859 = load double, ptr %82, align 8, !tbaa !9
  %860 = load i32, ptr %23, align 4, !tbaa !11
  %861 = load ptr, ptr %33, align 8, !tbaa !5
  %862 = call i32 @new_linearisation(ptr noundef %68, double noundef %859, i32 noundef %860, ptr noundef %861)
  %863 = icmp eq i32 %862, 1
  br i1 %863, label %864, label %869

864:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 2048, ptr %121) #7
  %865 = getelementptr inbounds [2048 x i8], ptr %121, i64 0, i64 0
  %866 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %865, ptr noundef @.str.3, ptr noundef @.str.10, ptr noundef %866)
  %867 = load ptr, ptr %33, align 8, !tbaa !5
  %868 = getelementptr inbounds [2048 x i8], ptr %121, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %867, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 296, ptr noundef %868)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %121) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

869:                                              ; preds = %851
  %870 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 4
  %871 = load i32, ptr %870, align 16, !tbaa !11
  %872 = add nsw i32 %871, 1
  store i32 %872, ptr %870, align 16, !tbaa !11
  store i32 0, ptr %44, align 4, !tbaa !11
  store i32 0, ptr %45, align 4, !tbaa !11
  store i32 0, ptr %46, align 4, !tbaa !11
  br label %873

873:                                              ; preds = %2250, %869
  %874 = load i32, ptr %45, align 4, !tbaa !11
  %875 = icmp eq i32 %874, 0
  br i1 %875, label %876, label %2251

876:                                              ; preds = %873
  %877 = load double, ptr %26, align 8, !tbaa !9
  store double %877, ptr %77, align 8, !tbaa !9
  %878 = load double, ptr %77, align 8, !tbaa !9
  %879 = load double, ptr %76, align 8, !tbaa !9
  %880 = fcmp olt double %878, %879
  br i1 %880, label %881, label %883

881:                                              ; preds = %876
  %882 = load double, ptr %76, align 8, !tbaa !9
  br label %885

883:                                              ; preds = %876
  %884 = load double, ptr %77, align 8, !tbaa !9
  br label %885

885:                                              ; preds = %883, %881
  %886 = phi double [ %882, %881 ], [ %884, %883 ]
  store double %886, ptr %95, align 8, !tbaa !9
  %887 = load double, ptr %78, align 8, !tbaa !9
  %888 = load double, ptr %95, align 8, !tbaa !9
  %889 = fcmp olt double %887, %888
  br i1 %889, label %890, label %892

890:                                              ; preds = %885
  %891 = load double, ptr %78, align 8, !tbaa !9
  br label %894

892:                                              ; preds = %885
  %893 = load double, ptr %95, align 8, !tbaa !9
  br label %894

894:                                              ; preds = %892, %890
  %895 = phi double [ %891, %890 ], [ %893, %892 ]
  store double %895, ptr %76, align 8, !tbaa !9
  %896 = load double, ptr %76, align 8, !tbaa !9
  %897 = load double, ptr %77, align 8, !tbaa !9
  %898 = fsub double %896, %897
  %899 = call double @llvm.fabs.f64(double %898)
  %900 = load double, ptr %39, align 8, !tbaa !9
  %901 = fmul double 1.000000e+02, %900
  %902 = fcmp olt double %899, %901
  br i1 %902, label %903, label %909

903:                                              ; preds = %894
  %904 = load i32, ptr %46, align 4, !tbaa !11
  %905 = icmp eq i32 %904, 1
  br i1 %905, label %906, label %908

906:                                              ; preds = %903
  %907 = load double, ptr %81, align 8, !tbaa !9
  store double %907, ptr %76, align 8, !tbaa !9
  br label %908

908:                                              ; preds = %906, %903
  store i32 1, ptr %46, align 4, !tbaa !11
  br label %910

909:                                              ; preds = %894
  store i32 0, ptr %46, align 4, !tbaa !11
  br label %910

910:                                              ; preds = %909, %908
  %911 = load i32, ptr %102, align 4, !tbaa !11
  %912 = sitofp i32 %911 to double
  %913 = load double, ptr %76, align 8, !tbaa !9
  %914 = fmul double %912, %913
  store double %914, ptr %79, align 8, !tbaa !9
  %915 = load double, ptr %76, align 8, !tbaa !9
  %916 = fmul double 1.100000e+00, %915
  %917 = load double, ptr %72, align 8, !tbaa !9
  %918 = load double, ptr %70, align 8, !tbaa !9
  %919 = fsub double %917, %918
  %920 = call double @llvm.fabs.f64(double %919)
  %921 = fcmp oge double %916, %920
  br i1 %921, label %922, label %928

922:                                              ; preds = %910
  %923 = load double, ptr %72, align 8, !tbaa !9
  %924 = load double, ptr %70, align 8, !tbaa !9
  %925 = fsub double %923, %924
  store double %925, ptr %79, align 8, !tbaa !9
  %926 = load double, ptr %79, align 8, !tbaa !9
  %927 = call double @llvm.fabs.f64(double %926)
  store double %927, ptr %76, align 8, !tbaa !9
  store i32 1, ptr %45, align 4, !tbaa !11
  br label %928

928:                                              ; preds = %922, %910
  %929 = load double, ptr %76, align 8, !tbaa !9
  %930 = load double, ptr %81, align 8, !tbaa !9
  %931 = fsub double %929, %930
  %932 = call double @llvm.fabs.f64(double %931)
  %933 = load double, ptr %76, align 8, !tbaa !9
  %934 = fdiv double %932, %933
  %935 = fcmp ogt double %934, 0x3EB0C6F7A0B5ED8D
  br i1 %935, label %940, label %936

936:                                              ; preds = %928
  %937 = load i32, ptr %96, align 4, !tbaa !11
  %938 = load i32, ptr %97, align 4, !tbaa !11
  %939 = icmp ne i32 %937, %938
  br i1 %939, label %940, label %969

940:                                              ; preds = %936, %928
  %941 = load ptr, ptr %67, align 8, !tbaa !5
  %942 = load double, ptr %76, align 8, !tbaa !9
  %943 = load double, ptr %81, align 8, !tbaa !9
  %944 = fdiv double %942, %943
  %945 = load i32, ptr %23, align 4, !tbaa !11
  %946 = load i32, ptr %96, align 4, !tbaa !11
  %947 = call i32 @adjust_stepsize(ptr noundef %941, double noundef %944, i32 noundef %945, i32 noundef %946)
  %948 = load double, ptr %79, align 8, !tbaa !9
  %949 = load i32, ptr %96, align 4, !tbaa !11
  %950 = sub nsw i32 %949, 1
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds [5 x double], ptr %36, i64 0, i64 %951
  %953 = load double, ptr %952, align 8, !tbaa !9
  %954 = fmul double %948, %953
  store double %954, ptr %82, align 8, !tbaa !9
  store i32 0, ptr %98, align 4, !tbaa !11
  %955 = load double, ptr %82, align 8, !tbaa !9
  %956 = load i32, ptr %23, align 4, !tbaa !11
  %957 = load ptr, ptr %33, align 8, !tbaa !5
  %958 = call i32 @new_linearisation(ptr noundef %68, double noundef %955, i32 noundef %956, ptr noundef %957)
  %959 = icmp eq i32 %958, 1
  br i1 %959, label %960, label %965

960:                                              ; preds = %940
  call void @llvm.lifetime.start.p0(i64 2048, ptr %122) #7
  %961 = getelementptr inbounds [2048 x i8], ptr %122, i64 0, i64 0
  %962 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %961, ptr noundef @.str.3, ptr noundef @.str.10, ptr noundef %962)
  %963 = load ptr, ptr %33, align 8, !tbaa !5
  %964 = getelementptr inbounds [2048 x i8], ptr %122, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %963, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 332, ptr noundef %964)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %122) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

965:                                              ; preds = %940
  %966 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 4
  %967 = load i32, ptr %966, align 16, !tbaa !11
  %968 = add nsw i32 %967, 1
  store i32 %968, ptr %966, align 16, !tbaa !11
  store i32 0, ptr %44, align 4, !tbaa !11
  br label %969

969:                                              ; preds = %965, %936
  store i32 1, ptr %47, align 4, !tbaa !11
  br label %970

970:                                              ; preds = %1800, %969
  store i32 0, ptr %48, align 4, !tbaa !11
  br label %971

971:                                              ; preds = %1526, %970
  %972 = load i32, ptr %48, align 4, !tbaa !11
  %973 = icmp eq i32 %972, 0
  br i1 %973, label %974, label %1527

974:                                              ; preds = %971
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %975

975:                                              ; preds = %1019, %974
  %976 = load i32, ptr %106, align 4, !tbaa !11
  %977 = load i32, ptr %23, align 4, !tbaa !11
  %978 = icmp sle i32 %976, %977
  br i1 %978, label %979, label %1022

979:                                              ; preds = %975
  %980 = load ptr, ptr %59, align 8, !tbaa !5
  %981 = load i32, ptr %106, align 4, !tbaa !11
  %982 = sext i32 %981 to i64
  %983 = getelementptr inbounds double, ptr %980, i64 %982
  store double 0.000000e+00, ptr %983, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %984

984:                                              ; preds = %1015, %979
  %985 = load i32, ptr %107, align 4, !tbaa !11
  %986 = load i32, ptr %96, align 4, !tbaa !11
  %987 = icmp sle i32 %985, %986
  br i1 %987, label %988, label %1018

988:                                              ; preds = %984
  %989 = load ptr, ptr %67, align 8, !tbaa !5
  %990 = load i32, ptr %106, align 4, !tbaa !11
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds ptr, ptr %989, i64 %991
  %993 = load ptr, ptr %992, align 8, !tbaa !5
  %994 = load i32, ptr %107, 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 = load i32, ptr %107, align 4, !tbaa !11
  %999 = sub nsw i32 %998, 1
  %1000 = sext i32 %999 to i64
  %1001 = getelementptr inbounds [5 x double], ptr %34, i64 0, i64 %1000
  %1002 = load double, ptr %1001, align 8, !tbaa !9
  %1003 = fmul double %997, %1002
  %1004 = load i32, ptr %96, align 4, !tbaa !11
  %1005 = sub nsw i32 %1004, 1
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds [5 x double], ptr %36, i64 0, i64 %1006
  %1008 = load double, ptr %1007, align 8, !tbaa !9
  %1009 = load ptr, ptr %59, align 8, !tbaa !5
  %1010 = load i32, ptr %106, align 4, !tbaa !11
  %1011 = sext i32 %1010 to i64
  %1012 = getelementptr inbounds double, ptr %1009, i64 %1011
  %1013 = load double, ptr %1012, align 8, !tbaa !9
  %1014 = call double @llvm.fmuladd.f64(double %1003, double %1008, double %1013)
  store double %1014, ptr %1012, align 8, !tbaa !9
  br label %1015

1015:                                             ; preds = %988
  %1016 = load i32, ptr %107, align 4, !tbaa !11
  %1017 = add nsw i32 %1016, 1
  store i32 %1017, ptr %107, align 4, !tbaa !11
  br label %984, !llvm.loop !29

1018:                                             ; preds = %984
  br label %1019

1019:                                             ; preds = %1018
  %1020 = load i32, ptr %106, align 4, !tbaa !11
  %1021 = add nsw i32 %1020, 1
  store i32 %1021, ptr %106, align 4, !tbaa !11
  br label %975, !llvm.loop !30

1022:                                             ; preds = %975
  %1023 = load double, ptr %70, align 8, !tbaa !9
  %1024 = load double, ptr %79, align 8, !tbaa !9
  %1025 = fadd double %1023, %1024
  store double %1025, ptr %73, align 8, !tbaa !9
  %1026 = load i32, ptr %45, align 4, !tbaa !11
  %1027 = icmp eq i32 %1026, 1
  br i1 %1027, label %1028, label %1030

1028:                                             ; preds = %1022
  %1029 = load double, ptr %72, align 8, !tbaa !9
  store double %1029, ptr %73, align 8, !tbaa !9
  br label %1030

1030:                                             ; preds = %1028, %1022
  %1031 = load double, ptr %73, align 8, !tbaa !9
  %1032 = load double, ptr %70, align 8, !tbaa !9
  %1033 = fsub double %1031, %1032
  store double %1033, ptr %79, align 8, !tbaa !9
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %1034

1034:                                             ; preds = %1072, %1030
  %1035 = load i32, ptr %106, align 4, !tbaa !11
  %1036 = load i32, ptr %23, align 4, !tbaa !11
  %1037 = icmp sle i32 %1035, %1036
  br i1 %1037, label %1038, label %1075

1038:                                             ; preds = %1034
  %1039 = load ptr, ptr %52, align 8, !tbaa !5
  %1040 = load i32, ptr %106, align 4, !tbaa !11
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds double, ptr %1039, i64 %1041
  %1043 = load double, ptr %1042, align 8, !tbaa !9
  %1044 = load ptr, ptr %55, align 8, !tbaa !5
  %1045 = load i32, ptr %106, align 4, !tbaa !11
  %1046 = sext i32 %1045 to i64
  %1047 = getelementptr inbounds double, ptr %1044, i64 %1046
  store double %1043, ptr %1047, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %1048

1048:                                             ; preds = %1068, %1038
  %1049 = load i32, ptr %107, align 4, !tbaa !11
  %1050 = load i32, ptr %96, align 4, !tbaa !11
  %1051 = icmp sle i32 %1049, %1050
  br i1 %1051, label %1052, label %1071

1052:                                             ; preds = %1048
  %1053 = load ptr, ptr %67, align 8, !tbaa !5
  %1054 = load i32, ptr %106, align 4, !tbaa !11
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds ptr, ptr %1053, i64 %1055
  %1057 = load ptr, ptr %1056, align 8, !tbaa !5
  %1058 = load i32, ptr %107, 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 ptr, ptr %55, align 8, !tbaa !5
  %1063 = load i32, ptr %106, align 4, !tbaa !11
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds double, ptr %1062, i64 %1064
  %1066 = load double, ptr %1065, align 8, !tbaa !9
  %1067 = fadd double %1066, %1061
  store double %1067, ptr %1065, align 8, !tbaa !9
  br label %1068

1068:                                             ; preds = %1052
  %1069 = load i32, ptr %107, align 4, !tbaa !11
  %1070 = add nsw i32 %1069, 1
  store i32 %1070, ptr %107, align 4, !tbaa !11
  br label %1048, !llvm.loop !31

1071:                                             ; preds = %1048
  br label %1072

1072:                                             ; preds = %1071
  %1073 = load i32, ptr %106, align 4, !tbaa !11
  %1074 = add nsw i32 %1073, 1
  store i32 %1074, ptr %106, align 4, !tbaa !11
  br label %1034, !llvm.loop !32

1075:                                             ; preds = %1034
  %1076 = load ptr, ptr %55, align 8, !tbaa !5
  %1077 = load ptr, ptr %56, align 8, !tbaa !5
  %1078 = load i32, ptr %23, align 4, !tbaa !11
  call void @eqvec(ptr noundef %1076, ptr noundef %1077, i32 noundef %1078)
  store double 0.000000e+00, ptr %83, align 8, !tbaa !9
  store i32 1, ptr %105, align 4, !tbaa !11
  br label %1079

1079:                                             ; preds = %1155, %1075
  %1080 = load i32, ptr %105, align 4, !tbaa !11
  %1081 = load i32, ptr %23, align 4, !tbaa !11
  %1082 = icmp sle i32 %1080, %1081
  br i1 %1082, label %1083, label %1158

1083:                                             ; preds = %1079
  %1084 = load ptr, ptr %60, align 8, !tbaa !5
  %1085 = load i32, ptr %105, align 4, !tbaa !11
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds double, ptr %1084, i64 %1086
  store double 0.000000e+00, ptr %1087, align 8, !tbaa !9
  %1088 = load ptr, ptr %56, align 8, !tbaa !5
  %1089 = load i32, ptr %105, align 4, !tbaa !11
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds double, ptr %1088, i64 %1090
  %1092 = load double, ptr %1091, align 8, !tbaa !9
  %1093 = call double @llvm.fabs.f64(double %1092)
  %1094 = load ptr, ptr %52, align 8, !tbaa !5
  %1095 = load i32, ptr %105, align 4, !tbaa !11
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds double, ptr %1094, i64 %1096
  %1098 = load double, ptr %1097, align 8, !tbaa !9
  %1099 = call double @llvm.fabs.f64(double %1098)
  %1100 = fcmp olt double %1093, %1099
  br i1 %1100, label %1101, label %1108

1101:                                             ; preds = %1083
  %1102 = load ptr, ptr %52, align 8, !tbaa !5
  %1103 = load i32, ptr %105, align 4, !tbaa !11
  %1104 = sext i32 %1103 to i64
  %1105 = getelementptr inbounds double, ptr %1102, i64 %1104
  %1106 = load double, ptr %1105, align 8, !tbaa !9
  %1107 = call double @llvm.fabs.f64(double %1106)
  br label %1115

1108:                                             ; preds = %1083
  %1109 = load ptr, ptr %56, align 8, !tbaa !5
  %1110 = load i32, ptr %105, align 4, !tbaa !11
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds double, ptr %1109, i64 %1111
  %1113 = load double, ptr %1112, align 8, !tbaa !9
  %1114 = call double @llvm.fabs.f64(double %1113)
  br label %1115

1115:                                             ; preds = %1108, %1101
  %1116 = phi double [ %1107, %1101 ], [ %1114, %1108 ]
  store double %1116, ptr %95, align 8, !tbaa !9
  %1117 = load double, ptr %95, align 8, !tbaa !9
  %1118 = load double, ptr %40, align 8, !tbaa !9
  %1119 = fcmp olt double %1117, %1118
  br i1 %1119, label %1120, label %1122

1120:                                             ; preds = %1115
  %1121 = load double, ptr %40, align 8, !tbaa !9
  br label %1124

1122:                                             ; preds = %1115
  %1123 = load double, ptr %95, align 8, !tbaa !9
  br label %1124

1124:                                             ; preds = %1122, %1120
  %1125 = phi double [ %1121, %1120 ], [ %1123, %1122 ]
  %1126 = fdiv double 1.000000e+00, %1125
  %1127 = load ptr, ptr %57, align 8, !tbaa !5
  %1128 = load i32, ptr %105, align 4, !tbaa !11
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds double, ptr %1127, i64 %1129
  store double %1126, ptr %1130, align 8, !tbaa !9
  %1131 = load double, ptr %39, align 8, !tbaa !9
  %1132 = fmul double 1.000000e+02, %1131
  %1133 = load ptr, ptr %56, align 8, !tbaa !5
  %1134 = load i32, ptr %105, align 4, !tbaa !11
  %1135 = sext i32 %1134 to i64
  %1136 = getelementptr inbounds double, ptr %1133, i64 %1135
  %1137 = load double, ptr %1136, align 8, !tbaa !9
  %1138 = load ptr, ptr %57, align 8, !tbaa !5
  %1139 = load i32, ptr %105, align 4, !tbaa !11
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds double, ptr %1138, i64 %1140
  %1142 = load double, ptr %1141, align 8, !tbaa !9
  %1143 = fmul double %1137, %1142
  %1144 = call double @llvm.fabs.f64(double %1143)
  %1145 = fmul double %1132, %1144
  store double %1145, ptr %95, align 8, !tbaa !9
  %1146 = load double, ptr %83, align 8, !tbaa !9
  %1147 = load double, ptr %95, align 8, !tbaa !9
  %1148 = fcmp olt double %1146, %1147
  br i1 %1148, label %1149, label %1151

1149:                                             ; preds = %1124
  %1150 = load double, ptr %95, align 8, !tbaa !9
  br label %1153

1151:                                             ; preds = %1124
  %1152 = load double, ptr %83, align 8, !tbaa !9
  br label %1153

1153:                                             ; preds = %1151, %1149
  %1154 = phi double [ %1150, %1149 ], [ %1152, %1151 ]
  store double %1154, ptr %83, align 8, !tbaa !9
  br label %1155

1155:                                             ; preds = %1153
  %1156 = load i32, ptr %105, align 4, !tbaa !11
  %1157 = add nsw i32 %1156, 1
  store i32 %1157, ptr %105, align 4, !tbaa !11
  br label %1079, !llvm.loop !33

1158:                                             ; preds = %1079
  store i32 0, ptr %49, align 4, !tbaa !11
  store i32 1, ptr %99, align 4, !tbaa !11
  br label %1159

1159:                                             ; preds = %1407, %1158
  %1160 = load i32, ptr %99, align 4, !tbaa !11
  %1161 = load i32, ptr %41, align 4, !tbaa !11
  %1162 = icmp sle i32 %1160, %1161
  br i1 %1162, label %1163, label %1410

1163:                                             ; preds = %1159
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %1164

1164:                                             ; preds = %1184, %1163
  %1165 = load i32, ptr %106, align 4, !tbaa !11
  %1166 = load i32, ptr %23, align 4, !tbaa !11
  %1167 = icmp sle i32 %1165, %1166
  br i1 %1167, label %1168, label %1187

1168:                                             ; preds = %1164
  %1169 = load ptr, ptr %59, align 8, !tbaa !5
  %1170 = load i32, ptr %106, align 4, !tbaa !11
  %1171 = sext i32 %1170 to i64
  %1172 = getelementptr inbounds double, ptr %1169, i64 %1171
  %1173 = load double, ptr %1172, align 8, !tbaa !9
  %1174 = load ptr, ptr %60, align 8, !tbaa !5
  %1175 = load i32, ptr %106, align 4, !tbaa !11
  %1176 = sext i32 %1175 to i64
  %1177 = getelementptr inbounds double, ptr %1174, i64 %1176
  %1178 = load double, ptr %1177, align 8, !tbaa !9
  %1179 = fadd double %1173, %1178
  %1180 = load ptr, ptr %63, align 8, !tbaa !5
  %1181 = load i32, ptr %106, align 4, !tbaa !11
  %1182 = sext i32 %1181 to i64
  %1183 = getelementptr inbounds double, ptr %1180, i64 %1182
  store double %1179, ptr %1183, align 8, !tbaa !9
  br label %1184

1184:                                             ; preds = %1168
  %1185 = load i32, ptr %106, align 4, !tbaa !11
  %1186 = add nsw i32 %1185, 1
  store i32 %1186, ptr %106, align 4, !tbaa !11
  br label %1164, !llvm.loop !34

1187:                                             ; preds = %1164
  %1188 = load ptr, ptr %18, align 8, !tbaa !5
  %1189 = load double, ptr %73, align 8, !tbaa !9
  %1190 = load ptr, ptr %56, align 8, !tbaa !5
  %1191 = getelementptr inbounds double, ptr %1190, i64 1
  %1192 = load ptr, ptr %51, align 8, !tbaa !5
  %1193 = getelementptr inbounds double, ptr %1192, i64 1
  %1194 = load ptr, ptr %24, align 8, !tbaa !5
  %1195 = load ptr, ptr %33, align 8, !tbaa !5
  %1196 = call i32 %1188(double noundef %1189, ptr noundef %1191, ptr noundef %1193, ptr noundef %1194, ptr noundef %1195)
  %1197 = icmp eq i32 %1196, 1
  br i1 %1197, label %1198, label %1203

1198:                                             ; preds = %1187
  call void @llvm.lifetime.start.p0(i64 2048, ptr %123) #7
  %1199 = getelementptr inbounds [2048 x i8], ptr %123, i64 0, i64 0
  %1200 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1199, ptr noundef @.str.3, ptr noundef @.str.11, ptr noundef %1200)
  %1201 = load ptr, ptr %33, align 8, !tbaa !5
  %1202 = getelementptr inbounds [2048 x i8], ptr %123, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1201, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 383, ptr noundef %1202)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %123) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1203:                                             ; preds = %1187
  %1204 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 2
  %1205 = load i32, ptr %1204, align 8, !tbaa !11
  %1206 = add nsw i32 %1205, 1
  store i32 %1206, ptr %1204, align 8, !tbaa !11
  store i32 1, ptr %105, align 4, !tbaa !11
  br label %1207

1207:                                             ; preds = %1229, %1203
  %1208 = load i32, ptr %105, align 4, !tbaa !11
  %1209 = load i32, ptr %23, align 4, !tbaa !11
  %1210 = icmp sle i32 %1208, %1209
  br i1 %1210, label %1211, label %1232

1211:                                             ; preds = %1207
  %1212 = load double, ptr %82, align 8, !tbaa !9
  %1213 = load ptr, ptr %51, align 8, !tbaa !5
  %1214 = load i32, ptr %105, align 4, !tbaa !11
  %1215 = sext i32 %1214 to i64
  %1216 = getelementptr inbounds double, ptr %1213, i64 %1215
  %1217 = load double, ptr %1216, align 8, !tbaa !9
  %1218 = load ptr, ptr %63, align 8, !tbaa !5
  %1219 = load i32, ptr %105, align 4, !tbaa !11
  %1220 = sext i32 %1219 to i64
  %1221 = getelementptr inbounds double, ptr %1218, i64 %1220
  %1222 = load double, ptr %1221, align 8, !tbaa !9
  %1223 = fneg double %1222
  %1224 = call double @llvm.fmuladd.f64(double %1212, double %1217, double %1223)
  %1225 = load ptr, ptr %58, align 8, !tbaa !5
  %1226 = load i32, ptr %105, align 4, !tbaa !11
  %1227 = sext i32 %1226 to i64
  %1228 = getelementptr inbounds double, ptr %1225, i64 %1227
  store double %1224, ptr %1228, align 8, !tbaa !9
  br label %1229

1229:                                             ; preds = %1211
  %1230 = load i32, ptr %105, align 4, !tbaa !11
  %1231 = add nsw i32 %1230, 1
  store i32 %1231, ptr %105, align 4, !tbaa !11
  br label %1207, !llvm.loop !35

1232:                                             ; preds = %1207
  %1233 = getelementptr inbounds %struct.jacobian, ptr %68, i32 0, i32 5
  %1234 = load i32, ptr %1233, align 8, !tbaa !36
  %1235 = icmp ne i32 %1234, 0
  br i1 %1235, label %1236, label %1244

1236:                                             ; preds = %1232
  %1237 = getelementptr inbounds %struct.jacobian, ptr %68, i32 0, i32 19
  %1238 = load ptr, ptr %1237, align 8, !tbaa !37
  %1239 = load ptr, ptr %58, align 8, !tbaa !5
  %1240 = getelementptr inbounds double, ptr %1239, i64 1
  %1241 = load ptr, ptr %61, align 8, !tbaa !5
  %1242 = getelementptr inbounds double, ptr %1241, i64 1
  %1243 = call i32 @sp_lusolve(ptr noundef %1238, ptr noundef %1240, ptr noundef %1242)
  br label %1255

1244:                                             ; preds = %1232
  %1245 = load ptr, ptr %58, align 8, !tbaa !5
  %1246 = load ptr, ptr %61, align 8, !tbaa !5
  %1247 = load i32, ptr %23, align 4, !tbaa !11
  call void @eqvec(ptr noundef %1245, ptr noundef %1246, i32 noundef %1247)
  %1248 = getelementptr inbounds %struct.jacobian, ptr %68, i32 0, i32 2
  %1249 = load ptr, ptr %1248, align 8, !tbaa !38
  %1250 = load i32, ptr %23, align 4, !tbaa !11
  %1251 = getelementptr inbounds %struct.jacobian, ptr %68, i32 0, i32 4
  %1252 = load ptr, ptr %1251, align 8, !tbaa !39
  %1253 = load ptr, ptr %61, align 8, !tbaa !5
  %1254 = call i32 @lubksb(ptr noundef %1249, i32 noundef %1250, ptr noundef %1252, ptr noundef %1253)
  br label %1255

1255:                                             ; preds = %1244, %1236
  %1256 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 5
  %1257 = load i32, ptr %1256, align 4, !tbaa !11
  %1258 = add nsw i32 %1257, 1
  store i32 %1258, ptr %1256, align 4, !tbaa !11
  store double 0.000000e+00, ptr %85, align 8, !tbaa !9
  store i32 1, ptr %105, align 4, !tbaa !11
  br label %1259

1259:                                             ; preds = %1285, %1255
  %1260 = load i32, ptr %105, align 4, !tbaa !11
  %1261 = load i32, ptr %23, align 4, !tbaa !11
  %1262 = icmp sle i32 %1260, %1261
  br i1 %1262, label %1263, label %1288

1263:                                             ; preds = %1259
  %1264 = load ptr, ptr %61, align 8, !tbaa !5
  %1265 = load i32, ptr %105, align 4, !tbaa !11
  %1266 = sext i32 %1265 to i64
  %1267 = getelementptr inbounds double, ptr %1264, i64 %1266
  %1268 = load double, ptr %1267, align 8, !tbaa !9
  %1269 = load ptr, ptr %57, align 8, !tbaa !5
  %1270 = load i32, ptr %105, align 4, !tbaa !11
  %1271 = sext i32 %1270 to i64
  %1272 = getelementptr inbounds double, ptr %1269, i64 %1271
  %1273 = load double, ptr %1272, align 8, !tbaa !9
  %1274 = fmul double %1268, %1273
  %1275 = call double @llvm.fabs.f64(double %1274)
  store double %1275, ptr %95, align 8, !tbaa !9
  %1276 = load double, ptr %85, align 8, !tbaa !9
  %1277 = load double, ptr %95, align 8, !tbaa !9
  %1278 = fcmp olt double %1276, %1277
  br i1 %1278, label %1279, label %1281

1279:                                             ; preds = %1263
  %1280 = load double, ptr %95, align 8, !tbaa !9
  br label %1283

1281:                                             ; preds = %1263
  %1282 = load double, ptr %85, align 8, !tbaa !9
  br label %1283

1283:                                             ; preds = %1281, %1279
  %1284 = phi double [ %1280, %1279 ], [ %1282, %1281 ]
  store double %1284, ptr %85, align 8, !tbaa !9
  br label %1285

1285:                                             ; preds = %1283
  %1286 = load i32, ptr %105, align 4, !tbaa !11
  %1287 = add nsw i32 %1286, 1
  store i32 %1287, ptr %105, align 4, !tbaa !11
  br label %1259, !llvm.loop !40

1288:                                             ; preds = %1259
  store i32 1, ptr %105, align 4, !tbaa !11
  br label %1289

1289:                                             ; preds = %1320, %1288
  %1290 = load i32, ptr %105, align 4, !tbaa !11
  %1291 = load i32, ptr %23, align 4, !tbaa !11
  %1292 = icmp sle i32 %1290, %1291
  br i1 %1292, label %1293, label %1323

1293:                                             ; preds = %1289
  %1294 = load ptr, ptr %61, align 8, !tbaa !5
  %1295 = load i32, ptr %105, align 4, !tbaa !11
  %1296 = sext i32 %1295 to i64
  %1297 = getelementptr inbounds double, ptr %1294, i64 %1296
  %1298 = load double, ptr %1297, align 8, !tbaa !9
  %1299 = load ptr, ptr %60, align 8, !tbaa !5
  %1300 = load i32, ptr %105, align 4, !tbaa !11
  %1301 = sext i32 %1300 to i64
  %1302 = getelementptr inbounds double, ptr %1299, i64 %1301
  %1303 = load double, ptr %1302, align 8, !tbaa !9
  %1304 = fadd double %1303, %1298
  store double %1304, ptr %1302, align 8, !tbaa !9
  %1305 = load ptr, ptr %55, align 8, !tbaa !5
  %1306 = load i32, ptr %105, align 4, !tbaa !11
  %1307 = sext i32 %1306 to i64
  %1308 = getelementptr inbounds double, ptr %1305, i64 %1307
  %1309 = load double, ptr %1308, align 8, !tbaa !9
  %1310 = load ptr, ptr %60, align 8, !tbaa !5
  %1311 = load i32, ptr %105, align 4, !tbaa !11
  %1312 = sext i32 %1311 to i64
  %1313 = getelementptr inbounds double, ptr %1310, i64 %1312
  %1314 = load double, ptr %1313, align 8, !tbaa !9
  %1315 = fadd double %1309, %1314
  %1316 = load ptr, ptr %56, align 8, !tbaa !5
  %1317 = load i32, ptr %105, align 4, !tbaa !11
  %1318 = sext i32 %1317 to i64
  %1319 = getelementptr inbounds double, ptr %1316, i64 %1318
  store double %1315, ptr %1319, align 8, !tbaa !9
  br label %1320

1320:                                             ; preds = %1293
  %1321 = load i32, ptr %105, align 4, !tbaa !11
  %1322 = add nsw i32 %1321, 1
  store i32 %1322, ptr %105, align 4, !tbaa !11
  br label %1289, !llvm.loop !41

1323:                                             ; preds = %1289
  %1324 = load double, ptr %85, align 8, !tbaa !9
  %1325 = load double, ptr %83, align 8, !tbaa !9
  %1326 = fcmp ole double %1324, %1325
  br i1 %1326, label %1327, label %1328

1327:                                             ; preds = %1323
  store i32 1, ptr %48, align 4, !tbaa !11
  br label %1410

1328:                                             ; preds = %1323
  %1329 = load i32, ptr %99, align 4, !tbaa !11
  %1330 = icmp eq i32 %1329, 1
  br i1 %1330, label %1331, label %1349

1331:                                             ; preds = %1328
  %1332 = load i32, ptr %44, align 4, !tbaa !11
  %1333 = icmp eq i32 %1332, 1
  br i1 %1333, label %1334, label %1347

1334:                                             ; preds = %1331
  %1335 = load double, ptr %85, align 8, !tbaa !9
  %1336 = load double, ptr %91, align 8, !tbaa !9
  %1337 = fmul double %1335, %1336
  %1338 = load double, ptr %91, align 8, !tbaa !9
  %1339 = fsub double 1.000000e+00, %1338
  %1340 = fdiv double %1337, %1339
  store double %1340, ptr %90, align 8, !tbaa !9
  %1341 = load double, ptr %90, align 8, !tbaa !9
  %1342 = load double, ptr %25, align 8, !tbaa !9
  %1343 = fmul double 5.000000e-02, %1342
  %1344 = fcmp ole double %1341, %1343
  br i1 %1344, label %1345, label %1346

1345:                                             ; preds = %1334
  store i32 1, ptr %48, align 4, !tbaa !11
  br label %1410

1346:                                             ; preds = %1334
  br label %1348

1347:                                             ; preds = %1331
  store double 0.000000e+00, ptr %91, align 8, !tbaa !9
  br label %1348

1348:                                             ; preds = %1347, %1346
  br label %1404

1349:                                             ; preds = %1328
  %1350 = load double, ptr %85, align 8, !tbaa !9
  %1351 = load double, ptr %84, align 8, !tbaa !9
  %1352 = fmul double 9.000000e-01, %1351
  %1353 = fcmp ogt double %1350, %1352
  br i1 %1353, label %1354, label %1355

1354:                                             ; preds = %1349
  store i32 1, ptr %49, align 4, !tbaa !11
  br label %1410

1355:                                             ; preds = %1349
  %1356 = load double, ptr %91, align 8, !tbaa !9
  %1357 = fmul double 9.000000e-01, %1356
  %1358 = load double, ptr %85, align 8, !tbaa !9
  %1359 = load double, ptr %84, align 8, !tbaa !9
  %1360 = fdiv double %1358, %1359
  %1361 = fcmp olt double %1357, %1360
  br i1 %1361, label %1362, label %1366

1362:                                             ; preds = %1355
  %1363 = load double, ptr %85, align 8, !tbaa !9
  %1364 = load double, ptr %84, align 8, !tbaa !9
  %1365 = fdiv double %1363, %1364
  br label %1369

1366:                                             ; preds = %1355
  %1367 = load double, ptr %91, align 8, !tbaa !9
  %1368 = fmul double 9.000000e-01, %1367
  br label %1369

1369:                                             ; preds = %1366, %1362
  %1370 = phi double [ %1365, %1362 ], [ %1368, %1366 ]
  store double %1370, ptr %91, align 8, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !11
  %1371 = load double, ptr %85, align 8, !tbaa !9
  %1372 = load double, ptr %91, align 8, !tbaa !9
  %1373 = fmul double %1371, %1372
  %1374 = load double, ptr %91, align 8, !tbaa !9
  %1375 = fsub double 1.000000e+00, %1374
  %1376 = fdiv double %1373, %1375
  store double %1376, ptr %90, align 8, !tbaa !9
  %1377 = load double, ptr %90, align 8, !tbaa !9
  %1378 = load double, ptr %25, align 8, !tbaa !9
  %1379 = fmul double 5.000000e-01, %1378
  %1380 = fcmp ole double %1377, %1379
  br i1 %1380, label %1381, label %1382

1381:                                             ; preds = %1369
  store i32 1, ptr %48, align 4, !tbaa !11
  br label %1410

1382:                                             ; preds = %1369
  %1383 = load i32, ptr %99, align 4, !tbaa !11
  %1384 = load i32, ptr %41, align 4, !tbaa !11
  %1385 = icmp eq i32 %1383, %1384
  br i1 %1385, label %1386, label %1387

1386:                                             ; preds = %1382
  store i32 1, ptr %49, align 4, !tbaa !11
  br label %1410

1387:                                             ; preds = %1382
  %1388 = load double, ptr %25, align 8, !tbaa !9
  %1389 = fmul double 5.000000e-01, %1388
  %1390 = load double, ptr %90, align 8, !tbaa !9
  %1391 = load double, ptr %91, align 8, !tbaa !9
  %1392 = load i32, ptr %41, align 4, !tbaa !11
  %1393 = load i32, ptr %99, align 4, !tbaa !11
  %1394 = sub nsw i32 %1392, %1393
  %1395 = sitofp i32 %1394 to double
  %1396 = call double @pow(double noundef %1391, double noundef %1395) #7
  %1397 = fmul double %1390, %1396
  %1398 = fcmp olt double %1389, %1397
  br i1 %1398, label %1399, label %1400

1399:                                             ; preds = %1387
  store i32 1, ptr %49, align 4, !tbaa !11
  br label %1410

1400:                                             ; preds = %1387
  br label %1401

1401:                                             ; preds = %1400
  br label %1402

1402:                                             ; preds = %1401
  br label %1403

1403:                                             ; preds = %1402
  br label %1404

1404:                                             ; preds = %1403, %1348
  br label %1405

1405:                                             ; preds = %1404
  %1406 = load double, ptr %85, align 8, !tbaa !9
  store double %1406, ptr %84, align 8, !tbaa !9
  br label %1407

1407:                                             ; preds = %1405
  %1408 = load i32, ptr %99, align 4, !tbaa !11
  %1409 = add nsw i32 %1408, 1
  store i32 %1409, ptr %99, align 4, !tbaa !11
  br label %1159, !llvm.loop !42

1410:                                             ; preds = %1399, %1386, %1381, %1354, %1345, %1327, %1159
  %1411 = load i32, ptr %49, align 4, !tbaa !11
  %1412 = icmp eq i32 %1411, 1
  br i1 %1412, label %1413, label %1526

1413:                                             ; preds = %1410
  %1414 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 1
  %1415 = load i32, ptr %1414, align 4, !tbaa !11
  %1416 = add nsw i32 %1415, 1
  store i32 %1416, ptr %1414, align 4, !tbaa !11
  %1417 = load i32, ptr %43, align 4, !tbaa !11
  %1418 = icmp eq i32 %1417, 0
  br i1 %1418, label %1419, label %1460

1419:                                             ; preds = %1413
  %1420 = load ptr, ptr %18, align 8, !tbaa !5
  %1421 = load double, ptr %70, align 8, !tbaa !9
  %1422 = load ptr, ptr %52, align 8, !tbaa !5
  %1423 = getelementptr inbounds double, ptr %1422, i64 1
  %1424 = load ptr, ptr %51, align 8, !tbaa !5
  %1425 = getelementptr inbounds double, ptr %1424, i64 1
  %1426 = load ptr, ptr %24, align 8, !tbaa !5
  %1427 = load ptr, ptr %33, align 8, !tbaa !5
  %1428 = call i32 %1420(double noundef %1421, ptr noundef %1423, ptr noundef %1425, ptr noundef %1426, ptr noundef %1427)
  %1429 = icmp eq i32 %1428, 1
  br i1 %1429, label %1430, label %1435

1430:                                             ; preds = %1419
  call void @llvm.lifetime.start.p0(i64 2048, ptr %124) #7
  %1431 = getelementptr inbounds [2048 x i8], ptr %124, i64 0, i64 0
  %1432 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1431, ptr noundef @.str.3, ptr noundef @.str.12, ptr noundef %1432)
  %1433 = load ptr, ptr %33, align 8, !tbaa !5
  %1434 = getelementptr inbounds [2048 x i8], ptr %124, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1433, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 452, ptr noundef %1434)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %124) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1435:                                             ; preds = %1419
  store i32 0, ptr %104, align 4, !tbaa !11
  %1436 = load ptr, ptr %18, align 8, !tbaa !5
  %1437 = load double, ptr %70, align 8, !tbaa !9
  %1438 = load ptr, ptr %52, align 8, !tbaa !5
  %1439 = load ptr, ptr %51, align 8, !tbaa !5
  %1440 = load double, ptr %38, align 8, !tbaa !9
  %1441 = load i32, ptr %23, align 4, !tbaa !11
  %1442 = load ptr, ptr %24, align 8, !tbaa !5
  %1443 = load ptr, ptr %33, align 8, !tbaa !5
  %1444 = call i32 @numjac(ptr noundef %1436, double noundef %1437, ptr noundef %1438, ptr noundef %1439, ptr noundef %68, ptr noundef %69, double noundef %1440, i32 noundef %1441, ptr noundef %104, ptr noundef %1442, ptr noundef %1443)
  %1445 = icmp eq i32 %1444, 1
  br i1 %1445, label %1446, label %1451

1446:                                             ; preds = %1435
  call void @llvm.lifetime.start.p0(i64 2048, ptr %125) #7
  %1447 = getelementptr inbounds [2048 x i8], ptr %125, i64 0, i64 0
  %1448 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1447, ptr noundef @.str.3, ptr noundef @.str.8, ptr noundef %1448)
  %1449 = load ptr, ptr %33, align 8, !tbaa !5
  %1450 = getelementptr inbounds [2048 x i8], ptr %125, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1449, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 456, ptr noundef %1450)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %125) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1451:                                             ; preds = %1435
  %1452 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 3
  %1453 = load i32, ptr %1452, align 4, !tbaa !11
  %1454 = add nsw i32 %1453, 1
  store i32 %1454, ptr %1452, align 4, !tbaa !11
  %1455 = load i32, ptr %104, align 4, !tbaa !11
  %1456 = add nsw i32 %1455, 1
  %1457 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 2
  %1458 = load i32, ptr %1457, align 8, !tbaa !11
  %1459 = add nsw i32 %1458, %1456
  store i32 %1459, ptr %1457, align 8, !tbaa !11
  store i32 1, ptr %43, align 4, !tbaa !11
  br label %1511

1460:                                             ; preds = %1413
  %1461 = load double, ptr %76, align 8, !tbaa !9
  %1462 = load double, ptr %77, align 8, !tbaa !9
  %1463 = fcmp ole double %1461, %1462
  br i1 %1463, label %1464, label %1479

1464:                                             ; preds = %1460
  %1465 = load double, ptr %76, align 8, !tbaa !9
  %1466 = load double, ptr %77, align 8, !tbaa !9
  %1467 = fcmp ole double %1465, %1466
  br i1 %1467, label %1468, label %1478

1468:                                             ; preds = %1464
  call void @llvm.lifetime.start.p0(i64 2048, ptr %126) #7
  %1469 = getelementptr inbounds [2048 x i8], ptr %126, i64 0, i64 0
  %1470 = load double, ptr %76, align 8, !tbaa !9
  %1471 = load double, ptr %77, align 8, !tbaa !9
  %1472 = load double, ptr %71, align 8, !tbaa !9
  %1473 = load double, ptr %72, align 8, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1469, ptr noundef @.str.13, double noundef %1470, double noundef %1471, double noundef %1472, double noundef %1473)
  call void @llvm.lifetime.start.p0(i64 2048, ptr %127) #7
  %1474 = getelementptr inbounds [2048 x i8], ptr %127, i64 0, i64 0
  %1475 = getelementptr inbounds [2048 x i8], ptr %126, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1474, ptr noundef @.str.14, ptr noundef @.str.15, ptr noundef %1475)
  %1476 = load ptr, ptr %33, align 8, !tbaa !5
  %1477 = getelementptr inbounds [2048 x i8], ptr %127, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1476, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 464, ptr noundef %1477)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %127) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr %126) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1478:                                             ; preds = %1464
  br label %1510

1479:                                             ; preds = %1460
  %1480 = load double, ptr %76, align 8, !tbaa !9
  store double %1480, ptr %81, align 8, !tbaa !9
  %1481 = load double, ptr %76, align 8, !tbaa !9
  %1482 = fmul double 3.000000e-01, %1481
  %1483 = load double, ptr %77, align 8, !tbaa !9
  %1484 = fcmp olt double %1482, %1483
  br i1 %1484, label %1485, label %1487

1485:                                             ; preds = %1479
  %1486 = load double, ptr %77, align 8, !tbaa !9
  br label %1490

1487:                                             ; preds = %1479
  %1488 = load double, ptr %76, align 8, !tbaa !9
  %1489 = fmul double 3.000000e-01, %1488
  br label %1490

1490:                                             ; preds = %1487, %1485
  %1491 = phi double [ %1486, %1485 ], [ %1489, %1487 ]
  store double %1491, ptr %76, align 8, !tbaa !9
  %1492 = load i32, ptr %102, align 4, !tbaa !11
  %1493 = sitofp i32 %1492 to double
  %1494 = load double, ptr %76, align 8, !tbaa !9
  %1495 = fmul double %1493, %1494
  store double %1495, ptr %79, align 8, !tbaa !9
  store i32 0, ptr %45, align 4, !tbaa !11
  %1496 = load ptr, ptr %67, align 8, !tbaa !5
  %1497 = load double, ptr %76, align 8, !tbaa !9
  %1498 = load double, ptr %81, align 8, !tbaa !9
  %1499 = fdiv double %1497, %1498
  %1500 = load i32, ptr %23, align 4, !tbaa !11
  %1501 = load i32, ptr %96, align 4, !tbaa !11
  %1502 = call i32 @adjust_stepsize(ptr noundef %1496, double noundef %1499, i32 noundef %1500, i32 noundef %1501)
  %1503 = load double, ptr %79, align 8, !tbaa !9
  %1504 = load i32, ptr %96, align 4, !tbaa !11
  %1505 = sub nsw i32 %1504, 1
  %1506 = sext i32 %1505 to i64
  %1507 = getelementptr inbounds [5 x double], ptr %36, i64 0, i64 %1506
  %1508 = load double, ptr %1507, align 8, !tbaa !9
  %1509 = fmul double %1503, %1508
  store double %1509, ptr %82, align 8, !tbaa !9
  store i32 0, ptr %98, align 4, !tbaa !11
  br label %1510

1510:                                             ; preds = %1490, %1478
  br label %1511

1511:                                             ; preds = %1510, %1451
  %1512 = load double, ptr %82, align 8, !tbaa !9
  %1513 = load i32, ptr %23, align 4, !tbaa !11
  %1514 = load ptr, ptr %33, align 8, !tbaa !5
  %1515 = call i32 @new_linearisation(ptr noundef %68, double noundef %1512, i32 noundef %1513, ptr noundef %1514)
  %1516 = icmp eq i32 %1515, 1
  br i1 %1516, label %1517, label %1522

1517:                                             ; preds = %1511
  call void @llvm.lifetime.start.p0(i64 2048, ptr %128) #7
  %1518 = getelementptr inbounds [2048 x i8], ptr %128, i64 0, i64 0
  %1519 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1518, ptr noundef @.str.3, ptr noundef @.str.10, ptr noundef %1519)
  %1520 = load ptr, ptr %33, align 8, !tbaa !5
  %1521 = getelementptr inbounds [2048 x i8], ptr %128, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1520, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 477, ptr noundef %1521)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %128) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1522:                                             ; preds = %1511
  %1523 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 4
  %1524 = load i32, ptr %1523, align 16, !tbaa !11
  %1525 = add nsw i32 %1524, 1
  store i32 %1525, ptr %1523, align 16, !tbaa !11
  store i32 0, ptr %44, align 4, !tbaa !11
  br label %1526

1526:                                             ; preds = %1522, %1410
  br label %971, !llvm.loop !43

1527:                                             ; preds = %971
  store double 0.000000e+00, ptr %86, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %1528

1528:                                             ; preds = %1564, %1527
  %1529 = load i32, ptr %107, align 4, !tbaa !11
  %1530 = load i32, ptr %23, align 4, !tbaa !11
  %1531 = icmp sle i32 %1529, %1530
  br i1 %1531, label %1532, label %1567

1532:                                             ; preds = %1528
  %1533 = load double, ptr %86, align 8, !tbaa !9
  %1534 = load ptr, ptr %60, align 8, !tbaa !5
  %1535 = load i32, ptr %107, align 4, !tbaa !11
  %1536 = sext i32 %1535 to i64
  %1537 = getelementptr inbounds double, ptr %1534, i64 %1536
  %1538 = load double, ptr %1537, align 8, !tbaa !9
  %1539 = load ptr, ptr %57, align 8, !tbaa !5
  %1540 = load i32, ptr %107, align 4, !tbaa !11
  %1541 = sext i32 %1540 to i64
  %1542 = getelementptr inbounds double, ptr %1539, i64 %1541
  %1543 = load double, ptr %1542, align 8, !tbaa !9
  %1544 = fmul double %1538, %1543
  %1545 = call double @llvm.fabs.f64(double %1544)
  %1546 = fcmp olt double %1533, %1545
  br i1 %1546, label %1547, label %1560

1547:                                             ; preds = %1532
  %1548 = load ptr, ptr %60, align 8, !tbaa !5
  %1549 = load i32, ptr %107, align 4, !tbaa !11
  %1550 = sext i32 %1549 to i64
  %1551 = getelementptr inbounds double, ptr %1548, i64 %1550
  %1552 = load double, ptr %1551, align 8, !tbaa !9
  %1553 = load ptr, ptr %57, align 8, !tbaa !5
  %1554 = load i32, ptr %107, align 4, !tbaa !11
  %1555 = sext i32 %1554 to i64
  %1556 = getelementptr inbounds double, ptr %1553, i64 %1555
  %1557 = load double, ptr %1556, align 8, !tbaa !9
  %1558 = fmul double %1552, %1557
  %1559 = call double @llvm.fabs.f64(double %1558)
  br label %1562

1560:                                             ; preds = %1532
  %1561 = load double, ptr %86, align 8, !tbaa !9
  br label %1562

1562:                                             ; preds = %1560, %1547
  %1563 = phi double [ %1559, %1547 ], [ %1561, %1560 ]
  store double %1563, ptr %86, align 8, !tbaa !9
  br label %1564

1564:                                             ; preds = %1562
  %1565 = load i32, ptr %107, align 4, !tbaa !11
  %1566 = add nsw i32 %1565, 1
  store i32 %1566, ptr %107, align 4, !tbaa !11
  br label %1528, !llvm.loop !44

1567:                                             ; preds = %1528
  %1568 = load double, ptr %86, align 8, !tbaa !9
  %1569 = load i32, ptr %96, align 4, !tbaa !11
  %1570 = sub nsw i32 %1569, 1
  %1571 = sext i32 %1570 to i64
  %1572 = getelementptr inbounds [5 x double], ptr %37, i64 0, i64 %1571
  %1573 = load double, ptr %1572, align 8, !tbaa !9
  %1574 = fmul double %1568, %1573
  store double %1574, ptr %86, align 8, !tbaa !9
  %1575 = load double, ptr %86, align 8, !tbaa !9
  %1576 = load double, ptr %25, align 8, !tbaa !9
  %1577 = fcmp ogt double %1575, %1576
  br i1 %1577, label %1578, label %1799

1578:                                             ; preds = %1567
  %1579 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 1
  %1580 = load i32, ptr %1579, align 4, !tbaa !11
  %1581 = add nsw i32 %1580, 1
  store i32 %1581, ptr %1579, align 4, !tbaa !11
  %1582 = load double, ptr %76, align 8, !tbaa !9
  %1583 = load double, ptr %77, align 8, !tbaa !9
  %1584 = fcmp ole double %1582, %1583
  br i1 %1584, label %1585, label %1600

1585:                                             ; preds = %1578
  %1586 = load double, ptr %76, align 8, !tbaa !9
  %1587 = load double, ptr %77, align 8, !tbaa !9
  %1588 = fcmp ole double %1586, %1587
  br i1 %1588, label %1589, label %1599

1589:                                             ; preds = %1585
  call void @llvm.lifetime.start.p0(i64 2048, ptr %129) #7
  %1590 = getelementptr inbounds [2048 x i8], ptr %129, i64 0, i64 0
  %1591 = load double, ptr %76, align 8, !tbaa !9
  %1592 = load double, ptr %77, align 8, !tbaa !9
  %1593 = load double, ptr %71, align 8, !tbaa !9
  %1594 = load double, ptr %72, align 8, !tbaa !9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1590, ptr noundef @.str.13, double noundef %1591, double noundef %1592, double noundef %1593, double noundef %1594)
  call void @llvm.lifetime.start.p0(i64 2048, ptr %130) #7
  %1595 = getelementptr inbounds [2048 x i8], ptr %130, i64 0, i64 0
  %1596 = getelementptr inbounds [2048 x i8], ptr %129, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1595, ptr noundef @.str.14, ptr noundef @.str.15, ptr noundef %1596)
  %1597 = load ptr, ptr %33, align 8, !tbaa !5
  %1598 = getelementptr inbounds [2048 x i8], ptr %130, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1597, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 495, ptr noundef %1598)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %130) #7
  call void @llvm.lifetime.end.p0(i64 2048, ptr %129) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1599:                                             ; preds = %1585
  br label %1600

1600:                                             ; preds = %1599, %1578
  %1601 = load double, ptr %76, align 8, !tbaa !9
  store double %1601, ptr %81, align 8, !tbaa !9
  %1602 = load i32, ptr %47, align 4, !tbaa !11
  %1603 = icmp eq i32 %1602, 1
  br i1 %1603, label %1604, label %1749

1604:                                             ; preds = %1600
  store i32 0, ptr %47, align 4, !tbaa !11
  %1605 = load double, ptr %76, align 8, !tbaa !9
  %1606 = load double, ptr %25, align 8, !tbaa !9
  %1607 = load double, ptr %86, align 8, !tbaa !9
  %1608 = fdiv double %1606, %1607
  %1609 = load i32, ptr %96, align 4, !tbaa !11
  %1610 = add nsw i32 %1609, 1
  %1611 = sitofp i32 %1610 to double
  %1612 = fdiv double 1.000000e+00, %1611
  %1613 = call double @pow(double noundef %1608, double noundef %1612) #7
  %1614 = fmul double 0x3FEAA7EF9DB22D0E, %1613
  %1615 = fcmp olt double 1.000000e-01, %1614
  br i1 %1615, label %1616, label %1626

1616:                                             ; preds = %1604
  %1617 = load double, ptr %25, align 8, !tbaa !9
  %1618 = load double, ptr %86, align 8, !tbaa !9
  %1619 = fdiv double %1617, %1618
  %1620 = load i32, ptr %96, align 4, !tbaa !11
  %1621 = add nsw i32 %1620, 1
  %1622 = sitofp i32 %1621 to double
  %1623 = fdiv double 1.000000e+00, %1622
  %1624 = call double @pow(double noundef %1619, double noundef %1623) #7
  %1625 = fmul double 0x3FEAA7EF9DB22D0E, %1624
  br label %1627

1626:                                             ; preds = %1604
  br label %1627

1627:                                             ; preds = %1626, %1616
  %1628 = phi double [ %1625, %1616 ], [ 1.000000e-01, %1626 ]
  %1629 = fmul double %1605, %1628
  store double %1629, ptr %87, align 8, !tbaa !9
  %1630 = load i32, ptr %96, align 4, !tbaa !11
  %1631 = icmp sgt i32 %1630, 1
  br i1 %1631, label %1632, label %1739

1632:                                             ; preds = %1627
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %1633

1633:                                             ; preds = %1689, %1632
  %1634 = load i32, ptr %107, align 4, !tbaa !11
  %1635 = load i32, ptr %23, align 4, !tbaa !11
  %1636 = icmp sle i32 %1634, %1635
  br i1 %1636, label %1637, label %1692

1637:                                             ; preds = %1633
  %1638 = load double, ptr %88, align 8, !tbaa !9
  %1639 = load ptr, ptr %67, align 8, !tbaa !5
  %1640 = load i32, ptr %107, align 4, !tbaa !11
  %1641 = sext i32 %1640 to i64
  %1642 = getelementptr inbounds ptr, ptr %1639, i64 %1641
  %1643 = load ptr, ptr %1642, align 8, !tbaa !5
  %1644 = load i32, ptr %96, align 4, !tbaa !11
  %1645 = sext i32 %1644 to i64
  %1646 = getelementptr inbounds double, ptr %1643, i64 %1645
  %1647 = load double, ptr %1646, align 8, !tbaa !9
  %1648 = load ptr, ptr %60, align 8, !tbaa !5
  %1649 = load i32, ptr %107, align 4, !tbaa !11
  %1650 = sext i32 %1649 to i64
  %1651 = getelementptr inbounds double, ptr %1648, i64 %1650
  %1652 = load double, ptr %1651, align 8, !tbaa !9
  %1653 = fadd double %1647, %1652
  %1654 = load ptr, ptr %57, align 8, !tbaa !5
  %1655 = load i32, ptr %107, align 4, !tbaa !11
  %1656 = sext i32 %1655 to i64
  %1657 = getelementptr inbounds double, ptr %1654, i64 %1656
  %1658 = load double, ptr %1657, align 8, !tbaa !9
  %1659 = fmul double %1653, %1658
  %1660 = call double @llvm.fabs.f64(double %1659)
  %1661 = fcmp olt double %1638, %1660
  br i1 %1661, label %1662, label %1685

1662:                                             ; preds = %1637
  %1663 = load ptr, ptr %67, align 8, !tbaa !5
  %1664 = load i32, ptr %107, align 4, !tbaa !11
  %1665 = sext i32 %1664 to i64
  %1666 = getelementptr inbounds ptr, ptr %1663, i64 %1665
  %1667 = load ptr, ptr %1666, align 8, !tbaa !5
  %1668 = load i32, ptr %96, align 4, !tbaa !11
  %1669 = sext i32 %1668 to i64
  %1670 = getelementptr inbounds double, ptr %1667, i64 %1669
  %1671 = load double, ptr %1670, align 8, !tbaa !9
  %1672 = load ptr, ptr %60, align 8, !tbaa !5
  %1673 = load i32, ptr %107, align 4, !tbaa !11
  %1674 = sext i32 %1673 to i64
  %1675 = getelementptr inbounds double, ptr %1672, i64 %1674
  %1676 = load double, ptr %1675, align 8, !tbaa !9
  %1677 = fadd double %1671, %1676
  %1678 = load ptr, ptr %57, align 8, !tbaa !5
  %1679 = load i32, ptr %107, align 4, !tbaa !11
  %1680 = sext i32 %1679 to i64
  %1681 = getelementptr inbounds double, ptr %1678, i64 %1680
  %1682 = load double, ptr %1681, align 8, !tbaa !9
  %1683 = fmul double %1677, %1682
  %1684 = call double @llvm.fabs.f64(double %1683)
  br label %1687

1685:                                             ; preds = %1637
  %1686 = load double, ptr %88, align 8, !tbaa !9
  br label %1687

1687:                                             ; preds = %1685, %1662
  %1688 = phi double [ %1684, %1662 ], [ %1686, %1685 ]
  store double %1688, ptr %88, align 8, !tbaa !9
  br label %1689

1689:                                             ; preds = %1687
  %1690 = load i32, ptr %107, align 4, !tbaa !11
  %1691 = add nsw i32 %1690, 1
  store i32 %1691, ptr %107, align 4, !tbaa !11
  br label %1633, !llvm.loop !45

1692:                                             ; preds = %1633
  %1693 = load double, ptr %88, align 8, !tbaa !9
  %1694 = load i32, ptr %96, align 4, !tbaa !11
  %1695 = sub nsw i32 %1694, 2
  %1696 = sext i32 %1695 to i64
  %1697 = getelementptr inbounds [5 x double], ptr %37, i64 0, i64 %1696
  %1698 = load double, ptr %1697, align 8, !tbaa !9
  %1699 = fmul double %1693, %1698
  store double %1699, ptr %88, align 8, !tbaa !9
  %1700 = load double, ptr %76, align 8, !tbaa !9
  %1701 = load double, ptr %25, align 8, !tbaa !9
  %1702 = load double, ptr %88, align 8, !tbaa !9
  %1703 = fdiv double %1701, %1702
  %1704 = load i32, ptr %96, align 4, !tbaa !11
  %1705 = sitofp i32 %1704 to double
  %1706 = fdiv double 1.000000e+00, %1705
  %1707 = call double @pow(double noundef %1703, double noundef %1706) #7
  %1708 = fmul double 7.690000e-01, %1707
  %1709 = fcmp olt double 1.000000e-01, %1708
  br i1 %1709, label %1710, label %1719

1710:                                             ; preds = %1692
  %1711 = load double, ptr %25, align 8, !tbaa !9
  %1712 = load double, ptr %88, align 8, !tbaa !9
  %1713 = fdiv double %1711, %1712
  %1714 = load i32, ptr %96, align 4, !tbaa !11
  %1715 = sitofp i32 %1714 to double
  %1716 = fdiv double 1.000000e+00, %1715
  %1717 = call double @pow(double noundef %1713, double noundef %1716) #7
  %1718 = fmul double 7.690000e-01, %1717
  br label %1720

1719:                                             ; preds = %1692
  br label %1720

1720:                                             ; preds = %1719, %1710
  %1721 = phi double [ %1718, %1710 ], [ 1.000000e-01, %1719 ]
  %1722 = fmul double %1700, %1721
  store double %1722, ptr %89, align 8, !tbaa !9
  %1723 = load double, ptr %89, align 8, !tbaa !9
  %1724 = load double, ptr %87, align 8, !tbaa !9
  %1725 = fcmp ogt double %1723, %1724
  br i1 %1725, label %1726, label %1738

1726:                                             ; preds = %1720
  %1727 = load double, ptr %76, align 8, !tbaa !9
  %1728 = load double, ptr %89, align 8, !tbaa !9
  %1729 = fcmp olt double %1727, %1728
  br i1 %1729, label %1730, label %1732

1730:                                             ; preds = %1726
  %1731 = load double, ptr %76, align 8, !tbaa !9
  br label %1734

1732:                                             ; preds = %1726
  %1733 = load double, ptr %89, align 8, !tbaa !9
  br label %1734

1734:                                             ; preds = %1732, %1730
  %1735 = phi double [ %1731, %1730 ], [ %1733, %1732 ]
  store double %1735, ptr %87, align 8, !tbaa !9
  %1736 = load i32, ptr %96, align 4, !tbaa !11
  %1737 = sub nsw i32 %1736, 1
  store i32 %1737, ptr %96, align 4, !tbaa !11
  br label %1738

1738:                                             ; preds = %1734, %1720
  br label %1739

1739:                                             ; preds = %1738, %1627
  %1740 = load double, ptr %77, align 8, !tbaa !9
  %1741 = load double, ptr %87, align 8, !tbaa !9
  %1742 = fcmp olt double %1740, %1741
  br i1 %1742, label %1743, label %1745

1743:                                             ; preds = %1739
  %1744 = load double, ptr %87, align 8, !tbaa !9
  br label %1747

1745:                                             ; preds = %1739
  %1746 = load double, ptr %77, align 8, !tbaa !9
  br label %1747

1747:                                             ; preds = %1745, %1743
  %1748 = phi double [ %1744, %1743 ], [ %1746, %1745 ]
  store double %1748, ptr %76, align 8, !tbaa !9
  br label %1761

1749:                                             ; preds = %1600
  %1750 = load double, ptr %77, align 8, !tbaa !9
  %1751 = load double, ptr %76, align 8, !tbaa !9
  %1752 = fmul double 5.000000e-01, %1751
  %1753 = fcmp olt double %1750, %1752
  br i1 %1753, label %1754, label %1757

1754:                                             ; preds = %1749
  %1755 = load double, ptr %76, align 8, !tbaa !9
  %1756 = fmul double 5.000000e-01, %1755
  br label %1759

1757:                                             ; preds = %1749
  %1758 = load double, ptr %77, align 8, !tbaa !9
  br label %1759

1759:                                             ; preds = %1757, %1754
  %1760 = phi double [ %1756, %1754 ], [ %1758, %1757 ]
  store double %1760, ptr %76, align 8, !tbaa !9
  br label %1761

1761:                                             ; preds = %1759, %1747
  %1762 = load i32, ptr %102, align 4, !tbaa !11
  %1763 = sitofp i32 %1762 to double
  %1764 = load double, ptr %76, align 8, !tbaa !9
  %1765 = fmul double %1763, %1764
  store double %1765, ptr %79, align 8, !tbaa !9
  %1766 = load double, ptr %76, align 8, !tbaa !9
  %1767 = load double, ptr %81, align 8, !tbaa !9
  %1768 = fcmp olt double %1766, %1767
  br i1 %1768, label %1769, label %1770

1769:                                             ; preds = %1761
  store i32 0, ptr %45, align 4, !tbaa !11
  br label %1770

1770:                                             ; preds = %1769, %1761
  %1771 = load ptr, ptr %67, align 8, !tbaa !5
  %1772 = load double, ptr %76, align 8, !tbaa !9
  %1773 = load double, ptr %81, align 8, !tbaa !9
  %1774 = fdiv double %1772, %1773
  %1775 = load i32, ptr %23, align 4, !tbaa !11
  %1776 = load i32, ptr %96, align 4, !tbaa !11
  %1777 = call i32 @adjust_stepsize(ptr noundef %1771, double noundef %1774, i32 noundef %1775, i32 noundef %1776)
  %1778 = load double, ptr %79, align 8, !tbaa !9
  %1779 = load i32, ptr %96, align 4, !tbaa !11
  %1780 = sub nsw i32 %1779, 1
  %1781 = sext i32 %1780 to i64
  %1782 = getelementptr inbounds [5 x double], ptr %36, i64 0, i64 %1781
  %1783 = load double, ptr %1782, align 8, !tbaa !9
  %1784 = fmul double %1778, %1783
  store double %1784, ptr %82, align 8, !tbaa !9
  store i32 0, ptr %98, align 4, !tbaa !11
  %1785 = load double, ptr %82, align 8, !tbaa !9
  %1786 = load i32, ptr %23, align 4, !tbaa !11
  %1787 = load ptr, ptr %33, align 8, !tbaa !5
  %1788 = call i32 @new_linearisation(ptr noundef %68, double noundef %1785, i32 noundef %1786, ptr noundef %1787)
  %1789 = icmp eq i32 %1788, 1
  br i1 %1789, label %1790, label %1795

1790:                                             ; preds = %1770
  call void @llvm.lifetime.start.p0(i64 2048, ptr %131) #7
  %1791 = getelementptr inbounds [2048 x i8], ptr %131, i64 0, i64 0
  %1792 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1791, ptr noundef @.str.3, ptr noundef @.str.10, ptr noundef %1792)
  %1793 = load ptr, ptr %33, align 8, !tbaa !5
  %1794 = getelementptr inbounds [2048 x i8], ptr %131, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1793, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 526, ptr noundef %1794)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %131) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1795:                                             ; preds = %1770
  %1796 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 4
  %1797 = load i32, ptr %1796, align 16, !tbaa !11
  %1798 = add nsw i32 %1797, 1
  store i32 %1798, ptr %1796, align 16, !tbaa !11
  store i32 0, ptr %44, align 4, !tbaa !11
  br label %1800

1799:                                             ; preds = %1567
  br label %1801

1800:                                             ; preds = %1795
  br label %970

1801:                                             ; preds = %1799
  %1802 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 0
  %1803 = load i32, ptr %1802, align 16, !tbaa !11
  %1804 = add nsw i32 %1803, 1
  store i32 %1804, ptr %1802, align 16, !tbaa !11
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %1805

1805:                                             ; preds = %1849, %1801
  %1806 = load i32, ptr %107, align 4, !tbaa !11
  %1807 = load i32, ptr %23, align 4, !tbaa !11
  %1808 = icmp sle i32 %1806, %1807
  br i1 %1808, label %1809, label %1852

1809:                                             ; preds = %1805
  %1810 = load ptr, ptr %60, align 8, !tbaa !5
  %1811 = load i32, ptr %107, align 4, !tbaa !11
  %1812 = sext i32 %1811 to i64
  %1813 = getelementptr inbounds double, ptr %1810, i64 %1812
  %1814 = load double, ptr %1813, align 8, !tbaa !9
  %1815 = load ptr, ptr %67, align 8, !tbaa !5
  %1816 = load i32, ptr %107, align 4, !tbaa !11
  %1817 = sext i32 %1816 to i64
  %1818 = getelementptr inbounds ptr, ptr %1815, i64 %1817
  %1819 = load ptr, ptr %1818, align 8, !tbaa !5
  %1820 = load i32, ptr %96, align 4, !tbaa !11
  %1821 = add nsw i32 %1820, 1
  %1822 = sext i32 %1821 to i64
  %1823 = getelementptr inbounds double, ptr %1819, i64 %1822
  %1824 = load double, ptr %1823, align 8, !tbaa !9
  %1825 = fsub double %1814, %1824
  %1826 = load ptr, ptr %67, align 8, !tbaa !5
  %1827 = load i32, ptr %107, align 4, !tbaa !11
  %1828 = sext i32 %1827 to i64
  %1829 = getelementptr inbounds ptr, ptr %1826, i64 %1828
  %1830 = load ptr, ptr %1829, align 8, !tbaa !5
  %1831 = load i32, ptr %96, align 4, !tbaa !11
  %1832 = add nsw i32 %1831, 2
  %1833 = sext i32 %1832 to i64
  %1834 = getelementptr inbounds double, ptr %1830, i64 %1833
  store double %1825, ptr %1834, align 8, !tbaa !9
  %1835 = load ptr, ptr %60, align 8, !tbaa !5
  %1836 = load i32, ptr %107, align 4, !tbaa !11
  %1837 = sext i32 %1836 to i64
  %1838 = getelementptr inbounds double, ptr %1835, i64 %1837
  %1839 = load double, ptr %1838, align 8, !tbaa !9
  %1840 = load ptr, ptr %67, align 8, !tbaa !5
  %1841 = load i32, ptr %107, align 4, !tbaa !11
  %1842 = sext i32 %1841 to i64
  %1843 = getelementptr inbounds ptr, ptr %1840, i64 %1842
  %1844 = load ptr, ptr %1843, align 8, !tbaa !5
  %1845 = load i32, ptr %96, align 4, !tbaa !11
  %1846 = add nsw i32 %1845, 1
  %1847 = sext i32 %1846 to i64
  %1848 = getelementptr inbounds double, ptr %1844, i64 %1847
  store double %1839, ptr %1848, align 8, !tbaa !9
  br label %1849

1849:                                             ; preds = %1809
  %1850 = load i32, ptr %107, align 4, !tbaa !11
  %1851 = add nsw i32 %1850, 1
  store i32 %1851, ptr %107, align 4, !tbaa !11
  br label %1805, !llvm.loop !46

1852:                                             ; preds = %1805
  %1853 = load i32, ptr %96, align 4, !tbaa !11
  store i32 %1853, ptr %105, align 4, !tbaa !11
  br label %1854

1854:                                             ; preds = %1887, %1852
  %1855 = load i32, ptr %105, align 4, !tbaa !11
  %1856 = icmp sge i32 %1855, 1
  br i1 %1856, label %1857, label %1890

1857:                                             ; preds = %1854
  store i32 1, ptr %106, align 4, !tbaa !11
  br label %1858

1858:                                             ; preds = %1883, %1857
  %1859 = load i32, ptr %106, align 4, !tbaa !11
  %1860 = load i32, ptr %23, align 4, !tbaa !11
  %1861 = icmp sle i32 %1859, %1860
  br i1 %1861, label %1862, label %1886

1862:                                             ; preds = %1858
  %1863 = load ptr, ptr %67, align 8, !tbaa !5
  %1864 = load i32, ptr %106, align 4, !tbaa !11
  %1865 = sext i32 %1864 to i64
  %1866 = getelementptr inbounds ptr, ptr %1863, i64 %1865
  %1867 = load ptr, ptr %1866, align 8, !tbaa !5
  %1868 = load i32, ptr %105, align 4, !tbaa !11
  %1869 = add nsw i32 %1868, 1
  %1870 = sext i32 %1869 to i64
  %1871 = getelementptr inbounds double, ptr %1867, i64 %1870
  %1872 = load double, ptr %1871, align 8, !tbaa !9
  %1873 = load ptr, ptr %67, align 8, !tbaa !5
  %1874 = load i32, ptr %106, align 4, !tbaa !11
  %1875 = sext i32 %1874 to i64
  %1876 = getelementptr inbounds ptr, ptr %1873, i64 %1875
  %1877 = load ptr, ptr %1876, align 8, !tbaa !5
  %1878 = load i32, ptr %105, align 4, !tbaa !11
  %1879 = sext i32 %1878 to i64
  %1880 = getelementptr inbounds double, ptr %1877, i64 %1879
  %1881 = load double, ptr %1880, align 8, !tbaa !9
  %1882 = fadd double %1881, %1872
  store double %1882, ptr %1880, align 8, !tbaa !9
  br label %1883

1883:                                             ; preds = %1862
  %1884 = load i32, ptr %106, align 4, !tbaa !11
  %1885 = add nsw i32 %1884, 1
  store i32 %1885, ptr %106, align 4, !tbaa !11
  br label %1858, !llvm.loop !47

1886:                                             ; preds = %1858
  br label %1887

1887:                                             ; preds = %1886
  %1888 = load i32, ptr %105, align 4, !tbaa !11
  %1889 = add nsw i32 %1888, -1
  store i32 %1889, ptr %105, align 4, !tbaa !11
  br label %1854, !llvm.loop !48

1890:                                             ; preds = %1854
  br label %1891

1891:                                             ; preds = %1977, %1890
  %1892 = load i32, ptr %100, align 4, !tbaa !11
  %1893 = load i32, ptr %30, align 4, !tbaa !11
  %1894 = icmp slt i32 %1892, %1893
  br i1 %1894, label %1895, label %1907

1895:                                             ; preds = %1891
  %1896 = load i32, ptr %102, align 4, !tbaa !11
  %1897 = sitofp i32 %1896 to double
  %1898 = load double, ptr %73, align 8, !tbaa !9
  %1899 = load ptr, ptr %29, align 8, !tbaa !5
  %1900 = load i32, ptr %100, align 4, !tbaa !11
  %1901 = sext i32 %1900 to i64
  %1902 = getelementptr inbounds double, ptr %1899, i64 %1901
  %1903 = load double, ptr %1902, align 8, !tbaa !9
  %1904 = fsub double %1898, %1903
  %1905 = fmul double %1897, %1904
  %1906 = fcmp oge double %1905, 0.000000e+00
  br label %1907

1907:                                             ; preds = %1895, %1891
  %1908 = phi i1 [ false, %1891 ], [ %1906, %1895 ]
  br i1 %1908, label %1909, label %1980

1909:                                             ; preds = %1907
  %1910 = load double, ptr %73, align 8, !tbaa !9
  %1911 = load ptr, ptr %29, align 8, !tbaa !5
  %1912 = load i32, ptr %100, align 4, !tbaa !11
  %1913 = sext i32 %1912 to i64
  %1914 = getelementptr inbounds double, ptr %1911, i64 %1913
  %1915 = load double, ptr %1914, align 8, !tbaa !9
  %1916 = fcmp oeq double %1910, %1915
  br i1 %1916, label %1917, label %1939

1917:                                             ; preds = %1909
  %1918 = load ptr, ptr %31, align 8, !tbaa !5
  %1919 = load ptr, ptr %29, align 8, !tbaa !5
  %1920 = load i32, ptr %100, align 4, !tbaa !11
  %1921 = sext i32 %1920 to i64
  %1922 = getelementptr inbounds double, ptr %1919, i64 %1921
  %1923 = load double, ptr %1922, align 8, !tbaa !9
  %1924 = load ptr, ptr %56, align 8, !tbaa !5
  %1925 = getelementptr inbounds double, ptr %1924, i64 1
  %1926 = load ptr, ptr %51, align 8, !tbaa !5
  %1927 = getelementptr inbounds double, ptr %1926, i64 1
  %1928 = load i32, ptr %100, align 4, !tbaa !11
  %1929 = load ptr, ptr %24, align 8, !tbaa !5
  %1930 = load ptr, ptr %33, align 8, !tbaa !5
  %1931 = call i32 %1918(double noundef %1923, ptr noundef %1925, ptr noundef %1927, i32 noundef %1928, ptr noundef %1929, ptr noundef %1930)
  %1932 = icmp eq i32 %1931, 1
  br i1 %1932, label %1933, label %1938

1933:                                             ; preds = %1917
  call void @llvm.lifetime.start.p0(i64 2048, ptr %132) #7
  %1934 = getelementptr inbounds [2048 x i8], ptr %132, i64 0, i64 0
  %1935 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1934, ptr noundef @.str.3, ptr noundef @.str.16, ptr noundef %1935)
  %1936 = load ptr, ptr %33, align 8, !tbaa !5
  %1937 = getelementptr inbounds [2048 x i8], ptr %132, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1936, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 552, ptr noundef %1937)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %132) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1938:                                             ; preds = %1917
  br label %1977

1939:                                             ; preds = %1909
  %1940 = load ptr, ptr %29, align 8, !tbaa !5
  %1941 = load i32, ptr %100, align 4, !tbaa !11
  %1942 = sext i32 %1941 to i64
  %1943 = getelementptr inbounds double, ptr %1940, i64 %1942
  %1944 = load double, ptr %1943, align 8, !tbaa !9
  %1945 = load double, ptr %73, align 8, !tbaa !9
  %1946 = load ptr, ptr %56, align 8, !tbaa !5
  %1947 = load double, ptr %79, align 8, !tbaa !9
  %1948 = load ptr, ptr %67, align 8, !tbaa !5
  %1949 = load i32, ptr %96, align 4, !tbaa !11
  %1950 = load ptr, ptr %62, align 8, !tbaa !5
  %1951 = load ptr, ptr %65, align 8, !tbaa !5
  %1952 = load ptr, ptr %66, align 8, !tbaa !5
  %1953 = load ptr, ptr %50, align 8, !tbaa !5
  %1954 = load i32, ptr %23, align 4, !tbaa !11
  %1955 = call i32 @interp_from_dif(double noundef %1944, double noundef %1945, ptr noundef %1946, double noundef %1947, ptr noundef %1948, i32 noundef %1949, ptr noundef %1950, ptr noundef %1951, ptr noundef %1952, ptr noundef %1953, i32 noundef %1954, i32 noundef 2)
  %1956 = load ptr, ptr %31, align 8, !tbaa !5
  %1957 = load ptr, ptr %29, align 8, !tbaa !5
  %1958 = load i32, ptr %100, align 4, !tbaa !11
  %1959 = sext i32 %1958 to i64
  %1960 = getelementptr inbounds double, ptr %1957, i64 %1959
  %1961 = load double, ptr %1960, align 8, !tbaa !9
  %1962 = load ptr, ptr %62, align 8, !tbaa !5
  %1963 = getelementptr inbounds double, ptr %1962, i64 1
  %1964 = load ptr, ptr %65, align 8, !tbaa !5
  %1965 = getelementptr inbounds double, ptr %1964, i64 1
  %1966 = load i32, ptr %100, align 4, !tbaa !11
  %1967 = load ptr, ptr %24, align 8, !tbaa !5
  %1968 = load ptr, ptr %33, align 8, !tbaa !5
  %1969 = call i32 %1956(double noundef %1961, ptr noundef %1963, ptr noundef %1965, i32 noundef %1966, ptr noundef %1967, ptr noundef %1968)
  %1970 = icmp eq i32 %1969, 1
  br i1 %1970, label %1971, label %1976

1971:                                             ; preds = %1939
  call void @llvm.lifetime.start.p0(i64 2048, ptr %133) #7
  %1972 = getelementptr inbounds [2048 x i8], ptr %133, i64 0, i64 0
  %1973 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1972, ptr noundef @.str.3, ptr noundef @.str.17, ptr noundef %1973)
  %1974 = load ptr, ptr %33, align 8, !tbaa !5
  %1975 = getelementptr inbounds [2048 x i8], ptr %133, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1974, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 568, ptr noundef %1975)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %133) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

1976:                                             ; preds = %1939
  br label %1977

1977:                                             ; preds = %1976, %1938
  %1978 = load i32, ptr %100, align 4, !tbaa !11
  %1979 = add nsw i32 %1978, 1
  store i32 %1979, ptr %100, align 4, !tbaa !11
  br label %1891, !llvm.loop !49

1980:                                             ; preds = %1907
  %1981 = load i32, ptr %45, align 4, !tbaa !11
  %1982 = icmp eq i32 %1981, 1
  br i1 %1982, label %1983, label %1984

1983:                                             ; preds = %1980
  br label %2251

1984:                                             ; preds = %1980
  %1985 = load i32, ptr %96, align 4, !tbaa !11
  store i32 %1985, ptr %97, align 4, !tbaa !11
  %1986 = load double, ptr %76, align 8, !tbaa !9
  store double %1986, ptr %81, align 8, !tbaa !9
  %1987 = load i32, ptr %98, align 4, !tbaa !11
  %1988 = add nsw i32 %1987, 1
  %1989 = load i32, ptr %42, align 4, !tbaa !11
  %1990 = add nsw i32 %1989, 2
  %1991 = icmp slt i32 %1988, %1990
  br i1 %1991, label %1992, label %1995

1992:                                             ; preds = %1984
  %1993 = load i32, ptr %98, align 4, !tbaa !11
  %1994 = add nsw i32 %1993, 1
  br label %1998

1995:                                             ; preds = %1984
  %1996 = load i32, ptr %42, align 4, !tbaa !11
  %1997 = add nsw i32 %1996, 2
  br label %1998

1998:                                             ; preds = %1995, %1992
  %1999 = phi i32 [ %1994, %1992 ], [ %1997, %1995 ]
  store i32 %1999, ptr %98, align 4, !tbaa !11
  %2000 = load i32, ptr %98, align 4, !tbaa !11
  %2001 = load i32, ptr %96, align 4, !tbaa !11
  %2002 = add nsw i32 %2001, 2
  %2003 = icmp sge i32 %2000, %2002
  br i1 %2003, label %2004, label %2210

2004:                                             ; preds = %1998
  %2005 = load double, ptr %86, align 8, !tbaa !9
  %2006 = load double, ptr %25, align 8, !tbaa !9
  %2007 = fdiv double %2005, %2006
  %2008 = load i32, ptr %96, align 4, !tbaa !11
  %2009 = sitofp i32 %2008 to double
  %2010 = fadd double %2009, 1.000000e+00
  %2011 = fdiv double 1.000000e+00, %2010
  %2012 = call double @pow(double noundef %2007, double noundef %2011) #7
  %2013 = fmul double 1.200000e+00, %2012
  store double %2013, ptr %92, align 8, !tbaa !9
  %2014 = load double, ptr %92, align 8, !tbaa !9
  %2015 = fcmp ogt double %2014, 1.000000e-01
  br i1 %2015, label %2016, label %2020

2016:                                             ; preds = %2004
  %2017 = load double, ptr %76, align 8, !tbaa !9
  %2018 = load double, ptr %92, align 8, !tbaa !9
  %2019 = fdiv double %2017, %2018
  store double %2019, ptr %87, align 8, !tbaa !9
  br label %2023

2020:                                             ; preds = %2004
  %2021 = load double, ptr %76, align 8, !tbaa !9
  %2022 = fmul double 1.000000e+01, %2021
  store double %2022, ptr %87, align 8, !tbaa !9
  br label %2023

2023:                                             ; preds = %2020, %2016
  %2024 = load i32, ptr %96, align 4, !tbaa !11
  store i32 %2024, ptr %101, align 4, !tbaa !11
  %2025 = load i32, ptr %96, align 4, !tbaa !11
  %2026 = icmp sgt i32 %2025, 1
  br i1 %2026, label %2027, label %2109

2027:                                             ; preds = %2023
  store double 0.000000e+00, ptr %88, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %2028

2028:                                             ; preds = %2072, %2027
  %2029 = load i32, ptr %107, align 4, !tbaa !11
  %2030 = load i32, ptr %23, align 4, !tbaa !11
  %2031 = icmp sle i32 %2029, %2030
  br i1 %2031, label %2032, label %2075

2032:                                             ; preds = %2028
  %2033 = load double, ptr %88, align 8, !tbaa !9
  %2034 = load ptr, ptr %67, align 8, !tbaa !5
  %2035 = load i32, ptr %107, align 4, !tbaa !11
  %2036 = sext i32 %2035 to i64
  %2037 = getelementptr inbounds ptr, ptr %2034, i64 %2036
  %2038 = load ptr, ptr %2037, align 8, !tbaa !5
  %2039 = load i32, ptr %96, align 4, !tbaa !11
  %2040 = sext i32 %2039 to i64
  %2041 = getelementptr inbounds double, ptr %2038, i64 %2040
  %2042 = load double, ptr %2041, align 8, !tbaa !9
  %2043 = load ptr, ptr %57, align 8, !tbaa !5
  %2044 = load i32, ptr %107, align 4, !tbaa !11
  %2045 = sext i32 %2044 to i64
  %2046 = getelementptr inbounds double, ptr %2043, i64 %2045
  %2047 = load double, ptr %2046, align 8, !tbaa !9
  %2048 = fmul double %2042, %2047
  %2049 = call double @llvm.fabs.f64(double %2048)
  %2050 = fcmp olt double %2033, %2049
  br i1 %2050, label %2051, label %2068

2051:                                             ; preds = %2032
  %2052 = load ptr, ptr %67, align 8, !tbaa !5
  %2053 = load i32, ptr %107, align 4, !tbaa !11
  %2054 = sext i32 %2053 to i64
  %2055 = getelementptr inbounds ptr, ptr %2052, i64 %2054
  %2056 = load ptr, ptr %2055, align 8, !tbaa !5
  %2057 = load i32, ptr %96, align 4, !tbaa !11
  %2058 = sext i32 %2057 to i64
  %2059 = getelementptr inbounds double, ptr %2056, i64 %2058
  %2060 = load double, ptr %2059, align 8, !tbaa !9
  %2061 = load ptr, ptr %57, align 8, !tbaa !5
  %2062 = load i32, ptr %107, align 4, !tbaa !11
  %2063 = sext i32 %2062 to i64
  %2064 = getelementptr inbounds double, ptr %2061, i64 %2063
  %2065 = load double, ptr %2064, align 8, !tbaa !9
  %2066 = fmul double %2060, %2065
  %2067 = call double @llvm.fabs.f64(double %2066)
  br label %2070

2068:                                             ; preds = %2032
  %2069 = load double, ptr %88, align 8, !tbaa !9
  br label %2070

2070:                                             ; preds = %2068, %2051
  %2071 = phi double [ %2067, %2051 ], [ %2069, %2068 ]
  store double %2071, ptr %88, align 8, !tbaa !9
  br label %2072

2072:                                             ; preds = %2070
  %2073 = load i32, ptr %107, align 4, !tbaa !11
  %2074 = add nsw i32 %2073, 1
  store i32 %2074, ptr %107, align 4, !tbaa !11
  br label %2028, !llvm.loop !50

2075:                                             ; preds = %2028
  %2076 = load double, ptr %88, align 8, !tbaa !9
  %2077 = load i32, ptr %96, align 4, !tbaa !11
  %2078 = sub nsw i32 %2077, 2
  %2079 = sext i32 %2078 to i64
  %2080 = getelementptr inbounds [5 x double], ptr %37, i64 0, i64 %2079
  %2081 = load double, ptr %2080, align 8, !tbaa !9
  %2082 = fmul double %2076, %2081
  store double %2082, ptr %88, align 8, !tbaa !9
  %2083 = load double, ptr %88, align 8, !tbaa !9
  %2084 = load double, ptr %25, align 8, !tbaa !9
  %2085 = fdiv double %2083, %2084
  %2086 = load i32, ptr %96, align 4, !tbaa !11
  %2087 = sitofp i32 %2086 to double
  %2088 = fdiv double 1.000000e+00, %2087
  %2089 = call double @pow(double noundef %2085, double noundef %2088) #7
  %2090 = fmul double 1.300000e+00, %2089
  store double %2090, ptr %92, align 8, !tbaa !9
  %2091 = load double, ptr %92, align 8, !tbaa !9
  %2092 = fcmp ogt double %2091, 1.000000e-01
  br i1 %2092, label %2093, label %2097

2093:                                             ; preds = %2075
  %2094 = load double, ptr %76, align 8, !tbaa !9
  %2095 = load double, ptr %92, align 8, !tbaa !9
  %2096 = fdiv double %2094, %2095
  store double %2096, ptr %89, align 8, !tbaa !9
  br label %2100

2097:                                             ; preds = %2075
  %2098 = load double, ptr %76, align 8, !tbaa !9
  %2099 = fmul double 1.000000e+01, %2098
  store double %2099, ptr %89, align 8, !tbaa !9
  br label %2100

2100:                                             ; preds = %2097, %2093
  %2101 = load double, ptr %89, align 8, !tbaa !9
  %2102 = load double, ptr %87, align 8, !tbaa !9
  %2103 = fcmp ogt double %2101, %2102
  br i1 %2103, label %2104, label %2108

2104:                                             ; preds = %2100
  %2105 = load double, ptr %89, align 8, !tbaa !9
  store double %2105, ptr %87, align 8, !tbaa !9
  %2106 = load i32, ptr %96, align 4, !tbaa !11
  %2107 = sub nsw i32 %2106, 1
  store i32 %2107, ptr %101, align 4, !tbaa !11
  br label %2108

2108:                                             ; preds = %2104, %2100
  br label %2109

2109:                                             ; preds = %2108, %2023
  %2110 = load i32, ptr %96, align 4, !tbaa !11
  %2111 = load i32, ptr %42, align 4, !tbaa !11
  %2112 = icmp slt i32 %2110, %2111
  br i1 %2112, label %2113, label %2197

2113:                                             ; preds = %2109
  store double 0.000000e+00, ptr %93, align 8, !tbaa !9
  store i32 1, ptr %107, align 4, !tbaa !11
  br label %2114

2114:                                             ; preds = %2160, %2113
  %2115 = load i32, ptr %107, align 4, !tbaa !11
  %2116 = load i32, ptr %23, align 4, !tbaa !11
  %2117 = icmp sle i32 %2115, %2116
  br i1 %2117, label %2118, label %2163

2118:                                             ; preds = %2114
  %2119 = load double, ptr %93, align 8, !tbaa !9
  %2120 = load ptr, ptr %67, align 8, !tbaa !5
  %2121 = load i32, ptr %107, align 4, !tbaa !11
  %2122 = sext i32 %2121 to i64
  %2123 = getelementptr inbounds ptr, ptr %2120, i64 %2122
  %2124 = load ptr, ptr %2123, align 8, !tbaa !5
  %2125 = load i32, ptr %96, align 4, !tbaa !11
  %2126 = add nsw i32 %2125, 2
  %2127 = sext i32 %2126 to i64
  %2128 = getelementptr inbounds double, ptr %2124, i64 %2127
  %2129 = load double, ptr %2128, align 8, !tbaa !9
  %2130 = load ptr, ptr %57, align 8, !tbaa !5
  %2131 = load i32, ptr %107, align 4, !tbaa !11
  %2132 = sext i32 %2131 to i64
  %2133 = getelementptr inbounds double, ptr %2130, i64 %2132
  %2134 = load double, ptr %2133, align 8, !tbaa !9
  %2135 = fmul double %2129, %2134
  %2136 = call double @llvm.fabs.f64(double %2135)
  %2137 = fcmp olt double %2119, %2136
  br i1 %2137, label %2138, label %2156

2138:                                             ; preds = %2118
  %2139 = load ptr, ptr %67, align 8, !tbaa !5
  %2140 = load i32, ptr %107, align 4, !tbaa !11
  %2141 = sext i32 %2140 to i64
  %2142 = getelementptr inbounds ptr, ptr %2139, i64 %2141
  %2143 = load ptr, ptr %2142, align 8, !tbaa !5
  %2144 = load i32, ptr %96, align 4, !tbaa !11
  %2145 = add nsw i32 %2144, 2
  %2146 = sext i32 %2145 to i64
  %2147 = getelementptr inbounds double, ptr %2143, i64 %2146
  %2148 = load double, ptr %2147, align 8, !tbaa !9
  %2149 = load ptr, ptr %57, align 8, !tbaa !5
  %2150 = load i32, ptr %107, align 4, !tbaa !11
  %2151 = sext i32 %2150 to i64
  %2152 = getelementptr inbounds double, ptr %2149, i64 %2151
  %2153 = load double, ptr %2152, align 8, !tbaa !9
  %2154 = fmul double %2148, %2153
  %2155 = call double @llvm.fabs.f64(double %2154)
  br label %2158

2156:                                             ; preds = %2118
  %2157 = load double, ptr %93, align 8, !tbaa !9
  br label %2158

2158:                                             ; preds = %2156, %2138
  %2159 = phi double [ %2155, %2138 ], [ %2157, %2156 ]
  store double %2159, ptr %93, align 8, !tbaa !9
  br label %2160

2160:                                             ; preds = %2158
  %2161 = load i32, ptr %107, align 4, !tbaa !11
  %2162 = add nsw i32 %2161, 1
  store i32 %2162, ptr %107, align 4, !tbaa !11
  br label %2114, !llvm.loop !51

2163:                                             ; preds = %2114
  %2164 = load double, ptr %93, align 8, !tbaa !9
  %2165 = load i32, ptr %96, align 4, !tbaa !11
  %2166 = sext i32 %2165 to i64
  %2167 = getelementptr inbounds [5 x double], ptr %37, i64 0, i64 %2166
  %2168 = load double, ptr %2167, align 8, !tbaa !9
  %2169 = fmul double %2164, %2168
  store double %2169, ptr %93, align 8, !tbaa !9
  %2170 = load double, ptr %93, align 8, !tbaa !9
  %2171 = load double, ptr %25, align 8, !tbaa !9
  %2172 = fdiv double %2170, %2171
  %2173 = load i32, ptr %96, align 4, !tbaa !11
  %2174 = sitofp i32 %2173 to double
  %2175 = fadd double %2174, 2.000000e+00
  %2176 = fdiv double 1.000000e+00, %2175
  %2177 = call double @pow(double noundef %2172, double noundef %2176) #7
  %2178 = fmul double 1.400000e+00, %2177
  store double %2178, ptr %92, align 8, !tbaa !9
  %2179 = load double, ptr %92, align 8, !tbaa !9
  %2180 = fcmp ogt double %2179, 1.000000e-01
  br i1 %2180, label %2181, label %2185

2181:                                             ; preds = %2163
  %2182 = load double, ptr %76, align 8, !tbaa !9
  %2183 = load double, ptr %92, align 8, !tbaa !9
  %2184 = fdiv double %2182, %2183
  store double %2184, ptr %94, align 8, !tbaa !9
  br label %2188

2185:                                             ; preds = %2163
  %2186 = load double, ptr %76, align 8, !tbaa !9
  %2187 = fmul double 1.000000e+01, %2186
  store double %2187, ptr %94, align 8, !tbaa !9
  br label %2188

2188:                                             ; preds = %2185, %2181
  %2189 = load double, ptr %94, align 8, !tbaa !9
  %2190 = load double, ptr %87, align 8, !tbaa !9
  %2191 = fcmp ogt double %2189, %2190
  br i1 %2191, label %2192, label %2196

2192:                                             ; preds = %2188
  %2193 = load double, ptr %94, align 8, !tbaa !9
  store double %2193, ptr %87, align 8, !tbaa !9
  %2194 = load i32, ptr %96, align 4, !tbaa !11
  %2195 = add nsw i32 %2194, 1
  store i32 %2195, ptr %101, align 4, !tbaa !11
  br label %2196

2196:                                             ; preds = %2192, %2188
  br label %2197

2197:                                             ; preds = %2196, %2109
  %2198 = load double, ptr %87, align 8, !tbaa !9
  %2199 = load double, ptr %76, align 8, !tbaa !9
  %2200 = fcmp ogt double %2198, %2199
  br i1 %2200, label %2201, label %2209

2201:                                             ; preds = %2197
  %2202 = load double, ptr %87, align 8, !tbaa !9
  store double %2202, ptr %76, align 8, !tbaa !9
  %2203 = load i32, ptr %96, align 4, !tbaa !11
  %2204 = load i32, ptr %101, align 4, !tbaa !11
  %2205 = icmp ne i32 %2203, %2204
  br i1 %2205, label %2206, label %2208

2206:                                             ; preds = %2201
  %2207 = load i32, ptr %101, align 4, !tbaa !11
  store i32 %2207, ptr %96, align 4, !tbaa !11
  br label %2208

2208:                                             ; preds = %2206, %2201
  br label %2209

2209:                                             ; preds = %2208, %2197
  br label %2210

2210:                                             ; preds = %2209, %1998
  %2211 = load double, ptr %73, align 8, !tbaa !9
  store double %2211, ptr %70, align 8, !tbaa !9
  %2212 = load ptr, ptr %56, align 8, !tbaa !5
  %2213 = load ptr, ptr %52, align 8, !tbaa !5
  %2214 = load i32, ptr %23, align 4, !tbaa !11
  call void @eqvec(ptr noundef %2212, ptr noundef %2213, i32 noundef %2214)
  store i32 0, ptr %43, align 4, !tbaa !11
  %2215 = load ptr, ptr %32, align 8, !tbaa !5
  %2216 = icmp ne ptr %2215, null
  br i1 %2216, label %2217, label %2250

2217:                                             ; preds = %2210
  %2218 = load ptr, ptr %18, align 8, !tbaa !5
  %2219 = load double, ptr %73, align 8, !tbaa !9
  %2220 = load ptr, ptr %56, align 8, !tbaa !5
  %2221 = getelementptr inbounds double, ptr %2220, i64 1
  %2222 = load ptr, ptr %51, align 8, !tbaa !5
  %2223 = getelementptr inbounds double, ptr %2222, i64 1
  %2224 = load ptr, ptr %24, align 8, !tbaa !5
  %2225 = load ptr, ptr %33, align 8, !tbaa !5
  %2226 = call i32 %2218(double noundef %2219, ptr noundef %2221, ptr noundef %2223, ptr noundef %2224, ptr noundef %2225)
  %2227 = icmp eq i32 %2226, 1
  br i1 %2227, label %2228, label %2233

2228:                                             ; preds = %2217
  call void @llvm.lifetime.start.p0(i64 2048, ptr %134) #7
  %2229 = getelementptr inbounds [2048 x i8], ptr %134, i64 0, i64 0
  %2230 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2229, ptr noundef @.str.3, ptr noundef @.str.18, ptr noundef %2230)
  %2231 = load ptr, ptr %33, align 8, !tbaa !5
  %2232 = getelementptr inbounds [2048 x i8], ptr %134, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2231, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 644, ptr noundef %2232)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %134) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

2233:                                             ; preds = %2217
  %2234 = load ptr, ptr %32, align 8, !tbaa !5
  %2235 = load double, ptr %73, align 8, !tbaa !9
  %2236 = load ptr, ptr %56, align 8, !tbaa !5
  %2237 = getelementptr inbounds double, ptr %2236, i64 1
  %2238 = load ptr, ptr %51, align 8, !tbaa !5
  %2239 = getelementptr inbounds double, ptr %2238, i64 1
  %2240 = load ptr, ptr %24, align 8, !tbaa !5
  %2241 = load ptr, ptr %33, align 8, !tbaa !5
  %2242 = call i32 %2234(double noundef %2235, ptr noundef %2237, ptr noundef %2239, ptr noundef %2240, ptr noundef %2241)
  %2243 = icmp eq i32 %2242, 1
  br i1 %2243, label %2244, label %2249

2244:                                             ; preds = %2233
  call void @llvm.lifetime.start.p0(i64 2048, ptr %135) #7
  %2245 = getelementptr inbounds [2048 x i8], ptr %135, i64 0, i64 0
  %2246 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2245, ptr noundef @.str.3, ptr noundef @.str.19, ptr noundef %2246)
  %2247 = load ptr, ptr %33, align 8, !tbaa !5
  %2248 = getelementptr inbounds [2048 x i8], ptr %135, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2247, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 648, ptr noundef %2248)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %135) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

2249:                                             ; preds = %2233
  br label %2250

2250:                                             ; preds = %2249, %2210
  br label %873, !llvm.loop !52

2251:                                             ; preds = %1983, %873
  %2252 = load ptr, ptr %18, align 8, !tbaa !5
  %2253 = load double, ptr %73, align 8, !tbaa !9
  %2254 = load ptr, ptr %56, align 8, !tbaa !5
  %2255 = getelementptr inbounds double, ptr %2254, i64 1
  %2256 = load ptr, ptr %51, align 8, !tbaa !5
  %2257 = getelementptr inbounds double, ptr %2256, i64 1
  %2258 = load ptr, ptr %24, align 8, !tbaa !5
  %2259 = load ptr, ptr %33, align 8, !tbaa !5
  %2260 = call i32 %2252(double noundef %2253, ptr noundef %2255, ptr noundef %2257, ptr noundef %2258, ptr noundef %2259)
  %2261 = icmp eq i32 %2260, 1
  br i1 %2261, label %2262, label %2267

2262:                                             ; preds = %2251
  call void @llvm.lifetime.start.p0(i64 2048, ptr %136) #7
  %2263 = getelementptr inbounds [2048 x i8], ptr %136, i64 0, i64 0
  %2264 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2263, ptr noundef @.str.3, ptr noundef @.str.18, ptr noundef %2264)
  %2265 = load ptr, ptr %33, align 8, !tbaa !5
  %2266 = getelementptr inbounds [2048 x i8], ptr %136, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2265, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 663, ptr noundef %2266)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %136) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

2267:                                             ; preds = %2251
  %2268 = load ptr, ptr %32, align 8, !tbaa !5
  %2269 = icmp ne ptr %2268, null
  br i1 %2269, label %2270, label %2287

2270:                                             ; preds = %2267
  %2271 = load ptr, ptr %32, align 8, !tbaa !5
  %2272 = load double, ptr %73, align 8, !tbaa !9
  %2273 = load ptr, ptr %56, align 8, !tbaa !5
  %2274 = getelementptr inbounds double, ptr %2273, i64 1
  %2275 = load ptr, ptr %51, align 8, !tbaa !5
  %2276 = getelementptr inbounds double, ptr %2275, i64 1
  %2277 = load ptr, ptr %24, align 8, !tbaa !5
  %2278 = load ptr, ptr %33, align 8, !tbaa !5
  %2279 = call i32 %2271(double noundef %2272, ptr noundef %2274, ptr noundef %2276, ptr noundef %2277, ptr noundef %2278)
  %2280 = icmp eq i32 %2279, 1
  br i1 %2280, label %2281, label %2286

2281:                                             ; preds = %2270
  call void @llvm.lifetime.start.p0(i64 2048, ptr %137) #7
  %2282 = getelementptr inbounds [2048 x i8], ptr %137, i64 0, i64 0
  %2283 = load ptr, ptr %33, align 8, !tbaa !5
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2282, ptr noundef @.str.3, ptr noundef @.str.19, ptr noundef %2283)
  %2284 = load ptr, ptr %33, align 8, !tbaa !5
  %2285 = getelementptr inbounds [2048 x i8], ptr %137, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %2284, ptr noundef @.str.2, ptr noundef @__func__.evolver_ndf15, i32 noundef 669, ptr noundef %2285)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %137) #7
  store i32 1, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

2286:                                             ; preds = %2270
  br label %2287

2287:                                             ; preds = %2286, %2267
  %2288 = load i32, ptr %110, align 4, !tbaa !11
  %2289 = icmp sgt i32 %2288, 0
  br i1 %2289, label %2290, label %2308

2290:                                             ; preds = %2287
  %2291 = load i32, ptr %100, align 4, !tbaa !11
  %2292 = load double, ptr %70, align 8, !tbaa !9
  %2293 = load double, ptr %73, align 8, !tbaa !9
  %2294 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, i32 noundef %2291, double noundef %2292, double noundef %2293)
  %2295 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 0
  %2296 = load i32, ptr %2295, align 16, !tbaa !11
  %2297 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 1
  %2298 = load i32, ptr %2297, align 4, !tbaa !11
  %2299 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 2
  %2300 = load i32, ptr %2299, align 8, !tbaa !11
  %2301 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 3
  %2302 = load i32, ptr %2301, align 4, !tbaa !11
  %2303 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 4
  %2304 = load i32, ptr %2303, align 16, !tbaa !11
  %2305 = getelementptr inbounds [6 x i32], ptr %103, i64 0, i64 5
  %2306 = load i32, ptr %2305, align 4, !tbaa !11
  %2307 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, i32 noundef %2296, i32 noundef %2298, i32 noundef %2300, i32 noundef %2302, i32 noundef %2304, i32 noundef %2306)
  br label %2308

2308:                                             ; preds = %2290, %2287
  %2309 = load ptr, ptr %111, align 8, !tbaa !5
  call void @free(ptr noundef %2309) #7
  %2310 = call i32 @uninitialize_jacobian(ptr noundef %68)
  %2311 = call i32 @uninitialize_numjac_workspace(ptr noundef %69)
  store i32 0, ptr %17, align 4
  store i32 1, ptr %115, align 4
  br label %2312

2312:                                             ; preds = %2308, %2281, %2262, %2244, %2228, %1971, %1933, %1790, %1589, %1517, %1468, %1446, %1430, %1198, %960, %864, %677, %493, %462, %315, %305, %174
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %109) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %103) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 104, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 144, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %34) #7
  %2313 = load i32, ptr %17, align 4
  ret i32 %2313
}

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

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

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

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

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

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

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

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

declare i32 @printf(ptr noundef, ...) #4

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

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

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

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

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

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

declare i32 @sp_lusolve(ptr noundef, ptr noundef, ptr noundef) #4

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = !{!24, !6, i64 0}
!24 = !{!"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}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = !{!24, !12, i64 40}
!37 = !{!24, !6, i64 120}
!38 = !{!24, !6, i64 16}
!39 = !{!24, !6, i64 32}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}
!45 = distinct !{!45, !14}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !14}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14}
!50 = distinct !{!50, !14}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}


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

%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.numjac_workspace = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@__func__.evolver_ndf15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [106 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [88 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @evolver_ndf15(ptr noundef %0, double noundef %1, double noundef %2, ptr noundef %3, ptr nocapture noundef readonly %4, i32 noundef %5, ptr noundef %6, double noundef %7, double noundef %8, ptr nocapture noundef readnone %9, double noundef %10, ptr nocapture noundef readonly %11, i32 noundef %12, ptr nocapture noundef readonly %13, ptr noundef readonly %14, ptr noundef %15) local_unnamed_addr #0 {
  %17 = ptrtoint ptr %4 to i64
  %18 = alloca [5 x double], align 16
  %19 = alloca [5 x double], align 16
  %20 = alloca [5 x double], align 16
  %21 = alloca %struct.jacobian, align 8
  %22 = alloca %struct.numjac_workspace, align 8
  %23 = alloca i32, align 4
  %24 = alloca [2048 x i8], align 16
  %25 = alloca [2048 x i8], align 16
  %26 = alloca [2048 x i8], align 16
  %27 = alloca [2048 x i8], align 16
  %28 = alloca [2048 x i8], align 16
  %29 = alloca [2048 x i8], align 16
  %30 = alloca [2048 x i8], align 16
  %31 = alloca [2048 x i8], align 16
  %32 = alloca [2048 x i8], align 16
  %33 = alloca [2048 x i8], align 16
  %34 = alloca [2048 x i8], align 16
  %35 = alloca [2048 x i8], align 16
  %36 = alloca [2048 x i8], align 16
  %37 = alloca [2048 x i8], align 16
  %38 = alloca [2048 x i8], align 16
  %39 = alloca [2048 x i8], align 16
  %40 = alloca [2048 x i8], align 16
  %41 = alloca [2048 x i8], align 16
  %42 = alloca [2048 x i8], align 16
  %43 = alloca [2048 x i8], align 16
  %44 = alloca [2048 x i8], align 16
  %45 = alloca [2048 x i8], align 16
  %46 = alloca [2048 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %18) #9
  store <2 x double> <double 1.000000e+00, double 1.500000e+00>, ptr %18, align 16
  %47 = getelementptr inbounds i8, ptr %18, i64 16
  store <2 x double> <double 0x3FFD555555555555, double 0x4000AAAAAAAAAAAB>, ptr %47, align 16
  %48 = getelementptr inbounds i8, ptr %18, i64 32
  store double 0x4002444444444444, ptr %48, align 16
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %19) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %20) #9
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %21) #9
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %22) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #9
  %49 = add nsw i32 %5, 1
  %50 = shl i32 %49, 2
  %51 = shl i32 %49, 7
  %52 = mul i32 %5, 56
  %53 = add i32 %52, 8
  %54 = add i32 %53, %51
  %55 = add i32 %54, %50
  %56 = sext i32 %55 to i64
  %57 = tail call noalias ptr @malloc(i64 noundef %56) #10
  %58 = ptrtoint ptr %57 to i64
  %59 = icmp eq ptr %57, null
  br i1 %59, label %60, label %61

60:                                               ; preds = %16
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %24) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %24, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef %55) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 127, ptr noundef nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %24) #9
  br label %1054

61:                                               ; preds = %16
  %62 = sext i32 %49 to i64
  %63 = getelementptr inbounds double, ptr %57, i64 %62
  %64 = getelementptr inbounds double, ptr %63, i64 %62
  %65 = getelementptr inbounds double, ptr %64, i64 %62
  %66 = getelementptr inbounds double, ptr %65, i64 %62
  %67 = getelementptr inbounds double, ptr %66, i64 %62
  %68 = getelementptr inbounds double, ptr %67, i64 %62
  %69 = getelementptr inbounds double, ptr %68, i64 %62
  %70 = getelementptr inbounds double, ptr %69, i64 %62
  %71 = getelementptr inbounds double, ptr %70, i64 %62
  %72 = getelementptr inbounds double, ptr %71, i64 %62
  %73 = getelementptr inbounds double, ptr %72, i64 %62
  %74 = getelementptr inbounds double, ptr %73, i64 %62
  %75 = getelementptr inbounds double, ptr %74, i64 %62
  %76 = getelementptr inbounds double, ptr %75, i64 %62
  %77 = getelementptr inbounds double, ptr %76, i64 %62
  %78 = getelementptr inbounds i32, ptr %77, i64 %62
  %79 = getelementptr inbounds ptr, ptr %78, i64 %62
  %80 = getelementptr inbounds i8, ptr %78, i64 8
  store ptr %79, ptr %80, align 8, !tbaa !5
  %.not1106 = icmp slt i32 %5, 2
  br i1 %.not1106, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %61
  %wide.trip.count = zext nneg i32 %49 to i64
  %81 = add nsw i64 %wide.trip.count, -2
  %82 = add nsw i64 %wide.trip.count, -3
  %xtraiter = and i64 %81, 3
  %83 = icmp ult i64 %82, 3
  br i1 %83, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %81, -4
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 2, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %84 = getelementptr ptr, ptr %78, i64 %indvars.iv
  %85 = getelementptr i8, ptr %84, i64 -8
  %86 = load ptr, ptr %85, align 8, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %86, i64 56
  store ptr %87, ptr %84, align 8, !tbaa !5
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %88 = getelementptr ptr, ptr %78, i64 %indvars.iv.next
  %89 = getelementptr i8, ptr %88, i64 -8
  %90 = load ptr, ptr %89, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i64 56
  store ptr %91, ptr %88, align 8, !tbaa !5
  %92 = getelementptr ptr, ptr %78, i64 %indvars.iv
  %93 = getelementptr i8, ptr %92, i64 16
  %94 = getelementptr i8, ptr %92, i64 8
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  %96 = getelementptr inbounds i8, ptr %95, i64 56
  store ptr %96, ptr %93, align 8, !tbaa !5
  %97 = getelementptr ptr, ptr %78, i64 %indvars.iv
  %98 = getelementptr i8, ptr %97, i64 24
  %99 = getelementptr i8, ptr %97, i64 16
  %100 = load ptr, ptr %99, align 8, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %100, i64 56
  store ptr %101, ptr %98, align 8, !tbaa !5
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !9

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 2, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %102 = getelementptr ptr, ptr %78, i64 %indvars.iv.epil
  %103 = getelementptr i8, ptr %102, i64 -8
  %104 = load ptr, ptr %103, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %104, i64 56
  store ptr %105, ptr %102, align 8, !tbaa !5
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.lr.ph.epil, !llvm.loop !12

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %61
  store ptr null, ptr %78, align 8, !tbaa !5
  %.not9641109 = icmp slt i32 %5, 1
  br i1 %.not9641109, label %._crit_edge1111, label %.preheader1016.preheader

.preheader1016.preheader:                         ; preds = %._crit_edge
  %wide.trip.count1300 = zext nneg i32 %49 to i64
  %106 = add nsw i64 %wide.trip.count1300, -1
  %107 = add nsw i64 %wide.trip.count1300, -2
  %xtraiter1987 = and i64 %106, 7
  %108 = icmp ult i64 %107, 7
  br i1 %108, label %._crit_edge1111.loopexit.unr-lcssa, label %.preheader1016.preheader.new

.preheader1016.preheader.new:                     ; preds = %.preheader1016.preheader
  %unroll_iter1990 = and i64 %106, -8
  %invariant.gep2189 = getelementptr inbounds i8, ptr %78, i64 8
  %invariant.gep2191 = getelementptr inbounds i8, ptr %78, i64 16
  %invariant.gep2193 = getelementptr inbounds i8, ptr %78, i64 24
  %invariant.gep2195 = getelementptr inbounds i8, ptr %78, i64 32
  %invariant.gep2197 = getelementptr inbounds i8, ptr %78, i64 40
  %invariant.gep2199 = getelementptr inbounds i8, ptr %78, i64 48
  %invariant.gep2201 = getelementptr inbounds i8, ptr %78, i64 56
  br label %.preheader1016

.preheader1016:                                   ; preds = %.preheader1016, %.preheader1016.preheader.new
  %indvars.iv1297 = phi i64 [ 1, %.preheader1016.preheader.new ], [ %indvars.iv.next1298.7, %.preheader1016 ]
  %niter1991 = phi i64 [ 0, %.preheader1016.preheader.new ], [ %niter1991.next.7, %.preheader1016 ]
  %109 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1297
  %110 = load ptr, ptr %109, align 8, !tbaa !5
  %scevgep = getelementptr i8, ptr %110, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep, i8 0, i64 56, i1 false), !tbaa !14
  %gep2190 = getelementptr inbounds ptr, ptr %invariant.gep2189, i64 %indvars.iv1297
  %111 = load ptr, ptr %gep2190, align 8, !tbaa !5
  %scevgep.1 = getelementptr i8, ptr %111, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.1, i8 0, i64 56, i1 false), !tbaa !14
  %gep2192 = getelementptr inbounds ptr, ptr %invariant.gep2191, i64 %indvars.iv1297
  %112 = load ptr, ptr %gep2192, align 8, !tbaa !5
  %scevgep.2 = getelementptr i8, ptr %112, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.2, i8 0, i64 56, i1 false), !tbaa !14
  %gep2194 = getelementptr inbounds ptr, ptr %invariant.gep2193, i64 %indvars.iv1297
  %113 = load ptr, ptr %gep2194, align 8, !tbaa !5
  %scevgep.3 = getelementptr i8, ptr %113, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.3, i8 0, i64 56, i1 false), !tbaa !14
  %gep2196 = getelementptr inbounds ptr, ptr %invariant.gep2195, i64 %indvars.iv1297
  %114 = load ptr, ptr %gep2196, align 8, !tbaa !5
  %scevgep.4 = getelementptr i8, ptr %114, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.4, i8 0, i64 56, i1 false), !tbaa !14
  %gep2198 = getelementptr inbounds ptr, ptr %invariant.gep2197, i64 %indvars.iv1297
  %115 = load ptr, ptr %gep2198, align 8, !tbaa !5
  %scevgep.5 = getelementptr i8, ptr %115, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.5, i8 0, i64 56, i1 false), !tbaa !14
  %gep2200 = getelementptr inbounds ptr, ptr %invariant.gep2199, i64 %indvars.iv1297
  %116 = load ptr, ptr %gep2200, align 8, !tbaa !5
  %scevgep.6 = getelementptr i8, ptr %116, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.6, i8 0, i64 56, i1 false), !tbaa !14
  %gep2202 = getelementptr inbounds ptr, ptr %invariant.gep2201, i64 %indvars.iv1297
  %117 = load ptr, ptr %gep2202, align 8, !tbaa !5
  %scevgep.7 = getelementptr i8, ptr %117, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.7, i8 0, i64 56, i1 false), !tbaa !14
  %indvars.iv.next1298.7 = add nuw nsw i64 %indvars.iv1297, 8
  %niter1991.next.7 = add i64 %niter1991, 8
  %niter1991.ncmp.7 = icmp eq i64 %niter1991.next.7, %unroll_iter1990
  br i1 %niter1991.ncmp.7, label %._crit_edge1111.loopexit.unr-lcssa, label %.preheader1016, !llvm.loop !16

._crit_edge1111.loopexit.unr-lcssa:               ; preds = %.preheader1016, %.preheader1016.preheader
  %indvars.iv1297.unr = phi i64 [ 1, %.preheader1016.preheader ], [ %indvars.iv.next1298.7, %.preheader1016 ]
  %lcmp.mod1989.not = icmp eq i64 %xtraiter1987, 0
  br i1 %lcmp.mod1989.not, label %._crit_edge1111, label %.preheader1016.epil

.preheader1016.epil:                              ; preds = %._crit_edge1111.loopexit.unr-lcssa, %.preheader1016.epil
  %indvars.iv1297.epil = phi i64 [ %indvars.iv.next1298.epil, %.preheader1016.epil ], [ %indvars.iv1297.unr, %._crit_edge1111.loopexit.unr-lcssa ]
  %epil.iter1988 = phi i64 [ %epil.iter1988.next, %.preheader1016.epil ], [ 0, %._crit_edge1111.loopexit.unr-lcssa ]
  %118 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1297.epil
  %119 = load ptr, ptr %118, align 8, !tbaa !5
  %scevgep.epil = getelementptr i8, ptr %119, i64 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %scevgep.epil, i8 0, i64 56, i1 false), !tbaa !14
  %indvars.iv.next1298.epil = add nuw nsw i64 %indvars.iv1297.epil, 1
  %epil.iter1988.next = add i64 %epil.iter1988, 1
  %epil.iter1988.cmp.not = icmp eq i64 %epil.iter1988.next, %xtraiter1987
  br i1 %epil.iter1988.cmp.not, label %._crit_edge1111, label %.preheader1016.epil, !llvm.loop !17

._crit_edge1111:                                  ; preds = %._crit_edge1111.loopexit.unr-lcssa, %.preheader1016.epil, %._crit_edge
  %120 = getelementptr inbounds i8, ptr %3, i64 -8
  %121 = call i32 @initialize_jacobian(ptr noundef nonnull %21, i32 noundef %5, ptr noundef %15)
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %123, label %124

123:                                              ; preds = %._crit_edge1111
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %25) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %25, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 186, ptr noundef nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %25) #9
  br label %1054

124:                                              ; preds = %._crit_edge1111
  %125 = call i32 @initialize_numjac_workspace(ptr noundef nonnull %22, i32 noundef %5, ptr noundef %15)
  %126 = icmp eq i32 %125, 1
  br i1 %126, label %131, label %.preheader1015.preheader

.preheader1015.preheader:                         ; preds = %124
  store <2 x double> <double 0x3FEB011485F0E0AC, double 6.000000e-01>, ptr %19, align 16, !tbaa !14
  store <2 x double> <double 3.150000e-01, double 0x3FC5555555555555>, ptr %20, align 16, !tbaa !14
  %127 = getelementptr inbounds i8, ptr %19, i64 16
  %128 = getelementptr inbounds i8, ptr %20, i64 16
  store <2 x double> <double 0x3FE02094D5DA1715, double 0x3FDD7EF492013A9D>, ptr %127, align 16, !tbaa !14
  store <2 x double> <double 0x3FB95FB5B9D265DB, double 0x3FBD111111111111>, ptr %128, align 16, !tbaa !14
  %129 = getelementptr inbounds i8, ptr %19, i64 32
  store double 0x3FDC077975B8FE22, ptr %129, align 16, !tbaa !14
  %130 = getelementptr inbounds i8, ptr %20, i64 32
  store double 0x3FC5555555555555, ptr %130, align 16, !tbaa !14
  br i1 %.not9641109, label %.preheader1013.preheader, label %.lr.ph1115

131:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %26) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %26, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.5, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 189, ptr noundef nonnull %26) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %26) #9
  br label %1054

.lr.ph1115:                                       ; preds = %.preheader1015.preheader
  %132 = icmp eq ptr %14, null
  %wide.trip.count1317 = zext nneg i32 %49 to i64
  br i1 %132, label %.lr.ph1115.split.us.preheader, label %.lr.ph1115.split.preheader

.lr.ph1115.split.us.preheader:                    ; preds = %.lr.ph1115
  %133 = add nsw i64 %wide.trip.count1317, -1
  %min.iters.check1764 = icmp ult i32 %49, 11
  br i1 %min.iters.check1764, label %.lr.ph1115.split.us.preheader1984, label %vector.memcheck1761

.lr.ph1115.split.us.preheader1984:                ; preds = %middle.block1762, %vector.memcheck1761, %.lr.ph1115.split.us.preheader
  %indvars.iv1314.ph = phi i64 [ 1, %vector.memcheck1761 ], [ 1, %.lr.ph1115.split.us.preheader ], [ %ind.end1768, %middle.block1762 ]
  %134 = and i64 %wide.trip.count1317, 1
  %lcmp.mod1993.not.not = icmp eq i64 %134, 0
  br i1 %lcmp.mod1993.not.not, label %.lr.ph1115.split.us.prol, label %.lr.ph1115.split.us.prol.loopexit

.lr.ph1115.split.us.prol:                         ; preds = %.lr.ph1115.split.us.preheader1984
  %135 = add nsw i64 %indvars.iv1314.ph, -1
  %136 = getelementptr inbounds double, ptr %3, i64 %135
  %137 = load double, ptr %136, align 8, !tbaa !14
  %138 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1314.ph
  store double %137, ptr %138, align 8, !tbaa !14
  %139 = getelementptr inbounds i32, ptr %4, i64 %135
  %140 = load i32, ptr %139, align 4, !tbaa !18
  %141 = getelementptr inbounds i32, ptr %77, i64 %indvars.iv1314.ph
  store i32 %140, ptr %141, align 4, !tbaa !18
  %indvars.iv.next1315.prol = add nuw nsw i64 %indvars.iv1314.ph, 1
  br label %.lr.ph1115.split.us.prol.loopexit

.lr.ph1115.split.us.prol.loopexit:                ; preds = %.lr.ph1115.split.us.prol, %.lr.ph1115.split.us.preheader1984
  %indvars.iv1314.unr = phi i64 [ %indvars.iv1314.ph, %.lr.ph1115.split.us.preheader1984 ], [ %indvars.iv.next1315.prol, %.lr.ph1115.split.us.prol ]
  %142 = add nsw i64 %wide.trip.count1317, -1
  %143 = icmp eq i64 %indvars.iv1314.ph, %142
  br i1 %143, label %.preheader1013.preheader, label %.lr.ph1115.split.us

vector.memcheck1761:                              ; preds = %.lr.ph1115.split.us.preheader
  %144 = mul nuw nsw i64 %62, 120
  %145 = add i64 %144, %58
  %146 = add i64 %145, 4
  %147 = sub i64 %146, %17
  %diff.check = icmp ult i64 %147, 16
  br i1 %diff.check, label %.lr.ph1115.split.us.preheader1984, label %vector.ph1765

vector.ph1765:                                    ; preds = %vector.memcheck1761
  %n.vec1767 = and i64 %133, -4
  %ind.end1768 = or disjoint i64 %n.vec1767, 1
  br label %vector.body1770

vector.body1770:                                  ; preds = %vector.body1770, %vector.ph1765
  %index1771 = phi i64 [ 0, %vector.ph1765 ], [ %index.next1777, %vector.body1770 ]
  %offset.idx1772 = or disjoint i64 %index1771, 1
  %148 = getelementptr inbounds double, ptr %3, i64 %index1771
  %149 = getelementptr inbounds i8, ptr %148, i64 16
  %wide.load1773 = load <2 x double>, ptr %148, align 8, !tbaa !14
  %wide.load1774 = load <2 x double>, ptr %149, align 8, !tbaa !14
  %150 = getelementptr inbounds double, ptr %66, i64 %offset.idx1772
  %151 = getelementptr inbounds i8, ptr %150, i64 16
  store <2 x double> %wide.load1773, ptr %150, align 8, !tbaa !14
  store <2 x double> %wide.load1774, ptr %151, align 8, !tbaa !14
  %152 = getelementptr inbounds i32, ptr %4, i64 %index1771
  %153 = getelementptr inbounds i8, ptr %152, i64 8
  %wide.load1775 = load <2 x i32>, ptr %152, align 4, !tbaa !18
  %wide.load1776 = load <2 x i32>, ptr %153, align 4, !tbaa !18
  %154 = getelementptr inbounds i32, ptr %77, i64 %offset.idx1772
  %155 = getelementptr inbounds i8, ptr %154, i64 8
  store <2 x i32> %wide.load1775, ptr %154, align 4, !tbaa !18
  store <2 x i32> %wide.load1776, ptr %155, align 4, !tbaa !18
  %index.next1777 = add nuw i64 %index1771, 4
  %156 = icmp eq i64 %index.next1777, %n.vec1767
  br i1 %156, label %middle.block1762, label %vector.body1770, !llvm.loop !20

middle.block1762:                                 ; preds = %vector.body1770
  %cmp.n1778 = icmp eq i64 %133, %n.vec1767
  br i1 %cmp.n1778, label %.preheader1013.preheader, label %.lr.ph1115.split.us.preheader1984

.lr.ph1115.split.preheader:                       ; preds = %.lr.ph1115
  %invariant.gep = getelementptr i8, ptr %3, i64 -8
  %157 = add nsw i64 %wide.trip.count1317, -1
  %min.iters.check1748 = icmp ult i32 %49, 5
  br i1 %min.iters.check1748, label %.lr.ph1115.split.preheader1985, label %vector.ph1749

.lr.ph1115.split.preheader1985:                   ; preds = %middle.block1746, %.lr.ph1115.split.preheader
  %indvars.iv1307.ph = phi i64 [ 1, %.lr.ph1115.split.preheader ], [ %ind.end1752, %middle.block1746 ]
  br label %.lr.ph1115.split

vector.ph1749:                                    ; preds = %.lr.ph1115.split.preheader
  %n.vec1751 = and i64 %157, -4
  %ind.end1752 = or disjoint i64 %n.vec1751, 1
  br label %vector.body1754

vector.body1754:                                  ; preds = %vector.body1754, %vector.ph1749
  %index1755 = phi i64 [ 0, %vector.ph1749 ], [ %index.next1759, %vector.body1754 ]
  %offset.idx1756 = or disjoint i64 %index1755, 1
  %158 = getelementptr double, ptr %3, i64 %index1755
  %159 = getelementptr i8, ptr %158, i64 16
  %wide.load1757 = load <2 x double>, ptr %158, align 8, !tbaa !14
  %wide.load1758 = load <2 x double>, ptr %159, align 8, !tbaa !14
  %160 = getelementptr inbounds double, ptr %66, i64 %offset.idx1756
  %161 = getelementptr inbounds i8, ptr %160, i64 16
  store <2 x double> %wide.load1757, ptr %160, align 8, !tbaa !14
  store <2 x double> %wide.load1758, ptr %161, align 8, !tbaa !14
  %162 = getelementptr inbounds i32, ptr %77, i64 %offset.idx1756
  %163 = getelementptr inbounds i8, ptr %162, i64 8
  store <2 x i32> <i32 1, i32 1>, ptr %162, align 4, !tbaa !18
  store <2 x i32> <i32 1, i32 1>, ptr %163, align 4, !tbaa !18
  %index.next1759 = add nuw i64 %index1755, 4
  %164 = icmp eq i64 %index.next1759, %n.vec1751
  br i1 %164, label %middle.block1746, label %vector.body1754, !llvm.loop !22

middle.block1746:                                 ; preds = %vector.body1754
  %cmp.n1760 = icmp eq i64 %157, %n.vec1751
  br i1 %cmp.n1760, label %.preheader1013.preheader, label %.lr.ph1115.split.preheader1985

.lr.ph1115.split.us:                              ; preds = %.lr.ph1115.split.us.prol.loopexit, %.lr.ph1115.split.us
  %indvars.iv1314 = phi i64 [ %indvars.iv.next1315.1, %.lr.ph1115.split.us ], [ %indvars.iv1314.unr, %.lr.ph1115.split.us.prol.loopexit ]
  %165 = add nsw i64 %indvars.iv1314, -1
  %166 = getelementptr inbounds double, ptr %3, i64 %165
  %167 = load double, ptr %166, align 8, !tbaa !14
  %168 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1314
  store double %167, ptr %168, align 8, !tbaa !14
  %169 = getelementptr inbounds i32, ptr %4, i64 %165
  %170 = load i32, ptr %169, align 4, !tbaa !18
  %171 = getelementptr inbounds i32, ptr %77, i64 %indvars.iv1314
  store i32 %170, ptr %171, align 4, !tbaa !18
  %indvars.iv.next1315 = add nuw nsw i64 %indvars.iv1314, 1
  %172 = getelementptr inbounds double, ptr %3, i64 %indvars.iv1314
  %173 = load double, ptr %172, align 8, !tbaa !14
  %174 = getelementptr inbounds double, ptr %66, i64 %indvars.iv.next1315
  store double %173, ptr %174, align 8, !tbaa !14
  %175 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv1314
  %176 = load i32, ptr %175, align 4, !tbaa !18
  %177 = getelementptr inbounds i32, ptr %77, i64 %indvars.iv.next1315
  store i32 %176, ptr %177, align 4, !tbaa !18
  %indvars.iv.next1315.1 = add nuw nsw i64 %indvars.iv1314, 2
  %exitcond1318.not.1 = icmp eq i64 %indvars.iv.next1315.1, %wide.trip.count1317
  br i1 %exitcond1318.not.1, label %.preheader1013.preheader, label %.lr.ph1115.split.us, !llvm.loop !23

.lr.ph1115.split:                                 ; preds = %.lr.ph1115.split.preheader1985, %.lr.ph1115.split
  %indvars.iv1307 = phi i64 [ %indvars.iv.next1308, %.lr.ph1115.split ], [ %indvars.iv1307.ph, %.lr.ph1115.split.preheader1985 ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv1307
  %178 = load double, ptr %gep, align 8, !tbaa !14
  %179 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1307
  store double %178, ptr %179, align 8, !tbaa !14
  %180 = getelementptr inbounds i32, ptr %77, i64 %indvars.iv1307
  store i32 1, ptr %180, align 4, !tbaa !18
  %indvars.iv.next1308 = add nuw nsw i64 %indvars.iv1307, 1
  %exitcond1311.not = icmp eq i64 %indvars.iv.next1308, %wide.trip.count1317
  br i1 %exitcond1311.not, label %.preheader1013.preheader, label %.lr.ph1115.split, !llvm.loop !24

.preheader1013.preheader:                         ; preds = %.lr.ph1115.split, %.lr.ph1115.split.us.prol.loopexit, %.lr.ph1115.split.us, %middle.block1746, %middle.block1762, %.preheader1015.preheader
  br label %.preheader1013

.preheader1013:                                   ; preds = %.preheader1013.preheader, %.preheader1013
  %indvars.iv1319 = phi i64 [ %indvars.iv.next1320, %.preheader1013 ], [ 0, %.preheader1013.preheader ]
  %181 = getelementptr inbounds double, ptr %11, i64 %indvars.iv1319
  %182 = load double, ptr %181, align 8, !tbaa !14
  %183 = fcmp olt double %182, %1
  %indvars.iv.next1320 = add nuw nsw i64 %indvars.iv1319, 1
  br i1 %183, label %.preheader1013, label %184, !llvm.loop !25

184:                                              ; preds = %.preheader1013
  %185 = fsub double %2, %1
  %186 = trunc nuw nsw i64 %indvars.iv1319 to i32
  %187 = call double @llvm.fabs.f64(double %185)
  %188 = getelementptr inbounds i8, ptr %66, i64 8
  %189 = getelementptr inbounds i8, ptr %57, i64 8
  %190 = call i32 %0(double noundef %1, ptr noundef nonnull %188, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %191 = icmp eq i32 %190, 1
  br i1 %191, label %192, label %193

192:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %27) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %27, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.7, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 226, ptr noundef nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %27) #9
  br label %1054

193:                                              ; preds = %184
  %194 = fcmp olt double %185, 0.000000e+00
  %. = select i1 %194, double -1.000000e+00, double 1.000000e+00
  %195 = fdiv double %185, 1.000000e+01
  store i32 0, ptr %23, align 4, !tbaa !18
  %196 = call i32 @numjac(ptr noundef %0, double noundef %1, ptr noundef nonnull %66, ptr noundef nonnull %57, ptr noundef nonnull %21, ptr noundef nonnull %22, double noundef 1.000000e-15, i32 noundef %5, ptr noundef nonnull %23, ptr noundef %6, ptr noundef %15)
  %197 = icmp eq i32 %196, 1
  br i1 %197, label %198, label %199

198:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %28) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %28, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.8, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 241, ptr noundef nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %28) #9
  br label %1054

199:                                              ; preds = %193
  %200 = call double @llvm.fabs.f64(double %1)
  %201 = fmul double %200, 1.600000e-15
  br i1 %.not9641109, label %._crit_edge1122, label %.lr.ph1121.preheader

.lr.ph1121.preheader:                             ; preds = %199
  %wide.trip.count1328 = zext nneg i32 %49 to i64
  br label %.lr.ph1121

.lr.ph1121:                                       ; preds = %.lr.ph1121.preheader, %224
  %indvars.iv1325 = phi i64 [ 1, %.lr.ph1121.preheader ], [ %indvars.iv.next1326, %224 ]
  %.09191118 = phi double [ 0.000000e+00, %.lr.ph1121.preheader ], [ %225, %224 ]
  %202 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1325
  %203 = load double, ptr %202, align 8, !tbaa !14
  %204 = call double @llvm.fabs.f64(double %203)
  %205 = fcmp olt double %204, 1.000000e-15
  %.992 = select i1 %205, double 1.000000e-15, double %204
  %206 = getelementptr inbounds double, ptr %63, i64 %indvars.iv1325
  store double %.992, ptr %206, align 8, !tbaa !14
  %207 = call double @sqrt(double noundef %7) #9
  %208 = fdiv double 1.250000e+00, %207
  %209 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1325
  %210 = load double, ptr %209, align 8, !tbaa !14
  %211 = load double, ptr %206, align 8, !tbaa !14
  %212 = fdiv double %210, %211
  %213 = call double @llvm.fabs.f64(double %212)
  %214 = fmul double %208, %213
  %215 = fcmp olt double %.09191118, %214
  br i1 %215, label %216, label %224

216:                                              ; preds = %.lr.ph1121
  %217 = call double @sqrt(double noundef %7) #9
  %218 = fdiv double 1.250000e+00, %217
  %219 = load double, ptr %209, align 8, !tbaa !14
  %220 = load double, ptr %206, align 8, !tbaa !14
  %221 = fdiv double %219, %220
  %222 = call double @llvm.fabs.f64(double %221)
  %223 = fmul double %218, %222
  br label %224

224:                                              ; preds = %.lr.ph1121, %216
  %225 = phi double [ %223, %216 ], [ %.09191118, %.lr.ph1121 ]
  %indvars.iv.next1326 = add nuw nsw i64 %indvars.iv1325, 1
  %exitcond1329.not = icmp eq i64 %indvars.iv.next1326, %wide.trip.count1328
  br i1 %exitcond1329.not, label %._crit_edge1122, label %.lr.ph1121, !llvm.loop !26

._crit_edge1122:                                  ; preds = %224, %199
  %.0919.lcssa = phi double [ 0.000000e+00, %199 ], [ %225, %224 ]
  %226 = fcmp olt double %195, %187
  %227 = select i1 %226, double %195, double %187
  %228 = fmul double %227, %.0919.lcssa
  %229 = fcmp ogt double %228, 1.000000e+00
  %230 = fdiv double 1.000000e+00, %.0919.lcssa
  %.0906 = select i1 %229, double %230, double %227
  %231 = fcmp olt double %.0906, %201
  %232 = select i1 %231, double %201, double %.0906
  %233 = fmul double %., %232
  %234 = fadd double %233, %1
  %235 = call double @llvm.fabs.f64(double %234)
  %236 = fcmp olt double %200, %235
  %237 = select i1 %236, double %235, double %200
  %238 = fmul double %237, 1.000000e-08
  %239 = fcmp olt double %238, %232
  %240 = select i1 %239, double %238, double %232
  %241 = call double @llvm.fmuladd.f64(double %., double %240, double %1)
  %242 = fsub double %241, %1
  %243 = fadd double %242, %1
  %244 = getelementptr inbounds i8, ptr %75, i64 8
  %245 = call i32 %0(double noundef %243, ptr noundef nonnull %188, ptr noundef nonnull %244, ptr noundef %6, ptr noundef %15) #9
  %246 = icmp eq i32 %245, 1
  br i1 %246, label %247, label %248

247:                                              ; preds = %._crit_edge1122
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %29) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %29, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.9, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 264, ptr noundef nonnull %29) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %29) #9
  br label %1054

248:                                              ; preds = %._crit_edge1122
  br i1 %.not9641109, label %._crit_edge1136, label %.lr.ph1131

.lr.ph1131:                                       ; preds = %248
  %249 = load ptr, ptr %21, align 8
  %wide.trip.count1339 = zext nneg i32 %49 to i64
  %250 = add nsw i64 %wide.trip.count1339, -1
  %xtraiter1994 = and i64 %250, 1
  %251 = icmp eq i32 %49, 2
  %unroll_iter1997 = and i64 %250, -2
  %lcmp.mod1996.not = icmp eq i64 %xtraiter1994, 0
  br label %.lr.ph1126

.preheader1012:                                   ; preds = %._crit_edge1127
  br i1 %.not9641109, label %._crit_edge1136, label %.lr.ph1135.preheader

.lr.ph1135.preheader:                             ; preds = %.preheader1012
  %wide.trip.count1344 = zext nneg i32 %49 to i64
  br label %.lr.ph1135

.lr.ph1126:                                       ; preds = %.lr.ph1131, %._crit_edge1127
  %indvars.iv1336 = phi i64 [ 1, %.lr.ph1131 ], [ %indvars.iv.next1337, %._crit_edge1127 ]
  %252 = getelementptr inbounds double, ptr %64, i64 %indvars.iv1336
  store double 0.000000e+00, ptr %252, align 8, !tbaa !14
  %253 = getelementptr inbounds ptr, ptr %249, i64 %indvars.iv1336
  %254 = load ptr, ptr %253, align 8, !tbaa !5
  br i1 %251, label %._crit_edge1127.unr-lcssa, label %.lr.ph1126.new

.lr.ph1126.new:                                   ; preds = %.lr.ph1126, %.lr.ph1126.new
  %indvars.iv1330 = phi i64 [ %indvars.iv.next1331.1, %.lr.ph1126.new ], [ 1, %.lr.ph1126 ]
  %255 = phi double [ %265, %.lr.ph1126.new ], [ 0.000000e+00, %.lr.ph1126 ]
  %niter1998 = phi i64 [ %niter1998.next.1, %.lr.ph1126.new ], [ 0, %.lr.ph1126 ]
  %256 = getelementptr inbounds double, ptr %254, i64 %indvars.iv1330
  %257 = load double, ptr %256, align 8, !tbaa !14
  %258 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1330
  %259 = load double, ptr %258, align 8, !tbaa !14
  %260 = call double @llvm.fmuladd.f64(double %257, double %259, double %255)
  store double %260, ptr %252, align 8, !tbaa !14
  %indvars.iv.next1331 = add nuw nsw i64 %indvars.iv1330, 1
  %261 = getelementptr inbounds double, ptr %254, i64 %indvars.iv.next1331
  %262 = load double, ptr %261, align 8, !tbaa !14
  %263 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next1331
  %264 = load double, ptr %263, align 8, !tbaa !14
  %265 = call double @llvm.fmuladd.f64(double %262, double %264, double %260)
  store double %265, ptr %252, align 8, !tbaa !14
  %indvars.iv.next1331.1 = add nuw nsw i64 %indvars.iv1330, 2
  %niter1998.next.1 = add i64 %niter1998, 2
  %niter1998.ncmp.1 = icmp eq i64 %niter1998.next.1, %unroll_iter1997
  br i1 %niter1998.ncmp.1, label %._crit_edge1127.unr-lcssa, label %.lr.ph1126.new, !llvm.loop !27

._crit_edge1127.unr-lcssa:                        ; preds = %.lr.ph1126.new, %.lr.ph1126
  %indvars.iv1330.unr = phi i64 [ 1, %.lr.ph1126 ], [ %indvars.iv.next1331.1, %.lr.ph1126.new ]
  %.unr = phi double [ 0.000000e+00, %.lr.ph1126 ], [ %265, %.lr.ph1126.new ]
  br i1 %lcmp.mod1996.not, label %._crit_edge1127, label %._crit_edge1127.epilog-lcssa

._crit_edge1127.epilog-lcssa:                     ; preds = %._crit_edge1127.unr-lcssa
  %266 = getelementptr inbounds double, ptr %254, i64 %indvars.iv1330.unr
  %267 = load double, ptr %266, align 8, !tbaa !14
  %268 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1330.unr
  %269 = load double, ptr %268, align 8, !tbaa !14
  %270 = call double @llvm.fmuladd.f64(double %267, double %269, double %.unr)
  store double %270, ptr %252, align 8, !tbaa !14
  br label %._crit_edge1127

._crit_edge1127:                                  ; preds = %._crit_edge1127.unr-lcssa, %._crit_edge1127.epilog-lcssa
  %indvars.iv.next1337 = add nuw nsw i64 %indvars.iv1336, 1
  %exitcond1340.not = icmp eq i64 %indvars.iv.next1337, %wide.trip.count1339
  br i1 %exitcond1340.not, label %.preheader1012, label %.lr.ph1126, !llvm.loop !28

.lr.ph1135:                                       ; preds = %.lr.ph1135.preheader, %298
  %indvars.iv1341 = phi i64 [ 1, %.lr.ph1135.preheader ], [ %indvars.iv.next1342, %298 ]
  %.19201133 = phi double [ 0.000000e+00, %.lr.ph1135.preheader ], [ %299, %298 ]
  %271 = getelementptr inbounds double, ptr %75, i64 %indvars.iv1341
  %272 = load double, ptr %271, align 8, !tbaa !14
  %273 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1341
  %274 = load double, ptr %273, align 8, !tbaa !14
  %275 = fsub double %272, %274
  %276 = fdiv double %275, %242
  %277 = getelementptr inbounds double, ptr %64, i64 %indvars.iv1341
  %278 = load double, ptr %277, align 8, !tbaa !14
  %279 = fadd double %278, %276
  store double %279, ptr %277, align 8, !tbaa !14
  %280 = getelementptr inbounds double, ptr %63, i64 %indvars.iv1341
  %281 = load double, ptr %280, align 8, !tbaa !14
  %282 = fdiv double %279, %281
  %283 = call double @llvm.fabs.f64(double %282)
  %284 = fmul double %283, 5.000000e-01
  %285 = fdiv double %284, %7
  %286 = call double @sqrt(double noundef %285) #9
  %287 = fmul double %286, 1.250000e+00
  %288 = fcmp olt double %.19201133, %287
  br i1 %288, label %289, label %298

289:                                              ; preds = %.lr.ph1135
  %290 = load double, ptr %277, align 8, !tbaa !14
  %291 = load double, ptr %280, align 8, !tbaa !14
  %292 = fdiv double %290, %291
  %293 = call double @llvm.fabs.f64(double %292)
  %294 = fmul double %293, 5.000000e-01
  %295 = fdiv double %294, %7
  %296 = call double @sqrt(double noundef %295) #9
  %297 = fmul double %296, 1.250000e+00
  br label %298

298:                                              ; preds = %.lr.ph1135, %289
  %299 = phi double [ %297, %289 ], [ %.19201133, %.lr.ph1135 ]
  %indvars.iv.next1342 = add nuw nsw i64 %indvars.iv1341, 1
  %exitcond1345.not = icmp eq i64 %indvars.iv.next1342, %wide.trip.count1344
  br i1 %exitcond1345.not, label %._crit_edge1136, label %.lr.ph1135, !llvm.loop !29

._crit_edge1136:                                  ; preds = %298, %248, %.preheader1012
  %.1920.lcssa = phi double [ 0.000000e+00, %.preheader1012 ], [ 0.000000e+00, %248 ], [ %299, %298 ]
  %300 = fmul double %227, %.1920.lcssa
  %301 = fcmp ogt double %300, 1.000000e+00
  %302 = fdiv double 1.000000e+00, %.1920.lcssa
  %.1907 = select i1 %301, double %302, double %227
  %303 = fcmp olt double %.1907, %201
  %304 = select i1 %303, double %201, double %.1907
  %305 = fmul double %., %304
  br i1 %.not9641109, label %._crit_edge1142, label %.lr.ph1141.preheader

.lr.ph1141.preheader:                             ; preds = %._crit_edge1136
  %wide.trip.count1349 = zext nneg i32 %49 to i64
  %306 = add nsw i64 %wide.trip.count1349, -1
  %307 = add nsw i64 %wide.trip.count1349, -2
  %xtraiter1999 = and i64 %306, 3
  %308 = icmp ult i64 %307, 3
  br i1 %308, label %._crit_edge1142.loopexit.unr-lcssa, label %.lr.ph1141.preheader.new

.lr.ph1141.preheader.new:                         ; preds = %.lr.ph1141.preheader
  %unroll_iter2002 = and i64 %306, -4
  br label %.lr.ph1141

.lr.ph1141:                                       ; preds = %.lr.ph1141, %.lr.ph1141.preheader.new
  %indvars.iv1346 = phi i64 [ 1, %.lr.ph1141.preheader.new ], [ %indvars.iv.next1347.3, %.lr.ph1141 ]
  %niter2003 = phi i64 [ 0, %.lr.ph1141.preheader.new ], [ %niter2003.next.3, %.lr.ph1141 ]
  %309 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1346
  %310 = load double, ptr %309, align 8, !tbaa !14
  %311 = fmul double %305, %310
  %312 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1346
  %313 = load ptr, ptr %312, align 8, !tbaa !5
  %314 = getelementptr inbounds i8, ptr %313, i64 8
  store double %311, ptr %314, align 8, !tbaa !14
  %indvars.iv.next1347 = add nuw nsw i64 %indvars.iv1346, 1
  %315 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next1347
  %316 = load double, ptr %315, align 8, !tbaa !14
  %317 = fmul double %305, %316
  %318 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1347
  %319 = load ptr, ptr %318, align 8, !tbaa !5
  %320 = getelementptr inbounds i8, ptr %319, i64 8
  store double %317, ptr %320, align 8, !tbaa !14
  %indvars.iv.next1347.1 = add nuw nsw i64 %indvars.iv1346, 2
  %321 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next1347.1
  %322 = load double, ptr %321, align 8, !tbaa !14
  %323 = fmul double %305, %322
  %324 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1347.1
  %325 = load ptr, ptr %324, align 8, !tbaa !5
  %326 = getelementptr inbounds i8, ptr %325, i64 8
  store double %323, ptr %326, align 8, !tbaa !14
  %indvars.iv.next1347.2 = add nuw nsw i64 %indvars.iv1346, 3
  %327 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next1347.2
  %328 = load double, ptr %327, align 8, !tbaa !14
  %329 = fmul double %305, %328
  %330 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1347.2
  %331 = load ptr, ptr %330, align 8, !tbaa !5
  %332 = getelementptr inbounds i8, ptr %331, i64 8
  store double %329, ptr %332, align 8, !tbaa !14
  %indvars.iv.next1347.3 = add nuw nsw i64 %indvars.iv1346, 4
  %niter2003.next.3 = add i64 %niter2003, 4
  %niter2003.ncmp.3 = icmp eq i64 %niter2003.next.3, %unroll_iter2002
  br i1 %niter2003.ncmp.3, label %._crit_edge1142.loopexit.unr-lcssa, label %.lr.ph1141, !llvm.loop !30

._crit_edge1142.loopexit.unr-lcssa:               ; preds = %.lr.ph1141, %.lr.ph1141.preheader
  %indvars.iv1346.unr = phi i64 [ 1, %.lr.ph1141.preheader ], [ %indvars.iv.next1347.3, %.lr.ph1141 ]
  %lcmp.mod2001.not = icmp eq i64 %xtraiter1999, 0
  br i1 %lcmp.mod2001.not, label %._crit_edge1142, label %.lr.ph1141.epil

.lr.ph1141.epil:                                  ; preds = %._crit_edge1142.loopexit.unr-lcssa, %.lr.ph1141.epil
  %indvars.iv1346.epil = phi i64 [ %indvars.iv.next1347.epil, %.lr.ph1141.epil ], [ %indvars.iv1346.unr, %._crit_edge1142.loopexit.unr-lcssa ]
  %epil.iter2000 = phi i64 [ %epil.iter2000.next, %.lr.ph1141.epil ], [ 0, %._crit_edge1142.loopexit.unr-lcssa ]
  %333 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1346.epil
  %334 = load double, ptr %333, align 8, !tbaa !14
  %335 = fmul double %305, %334
  %336 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1346.epil
  %337 = load ptr, ptr %336, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %337, i64 8
  store double %335, ptr %338, align 8, !tbaa !14
  %indvars.iv.next1347.epil = add nuw nsw i64 %indvars.iv1346.epil, 1
  %epil.iter2000.next = add i64 %epil.iter2000, 1
  %epil.iter2000.cmp.not = icmp eq i64 %epil.iter2000.next, %xtraiter1999
  br i1 %epil.iter2000.cmp.not, label %._crit_edge1142, label %.lr.ph1141.epil, !llvm.loop !31

._crit_edge1142:                                  ; preds = %._crit_edge1142.loopexit.unr-lcssa, %.lr.ph1141.epil, %._crit_edge1136
  %339 = load double, ptr %19, align 16, !tbaa !14
  %340 = fmul double %305, %339
  %341 = call i32 @new_linearisation(ptr noundef nonnull %21, double noundef %340, i32 noundef %5, ptr noundef %15)
  %342 = icmp eq i32 %341, 1
  br i1 %342, label %343, label %344

343:                                              ; preds = %._crit_edge1142
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %30) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %30, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.10, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 296, ptr noundef nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %30) #9
  br label %1054

344:                                              ; preds = %._crit_edge1142
  %345 = getelementptr inbounds i8, ptr %21, i64 40
  %346 = getelementptr inbounds i8, ptr %21, i64 120
  %347 = getelementptr inbounds i8, ptr %68, i64 8
  %348 = getelementptr inbounds i8, ptr %71, i64 8
  %349 = getelementptr inbounds i8, ptr %21, i64 16
  %350 = getelementptr inbounds i8, ptr %21, i64 32
  %351 = fmul double %7, 5.000000e-01
  %352 = fmul double %7, 5.000000e-02
  %353 = getelementptr inbounds i8, ptr %72, i64 8
  %354 = getelementptr inbounds i8, ptr %73, i64 8
  %.not977 = icmp eq ptr %14, null
  %355 = mul nsw i64 %62, 56
  %356 = getelementptr i8, ptr %57, i64 %355
  %scevgep1362 = getelementptr i8, ptr %356, i64 8
  %357 = zext i32 %5 to i64
  %358 = shl nuw nsw i64 %357, 3
  %359 = sext i32 %12 to i64
  %wide.trip.count1360 = zext i32 %49 to i64
  %wide.trip.count1375 = zext nneg i32 %49 to i64
  %wide.trip.count1382 = zext nneg i32 %49 to i64
  %wide.trip.count1388 = zext nneg i32 %49 to i64
  %wide.trip.count1393 = zext nneg i32 %49 to i64
  %wide.trip.count1398 = zext nneg i32 %49 to i64
  %wide.trip.count1408 = zext nneg i32 %49 to i64
  %360 = shl nsw i64 %62, 6
  %361 = or disjoint i64 %360, 8
  %scevgep1780 = getelementptr i8, ptr %57, i64 %361
  %362 = shl nuw nsw i64 %wide.trip.count1360, 3
  %363 = getelementptr i8, ptr %57, i64 %360
  %scevgep1781 = getelementptr i8, ptr %363, i64 %362
  %364 = mul nsw i64 %62, 72
  %365 = getelementptr i8, ptr %57, i64 %364
  %scevgep1782 = getelementptr i8, ptr %365, i64 8
  %366 = getelementptr i8, ptr %57, i64 %364
  %scevgep1783 = getelementptr i8, ptr %366, i64 %362
  %367 = mul nsw i64 %62, 24
  %368 = getelementptr i8, ptr %57, i64 %367
  %scevgep1784 = getelementptr i8, ptr %368, i64 8
  %369 = getelementptr i8, ptr %57, i64 %367
  %scevgep1785 = getelementptr i8, ptr %369, i64 %362
  %370 = add nsw i64 %wide.trip.count1360, -1
  %371 = mul nsw i64 %62, 48
  %372 = mul nsw i64 %62, -56
  %373 = add nsw i64 %wide.trip.count1360, -1
  %374 = mul nsw i64 %62, 48
  %375 = mul nsw i64 %62, 40
  %376 = add nsw i64 %wide.trip.count1360, -1
  %377 = mul nsw i64 %62, -8
  %378 = add nsw i64 %wide.trip.count1360, -1
  %379 = add nsw i64 %wide.trip.count1360, -2
  %min.iters.check1851 = icmp ult i32 %49, 5
  %diff.check1848 = icmp ult i64 %377, 32
  %or.cond1864 = select i1 %min.iters.check1851, i1 true, i1 %diff.check1848
  %n.vec1854 = and i64 %378, -4
  %ind.end1855 = or disjoint i64 %n.vec1854, 1
  %cmp.n1863 = icmp eq i64 %378, %n.vec1854
  %min.iters.check1832 = icmp ult i32 %49, 5
  %diff.check1827 = icmp ult i64 %374, 32
  %diff.check1828 = icmp ult i64 %375, 32
  %conflict.rdx1829 = or i1 %diff.check1827, %diff.check1828
  %n.vec1835 = and i64 %376, -4
  %ind.end1836 = or disjoint i64 %n.vec1835, 1
  %cmp.n1846 = icmp eq i64 %376, %n.vec1835
  %min.iters.check1811 = icmp ult i32 %49, 5
  %diff.check1806 = icmp ult i64 %371, 32
  %diff.check1807 = icmp ult i64 %372, 32
  %conflict.rdx1808 = or i1 %diff.check1806, %diff.check1807
  %n.vec1814 = and i64 %373, -4
  %ind.end1815 = or disjoint i64 %n.vec1814, 1
  %cmp.n1825 = icmp eq i64 %373, %n.vec1814
  %380 = and i64 %wide.trip.count1360, 1
  %lcmp.mod2024.not.not = icmp eq i64 %380, 0
  %381 = add nsw i64 %wide.trip.count1360, -1
  %xtraiter2026 = and i64 %378, 1
  %382 = icmp eq i64 %379, 0
  %unroll_iter2030 = and i64 %378, -2
  %lcmp.mod2028.not = icmp eq i64 %xtraiter2026, 0
  %min.iters.check1791 = icmp ult i32 %49, 5
  %bound0 = icmp ult ptr %scevgep1780, %scevgep1783
  %bound1 = icmp ult ptr %scevgep1782, %scevgep1781
  %found.conflict = and i1 %bound0, %bound1
  %bound01786 = icmp ult ptr %scevgep1780, %scevgep1785
  %bound11787 = icmp ult ptr %scevgep1784, %scevgep1781
  %found.conflict1788 = and i1 %bound01786, %bound11787
  %conflict.rdx = or i1 %found.conflict, %found.conflict1788
  %n.vec1794 = and i64 %370, -2
  %ind.end1795 = or i64 %370, 1
  %cmp.n1804 = icmp eq i64 %370, %n.vec1794
  %383 = and i64 %wide.trip.count1360, 1
  %lcmp.mod2033.not.not = icmp eq i64 %383, 0
  %384 = add nsw i64 %wide.trip.count1360, -1
  %xtraiter2035 = and i64 %378, 1
  %385 = icmp eq i64 %379, 0
  %unroll_iter2039 = and i64 %378, -2
  %lcmp.mod2037.not = icmp eq i64 %xtraiter2035, 0
  %xtraiter2042 = and i64 %378, 1
  %386 = icmp eq i64 %379, 0
  %unroll_iter2046 = and i64 %378, -2
  %lcmp.mod2044.not = icmp eq i64 %xtraiter2042, 0
  %xtraiter2049 = and i64 %378, 1
  %387 = icmp eq i64 %379, 0
  %unroll_iter2052 = and i64 %378, -2
  %lcmp.mod2051.not = icmp eq i64 %xtraiter2049, 0
  %xtraiter2055 = and i64 %378, 1
  %388 = icmp eq i64 %379, 0
  %unroll_iter2058 = and i64 %378, -2
  %invariant.gep2211 = getelementptr inbounds i8, ptr %78, i64 8
  %lcmp.mod2057.not = icmp eq i64 %xtraiter2055, 0
  %xtraiter2061 = and i64 %378, 1
  %389 = icmp eq i64 %379, 0
  %unroll_iter2065 = and i64 %378, -2
  %lcmp.mod2063.not = icmp eq i64 %xtraiter2061, 0
  %xtraiter2068 = and i64 %378, 1
  %390 = icmp eq i64 %379, 0
  %unroll_iter2072 = and i64 %378, -2
  %lcmp.mod2070.not = icmp eq i64 %xtraiter2068, 0
  br label %391

391:                                              ; preds = %.backedge, %344
  %.0926 = phi double [ %1, %344 ], [ %.392414711481, %.backedge ]
  %.2908 = phi double [ %304, %344 ], [ %.11917, %.backedge ]
  %.0896 = phi double [ %304, %344 ], [ %.79131193, %.backedge ]
  %.0890 = phi double [ %340, %344 ], [ %.38931195, %.backedge ]
  %.0885 = phi double [ 0.000000e+00, %344 ], [ %.38881189, %.backedge ]
  %.0870 = phi double [ 0.000000e+00, %344 ], [ %.58751000.ph, %.backedge ]
  %.0863 = phi i32 [ 1, %344 ], [ %.4867, %.backedge ]
  %.0862 = phi i32 [ 1, %344 ], [ %.1864, %.backedge ]
  %.0856 = phi i32 [ 0, %344 ], [ %935, %.backedge ]
  %.1852 = phi i32 [ %186, %344 ], [ %.2853.lcssa, %.backedge ]
  %.0820.shrunk = phi i1 [ false, %344 ], [ %398, %.backedge ]
  %.0808 = phi i32 [ 0, %344 ], [ %.7.ph, %.backedge ]
  %.0807 = phi i32 [ 1, %344 ], [ 0, %.backedge ]
  %392 = fcmp ogt double %.2908, %8
  %393 = select i1 %392, double %.2908, double %8
  %394 = fcmp olt double %195, %393
  %395 = select i1 %394, double %195, double %393
  %396 = fsub double %395, %8
  %397 = call double @llvm.fabs.f64(double %396)
  %398 = fcmp olt double %397, 0x3D06849B86A12B9B
  %399 = and i1 %398, %.0820.shrunk
  %.4910 = select i1 %399, double %.0896, double %395
  %400 = fmul double %., %.4910
  %401 = fmul double %.4910, 1.100000e+00
  %402 = fsub double %2, %.0926
  %403 = call double @llvm.fabs.f64(double %402)
  %404 = fcmp oge double %401, %403
  %.5911 = select i1 %404, double %403, double %.4910
  %.0899 = select i1 %404, double %402, double %400
  %.1814 = zext i1 %404 to i32
  %405 = fsub double %.5911, %.0896
  %406 = call double @llvm.fabs.f64(double %405)
  %407 = fdiv double %406, %.5911
  %408 = fcmp ule double %407, 0x3EB0C6F7A0B5ED8D
  %.not970 = icmp eq i32 %.0863, %.0862
  %or.cond = select i1 %408, i1 %.not970, i1 false
  br i1 %or.cond, label %.preheader1870, label %409

.preheader1870:                                   ; preds = %409, %391
  %.2892.ph = phi double [ %.0890, %391 ], [ %416, %409 ]
  %.2858.ph = phi i32 [ %.0856, %391 ], [ 0, %409 ]
  %.2810.ph = phi i32 [ %.0808, %391 ], [ 0, %409 ]
  br label %420

409:                                              ; preds = %391
  %410 = fdiv double %.5911, %.0896
  %411 = call i32 @adjust_stepsize(ptr noundef nonnull %78, double noundef %410, i32 noundef %5, i32 noundef %.0863)
  %412 = add nsw i32 %.0863, -1
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds [5 x double], ptr %19, i64 0, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !14
  %416 = fmul double %.0899, %415
  %417 = call i32 @new_linearisation(ptr noundef nonnull %21, double noundef %416, i32 noundef %5, ptr noundef %15)
  %418 = icmp eq i32 %417, 1
  br i1 %418, label %419, label %.preheader1870

419:                                              ; preds = %409
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %31) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %31, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.10, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 332, ptr noundef nonnull %31) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %31) #9
  br label %1054

420:                                              ; preds = %.preheader1870, %853
  %.6912 = phi double [ %843, %853 ], [ %.5911, %.preheader1870 ]
  %.1900 = phi double [ %844, %853 ], [ %.0899, %.preheader1870 ]
  %421 = phi i1 [ false, %853 ], [ true, %.preheader1870 ]
  %.2892 = phi double [ %849, %853 ], [ %.2892.ph, %.preheader1870 ]
  %.1886 = phi double [ %.38881189, %853 ], [ %.0885, %.preheader1870 ]
  %.1871 = phi double [ %.58751000.ph, %853 ], [ %.0870, %.preheader1870 ]
  %.1864 = phi i32 [ %.3866, %853 ], [ %.0863, %.preheader1870 ]
  %.2858 = phi i32 [ 0, %853 ], [ %.2858.ph, %.preheader1870 ]
  %.2815 = phi i32 [ %.6819, %853 ], [ %.1814, %.preheader1870 ]
  %.2810 = phi i32 [ 0, %853 ], [ %.2810.ph, %.preheader1870 ]
  %.1 = phi i32 [ %.21201, %853 ], [ %.0807, %.preheader1870 ]
  %.not9901143 = icmp slt i32 %.1864, 1
  %422 = add nsw i32 %.1864, -1
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds [5 x double], ptr %19, i64 0, i64 %423
  %425 = add i32 %.1864, 1
  %wide.trip.count1354 = zext i32 %425 to i64
  %426 = add nsw i64 %wide.trip.count1354, -1
  %427 = add nsw i64 %wide.trip.count1354, -2
  %xtraiter2005 = and i64 %426, 1
  %428 = icmp eq i64 %427, 0
  %unroll_iter2009 = and i64 %426, -2
  %lcmp.mod2008.not = icmp eq i64 %xtraiter2005, 0
  %xtraiter2012 = and i64 %426, 3
  %429 = icmp ult i64 %427, 3
  %unroll_iter2016 = and i64 %426, -4
  %lcmp.mod2015.not = icmp eq i64 %xtraiter2012, 0
  br label %.preheader1004

.preheader1007:                                   ; preds = %689, %681, %._crit_edge1188
  %.58751000.ph = phi double [ %.38731190, %._crit_edge1188 ], [ %.38731190, %681 ], [ %.995, %689 ]
  %.7.ph = phi i32 [ %.48121192, %._crit_edge1188 ], [ 1, %681 ], [ 1, %689 ]
  br i1 %.not9641109, label %._crit_edge1206.thread, label %.lr.ph1205.preheader

.lr.ph1205.preheader:                             ; preds = %.preheader1007
  br i1 %385, label %._crit_edge1206.unr-lcssa, label %.lr.ph1205

.preheader1004:                                   ; preds = %.thread, %420
  %.21201 = phi i32 [ %.1, %420 ], [ %.4, %.thread ]
  %.38111200 = phi i32 [ %.2810, %420 ], [ %.7, %.thread ]
  %.38161199 = phi i32 [ %.2815, %420 ], [ %.5818, %.thread ]
  %.38591198 = phi i32 [ %.2858, %420 ], [ %.5861, %.thread ]
  %.28721197 = phi double [ %.1871, %420 ], [ %.58751000, %.thread ]
  %.28871196 = phi double [ %.1886, %420 ], [ %.38881019, %.thread ]
  %.38931195 = phi double [ %.2892, %420 ], [ %.5895, %.thread ]
  %.29011194 = phi double [ %.1900, %420 ], [ %.4903, %.thread ]
  %.79131193 = phi double [ %.6912, %420 ], [ %.9915, %.thread ]
  br i1 %.not9641109, label %._crit_edge1152.thread, label %.lr.ph1151

._crit_edge1152.thread:                           ; preds = %.preheader1004
  %430 = fadd double %.0926, %.29011194
  %431 = icmp eq i32 %.38161199, 1
  %.39241470 = select i1 %431, double %2, double %430
  %432 = fsub double %.39241470, %.0926
  br label %._crit_edge1163.thread

.lr.ph1151:                                       ; preds = %.preheader1004
  br i1 %.not9901143, label %.lr.ph1162.thread, label %.lr.ph1151.split

.lr.ph1162.thread:                                ; preds = %.lr.ph1151
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep1362, i8 0, i64 %358, i1 false), !tbaa !14
  %433 = fadd double %.0926, %.29011194
  %434 = icmp eq i32 %.38161199, 1
  %.39241475 = select i1 %434, double %2, double %433
  %435 = fsub double %.39241475, %.0926
  br label %.lr.ph1162.split.us.preheader

.lr.ph1151.split:                                 ; preds = %.lr.ph1151
  %436 = load double, ptr %424, align 8, !tbaa !14
  br label %.lr.ph1146

.lr.ph1146:                                       ; preds = %.lr.ph1151.split, %._crit_edge1147
  %indvars.iv1357 = phi i64 [ 1, %.lr.ph1151.split ], [ %indvars.iv.next1358, %._crit_edge1147 ]
  %437 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1357
  store double 0.000000e+00, ptr %437, align 8, !tbaa !14
  %438 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1357
  %439 = load ptr, ptr %438, align 8, !tbaa !5
  br i1 %428, label %._crit_edge1147.unr-lcssa, label %.lr.ph1146.new

.lr.ph1146.new:                                   ; preds = %.lr.ph1146
  %invariant.gep2203 = getelementptr inbounds i8, ptr %439, i64 8
  br label %440

440:                                              ; preds = %440, %.lr.ph1146.new
  %indvars.iv1351 = phi i64 [ 1, %.lr.ph1146.new ], [ %indvars.iv.next1352.1, %440 ]
  %441 = phi double [ 0.000000e+00, %.lr.ph1146.new ], [ %453, %440 ]
  %niter2010 = phi i64 [ 0, %.lr.ph1146.new ], [ %niter2010.next.1, %440 ]
  %442 = getelementptr inbounds double, ptr %439, i64 %indvars.iv1351
  %443 = load double, ptr %442, align 8, !tbaa !14
  %444 = add nsw i64 %indvars.iv1351, -1
  %445 = getelementptr inbounds [5 x double], ptr %18, i64 0, i64 %444
  %446 = load double, ptr %445, align 8, !tbaa !14
  %447 = fmul double %443, %446
  %448 = call double @llvm.fmuladd.f64(double %447, double %436, double %441)
  store double %448, ptr %437, align 8, !tbaa !14
  %gep2204 = getelementptr inbounds double, ptr %invariant.gep2203, i64 %indvars.iv1351
  %449 = load double, ptr %gep2204, align 8, !tbaa !14
  %450 = getelementptr inbounds [5 x double], ptr %18, i64 0, i64 %indvars.iv1351
  %451 = load double, ptr %450, align 8, !tbaa !14
  %452 = fmul double %449, %451
  %453 = call double @llvm.fmuladd.f64(double %452, double %436, double %448)
  store double %453, ptr %437, align 8, !tbaa !14
  %indvars.iv.next1352.1 = add nuw nsw i64 %indvars.iv1351, 2
  %niter2010.next.1 = add i64 %niter2010, 2
  %niter2010.ncmp.1 = icmp eq i64 %niter2010.next.1, %unroll_iter2009
  br i1 %niter2010.ncmp.1, label %._crit_edge1147.unr-lcssa, label %440, !llvm.loop !32

._crit_edge1147.unr-lcssa:                        ; preds = %440, %.lr.ph1146
  %indvars.iv1351.unr = phi i64 [ 1, %.lr.ph1146 ], [ %indvars.iv.next1352.1, %440 ]
  %.unr2007 = phi double [ 0.000000e+00, %.lr.ph1146 ], [ %453, %440 ]
  br i1 %lcmp.mod2008.not, label %._crit_edge1147, label %._crit_edge1147.epilog-lcssa

._crit_edge1147.epilog-lcssa:                     ; preds = %._crit_edge1147.unr-lcssa
  %454 = getelementptr inbounds double, ptr %439, i64 %indvars.iv1351.unr
  %455 = load double, ptr %454, align 8, !tbaa !14
  %456 = add nsw i64 %indvars.iv1351.unr, -1
  %457 = getelementptr inbounds [5 x double], ptr %18, i64 0, i64 %456
  %458 = load double, ptr %457, align 8, !tbaa !14
  %459 = fmul double %455, %458
  %460 = call double @llvm.fmuladd.f64(double %459, double %436, double %.unr2007)
  store double %460, ptr %437, align 8, !tbaa !14
  br label %._crit_edge1147

._crit_edge1147:                                  ; preds = %._crit_edge1147.unr-lcssa, %._crit_edge1147.epilog-lcssa
  %indvars.iv.next1358 = add nuw nsw i64 %indvars.iv1357, 1
  %exitcond1361.not = icmp eq i64 %indvars.iv.next1358, %wide.trip.count1360
  br i1 %exitcond1361.not, label %._crit_edge1152, label %.lr.ph1146, !llvm.loop !33

._crit_edge1152:                                  ; preds = %._crit_edge1147
  %461 = fadd double %.0926, %.29011194
  %462 = icmp eq i32 %.38161199, 1
  %.3924 = select i1 %462, double %2, double %461
  %463 = fsub double %.3924, %.0926
  br i1 %.not9641109, label %._crit_edge1163.thread, label %.lr.ph1162

.lr.ph1162:                                       ; preds = %._crit_edge1152
  br i1 %.not9901143, label %.lr.ph1162.split.us.preheader, label %.lr.ph1156

.lr.ph1162.split.us.preheader:                    ; preds = %.lr.ph1162.thread, %.lr.ph1162
  %.392414761478 = phi double [ %.39241475, %.lr.ph1162.thread ], [ %.3924, %.lr.ph1162 ]
  %464 = phi double [ %435, %.lr.ph1162.thread ], [ %463, %.lr.ph1162 ]
  br i1 %or.cond1864, label %.lr.ph1162.split.us.preheader1868, label %vector.body1857

vector.body1857:                                  ; preds = %.lr.ph1162.split.us.preheader, %vector.body1857
  %index1858 = phi i64 [ %index.next1862, %vector.body1857 ], [ 0, %.lr.ph1162.split.us.preheader ]
  %offset.idx1859 = or disjoint i64 %index1858, 1
  %465 = getelementptr inbounds double, ptr %66, i64 %offset.idx1859
  %466 = getelementptr inbounds i8, ptr %465, i64 16
  %wide.load1860 = load <2 x double>, ptr %465, align 8, !tbaa !14
  %wide.load1861 = load <2 x double>, ptr %466, align 8, !tbaa !14
  %467 = getelementptr inbounds double, ptr %65, i64 %offset.idx1859
  %468 = getelementptr inbounds i8, ptr %467, i64 16
  store <2 x double> %wide.load1860, ptr %467, align 8, !tbaa !14
  store <2 x double> %wide.load1861, ptr %468, align 8, !tbaa !14
  %index.next1862 = add nuw i64 %index1858, 4
  %469 = icmp eq i64 %index.next1862, %n.vec1854
  br i1 %469, label %middle.block1849, label %vector.body1857, !llvm.loop !34

middle.block1849:                                 ; preds = %vector.body1857
  br i1 %cmp.n1863, label %._crit_edge1163, label %.lr.ph1162.split.us.preheader1868

.lr.ph1162.split.us.preheader1868:                ; preds = %middle.block1849, %.lr.ph1162.split.us.preheader
  %indvars.iv1379.ph = phi i64 [ 1, %.lr.ph1162.split.us.preheader ], [ %ind.end1855, %middle.block1849 ]
  %470 = sub nsw i64 %wide.trip.count1360, %indvars.iv1379.ph
  %xtraiter2018 = and i64 %470, 3
  %lcmp.mod2019.not = icmp eq i64 %xtraiter2018, 0
  br i1 %lcmp.mod2019.not, label %.lr.ph1162.split.us.prol.loopexit, label %.lr.ph1162.split.us.prol

.lr.ph1162.split.us.prol:                         ; preds = %.lr.ph1162.split.us.preheader1868, %.lr.ph1162.split.us.prol
  %indvars.iv1379.prol = phi i64 [ %indvars.iv.next1380.prol, %.lr.ph1162.split.us.prol ], [ %indvars.iv1379.ph, %.lr.ph1162.split.us.preheader1868 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph1162.split.us.prol ], [ 0, %.lr.ph1162.split.us.preheader1868 ]
  %471 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1379.prol
  %472 = load double, ptr %471, align 8, !tbaa !14
  %473 = getelementptr inbounds double, ptr %65, i64 %indvars.iv1379.prol
  store double %472, ptr %473, align 8, !tbaa !14
  %indvars.iv.next1380.prol = add nuw nsw i64 %indvars.iv1379.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter2018
  br i1 %prol.iter.cmp.not, label %.lr.ph1162.split.us.prol.loopexit, label %.lr.ph1162.split.us.prol, !llvm.loop !35

.lr.ph1162.split.us.prol.loopexit:                ; preds = %.lr.ph1162.split.us.prol, %.lr.ph1162.split.us.preheader1868
  %indvars.iv1379.unr = phi i64 [ %indvars.iv1379.ph, %.lr.ph1162.split.us.preheader1868 ], [ %indvars.iv.next1380.prol, %.lr.ph1162.split.us.prol ]
  %474 = sub nsw i64 %indvars.iv1379.ph, %wide.trip.count1360
  %475 = icmp ugt i64 %474, -4
  br i1 %475, label %._crit_edge1163, label %.lr.ph1162.split.us

.lr.ph1162.split.us:                              ; preds = %.lr.ph1162.split.us.prol.loopexit, %.lr.ph1162.split.us
  %indvars.iv1379 = phi i64 [ %indvars.iv.next1380.3, %.lr.ph1162.split.us ], [ %indvars.iv1379.unr, %.lr.ph1162.split.us.prol.loopexit ]
  %476 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1379
  %477 = load double, ptr %476, align 8, !tbaa !14
  %478 = getelementptr inbounds double, ptr %65, i64 %indvars.iv1379
  store double %477, ptr %478, align 8, !tbaa !14
  %indvars.iv.next1380 = add nuw nsw i64 %indvars.iv1379, 1
  %479 = getelementptr inbounds double, ptr %66, i64 %indvars.iv.next1380
  %480 = load double, ptr %479, align 8, !tbaa !14
  %481 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next1380
  store double %480, ptr %481, align 8, !tbaa !14
  %indvars.iv.next1380.1 = add nuw nsw i64 %indvars.iv1379, 2
  %482 = getelementptr inbounds double, ptr %66, i64 %indvars.iv.next1380.1
  %483 = load double, ptr %482, align 8, !tbaa !14
  %484 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next1380.1
  store double %483, ptr %484, align 8, !tbaa !14
  %indvars.iv.next1380.2 = add nuw nsw i64 %indvars.iv1379, 3
  %485 = getelementptr inbounds double, ptr %66, i64 %indvars.iv.next1380.2
  %486 = load double, ptr %485, align 8, !tbaa !14
  %487 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next1380.2
  store double %486, ptr %487, align 8, !tbaa !14
  %indvars.iv.next1380.3 = add nuw nsw i64 %indvars.iv1379, 4
  %exitcond1383.not.3 = icmp eq i64 %indvars.iv.next1380.3, %wide.trip.count1382
  br i1 %exitcond1383.not.3, label %._crit_edge1163, label %.lr.ph1162.split.us, !llvm.loop !36

.lr.ph1156:                                       ; preds = %.lr.ph1162, %._crit_edge1157
  %indvars.iv1372 = phi i64 [ %indvars.iv.next1373, %._crit_edge1157 ], [ 1, %.lr.ph1162 ]
  %488 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1372
  %489 = load double, ptr %488, align 8, !tbaa !14
  %490 = getelementptr inbounds double, ptr %65, i64 %indvars.iv1372
  store double %489, ptr %490, align 8, !tbaa !14
  %491 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1372
  %492 = load ptr, ptr %491, align 8, !tbaa !5
  br i1 %429, label %._crit_edge1157.unr-lcssa, label %.lr.ph1156.new

.lr.ph1156.new:                                   ; preds = %.lr.ph1156
  %invariant.gep2205 = getelementptr inbounds i8, ptr %492, i64 8
  %invariant.gep2207 = getelementptr inbounds i8, ptr %492, i64 16
  %invariant.gep2209 = getelementptr inbounds i8, ptr %492, i64 24
  br label %493

493:                                              ; preds = %493, %.lr.ph1156.new
  %indvars.iv1366 = phi i64 [ 1, %.lr.ph1156.new ], [ %indvars.iv.next1367.3, %493 ]
  %494 = phi double [ %489, %.lr.ph1156.new ], [ %503, %493 ]
  %niter2017 = phi i64 [ 0, %.lr.ph1156.new ], [ %niter2017.next.3, %493 ]
  %495 = getelementptr inbounds double, ptr %492, i64 %indvars.iv1366
  %496 = load double, ptr %495, align 8, !tbaa !14
  %497 = fadd double %496, %494
  store double %497, ptr %490, align 8, !tbaa !14
  %gep2206 = getelementptr inbounds double, ptr %invariant.gep2205, i64 %indvars.iv1366
  %498 = load double, ptr %gep2206, align 8, !tbaa !14
  %499 = fadd double %498, %497
  store double %499, ptr %490, align 8, !tbaa !14
  %gep2208 = getelementptr inbounds double, ptr %invariant.gep2207, i64 %indvars.iv1366
  %500 = load double, ptr %gep2208, align 8, !tbaa !14
  %501 = fadd double %500, %499
  store double %501, ptr %490, align 8, !tbaa !14
  %gep2210 = getelementptr inbounds double, ptr %invariant.gep2209, i64 %indvars.iv1366
  %502 = load double, ptr %gep2210, align 8, !tbaa !14
  %503 = fadd double %502, %501
  store double %503, ptr %490, align 8, !tbaa !14
  %indvars.iv.next1367.3 = add nuw nsw i64 %indvars.iv1366, 4
  %niter2017.next.3 = add i64 %niter2017, 4
  %niter2017.ncmp.3 = icmp eq i64 %niter2017.next.3, %unroll_iter2016
  br i1 %niter2017.ncmp.3, label %._crit_edge1157.unr-lcssa, label %493, !llvm.loop !37

._crit_edge1157.unr-lcssa:                        ; preds = %493, %.lr.ph1156
  %indvars.iv1366.unr = phi i64 [ 1, %.lr.ph1156 ], [ %indvars.iv.next1367.3, %493 ]
  %.unr2014 = phi double [ %489, %.lr.ph1156 ], [ %503, %493 ]
  br i1 %lcmp.mod2015.not, label %._crit_edge1157, label %.epil.preheader2011

.epil.preheader2011:                              ; preds = %._crit_edge1157.unr-lcssa, %.epil.preheader2011
  %indvars.iv1366.epil = phi i64 [ %indvars.iv.next1367.epil, %.epil.preheader2011 ], [ %indvars.iv1366.unr, %._crit_edge1157.unr-lcssa ]
  %504 = phi double [ %507, %.epil.preheader2011 ], [ %.unr2014, %._crit_edge1157.unr-lcssa ]
  %epil.iter2013 = phi i64 [ %epil.iter2013.next, %.epil.preheader2011 ], [ 0, %._crit_edge1157.unr-lcssa ]
  %505 = getelementptr inbounds double, ptr %492, i64 %indvars.iv1366.epil
  %506 = load double, ptr %505, align 8, !tbaa !14
  %507 = fadd double %506, %504
  store double %507, ptr %490, align 8, !tbaa !14
  %indvars.iv.next1367.epil = add nuw nsw i64 %indvars.iv1366.epil, 1
  %epil.iter2013.next = add i64 %epil.iter2013, 1
  %epil.iter2013.cmp.not = icmp eq i64 %epil.iter2013.next, %xtraiter2012
  br i1 %epil.iter2013.cmp.not, label %._crit_edge1157, label %.epil.preheader2011, !llvm.loop !38

._crit_edge1157:                                  ; preds = %.epil.preheader2011, %._crit_edge1157.unr-lcssa
  %indvars.iv.next1373 = add nuw nsw i64 %indvars.iv1372, 1
  %exitcond1376.not = icmp eq i64 %indvars.iv.next1373, %wide.trip.count1375
  br i1 %exitcond1376.not, label %._crit_edge1163, label %.lr.ph1156, !llvm.loop !39

._crit_edge1163.thread:                           ; preds = %._crit_edge1152.thread, %._crit_edge1152
  %.ph1479 = phi double [ %463, %._crit_edge1152 ], [ %432, %._crit_edge1152.thread ]
  %.39241471.ph = phi double [ %.3924, %._crit_edge1152 ], [ %.39241470, %._crit_edge1152.thread ]
  call void @eqvec(ptr noundef nonnull %65, ptr noundef nonnull %120, i32 noundef %5)
  br label %.preheader1003

._crit_edge1163:                                  ; preds = %._crit_edge1157, %.lr.ph1162.split.us.prol.loopexit, %.lr.ph1162.split.us, %middle.block1849
  %508 = phi double [ %464, %middle.block1849 ], [ %464, %.lr.ph1162.split.us ], [ %464, %.lr.ph1162.split.us.prol.loopexit ], [ %463, %._crit_edge1157 ]
  %.39241471 = phi double [ %.392414761478, %middle.block1849 ], [ %.392414761478, %.lr.ph1162.split.us ], [ %.392414761478, %.lr.ph1162.split.us.prol.loopexit ], [ %.3924, %._crit_edge1157 ]
  call void @eqvec(ptr noundef nonnull %65, ptr noundef nonnull %120, i32 noundef %5)
  br i1 %.not9641109, label %.preheader1003, label %.lr.ph1168

.preheader1003:                                   ; preds = %.lr.ph1168, %._crit_edge1163.thread, %._crit_edge1163
  %.392414711481 = phi double [ %.39241471, %._crit_edge1163 ], [ %.39241471.ph, %._crit_edge1163.thread ], [ %.39241471, %.lr.ph1168 ]
  %509 = phi double [ %508, %._crit_edge1163 ], [ %.ph1479, %._crit_edge1163.thread ], [ %508, %.lr.ph1168 ]
  %.0889.lcssa = phi double [ 0.000000e+00, %._crit_edge1163 ], [ 0.000000e+00, %._crit_edge1163.thread ], [ %526, %.lr.ph1168 ]
  %broadcast.splatinsert = insertelement <2 x double> poison, double %.38931195, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %.preheader1002

.lr.ph1168:                                       ; preds = %._crit_edge1163, %.lr.ph1168
  %indvars.iv1385 = phi i64 [ %indvars.iv.next1386, %.lr.ph1168 ], [ 1, %._crit_edge1163 ]
  %.08891165 = phi double [ %526, %.lr.ph1168 ], [ 0.000000e+00, %._crit_edge1163 ]
  %510 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1385
  store double 0.000000e+00, ptr %510, align 8, !tbaa !14
  %511 = getelementptr inbounds double, ptr %120, i64 %indvars.iv1385
  %512 = load double, ptr %511, align 8, !tbaa !14
  %513 = call double @llvm.fabs.f64(double %512)
  %514 = getelementptr inbounds double, ptr %66, i64 %indvars.iv1385
  %515 = load double, ptr %514, align 8, !tbaa !14
  %516 = call double @llvm.fabs.f64(double %515)
  %517 = fcmp olt double %513, %516
  %.994 = select i1 %517, double %516, double %513
  %518 = fcmp olt double %.994, 1.000000e-15
  %519 = select i1 %518, double 1.000000e-15, double %.994
  %520 = fdiv double 1.000000e+00, %519
  %521 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1385
  store double %520, ptr %521, align 8, !tbaa !14
  %522 = fmul double %512, %520
  %523 = call double @llvm.fabs.f64(double %522)
  %524 = fmul double %523, 0x3D06849B86A12B9B
  %525 = fcmp olt double %.08891165, %524
  %526 = select i1 %525, double %524, double %.08891165
  %indvars.iv.next1386 = add nuw nsw i64 %indvars.iv1385, 1
  %exitcond1389.not = icmp eq i64 %indvars.iv.next1386, %wide.trip.count1388
  br i1 %exitcond1389.not, label %.preheader1003, label %.lr.ph1168, !llvm.loop !40

.preheader1002:                                   ; preds = %.preheader1003, %705
  %.48121192 = phi i32 [ %.38111200, %.preheader1003 ], [ %.5, %705 ]
  %.08551191 = phi i32 [ 1, %.preheader1003 ], [ %706, %705 ]
  %.38731190 = phi double [ %.28721197, %.preheader1003 ], [ %.4874, %705 ]
  %.38881189 = phi double [ %.28871196, %.preheader1003 ], [ %.0884.lcssa1484, %705 ]
  br i1 %.not9641109, label %._crit_edge1173.thread, label %.lr.ph1172.preheader

.lr.ph1172.preheader:                             ; preds = %.preheader1002
  %brmerge2213 = select i1 %min.iters.check1832, i1 true, i1 %conflict.rdx1829
  br i1 %brmerge2213, label %.lr.ph1172.preheader1867, label %vector.body1838

vector.body1838:                                  ; preds = %.lr.ph1172.preheader, %vector.body1838
  %index1839 = phi i64 [ %index.next1845, %vector.body1838 ], [ 0, %.lr.ph1172.preheader ]
  %offset.idx1840 = or disjoint i64 %index1839, 1
  %527 = getelementptr inbounds double, ptr %69, i64 %offset.idx1840
  %528 = getelementptr inbounds i8, ptr %527, i64 16
  %wide.load1841 = load <2 x double>, ptr %527, align 8, !tbaa !14
  %wide.load1842 = load <2 x double>, ptr %528, align 8, !tbaa !14
  %529 = getelementptr inbounds double, ptr %70, i64 %offset.idx1840
  %530 = getelementptr inbounds i8, ptr %529, i64 16
  %wide.load1843 = load <2 x double>, ptr %529, align 8, !tbaa !14
  %wide.load1844 = load <2 x double>, ptr %530, align 8, !tbaa !14
  %531 = fadd <2 x double> %wide.load1841, %wide.load1843
  %532 = fadd <2 x double> %wide.load1842, %wide.load1844
  %533 = getelementptr inbounds double, ptr %75, i64 %offset.idx1840
  %534 = getelementptr inbounds i8, ptr %533, i64 16
  store <2 x double> %531, ptr %533, align 8, !tbaa !14
  store <2 x double> %532, ptr %534, align 8, !tbaa !14
  %index.next1845 = add nuw i64 %index1839, 4
  %535 = icmp eq i64 %index.next1845, %n.vec1835
  br i1 %535, label %middle.block1830, label %vector.body1838, !llvm.loop !41

middle.block1830:                                 ; preds = %vector.body1838
  br i1 %cmp.n1846, label %._crit_edge1173, label %.lr.ph1172.preheader1867

.lr.ph1172.preheader1867:                         ; preds = %.lr.ph1172.preheader, %middle.block1830
  %indvars.iv1390.ph = phi i64 [ 1, %.lr.ph1172.preheader ], [ %ind.end1836, %middle.block1830 ]
  %536 = sub nsw i64 %wide.trip.count1360, %indvars.iv1390.ph
  %xtraiter2020 = and i64 %536, 3
  %lcmp.mod2021.not = icmp eq i64 %xtraiter2020, 0
  br i1 %lcmp.mod2021.not, label %.lr.ph1172.prol.loopexit, label %.lr.ph1172.prol

.lr.ph1172.prol:                                  ; preds = %.lr.ph1172.preheader1867, %.lr.ph1172.prol
  %indvars.iv1390.prol = phi i64 [ %indvars.iv.next1391.prol, %.lr.ph1172.prol ], [ %indvars.iv1390.ph, %.lr.ph1172.preheader1867 ]
  %prol.iter2022 = phi i64 [ %prol.iter2022.next, %.lr.ph1172.prol ], [ 0, %.lr.ph1172.preheader1867 ]
  %537 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1390.prol
  %538 = load double, ptr %537, align 8, !tbaa !14
  %539 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1390.prol
  %540 = load double, ptr %539, align 8, !tbaa !14
  %541 = fadd double %538, %540
  %542 = getelementptr inbounds double, ptr %75, i64 %indvars.iv1390.prol
  store double %541, ptr %542, align 8, !tbaa !14
  %indvars.iv.next1391.prol = add nuw nsw i64 %indvars.iv1390.prol, 1
  %prol.iter2022.next = add i64 %prol.iter2022, 1
  %prol.iter2022.cmp.not = icmp eq i64 %prol.iter2022.next, %xtraiter2020
  br i1 %prol.iter2022.cmp.not, label %.lr.ph1172.prol.loopexit, label %.lr.ph1172.prol, !llvm.loop !42

.lr.ph1172.prol.loopexit:                         ; preds = %.lr.ph1172.prol, %.lr.ph1172.preheader1867
  %indvars.iv1390.unr = phi i64 [ %indvars.iv1390.ph, %.lr.ph1172.preheader1867 ], [ %indvars.iv.next1391.prol, %.lr.ph1172.prol ]
  %543 = sub nsw i64 %indvars.iv1390.ph, %wide.trip.count1360
  %544 = icmp ugt i64 %543, -4
  br i1 %544, label %._crit_edge1173, label %.lr.ph1172

.lr.ph1172:                                       ; preds = %.lr.ph1172.prol.loopexit, %.lr.ph1172
  %indvars.iv1390 = phi i64 [ %indvars.iv.next1391.3, %.lr.ph1172 ], [ %indvars.iv1390.unr, %.lr.ph1172.prol.loopexit ]
  %545 = getelementptr inbounds double, ptr %69, i64 %indvars.iv1390
  %546 = load double, ptr %545, align 8, !tbaa !14
  %547 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1390
  %548 = load double, ptr %547, align 8, !tbaa !14
  %549 = fadd double %546, %548
  %550 = getelementptr inbounds double, ptr %75, i64 %indvars.iv1390
  store double %549, ptr %550, align 8, !tbaa !14
  %indvars.iv.next1391 = add nuw nsw i64 %indvars.iv1390, 1
  %551 = getelementptr inbounds double, ptr %69, i64 %indvars.iv.next1391
  %552 = load double, ptr %551, align 8, !tbaa !14
  %553 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1391
  %554 = load double, ptr %553, align 8, !tbaa !14
  %555 = fadd double %552, %554
  %556 = getelementptr inbounds double, ptr %75, i64 %indvars.iv.next1391
  store double %555, ptr %556, align 8, !tbaa !14
  %indvars.iv.next1391.1 = add nuw nsw i64 %indvars.iv1390, 2
  %557 = getelementptr inbounds double, ptr %69, i64 %indvars.iv.next1391.1
  %558 = load double, ptr %557, align 8, !tbaa !14
  %559 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1391.1
  %560 = load double, ptr %559, align 8, !tbaa !14
  %561 = fadd double %558, %560
  %562 = getelementptr inbounds double, ptr %75, i64 %indvars.iv.next1391.1
  store double %561, ptr %562, align 8, !tbaa !14
  %indvars.iv.next1391.2 = add nuw nsw i64 %indvars.iv1390, 3
  %563 = getelementptr inbounds double, ptr %69, i64 %indvars.iv.next1391.2
  %564 = load double, ptr %563, align 8, !tbaa !14
  %565 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1391.2
  %566 = load double, ptr %565, align 8, !tbaa !14
  %567 = fadd double %564, %566
  %568 = getelementptr inbounds double, ptr %75, i64 %indvars.iv.next1391.2
  store double %567, ptr %568, align 8, !tbaa !14
  %indvars.iv.next1391.3 = add nuw nsw i64 %indvars.iv1390, 4
  %exitcond1394.not.3 = icmp eq i64 %indvars.iv.next1391.3, %wide.trip.count1393
  br i1 %exitcond1394.not.3, label %._crit_edge1173, label %.lr.ph1172, !llvm.loop !43

._crit_edge1173:                                  ; preds = %.lr.ph1172.prol.loopexit, %.lr.ph1172, %middle.block1830
  %569 = call i32 %0(double noundef %.392414711481, ptr noundef %3, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %570 = icmp eq i32 %569, 1
  br i1 %570, label %573, label %574

._crit_edge1173.thread:                           ; preds = %.preheader1002
  %571 = call i32 %0(double noundef %.392414711481, ptr noundef %3, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %572 = icmp eq i32 %571, 1
  br i1 %572, label %573, label %._crit_edge1178

573:                                              ; preds = %._crit_edge1173.thread, %._crit_edge1173
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %32) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %32, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.11, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 383, ptr noundef nonnull %32) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %32) #9
  br label %1054

574:                                              ; preds = %._crit_edge1173
  br i1 %.not9641109, label %._crit_edge1178, label %.lr.ph1177.preheader

.lr.ph1177.preheader:                             ; preds = %574
  %brmerge2214 = select i1 %min.iters.check1811, i1 true, i1 %conflict.rdx1808
  br i1 %brmerge2214, label %.lr.ph1177.preheader1866, label %vector.body1817

vector.body1817:                                  ; preds = %.lr.ph1177.preheader, %vector.body1817
  %index1818 = phi i64 [ %index.next1824, %vector.body1817 ], [ 0, %.lr.ph1177.preheader ]
  %offset.idx1819 = or disjoint i64 %index1818, 1
  %575 = getelementptr inbounds double, ptr %57, i64 %offset.idx1819
  %576 = getelementptr inbounds i8, ptr %575, i64 16
  %wide.load1820 = load <2 x double>, ptr %575, align 8, !tbaa !14
  %wide.load1821 = load <2 x double>, ptr %576, align 8, !tbaa !14
  %577 = getelementptr inbounds double, ptr %75, i64 %offset.idx1819
  %578 = getelementptr inbounds i8, ptr %577, i64 16
  %wide.load1822 = load <2 x double>, ptr %577, align 8, !tbaa !14
  %wide.load1823 = load <2 x double>, ptr %578, align 8, !tbaa !14
  %579 = fneg <2 x double> %wide.load1822
  %580 = fneg <2 x double> %wide.load1823
  %581 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load1820, <2 x double> %579)
  %582 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load1821, <2 x double> %580)
  %583 = getelementptr inbounds double, ptr %68, i64 %offset.idx1819
  %584 = getelementptr inbounds i8, ptr %583, i64 16
  store <2 x double> %581, ptr %583, align 8, !tbaa !14
  store <2 x double> %582, ptr %584, align 8, !tbaa !14
  %index.next1824 = add nuw i64 %index1818, 4
  %585 = icmp eq i64 %index.next1824, %n.vec1814
  br i1 %585, label %middle.block1809, label %vector.body1817, !llvm.loop !44

middle.block1809:                                 ; preds = %vector.body1817
  br i1 %cmp.n1825, label %._crit_edge1178, label %.lr.ph1177.preheader1866

.lr.ph1177.preheader1866:                         ; preds = %.lr.ph1177.preheader, %middle.block1809
  %indvars.iv1395.ph = phi i64 [ 1, %.lr.ph1177.preheader ], [ %ind.end1815, %middle.block1809 ]
  br i1 %lcmp.mod2024.not.not, label %.lr.ph1177.prol, label %.lr.ph1177.prol.loopexit

.lr.ph1177.prol:                                  ; preds = %.lr.ph1177.preheader1866
  %586 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1395.ph
  %587 = load double, ptr %586, align 8, !tbaa !14
  %588 = getelementptr inbounds double, ptr %75, i64 %indvars.iv1395.ph
  %589 = load double, ptr %588, align 8, !tbaa !14
  %590 = fneg double %589
  %591 = call double @llvm.fmuladd.f64(double %.38931195, double %587, double %590)
  %592 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1395.ph
  store double %591, ptr %592, align 8, !tbaa !14
  %indvars.iv.next1396.prol = add nuw nsw i64 %indvars.iv1395.ph, 1
  br label %.lr.ph1177.prol.loopexit

.lr.ph1177.prol.loopexit:                         ; preds = %.lr.ph1177.prol, %.lr.ph1177.preheader1866
  %indvars.iv1395.unr = phi i64 [ %indvars.iv1395.ph, %.lr.ph1177.preheader1866 ], [ %indvars.iv.next1396.prol, %.lr.ph1177.prol ]
  %593 = icmp eq i64 %indvars.iv1395.ph, %381
  br i1 %593, label %._crit_edge1178, label %.lr.ph1177

.lr.ph1177:                                       ; preds = %.lr.ph1177.prol.loopexit, %.lr.ph1177
  %indvars.iv1395 = phi i64 [ %indvars.iv.next1396.1, %.lr.ph1177 ], [ %indvars.iv1395.unr, %.lr.ph1177.prol.loopexit ]
  %594 = getelementptr inbounds double, ptr %57, i64 %indvars.iv1395
  %595 = load double, ptr %594, align 8, !tbaa !14
  %596 = getelementptr inbounds double, ptr %75, i64 %indvars.iv1395
  %597 = load double, ptr %596, align 8, !tbaa !14
  %598 = fneg double %597
  %599 = call double @llvm.fmuladd.f64(double %.38931195, double %595, double %598)
  %600 = getelementptr inbounds double, ptr %68, i64 %indvars.iv1395
  store double %599, ptr %600, align 8, !tbaa !14
  %indvars.iv.next1396 = add nuw nsw i64 %indvars.iv1395, 1
  %601 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next1396
  %602 = load double, ptr %601, align 8, !tbaa !14
  %603 = getelementptr inbounds double, ptr %75, i64 %indvars.iv.next1396
  %604 = load double, ptr %603, align 8, !tbaa !14
  %605 = fneg double %604
  %606 = call double @llvm.fmuladd.f64(double %.38931195, double %602, double %605)
  %607 = getelementptr inbounds double, ptr %68, i64 %indvars.iv.next1396
  store double %606, ptr %607, align 8, !tbaa !14
  %indvars.iv.next1396.1 = add nuw nsw i64 %indvars.iv1395, 2
  %exitcond1399.not.1 = icmp eq i64 %indvars.iv.next1396.1, %wide.trip.count1398
  br i1 %exitcond1399.not.1, label %._crit_edge1178, label %.lr.ph1177, !llvm.loop !45

._crit_edge1178:                                  ; preds = %.lr.ph1177.prol.loopexit, %.lr.ph1177, %middle.block1809, %._crit_edge1173.thread, %574
  %608 = load i32, ptr %345, align 8, !tbaa !46
  %.not986 = icmp eq i32 %608, 0
  br i1 %.not986, label %612, label %609

609:                                              ; preds = %._crit_edge1178
  %610 = load ptr, ptr %346, align 8, !tbaa !48
  %611 = call i32 @sp_lusolve(ptr noundef %610, ptr noundef nonnull %347, ptr noundef nonnull %348) #9
  br label %616

612:                                              ; preds = %._crit_edge1178
  call void @eqvec(ptr noundef %68, ptr noundef %71, i32 noundef %5)
  %613 = load ptr, ptr %349, align 8, !tbaa !49
  %614 = load ptr, ptr %350, align 8, !tbaa !50
  %615 = call i32 @lubksb(ptr noundef %613, i32 noundef %5, ptr noundef %614, ptr noundef %71)
  br label %616

616:                                              ; preds = %612, %609
  br i1 %.not9641109, label %._crit_edge1188, label %.lr.ph1183.preheader

.lr.ph1183.preheader:                             ; preds = %616
  br i1 %382, label %.preheader.unr-lcssa, label %.lr.ph1183

.preheader.unr-lcssa:                             ; preds = %.lr.ph1183, %.lr.ph1183.preheader
  %.lcssa1872.ph = phi double [ poison, %.lr.ph1183.preheader ], [ %657, %.lr.ph1183 ]
  %indvars.iv1400.unr = phi i64 [ 1, %.lr.ph1183.preheader ], [ %indvars.iv.next1401.1, %.lr.ph1183 ]
  %.08841180.unr = phi double [ 0.000000e+00, %.lr.ph1183.preheader ], [ %657, %.lr.ph1183 ]
  br i1 %lcmp.mod2028.not, label %.preheader, label %.lr.ph1183.epil

.lr.ph1183.epil:                                  ; preds = %.preheader.unr-lcssa
  %617 = getelementptr inbounds double, ptr %71, i64 %indvars.iv1400.unr
  %618 = load double, ptr %617, align 8, !tbaa !14
  %619 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1400.unr
  %620 = load double, ptr %619, align 8, !tbaa !14
  %621 = fmul double %618, %620
  %622 = call double @llvm.fabs.f64(double %621)
  %623 = fcmp olt double %.08841180.unr, %622
  %624 = select i1 %623, double %622, double %.08841180.unr
  br label %.preheader

.preheader:                                       ; preds = %.preheader.unr-lcssa, %.lr.ph1183.epil
  %.lcssa1872 = phi double [ %.lcssa1872.ph, %.preheader.unr-lcssa ], [ %624, %.lr.ph1183.epil ]
  br i1 %.not9641109, label %._crit_edge1188, label %.lr.ph1187.preheader

.lr.ph1187.preheader:                             ; preds = %.preheader
  %brmerge2215 = select i1 %min.iters.check1791, i1 true, i1 %conflict.rdx
  br i1 %brmerge2215, label %.lr.ph1187.preheader1865, label %vector.body1797

.lr.ph1187.preheader1865:                         ; preds = %.lr.ph1187.preheader, %middle.block1789
  %indvars.iv1405.ph = phi i64 [ 1, %.lr.ph1187.preheader ], [ %ind.end1795, %middle.block1789 ]
  br i1 %lcmp.mod2033.not.not, label %.lr.ph1187.prol, label %.lr.ph1187.prol.loopexit

.lr.ph1187.prol:                                  ; preds = %.lr.ph1187.preheader1865
  %625 = getelementptr inbounds double, ptr %71, i64 %indvars.iv1405.ph
  %626 = load double, ptr %625, align 8, !tbaa !14
  %627 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1405.ph
  %628 = load double, ptr %627, align 8, !tbaa !14
  %629 = fadd double %626, %628
  store double %629, ptr %627, align 8, !tbaa !14
  %630 = getelementptr inbounds double, ptr %65, i64 %indvars.iv1405.ph
  %631 = load double, ptr %630, align 8, !tbaa !14
  %632 = fadd double %629, %631
  %633 = getelementptr inbounds double, ptr %120, i64 %indvars.iv1405.ph
  store double %632, ptr %633, align 8, !tbaa !14
  %indvars.iv.next1406.prol = add nuw nsw i64 %indvars.iv1405.ph, 1
  br label %.lr.ph1187.prol.loopexit

.lr.ph1187.prol.loopexit:                         ; preds = %.lr.ph1187.prol, %.lr.ph1187.preheader1865
  %indvars.iv1405.unr = phi i64 [ %indvars.iv1405.ph, %.lr.ph1187.preheader1865 ], [ %indvars.iv.next1406.prol, %.lr.ph1187.prol ]
  %634 = icmp eq i64 %indvars.iv1405.ph, %384
  br i1 %634, label %._crit_edge1188, label %.lr.ph1187

vector.body1797:                                  ; preds = %.lr.ph1187.preheader, %vector.body1797
  %index1798 = phi i64 [ %index.next1803, %vector.body1797 ], [ 0, %.lr.ph1187.preheader ]
  %offset.idx1799 = or disjoint i64 %index1798, 1
  %635 = getelementptr inbounds double, ptr %71, i64 %offset.idx1799
  %wide.load1800 = load <2 x double>, ptr %635, align 8, !tbaa !14, !alias.scope !51
  %636 = getelementptr inbounds double, ptr %70, i64 %offset.idx1799
  %wide.load1801 = load <2 x double>, ptr %636, align 8, !tbaa !14, !alias.scope !54, !noalias !56
  %637 = fadd <2 x double> %wide.load1800, %wide.load1801
  store <2 x double> %637, ptr %636, align 8, !tbaa !14, !alias.scope !54, !noalias !56
  %638 = getelementptr inbounds double, ptr %65, i64 %offset.idx1799
  %wide.load1802 = load <2 x double>, ptr %638, align 8, !tbaa !14, !alias.scope !58
  %639 = fadd <2 x double> %637, %wide.load1802
  %640 = getelementptr double, ptr %3, i64 %index1798
  store <2 x double> %639, ptr %640, align 8, !tbaa !14
  %index.next1803 = add nuw i64 %index1798, 2
  %641 = icmp eq i64 %index.next1803, %n.vec1794
  br i1 %641, label %middle.block1789, label %vector.body1797, !llvm.loop !59

middle.block1789:                                 ; preds = %vector.body1797
  br i1 %cmp.n1804, label %._crit_edge1188, label %.lr.ph1187.preheader1865

.lr.ph1183:                                       ; preds = %.lr.ph1183.preheader, %.lr.ph1183
  %indvars.iv1400 = phi i64 [ %indvars.iv.next1401.1, %.lr.ph1183 ], [ 1, %.lr.ph1183.preheader ]
  %.08841180 = phi double [ %657, %.lr.ph1183 ], [ 0.000000e+00, %.lr.ph1183.preheader ]
  %niter2031 = phi i64 [ %niter2031.next.1, %.lr.ph1183 ], [ 0, %.lr.ph1183.preheader ]
  %642 = getelementptr inbounds double, ptr %71, i64 %indvars.iv1400
  %643 = load double, ptr %642, align 8, !tbaa !14
  %644 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1400
  %645 = load double, ptr %644, align 8, !tbaa !14
  %646 = fmul double %643, %645
  %647 = call double @llvm.fabs.f64(double %646)
  %648 = fcmp olt double %.08841180, %647
  %649 = select i1 %648, double %647, double %.08841180
  %indvars.iv.next1401 = add nuw nsw i64 %indvars.iv1400, 1
  %650 = getelementptr inbounds double, ptr %71, i64 %indvars.iv.next1401
  %651 = load double, ptr %650, align 8, !tbaa !14
  %652 = getelementptr inbounds double, ptr %67, i64 %indvars.iv.next1401
  %653 = load double, ptr %652, align 8, !tbaa !14
  %654 = fmul double %651, %653
  %655 = call double @llvm.fabs.f64(double %654)
  %656 = fcmp olt double %649, %655
  %657 = select i1 %656, double %655, double %649
  %indvars.iv.next1401.1 = add nuw nsw i64 %indvars.iv1400, 2
  %niter2031.next.1 = add i64 %niter2031, 2
  %niter2031.ncmp.1 = icmp eq i64 %niter2031.next.1, %unroll_iter2030
  br i1 %niter2031.ncmp.1, label %.preheader.unr-lcssa, label %.lr.ph1183, !llvm.loop !60

.lr.ph1187:                                       ; preds = %.lr.ph1187.prol.loopexit, %.lr.ph1187
  %indvars.iv1405 = phi i64 [ %indvars.iv.next1406.1, %.lr.ph1187 ], [ %indvars.iv1405.unr, %.lr.ph1187.prol.loopexit ]
  %658 = getelementptr inbounds double, ptr %71, i64 %indvars.iv1405
  %659 = load double, ptr %658, align 8, !tbaa !14
  %660 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1405
  %661 = load double, ptr %660, align 8, !tbaa !14
  %662 = fadd double %659, %661
  store double %662, ptr %660, align 8, !tbaa !14
  %663 = getelementptr inbounds double, ptr %65, i64 %indvars.iv1405
  %664 = load double, ptr %663, align 8, !tbaa !14
  %665 = fadd double %662, %664
  %666 = getelementptr inbounds double, ptr %120, i64 %indvars.iv1405
  store double %665, ptr %666, align 8, !tbaa !14
  %indvars.iv.next1406 = add nuw nsw i64 %indvars.iv1405, 1
  %667 = getelementptr inbounds double, ptr %71, i64 %indvars.iv.next1406
  %668 = load double, ptr %667, align 8, !tbaa !14
  %669 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1406
  %670 = load double, ptr %669, align 8, !tbaa !14
  %671 = fadd double %668, %670
  store double %671, ptr %669, align 8, !tbaa !14
  %672 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next1406
  %673 = load double, ptr %672, align 8, !tbaa !14
  %674 = fadd double %671, %673
  %675 = getelementptr double, ptr %3, i64 %indvars.iv1405
  store double %674, ptr %675, align 8, !tbaa !14
  %indvars.iv.next1406.1 = add nuw nsw i64 %indvars.iv1405, 2
  %exitcond1409.not.1 = icmp eq i64 %indvars.iv.next1406.1, %wide.trip.count1408
  br i1 %exitcond1409.not.1, label %._crit_edge1188, label %.lr.ph1187, !llvm.loop !61

._crit_edge1188:                                  ; preds = %.lr.ph1187.prol.loopexit, %.lr.ph1187, %middle.block1789, %616, %.preheader
  %.0884.lcssa1484 = phi double [ %.lcssa1872, %.preheader ], [ 0.000000e+00, %616 ], [ %.lcssa1872, %middle.block1789 ], [ %.lcssa1872, %.lr.ph1187 ], [ %.lcssa1872, %.lr.ph1187.prol.loopexit ]
  %676 = fcmp ugt double %.0884.lcssa1484, %.0889.lcssa
  br i1 %676, label %677, label %.preheader1007

677:                                              ; preds = %._crit_edge1188
  %678 = icmp eq i32 %.08551191, 1
  br i1 %678, label %679, label %686

679:                                              ; preds = %677
  %680 = icmp eq i32 %.48121192, 1
  br i1 %680, label %681, label %705

681:                                              ; preds = %679
  %682 = fmul double %.38731190, %.0884.lcssa1484
  %683 = fsub double 1.000000e+00, %.38731190
  %684 = fdiv double %682, %683
  %685 = fcmp ugt double %684, %352
  br i1 %685, label %705, label %.preheader1007

686:                                              ; preds = %677
  %687 = fmul double %.38881189, 9.000000e-01
  %688 = fcmp ogt double %.0884.lcssa1484, %687
  br i1 %688, label %707, label %689

689:                                              ; preds = %686
  %690 = fmul double %.38731190, 9.000000e-01
  %691 = fdiv double %.0884.lcssa1484, %.38881189
  %692 = fcmp olt double %690, %691
  %.995 = select i1 %692, double %691, double %690
  %693 = fmul double %.0884.lcssa1484, %.995
  %694 = fsub double 1.000000e+00, %.995
  %695 = fdiv double %693, %694
  %696 = fcmp ugt double %695, %351
  br i1 %696, label %697, label %.preheader1007

697:                                              ; preds = %689
  %698 = icmp eq i32 %.08551191, 4
  br i1 %698, label %707, label %699

699:                                              ; preds = %697
  %700 = sub nuw nsw i32 4, %.08551191
  %701 = uitofp nneg i32 %700 to double
  %702 = call double @pow(double noundef %.995, double noundef %701) #9
  %703 = fmul double %695, %702
  %704 = fcmp olt double %351, %703
  br i1 %704, label %707, label %705

705:                                              ; preds = %679, %681, %699
  %.4874 = phi double [ %.38731190, %681 ], [ %.995, %699 ], [ 0.000000e+00, %679 ]
  %.5 = phi i32 [ 1, %681 ], [ 1, %699 ], [ 0, %679 ]
  %706 = add nuw nsw i32 %.08551191, 1
  %exitcond1410.not = icmp eq i32 %706, 5
  br i1 %exitcond1410.not, label %.thread, label %.preheader1002, !llvm.loop !62

707:                                              ; preds = %686, %697, %699
  %.5875 = phi double [ %.38731190, %686 ], [ %.995, %697 ], [ %.995, %699 ]
  %708 = icmp eq i32 %.21201, 0
  br i1 %708, label %709, label %717

709:                                              ; preds = %707
  %710 = call i32 %0(double noundef %.0926, ptr noundef nonnull %188, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %711 = icmp eq i32 %710, 1
  br i1 %711, label %712, label %713

712:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %33) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %33, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.12, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 452, ptr noundef nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %33) #9
  br label %1054

713:                                              ; preds = %709
  store i32 0, ptr %23, align 4, !tbaa !18
  %714 = call i32 @numjac(ptr noundef %0, double noundef %.0926, ptr noundef nonnull %66, ptr noundef nonnull %57, ptr noundef nonnull %21, ptr noundef nonnull %22, double noundef 1.000000e-15, i32 noundef %5, ptr noundef nonnull %23, ptr noundef %6, ptr noundef %15)
  %715 = icmp eq i32 %714, 1
  br i1 %715, label %716, label %729

716:                                              ; preds = %713
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %34) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %34, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.8, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 456, ptr noundef nonnull %34) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %34) #9
  br label %1054

717:                                              ; preds = %707
  %718 = fcmp ugt double %.79131193, %8
  br i1 %718, label %720, label %719

719:                                              ; preds = %717
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %35) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %35, ptr noundef nonnull @.str.13, double noundef %.79131193, double noundef %8, double noundef %1, double noundef %2) #9
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %36) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %36, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, ptr noundef nonnull %35) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 464, ptr noundef nonnull %36) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %36) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %35) #9
  br label %1054

720:                                              ; preds = %717
  %721 = fmul double %.79131193, 3.000000e-01
  %722 = fcmp olt double %721, %8
  %723 = select i1 %722, double %8, double %721
  %724 = fmul double %., %723
  %725 = fdiv double %723, %.79131193
  %726 = call i32 @adjust_stepsize(ptr noundef nonnull %78, double noundef %725, i32 noundef %5, i32 noundef %.1864)
  %727 = load double, ptr %424, align 8, !tbaa !14
  %728 = fmul double %724, %727
  br label %729

729:                                              ; preds = %713, %720
  %.8914 = phi double [ %723, %720 ], [ %.79131193, %713 ]
  %.3902 = phi double [ %724, %720 ], [ %509, %713 ]
  %.4894 = phi double [ %728, %720 ], [ %.38931195, %713 ]
  %.4860 = phi i32 [ 0, %720 ], [ %.38591198, %713 ]
  %.4817 = phi i32 [ 0, %720 ], [ %.38161199, %713 ]
  %730 = call i32 @new_linearisation(ptr noundef nonnull %21, double noundef %.4894, i32 noundef %5, ptr noundef %15)
  %731 = icmp eq i32 %730, 1
  br i1 %731, label %732, label %.thread

732:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %37) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %37, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.10, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 477, ptr noundef nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %37) #9
  br label %1054

.thread:                                          ; preds = %705, %729
  %.38881019 = phi double [ %.38881189, %729 ], [ %.0884.lcssa1484, %705 ]
  %.58751000 = phi double [ %.5875, %729 ], [ %.4874, %705 ]
  %.9915 = phi double [ %.8914, %729 ], [ %.79131193, %705 ]
  %.4903 = phi double [ %.3902, %729 ], [ %509, %705 ]
  %.5895 = phi double [ %.4894, %729 ], [ %.38931195, %705 ]
  %.5861 = phi i32 [ %.4860, %729 ], [ %.38591198, %705 ]
  %.5818 = phi i32 [ %.4817, %729 ], [ %.38161199, %705 ]
  %.7 = phi i32 [ 0, %729 ], [ %.5, %705 ]
  %.4 = phi i32 [ 1, %729 ], [ %.21201, %705 ]
  br label %.preheader1004, !llvm.loop !63

.lr.ph1205:                                       ; preds = %.lr.ph1205.preheader, %.lr.ph1205
  %indvars.iv1411 = phi i64 [ %indvars.iv.next1412.1, %.lr.ph1205 ], [ 1, %.lr.ph1205.preheader ]
  %.08831203 = phi double [ %..0883.1, %.lr.ph1205 ], [ 0.000000e+00, %.lr.ph1205.preheader ]
  %niter2040 = phi i64 [ %niter2040.next.1, %.lr.ph1205 ], [ 0, %.lr.ph1205.preheader ]
  %733 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1411
  %734 = load double, ptr %733, align 8, !tbaa !14
  %735 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1411
  %736 = load double, ptr %735, align 8, !tbaa !14
  %737 = fmul double %734, %736
  %738 = call double @llvm.fabs.f64(double %737)
  %739 = fcmp olt double %.08831203, %738
  %..0883 = select i1 %739, double %738, double %.08831203
  %indvars.iv.next1412 = add nuw nsw i64 %indvars.iv1411, 1
  %740 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1412
  %741 = load double, ptr %740, align 8, !tbaa !14
  %742 = getelementptr inbounds double, ptr %67, i64 %indvars.iv.next1412
  %743 = load double, ptr %742, align 8, !tbaa !14
  %744 = fmul double %741, %743
  %745 = call double @llvm.fabs.f64(double %744)
  %746 = fcmp olt double %..0883, %745
  %..0883.1 = select i1 %746, double %745, double %..0883
  %indvars.iv.next1412.1 = add nuw nsw i64 %indvars.iv1411, 2
  %niter2040.next.1 = add i64 %niter2040, 2
  %niter2040.ncmp.1 = icmp eq i64 %niter2040.next.1, %unroll_iter2039
  br i1 %niter2040.ncmp.1, label %._crit_edge1206.unr-lcssa, label %.lr.ph1205, !llvm.loop !64

._crit_edge1206.unr-lcssa:                        ; preds = %.lr.ph1205, %.lr.ph1205.preheader
  %..0883.lcssa.ph = phi double [ poison, %.lr.ph1205.preheader ], [ %..0883.1, %.lr.ph1205 ]
  %indvars.iv1411.unr = phi i64 [ 1, %.lr.ph1205.preheader ], [ %indvars.iv.next1412.1, %.lr.ph1205 ]
  %.08831203.unr = phi double [ 0.000000e+00, %.lr.ph1205.preheader ], [ %..0883.1, %.lr.ph1205 ]
  br i1 %lcmp.mod2037.not, label %._crit_edge1206, label %.lr.ph1205.epil

.lr.ph1205.epil:                                  ; preds = %._crit_edge1206.unr-lcssa
  %747 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1411.unr
  %748 = load double, ptr %747, align 8, !tbaa !14
  %749 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1411.unr
  %750 = load double, ptr %749, align 8, !tbaa !14
  %751 = fmul double %748, %750
  %752 = call double @llvm.fabs.f64(double %751)
  %753 = fcmp olt double %.08831203.unr, %752
  %..0883.epil = select i1 %753, double %752, double %.08831203.unr
  br label %._crit_edge1206

._crit_edge1206:                                  ; preds = %._crit_edge1206.unr-lcssa, %.lr.ph1205.epil
  %..0883.lcssa = phi double [ %..0883.lcssa.ph, %._crit_edge1206.unr-lcssa ], [ %..0883.epil, %.lr.ph1205.epil ]
  %754 = getelementptr inbounds [5 x double], ptr %20, i64 0, i64 %423
  %755 = load double, ptr %754, align 8, !tbaa !14
  %756 = fmul double %..0883.lcssa, %755
  %757 = fcmp ogt double %756, %7
  br i1 %757, label %762, label %855

._crit_edge1206.thread:                           ; preds = %.preheader1007
  %758 = getelementptr inbounds [5 x double], ptr %20, i64 0, i64 %423
  %759 = load double, ptr %758, align 8, !tbaa !14
  %760 = fmul double %759, 0.000000e+00
  %761 = fcmp ogt double %760, %7
  br i1 %761, label %762, label %.preheader1011

762:                                              ; preds = %._crit_edge1206.thread, %._crit_edge1206
  %763 = phi double [ %760, %._crit_edge1206.thread ], [ %756, %._crit_edge1206 ]
  %764 = fcmp ugt double %.79131193, %8
  br i1 %764, label %766, label %765

765:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %38) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %38, ptr noundef nonnull @.str.13, double noundef %.79131193, double noundef %8, double noundef %1, double noundef %2) #9
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %39) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %39, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, ptr noundef nonnull %38) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 495, ptr noundef nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %38) #9
  br label %1054

766:                                              ; preds = %762
  br i1 %421, label %767, label %839

767:                                              ; preds = %766
  %768 = fdiv double %7, %763
  %769 = sitofp i32 %425 to double
  %770 = fdiv double 1.000000e+00, %769
  %771 = call double @pow(double noundef %768, double noundef %770) #9
  %772 = fmul double %771, 0x3FEAA7EF9DB22D0E
  %773 = fcmp ogt double %772, 1.000000e-01
  br i1 %773, label %774, label %777

774:                                              ; preds = %767
  %775 = call double @pow(double noundef %768, double noundef %770) #9
  %776 = fmul double %775, 0x3FEAA7EF9DB22D0E
  br label %777

777:                                              ; preds = %767, %774
  %778 = phi double [ %776, %774 ], [ 1.000000e-01, %767 ]
  %779 = fmul double %.79131193, %778
  %780 = icmp sgt i32 %.1864, 1
  br i1 %780, label %.preheader1006, label %841

.preheader1006:                                   ; preds = %777
  br i1 %.not9641109, label %._crit_edge1212, label %.lr.ph1211

.lr.ph1211:                                       ; preds = %.preheader1006
  %781 = zext nneg i32 %.1864 to i64
  br i1 %386, label %._crit_edge1212.loopexit.unr-lcssa, label %.lr.ph1211.new

.lr.ph1211.new:                                   ; preds = %.lr.ph1211, %.lr.ph1211.new
  %indvars.iv1416 = phi i64 [ %indvars.iv.next1417.1, %.lr.ph1211.new ], [ 1, %.lr.ph1211 ]
  %.08771209 = phi double [ %..0877.1, %.lr.ph1211.new ], [ 0.000000e+00, %.lr.ph1211 ]
  %niter2047 = phi i64 [ %niter2047.next.1, %.lr.ph1211.new ], [ 0, %.lr.ph1211 ]
  %782 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1416
  %783 = load ptr, ptr %782, align 8, !tbaa !5
  %784 = getelementptr inbounds double, ptr %783, i64 %781
  %785 = load double, ptr %784, align 8, !tbaa !14
  %786 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1416
  %787 = load double, ptr %786, align 8, !tbaa !14
  %788 = fadd double %785, %787
  %789 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1416
  %790 = load double, ptr %789, align 8, !tbaa !14
  %791 = fmul double %788, %790
  %792 = call double @llvm.fabs.f64(double %791)
  %793 = fcmp olt double %.08771209, %792
  %..0877 = select i1 %793, double %792, double %.08771209
  %indvars.iv.next1417 = add nuw nsw i64 %indvars.iv1416, 1
  %794 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1417
  %795 = load ptr, ptr %794, align 8, !tbaa !5
  %796 = getelementptr inbounds double, ptr %795, i64 %781
  %797 = load double, ptr %796, align 8, !tbaa !14
  %798 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1417
  %799 = load double, ptr %798, align 8, !tbaa !14
  %800 = fadd double %797, %799
  %801 = getelementptr inbounds double, ptr %67, i64 %indvars.iv.next1417
  %802 = load double, ptr %801, align 8, !tbaa !14
  %803 = fmul double %800, %802
  %804 = call double @llvm.fabs.f64(double %803)
  %805 = fcmp olt double %..0877, %804
  %..0877.1 = select i1 %805, double %804, double %..0877
  %indvars.iv.next1417.1 = add nuw nsw i64 %indvars.iv1416, 2
  %niter2047.next.1 = add i64 %niter2047, 2
  %niter2047.ncmp.1 = icmp eq i64 %niter2047.next.1, %unroll_iter2046
  br i1 %niter2047.ncmp.1, label %._crit_edge1212.loopexit.unr-lcssa, label %.lr.ph1211.new, !llvm.loop !65

._crit_edge1212.loopexit.unr-lcssa:               ; preds = %.lr.ph1211.new, %.lr.ph1211
  %..0877.lcssa.ph = phi double [ poison, %.lr.ph1211 ], [ %..0877.1, %.lr.ph1211.new ]
  %indvars.iv1416.unr = phi i64 [ 1, %.lr.ph1211 ], [ %indvars.iv.next1417.1, %.lr.ph1211.new ]
  %.08771209.unr = phi double [ 0.000000e+00, %.lr.ph1211 ], [ %..0877.1, %.lr.ph1211.new ]
  br i1 %lcmp.mod2044.not, label %._crit_edge1212, label %._crit_edge1212.loopexit.epilog-lcssa

._crit_edge1212.loopexit.epilog-lcssa:            ; preds = %._crit_edge1212.loopexit.unr-lcssa
  %806 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1416.unr
  %807 = load ptr, ptr %806, align 8, !tbaa !5
  %808 = getelementptr inbounds double, ptr %807, i64 %781
  %809 = load double, ptr %808, align 8, !tbaa !14
  %810 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1416.unr
  %811 = load double, ptr %810, align 8, !tbaa !14
  %812 = fadd double %809, %811
  %813 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1416.unr
  %814 = load double, ptr %813, align 8, !tbaa !14
  %815 = fmul double %812, %814
  %816 = call double @llvm.fabs.f64(double %815)
  %817 = fcmp olt double %.08771209.unr, %816
  %..0877.epil = select i1 %817, double %816, double %.08771209.unr
  br label %._crit_edge1212

._crit_edge1212:                                  ; preds = %._crit_edge1212.loopexit.epilog-lcssa, %._crit_edge1212.loopexit.unr-lcssa, %.preheader1006
  %.0877.lcssa = phi double [ 0.000000e+00, %.preheader1006 ], [ %..0877.lcssa.ph, %._crit_edge1212.loopexit.unr-lcssa ], [ %..0877.epil, %._crit_edge1212.loopexit.epilog-lcssa ]
  %818 = add nsw i32 %.1864, -2
  %819 = zext nneg i32 %818 to i64
  %820 = getelementptr inbounds [5 x double], ptr %20, i64 0, i64 %819
  %821 = load double, ptr %820, align 8, !tbaa !14
  %822 = fmul double %.0877.lcssa, %821
  %823 = fdiv double %7, %822
  %824 = uitofp nneg i32 %.1864 to double
  %825 = fdiv double 1.000000e+00, %824
  %826 = call double @pow(double noundef %823, double noundef %825) #9
  %827 = fmul double %826, 7.690000e-01
  %828 = fcmp ogt double %827, 1.000000e-01
  br i1 %828, label %829, label %832

829:                                              ; preds = %._crit_edge1212
  %830 = call double @pow(double noundef %823, double noundef %825) #9
  %831 = fmul double %830, 7.690000e-01
  br label %832

832:                                              ; preds = %._crit_edge1212, %829
  %833 = phi double [ %831, %829 ], [ 1.000000e-01, %._crit_edge1212 ]
  %834 = fmul double %.79131193, %833
  %835 = fcmp ogt double %834, %779
  br i1 %835, label %836, label %841

836:                                              ; preds = %832
  %837 = fcmp olt double %.79131193, %834
  %838 = select i1 %837, double %.79131193, double %834
  %.pre1469 = add nsw i32 %.1864, -2
  %.pre = sext i32 %.pre1469 to i64
  br label %841

839:                                              ; preds = %766
  %840 = fmul double %.79131193, 5.000000e-01
  br label %841

841:                                              ; preds = %777, %836, %832, %839
  %.sink1629 = phi double [ %840, %839 ], [ %779, %832 ], [ %838, %836 ], [ %779, %777 ]
  %.pre-phi1468 = phi i64 [ %423, %839 ], [ %423, %832 ], [ %.pre, %836 ], [ %423, %777 ]
  %.3866 = phi i32 [ %.1864, %839 ], [ %.1864, %832 ], [ %422, %836 ], [ %.1864, %777 ]
  %842 = fcmp ogt double %.sink1629, %8
  %843 = select i1 %842, double %.sink1629, double %8
  %844 = fmul double %., %843
  %845 = fdiv double %843, %.79131193
  %846 = call i32 @adjust_stepsize(ptr noundef nonnull %78, double noundef %845, i32 noundef %5, i32 noundef %.3866)
  %847 = getelementptr inbounds [5 x double], ptr %19, i64 0, i64 %.pre-phi1468
  %848 = load double, ptr %847, align 8, !tbaa !14
  %849 = fmul double %844, %848
  %850 = call i32 @new_linearisation(ptr noundef nonnull %21, double noundef %849, i32 noundef %5, ptr noundef %15)
  %851 = icmp eq i32 %850, 1
  br i1 %851, label %852, label %853

852:                                              ; preds = %841
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %40) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %40, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.10, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 526, ptr noundef nonnull %40) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %40) #9
  br label %1054

853:                                              ; preds = %841
  %854 = fcmp olt double %843, %.79131193
  %.6819 = select i1 %854, i32 0, i32 %.38161199
  br label %420

855:                                              ; preds = %._crit_edge1206
  br i1 %.not9641109, label %.preheader1011, label %.lr.ph1217

.lr.ph1217:                                       ; preds = %855
  %856 = sext i32 %.1864 to i64
  br i1 %387, label %.preheader1011.loopexit.unr-lcssa, label %.lr.ph1217.new

.preheader1011.loopexit.unr-lcssa:                ; preds = %.lr.ph1217.new, %.lr.ph1217
  %indvars.iv1421.unr = phi i64 [ 1, %.lr.ph1217 ], [ %indvars.iv.next1422.1, %.lr.ph1217.new ]
  br i1 %lcmp.mod2051.not, label %.preheader1011, label %.preheader1011.loopexit.epilog-lcssa

.preheader1011.loopexit.epilog-lcssa:             ; preds = %.preheader1011.loopexit.unr-lcssa
  %857 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1421.unr
  %858 = load double, ptr %857, align 8, !tbaa !14
  %859 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1421.unr
  %860 = load ptr, ptr %859, align 8, !tbaa !5
  %861 = getelementptr double, ptr %860, i64 %856
  %862 = getelementptr i8, ptr %861, i64 8
  %863 = load double, ptr %862, align 8, !tbaa !14
  %864 = fsub double %858, %863
  %865 = getelementptr i8, ptr %861, i64 16
  store double %864, ptr %865, align 8, !tbaa !14
  %866 = load double, ptr %857, align 8, !tbaa !14
  store double %866, ptr %862, align 8, !tbaa !14
  br label %.preheader1011

.preheader1011:                                   ; preds = %._crit_edge1206.thread, %.preheader1011.loopexit.epilog-lcssa, %.preheader1011.loopexit.unr-lcssa, %855
  %867 = phi double [ %756, %855 ], [ %756, %.preheader1011.loopexit.unr-lcssa ], [ %756, %.preheader1011.loopexit.epilog-lcssa ], [ %760, %._crit_edge1206.thread ]
  %868 = icmp slt i32 %.1864, 1
  %brmerge = or i1 %868, %.not9641109
  br i1 %brmerge, label %.preheader1010, label %.preheader1005.preheader

.preheader1005.preheader:                         ; preds = %.preheader1011
  %869 = zext nneg i32 %.1864 to i64
  br label %.preheader1005

.lr.ph1217.new:                                   ; preds = %.lr.ph1217, %.lr.ph1217.new
  %indvars.iv1421 = phi i64 [ %indvars.iv.next1422.1, %.lr.ph1217.new ], [ 1, %.lr.ph1217 ]
  %niter2053 = phi i64 [ %niter2053.next.1, %.lr.ph1217.new ], [ 0, %.lr.ph1217 ]
  %870 = getelementptr inbounds double, ptr %70, i64 %indvars.iv1421
  %871 = load double, ptr %870, align 8, !tbaa !14
  %872 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1421
  %873 = load ptr, ptr %872, align 8, !tbaa !5
  %874 = getelementptr double, ptr %873, i64 %856
  %875 = getelementptr i8, ptr %874, i64 8
  %876 = load double, ptr %875, align 8, !tbaa !14
  %877 = fsub double %871, %876
  %878 = getelementptr i8, ptr %874, i64 16
  store double %877, ptr %878, align 8, !tbaa !14
  %879 = load double, ptr %870, align 8, !tbaa !14
  store double %879, ptr %875, align 8, !tbaa !14
  %indvars.iv.next1422 = add nuw nsw i64 %indvars.iv1421, 1
  %880 = getelementptr inbounds double, ptr %70, i64 %indvars.iv.next1422
  %881 = load double, ptr %880, align 8, !tbaa !14
  %882 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1422
  %883 = load ptr, ptr %882, align 8, !tbaa !5
  %884 = getelementptr double, ptr %883, i64 %856
  %885 = getelementptr i8, ptr %884, i64 8
  %886 = load double, ptr %885, align 8, !tbaa !14
  %887 = fsub double %881, %886
  %888 = getelementptr i8, ptr %884, i64 16
  store double %887, ptr %888, align 8, !tbaa !14
  %889 = load double, ptr %880, align 8, !tbaa !14
  store double %889, ptr %885, align 8, !tbaa !14
  %indvars.iv.next1422.1 = add nuw nsw i64 %indvars.iv1421, 2
  %niter2053.next.1 = add i64 %niter2053, 2
  %niter2053.ncmp.1 = icmp eq i64 %niter2053.next.1, %unroll_iter2052
  br i1 %niter2053.ncmp.1, label %.preheader1011.loopexit.unr-lcssa, label %.lr.ph1217.new, !llvm.loop !66

.preheader1010:                                   ; preds = %._crit_edge1221, %.preheader1011
  %890 = icmp slt i32 %.1852, %12
  br i1 %890, label %.lr.ph1224.preheader, label %.critedge

.lr.ph1224.preheader:                             ; preds = %.preheader1010
  %891 = sext i32 %.1852 to i64
  br label %.lr.ph1224

.preheader1005:                                   ; preds = %.preheader1005.preheader, %._crit_edge1221
  %indvars.iv1431 = phi i64 [ %869, %.preheader1005.preheader ], [ %indvars.iv.next1432, %._crit_edge1221 ]
  br i1 %388, label %._crit_edge1221.unr-lcssa, label %.preheader1005.new

.preheader1005.new:                               ; preds = %.preheader1005, %.preheader1005.new
  %indvars.iv1426 = phi i64 [ %indvars.iv.next1427.1, %.preheader1005.new ], [ 1, %.preheader1005 ]
  %niter2059 = phi i64 [ %niter2059.next.1, %.preheader1005.new ], [ 0, %.preheader1005 ]
  %892 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1426
  %893 = load ptr, ptr %892, align 8, !tbaa !5
  %894 = getelementptr inbounds double, ptr %893, i64 %indvars.iv1431
  %895 = getelementptr inbounds i8, ptr %894, i64 8
  %896 = load double, ptr %895, align 8, !tbaa !14
  %897 = load double, ptr %894, align 8, !tbaa !14
  %898 = fadd double %896, %897
  store double %898, ptr %894, align 8, !tbaa !14
  %gep2212 = getelementptr inbounds ptr, ptr %invariant.gep2211, i64 %indvars.iv1426
  %899 = load ptr, ptr %gep2212, align 8, !tbaa !5
  %900 = getelementptr inbounds double, ptr %899, i64 %indvars.iv1431
  %901 = getelementptr inbounds i8, ptr %900, i64 8
  %902 = load double, ptr %901, align 8, !tbaa !14
  %903 = load double, ptr %900, align 8, !tbaa !14
  %904 = fadd double %902, %903
  store double %904, ptr %900, align 8, !tbaa !14
  %indvars.iv.next1427.1 = add nuw nsw i64 %indvars.iv1426, 2
  %niter2059.next.1 = add i64 %niter2059, 2
  %niter2059.ncmp.1 = icmp eq i64 %niter2059.next.1, %unroll_iter2058
  br i1 %niter2059.ncmp.1, label %._crit_edge1221.unr-lcssa, label %.preheader1005.new, !llvm.loop !67

._crit_edge1221.unr-lcssa:                        ; preds = %.preheader1005.new, %.preheader1005
  %indvars.iv1426.unr = phi i64 [ 1, %.preheader1005 ], [ %indvars.iv.next1427.1, %.preheader1005.new ]
  br i1 %lcmp.mod2057.not, label %._crit_edge1221, label %._crit_edge1221.epilog-lcssa

._crit_edge1221.epilog-lcssa:                     ; preds = %._crit_edge1221.unr-lcssa
  %905 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1426.unr
  %906 = load ptr, ptr %905, align 8, !tbaa !5
  %907 = getelementptr inbounds double, ptr %906, i64 %indvars.iv1431
  %908 = getelementptr inbounds i8, ptr %907, i64 8
  %909 = load double, ptr %908, align 8, !tbaa !14
  %910 = load double, ptr %907, align 8, !tbaa !14
  %911 = fadd double %909, %910
  store double %911, ptr %907, align 8, !tbaa !14
  br label %._crit_edge1221

._crit_edge1221:                                  ; preds = %._crit_edge1221.unr-lcssa, %._crit_edge1221.epilog-lcssa
  %indvars.iv.next1432 = add nsw i64 %indvars.iv1431, -1
  %912 = icmp sgt i64 %indvars.iv1431, 1
  br i1 %912, label %.preheader1005, label %.preheader1010, !llvm.loop !68

.lr.ph1224:                                       ; preds = %.lr.ph1224.preheader, %931
  %indvars.iv1434 = phi i64 [ %891, %.lr.ph1224.preheader ], [ %indvars.iv.next1435, %931 ]
  %913 = getelementptr inbounds double, ptr %11, i64 %indvars.iv1434
  %914 = load double, ptr %913, align 8, !tbaa !14
  %915 = fsub double %.392414711481, %914
  %916 = fmul double %., %915
  %917 = fcmp ult double %916, 0.000000e+00
  %918 = trunc nsw i64 %indvars.iv1434 to i32
  br i1 %917, label %.critedge, label %919

919:                                              ; preds = %.lr.ph1224
  %920 = fcmp oeq double %.392414711481, %914
  br i1 %920, label %921, label %925

921:                                              ; preds = %919
  %922 = call i32 %13(double noundef %914, ptr noundef %3, ptr noundef nonnull %189, i32 noundef %918, ptr noundef %6, ptr noundef %15) #9
  %923 = icmp eq i32 %922, 1
  br i1 %923, label %924, label %931

924:                                              ; preds = %921
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %41) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %41, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.16, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 552, ptr noundef nonnull %41) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %41) #9
  br label %1054

925:                                              ; preds = %919
  %926 = call i32 @interp_from_dif(double noundef %914, double noundef %.392414711481, ptr noundef nonnull %120, double noundef %509, ptr noundef nonnull %78, i32 noundef %.1864, ptr noundef %72, ptr noundef %73, ptr noundef %74, ptr noundef %77, i32 noundef %5, i32 noundef 2)
  %927 = load double, ptr %913, align 8, !tbaa !14
  %928 = call i32 %13(double noundef %927, ptr noundef nonnull %353, ptr noundef nonnull %354, i32 noundef %918, ptr noundef %6, ptr noundef %15) #9
  %929 = icmp eq i32 %928, 1
  br i1 %929, label %930, label %931

930:                                              ; preds = %925
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %42) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %42, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.17, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 568, ptr noundef nonnull %42) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %42) #9
  br label %1054

931:                                              ; preds = %925, %921
  %indvars.iv.next1435 = add nsw i64 %indvars.iv1434, 1
  %exitcond1437.not = icmp eq i64 %indvars.iv.next1435, %359
  br i1 %exitcond1437.not, label %.critedge, label %.lr.ph1224, !llvm.loop !69

.critedge:                                        ; preds = %.lr.ph1224, %931, %.preheader1010
  %.2853.lcssa = phi i32 [ %.1852, %.preheader1010 ], [ %12, %931 ], [ %918, %.lr.ph1224 ]
  %932 = icmp eq i32 %.38161199, 1
  br i1 %932, label %1042, label %933

933:                                              ; preds = %.critedge
  %934 = call i32 @llvm.smin.i32(i32 %.38591198, i32 6)
  %935 = add nsw i32 %934, 1
  %936 = add nsw i32 %.1864, 2
  %.not973 = icmp slt i32 %935, %936
  br i1 %.not973, label %1033, label %937

937:                                              ; preds = %933
  %938 = fdiv double %867, %7
  %939 = sitofp i32 %.1864 to double
  %940 = fadd double %939, 1.000000e+00
  %941 = fdiv double 1.000000e+00, %940
  %942 = call double @pow(double noundef %938, double noundef %941) #9
  %943 = fmul double %942, 1.200000e+00
  %944 = fcmp ogt double %943, 1.000000e-01
  %945 = fdiv double %.79131193, %943
  %946 = fmul double %.79131193, 1.000000e+01
  %.1880 = select i1 %944, double %945, double %946
  %947 = icmp sgt i32 %.1864, 1
  br i1 %947, label %.preheader1009, label %.preheader1008

.preheader1009:                                   ; preds = %937
  br i1 %.not9641109, label %._crit_edge1232, label %.lr.ph1231

.lr.ph1231:                                       ; preds = %.preheader1009
  %948 = zext nneg i32 %.1864 to i64
  br i1 %389, label %._crit_edge1232.loopexit.unr-lcssa, label %.lr.ph1231.new

.lr.ph1231.new:                                   ; preds = %.lr.ph1231, %.lr.ph1231.new
  %indvars.iv1438 = phi i64 [ %indvars.iv.next1439.1, %.lr.ph1231.new ], [ 1, %.lr.ph1231 ]
  %.18781229 = phi double [ %..1878.1, %.lr.ph1231.new ], [ 0.000000e+00, %.lr.ph1231 ]
  %niter2066 = phi i64 [ %niter2066.next.1, %.lr.ph1231.new ], [ 0, %.lr.ph1231 ]
  %949 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1438
  %950 = load ptr, ptr %949, align 8, !tbaa !5
  %951 = getelementptr inbounds double, ptr %950, i64 %948
  %952 = load double, ptr %951, align 8, !tbaa !14
  %953 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1438
  %954 = load double, ptr %953, align 8, !tbaa !14
  %955 = fmul double %952, %954
  %956 = call double @llvm.fabs.f64(double %955)
  %957 = fcmp olt double %.18781229, %956
  %..1878 = select i1 %957, double %956, double %.18781229
  %indvars.iv.next1439 = add nuw nsw i64 %indvars.iv1438, 1
  %958 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1439
  %959 = load ptr, ptr %958, align 8, !tbaa !5
  %960 = getelementptr inbounds double, ptr %959, i64 %948
  %961 = load double, ptr %960, align 8, !tbaa !14
  %962 = getelementptr inbounds double, ptr %67, i64 %indvars.iv.next1439
  %963 = load double, ptr %962, align 8, !tbaa !14
  %964 = fmul double %961, %963
  %965 = call double @llvm.fabs.f64(double %964)
  %966 = fcmp olt double %..1878, %965
  %..1878.1 = select i1 %966, double %965, double %..1878
  %indvars.iv.next1439.1 = add nuw nsw i64 %indvars.iv1438, 2
  %niter2066.next.1 = add i64 %niter2066, 2
  %niter2066.ncmp.1 = icmp eq i64 %niter2066.next.1, %unroll_iter2065
  br i1 %niter2066.ncmp.1, label %._crit_edge1232.loopexit.unr-lcssa, label %.lr.ph1231.new, !llvm.loop !70

._crit_edge1232.loopexit.unr-lcssa:               ; preds = %.lr.ph1231.new, %.lr.ph1231
  %..1878.lcssa.ph = phi double [ poison, %.lr.ph1231 ], [ %..1878.1, %.lr.ph1231.new ]
  %indvars.iv1438.unr = phi i64 [ 1, %.lr.ph1231 ], [ %indvars.iv.next1439.1, %.lr.ph1231.new ]
  %.18781229.unr = phi double [ 0.000000e+00, %.lr.ph1231 ], [ %..1878.1, %.lr.ph1231.new ]
  br i1 %lcmp.mod2063.not, label %._crit_edge1232, label %._crit_edge1232.loopexit.epilog-lcssa

._crit_edge1232.loopexit.epilog-lcssa:            ; preds = %._crit_edge1232.loopexit.unr-lcssa
  %967 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1438.unr
  %968 = load ptr, ptr %967, align 8, !tbaa !5
  %969 = getelementptr inbounds double, ptr %968, i64 %948
  %970 = load double, ptr %969, align 8, !tbaa !14
  %971 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1438.unr
  %972 = load double, ptr %971, align 8, !tbaa !14
  %973 = fmul double %970, %972
  %974 = call double @llvm.fabs.f64(double %973)
  %975 = fcmp olt double %.18781229.unr, %974
  %..1878.epil = select i1 %975, double %974, double %.18781229.unr
  br label %._crit_edge1232

._crit_edge1232:                                  ; preds = %._crit_edge1232.loopexit.epilog-lcssa, %._crit_edge1232.loopexit.unr-lcssa, %.preheader1009
  %.1878.lcssa = phi double [ 0.000000e+00, %.preheader1009 ], [ %..1878.lcssa.ph, %._crit_edge1232.loopexit.unr-lcssa ], [ %..1878.epil, %._crit_edge1232.loopexit.epilog-lcssa ]
  %976 = add nsw i32 %.1864, -2
  %977 = zext nneg i32 %976 to i64
  %978 = getelementptr inbounds [5 x double], ptr %20, i64 0, i64 %977
  %979 = load double, ptr %978, align 8, !tbaa !14
  %980 = fmul double %.1878.lcssa, %979
  %981 = fdiv double %980, %7
  %982 = fdiv double 1.000000e+00, %939
  %983 = call double @pow(double noundef %981, double noundef %982) #9
  %984 = fmul double %983, 1.300000e+00
  %985 = fcmp ogt double %984, 1.000000e-01
  %986 = fdiv double %.79131193, %984
  %.0876 = select i1 %985, double %986, double %946
  %987 = fcmp ogt double %.0876, %.1880
  %.2881 = select i1 %987, double %.0876, double %.1880
  %.0849 = select i1 %987, i32 %422, i32 %.1864
  %988 = icmp slt i32 %.1864, 5
  br i1 %988, label %.preheader1008, label %1030

.preheader1008:                                   ; preds = %937, %._crit_edge1232
  %.08491512 = phi i32 [ %.0849, %._crit_edge1232 ], [ %.1864, %937 ]
  %.28811511 = phi double [ %.2881, %._crit_edge1232 ], [ %.1880, %937 ]
  br i1 %.not9641109, label %._crit_edge1238, label %.lr.ph1237

.lr.ph1237:                                       ; preds = %.preheader1008
  %989 = sext i32 %936 to i64
  br i1 %390, label %._crit_edge1238.loopexit.unr-lcssa, label %.lr.ph1237.new

.lr.ph1237.new:                                   ; preds = %.lr.ph1237, %.lr.ph1237.new
  %indvars.iv1443 = phi i64 [ %indvars.iv.next1444.1, %.lr.ph1237.new ], [ 1, %.lr.ph1237 ]
  %.08691235 = phi double [ %..0869.1, %.lr.ph1237.new ], [ 0.000000e+00, %.lr.ph1237 ]
  %niter2073 = phi i64 [ %niter2073.next.1, %.lr.ph1237.new ], [ 0, %.lr.ph1237 ]
  %990 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1443
  %991 = load ptr, ptr %990, align 8, !tbaa !5
  %992 = getelementptr inbounds double, ptr %991, i64 %989
  %993 = load double, ptr %992, align 8, !tbaa !14
  %994 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1443
  %995 = load double, ptr %994, align 8, !tbaa !14
  %996 = fmul double %993, %995
  %997 = call double @llvm.fabs.f64(double %996)
  %998 = fcmp olt double %.08691235, %997
  %..0869 = select i1 %998, double %997, double %.08691235
  %indvars.iv.next1444 = add nuw nsw i64 %indvars.iv1443, 1
  %999 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv.next1444
  %1000 = load ptr, ptr %999, align 8, !tbaa !5
  %1001 = getelementptr inbounds double, ptr %1000, i64 %989
  %1002 = load double, ptr %1001, align 8, !tbaa !14
  %1003 = getelementptr inbounds double, ptr %67, i64 %indvars.iv.next1444
  %1004 = load double, ptr %1003, align 8, !tbaa !14
  %1005 = fmul double %1002, %1004
  %1006 = call double @llvm.fabs.f64(double %1005)
  %1007 = fcmp olt double %..0869, %1006
  %..0869.1 = select i1 %1007, double %1006, double %..0869
  %indvars.iv.next1444.1 = add nuw nsw i64 %indvars.iv1443, 2
  %niter2073.next.1 = add i64 %niter2073, 2
  %niter2073.ncmp.1 = icmp eq i64 %niter2073.next.1, %unroll_iter2072
  br i1 %niter2073.ncmp.1, label %._crit_edge1238.loopexit.unr-lcssa, label %.lr.ph1237.new, !llvm.loop !71

._crit_edge1238.loopexit.unr-lcssa:               ; preds = %.lr.ph1237.new, %.lr.ph1237
  %..0869.lcssa.ph = phi double [ poison, %.lr.ph1237 ], [ %..0869.1, %.lr.ph1237.new ]
  %indvars.iv1443.unr = phi i64 [ 1, %.lr.ph1237 ], [ %indvars.iv.next1444.1, %.lr.ph1237.new ]
  %.08691235.unr = phi double [ 0.000000e+00, %.lr.ph1237 ], [ %..0869.1, %.lr.ph1237.new ]
  br i1 %lcmp.mod2070.not, label %._crit_edge1238, label %._crit_edge1238.loopexit.epilog-lcssa

._crit_edge1238.loopexit.epilog-lcssa:            ; preds = %._crit_edge1238.loopexit.unr-lcssa
  %1008 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv1443.unr
  %1009 = load ptr, ptr %1008, align 8, !tbaa !5
  %1010 = getelementptr inbounds double, ptr %1009, i64 %989
  %1011 = load double, ptr %1010, align 8, !tbaa !14
  %1012 = getelementptr inbounds double, ptr %67, i64 %indvars.iv1443.unr
  %1013 = load double, ptr %1012, align 8, !tbaa !14
  %1014 = fmul double %1011, %1013
  %1015 = call double @llvm.fabs.f64(double %1014)
  %1016 = fcmp olt double %.08691235.unr, %1015
  %..0869.epil = select i1 %1016, double %1015, double %.08691235.unr
  br label %._crit_edge1238

._crit_edge1238:                                  ; preds = %._crit_edge1238.loopexit.epilog-lcssa, %._crit_edge1238.loopexit.unr-lcssa, %.preheader1008
  %.0869.lcssa = phi double [ 0.000000e+00, %.preheader1008 ], [ %..0869.lcssa.ph, %._crit_edge1238.loopexit.unr-lcssa ], [ %..0869.epil, %._crit_edge1238.loopexit.epilog-lcssa ]
  %1017 = sext i32 %.1864 to i64
  %1018 = getelementptr inbounds [5 x double], ptr %20, i64 0, i64 %1017
  %1019 = load double, ptr %1018, align 8, !tbaa !14
  %1020 = fmul double %.0869.lcssa, %1019
  %1021 = fdiv double %1020, %7
  %1022 = fadd double %939, 2.000000e+00
  %1023 = fdiv double 1.000000e+00, %1022
  %1024 = call double @pow(double noundef %1021, double noundef %1023) #9
  %1025 = fmul double %1024, 1.400000e+00
  %1026 = fcmp ogt double %1025, 1.000000e-01
  %1027 = fdiv double %.79131193, %1025
  %.0868 = select i1 %1026, double %1027, double %946
  %1028 = fcmp ogt double %.0868, %.28811511
  br i1 %1028, label %1029, label %1030

1029:                                             ; preds = %._crit_edge1238
  br label %1030

1030:                                             ; preds = %._crit_edge1238, %1029, %._crit_edge1232
  %.3882 = phi double [ %.0868, %1029 ], [ %.28811511, %._crit_edge1238 ], [ %.2881, %._crit_edge1232 ]
  %.1850 = phi i32 [ %425, %1029 ], [ %.08491512, %._crit_edge1238 ], [ %.0849, %._crit_edge1232 ]
  %1031 = fcmp ogt double %.3882, %.79131193
  br i1 %1031, label %1032, label %1033

1032:                                             ; preds = %1030
  br label %1033

1033:                                             ; preds = %1032, %1030, %933
  %.11917 = phi double [ %.79131193, %1030 ], [ %.79131193, %933 ], [ %.3882, %1032 ]
  %.4867 = phi i32 [ %.1864, %1030 ], [ %.1864, %933 ], [ %.1850, %1032 ]
  call void @eqvec(ptr noundef nonnull %120, ptr noundef nonnull %66, i32 noundef %5)
  br i1 %.not977, label %.backedge, label %1034

1034:                                             ; preds = %1033
  %1035 = call i32 %0(double noundef %.392414711481, ptr noundef %3, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %1036 = icmp eq i32 %1035, 1
  br i1 %1036, label %1037, label %1038

1037:                                             ; preds = %1034
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %43) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %43, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.18, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 644, ptr noundef nonnull %43) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %43) #9
  br label %1054

1038:                                             ; preds = %1034
  %1039 = call i32 %14(double noundef %.392414711481, ptr noundef %3, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %1040 = icmp eq i32 %1039, 1
  br i1 %1040, label %1041, label %.backedge

.backedge:                                        ; preds = %1038, %1033
  br label %391, !llvm.loop !72

1041:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %44) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %44, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.19, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 648, ptr noundef nonnull %44) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %44) #9
  br label %1054

1042:                                             ; preds = %.critedge
  %1043 = call i32 %0(double noundef %.392414711481, ptr noundef %3, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %1044 = icmp eq i32 %1043, 1
  br i1 %1044, label %1045, label %1046

1045:                                             ; preds = %1042
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %45) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %45, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.18, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 663, ptr noundef nonnull %45) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %45) #9
  br label %1054

1046:                                             ; preds = %1042
  br i1 %.not977, label %1051, label %1047

1047:                                             ; preds = %1046
  %1048 = call i32 %14(double noundef %.392414711481, ptr noundef %3, ptr noundef nonnull %189, ptr noundef %6, ptr noundef %15) #9
  %1049 = icmp eq i32 %1048, 1
  br i1 %1049, label %1050, label %1051

1050:                                             ; preds = %1047
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %46) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %46, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.19, ptr noundef %15) #9
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %15, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.evolver_ndf15, i32 noundef 669, ptr noundef nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %46) #9
  br label %1054

1051:                                             ; preds = %1046, %1047
  call void @free(ptr noundef %57) #9
  %1052 = call i32 @uninitialize_jacobian(ptr noundef nonnull %21)
  %1053 = call i32 @uninitialize_numjac_workspace(ptr noundef nonnull %22)
  br label %1054

1054:                                             ; preds = %1051, %1050, %1045, %1041, %1037, %930, %924, %852, %765, %732, %719, %716, %712, %573, %419, %343, %247, %198, %192, %131, %123, %60
  %.0 = phi i32 [ 1, %60 ], [ 1, %123 ], [ 1, %131 ], [ 1, %192 ], [ 1, %198 ], [ 1, %247 ], [ 1, %343 ], [ 1, %419 ], [ 1, %573 ], [ 1, %712 ], [ 1, %716 ], [ 1, %732 ], [ 1, %719 ], [ 1, %765 ], [ 1, %852 ], [ 1, %924 ], [ 1, %930 ], [ 1, %1045 ], [ 1, %1050 ], [ 0, %1051 ], [ 1, %1037 ], [ 1, %1041 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #9
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %22) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %18) #9
  ret i32 %.0
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare i32 @sp_lusolve(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #6

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

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

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

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

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

; 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>) #8

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

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

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


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