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

; 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.primordial_inflation_parameters_and_workspace = type { ptr, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32 }
%struct.generic_integrator_workspace = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, [2048 x i8] }
%struct.primordial = type { double, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, double, double, double, double, double, double, double, double, double, double, double, i32, double, i32, ptr, double, double, double, double, double, double, double, double, double, double, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, i16, [2048 x i8] }
%struct.precision = type { double, double, double, double, double, double, double, double, double, double, double, double, double, [256 x i8], double, i32, double, i32, i32, double, i32, double, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, [256 x i8], [256 x i8], [256 x i8], double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, double, double, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, i32, double, double, i32, double, double, i32, double, i32, double, double, i32, double, double, double, i32, double, double, double, double, double, i32, double, double, double, double, double, double, double, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, double, double, double, double, i32, double, double, i32, i32, i32, double, double, [2048 x i8] }

@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [117 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [160 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [32 x i8], align 1
@__func__.primordial_inflation_evolve_background = external hidden unnamed_addr constant [39 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [127 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.129 = external hidden unnamed_addr constant [75 x i8], align 1

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @primordial_inflation_evolve_background(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, double noundef %5, i16 noundef signext %6, i32 noundef %7, i32 noundef %8) #4 {
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  %17 = alloca i16, align 2
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %struct.primordial_inflation_parameters_and_workspace, align 8
  %21 = alloca %struct.generic_integrator_workspace, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca [2048 x i8], align 16
  %37 = alloca i32, align 4
  %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
  %47 = alloca [2048 x i8], align 16
  %48 = alloca [2048 x i8], align 16
  %49 = alloca [2048 x i8], align 16
  %50 = alloca [2048 x i8], align 16
  %51 = alloca [2048 x i8], align 16
  %52 = alloca [2048 x i8], align 16
  %53 = alloca [2048 x i8], align 16
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store i32 %4, ptr %15, align 4, !tbaa !9
  store double %5, ptr %16, align 8, !tbaa !11
  store i16 %6, ptr %17, align 2, !tbaa !13
  store i32 %7, ptr %18, align 4, !tbaa !9
  store i32 %8, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 120, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 2152, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store double 0.000000e+00, ptr %24, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store double 0.000000e+00, ptr %31, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  store double 0.000000e+00, ptr %35, align 8, !tbaa !11
  %54 = load ptr, ptr %11, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.primordial_inflation_parameters_and_workspace, ptr %20, i32 0, i32 0
  store ptr %54, ptr %55, align 8, !tbaa !15
  %56 = load ptr, ptr %11, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.primordial, ptr %56, i32 0, i32 99
  %58 = load i32, ptr %57, align 4, !tbaa !17
  %59 = sitofp i32 %58 to double
  %60 = getelementptr inbounds %struct.primordial_inflation_parameters_and_workspace, ptr %20, i32 0, i32 1
  store double %59, ptr %60, align 8, !tbaa !19
  %61 = load i32, ptr %18, align 4, !tbaa !9
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %63, label %77

63:                                               ; preds = %9
  %64 = load ptr, ptr %11, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.primordial, ptr %64, i32 0, i32 1
  %66 = load i32, ptr %65, align 8, !tbaa !20
  %67 = icmp eq i32 %66, 2
  br i1 %67, label %73, label %68

68:                                               ; preds = %63
  %69 = load ptr, ptr %11, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.primordial, ptr %69, i32 0, i32 1
  %71 = load i32, ptr %70, align 8, !tbaa !20
  %72 = icmp eq i32 %71, 4
  br i1 %72, label %73, label %77

73:                                               ; preds = %68, %63
  %74 = getelementptr inbounds %struct.primordial_inflation_parameters_and_workspace, ptr %20, i32 0, i32 1
  %75 = load double, ptr %74, align 8, !tbaa !19
  %76 = fsub double %75, 1.000000e+00
  store double %76, ptr %74, align 8, !tbaa !19
  br label %77

77:                                               ; preds = %73, %68, %9
  %78 = load i32, ptr %18, align 4, !tbaa !9
  %79 = getelementptr inbounds %struct.primordial_inflation_parameters_and_workspace, ptr %20, i32 0, i32 14
  store i32 %78, ptr %79, align 8, !tbaa !21
  %80 = load i32, ptr %19, align 4, !tbaa !9
  %81 = getelementptr inbounds %struct.primordial_inflation_parameters_and_workspace, ptr %20, i32 0, i32 15
  store i32 %80, ptr %81, align 4, !tbaa !22
  %82 = load i32, ptr %18, align 4, !tbaa !9
  switch i32 %82, label %85 [
    i32 1, label %83
    i32 0, label %84
  ]

83:                                               ; preds = %77
  store double 1.000000e+00, ptr %35, align 8, !tbaa !11
  br label %85

84:                                               ; preds = %77
  store double -1.000000e+00, ptr %35, align 8, !tbaa !11
  br label %85

85:                                               ; preds = %84, %83, %77
  %86 = getelementptr inbounds %struct.primordial_inflation_parameters_and_workspace, ptr %20, i32 0, i32 1
  %87 = load double, ptr %86, align 8, !tbaa !19
  %88 = fptosi double %87 to i32
  %89 = call i32 @initialize_generic_integrator(i32 noundef %88, ptr noundef %21)
  %90 = icmp eq i32 %89, 1
  br i1 %90, label %91, label %99

91:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 2048, ptr %36) #5
  %92 = getelementptr inbounds [2048 x i8], ptr %36, i64 0, i64 0
  %93 = getelementptr inbounds %struct.generic_integrator_workspace, ptr %21, i32 0, i32 13
  %94 = getelementptr inbounds [2048 x i8], ptr %93, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %92, ptr noundef @.str.6, ptr noundef @.str.109, ptr noundef %94)
  %95 = load ptr, ptr %11, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.primordial, ptr %95, i32 0, i32 106
  %97 = getelementptr inbounds [2048 x i8], ptr %96, i64 0, i64 0
  %98 = getelementptr inbounds [2048 x i8], ptr %36, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %97, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2118, ptr noundef %98)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %36) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

99:                                               ; preds = %85
  %100 = load i16, ptr %17, align 2, !tbaa !13
  %101 = sext i16 %100 to i32
  %102 = icmp eq i32 %101, 1
  br i1 %102, label %103, label %124

103:                                              ; preds = %99
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = load ptr, ptr %13, align 8, !tbaa !5
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.primordial, ptr %106, i32 0, i32 89
  %108 = load i32, ptr %107, align 4, !tbaa !23
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds double, ptr %105, i64 %109
  %111 = load double, ptr %110, align 8, !tbaa !11
  %112 = call i32 @primordial_inflation_get_epsilon(ptr noundef %104, double noundef %111, ptr noundef %29)
  %113 = icmp eq i32 %112, 1
  br i1 %113, label %114, label %123

114:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 2048, ptr %38) #5
  %115 = getelementptr inbounds [2048 x i8], ptr %38, i64 0, i64 0
  %116 = load ptr, ptr %11, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.primordial, ptr %116, i32 0, i32 106
  %118 = getelementptr inbounds [2048 x i8], ptr %117, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %115, ptr noundef @.str.6, ptr noundef @.str.121, ptr noundef %118)
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.primordial, ptr %119, i32 0, i32 106
  %121 = getelementptr inbounds [2048 x i8], ptr %120, i64 0, i64 0
  %122 = getelementptr inbounds [2048 x i8], ptr %38, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %121, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2128, ptr noundef %122)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %38) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

123:                                              ; preds = %103
  br label %124

124:                                              ; preds = %123, %99
  store double 0.000000e+00, ptr %23, align 8, !tbaa !11
  %125 = load double, ptr %23, align 8, !tbaa !11
  %126 = load ptr, ptr %13, align 8, !tbaa !5
  %127 = load ptr, ptr %14, align 8, !tbaa !5
  %128 = load ptr, ptr %11, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.primordial, ptr %128, i32 0, i32 106
  %130 = getelementptr inbounds [2048 x i8], ptr %129, i64 0, i64 0
  %131 = call i32 @primordial_inflation_derivs(double noundef %125, ptr noundef %126, ptr noundef %127, ptr noundef %20, ptr noundef %130)
  %132 = icmp eq i32 %131, 1
  br i1 %132, label %133, label %142

133:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 2048, ptr %39) #5
  %134 = getelementptr inbounds [2048 x i8], ptr %39, i64 0, i64 0
  %135 = load ptr, ptr %11, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.primordial, ptr %135, i32 0, i32 106
  %137 = getelementptr inbounds [2048 x i8], ptr %136, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %134, ptr noundef @.str.6, ptr noundef @.str.110, ptr noundef %137)
  %138 = load ptr, ptr %11, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.primordial, ptr %138, i32 0, i32 106
  %140 = getelementptr inbounds [2048 x i8], ptr %139, i64 0, i64 0
  %141 = getelementptr inbounds [2048 x i8], ptr %39, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %140, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2141, ptr noundef %141)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %39) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

142:                                              ; preds = %124
  %143 = load i32, ptr %18, align 4, !tbaa !9
  %144 = icmp eq i32 %143, 1
  br i1 %144, label %145, label %227

145:                                              ; preds = %142
  %146 = load ptr, ptr %11, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.primordial, ptr %146, i32 0, i32 1
  %148 = load i32, ptr %147, align 8, !tbaa !20
  %149 = icmp eq i32 %148, 2
  br i1 %149, label %155, label %150

150:                                              ; preds = %145
  %151 = load ptr, ptr %11, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.primordial, ptr %151, i32 0, i32 1
  %153 = load i32, ptr %152, align 8, !tbaa !20
  %154 = icmp eq i32 %153, 4
  br i1 %154, label %155, label %227

155:                                              ; preds = %150, %145
  %156 = load ptr, ptr %12, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.precision, ptr %156, i32 0, i32 104
  %158 = load double, ptr %157, align 8, !tbaa !24
  %159 = load ptr, ptr %13, align 8, !tbaa !5
  %160 = load ptr, ptr %11, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.primordial, ptr %160, i32 0, i32 88
  %162 = load i32, ptr %161, align 8, !tbaa !26
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds double, ptr %159, i64 %163
  %165 = load double, ptr %164, align 8, !tbaa !11
  %166 = load ptr, ptr %14, align 8, !tbaa !5
  %167 = load ptr, ptr %11, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.primordial, ptr %167, i32 0, i32 88
  %169 = load i32, ptr %168, align 8, !tbaa !26
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds double, ptr %166, i64 %170
  %172 = load double, ptr %171, align 8, !tbaa !11
  %173 = fdiv double %165, %172
  %174 = load ptr, ptr %13, align 8, !tbaa !5
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.primordial, ptr %175, i32 0, i32 90
  %177 = load i32, ptr %176, align 8, !tbaa !27
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds double, ptr %174, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !11
  %181 = load ptr, ptr %14, align 8, !tbaa !5
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.primordial, ptr %182, i32 0, i32 90
  %184 = load i32, ptr %183, align 8, !tbaa !27
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %181, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !11
  %188 = fdiv double %180, %187
  %189 = call double @llvm.fabs.f64(double %188)
  %190 = fcmp olt double %173, %189
  br i1 %190, label %191, label %207

191:                                              ; preds = %155
  %192 = load ptr, ptr %13, align 8, !tbaa !5
  %193 = load ptr, ptr %11, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.primordial, ptr %193, i32 0, i32 88
  %195 = load i32, ptr %194, align 8, !tbaa !26
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds double, ptr %192, i64 %196
  %198 = load double, ptr %197, align 8, !tbaa !11
  %199 = load ptr, ptr %14, align 8, !tbaa !5
  %200 = load ptr, ptr %11, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.primordial, ptr %200, i32 0, i32 88
  %202 = load i32, ptr %201, align 8, !tbaa !26
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds double, ptr %199, i64 %203
  %205 = load double, ptr %204, align 8, !tbaa !11
  %206 = fdiv double %198, %205
  br label %224

207:                                              ; preds = %155
  %208 = load ptr, ptr %13, align 8, !tbaa !5
  %209 = load ptr, ptr %11, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.primordial, ptr %209, i32 0, i32 90
  %211 = load i32, ptr %210, align 8, !tbaa !27
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds double, ptr %208, i64 %212
  %214 = load double, ptr %213, align 8, !tbaa !11
  %215 = load ptr, ptr %14, align 8, !tbaa !5
  %216 = load ptr, ptr %11, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.primordial, ptr %216, i32 0, i32 90
  %218 = load i32, ptr %217, align 8, !tbaa !27
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds double, ptr %215, i64 %219
  %221 = load double, ptr %220, align 8, !tbaa !11
  %222 = fdiv double %214, %221
  %223 = call double @llvm.fabs.f64(double %222)
  br label %224

224:                                              ; preds = %207, %191
  %225 = phi double [ %206, %191 ], [ %223, %207 ]
  %226 = fmul double %158, %225
  store double %226, ptr %24, align 8, !tbaa !11
  br label %249

227:                                              ; preds = %150, %142
  %228 = load double, ptr %35, align 8, !tbaa !11
  %229 = load ptr, ptr %12, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.precision, ptr %229, i32 0, i32 104
  %231 = load double, ptr %230, align 8, !tbaa !24
  %232 = fmul double %228, %231
  %233 = load ptr, ptr %13, align 8, !tbaa !5
  %234 = load ptr, ptr %11, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.primordial, ptr %234, i32 0, i32 88
  %236 = load i32, ptr %235, align 8, !tbaa !26
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds double, ptr %233, i64 %237
  %239 = load double, ptr %238, align 8, !tbaa !11
  %240 = fmul double %232, %239
  %241 = load ptr, ptr %14, align 8, !tbaa !5
  %242 = load ptr, ptr %11, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.primordial, ptr %242, i32 0, i32 88
  %244 = load i32, ptr %243, align 8, !tbaa !26
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds double, ptr %241, i64 %245
  %247 = load double, ptr %246, align 8, !tbaa !11
  %248 = fdiv double %240, %247
  store double %248, ptr %24, align 8, !tbaa !11
  br label %249

249:                                              ; preds = %227, %224
  %250 = load i32, ptr %15, align 4, !tbaa !9
  switch i32 %250, label %385 [
    i32 0, label %251
    i32 1, label %290
    i32 2, label %307
    i32 3, label %368
  ]

251:                                              ; preds = %249
  %252 = load ptr, ptr %14, align 8, !tbaa !5
  %253 = load ptr, ptr %11, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.primordial, ptr %253, i32 0, i32 88
  %255 = load i32, ptr %254, align 8, !tbaa !26
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds double, ptr %252, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !11
  %259 = load ptr, ptr %14, align 8, !tbaa !5
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.primordial, ptr %260, i32 0, i32 88
  %262 = load i32, ptr %261, align 8, !tbaa !26
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %259, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !11
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = load ptr, ptr %11, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.primordial, ptr %267, i32 0, i32 88
  %269 = load i32, ptr %268, align 8, !tbaa !26
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds double, ptr %266, i64 %270
  %272 = load double, ptr %271, align 8, !tbaa !11
  %273 = fdiv double %265, %272
  %274 = load double, ptr %24, align 8, !tbaa !11
  %275 = call double @llvm.fmuladd.f64(double %273, double %274, double 1.000000e+00)
  %276 = fmul double %258, %275
  store double %276, ptr %31, align 8, !tbaa !11
  %277 = load i32, ptr %19, align 4, !tbaa !9
  %278 = icmp eq i32 %277, 0
  br i1 %278, label %279, label %289

279:                                              ; preds = %251
  %280 = load ptr, ptr %13, align 8, !tbaa !5
  %281 = load ptr, ptr %11, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.primordial, ptr %281, i32 0, i32 88
  %283 = load i32, ptr %282, align 8, !tbaa !26
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds double, ptr %280, i64 %284
  %286 = load double, ptr %285, align 8, !tbaa !11
  %287 = load double, ptr %31, align 8, !tbaa !11
  %288 = fdiv double %287, %286
  store double %288, ptr %31, align 8, !tbaa !11
  br label %289

289:                                              ; preds = %279, %251
  br label %385

290:                                              ; preds = %249
  %291 = load ptr, ptr %13, align 8, !tbaa !5
  %292 = load ptr, ptr %11, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.primordial, ptr %292, i32 0, i32 89
  %294 = load i32, ptr %293, align 4, !tbaa !23
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %291, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !11
  %298 = load ptr, ptr %14, align 8, !tbaa !5
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.primordial, ptr %299, i32 0, i32 89
  %301 = load i32, ptr %300, align 4, !tbaa !23
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds double, ptr %298, i64 %302
  %304 = load double, ptr %303, align 8, !tbaa !11
  %305 = load double, ptr %24, align 8, !tbaa !11
  %306 = call double @llvm.fmuladd.f64(double %304, double %305, double %297)
  store double %306, ptr %31, align 8, !tbaa !11
  br label %385

307:                                              ; preds = %249
  store double 0.000000e+00, ptr %16, align 8, !tbaa !11
  %308 = load ptr, ptr %14, align 8, !tbaa !5
  %309 = load ptr, ptr %11, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.primordial, ptr %309, i32 0, i32 88
  %311 = load i32, ptr %310, align 8, !tbaa !26
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds double, ptr %308, i64 %312
  %314 = load double, ptr %313, align 8, !tbaa !11
  %315 = load ptr, ptr %13, align 8, !tbaa !5
  %316 = load ptr, ptr %11, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.primordial, ptr %316, i32 0, i32 88
  %318 = load i32, ptr %317, align 8, !tbaa !26
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds double, ptr %315, i64 %319
  %321 = load double, ptr %320, align 8, !tbaa !11
  %322 = fdiv double %314, %321
  %323 = call double @pow(double noundef %322, double noundef 2.000000e+00) #5
  %324 = fneg double %323
  %325 = load ptr, ptr %13, align 8, !tbaa !5
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.primordial, ptr %326, i32 0, i32 90
  %328 = load i32, ptr %327, align 8, !tbaa !27
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds double, ptr %325, i64 %329
  %331 = load double, ptr %330, align 8, !tbaa !11
  %332 = fmul double 0x402921FB54442D18, %331
  %333 = load ptr, ptr %13, align 8, !tbaa !5
  %334 = load ptr, ptr %11, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.primordial, ptr %334, i32 0, i32 90
  %336 = load i32, ptr %335, align 8, !tbaa !27
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds double, ptr %333, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !11
  %340 = call double @llvm.fmuladd.f64(double %332, double %339, double %324)
  store double %340, ptr %31, align 8, !tbaa !11
  %341 = load i32, ptr %19, align 4, !tbaa !9
  %342 = icmp eq i32 %341, 0
  br i1 %342, label %343, label %354

343:                                              ; preds = %307
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %345 = load ptr, ptr %11, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.primordial, ptr %345, i32 0, i32 88
  %347 = load i32, ptr %346, align 8, !tbaa !26
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds double, ptr %344, i64 %348
  %350 = load double, ptr %349, align 8, !tbaa !11
  %351 = call double @pow(double noundef %350, double noundef 2.000000e+00) #5
  %352 = load double, ptr %31, align 8, !tbaa !11
  %353 = fdiv double %352, %351
  store double %353, ptr %31, align 8, !tbaa !11
  br label %354

354:                                              ; preds = %343, %307
  %355 = load ptr, ptr %11, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.primordial, ptr %355, i32 0, i32 1
  %357 = load i32, ptr %356, align 8, !tbaa !20
  %358 = icmp ne i32 %357, 4
  br i1 %358, label %359, label %367

359:                                              ; preds = %354
  call void @llvm.lifetime.start.p0(i64 2048, ptr %40) #5
  %360 = getelementptr inbounds [2048 x i8], ptr %40, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %360, ptr noundef @.str.122)
  call void @llvm.lifetime.start.p0(i64 2048, ptr %41) #5
  %361 = getelementptr inbounds [2048 x i8], ptr %41, i64 0, i64 0
  %362 = getelementptr inbounds [2048 x i8], ptr %40, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %361, ptr noundef @.str.1, ptr noundef @.str.123, ptr noundef %362)
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.primordial, ptr %363, i32 0, i32 106
  %365 = getelementptr inbounds [2048 x i8], ptr %364, i64 0, i64 0
  %366 = getelementptr inbounds [2048 x i8], ptr %41, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %365, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2177, ptr noundef %366)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 2048, ptr %40) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

367:                                              ; preds = %354
  br label %385

368:                                              ; preds = %249
  %369 = load ptr, ptr %13, align 8, !tbaa !5
  %370 = load ptr, ptr %11, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.primordial, ptr %370, i32 0, i32 88
  %372 = load i32, ptr %371, align 8, !tbaa !26
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds double, ptr %369, i64 %373
  %375 = load double, ptr %374, align 8, !tbaa !11
  %376 = load ptr, ptr %14, align 8, !tbaa !5
  %377 = load ptr, ptr %11, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.primordial, ptr %377, i32 0, i32 88
  %379 = load i32, ptr %378, align 8, !tbaa !26
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %376, i64 %380
  %382 = load double, ptr %381, align 8, !tbaa !11
  %383 = load double, ptr %24, align 8, !tbaa !11
  %384 = call double @llvm.fmuladd.f64(double %382, double %383, double %375)
  store double %384, ptr %31, align 8, !tbaa !11
  br label %385

385:                                              ; preds = %368, %367, %290, %289, %249
  br label %386

386:                                              ; preds = %786, %385
  %387 = load double, ptr %35, align 8, !tbaa !11
  %388 = load double, ptr %31, align 8, !tbaa !11
  %389 = load double, ptr %16, align 8, !tbaa !11
  %390 = fsub double %388, %389
  %391 = fmul double %387, %390
  %392 = fcmp olt double %391, 0.000000e+00
  br i1 %392, label %393, label %787

393:                                              ; preds = %386
  %394 = load ptr, ptr %11, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.primordial, ptr %394, i32 0, i32 1
  %396 = load i32, ptr %395, align 8, !tbaa !20
  %397 = icmp eq i32 %396, 2
  br i1 %397, label %403, label %398

398:                                              ; preds = %393
  %399 = load ptr, ptr %11, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.primordial, ptr %399, i32 0, i32 1
  %401 = load i32, ptr %400, align 8, !tbaa !20
  %402 = icmp eq i32 %401, 4
  br i1 %402, label %403, label %424

403:                                              ; preds = %398, %393
  %404 = load ptr, ptr %11, align 8, !tbaa !5
  %405 = load ptr, ptr %13, align 8, !tbaa !5
  %406 = load ptr, ptr %11, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.primordial, ptr %406, i32 0, i32 89
  %408 = load i32, ptr %407, align 4, !tbaa !23
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds double, ptr %405, i64 %409
  %411 = load double, ptr %410, align 8, !tbaa !11
  %412 = call i32 @primordial_inflation_check_potential(ptr noundef %404, double noundef %411, ptr noundef %32, ptr noundef %33, ptr noundef %34)
  %413 = icmp eq i32 %412, 1
  br i1 %413, label %414, label %423

414:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 2048, ptr %42) #5
  %415 = getelementptr inbounds [2048 x i8], ptr %42, i64 0, i64 0
  %416 = load ptr, ptr %11, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.primordial, ptr %416, i32 0, i32 106
  %418 = getelementptr inbounds [2048 x i8], ptr %417, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %415, ptr noundef @.str.6, ptr noundef @.str.124, ptr noundef %418)
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.primordial, ptr %419, i32 0, i32 106
  %421 = getelementptr inbounds [2048 x i8], ptr %420, i64 0, i64 0
  %422 = getelementptr inbounds [2048 x i8], ptr %42, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %421, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2199, ptr noundef %422)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %42) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

423:                                              ; preds = %403
  br label %445

424:                                              ; preds = %398
  %425 = load ptr, ptr %11, align 8, !tbaa !5
  %426 = load ptr, ptr %13, align 8, !tbaa !5
  %427 = load ptr, ptr %11, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.primordial, ptr %427, i32 0, i32 89
  %429 = load i32, ptr %428, align 4, !tbaa !23
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds double, ptr %426, i64 %430
  %432 = load double, ptr %431, align 8, !tbaa !11
  %433 = call i32 @primordial_inflation_check_hubble(ptr noundef %425, double noundef %432, ptr noundef %25, ptr noundef %26, ptr noundef %27, ptr noundef %28)
  %434 = icmp eq i32 %433, 1
  br i1 %434, label %435, label %444

435:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 2048, ptr %43) #5
  %436 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  %437 = load ptr, ptr %11, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.primordial, ptr %437, i32 0, i32 106
  %439 = getelementptr inbounds [2048 x i8], ptr %438, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %436, ptr noundef @.str.6, ptr noundef @.str.125, ptr noundef %439)
  %440 = load ptr, ptr %11, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.primordial, ptr %440, i32 0, i32 106
  %442 = getelementptr inbounds [2048 x i8], ptr %441, i64 0, i64 0
  %443 = getelementptr inbounds [2048 x i8], ptr %43, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %442, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2209, ptr noundef %443)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %43) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

444:                                              ; preds = %424
  br label %445

445:                                              ; preds = %444, %423
  %446 = load double, ptr %23, align 8, !tbaa !11
  store double %446, ptr %22, align 8, !tbaa !11
  %447 = load double, ptr %22, align 8, !tbaa !11
  %448 = load double, ptr %24, align 8, !tbaa !11
  %449 = fadd double %447, %448
  store double %449, ptr %23, align 8, !tbaa !11
  %450 = load double, ptr %24, align 8, !tbaa !11
  %451 = load double, ptr %22, align 8, !tbaa !11
  %452 = fdiv double %450, %451
  %453 = call double @llvm.fabs.f64(double %452)
  %454 = load ptr, ptr %12, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.precision, ptr %454, i32 0, i32 175
  %456 = load double, ptr %455, align 8, !tbaa !28
  %457 = fcmp olt double %453, %456
  br i1 %457, label %458, label %469

458:                                              ; preds = %445
  call void @llvm.lifetime.start.p0(i64 2048, ptr %44) #5
  %459 = getelementptr inbounds [2048 x i8], ptr %44, i64 0, i64 0
  %460 = load double, ptr %24, align 8, !tbaa !11
  %461 = load double, ptr %22, align 8, !tbaa !11
  %462 = fdiv double %460, %461
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %459, ptr noundef @.str.111, double noundef %462)
  call void @llvm.lifetime.start.p0(i64 2048, ptr %45) #5
  %463 = getelementptr inbounds [2048 x i8], ptr %45, i64 0, i64 0
  %464 = getelementptr inbounds [2048 x i8], ptr %44, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %463, ptr noundef @.str.1, ptr noundef @.str.126, ptr noundef %464)
  %465 = load ptr, ptr %11, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.primordial, ptr %465, i32 0, i32 106
  %467 = getelementptr inbounds [2048 x i8], ptr %466, i64 0, i64 0
  %468 = getelementptr inbounds [2048 x i8], ptr %45, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %467, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2221, ptr noundef %468)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 2048, ptr %44) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

469:                                              ; preds = %445
  %470 = load double, ptr %22, align 8, !tbaa !11
  %471 = load double, ptr %23, align 8, !tbaa !11
  %472 = load ptr, ptr %13, align 8, !tbaa !5
  %473 = load ptr, ptr %12, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.precision, ptr %473, i32 0, i32 105
  %475 = load double, ptr %474, align 8, !tbaa !29
  %476 = load ptr, ptr %12, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.precision, ptr %476, i32 0, i32 175
  %478 = load double, ptr %477, align 8, !tbaa !28
  %479 = call i32 @generic_integrator(ptr noundef @primordial_inflation_derivs, double noundef %470, double noundef %471, ptr noundef %472, ptr noundef %20, double noundef %475, double noundef %478, ptr noundef %21)
  %480 = icmp eq i32 %479, 1
  br i1 %480, label %481, label %489

481:                                              ; preds = %469
  call void @llvm.lifetime.start.p0(i64 2048, ptr %46) #5
  %482 = getelementptr inbounds [2048 x i8], ptr %46, i64 0, i64 0
  %483 = getelementptr inbounds %struct.generic_integrator_workspace, ptr %21, i32 0, i32 13
  %484 = getelementptr inbounds [2048 x i8], ptr %483, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %482, ptr noundef @.str.6, ptr noundef @.str.113, ptr noundef %484)
  %485 = load ptr, ptr %11, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.primordial, ptr %485, i32 0, i32 106
  %487 = getelementptr inbounds [2048 x i8], ptr %486, i64 0, i64 0
  %488 = getelementptr inbounds [2048 x i8], ptr %46, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %487, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2232, ptr noundef %488)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %46) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

489:                                              ; preds = %469
  %490 = load i16, ptr %17, align 2, !tbaa !13
  %491 = sext i16 %490 to i32
  %492 = icmp eq i32 %491, 1
  br i1 %492, label %493, label %538

493:                                              ; preds = %489
  %494 = load double, ptr %29, align 8, !tbaa !11
  store double %494, ptr %30, align 8, !tbaa !11
  %495 = load ptr, ptr %11, align 8, !tbaa !5
  %496 = load ptr, ptr %13, align 8, !tbaa !5
  %497 = load ptr, ptr %11, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.primordial, ptr %497, i32 0, i32 89
  %499 = load i32, ptr %498, align 4, !tbaa !23
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %496, i64 %500
  %502 = load double, ptr %501, align 8, !tbaa !11
  %503 = call i32 @primordial_inflation_get_epsilon(ptr noundef %495, double noundef %502, ptr noundef %29)
  %504 = icmp eq i32 %503, 1
  br i1 %504, label %505, label %515

505:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 2048, ptr %47) #5
  %506 = getelementptr inbounds [2048 x i8], ptr %47, i64 0, i64 0
  %507 = load ptr, ptr %11, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.primordial, ptr %507, i32 0, i32 106
  %509 = getelementptr inbounds [2048 x i8], ptr %508, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %506, ptr noundef @.str.6, ptr noundef @.str.121, ptr noundef %509)
  %510 = load ptr, ptr %11, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.primordial, ptr %510, i32 0, i32 106
  %512 = getelementptr inbounds [2048 x i8], ptr %511, i64 0, i64 0
  %513 = getelementptr inbounds [2048 x i8], ptr %47, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %512, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2245, ptr noundef %513)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %47) #5
  %514 = call i32 @cleanup_generic_integrator(ptr noundef %21)
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

515:                                              ; preds = %493
  %516 = load double, ptr %29, align 8, !tbaa !11
  %517 = fcmp ogt double %516, 1.000000e+00
  br i1 %517, label %518, label %537

518:                                              ; preds = %515
  %519 = load double, ptr %30, align 8, !tbaa !11
  %520 = fcmp ole double %519, 1.000000e+00
  br i1 %520, label %521, label %537

521:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 2048, ptr %48) #5
  %522 = getelementptr inbounds [2048 x i8], ptr %48, i64 0, i64 0
  %523 = load ptr, ptr %13, align 8, !tbaa !5
  %524 = load ptr, ptr %11, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.primordial, ptr %524, i32 0, i32 89
  %526 = load i32, ptr %525, align 4, !tbaa !23
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds double, ptr %523, i64 %527
  %529 = load double, ptr %528, align 8, !tbaa !11
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %522, ptr noundef @.str.127, double noundef %529)
  call void @llvm.lifetime.start.p0(i64 2048, ptr %49) #5
  %530 = getelementptr inbounds [2048 x i8], ptr %49, i64 0, i64 0
  %531 = getelementptr inbounds [2048 x i8], ptr %48, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %530, ptr noundef @.str.1, ptr noundef @.str.128, ptr noundef %531)
  %532 = load ptr, ptr %11, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.primordial, ptr %532, i32 0, i32 106
  %534 = getelementptr inbounds [2048 x i8], ptr %533, i64 0, i64 0
  %535 = getelementptr inbounds [2048 x i8], ptr %49, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %534, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2251, ptr noundef %535)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 2048, ptr %48) #5
  %536 = call i32 @cleanup_generic_integrator(ptr noundef %21)
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

537:                                              ; preds = %518, %515
  br label %538

538:                                              ; preds = %537, %489
  %539 = load double, ptr %23, align 8, !tbaa !11
  %540 = load ptr, ptr %13, align 8, !tbaa !5
  %541 = load ptr, ptr %14, align 8, !tbaa !5
  %542 = load ptr, ptr %11, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.primordial, ptr %542, i32 0, i32 106
  %544 = getelementptr inbounds [2048 x i8], ptr %543, i64 0, i64 0
  %545 = call i32 @primordial_inflation_derivs(double noundef %539, ptr noundef %540, ptr noundef %541, ptr noundef %20, ptr noundef %544)
  %546 = icmp eq i32 %545, 1
  br i1 %546, label %547, label %556

547:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 2048, ptr %50) #5
  %548 = getelementptr inbounds [2048 x i8], ptr %50, i64 0, i64 0
  %549 = load ptr, ptr %11, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.primordial, ptr %549, i32 0, i32 106
  %551 = getelementptr inbounds [2048 x i8], ptr %550, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %548, ptr noundef @.str.6, ptr noundef @.str.110, ptr noundef %551)
  %552 = load ptr, ptr %11, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.primordial, ptr %552, i32 0, i32 106
  %554 = getelementptr inbounds [2048 x i8], ptr %553, i64 0, i64 0
  %555 = getelementptr inbounds [2048 x i8], ptr %50, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %554, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2262, ptr noundef %555)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %50) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

556:                                              ; preds = %538
  %557 = load i32, ptr %18, align 4, !tbaa !9
  %558 = icmp eq i32 %557, 1
  br i1 %558, label %559, label %641

559:                                              ; preds = %556
  %560 = load ptr, ptr %11, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.primordial, ptr %560, i32 0, i32 1
  %562 = load i32, ptr %561, align 8, !tbaa !20
  %563 = icmp eq i32 %562, 2
  br i1 %563, label %569, label %564

564:                                              ; preds = %559
  %565 = load ptr, ptr %11, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.primordial, ptr %565, i32 0, i32 1
  %567 = load i32, ptr %566, align 8, !tbaa !20
  %568 = icmp eq i32 %567, 4
  br i1 %568, label %569, label %641

569:                                              ; preds = %564, %559
  %570 = load ptr, ptr %12, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.precision, ptr %570, i32 0, i32 104
  %572 = load double, ptr %571, align 8, !tbaa !24
  %573 = load ptr, ptr %13, align 8, !tbaa !5
  %574 = load ptr, ptr %11, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.primordial, ptr %574, i32 0, i32 88
  %576 = load i32, ptr %575, align 8, !tbaa !26
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds double, ptr %573, i64 %577
  %579 = load double, ptr %578, align 8, !tbaa !11
  %580 = load ptr, ptr %14, align 8, !tbaa !5
  %581 = load ptr, ptr %11, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.primordial, ptr %581, i32 0, i32 88
  %583 = load i32, ptr %582, align 8, !tbaa !26
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds double, ptr %580, i64 %584
  %586 = load double, ptr %585, align 8, !tbaa !11
  %587 = fdiv double %579, %586
  %588 = load ptr, ptr %13, align 8, !tbaa !5
  %589 = load ptr, ptr %11, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.primordial, ptr %589, i32 0, i32 90
  %591 = load i32, ptr %590, align 8, !tbaa !27
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds double, ptr %588, i64 %592
  %594 = load double, ptr %593, align 8, !tbaa !11
  %595 = load ptr, ptr %14, align 8, !tbaa !5
  %596 = load ptr, ptr %11, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.primordial, ptr %596, i32 0, i32 90
  %598 = load i32, ptr %597, align 8, !tbaa !27
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds double, ptr %595, i64 %599
  %601 = load double, ptr %600, align 8, !tbaa !11
  %602 = fdiv double %594, %601
  %603 = call double @llvm.fabs.f64(double %602)
  %604 = fcmp olt double %587, %603
  br i1 %604, label %605, label %621

605:                                              ; preds = %569
  %606 = load ptr, ptr %13, align 8, !tbaa !5
  %607 = load ptr, ptr %11, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.primordial, ptr %607, i32 0, i32 88
  %609 = load i32, ptr %608, align 8, !tbaa !26
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds double, ptr %606, i64 %610
  %612 = load double, ptr %611, align 8, !tbaa !11
  %613 = load ptr, ptr %14, align 8, !tbaa !5
  %614 = load ptr, ptr %11, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.primordial, ptr %614, i32 0, i32 88
  %616 = load i32, ptr %615, align 8, !tbaa !26
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds double, ptr %613, i64 %617
  %619 = load double, ptr %618, align 8, !tbaa !11
  %620 = fdiv double %612, %619
  br label %638

621:                                              ; preds = %569
  %622 = load ptr, ptr %13, align 8, !tbaa !5
  %623 = load ptr, ptr %11, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.primordial, ptr %623, i32 0, i32 90
  %625 = load i32, ptr %624, align 8, !tbaa !27
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds double, ptr %622, i64 %626
  %628 = load double, ptr %627, align 8, !tbaa !11
  %629 = load ptr, ptr %14, align 8, !tbaa !5
  %630 = load ptr, ptr %11, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.primordial, ptr %630, i32 0, i32 90
  %632 = load i32, ptr %631, align 8, !tbaa !27
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds double, ptr %629, i64 %633
  %635 = load double, ptr %634, align 8, !tbaa !11
  %636 = fdiv double %628, %635
  %637 = call double @llvm.fabs.f64(double %636)
  br label %638

638:                                              ; preds = %621, %605
  %639 = phi double [ %620, %605 ], [ %637, %621 ]
  %640 = fmul double %572, %639
  store double %640, ptr %24, align 8, !tbaa !11
  br label %663

641:                                              ; preds = %564, %556
  %642 = load double, ptr %35, align 8, !tbaa !11
  %643 = load ptr, ptr %12, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.precision, ptr %643, i32 0, i32 104
  %645 = load double, ptr %644, align 8, !tbaa !24
  %646 = fmul double %642, %645
  %647 = load ptr, ptr %13, align 8, !tbaa !5
  %648 = load ptr, ptr %11, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.primordial, ptr %648, i32 0, i32 88
  %650 = load i32, ptr %649, align 8, !tbaa !26
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds double, ptr %647, i64 %651
  %653 = load double, ptr %652, align 8, !tbaa !11
  %654 = fmul double %646, %653
  %655 = load ptr, ptr %14, align 8, !tbaa !5
  %656 = load ptr, ptr %11, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.primordial, ptr %656, i32 0, i32 88
  %658 = load i32, ptr %657, align 8, !tbaa !26
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds double, ptr %655, i64 %659
  %661 = load double, ptr %660, align 8, !tbaa !11
  %662 = fdiv double %654, %661
  store double %662, ptr %24, align 8, !tbaa !11
  br label %663

663:                                              ; preds = %641, %638
  %664 = load i32, ptr %15, align 4, !tbaa !9
  switch i32 %664, label %786 [
    i32 0, label %665
    i32 1, label %704
    i32 2, label %721
    i32 3, label %769
  ]

665:                                              ; preds = %663
  %666 = load ptr, ptr %14, align 8, !tbaa !5
  %667 = load ptr, ptr %11, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.primordial, ptr %667, i32 0, i32 88
  %669 = load i32, ptr %668, align 8, !tbaa !26
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds double, ptr %666, i64 %670
  %672 = load double, ptr %671, align 8, !tbaa !11
  %673 = load ptr, ptr %14, align 8, !tbaa !5
  %674 = load ptr, ptr %11, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.primordial, ptr %674, i32 0, i32 88
  %676 = load i32, ptr %675, align 8, !tbaa !26
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds double, ptr %673, i64 %677
  %679 = load double, ptr %678, align 8, !tbaa !11
  %680 = load ptr, ptr %13, align 8, !tbaa !5
  %681 = load ptr, ptr %11, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.primordial, ptr %681, i32 0, i32 88
  %683 = load i32, ptr %682, align 8, !tbaa !26
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds double, ptr %680, i64 %684
  %686 = load double, ptr %685, align 8, !tbaa !11
  %687 = fdiv double %679, %686
  %688 = load double, ptr %24, align 8, !tbaa !11
  %689 = call double @llvm.fmuladd.f64(double %687, double %688, double 1.000000e+00)
  %690 = fmul double %672, %689
  store double %690, ptr %31, align 8, !tbaa !11
  %691 = load i32, ptr %19, align 4, !tbaa !9
  %692 = icmp eq i32 %691, 0
  br i1 %692, label %693, label %703

693:                                              ; preds = %665
  %694 = load ptr, ptr %13, align 8, !tbaa !5
  %695 = load ptr, ptr %11, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.primordial, ptr %695, i32 0, i32 88
  %697 = load i32, ptr %696, align 8, !tbaa !26
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds double, ptr %694, i64 %698
  %700 = load double, ptr %699, align 8, !tbaa !11
  %701 = load double, ptr %31, align 8, !tbaa !11
  %702 = fdiv double %701, %700
  store double %702, ptr %31, align 8, !tbaa !11
  br label %703

703:                                              ; preds = %693, %665
  br label %786

704:                                              ; preds = %663
  %705 = load ptr, ptr %13, align 8, !tbaa !5
  %706 = load ptr, ptr %11, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.primordial, ptr %706, i32 0, i32 89
  %708 = load i32, ptr %707, align 4, !tbaa !23
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds double, ptr %705, i64 %709
  %711 = load double, ptr %710, align 8, !tbaa !11
  %712 = load ptr, ptr %14, align 8, !tbaa !5
  %713 = load ptr, ptr %11, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.primordial, ptr %713, i32 0, i32 89
  %715 = load i32, ptr %714, align 4, !tbaa !23
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds double, ptr %712, i64 %716
  %718 = load double, ptr %717, align 8, !tbaa !11
  %719 = load double, ptr %24, align 8, !tbaa !11
  %720 = call double @llvm.fmuladd.f64(double %718, double %719, double %711)
  store double %720, ptr %31, align 8, !tbaa !11
  br label %786

721:                                              ; preds = %663
  %722 = load ptr, ptr %14, align 8, !tbaa !5
  %723 = load ptr, ptr %11, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.primordial, ptr %723, i32 0, i32 88
  %725 = load i32, ptr %724, align 8, !tbaa !26
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds double, ptr %722, i64 %726
  %728 = load double, ptr %727, align 8, !tbaa !11
  %729 = load ptr, ptr %13, align 8, !tbaa !5
  %730 = load ptr, ptr %11, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.primordial, ptr %730, i32 0, i32 88
  %732 = load i32, ptr %731, align 8, !tbaa !26
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds double, ptr %729, i64 %733
  %735 = load double, ptr %734, align 8, !tbaa !11
  %736 = fdiv double %728, %735
  %737 = call double @pow(double noundef %736, double noundef 2.000000e+00) #5
  %738 = fneg double %737
  %739 = load ptr, ptr %13, align 8, !tbaa !5
  %740 = load ptr, ptr %11, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.primordial, ptr %740, i32 0, i32 90
  %742 = load i32, ptr %741, align 8, !tbaa !27
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds double, ptr %739, i64 %743
  %745 = load double, ptr %744, align 8, !tbaa !11
  %746 = fmul double 0x402921FB54442D18, %745
  %747 = load ptr, ptr %13, align 8, !tbaa !5
  %748 = load ptr, ptr %11, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.primordial, ptr %748, i32 0, i32 90
  %750 = load i32, ptr %749, align 8, !tbaa !27
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds double, ptr %747, i64 %751
  %753 = load double, ptr %752, align 8, !tbaa !11
  %754 = call double @llvm.fmuladd.f64(double %746, double %753, double %738)
  store double %754, ptr %31, align 8, !tbaa !11
  %755 = load i32, ptr %19, align 4, !tbaa !9
  %756 = icmp eq i32 %755, 0
  br i1 %756, label %757, label %768

757:                                              ; preds = %721
  %758 = load ptr, ptr %13, align 8, !tbaa !5
  %759 = load ptr, ptr %11, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.primordial, ptr %759, i32 0, i32 88
  %761 = load i32, ptr %760, align 8, !tbaa !26
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds double, ptr %758, i64 %762
  %764 = load double, ptr %763, align 8, !tbaa !11
  %765 = call double @pow(double noundef %764, double noundef 2.000000e+00) #5
  %766 = load double, ptr %31, align 8, !tbaa !11
  %767 = fdiv double %766, %765
  store double %767, ptr %31, align 8, !tbaa !11
  br label %768

768:                                              ; preds = %757, %721
  br label %786

769:                                              ; preds = %663
  %770 = load ptr, ptr %13, align 8, !tbaa !5
  %771 = load ptr, ptr %11, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.primordial, ptr %771, i32 0, i32 88
  %773 = load i32, ptr %772, align 8, !tbaa !26
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds double, ptr %770, i64 %774
  %776 = load double, ptr %775, align 8, !tbaa !11
  %777 = load ptr, ptr %14, align 8, !tbaa !5
  %778 = load ptr, ptr %11, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.primordial, ptr %778, i32 0, i32 88
  %780 = load i32, ptr %779, align 8, !tbaa !26
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds double, ptr %777, i64 %781
  %783 = load double, ptr %782, align 8, !tbaa !11
  %784 = load double, ptr %24, align 8, !tbaa !11
  %785 = call double @llvm.fmuladd.f64(double %783, double %784, double %776)
  store double %785, ptr %31, align 8, !tbaa !11
  br label %786

786:                                              ; preds = %769, %768, %704, %703, %663
  br label %386, !llvm.loop !30

787:                                              ; preds = %386
  %788 = call i32 @cleanup_generic_integrator(ptr noundef %21)
  %789 = icmp eq i32 %788, 1
  br i1 %789, label %790, label %798

790:                                              ; preds = %787
  call void @llvm.lifetime.start.p0(i64 2048, ptr %51) #5
  %791 = getelementptr inbounds [2048 x i8], ptr %51, i64 0, i64 0
  %792 = getelementptr inbounds %struct.generic_integrator_workspace, ptr %21, i32 0, i32 13
  %793 = getelementptr inbounds [2048 x i8], ptr %792, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %791, ptr noundef @.str.6, ptr noundef @.str.114, ptr noundef %793)
  %794 = load ptr, ptr %11, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.primordial, ptr %794, i32 0, i32 106
  %796 = getelementptr inbounds [2048 x i8], ptr %795, i64 0, i64 0
  %797 = getelementptr inbounds [2048 x i8], ptr %51, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %796, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2306, ptr noundef %797)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %51) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

798:                                              ; preds = %787
  %799 = load i32, ptr %15, align 4, !tbaa !9
  switch i32 %799, label %995 [
    i32 0, label %800
    i32 1, label %857
    i32 2, label %875
    i32 3, label %977
  ]

800:                                              ; preds = %798
  %801 = load i32, ptr %19, align 4, !tbaa !9
  switch i32 %801, label %856 [
    i32 1, label %802
    i32 0, label %821
  ]

802:                                              ; preds = %800
  %803 = load double, ptr %16, align 8, !tbaa !11
  %804 = load ptr, ptr %14, align 8, !tbaa !5
  %805 = load ptr, ptr %11, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.primordial, ptr %805, i32 0, i32 88
  %807 = load i32, ptr %806, align 8, !tbaa !26
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds double, ptr %804, i64 %808
  %810 = load double, ptr %809, align 8, !tbaa !11
  %811 = fdiv double %803, %810
  %812 = fsub double %811, 1.000000e+00
  %813 = load ptr, ptr %14, align 8, !tbaa !5
  %814 = load ptr, ptr %11, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.primordial, ptr %814, i32 0, i32 88
  %816 = load i32, ptr %815, align 8, !tbaa !26
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds double, ptr %813, i64 %817
  %819 = load double, ptr %818, align 8, !tbaa !11
  %820 = fdiv double %812, %819
  store double %820, ptr %24, align 8, !tbaa !11
  br label %856

821:                                              ; preds = %800
  %822 = load double, ptr %16, align 8, !tbaa !11
  %823 = load ptr, ptr %14, align 8, !tbaa !5
  %824 = load ptr, ptr %11, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.primordial, ptr %824, i32 0, i32 88
  %826 = load i32, ptr %825, align 8, !tbaa !26
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds double, ptr %823, i64 %827
  %829 = load double, ptr %828, align 8, !tbaa !11
  %830 = load ptr, ptr %13, align 8, !tbaa !5
  %831 = load ptr, ptr %11, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.primordial, ptr %831, i32 0, i32 88
  %833 = load i32, ptr %832, align 8, !tbaa !26
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds double, ptr %830, i64 %834
  %836 = load double, ptr %835, align 8, !tbaa !11
  %837 = fdiv double %829, %836
  %838 = fdiv double %822, %837
  %839 = fsub double %838, 1.000000e+00
  %840 = load ptr, ptr %14, align 8, !tbaa !5
  %841 = load ptr, ptr %11, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.primordial, ptr %841, i32 0, i32 88
  %843 = load i32, ptr %842, align 8, !tbaa !26
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds double, ptr %840, i64 %844
  %846 = load double, ptr %845, align 8, !tbaa !11
  %847 = load ptr, ptr %13, align 8, !tbaa !5
  %848 = load ptr, ptr %11, align 8, !tbaa !5
  %849 = getelementptr inbounds %struct.primordial, ptr %848, i32 0, i32 88
  %850 = load i32, ptr %849, align 8, !tbaa !26
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds double, ptr %847, i64 %851
  %853 = load double, ptr %852, align 8, !tbaa !11
  %854 = fdiv double %846, %853
  %855 = fdiv double %839, %854
  store double %855, ptr %24, align 8, !tbaa !11
  br label %856

856:                                              ; preds = %821, %802, %800
  br label %995

857:                                              ; preds = %798
  %858 = load double, ptr %16, align 8, !tbaa !11
  %859 = load ptr, ptr %13, align 8, !tbaa !5
  %860 = load ptr, ptr %11, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.primordial, ptr %860, i32 0, i32 89
  %862 = load i32, ptr %861, align 4, !tbaa !23
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds double, ptr %859, i64 %863
  %865 = load double, ptr %864, align 8, !tbaa !11
  %866 = fsub double %858, %865
  %867 = load ptr, ptr %14, align 8, !tbaa !5
  %868 = load ptr, ptr %11, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.primordial, ptr %868, i32 0, i32 89
  %870 = load i32, ptr %869, align 4, !tbaa !23
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds double, ptr %867, i64 %871
  %873 = load double, ptr %872, align 8, !tbaa !11
  %874 = fdiv double %866, %873
  store double %874, ptr %24, align 8, !tbaa !11
  br label %995

875:                                              ; preds = %798
  %876 = load ptr, ptr %11, align 8, !tbaa !5
  %877 = load ptr, ptr %13, align 8, !tbaa !5
  %878 = load ptr, ptr %11, align 8, !tbaa !5
  %879 = getelementptr inbounds %struct.primordial, ptr %878, i32 0, i32 89
  %880 = load i32, ptr %879, align 4, !tbaa !23
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds double, ptr %877, i64 %881
  %883 = load double, ptr %882, align 8, !tbaa !11
  %884 = call i32 @primordial_inflation_check_potential(ptr noundef %876, double noundef %883, ptr noundef %32, ptr noundef %33, ptr noundef %34)
  %885 = icmp eq i32 %884, 1
  br i1 %885, label %886, label %895

886:                                              ; preds = %875
  call void @llvm.lifetime.start.p0(i64 2048, ptr %52) #5
  %887 = getelementptr inbounds [2048 x i8], ptr %52, i64 0, i64 0
  %888 = load ptr, ptr %11, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.primordial, ptr %888, i32 0, i32 106
  %890 = getelementptr inbounds [2048 x i8], ptr %889, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %887, ptr noundef @.str.6, ptr noundef @.str.129, ptr noundef %890)
  %891 = load ptr, ptr %11, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.primordial, ptr %891, i32 0, i32 106
  %893 = getelementptr inbounds [2048 x i8], ptr %892, i64 0, i64 0
  %894 = getelementptr inbounds [2048 x i8], ptr %52, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %893, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2330, ptr noundef %894)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %52) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

895:                                              ; preds = %875
  %896 = load i32, ptr %19, align 4, !tbaa !9
  switch i32 %896, label %976 [
    i32 1, label %897
    i32 0, label %940
  ]

897:                                              ; preds = %895
  %898 = load double, ptr %31, align 8, !tbaa !11
  %899 = fneg double %898
  %900 = load ptr, ptr %14, align 8, !tbaa !5
  %901 = load ptr, ptr %11, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.primordial, ptr %901, i32 0, i32 89
  %903 = load i32, ptr %902, align 4, !tbaa !23
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds double, ptr %900, i64 %904
  %906 = load double, ptr %905, align 8, !tbaa !11
  %907 = fmul double 0x403921FB54442D18, %906
  %908 = load ptr, ptr %14, align 8, !tbaa !5
  %909 = load ptr, ptr %11, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.primordial, ptr %909, i32 0, i32 88
  %911 = load i32, ptr %910, align 8, !tbaa !26
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds double, ptr %908, i64 %912
  %914 = load double, ptr %913, align 8, !tbaa !11
  %915 = load ptr, ptr %14, align 8, !tbaa !5
  %916 = load ptr, ptr %11, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.primordial, ptr %916, i32 0, i32 89
  %918 = load i32, ptr %917, align 4, !tbaa !23
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds double, ptr %915, i64 %919
  %921 = load double, ptr %920, align 8, !tbaa !11
  %922 = load ptr, ptr %13, align 8, !tbaa !5
  %923 = load ptr, ptr %11, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.primordial, ptr %923, i32 0, i32 88
  %925 = load i32, ptr %924, align 8, !tbaa !26
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds double, ptr %922, i64 %926
  %928 = load double, ptr %927, align 8, !tbaa !11
  %929 = load ptr, ptr %14, align 8, !tbaa !5
  %930 = load ptr, ptr %11, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.primordial, ptr %930, i32 0, i32 90
  %932 = load i32, ptr %931, align 8, !tbaa !27
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds double, ptr %929, i64 %933
  %935 = load double, ptr %934, align 8, !tbaa !11
  %936 = fmul double %928, %935
  %937 = call double @llvm.fmuladd.f64(double %914, double %921, double %936)
  %938 = fmul double %907, %937
  %939 = fdiv double %899, %938
  store double %939, ptr %24, align 8, !tbaa !11
  br label %976

940:                                              ; preds = %895
  %941 = load double, ptr %31, align 8, !tbaa !11
  %942 = fneg double %941
  %943 = load ptr, ptr %13, align 8, !tbaa !5
  %944 = load ptr, ptr %11, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.primordial, ptr %944, i32 0, i32 88
  %946 = load i32, ptr %945, align 8, !tbaa !26
  %947 = sext i32 %946 to i64
  %948 = getelementptr inbounds double, ptr %943, i64 %947
  %949 = load double, ptr %948, align 8, !tbaa !11
  %950 = fdiv double 0x403921FB54442D18, %949
  %951 = load ptr, ptr %13, align 8, !tbaa !5
  %952 = load ptr, ptr %11, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.primordial, ptr %952, i32 0, i32 88
  %954 = load i32, ptr %953, align 8, !tbaa !26
  %955 = sext i32 %954 to i64
  %956 = getelementptr inbounds double, ptr %951, i64 %955
  %957 = load double, ptr %956, align 8, !tbaa !11
  %958 = fdiv double %950, %957
  %959 = load ptr, ptr %14, align 8, !tbaa !5
  %960 = load ptr, ptr %11, align 8, !tbaa !5
  %961 = getelementptr inbounds %struct.primordial, ptr %960, i32 0, i32 89
  %962 = load i32, ptr %961, align 4, !tbaa !23
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds double, ptr %959, i64 %963
  %965 = load double, ptr %964, align 8, !tbaa !11
  %966 = fmul double %958, %965
  %967 = load ptr, ptr %14, align 8, !tbaa !5
  %968 = load ptr, ptr %11, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.primordial, ptr %968, i32 0, i32 90
  %970 = load i32, ptr %969, align 8, !tbaa !27
  %971 = sext i32 %970 to i64
  %972 = getelementptr inbounds double, ptr %967, i64 %971
  %973 = load double, ptr %972, align 8, !tbaa !11
  %974 = fmul double %966, %973
  %975 = fdiv double %942, %974
  store double %975, ptr %24, align 8, !tbaa !11
  br label %976

976:                                              ; preds = %940, %897, %895
  br label %995

977:                                              ; preds = %798
  %978 = load double, ptr %16, align 8, !tbaa !11
  %979 = load ptr, ptr %13, align 8, !tbaa !5
  %980 = load ptr, ptr %11, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.primordial, ptr %980, i32 0, i32 88
  %982 = load i32, ptr %981, align 8, !tbaa !26
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds double, ptr %979, i64 %983
  %985 = load double, ptr %984, align 8, !tbaa !11
  %986 = fsub double %978, %985
  %987 = load ptr, ptr %14, align 8, !tbaa !5
  %988 = load ptr, ptr %11, align 8, !tbaa !5
  %989 = getelementptr inbounds %struct.primordial, ptr %988, i32 0, i32 88
  %990 = load i32, ptr %989, align 8, !tbaa !26
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds double, ptr %987, i64 %991
  %993 = load double, ptr %992, align 8, !tbaa !11
  %994 = fdiv double %986, %993
  store double %994, ptr %24, align 8, !tbaa !11
  br label %995

995:                                              ; preds = %977, %976, %857, %856, %798
  %996 = load ptr, ptr %14, align 8, !tbaa !5
  %997 = load ptr, ptr %11, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.primordial, ptr %997, i32 0, i32 88
  %999 = load i32, ptr %998, align 8, !tbaa !26
  %1000 = sext i32 %999 to i64
  %1001 = getelementptr inbounds double, ptr %996, i64 %1000
  %1002 = load double, ptr %1001, align 8, !tbaa !11
  %1003 = load double, ptr %24, align 8, !tbaa !11
  %1004 = load ptr, ptr %13, align 8, !tbaa !5
  %1005 = load ptr, ptr %11, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.primordial, ptr %1005, i32 0, i32 88
  %1007 = load i32, ptr %1006, align 8, !tbaa !26
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds double, ptr %1004, i64 %1008
  %1010 = load double, ptr %1009, align 8, !tbaa !11
  %1011 = call double @llvm.fmuladd.f64(double %1002, double %1003, double %1010)
  store double %1011, ptr %1009, align 8, !tbaa !11
  %1012 = load ptr, ptr %14, align 8, !tbaa !5
  %1013 = load ptr, ptr %11, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.primordial, ptr %1013, i32 0, i32 89
  %1015 = load i32, ptr %1014, align 4, !tbaa !23
  %1016 = sext i32 %1015 to i64
  %1017 = getelementptr inbounds double, ptr %1012, i64 %1016
  %1018 = load double, ptr %1017, align 8, !tbaa !11
  %1019 = load double, ptr %24, align 8, !tbaa !11
  %1020 = load ptr, ptr %13, align 8, !tbaa !5
  %1021 = load ptr, ptr %11, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.primordial, ptr %1021, i32 0, i32 89
  %1023 = load i32, ptr %1022, align 4, !tbaa !23
  %1024 = sext i32 %1023 to i64
  %1025 = getelementptr inbounds double, ptr %1020, i64 %1024
  %1026 = load double, ptr %1025, align 8, !tbaa !11
  %1027 = call double @llvm.fmuladd.f64(double %1018, double %1019, double %1026)
  store double %1027, ptr %1025, align 8, !tbaa !11
  %1028 = load i32, ptr %18, align 4, !tbaa !9
  %1029 = icmp eq i32 %1028, 1
  br i1 %1029, label %1030, label %1057

1030:                                             ; preds = %995
  %1031 = load ptr, ptr %11, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.primordial, ptr %1031, i32 0, i32 1
  %1033 = load i32, ptr %1032, align 8, !tbaa !20
  %1034 = icmp eq i32 %1033, 2
  br i1 %1034, label %1040, label %1035

1035:                                             ; preds = %1030
  %1036 = load ptr, ptr %11, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.primordial, ptr %1036, i32 0, i32 1
  %1038 = load i32, ptr %1037, align 8, !tbaa !20
  %1039 = icmp eq i32 %1038, 4
  br i1 %1039, label %1040, label %1057

1040:                                             ; preds = %1035, %1030
  %1041 = load ptr, ptr %14, align 8, !tbaa !5
  %1042 = load ptr, ptr %11, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.primordial, ptr %1042, i32 0, i32 90
  %1044 = load i32, ptr %1043, align 8, !tbaa !27
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds double, ptr %1041, i64 %1045
  %1047 = load double, ptr %1046, align 8, !tbaa !11
  %1048 = load double, ptr %24, align 8, !tbaa !11
  %1049 = load ptr, ptr %13, align 8, !tbaa !5
  %1050 = load ptr, ptr %11, align 8, !tbaa !5
  %1051 = getelementptr inbounds %struct.primordial, ptr %1050, i32 0, i32 90
  %1052 = load i32, ptr %1051, align 8, !tbaa !27
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds double, ptr %1049, i64 %1053
  %1055 = load double, ptr %1054, align 8, !tbaa !11
  %1056 = call double @llvm.fmuladd.f64(double %1047, double %1048, double %1055)
  store double %1056, ptr %1054, align 8, !tbaa !11
  br label %1057

1057:                                             ; preds = %1040, %1035, %995
  %1058 = load double, ptr %23, align 8, !tbaa !11
  %1059 = load ptr, ptr %13, align 8, !tbaa !5
  %1060 = load ptr, ptr %14, align 8, !tbaa !5
  %1061 = load ptr, ptr %11, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.primordial, ptr %1061, i32 0, i32 106
  %1063 = getelementptr inbounds [2048 x i8], ptr %1062, i64 0, i64 0
  %1064 = call i32 @primordial_inflation_derivs(double noundef %1058, ptr noundef %1059, ptr noundef %1060, ptr noundef %20, ptr noundef %1063)
  %1065 = icmp eq i32 %1064, 1
  br i1 %1065, label %1066, label %1075

1066:                                             ; preds = %1057
  call void @llvm.lifetime.start.p0(i64 2048, ptr %53) #5
  %1067 = getelementptr inbounds [2048 x i8], ptr %53, i64 0, i64 0
  %1068 = load ptr, ptr %11, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.primordial, ptr %1068, i32 0, i32 106
  %1070 = getelementptr inbounds [2048 x i8], ptr %1069, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1067, ptr noundef @.str.6, ptr noundef @.str.110, ptr noundef %1070)
  %1071 = load ptr, ptr %11, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.primordial, ptr %1071, i32 0, i32 106
  %1073 = getelementptr inbounds [2048 x i8], ptr %1072, i64 0, i64 0
  %1074 = getelementptr inbounds [2048 x i8], ptr %53, i64 0, i64 0
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef %1073, ptr noundef @.str.3, ptr noundef @__func__.primordial_inflation_evolve_background, i32 noundef 2363, ptr noundef %1074)
  call void @llvm.lifetime.end.p0(i64 2048, ptr %53) #5
  store i32 1, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

1075:                                             ; preds = %1057
  store i32 0, ptr %10, align 4
  store i32 1, ptr %37, align 4
  br label %1076

1076:                                             ; preds = %1075, %1066, %886, %790, %547, %521, %505, %481, %458, %435, %414, %359, %133, %114, %91
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 2152, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 120, ptr %20) #5
  %1077 = load i32, ptr %10, align 4
  ret i32 %1077
}

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

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

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

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

declare i32 @generic_integrator(ptr noundef, double noundef, double noundef, ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef) #1

declare i32 @cleanup_generic_integrator(ptr noundef) #1

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"primordial_inflation_parameters_and_workspace", !6, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !10, i64 112, !10, i64 116}
!17 = !{!18, !10, i64 748}
!18 = !{!"primordial", !12, i64 0, !10, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !12, i64 232, !12, i64 240, !12, i64 248, !12, i64 256, !12, i64 264, !12, i64 272, !12, i64 280, !12, i64 288, !12, i64 296, !12, i64 304, !12, i64 312, !12, i64 320, !12, i64 328, !12, i64 336, !12, i64 344, !12, i64 352, !12, i64 360, !12, i64 368, !12, i64 376, !12, i64 384, !12, i64 392, !12, i64 400, !10, i64 408, !12, i64 416, !12, i64 424, !12, i64 432, !12, i64 440, !12, i64 448, !12, i64 456, !12, i64 464, !12, i64 472, !12, i64 480, !12, i64 488, !12, i64 496, !10, i64 504, !12, i64 512, !10, i64 520, !6, i64 528, !12, i64 536, !12, i64 544, !12, i64 552, !12, i64 560, !12, i64 568, !12, i64 576, !12, i64 584, !12, i64 592, !12, i64 600, !12, i64 608, !10, i64 616, !6, i64 624, !6, i64 632, !10, i64 640, !6, i64 648, !6, i64 656, !6, i64 664, !6, i64 672, !6, i64 680, !6, i64 688, !6, i64 696, !10, i64 704, !10, i64 708, !10, i64 712, !10, i64 716, !10, i64 720, !10, i64 724, !10, i64 728, !10, i64 732, !10, i64 736, !10, i64 740, !10, i64 744, !10, i64 748, !10, i64 752, !12, i64 760, !12, i64 768, !12, i64 776, !12, i64 784, !14, i64 792, !7, i64 794}
!19 = !{!16, !12, i64 8}
!20 = !{!18, !10, i64 8}
!21 = !{!16, !10, i64 112}
!22 = !{!16, !10, i64 116}
!23 = !{!18, !10, i64 708}
!24 = !{!25, !12, i64 1784}
!25 = !{!"precision", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !7, i64 104, !12, i64 360, !10, i64 368, !12, i64 376, !10, i64 384, !10, i64 388, !12, i64 392, !10, i64 400, !12, i64 408, !10, i64 416, !12, i64 424, !12, i64 432, !12, i64 440, !12, i64 448, !12, i64 456, !12, i64 464, !12, i64 472, !12, i64 480, !12, i64 488, !12, i64 496, !12, i64 504, !12, i64 512, !12, i64 520, !12, i64 528, !12, i64 536, !12, i64 544, !12, i64 552, !12, i64 560, !12, i64 568, !12, i64 576, !12, i64 584, !12, i64 592, !12, i64 600, !12, i64 608, !12, i64 616, !10, i64 624, !7, i64 628, !7, i64 884, !7, i64 1140, !12, i64 1400, !12, i64 1408, !12, i64 1416, !12, i64 1424, !12, i64 1432, !12, i64 1440, !12, i64 1448, !12, i64 1456, !12, i64 1464, !12, i64 1472, !12, i64 1480, !12, i64 1488, !12, i64 1496, !12, i64 1504, !12, i64 1512, !12, i64 1520, !10, i64 1528, !12, i64 1536, !12, i64 1544, !10, i64 1552, !10, i64 1556, !10, i64 1560, !10, i64 1564, !10, i64 1568, !10, i64 1572, !10, i64 1576, !10, i64 1580, !12, i64 1584, !12, i64 1592, !12, i64 1600, !12, i64 1608, !12, i64 1616, !12, i64 1624, !12, i64 1632, !12, i64 1640, !10, i64 1648, !12, i64 1656, !12, i64 1664, !10, i64 1672, !12, i64 1680, !12, i64 1688, !10, i64 1696, !12, i64 1704, !10, i64 1712, !12, i64 1720, !12, i64 1728, !10, i64 1736, !12, i64 1744, !12, i64 1752, !12, i64 1760, !10, i64 1768, !12, i64 1776, !12, i64 1784, !12, i64 1792, !12, i64 1800, !12, i64 1808, !10, i64 1816, !12, i64 1824, !12, i64 1832, !12, i64 1840, !12, i64 1848, !12, i64 1856, !12, i64 1864, !12, i64 1872, !10, i64 1880, !12, i64 1888, !12, i64 1896, !12, i64 1904, !12, i64 1912, !12, i64 1920, !12, i64 1928, !12, i64 1936, !12, i64 1944, !12, i64 1952, !12, i64 1960, !12, i64 1968, !12, i64 1976, !12, i64 1984, !12, i64 1992, !12, i64 2000, !12, i64 2008, !12, i64 2016, !12, i64 2024, !12, i64 2032, !12, i64 2040, !12, i64 2048, !12, i64 2056, !12, i64 2064, !12, i64 2072, !12, i64 2080, !12, i64 2088, !12, i64 2096, !12, i64 2104, !12, i64 2112, !12, i64 2120, !12, i64 2128, !12, i64 2136, !12, i64 2144, !12, i64 2152, !12, i64 2160, !12, i64 2168, !12, i64 2176, !12, i64 2184, !12, i64 2192, !12, i64 2200, !12, i64 2208, !12, i64 2216, !12, i64 2224, !12, i64 2232, !12, i64 2240, !12, i64 2248, !10, i64 2256, !12, i64 2264, !12, i64 2272, !12, i64 2280, !12, i64 2288, !10, i64 2296, !12, i64 2304, !12, i64 2312, !10, i64 2320, !10, i64 2324, !10, i64 2328, !12, i64 2336, !12, i64 2344, !7, i64 2352}
!26 = !{!18, !10, i64 704}
!27 = !{!18, !10, i64 712}
!28 = !{!25, !12, i64 2344}
!29 = !{!25, !12, i64 1792}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}


; 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.primordial_inflation_parameters_and_workspace = type { ptr, double, double, double, double, double, double, double, double, double, double, double, double, double, i32, i32 }
%struct.generic_integrator_workspace = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, [2048 x i8] }

@.str.1 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [117 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [160 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [32 x i8], align 1
@__func__.primordial_inflation_evolve_background = external hidden unnamed_addr constant [39 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [127 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.129 = external hidden unnamed_addr constant [75 x i8], align 1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @primordial_inflation_evolve_background(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, double noundef %5, i16 noundef signext %6, i32 noundef %7, i32 noundef %8) local_unnamed_addr #3 {
  %10 = alloca %struct.primordial_inflation_parameters_and_workspace, align 8
  %11 = alloca %struct.generic_integrator_workspace, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca [2048 x i8], align 16
  %21 = alloca [2048 x i8], align 16
  %22 = alloca [2048 x i8], align 16
  %23 = alloca [2048 x i8], align 16
  %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
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 2152, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  store ptr %0, ptr %10, align 8, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %0, i64 748
  %38 = load i32, ptr %37, align 4, !tbaa !12
  %39 = sitofp i32 %38 to double
  %40 = getelementptr inbounds i8, ptr %10, i64 8
  store double %39, ptr %40, align 8, !tbaa !15
  %41 = icmp eq i32 %7, 0
  br i1 %41, label %42, label %47

42:                                               ; preds = %9
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  %44 = load i32, ptr %43, align 8, !tbaa !16
  switch i32 %44, label %47 [
    i32 2, label %45
    i32 4, label %45
  ]

45:                                               ; preds = %42, %42
  %46 = fadd double %39, -1.000000e+00
  store double %46, ptr %40, align 8, !tbaa !15
  br label %47

47:                                               ; preds = %42, %45, %9
  %48 = phi double [ %39, %42 ], [ %46, %45 ], [ %39, %9 ]
  %switch.select = phi double [ -1.000000e+00, %42 ], [ -1.000000e+00, %45 ], [ 0.000000e+00, %9 ]
  %49 = getelementptr inbounds i8, ptr %10, i64 112
  store i32 %7, ptr %49, align 8, !tbaa !17
  %50 = getelementptr inbounds i8, ptr %10, i64 116
  store i32 %8, ptr %50, align 4, !tbaa !18
  %switch.selectcmp287 = icmp eq i32 %7, 1
  %switch.select288 = select i1 %switch.selectcmp287, double 1.000000e+00, double %switch.select
  %51 = fptosi double %48 to i32
  %52 = call i32 @initialize_generic_integrator(i32 noundef %51, ptr noundef nonnull %11) #4
  %53 = icmp eq i32 %52, 1
  br i1 %53, label %54, label %57

54:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %20) #4
  %55 = getelementptr inbounds i8, ptr %11, i64 104
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %20, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.109, ptr noundef nonnull %55) #4
  %56 = getelementptr inbounds i8, ptr %0, i64 794
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %56, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2118, ptr noundef nonnull %20) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %20) #4
  br label %420

57:                                               ; preds = %47
  %58 = icmp eq i16 %6, 1
  br i1 %58, label %59, label %69

59:                                               ; preds = %57
  %60 = getelementptr inbounds i8, ptr %0, i64 708
  %61 = load i32, ptr %60, align 4, !tbaa !19
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds double, ptr %2, i64 %62
  %64 = load double, ptr %63, align 8, !tbaa !20
  %65 = call i32 @primordial_inflation_get_epsilon(ptr noundef nonnull %0, double noundef %64, ptr noundef nonnull %16)
  %66 = icmp eq i32 %65, 1
  br i1 %66, label %67, label %69

67:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %21) #4
  %68 = getelementptr inbounds i8, ptr %0, i64 794
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %21, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.121, ptr noundef nonnull %68) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %68, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2128, ptr noundef nonnull %21) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %21) #4
  br label %420

69:                                               ; preds = %59, %57
  %70 = getelementptr inbounds i8, ptr %0, i64 794
  %71 = call i32 @primordial_inflation_derivs(double noundef 0.000000e+00, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %10, ptr noundef nonnull %70)
  %72 = icmp eq i32 %71, 1
  br i1 %72, label %73, label %74

73:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %22) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %22, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.110, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2141, ptr noundef nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %22) #4
  br label %420

74:                                               ; preds = %69
  br i1 %switch.selectcmp287, label %75, label %100

75:                                               ; preds = %74
  %76 = getelementptr inbounds i8, ptr %0, i64 8
  %77 = load i32, ptr %76, align 8, !tbaa !16
  switch i32 %77, label %100 [
    i32 2, label %78
    i32 4, label %78
  ]

78:                                               ; preds = %75, %75
  %79 = getelementptr inbounds i8, ptr %1, i64 1784
  %80 = load double, ptr %79, align 8, !tbaa !21
  %81 = getelementptr inbounds i8, ptr %0, i64 704
  %82 = load i32, ptr %81, align 8, !tbaa !23
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds double, ptr %2, i64 %83
  %85 = load double, ptr %84, align 8, !tbaa !20
  %86 = getelementptr inbounds double, ptr %3, i64 %83
  %87 = load double, ptr %86, align 8, !tbaa !20
  %88 = fdiv double %85, %87
  %89 = getelementptr inbounds i8, ptr %0, i64 712
  %90 = load i32, ptr %89, align 8, !tbaa !24
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds double, ptr %2, i64 %91
  %93 = load double, ptr %92, align 8, !tbaa !20
  %94 = getelementptr inbounds double, ptr %3, i64 %91
  %95 = load double, ptr %94, align 8, !tbaa !20
  %96 = fdiv double %93, %95
  %97 = call double @llvm.fabs.f64(double %96)
  %98 = fcmp olt double %88, %97
  %. = select i1 %98, double %88, double %97
  %99 = fmul double %80, %.
  br label %113

100:                                              ; preds = %75, %74
  %101 = getelementptr inbounds i8, ptr %1, i64 1784
  %102 = load double, ptr %101, align 8, !tbaa !21
  %103 = fmul double %switch.select288, %102
  %104 = getelementptr inbounds i8, ptr %0, i64 704
  %105 = load i32, ptr %104, align 8, !tbaa !23
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds double, ptr %2, i64 %106
  %108 = load double, ptr %107, align 8, !tbaa !20
  %109 = fmul double %103, %108
  %110 = getelementptr inbounds double, ptr %3, i64 %106
  %111 = load double, ptr %110, align 8, !tbaa !20
  %112 = fdiv double %109, %111
  br label %113

113:                                              ; preds = %100, %78
  %114 = phi double [ %87, %78 ], [ %111, %100 ]
  %115 = phi double [ %85, %78 ], [ %108, %100 ]
  %.0269 = phi double [ %99, %78 ], [ %112, %100 ]
  switch i32 %4, label %150 [
    i32 0, label %116
    i32 1, label %123
    i32 2, label %132
    i32 3, label %148
  ]

116:                                              ; preds = %113
  %117 = fdiv double %114, %115
  %118 = call double @llvm.fmuladd.f64(double %117, double %.0269, double 1.000000e+00)
  %119 = fmul double %114, %118
  %120 = icmp eq i32 %8, 0
  br i1 %120, label %121, label %150

121:                                              ; preds = %116
  %122 = fdiv double %119, %115
  br label %150

123:                                              ; preds = %113
  %124 = getelementptr inbounds i8, ptr %0, i64 708
  %125 = load i32, ptr %124, align 4, !tbaa !19
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds double, ptr %2, i64 %126
  %128 = load double, ptr %127, align 8, !tbaa !20
  %129 = getelementptr inbounds double, ptr %3, i64 %126
  %130 = load double, ptr %129, align 8, !tbaa !20
  %131 = call double @llvm.fmuladd.f64(double %130, double %.0269, double %128)
  br label %150

132:                                              ; preds = %113
  %133 = fdiv double %114, %115
  %134 = fneg double %133
  %135 = fmul double %133, %134
  %136 = getelementptr inbounds i8, ptr %0, i64 712
  %137 = load i32, ptr %136, align 8, !tbaa !24
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds double, ptr %2, i64 %138
  %140 = load double, ptr %139, align 8, !tbaa !20
  %141 = fmul double %140, 0x402921FB54442D18
  %142 = call double @llvm.fmuladd.f64(double %141, double %140, double %135)
  %143 = icmp eq i32 %8, 0
  %square = fmul double %115, %115
  %144 = fdiv double %142, %square
  %.0267 = select i1 %143, double %144, double %142
  %145 = getelementptr inbounds i8, ptr %0, i64 8
  %146 = load i32, ptr %145, align 8, !tbaa !16
  %.not = icmp eq i32 %146, 4
  br i1 %.not, label %150, label %147

147:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %23) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %23, ptr noundef nonnull @.str.122) #4
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %24) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %24, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.123, ptr noundef nonnull %23) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2177, ptr noundef nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %23) #4
  br label %420

148:                                              ; preds = %113
  %149 = call double @llvm.fmuladd.f64(double %114, double %.0269, double %115)
  br label %150

150:                                              ; preds = %132, %116, %121, %148, %123, %113
  %.0274 = phi double [ %5, %113 ], [ %5, %148 ], [ 0.000000e+00, %132 ], [ %5, %123 ], [ %5, %121 ], [ %5, %116 ]
  %.1 = phi double [ 0.000000e+00, %113 ], [ %149, %148 ], [ %.0267, %132 ], [ %131, %123 ], [ %122, %121 ], [ %119, %116 ]
  %151 = fsub double %.1, %.0274
  %152 = fmul double %switch.select288, %151
  %153 = fcmp olt double %152, 0.000000e+00
  br i1 %153, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %150
  %154 = getelementptr inbounds i8, ptr %0, i64 8
  %155 = getelementptr inbounds i8, ptr %0, i64 708
  %156 = getelementptr inbounds i8, ptr %1, i64 2344
  %157 = getelementptr inbounds i8, ptr %1, i64 1792
  %158 = getelementptr inbounds i8, ptr %1, i64 1784
  %159 = getelementptr inbounds i8, ptr %0, i64 704
  %160 = getelementptr inbounds i8, ptr %0, i64 712
  %161 = icmp eq i32 %8, 0
  br label %162

162:                                              ; preds = %.lr.ph, %282
  %.2319 = phi double [ %.1, %.lr.ph ], [ %.3, %282 ]
  %.1270318 = phi double [ %.0269, %.lr.ph ], [ %.2271, %282 ]
  %.0273317 = phi double [ 0.000000e+00, %.lr.ph ], [ %181, %282 ]
  %163 = load i32, ptr %154, align 8, !tbaa !16
  switch i32 %163, label %172 [
    i32 2, label %164
    i32 4, label %164
  ]

164:                                              ; preds = %162, %162
  %165 = load i32, ptr %155, align 4, !tbaa !19
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds double, ptr %2, i64 %166
  %168 = load double, ptr %167, align 8, !tbaa !20
  %169 = call i32 @primordial_inflation_check_potential(ptr noundef nonnull %0, double noundef %168, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19)
  %170 = icmp eq i32 %169, 1
  br i1 %170, label %171, label %180

171:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %25) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %25, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.124, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2199, ptr noundef nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %25) #4
  br label %420

172:                                              ; preds = %162
  %173 = load i32, ptr %155, align 4, !tbaa !19
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %2, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !20
  %177 = call i32 @primordial_inflation_check_hubble(ptr noundef nonnull %0, double noundef %176, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %15)
  %178 = icmp eq i32 %177, 1
  br i1 %178, label %179, label %180

179:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %26) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %26, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.125, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2209, ptr noundef nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %26) #4
  br label %420

180:                                              ; preds = %172, %164
  %181 = fadd double %.0273317, %.1270318
  %182 = fdiv double %.1270318, %.0273317
  %183 = call double @llvm.fabs.f64(double %182)
  %184 = load double, ptr %156, align 8, !tbaa !25
  %185 = fcmp olt double %183, %184
  br i1 %185, label %186, label %187

186:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %27) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %27, ptr noundef nonnull @.str.111, double noundef %182) #4
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %28) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %28, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.126, ptr noundef nonnull %27) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2221, ptr noundef nonnull %28) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %28) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %27) #4
  br label %420

187:                                              ; preds = %180
  %188 = load double, ptr %157, align 8, !tbaa !26
  %189 = call i32 @generic_integrator(ptr noundef nonnull @primordial_inflation_derivs, double noundef %.0273317, double noundef %181, ptr noundef nonnull %2, ptr noundef nonnull %10, double noundef %188, double noundef %184, ptr noundef nonnull %11) #4
  %190 = icmp eq i32 %189, 1
  br i1 %190, label %191, label %193

191:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %29) #4
  %192 = getelementptr inbounds i8, ptr %11, i64 104
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %29, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.113, ptr noundef nonnull %192) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2232, ptr noundef nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %29) #4
  br label %420

193:                                              ; preds = %187
  br i1 %58, label %194, label %214

194:                                              ; preds = %193
  %195 = load double, ptr %16, align 8, !tbaa !20
  %196 = load i32, ptr %155, align 4, !tbaa !19
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds double, ptr %2, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !20
  %200 = call i32 @primordial_inflation_get_epsilon(ptr noundef nonnull %0, double noundef %199, ptr noundef nonnull %16)
  %201 = icmp eq i32 %200, 1
  br i1 %201, label %202, label %204

202:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %30) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %30, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.121, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2245, ptr noundef nonnull %30) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %30) #4
  %203 = call i32 @cleanup_generic_integrator(ptr noundef nonnull %11) #4
  br label %420

204:                                              ; preds = %194
  %205 = load double, ptr %16, align 8, !tbaa !20
  %206 = fcmp ogt double %205, 1.000000e+00
  %207 = fcmp ole double %195, 1.000000e+00
  %or.cond = select i1 %206, i1 %207, i1 false
  br i1 %or.cond, label %208, label %214

208:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %31) #4
  %209 = load i32, ptr %155, align 4, !tbaa !19
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds double, ptr %2, i64 %210
  %212 = load double, ptr %211, align 8, !tbaa !20
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %31, ptr noundef nonnull @.str.127, double noundef %212) #4
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %32) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %32, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.128, ptr noundef nonnull %31) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2251, ptr noundef nonnull %32) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %32) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %31) #4
  %213 = call i32 @cleanup_generic_integrator(ptr noundef nonnull %11) #4
  br label %420

214:                                              ; preds = %204, %193
  %215 = call i32 @primordial_inflation_derivs(double noundef %181, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %10, ptr noundef nonnull %70)
  %216 = icmp eq i32 %215, 1
  br i1 %216, label %217, label %218

217:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %33) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %33, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.110, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2262, ptr noundef nonnull %33) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %33) #4
  br label %420

218:                                              ; preds = %214
  br i1 %switch.selectcmp287, label %219, label %240

219:                                              ; preds = %218
  %220 = load i32, ptr %154, align 8, !tbaa !16
  switch i32 %220, label %240 [
    i32 2, label %221
    i32 4, label %221
  ]

221:                                              ; preds = %219, %219
  %222 = load double, ptr %158, align 8, !tbaa !21
  %223 = load i32, ptr %159, align 8, !tbaa !23
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %2, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !20
  %227 = getelementptr inbounds double, ptr %3, i64 %224
  %228 = load double, ptr %227, align 8, !tbaa !20
  %229 = fdiv double %226, %228
  %230 = load i32, ptr %160, align 8, !tbaa !24
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds double, ptr %2, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !20
  %234 = getelementptr inbounds double, ptr %3, i64 %231
  %235 = load double, ptr %234, align 8, !tbaa !20
  %236 = fdiv double %233, %235
  %237 = call double @llvm.fabs.f64(double %236)
  %238 = fcmp olt double %229, %237
  %.289 = select i1 %238, double %229, double %237
  %239 = fmul double %222, %.289
  br label %251

240:                                              ; preds = %219, %218
  %241 = load double, ptr %158, align 8, !tbaa !21
  %242 = fmul double %switch.select288, %241
  %243 = load i32, ptr %159, align 8, !tbaa !23
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %2, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !20
  %247 = fmul double %242, %246
  %248 = getelementptr inbounds double, ptr %3, i64 %244
  %249 = load double, ptr %248, align 8, !tbaa !20
  %250 = fdiv double %247, %249
  br label %251

251:                                              ; preds = %240, %221
  %252 = phi double [ %228, %221 ], [ %249, %240 ]
  %253 = phi double [ %226, %221 ], [ %246, %240 ]
  %.2271 = phi double [ %239, %221 ], [ %250, %240 ]
  switch i32 %4, label %282 [
    i32 0, label %254
    i32 1, label %260
    i32 2, label %268
    i32 3, label %280
  ]

254:                                              ; preds = %251
  %255 = fdiv double %252, %253
  %256 = call double @llvm.fmuladd.f64(double %255, double %.2271, double 1.000000e+00)
  %257 = fmul double %252, %256
  br i1 %161, label %258, label %282

258:                                              ; preds = %254
  %259 = fdiv double %257, %253
  br label %282

260:                                              ; preds = %251
  %261 = load i32, ptr %155, align 4, !tbaa !19
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds double, ptr %2, i64 %262
  %264 = load double, ptr %263, align 8, !tbaa !20
  %265 = getelementptr inbounds double, ptr %3, i64 %262
  %266 = load double, ptr %265, align 8, !tbaa !20
  %267 = call double @llvm.fmuladd.f64(double %266, double %.2271, double %264)
  br label %282

268:                                              ; preds = %251
  %269 = fdiv double %252, %253
  %270 = fneg double %269
  %271 = fmul double %269, %270
  %272 = load i32, ptr %160, align 8, !tbaa !24
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %2, i64 %273
  %275 = load double, ptr %274, align 8, !tbaa !20
  %276 = fmul double %275, 0x402921FB54442D18
  %277 = call double @llvm.fmuladd.f64(double %276, double %275, double %271)
  br i1 %161, label %278, label %282

278:                                              ; preds = %268
  %square286 = fmul double %253, %253
  %279 = fdiv double %277, %square286
  br label %282

280:                                              ; preds = %251
  %281 = call double @llvm.fmuladd.f64(double %252, double %.2271, double %253)
  br label %282

282:                                              ; preds = %268, %278, %254, %258, %280, %260, %251
  %.3 = phi double [ %.2319, %251 ], [ %281, %280 ], [ %279, %278 ], [ %277, %268 ], [ %267, %260 ], [ %259, %258 ], [ %257, %254 ]
  %283 = fsub double %.3, %.0274
  %284 = fmul double %switch.select288, %283
  %285 = fcmp olt double %284, 0.000000e+00
  br i1 %285, label %162, label %._crit_edge, !llvm.loop !27

._crit_edge:                                      ; preds = %282, %150
  %.0273.lcssa = phi double [ 0.000000e+00, %150 ], [ %181, %282 ]
  %.1270.lcssa = phi double [ %.0269, %150 ], [ %.2271, %282 ]
  %.2.lcssa = phi double [ %.1, %150 ], [ %.3, %282 ]
  %286 = call i32 @cleanup_generic_integrator(ptr noundef nonnull %11) #4
  %287 = icmp eq i32 %286, 1
  br i1 %287, label %288, label %290

288:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %34) #4
  %289 = getelementptr inbounds i8, ptr %11, i64 104
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %34, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.114, ptr noundef nonnull %289) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2306, ptr noundef nonnull %34) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %34) #4
  br label %420

290:                                              ; preds = %._crit_edge
  switch i32 %4, label %387 [
    i32 0, label %291
    i32 1, label %313
    i32 2, label %323
    i32 3, label %377
  ]

291:                                              ; preds = %290
  switch i32 %8, label %387 [
    i32 1, label %292
    i32 0, label %301
  ]

292:                                              ; preds = %291
  %293 = getelementptr inbounds i8, ptr %0, i64 704
  %294 = load i32, ptr %293, align 8, !tbaa !23
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds double, ptr %3, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !20
  %298 = fdiv double %.0274, %297
  %299 = fadd double %298, -1.000000e+00
  %300 = fdiv double %299, %297
  br label %387

301:                                              ; preds = %291
  %302 = getelementptr inbounds i8, ptr %0, i64 704
  %303 = load i32, ptr %302, align 8, !tbaa !23
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds double, ptr %3, i64 %304
  %306 = load double, ptr %305, align 8, !tbaa !20
  %307 = getelementptr inbounds double, ptr %2, i64 %304
  %308 = load double, ptr %307, align 8, !tbaa !20
  %309 = fdiv double %306, %308
  %310 = fdiv double %.0274, %309
  %311 = fadd double %310, -1.000000e+00
  %312 = fdiv double %311, %309
  br label %387

313:                                              ; preds = %290
  %314 = getelementptr inbounds i8, ptr %0, i64 708
  %315 = load i32, ptr %314, align 4, !tbaa !19
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds double, ptr %2, i64 %316
  %318 = load double, ptr %317, align 8, !tbaa !20
  %319 = fsub double %.0274, %318
  %320 = getelementptr inbounds double, ptr %3, i64 %316
  %321 = load double, ptr %320, align 8, !tbaa !20
  %322 = fdiv double %319, %321
  br label %387

323:                                              ; preds = %290
  %324 = getelementptr inbounds i8, ptr %0, i64 708
  %325 = load i32, ptr %324, align 4, !tbaa !19
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds double, ptr %2, i64 %326
  %328 = load double, ptr %327, align 8, !tbaa !20
  %329 = call i32 @primordial_inflation_check_potential(ptr noundef nonnull %0, double noundef %328, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19)
  %330 = icmp eq i32 %329, 1
  br i1 %330, label %331, label %332

331:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %35) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %35, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.129, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2330, ptr noundef nonnull %35) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %35) #4
  br label %420

332:                                              ; preds = %323
  switch i32 %8, label %387 [
    i32 1, label %333
    i32 0, label %356
  ]

333:                                              ; preds = %332
  %334 = fneg double %.2.lcssa
  %335 = load i32, ptr %324, align 4, !tbaa !19
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds double, ptr %3, i64 %336
  %338 = load double, ptr %337, align 8, !tbaa !20
  %339 = fmul double %338, 0x403921FB54442D18
  %340 = getelementptr inbounds i8, ptr %0, i64 704
  %341 = load i32, ptr %340, align 8, !tbaa !23
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds double, ptr %3, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !20
  %345 = getelementptr inbounds double, ptr %2, i64 %342
  %346 = load double, ptr %345, align 8, !tbaa !20
  %347 = getelementptr inbounds i8, ptr %0, i64 712
  %348 = load i32, ptr %347, align 8, !tbaa !24
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds double, ptr %3, i64 %349
  %351 = load double, ptr %350, align 8, !tbaa !20
  %352 = fmul double %346, %351
  %353 = call double @llvm.fmuladd.f64(double %344, double %338, double %352)
  %354 = fmul double %339, %353
  %355 = fdiv double %334, %354
  br label %387

356:                                              ; preds = %332
  %357 = fneg double %.2.lcssa
  %358 = getelementptr inbounds i8, ptr %0, i64 704
  %359 = load i32, ptr %358, align 8, !tbaa !23
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds double, ptr %2, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !20
  %363 = fdiv double 0x403921FB54442D18, %362
  %364 = fdiv double %363, %362
  %365 = load i32, ptr %324, align 4, !tbaa !19
  %366 = sext i32 %365 to i64
  %367 = getelementptr inbounds double, ptr %3, i64 %366
  %368 = load double, ptr %367, align 8, !tbaa !20
  %369 = fmul double %364, %368
  %370 = getelementptr inbounds i8, ptr %0, i64 712
  %371 = load i32, ptr %370, align 8, !tbaa !24
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds double, ptr %3, i64 %372
  %374 = load double, ptr %373, align 8, !tbaa !20
  %375 = fmul double %369, %374
  %376 = fdiv double %357, %375
  br label %387

377:                                              ; preds = %290
  %378 = getelementptr inbounds i8, ptr %0, i64 704
  %379 = load i32, ptr %378, align 8, !tbaa !23
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %2, i64 %380
  %382 = load double, ptr %381, align 8, !tbaa !20
  %383 = fsub double %.0274, %382
  %384 = getelementptr inbounds double, ptr %3, i64 %380
  %385 = load double, ptr %384, align 8, !tbaa !20
  %386 = fdiv double %383, %385
  br label %387

387:                                              ; preds = %332, %333, %356, %291, %292, %301, %377, %313, %290
  %.3272 = phi double [ %.1270.lcssa, %290 ], [ %386, %377 ], [ %.1270.lcssa, %332 ], [ %376, %356 ], [ %355, %333 ], [ %322, %313 ], [ %.1270.lcssa, %291 ], [ %312, %301 ], [ %300, %292 ]
  %388 = getelementptr inbounds i8, ptr %0, i64 704
  %389 = load i32, ptr %388, align 8, !tbaa !23
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds double, ptr %3, i64 %390
  %392 = load double, ptr %391, align 8, !tbaa !20
  %393 = getelementptr inbounds double, ptr %2, i64 %390
  %394 = load double, ptr %393, align 8, !tbaa !20
  %395 = call double @llvm.fmuladd.f64(double %392, double %.3272, double %394)
  store double %395, ptr %393, align 8, !tbaa !20
  %396 = getelementptr inbounds i8, ptr %0, i64 708
  %397 = load i32, ptr %396, align 4, !tbaa !19
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds double, ptr %3, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !20
  %401 = getelementptr inbounds double, ptr %2, i64 %398
  %402 = load double, ptr %401, align 8, !tbaa !20
  %403 = call double @llvm.fmuladd.f64(double %400, double %.3272, double %402)
  store double %403, ptr %401, align 8, !tbaa !20
  br i1 %switch.selectcmp287, label %404, label %416

404:                                              ; preds = %387
  %405 = getelementptr inbounds i8, ptr %0, i64 8
  %406 = load i32, ptr %405, align 8, !tbaa !16
  switch i32 %406, label %416 [
    i32 2, label %407
    i32 4, label %407
  ]

407:                                              ; preds = %404, %404
  %408 = getelementptr inbounds i8, ptr %0, i64 712
  %409 = load i32, ptr %408, align 8, !tbaa !24
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds double, ptr %3, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !20
  %413 = getelementptr inbounds double, ptr %2, i64 %410
  %414 = load double, ptr %413, align 8, !tbaa !20
  %415 = call double @llvm.fmuladd.f64(double %412, double %.3272, double %414)
  store double %415, ptr %413, align 8, !tbaa !20
  br label %416

416:                                              ; preds = %404, %407, %387
  %417 = call i32 @primordial_inflation_derivs(double noundef %.0273.lcssa, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %10, ptr noundef nonnull %70)
  %418 = icmp eq i32 %417, 1
  br i1 %418, label %419, label %420

419:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 2048, ptr nonnull %36) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %36, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.110, ptr noundef nonnull %70) #4
  call void (ptr, ptr, ...) @class_protect_sprintf(ptr noundef nonnull %70, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.primordial_inflation_evolve_background, i32 noundef 2363, ptr noundef nonnull %36) #4
  call void @llvm.lifetime.end.p0(i64 2048, ptr nonnull %36) #4
  br label %420

420:                                              ; preds = %416, %419, %331, %288, %217, %208, %202, %191, %186, %179, %171, %147, %73, %67, %54
  %.0268 = phi i32 [ 1, %54 ], [ 1, %67 ], [ 1, %73 ], [ 1, %171 ], [ 1, %186 ], [ 1, %191 ], [ 1, %202 ], [ 1, %208 ], [ 1, %217 ], [ 1, %179 ], [ 1, %288 ], [ 1, %419 ], [ 1, %331 ], [ 1, %147 ], [ 0, %416 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 2152, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %10) #4
  ret i32 %.0268
}

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

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

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

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

declare i32 @generic_integrator(ptr noundef, double noundef, double noundef, ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef) local_unnamed_addr #1

declare i32 @cleanup_generic_integrator(ptr noundef) local_unnamed_addr #1

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"primordial_inflation_parameters_and_workspace", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !11, i64 112, !11, i64 116}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!13, !11, i64 748}
!13 = !{!"primordial", !10, i64 0, !11, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !11, i64 408, !10, i64 416, !10, i64 424, !10, i64 432, !10, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !10, i64 472, !10, i64 480, !10, i64 488, !10, i64 496, !11, i64 504, !10, i64 512, !11, i64 520, !7, i64 528, !10, i64 536, !10, i64 544, !10, i64 552, !10, i64 560, !10, i64 568, !10, i64 576, !10, i64 584, !10, i64 592, !10, i64 600, !10, i64 608, !11, i64 616, !7, i64 624, !7, i64 632, !11, i64 640, !7, i64 648, !7, i64 656, !7, i64 664, !7, i64 672, !7, i64 680, !7, i64 688, !7, i64 696, !11, i64 704, !11, i64 708, !11, i64 712, !11, i64 716, !11, i64 720, !11, i64 724, !11, i64 728, !11, i64 732, !11, i64 736, !11, i64 740, !11, i64 744, !11, i64 748, !11, i64 752, !10, i64 760, !10, i64 768, !10, i64 776, !10, i64 784, !14, i64 792, !8, i64 794}
!14 = !{!"short", !8, i64 0}
!15 = !{!6, !10, i64 8}
!16 = !{!13, !11, i64 8}
!17 = !{!6, !11, i64 112}
!18 = !{!6, !11, i64 116}
!19 = !{!13, !11, i64 708}
!20 = !{!10, !10, i64 0}
!21 = !{!22, !10, i64 1784}
!22 = !{!"precision", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !8, i64 104, !10, i64 360, !11, i64 368, !10, i64 376, !11, i64 384, !11, i64 388, !10, i64 392, !11, i64 400, !10, i64 408, !11, i64 416, !10, i64 424, !10, i64 432, !10, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !10, i64 472, !10, i64 480, !10, i64 488, !10, i64 496, !10, i64 504, !10, i64 512, !10, i64 520, !10, i64 528, !10, i64 536, !10, i64 544, !10, i64 552, !10, i64 560, !10, i64 568, !10, i64 576, !10, i64 584, !10, i64 592, !10, i64 600, !10, i64 608, !10, i64 616, !11, i64 624, !8, i64 628, !8, i64 884, !8, i64 1140, !10, i64 1400, !10, i64 1408, !10, i64 1416, !10, i64 1424, !10, i64 1432, !10, i64 1440, !10, i64 1448, !10, i64 1456, !10, i64 1464, !10, i64 1472, !10, i64 1480, !10, i64 1488, !10, i64 1496, !10, i64 1504, !10, i64 1512, !10, i64 1520, !11, i64 1528, !10, i64 1536, !10, i64 1544, !11, i64 1552, !11, i64 1556, !11, i64 1560, !11, i64 1564, !11, i64 1568, !11, i64 1572, !11, i64 1576, !11, i64 1580, !10, i64 1584, !10, i64 1592, !10, i64 1600, !10, i64 1608, !10, i64 1616, !10, i64 1624, !10, i64 1632, !10, i64 1640, !11, i64 1648, !10, i64 1656, !10, i64 1664, !11, i64 1672, !10, i64 1680, !10, i64 1688, !11, i64 1696, !10, i64 1704, !11, i64 1712, !10, i64 1720, !10, i64 1728, !11, i64 1736, !10, i64 1744, !10, i64 1752, !10, i64 1760, !11, i64 1768, !10, i64 1776, !10, i64 1784, !10, i64 1792, !10, i64 1800, !10, i64 1808, !11, i64 1816, !10, i64 1824, !10, i64 1832, !10, i64 1840, !10, i64 1848, !10, i64 1856, !10, i64 1864, !10, i64 1872, !11, i64 1880, !10, i64 1888, !10, i64 1896, !10, i64 1904, !10, i64 1912, !10, i64 1920, !10, i64 1928, !10, i64 1936, !10, i64 1944, !10, i64 1952, !10, i64 1960, !10, i64 1968, !10, i64 1976, !10, i64 1984, !10, i64 1992, !10, i64 2000, !10, i64 2008, !10, i64 2016, !10, i64 2024, !10, i64 2032, !10, i64 2040, !10, i64 2048, !10, i64 2056, !10, i64 2064, !10, i64 2072, !10, i64 2080, !10, i64 2088, !10, i64 2096, !10, i64 2104, !10, i64 2112, !10, i64 2120, !10, i64 2128, !10, i64 2136, !10, i64 2144, !10, i64 2152, !10, i64 2160, !10, i64 2168, !10, i64 2176, !10, i64 2184, !10, i64 2192, !10, i64 2200, !10, i64 2208, !10, i64 2216, !10, i64 2224, !10, i64 2232, !10, i64 2240, !10, i64 2248, !11, i64 2256, !10, i64 2264, !10, i64 2272, !10, i64 2280, !10, i64 2288, !11, i64 2296, !10, i64 2304, !10, i64 2312, !11, i64 2320, !11, i64 2324, !11, i64 2328, !10, i64 2336, !10, i64 2344, !8, i64 2352}
!23 = !{!13, !11, i64 704}
!24 = !{!13, !11, i64 712}
!25 = !{!22, !10, i64 2344}
!26 = !{!22, !10, i64 1792}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass