; LLVM IR from simbody/simbody :: SimTKmath/Optimizers/src/c-cmaes (cmaes)

; 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.cmaes_t = type { ptr, %struct.cmaes_readpara_t, %struct.cmaes_random_t, double, ptr, ptr, ptr, ptr, ptr, i16, i16, double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, double, double, double, double, [330 x i8], i16, i16, double, %struct.cmaes_timings_t, double, double, i16, i64, i64, i64, i64 }
%struct.cmaes_readpara_t = type { ptr, i16, i32, i32, ptr, ptr, i32, ptr, ptr, double, double, double, %struct.anon, double, double, double, double, i32, i32, double, double, ptr, double, double, double, double, double, %struct.anon.0, double, ptr, [99 x i8], ptr, ptr, ptr, ptr, i32, i32, i32 }
%struct.anon = type { i32, double }
%struct.anon.0 = type { i32, double, double }
%struct.cmaes_random_t = type { i64, i64, i64, ptr, i16, double }
%struct.cmaes_timings_t = type { double, double, double, double, i64, i64, i64, i64, i16, i16, double, double }

@c_cmaes_version = external hidden global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [94 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @cmaes_init_final(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %8 = load ptr, ptr %2, align 8, !tbaa !5
  %9 = getelementptr inbounds %struct.cmaes_t, ptr %8, i32 0, i32 0
  %10 = load ptr, ptr %9, align 8, !tbaa !9
  %11 = icmp eq ptr %10, null
  br i1 %11, label %12, label %14

12:                                               ; preds = %1
  call void @ERRORMESSAGE(ptr noundef @.str.1, ptr noundef @.str.2, ptr noundef null, ptr noundef null)
  %13 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  br label %14

14:                                               ; preds = %12, %1
  %15 = load ptr, ptr @c_cmaes_version, align 8, !tbaa !5
  %16 = load ptr, ptr %2, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.cmaes_t, ptr %16, i32 0, i32 0
  %18 = load ptr, ptr %17, align 8, !tbaa !9
  %19 = call i32 @strcmp(ptr noundef %15, ptr noundef %18) #7
  %20 = icmp ne i32 %19, 0
  br i1 %20, label %21, label %23

21:                                               ; preds = %14
  call void @ERRORMESSAGE(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef null, ptr noundef null)
  %22 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  br label %23

23:                                               ; preds = %21, %14
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.cmaes_t, ptr %24, i32 0, i32 1
  %26 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %25, i32 0, i32 1
  %27 = load i16, ptr %26, align 8, !tbaa !20
  %28 = icmp ne i16 %27, 0
  br i1 %28, label %42, label %29

29:                                               ; preds = %23
  %30 = load ptr, ptr %2, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.cmaes_t, ptr %30, i32 0, i32 1
  call void @cmaes_readpara_SupplementDefaults(ptr noundef %31)
  %32 = load ptr, ptr %2, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.cmaes_t, ptr %32, i32 0, i32 1
  %34 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %33, i32 0, i32 0
  %35 = load ptr, ptr %34, align 8, !tbaa !21
  %36 = call i32 @isNoneStr(ptr noundef %35)
  %37 = icmp ne i32 %36, 0
  br i1 %37, label %41, label %38

38:                                               ; preds = %29
  %39 = load ptr, ptr %2, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.cmaes_t, ptr %39, i32 0, i32 1
  call void @cmaes_readpara_WriteToFile(ptr noundef %40, ptr noundef @.str.7)
  br label %41

41:                                               ; preds = %38, %29
  br label %42

42:                                               ; preds = %41, %23
  %43 = load ptr, ptr %2, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.cmaes_t, ptr %43, i32 0, i32 2
  %45 = load ptr, ptr %2, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.cmaes_t, ptr %45, i32 0, i32 1
  %47 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %46, i32 0, i32 3
  %48 = load i32, ptr %47, align 8, !tbaa !22
  %49 = zext i32 %48 to i64
  %50 = call i64 @cmaes_random_init(ptr noundef %44, i64 noundef %49)
  %51 = trunc i64 %50 to i32
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.cmaes_t, ptr %52, i32 0, i32 1
  %54 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %53, i32 0, i32 3
  store i32 %51, ptr %54, align 8, !tbaa !22
  %55 = load ptr, ptr %2, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.cmaes_t, ptr %55, i32 0, i32 1
  %57 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %56, i32 0, i32 2
  %58 = load i32, ptr %57, align 4, !tbaa !23
  store i32 %58, ptr %5, align 4, !tbaa !24
  store i32 0, ptr %3, align 4, !tbaa !24
  store double 0.000000e+00, ptr %7, align 8, !tbaa !25
  br label %59

59:                                               ; preds = %82, %42
  %60 = load i32, ptr %3, align 4, !tbaa !24
  %61 = load i32, ptr %5, align 4, !tbaa !24
  %62 = icmp slt i32 %60, %61
  br i1 %62, label %63, label %85

63:                                               ; preds = %59
  %64 = load ptr, ptr %2, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.cmaes_t, ptr %64, i32 0, i32 1
  %66 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %65, i32 0, i32 7
  %67 = load ptr, ptr %66, align 8, !tbaa !26
  %68 = load i32, ptr %3, align 4, !tbaa !24
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds double, ptr %67, i64 %69
  %71 = load double, ptr %70, align 8, !tbaa !25
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.cmaes_t, ptr %72, i32 0, i32 1
  %74 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %73, i32 0, i32 7
  %75 = load ptr, ptr %74, align 8, !tbaa !26
  %76 = load i32, ptr %3, align 4, !tbaa !24
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds double, ptr %75, i64 %77
  %79 = load double, ptr %78, align 8, !tbaa !25
  %80 = load double, ptr %7, align 8, !tbaa !25
  %81 = call double @llvm.fmuladd.f64(double %71, double %79, double %80)
  store double %81, ptr %7, align 8, !tbaa !25
  br label %82

82:                                               ; preds = %63
  %83 = load i32, ptr %3, align 4, !tbaa !24
  %84 = add nsw i32 %83, 1
  store i32 %84, ptr %3, align 4, !tbaa !24
  br label %59, !llvm.loop !27

85:                                               ; preds = %59
  %86 = load double, ptr %7, align 8, !tbaa !25
  %87 = load i32, ptr %5, align 4, !tbaa !24
  %88 = sitofp i32 %87 to double
  %89 = fdiv double %86, %88
  %90 = call double @sqrt(double noundef %89) #6
  %91 = load ptr, ptr %2, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.cmaes_t, ptr %91, i32 0, i32 3
  store double %90, ptr %92, align 8, !tbaa !29
  %93 = load i32, ptr %5, align 4, !tbaa !24
  %94 = sitofp i32 %93 to double
  %95 = call double @sqrt(double noundef %94) #6
  %96 = load i32, ptr %5, align 4, !tbaa !24
  %97 = sitofp i32 %96 to double
  %98 = fmul double 4.000000e+00, %97
  %99 = fdiv double 1.000000e+00, %98
  %100 = fsub double 1.000000e+00, %99
  %101 = load i32, ptr %5, align 4, !tbaa !24
  %102 = sitofp i32 %101 to double
  %103 = fmul double 2.100000e+01, %102
  %104 = load i32, ptr %5, align 4, !tbaa !24
  %105 = sitofp i32 %104 to double
  %106 = fmul double %103, %105
  %107 = fdiv double 1.000000e+00, %106
  %108 = fadd double %100, %107
  %109 = fmul double %95, %108
  %110 = load ptr, ptr %2, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.cmaes_t, ptr %110, i32 0, i32 11
  store double %109, ptr %111, align 8, !tbaa !30
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.cmaes_t, ptr %112, i32 0, i32 31
  store i16 1, ptr %113, align 2, !tbaa !31
  %114 = load ptr, ptr %2, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.cmaes_t, ptr %114, i32 0, i32 32
  store i16 0, ptr %115, align 4, !tbaa !32
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.cmaes_t, ptr %116, i32 0, i32 33
  store double 0.000000e+00, ptr %117, align 8, !tbaa !33
  %118 = load ptr, ptr %2, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.cmaes_t, ptr %118, i32 0, i32 34
  call void @cmaes_timings_init(ptr noundef %119)
  %120 = load ptr, ptr %2, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.cmaes_t, ptr %120, i32 0, i32 9
  store i16 0, ptr %121, align 8, !tbaa !34
  %122 = load ptr, ptr %2, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.cmaes_t, ptr %122, i32 0, i32 37
  store i16 0, ptr %123, align 8, !tbaa !35
  %124 = load ptr, ptr %2, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.cmaes_t, ptr %124, i32 0, i32 10
  store i16 0, ptr %125, align 2, !tbaa !36
  store double 1.000000e+00, ptr %6, align 8, !tbaa !25
  br label %126

126:                                              ; preds = %143, %85
  %127 = load double, ptr %6, align 8, !tbaa !25
  %128 = fcmp une double %127, 0.000000e+00
  br i1 %128, label %129, label %134

129:                                              ; preds = %126
  %130 = load double, ptr %6, align 8, !tbaa !25
  %131 = load double, ptr %6, align 8, !tbaa !25
  %132 = fmul double 1.100000e+00, %131
  %133 = fcmp olt double %130, %132
  br label %134

134:                                              ; preds = %129, %126
  %135 = phi i1 [ false, %126 ], [ %133, %129 ]
  br i1 %135, label %136, label %146

136:                                              ; preds = %134
  %137 = load double, ptr %6, align 8, !tbaa !25
  %138 = load double, ptr %6, align 8, !tbaa !25
  %139 = fadd double %138, 1.000000e+00
  %140 = fcmp oeq double %137, %139
  br i1 %140, label %141, label %142

141:                                              ; preds = %136
  br label %146

142:                                              ; preds = %136
  br label %143

143:                                              ; preds = %142
  %144 = load double, ptr %6, align 8, !tbaa !25
  %145 = fmul double %144, 2.000000e+00
  store double %145, ptr %6, align 8, !tbaa !25
  br label %126, !llvm.loop !37

146:                                              ; preds = %141, %134
  %147 = load double, ptr %6, align 8, !tbaa !25
  %148 = fdiv double %147, 1.000000e+03
  %149 = load ptr, ptr %2, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.cmaes_t, ptr %149, i32 0, i32 35
  store double %148, ptr %150, align 8, !tbaa !38
  %151 = load ptr, ptr %2, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.cmaes_t, ptr %151, i32 0, i32 23
  store double 0.000000e+00, ptr %152, align 8, !tbaa !39
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.cmaes_t, ptr %153, i32 0, i32 24
  store double 0.000000e+00, ptr %154, align 8, !tbaa !40
  %155 = load ptr, ptr %2, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.cmaes_t, ptr %155, i32 0, i32 25
  store double 0.000000e+00, ptr %156, align 8, !tbaa !41
  %157 = load ptr, ptr %2, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.cmaes_t, ptr %157, i32 0, i32 36
  store double 1.000000e+00, ptr %158, align 8, !tbaa !42
  %159 = load ptr, ptr %2, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.cmaes_t, ptr %159, i32 0, i32 41
  store i64 0, ptr %160, align 8, !tbaa !43
  %161 = load ptr, ptr %2, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.cmaes_t, ptr %161, i32 0, i32 40
  store i64 0, ptr %162, align 8, !tbaa !44
  %163 = load ptr, ptr %2, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.cmaes_t, ptr %163, i32 0, i32 39
  store i64 0, ptr %164, align 8, !tbaa !45
  %165 = load ptr, ptr %2, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.cmaes_t, ptr %165, i32 0, i32 38
  store i64 0, ptr %166, align 8, !tbaa !46
  %167 = load i32, ptr %5, align 4, !tbaa !24
  %168 = call ptr @new_double(i32 noundef %167)
  %169 = load ptr, ptr %2, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.cmaes_t, ptr %169, i32 0, i32 15
  store ptr %168, ptr %170, align 8, !tbaa !47
  %171 = load i32, ptr %5, align 4, !tbaa !24
  %172 = call ptr @new_double(i32 noundef %171)
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.cmaes_t, ptr %173, i32 0, i32 16
  store ptr %172, ptr %174, align 8, !tbaa !48
  %175 = load i32, ptr %5, align 4, !tbaa !24
  %176 = add nsw i32 %175, 1
  %177 = call ptr @new_double(i32 noundef %176)
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.cmaes_t, ptr %178, i32 0, i32 20
  store ptr %177, ptr %179, align 8, !tbaa !49
  %180 = load i32, ptr %5, align 4, !tbaa !24
  %181 = call ptr @new_double(i32 noundef %180)
  %182 = load ptr, ptr %2, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.cmaes_t, ptr %182, i32 0, i32 19
  store ptr %181, ptr %183, align 8, !tbaa !50
  %184 = load i32, ptr %5, align 4, !tbaa !24
  %185 = add nsw i32 %184, 2
  %186 = call ptr @new_double(i32 noundef %185)
  %187 = load ptr, ptr %2, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.cmaes_t, ptr %187, i32 0, i32 4
  store ptr %186, ptr %188, align 8, !tbaa !51
  %189 = load i32, ptr %5, align 4, !tbaa !24
  %190 = sitofp i32 %189 to double
  %191 = load ptr, ptr %2, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.cmaes_t, ptr %191, i32 0, i32 4
  %193 = load ptr, ptr %192, align 8, !tbaa !51
  %194 = getelementptr inbounds double, ptr %193, i64 0
  store double %190, ptr %194, align 8, !tbaa !25
  %195 = load ptr, ptr %2, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.cmaes_t, ptr %195, i32 0, i32 4
  %197 = load ptr, ptr %196, align 8, !tbaa !51
  %198 = getelementptr inbounds double, ptr %197, i32 1
  store ptr %198, ptr %196, align 8, !tbaa !51
  %199 = load i32, ptr %5, align 4, !tbaa !24
  %200 = add nsw i32 %199, 2
  %201 = call ptr @new_double(i32 noundef %200)
  %202 = load ptr, ptr %2, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.cmaes_t, ptr %202, i32 0, i32 17
  store ptr %201, ptr %203, align 8, !tbaa !52
  %204 = load i32, ptr %5, align 4, !tbaa !24
  %205 = sitofp i32 %204 to double
  %206 = load ptr, ptr %2, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.cmaes_t, ptr %206, i32 0, i32 17
  %208 = load ptr, ptr %207, align 8, !tbaa !52
  %209 = getelementptr inbounds double, ptr %208, i64 0
  store double %205, ptr %209, align 8, !tbaa !25
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.cmaes_t, ptr %210, i32 0, i32 17
  %212 = load ptr, ptr %211, align 8, !tbaa !52
  %213 = getelementptr inbounds double, ptr %212, i32 1
  store ptr %213, ptr %211, align 8, !tbaa !52
  %214 = load i32, ptr %5, align 4, !tbaa !24
  %215 = add nsw i32 %214, 3
  %216 = call ptr @new_double(i32 noundef %215)
  %217 = load ptr, ptr %2, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.cmaes_t, ptr %217, i32 0, i32 5
  store ptr %216, ptr %218, align 8, !tbaa !53
  %219 = load i32, ptr %5, align 4, !tbaa !24
  %220 = sitofp i32 %219 to double
  %221 = load ptr, ptr %2, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.cmaes_t, ptr %221, i32 0, i32 5
  %223 = load ptr, ptr %222, align 8, !tbaa !53
  %224 = getelementptr inbounds double, ptr %223, i64 0
  store double %220, ptr %224, align 8, !tbaa !25
  %225 = load ptr, ptr %2, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.cmaes_t, ptr %225, i32 0, i32 5
  %227 = load ptr, ptr %226, align 8, !tbaa !53
  %228 = getelementptr inbounds double, ptr %227, i32 1
  store ptr %228, ptr %226, align 8, !tbaa !53
  %229 = load i32, ptr %5, align 4, !tbaa !24
  %230 = add nsw i32 %229, 2
  %231 = call ptr @new_double(i32 noundef %230)
  %232 = load ptr, ptr %2, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.cmaes_t, ptr %232, i32 0, i32 18
  store ptr %231, ptr %233, align 8, !tbaa !54
  %234 = load i32, ptr %5, align 4, !tbaa !24
  %235 = sitofp i32 %234 to double
  %236 = load ptr, ptr %2, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.cmaes_t, ptr %236, i32 0, i32 18
  %238 = load ptr, ptr %237, align 8, !tbaa !54
  %239 = getelementptr inbounds double, ptr %238, i64 0
  store double %235, ptr %239, align 8, !tbaa !25
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.cmaes_t, ptr %240, i32 0, i32 18
  %242 = load ptr, ptr %241, align 8, !tbaa !54
  %243 = getelementptr inbounds double, ptr %242, i32 1
  store ptr %243, ptr %241, align 8, !tbaa !54
  %244 = load i32, ptr %5, align 4, !tbaa !24
  %245 = call ptr @new_double(i32 noundef %244)
  %246 = load ptr, ptr %2, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.cmaes_t, ptr %246, i32 0, i32 14
  store ptr %245, ptr %247, align 8, !tbaa !55
  %248 = load i32, ptr %5, align 4, !tbaa !24
  %249 = call ptr @new_void(i32 noundef %248, i64 noundef 8)
  %250 = load ptr, ptr %2, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.cmaes_t, ptr %250, i32 0, i32 12
  store ptr %249, ptr %251, align 8, !tbaa !56
  %252 = load i32, ptr %5, align 4, !tbaa !24
  %253 = call ptr @new_void(i32 noundef %252, i64 noundef 8)
  %254 = load ptr, ptr %2, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.cmaes_t, ptr %254, i32 0, i32 13
  store ptr %253, ptr %255, align 8, !tbaa !57
  %256 = load ptr, ptr %2, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.cmaes_t, ptr %256, i32 0, i32 1
  %258 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %257, i32 0, i32 17
  %259 = load i32, ptr %258, align 8, !tbaa !58
  %260 = call ptr @new_double(i32 noundef %259)
  %261 = load ptr, ptr %2, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.cmaes_t, ptr %261, i32 0, i32 22
  store ptr %260, ptr %262, align 8, !tbaa !59
  %263 = load ptr, ptr %2, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.cmaes_t, ptr %263, i32 0, i32 1
  %265 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %264, i32 0, i32 17
  %266 = load i32, ptr %265, align 8, !tbaa !58
  %267 = add nsw i32 %266, 1
  %268 = call ptr @new_double(i32 noundef %267)
  %269 = load ptr, ptr %2, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.cmaes_t, ptr %269, i32 0, i32 21
  store ptr %268, ptr %270, align 8, !tbaa !60
  %271 = load ptr, ptr %2, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.cmaes_t, ptr %271, i32 0, i32 1
  %273 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %272, i32 0, i32 17
  %274 = load i32, ptr %273, align 8, !tbaa !58
  %275 = sitofp i32 %274 to double
  %276 = load ptr, ptr %2, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.cmaes_t, ptr %276, i32 0, i32 21
  %278 = load ptr, ptr %277, align 8, !tbaa !60
  %279 = getelementptr inbounds double, ptr %278, i64 0
  store double %275, ptr %279, align 8, !tbaa !25
  %280 = load ptr, ptr %2, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.cmaes_t, ptr %280, i32 0, i32 21
  %282 = load ptr, ptr %281, align 8, !tbaa !60
  %283 = getelementptr inbounds double, ptr %282, i32 1
  store ptr %283, ptr %281, align 8, !tbaa !60
  %284 = load i32, ptr %5, align 4, !tbaa !24
  %285 = sitofp i32 %284 to double
  %286 = fmul double 3.000000e+01, %285
  %287 = load ptr, ptr %2, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.cmaes_t, ptr %287, i32 0, i32 1
  %289 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %288, i32 0, i32 17
  %290 = load i32, ptr %289, align 8, !tbaa !58
  %291 = sitofp i32 %290 to double
  %292 = fdiv double %286, %291
  %293 = call double @llvm.ceil.f64(double %292)
  %294 = fptosi double %293 to i32
  %295 = add nsw i32 10, %294
  %296 = add nsw i32 %295, 1
  %297 = call ptr @new_double(i32 noundef %296)
  %298 = load ptr, ptr %2, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.cmaes_t, ptr %298, i32 0, i32 8
  store ptr %297, ptr %299, align 8, !tbaa !61
  %300 = load i32, ptr %5, align 4, !tbaa !24
  %301 = sitofp i32 %300 to double
  %302 = fmul double 3.000000e+01, %301
  %303 = load ptr, ptr %2, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.cmaes_t, ptr %303, i32 0, i32 1
  %305 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %304, i32 0, i32 17
  %306 = load i32, ptr %305, align 8, !tbaa !58
  %307 = sitofp i32 %306 to double
  %308 = fdiv double %302, %307
  %309 = call double @llvm.ceil.f64(double %308)
  %310 = fptosi double %309 to i32
  %311 = add nsw i32 10, %310
  %312 = sitofp i32 %311 to double
  %313 = load ptr, ptr %2, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.cmaes_t, ptr %313, i32 0, i32 8
  %315 = load ptr, ptr %314, align 8, !tbaa !61
  %316 = getelementptr inbounds double, ptr %315, i64 0
  store double %312, ptr %316, align 8, !tbaa !25
  %317 = load ptr, ptr %2, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.cmaes_t, ptr %317, i32 0, i32 8
  %319 = load ptr, ptr %318, align 8, !tbaa !61
  %320 = getelementptr inbounds double, ptr %319, i32 1
  store ptr %320, ptr %318, align 8, !tbaa !61
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %321

321:                                              ; preds = %343, %146
  %322 = load i32, ptr %3, align 4, !tbaa !24
  %323 = load i32, ptr %5, align 4, !tbaa !24
  %324 = icmp slt i32 %322, %323
  br i1 %324, label %325, label %346

325:                                              ; preds = %321
  %326 = load i32, ptr %3, align 4, !tbaa !24
  %327 = add nsw i32 %326, 1
  %328 = call ptr @new_double(i32 noundef %327)
  %329 = load ptr, ptr %2, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.cmaes_t, ptr %329, i32 0, i32 12
  %331 = load ptr, ptr %330, align 8, !tbaa !56
  %332 = load i32, ptr %3, align 4, !tbaa !24
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds ptr, ptr %331, i64 %333
  store ptr %328, ptr %334, align 8, !tbaa !5
  %335 = load i32, ptr %5, align 4, !tbaa !24
  %336 = call ptr @new_double(i32 noundef %335)
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.cmaes_t, ptr %337, i32 0, i32 13
  %339 = load ptr, ptr %338, align 8, !tbaa !57
  %340 = load i32, ptr %3, align 4, !tbaa !24
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds ptr, ptr %339, i64 %341
  store ptr %336, ptr %342, align 8, !tbaa !5
  br label %343

343:                                              ; preds = %325
  %344 = load i32, ptr %3, align 4, !tbaa !24
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %3, align 4, !tbaa !24
  br label %321, !llvm.loop !62

346:                                              ; preds = %321
  %347 = load ptr, ptr %2, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.cmaes_t, ptr %347, i32 0, i32 1
  %349 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %348, i32 0, i32 17
  %350 = load i32, ptr %349, align 8, !tbaa !58
  %351 = call ptr @new_void(i32 noundef %350, i64 noundef 4)
  %352 = load ptr, ptr %2, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.cmaes_t, ptr %352, i32 0, i32 7
  store ptr %351, ptr %353, align 8, !tbaa !63
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %354

354:                                              ; preds = %369, %346
  %355 = load i32, ptr %3, align 4, !tbaa !24
  %356 = load ptr, ptr %2, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.cmaes_t, ptr %356, i32 0, i32 1
  %358 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %357, i32 0, i32 17
  %359 = load i32, ptr %358, align 8, !tbaa !58
  %360 = icmp slt i32 %355, %359
  br i1 %360, label %361, label %372

361:                                              ; preds = %354
  %362 = load i32, ptr %3, align 4, !tbaa !24
  %363 = load ptr, ptr %2, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.cmaes_t, ptr %363, i32 0, i32 7
  %365 = load ptr, ptr %364, align 8, !tbaa !63
  %366 = load i32, ptr %3, align 4, !tbaa !24
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  store i32 %362, ptr %368, align 4, !tbaa !24
  br label %369

369:                                              ; preds = %361
  %370 = load i32, ptr %3, align 4, !tbaa !24
  %371 = add nsw i32 %370, 1
  store i32 %371, ptr %3, align 4, !tbaa !24
  br label %354, !llvm.loop !64

372:                                              ; preds = %354
  %373 = load ptr, ptr %2, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.cmaes_t, ptr %373, i32 0, i32 1
  %375 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %374, i32 0, i32 17
  %376 = load i32, ptr %375, align 8, !tbaa !58
  %377 = call ptr @new_void(i32 noundef %376, i64 noundef 8)
  %378 = load ptr, ptr %2, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.cmaes_t, ptr %378, i32 0, i32 6
  store ptr %377, ptr %379, align 8, !tbaa !65
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %380

380:                                              ; preds = %415, %372
  %381 = load i32, ptr %3, align 4, !tbaa !24
  %382 = load ptr, ptr %2, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.cmaes_t, ptr %382, i32 0, i32 1
  %384 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %383, i32 0, i32 17
  %385 = load i32, ptr %384, align 8, !tbaa !58
  %386 = icmp slt i32 %381, %385
  br i1 %386, label %387, label %418

387:                                              ; preds = %380
  %388 = load i32, ptr %5, align 4, !tbaa !24
  %389 = add nsw i32 %388, 2
  %390 = call ptr @new_double(i32 noundef %389)
  %391 = load ptr, ptr %2, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.cmaes_t, ptr %391, i32 0, i32 6
  %393 = load ptr, ptr %392, align 8, !tbaa !65
  %394 = load i32, ptr %3, align 4, !tbaa !24
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds ptr, ptr %393, i64 %395
  store ptr %390, ptr %396, align 8, !tbaa !5
  %397 = load i32, ptr %5, align 4, !tbaa !24
  %398 = sitofp i32 %397 to double
  %399 = load ptr, ptr %2, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.cmaes_t, ptr %399, i32 0, i32 6
  %401 = load ptr, ptr %400, align 8, !tbaa !65
  %402 = load i32, ptr %3, align 4, !tbaa !24
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds ptr, ptr %401, i64 %403
  %405 = load ptr, ptr %404, align 8, !tbaa !5
  %406 = getelementptr inbounds double, ptr %405, i64 0
  store double %398, ptr %406, align 8, !tbaa !25
  %407 = load ptr, ptr %2, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.cmaes_t, ptr %407, i32 0, i32 6
  %409 = load ptr, ptr %408, align 8, !tbaa !65
  %410 = load i32, ptr %3, align 4, !tbaa !24
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds ptr, ptr %409, i64 %411
  %413 = load ptr, ptr %412, align 8, !tbaa !5
  %414 = getelementptr inbounds double, ptr %413, i32 1
  store ptr %414, ptr %412, align 8, !tbaa !5
  br label %415

415:                                              ; preds = %387
  %416 = load i32, ptr %3, align 4, !tbaa !24
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %3, align 4, !tbaa !24
  br label %380, !llvm.loop !66

418:                                              ; preds = %380
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %419

419:                                              ; preds = %463, %418
  %420 = load i32, ptr %3, align 4, !tbaa !24
  %421 = load i32, ptr %5, align 4, !tbaa !24
  %422 = icmp slt i32 %420, %421
  br i1 %422, label %423, label %466

423:                                              ; preds = %419
  store i32 0, ptr %4, align 4, !tbaa !24
  br label %424

424:                                              ; preds = %459, %423
  %425 = load i32, ptr %4, align 4, !tbaa !24
  %426 = load i32, ptr %3, align 4, !tbaa !24
  %427 = icmp slt i32 %425, %426
  br i1 %427, label %428, label %462

428:                                              ; preds = %424
  %429 = load ptr, ptr %2, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.cmaes_t, ptr %429, i32 0, i32 13
  %431 = load ptr, ptr %430, align 8, !tbaa !57
  %432 = load i32, ptr %4, align 4, !tbaa !24
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds ptr, ptr %431, i64 %433
  %435 = load ptr, ptr %434, align 8, !tbaa !5
  %436 = load i32, ptr %3, align 4, !tbaa !24
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds double, ptr %435, i64 %437
  store double 0.000000e+00, ptr %438, align 8, !tbaa !25
  %439 = load ptr, ptr %2, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.cmaes_t, ptr %439, i32 0, i32 13
  %441 = load ptr, ptr %440, align 8, !tbaa !57
  %442 = load i32, ptr %3, align 4, !tbaa !24
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds ptr, ptr %441, i64 %443
  %445 = load ptr, ptr %444, align 8, !tbaa !5
  %446 = load i32, ptr %4, align 4, !tbaa !24
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds double, ptr %445, i64 %447
  store double 0.000000e+00, ptr %448, align 8, !tbaa !25
  %449 = load ptr, ptr %2, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.cmaes_t, ptr %449, i32 0, i32 12
  %451 = load ptr, ptr %450, align 8, !tbaa !56
  %452 = load i32, ptr %3, align 4, !tbaa !24
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds ptr, ptr %451, i64 %453
  %455 = load ptr, ptr %454, align 8, !tbaa !5
  %456 = load i32, ptr %4, align 4, !tbaa !24
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds double, ptr %455, i64 %457
  store double 0.000000e+00, ptr %458, align 8, !tbaa !25
  br label %459

459:                                              ; preds = %428
  %460 = load i32, ptr %4, align 4, !tbaa !24
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %4, align 4, !tbaa !24
  br label %424, !llvm.loop !67

462:                                              ; preds = %424
  br label %463

463:                                              ; preds = %462
  %464 = load i32, ptr %3, align 4, !tbaa !24
  %465 = add nsw i32 %464, 1
  store i32 %465, ptr %3, align 4, !tbaa !24
  br label %419, !llvm.loop !68

466:                                              ; preds = %419
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %467

467:                                              ; preds = %547, %466
  %468 = load i32, ptr %3, align 4, !tbaa !24
  %469 = load i32, ptr %5, align 4, !tbaa !24
  %470 = icmp slt i32 %468, %469
  br i1 %470, label %471, label %550

471:                                              ; preds = %467
  %472 = load ptr, ptr %2, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.cmaes_t, ptr %472, i32 0, i32 13
  %474 = load ptr, ptr %473, align 8, !tbaa !57
  %475 = load i32, ptr %3, align 4, !tbaa !24
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds ptr, ptr %474, i64 %476
  %478 = load ptr, ptr %477, align 8, !tbaa !5
  %479 = load i32, ptr %3, align 4, !tbaa !24
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds double, ptr %478, i64 %480
  store double 1.000000e+00, ptr %481, align 8, !tbaa !25
  %482 = load ptr, ptr %2, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.cmaes_t, ptr %482, i32 0, i32 1
  %484 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %483, i32 0, i32 7
  %485 = load ptr, ptr %484, align 8, !tbaa !26
  %486 = load i32, ptr %3, align 4, !tbaa !24
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds double, ptr %485, i64 %487
  %489 = load double, ptr %488, align 8, !tbaa !25
  %490 = load i32, ptr %5, align 4, !tbaa !24
  %491 = sitofp i32 %490 to double
  %492 = load double, ptr %7, align 8, !tbaa !25
  %493 = fdiv double %491, %492
  %494 = call double @sqrt(double noundef %493) #6
  %495 = fmul double %489, %494
  %496 = load ptr, ptr %2, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.cmaes_t, ptr %496, i32 0, i32 14
  %498 = load ptr, ptr %497, align 8, !tbaa !55
  %499 = load i32, ptr %3, align 4, !tbaa !24
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds double, ptr %498, i64 %500
  store double %495, ptr %501, align 8, !tbaa !25
  %502 = load ptr, ptr %2, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.cmaes_t, ptr %502, i32 0, i32 12
  %504 = load ptr, ptr %503, align 8, !tbaa !56
  %505 = load i32, ptr %3, align 4, !tbaa !24
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds ptr, ptr %504, i64 %506
  %508 = load ptr, ptr %507, align 8, !tbaa !5
  %509 = load i32, ptr %3, align 4, !tbaa !24
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds double, ptr %508, i64 %510
  store double %495, ptr %511, align 8, !tbaa !25
  %512 = load ptr, ptr %2, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.cmaes_t, ptr %512, i32 0, i32 12
  %514 = load ptr, ptr %513, align 8, !tbaa !56
  %515 = load i32, ptr %3, align 4, !tbaa !24
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds ptr, ptr %514, i64 %516
  %518 = load ptr, ptr %517, align 8, !tbaa !5
  %519 = load i32, ptr %3, align 4, !tbaa !24
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds double, ptr %518, i64 %520
  %522 = load double, ptr %521, align 8, !tbaa !25
  %523 = load ptr, ptr %2, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.cmaes_t, ptr %523, i32 0, i32 12
  %525 = load ptr, ptr %524, align 8, !tbaa !56
  %526 = load i32, ptr %3, align 4, !tbaa !24
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds ptr, ptr %525, i64 %527
  %529 = load ptr, ptr %528, align 8, !tbaa !5
  %530 = load i32, ptr %3, align 4, !tbaa !24
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds double, ptr %529, i64 %531
  %533 = load double, ptr %532, align 8, !tbaa !25
  %534 = fmul double %533, %522
  store double %534, ptr %532, align 8, !tbaa !25
  %535 = load ptr, ptr %2, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.cmaes_t, ptr %535, i32 0, i32 16
  %537 = load ptr, ptr %536, align 8, !tbaa !48
  %538 = load i32, ptr %3, align 4, !tbaa !24
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds double, ptr %537, i64 %539
  store double 0.000000e+00, ptr %540, align 8, !tbaa !25
  %541 = load ptr, ptr %2, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.cmaes_t, ptr %541, i32 0, i32 15
  %543 = load ptr, ptr %542, align 8, !tbaa !47
  %544 = load i32, ptr %3, align 4, !tbaa !24
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds double, ptr %543, i64 %545
  store double 0.000000e+00, ptr %546, align 8, !tbaa !25
  br label %547

547:                                              ; preds = %471
  %548 = load i32, ptr %3, align 4, !tbaa !24
  %549 = add nsw i32 %548, 1
  store i32 %549, ptr %3, align 4, !tbaa !24
  br label %467, !llvm.loop !69

550:                                              ; preds = %467
  %551 = load ptr, ptr %2, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.cmaes_t, ptr %551, i32 0, i32 14
  %553 = load ptr, ptr %552, align 8, !tbaa !55
  %554 = load i32, ptr %5, align 4, !tbaa !24
  %555 = call double @rgdouMin(ptr noundef %553, i32 noundef %554)
  %556 = load ptr, ptr %2, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.cmaes_t, ptr %556, i32 0, i32 29
  store double %555, ptr %557, align 8, !tbaa !70
  %558 = load ptr, ptr %2, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.cmaes_t, ptr %558, i32 0, i32 29
  %560 = load double, ptr %559, align 8, !tbaa !70
  %561 = load ptr, ptr %2, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.cmaes_t, ptr %561, i32 0, i32 29
  %563 = load double, ptr %562, align 8, !tbaa !70
  %564 = fmul double %560, %563
  %565 = load ptr, ptr %2, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.cmaes_t, ptr %565, i32 0, i32 29
  store double %564, ptr %566, align 8, !tbaa !70
  %567 = load ptr, ptr %2, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.cmaes_t, ptr %567, i32 0, i32 14
  %569 = load ptr, ptr %568, align 8, !tbaa !55
  %570 = load i32, ptr %5, align 4, !tbaa !24
  %571 = call double @rgdouMax(ptr noundef %569, i32 noundef %570)
  %572 = load ptr, ptr %2, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.cmaes_t, ptr %572, i32 0, i32 28
  store double %571, ptr %573, align 8, !tbaa !71
  %574 = load ptr, ptr %2, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.cmaes_t, ptr %574, i32 0, i32 28
  %576 = load double, ptr %575, align 8, !tbaa !71
  %577 = load ptr, ptr %2, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.cmaes_t, ptr %577, i32 0, i32 28
  %579 = load double, ptr %578, align 8, !tbaa !71
  %580 = fmul double %576, %579
  %581 = load ptr, ptr %2, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.cmaes_t, ptr %581, i32 0, i32 28
  store double %580, ptr %582, align 8, !tbaa !71
  %583 = load ptr, ptr %2, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.cmaes_t, ptr %583, i32 0, i32 12
  %585 = load ptr, ptr %584, align 8, !tbaa !56
  %586 = getelementptr inbounds ptr, ptr %585, i64 0
  %587 = load ptr, ptr %586, align 8, !tbaa !5
  %588 = getelementptr inbounds double, ptr %587, i64 0
  %589 = load double, ptr %588, align 8, !tbaa !25
  %590 = load ptr, ptr %2, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.cmaes_t, ptr %590, i32 0, i32 26
  store double %589, ptr %591, align 8, !tbaa !72
  store i32 1, ptr %3, align 4, !tbaa !24
  br label %592

592:                                              ; preds = %627, %550
  %593 = load i32, ptr %3, align 4, !tbaa !24
  %594 = load i32, ptr %5, align 4, !tbaa !24
  %595 = icmp slt i32 %593, %594
  br i1 %595, label %596, label %630

596:                                              ; preds = %592
  %597 = load ptr, ptr %2, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.cmaes_t, ptr %597, i32 0, i32 26
  %599 = load double, ptr %598, align 8, !tbaa !72
  %600 = load ptr, ptr %2, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.cmaes_t, ptr %600, i32 0, i32 12
  %602 = load ptr, ptr %601, align 8, !tbaa !56
  %603 = load i32, ptr %3, align 4, !tbaa !24
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds ptr, ptr %602, i64 %604
  %606 = load ptr, ptr %605, align 8, !tbaa !5
  %607 = load i32, ptr %3, align 4, !tbaa !24
  %608 = sext i32 %607 to i64
  %609 = getelementptr inbounds double, ptr %606, i64 %608
  %610 = load double, ptr %609, align 8, !tbaa !25
  %611 = fcmp olt double %599, %610
  br i1 %611, label %612, label %626

612:                                              ; preds = %596
  %613 = load ptr, ptr %2, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.cmaes_t, ptr %613, i32 0, i32 12
  %615 = load ptr, ptr %614, align 8, !tbaa !56
  %616 = load i32, ptr %3, align 4, !tbaa !24
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds ptr, ptr %615, i64 %617
  %619 = load ptr, ptr %618, align 8, !tbaa !5
  %620 = load i32, ptr %3, align 4, !tbaa !24
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds double, ptr %619, i64 %621
  %623 = load double, ptr %622, align 8, !tbaa !25
  %624 = load ptr, ptr %2, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.cmaes_t, ptr %624, i32 0, i32 26
  store double %623, ptr %625, align 8, !tbaa !72
  br label %626

626:                                              ; preds = %612, %596
  br label %627

627:                                              ; preds = %626
  %628 = load i32, ptr %3, align 4, !tbaa !24
  %629 = add nsw i32 %628, 1
  store i32 %629, ptr %3, align 4, !tbaa !24
  br label %592, !llvm.loop !73

630:                                              ; preds = %592
  %631 = load ptr, ptr %2, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.cmaes_t, ptr %631, i32 0, i32 12
  %633 = load ptr, ptr %632, align 8, !tbaa !56
  %634 = getelementptr inbounds ptr, ptr %633, i64 0
  %635 = load ptr, ptr %634, align 8, !tbaa !5
  %636 = getelementptr inbounds double, ptr %635, i64 0
  %637 = load double, ptr %636, align 8, !tbaa !25
  %638 = load ptr, ptr %2, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.cmaes_t, ptr %638, i32 0, i32 27
  store double %637, ptr %639, align 8, !tbaa !74
  store i32 1, ptr %3, align 4, !tbaa !24
  br label %640

640:                                              ; preds = %675, %630
  %641 = load i32, ptr %3, align 4, !tbaa !24
  %642 = load i32, ptr %5, align 4, !tbaa !24
  %643 = icmp slt i32 %641, %642
  br i1 %643, label %644, label %678

644:                                              ; preds = %640
  %645 = load ptr, ptr %2, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.cmaes_t, ptr %645, i32 0, i32 27
  %647 = load double, ptr %646, align 8, !tbaa !74
  %648 = load ptr, ptr %2, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.cmaes_t, ptr %648, i32 0, i32 12
  %650 = load ptr, ptr %649, align 8, !tbaa !56
  %651 = load i32, ptr %3, align 4, !tbaa !24
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds ptr, ptr %650, i64 %652
  %654 = load ptr, ptr %653, align 8, !tbaa !5
  %655 = load i32, ptr %3, align 4, !tbaa !24
  %656 = sext i32 %655 to i64
  %657 = getelementptr inbounds double, ptr %654, i64 %656
  %658 = load double, ptr %657, align 8, !tbaa !25
  %659 = fcmp ogt double %647, %658
  br i1 %659, label %660, label %674

660:                                              ; preds = %644
  %661 = load ptr, ptr %2, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.cmaes_t, ptr %661, i32 0, i32 12
  %663 = load ptr, ptr %662, align 8, !tbaa !56
  %664 = load i32, ptr %3, align 4, !tbaa !24
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds ptr, ptr %663, i64 %665
  %667 = load ptr, ptr %666, align 8, !tbaa !5
  %668 = load i32, ptr %3, align 4, !tbaa !24
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds double, ptr %667, i64 %669
  %671 = load double, ptr %670, align 8, !tbaa !25
  %672 = load ptr, ptr %2, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.cmaes_t, ptr %672, i32 0, i32 27
  store double %671, ptr %673, align 8, !tbaa !74
  br label %674

674:                                              ; preds = %660, %644
  br label %675

675:                                              ; preds = %674
  %676 = load i32, ptr %3, align 4, !tbaa !24
  %677 = add nsw i32 %676, 1
  store i32 %677, ptr %3, align 4, !tbaa !24
  br label %640, !llvm.loop !75

678:                                              ; preds = %640
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %679

679:                                              ; preds = %704, %678
  %680 = load i32, ptr %3, align 4, !tbaa !24
  %681 = load i32, ptr %5, align 4, !tbaa !24
  %682 = icmp slt i32 %680, %681
  br i1 %682, label %683, label %707

683:                                              ; preds = %679
  %684 = load ptr, ptr %2, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.cmaes_t, ptr %684, i32 0, i32 1
  %686 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %685, i32 0, i32 4
  %687 = load ptr, ptr %686, align 8, !tbaa !76
  %688 = load i32, ptr %3, align 4, !tbaa !24
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds double, ptr %687, i64 %689
  %691 = load double, ptr %690, align 8, !tbaa !25
  %692 = load ptr, ptr %2, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.cmaes_t, ptr %692, i32 0, i32 17
  %694 = load ptr, ptr %693, align 8, !tbaa !52
  %695 = load i32, ptr %3, align 4, !tbaa !24
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds double, ptr %694, i64 %696
  store double %691, ptr %697, align 8, !tbaa !25
  %698 = load ptr, ptr %2, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.cmaes_t, ptr %698, i32 0, i32 4
  %700 = load ptr, ptr %699, align 8, !tbaa !51
  %701 = load i32, ptr %3, align 4, !tbaa !24
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds double, ptr %700, i64 %702
  store double %691, ptr %703, align 8, !tbaa !25
  br label %704

704:                                              ; preds = %683
  %705 = load i32, ptr %3, align 4, !tbaa !24
  %706 = add nsw i32 %705, 1
  store i32 %706, ptr %3, align 4, !tbaa !24
  br label %679, !llvm.loop !77

707:                                              ; preds = %679
  %708 = load ptr, ptr %2, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.cmaes_t, ptr %708, i32 0, i32 1
  %710 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %709, i32 0, i32 6
  %711 = load i32, ptr %710, align 8, !tbaa !78
  %712 = icmp ne i32 %711, 0
  br i1 %712, label %713, label %745

713:                                              ; preds = %707
  store i32 0, ptr %3, align 4, !tbaa !24
  br label %714

714:                                              ; preds = %741, %713
  %715 = load i32, ptr %3, align 4, !tbaa !24
  %716 = load i32, ptr %5, align 4, !tbaa !24
  %717 = icmp slt i32 %715, %716
  br i1 %717, label %718, label %744

718:                                              ; preds = %714
  %719 = load ptr, ptr %2, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.cmaes_t, ptr %719, i32 0, i32 3
  %721 = load double, ptr %720, align 8, !tbaa !29
  %722 = load ptr, ptr %2, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.cmaes_t, ptr %722, i32 0, i32 14
  %724 = load ptr, ptr %723, align 8, !tbaa !55
  %725 = load i32, ptr %3, align 4, !tbaa !24
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds double, ptr %724, i64 %726
  %728 = load double, ptr %727, align 8, !tbaa !25
  %729 = fmul double %721, %728
  %730 = load ptr, ptr %2, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.cmaes_t, ptr %730, i32 0, i32 2
  %732 = call double @cmaes_random_Gauss(ptr noundef %731)
  %733 = load ptr, ptr %2, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.cmaes_t, ptr %733, i32 0, i32 4
  %735 = load ptr, ptr %734, align 8, !tbaa !51
  %736 = load i32, ptr %3, align 4, !tbaa !24
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds double, ptr %735, i64 %737
  %739 = load double, ptr %738, align 8, !tbaa !25
  %740 = call double @llvm.fmuladd.f64(double %729, double %732, double %739)
  store double %740, ptr %738, align 8, !tbaa !25
  br label %741

741:                                              ; preds = %718
  %742 = load i32, ptr %3, align 4, !tbaa !24
  %743 = add nsw i32 %742, 1
  store i32 %743, ptr %3, align 4, !tbaa !24
  br label %714, !llvm.loop !79

744:                                              ; preds = %714
  br label %745

745:                                              ; preds = %744, %707
  %746 = load ptr, ptr %2, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.cmaes_t, ptr %746, i32 0, i32 1
  %748 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %747, i32 0, i32 30
  %749 = getelementptr inbounds [99 x i8], ptr %748, i64 0, i64 0
  %750 = call i32 @strcmp(ptr noundef %749, ptr noundef @.str.8) #7
  %751 = icmp ne i32 %750, 0
  br i1 %751, label %752, label %758

752:                                              ; preds = %745
  %753 = load ptr, ptr %2, align 8, !tbaa !5
  %754 = load ptr, ptr %2, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.cmaes_t, ptr %754, i32 0, i32 1
  %756 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %755, i32 0, i32 30
  %757 = getelementptr inbounds [99 x i8], ptr %756, i64 0, i64 0
  call void @cmaes_resume_distribution(ptr noundef %753, ptr noundef %757)
  br label %758

758:                                              ; preds = %752, %745
  %759 = load ptr, ptr %2, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.cmaes_t, ptr %759, i32 0, i32 22
  %761 = load ptr, ptr %760, align 8, !tbaa !59
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  ret ptr %761
}

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

; Function Attrs: nounwind uwtable
declare hidden void @ERRORMESSAGE(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #3

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

; Function Attrs: nounwind uwtable
declare hidden i32 @isNoneStr(ptr noundef) #0

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden ptr @new_double(i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @new_void(i32 noundef, i64 noundef) #0

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

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

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

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

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

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

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

!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, !6, i64 0}
!10 = !{!"", !6, i64 0, !11, i64 8, !17, i64 408, !14, i64 456, !6, i64 464, !6, i64 472, !6, i64 480, !6, i64 488, !6, i64 496, !12, i64 504, !12, i64 506, !14, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !6, i64 592, !6, i64 600, !14, i64 608, !14, i64 616, !14, i64 624, !14, i64 632, !14, i64 640, !14, i64 648, !14, i64 656, !7, i64 664, !12, i64 994, !12, i64 996, !14, i64 1000, !19, i64 1008, !14, i64 1096, !14, i64 1104, !12, i64 1112, !18, i64 1120, !18, i64 1128, !18, i64 1136, !18, i64 1144}
!11 = !{!"", !6, i64 0, !12, i64 8, !13, i64 12, !13, i64 16, !6, i64 24, !6, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !15, i64 88, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !13, i64 136, !13, i64 140, !14, i64 144, !14, i64 152, !6, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !16, i64 208, !14, i64 232, !6, i64 240, !7, i64 248, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376, !13, i64 384, !13, i64 388, !13, i64 392}
!12 = !{!"short", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!"", !13, i64 0, !14, i64 8}
!16 = !{!"", !13, i64 0, !14, i64 8, !14, i64 16}
!17 = !{!"", !18, i64 0, !18, i64 8, !18, i64 16, !6, i64 24, !12, i64 32, !14, i64 40}
!18 = !{!"long", !7, i64 0}
!19 = !{!"", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !18, i64 32, !18, i64 40, !18, i64 48, !18, i64 56, !12, i64 64, !12, i64 66, !14, i64 72, !14, i64 80}
!20 = !{!10, !12, i64 16}
!21 = !{!10, !6, i64 8}
!22 = !{!10, !13, i64 24}
!23 = !{!10, !13, i64 20}
!24 = !{!13, !13, i64 0}
!25 = !{!14, !14, i64 0}
!26 = !{!10, !6, i64 56}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!10, !14, i64 456}
!30 = !{!10, !14, i64 512}
!31 = !{!10, !12, i64 994}
!32 = !{!10, !12, i64 996}
!33 = !{!10, !14, i64 1000}
!34 = !{!10, !12, i64 504}
!35 = !{!10, !12, i64 1112}
!36 = !{!10, !12, i64 506}
!37 = distinct !{!37, !28}
!38 = !{!10, !14, i64 1096}
!39 = !{!10, !14, i64 608}
!40 = !{!10, !14, i64 616}
!41 = !{!10, !14, i64 624}
!42 = !{!10, !14, i64 1104}
!43 = !{!10, !18, i64 1144}
!44 = !{!10, !18, i64 1136}
!45 = !{!10, !18, i64 1128}
!46 = !{!10, !18, i64 1120}
!47 = !{!10, !6, i64 544}
!48 = !{!10, !6, i64 552}
!49 = !{!10, !6, i64 584}
!50 = !{!10, !6, i64 576}
!51 = !{!10, !6, i64 464}
!52 = !{!10, !6, i64 560}
!53 = !{!10, !6, i64 472}
!54 = !{!10, !6, i64 568}
!55 = !{!10, !6, i64 536}
!56 = !{!10, !6, i64 520}
!57 = !{!10, !6, i64 528}
!58 = !{!10, !13, i64 144}
!59 = !{!10, !6, i64 600}
!60 = !{!10, !6, i64 592}
!61 = !{!10, !6, i64 496}
!62 = distinct !{!62, !28}
!63 = !{!10, !6, i64 488}
!64 = distinct !{!64, !28}
!65 = !{!10, !6, i64 480}
!66 = distinct !{!66, !28}
!67 = distinct !{!67, !28}
!68 = distinct !{!68, !28}
!69 = distinct !{!69, !28}
!70 = !{!10, !14, i64 656}
!71 = !{!10, !14, i64 648}
!72 = !{!10, !14, i64 632}
!73 = distinct !{!73, !28}
!74 = !{!10, !14, i64 640}
!75 = distinct !{!75, !28}
!76 = !{!10, !6, i64 32}
!77 = distinct !{!77, !28}
!78 = !{!10, !13, i64 48}
!79 = distinct !{!79, !28}


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

@c_cmaes_version = external hidden local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [94 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @cmaes_init_final(ptr noundef %0) local_unnamed_addr #0 {
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = icmp eq ptr %2, null
  br i1 %3, label %4, label %6

4:                                                ; preds = %1
  tail call void @ERRORMESSAGE(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, ptr noundef null, ptr noundef null)
  %5 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %.pre = load ptr, ptr %0, align 8, !tbaa !5
  br label %6

6:                                                ; preds = %4, %1
  %7 = phi ptr [ %.pre, %4 ], [ %2, %1 ]
  %8 = load ptr, ptr @c_cmaes_version, align 8, !tbaa !19
  %9 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %8, ptr noundef nonnull dereferenceable(1) %7) #6
  %.not = icmp eq i32 %9, 0
  br i1 %.not, label %12, label %10

10:                                               ; preds = %6
  tail call void @ERRORMESSAGE(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef null, ptr noundef null)
  %11 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  br label %12

12:                                               ; preds = %10, %6
  %13 = getelementptr inbounds i8, ptr %0, i64 8
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  %15 = load i16, ptr %14, align 8, !tbaa !20
  %.not234 = icmp eq i16 %15, 0
  br i1 %.not234, label %16, label %20

16:                                               ; preds = %12
  tail call void @cmaes_readpara_SupplementDefaults(ptr noundef nonnull %13)
  %17 = load ptr, ptr %13, align 8, !tbaa !21
  %18 = tail call i32 @isNoneStr(ptr noundef %17)
  %.not235 = icmp eq i32 %18, 0
  br i1 %.not235, label %19, label %20

19:                                               ; preds = %16
  tail call void @cmaes_readpara_WriteToFile(ptr noundef nonnull %13, ptr noundef nonnull @.str.7)
  br label %20

20:                                               ; preds = %16, %19, %12
  %21 = getelementptr inbounds i8, ptr %0, i64 408
  %22 = getelementptr inbounds i8, ptr %0, i64 24
  %23 = load i32, ptr %22, align 8, !tbaa !22
  %24 = zext i32 %23 to i64
  %25 = tail call i64 @cmaes_random_init(ptr noundef nonnull %21, i64 noundef %24)
  %26 = trunc i64 %25 to i32
  store i32 %26, ptr %22, align 8, !tbaa !22
  %27 = getelementptr inbounds i8, ptr %0, i64 20
  %28 = load i32, ptr %27, align 4, !tbaa !23
  %29 = icmp sgt i32 %28, 0
  br i1 %29, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %20
  %30 = getelementptr inbounds i8, ptr %0, i64 56
  %31 = load ptr, ptr %30, align 8, !tbaa !24
  %wide.trip.count = zext nneg i32 %28 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %32 = icmp ult i32 %28, 4
  br i1 %32, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  br label %33

33:                                               ; preds = %33, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %33 ]
  %.0248 = phi double [ 0.000000e+00, %.lr.ph.new ], [ %45, %33 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %33 ]
  %34 = getelementptr inbounds double, ptr %31, i64 %indvars.iv
  %35 = load double, ptr %34, align 8, !tbaa !25
  %36 = tail call double @llvm.fmuladd.f64(double %35, double %35, double %.0248)
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %37 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next
  %38 = load double, ptr %37, align 8, !tbaa !25
  %39 = tail call double @llvm.fmuladd.f64(double %38, double %38, double %36)
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %40 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next.1
  %41 = load double, ptr %40, align 8, !tbaa !25
  %42 = tail call double @llvm.fmuladd.f64(double %41, double %41, double %39)
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %43 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next.2
  %44 = load double, ptr %43, align 8, !tbaa !25
  %45 = tail call double @llvm.fmuladd.f64(double %44, double %44, double %42)
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %33, !llvm.loop !26

._crit_edge.loopexit.unr-lcssa:                   ; preds = %33, %.lr.ph
  %.lcssa355.ph = phi double [ poison, %.lr.ph ], [ %45, %33 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %33 ]
  %.0248.unr = phi double [ 0.000000e+00, %.lr.ph ], [ %45, %33 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %.0248.epil = phi double [ %48, %.epil.preheader ], [ %.0248.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %46 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.epil
  %47 = load double, ptr %46, align 8, !tbaa !25
  %48 = tail call double @llvm.fmuladd.f64(double %47, double %47, double %.0248.epil)
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader, !llvm.loop !28

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader, %20
  %.0.lcssa = phi double [ 0.000000e+00, %20 ], [ %.lcssa355.ph, %._crit_edge.loopexit.unr-lcssa ], [ %48, %.epil.preheader ]
  %49 = sitofp i32 %28 to double
  %50 = fdiv double %.0.lcssa, %49
  %51 = tail call double @sqrt(double noundef %50) #7
  %52 = getelementptr inbounds i8, ptr %0, i64 456
  store double %51, ptr %52, align 8, !tbaa !30
  %53 = tail call double @sqrt(double noundef %49) #7
  %54 = fmul double %49, 4.000000e+00
  %55 = fdiv double 1.000000e+00, %54
  %56 = fsub double 1.000000e+00, %55
  %57 = fmul double %49, 2.100000e+01
  %58 = fmul double %57, %49
  %59 = fdiv double 1.000000e+00, %58
  %60 = fadd double %56, %59
  %61 = fmul double %60, %53
  %62 = getelementptr inbounds i8, ptr %0, i64 512
  store double %61, ptr %62, align 8, !tbaa !31
  %63 = getelementptr inbounds i8, ptr %0, i64 994
  store i16 1, ptr %63, align 2, !tbaa !32
  %64 = getelementptr inbounds i8, ptr %0, i64 996
  store i16 0, ptr %64, align 4, !tbaa !33
  %65 = getelementptr inbounds i8, ptr %0, i64 1000
  store double 0.000000e+00, ptr %65, align 8, !tbaa !34
  %66 = getelementptr inbounds i8, ptr %0, i64 1008
  tail call void @cmaes_timings_init(ptr noundef nonnull %66)
  %67 = getelementptr inbounds i8, ptr %0, i64 504
  store i16 0, ptr %67, align 8, !tbaa !35
  %68 = getelementptr inbounds i8, ptr %0, i64 1112
  store i16 0, ptr %68, align 8, !tbaa !36
  %69 = getelementptr inbounds i8, ptr %0, i64 506
  store i16 0, ptr %69, align 2, !tbaa !37
  br label %70

70:                                               ; preds = %._crit_edge, %70
  %.0227249 = phi double [ 1.000000e+00, %._crit_edge ], [ %71, %70 ]
  %71 = fmul double %.0227249, 2.000000e+00
  %72 = fcmp oeq double %71, 0.000000e+00
  %73 = fmul double %71, 1.100000e+00
  %74 = fcmp uge double %71, %73
  %.not242 = or i1 %72, %74
  %75 = fadd double %71, 1.000000e+00
  %76 = fcmp oeq double %71, %75
  %or.cond = or i1 %76, %.not242
  br i1 %or.cond, label %77, label %70, !llvm.loop !38

77:                                               ; preds = %70
  %78 = fdiv double %71, 1.000000e+03
  %79 = getelementptr inbounds i8, ptr %0, i64 1096
  store double %78, ptr %79, align 8, !tbaa !39
  %80 = getelementptr inbounds i8, ptr %0, i64 608
  %81 = getelementptr inbounds i8, ptr %0, i64 1104
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %80, i8 0, i64 24, i1 false)
  store double 1.000000e+00, ptr %81, align 8, !tbaa !40
  %82 = getelementptr inbounds i8, ptr %0, i64 1120
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %82, i8 0, i64 32, i1 false)
  %83 = tail call ptr @new_double(i32 noundef %28)
  %84 = getelementptr inbounds i8, ptr %0, i64 544
  store ptr %83, ptr %84, align 8, !tbaa !41
  %85 = tail call ptr @new_double(i32 noundef %28)
  %86 = getelementptr inbounds i8, ptr %0, i64 552
  store ptr %85, ptr %86, align 8, !tbaa !42
  %87 = add nsw i32 %28, 1
  %88 = tail call ptr @new_double(i32 noundef %87)
  %89 = getelementptr inbounds i8, ptr %0, i64 584
  store ptr %88, ptr %89, align 8, !tbaa !43
  %90 = tail call ptr @new_double(i32 noundef %28)
  %91 = getelementptr inbounds i8, ptr %0, i64 576
  store ptr %90, ptr %91, align 8, !tbaa !44
  %92 = add nsw i32 %28, 2
  %93 = tail call ptr @new_double(i32 noundef %92)
  %94 = getelementptr inbounds i8, ptr %0, i64 464
  store double %49, ptr %93, align 8, !tbaa !25
  %95 = getelementptr inbounds i8, ptr %93, i64 8
  store ptr %95, ptr %94, align 8, !tbaa !45
  %96 = tail call ptr @new_double(i32 noundef %92)
  %97 = getelementptr inbounds i8, ptr %0, i64 560
  store double %49, ptr %96, align 8, !tbaa !25
  %98 = getelementptr inbounds i8, ptr %96, i64 8
  store ptr %98, ptr %97, align 8, !tbaa !46
  %99 = add nsw i32 %28, 3
  %100 = tail call ptr @new_double(i32 noundef %99)
  %101 = getelementptr inbounds i8, ptr %0, i64 472
  store double %49, ptr %100, align 8, !tbaa !25
  %102 = getelementptr inbounds i8, ptr %100, i64 8
  store ptr %102, ptr %101, align 8, !tbaa !47
  %103 = tail call ptr @new_double(i32 noundef %92)
  %104 = getelementptr inbounds i8, ptr %0, i64 568
  store double %49, ptr %103, align 8, !tbaa !25
  %105 = getelementptr inbounds i8, ptr %103, i64 8
  store ptr %105, ptr %104, align 8, !tbaa !48
  %106 = tail call ptr @new_double(i32 noundef %28)
  %107 = getelementptr inbounds i8, ptr %0, i64 536
  store ptr %106, ptr %107, align 8, !tbaa !49
  %108 = tail call ptr @new_void(i32 noundef %28, i64 noundef 8)
  %109 = getelementptr inbounds i8, ptr %0, i64 520
  store ptr %108, ptr %109, align 8, !tbaa !50
  %110 = tail call ptr @new_void(i32 noundef %28, i64 noundef 8)
  %111 = getelementptr inbounds i8, ptr %0, i64 528
  store ptr %110, ptr %111, align 8, !tbaa !51
  %112 = getelementptr inbounds i8, ptr %0, i64 144
  %113 = load i32, ptr %112, align 8, !tbaa !52
  %114 = tail call ptr @new_double(i32 noundef %113)
  %115 = getelementptr inbounds i8, ptr %0, i64 600
  store ptr %114, ptr %115, align 8, !tbaa !53
  %116 = load i32, ptr %112, align 8, !tbaa !52
  %117 = add nsw i32 %116, 1
  %118 = tail call ptr @new_double(i32 noundef %117)
  %119 = getelementptr inbounds i8, ptr %0, i64 592
  %120 = load i32, ptr %112, align 8, !tbaa !52
  %121 = sitofp i32 %120 to double
  store double %121, ptr %118, align 8, !tbaa !25
  %122 = getelementptr inbounds i8, ptr %118, i64 8
  store ptr %122, ptr %119, align 8, !tbaa !54
  %123 = fmul double %49, 3.000000e+01
  %124 = fdiv double %123, %121
  %125 = tail call double @llvm.ceil.f64(double %124)
  %126 = fptosi double %125 to i32
  %127 = add nsw i32 %126, 11
  %128 = tail call ptr @new_double(i32 noundef %127)
  %129 = getelementptr inbounds i8, ptr %0, i64 496
  %130 = load i32, ptr %112, align 8, !tbaa !52
  %131 = sitofp i32 %130 to double
  %132 = fdiv double %123, %131
  %133 = tail call double @llvm.ceil.f64(double %132)
  %134 = fptosi double %133 to i32
  %135 = add nsw i32 %134, 10
  %136 = sitofp i32 %135 to double
  store double %136, ptr %128, align 8, !tbaa !25
  %137 = getelementptr inbounds i8, ptr %128, i64 8
  store ptr %137, ptr %129, align 8, !tbaa !55
  br i1 %29, label %.lr.ph252.preheader, label %._crit_edge253

.lr.ph252.preheader:                              ; preds = %77
  %wide.trip.count291 = zext nneg i32 %28 to i64
  br label %.lr.ph252

.lr.ph252:                                        ; preds = %.lr.ph252.preheader, %.lr.ph252
  %indvars.iv288 = phi i64 [ 0, %.lr.ph252.preheader ], [ %indvars.iv.next289, %.lr.ph252 ]
  %indvars.iv.next289 = add nuw nsw i64 %indvars.iv288, 1
  %138 = trunc nuw nsw i64 %indvars.iv.next289 to i32
  %139 = tail call ptr @new_double(i32 noundef %138)
  %140 = load ptr, ptr %109, align 8, !tbaa !50
  %141 = getelementptr inbounds ptr, ptr %140, i64 %indvars.iv288
  store ptr %139, ptr %141, align 8, !tbaa !19
  %142 = tail call ptr @new_double(i32 noundef %28)
  %143 = load ptr, ptr %111, align 8, !tbaa !51
  %144 = getelementptr inbounds ptr, ptr %143, i64 %indvars.iv288
  store ptr %142, ptr %144, align 8, !tbaa !19
  %exitcond292.not = icmp eq i64 %indvars.iv.next289, %wide.trip.count291
  br i1 %exitcond292.not, label %._crit_edge253.loopexit, label %.lr.ph252, !llvm.loop !56

._crit_edge253.loopexit:                          ; preds = %.lr.ph252
  %.pre334 = load i32, ptr %112, align 8, !tbaa !52
  br label %._crit_edge253

._crit_edge253:                                   ; preds = %._crit_edge253.loopexit, %77
  %145 = phi i32 [ %.pre334, %._crit_edge253.loopexit ], [ %130, %77 ]
  %146 = tail call ptr @new_void(i32 noundef %145, i64 noundef 4)
  %147 = getelementptr inbounds i8, ptr %0, i64 488
  store ptr %146, ptr %147, align 8, !tbaa !57
  %148 = load i32, ptr %112, align 8, !tbaa !52
  %149 = icmp sgt i32 %148, 0
  br i1 %149, label %.lr.ph256, label %._crit_edge257

.lr.ph256:                                        ; preds = %._crit_edge253, %.lr.ph256
  %indvars.iv293 = phi i64 [ %indvars.iv.next294, %.lr.ph256 ], [ 0, %._crit_edge253 ]
  %150 = getelementptr inbounds i32, ptr %146, i64 %indvars.iv293
  %151 = trunc nuw nsw i64 %indvars.iv293 to i32
  store i32 %151, ptr %150, align 4, !tbaa !58
  %indvars.iv.next294 = add nuw nsw i64 %indvars.iv293, 1
  %152 = load i32, ptr %112, align 8, !tbaa !52
  %153 = sext i32 %152 to i64
  %154 = icmp slt i64 %indvars.iv.next294, %153
  br i1 %154, label %.lr.ph256, label %._crit_edge257, !llvm.loop !59

._crit_edge257:                                   ; preds = %.lr.ph256, %._crit_edge253
  %.lcssa = phi i32 [ %148, %._crit_edge253 ], [ %152, %.lr.ph256 ]
  %155 = tail call ptr @new_void(i32 noundef %.lcssa, i64 noundef 8)
  %156 = getelementptr inbounds i8, ptr %0, i64 480
  store ptr %155, ptr %156, align 8, !tbaa !60
  %157 = load i32, ptr %112, align 8, !tbaa !52
  %158 = icmp sgt i32 %157, 0
  br i1 %158, label %.lr.ph261, label %.preheader246

.preheader246:                                    ; preds = %.lr.ph261, %._crit_edge257
  br i1 %29, label %.preheader245.preheader, label %.preheader244.._crit_edge268_crit_edge

.preheader245.preheader:                          ; preds = %.preheader246
  %wide.trip.count307 = zext nneg i32 %28 to i64
  br label %.preheader245

.lr.ph261:                                        ; preds = %._crit_edge257, %.lr.ph261
  %indvars.iv296 = phi i64 [ %indvars.iv.next297, %.lr.ph261 ], [ 0, %._crit_edge257 ]
  %159 = tail call ptr @new_double(i32 noundef %92)
  %160 = load ptr, ptr %156, align 8, !tbaa !60
  %161 = getelementptr inbounds ptr, ptr %160, i64 %indvars.iv296
  store ptr %159, ptr %161, align 8, !tbaa !19
  %162 = load ptr, ptr %156, align 8, !tbaa !60
  %163 = getelementptr inbounds ptr, ptr %162, i64 %indvars.iv296
  %164 = load ptr, ptr %163, align 8, !tbaa !19
  store double %49, ptr %164, align 8, !tbaa !25
  %165 = getelementptr inbounds i8, ptr %164, i64 8
  store ptr %165, ptr %163, align 8, !tbaa !19
  %indvars.iv.next297 = add nuw nsw i64 %indvars.iv296, 1
  %166 = load i32, ptr %112, align 8, !tbaa !52
  %167 = sext i32 %166 to i64
  %168 = icmp slt i64 %indvars.iv.next297, %167
  br i1 %168, label %.lr.ph261, label %.preheader246, !llvm.loop !61

.preheader245:                                    ; preds = %.preheader245.preheader, %._crit_edge264
  %indvars.iv304 = phi i64 [ 0, %.preheader245.preheader ], [ %indvars.iv.next305, %._crit_edge264 ]
  %.not283 = icmp eq i64 %indvars.iv304, 0
  br i1 %.not283, label %._crit_edge264, label %.lr.ph263

.lr.ph263:                                        ; preds = %.preheader245
  %169 = load ptr, ptr %111, align 8, !tbaa !51
  %170 = getelementptr inbounds ptr, ptr %169, i64 %indvars.iv304
  %171 = load ptr, ptr %170, align 8, !tbaa !19
  %172 = load ptr, ptr %109, align 8, !tbaa !50
  %173 = getelementptr inbounds ptr, ptr %172, i64 %indvars.iv304
  %174 = load ptr, ptr %173, align 8, !tbaa !19
  %xtraiter358 = and i64 %indvars.iv304, 1
  %175 = icmp eq i64 %indvars.iv304, 1
  br i1 %175, label %._crit_edge264.loopexit.unr-lcssa, label %.lr.ph263.new

.lr.ph263.new:                                    ; preds = %.lr.ph263
  %unroll_iter361 = and i64 %indvars.iv304, 9223372036854775806
  br label %178

.preheader244:                                    ; preds = %._crit_edge264
  br i1 %29, label %.lr.ph267, label %.preheader244.._crit_edge268_crit_edge

.preheader244.._crit_edge268_crit_edge:           ; preds = %.preheader246, %.preheader244
  %.pre335 = load ptr, ptr %107, align 8, !tbaa !49
  br label %._crit_edge268

.lr.ph267:                                        ; preds = %.preheader244
  %176 = getelementptr inbounds i8, ptr %0, i64 56
  %177 = fdiv double %49, %.0.lcssa
  %wide.trip.count312 = zext nneg i32 %28 to i64
  br label %194

178:                                              ; preds = %178, %.lr.ph263.new
  %indvars.iv299 = phi i64 [ 0, %.lr.ph263.new ], [ %indvars.iv.next300.1, %178 ]
  %niter362 = phi i64 [ 0, %.lr.ph263.new ], [ %niter362.next.1, %178 ]
  %179 = getelementptr inbounds ptr, ptr %169, i64 %indvars.iv299
  %180 = load ptr, ptr %179, align 8, !tbaa !19
  %181 = getelementptr inbounds double, ptr %180, i64 %indvars.iv304
  store double 0.000000e+00, ptr %181, align 8, !tbaa !25
  %182 = getelementptr inbounds double, ptr %171, i64 %indvars.iv299
  store double 0.000000e+00, ptr %182, align 8, !tbaa !25
  %183 = getelementptr inbounds double, ptr %174, i64 %indvars.iv299
  store double 0.000000e+00, ptr %183, align 8, !tbaa !25
  %indvars.iv.next300 = or disjoint i64 %indvars.iv299, 1
  %184 = getelementptr inbounds ptr, ptr %169, i64 %indvars.iv.next300
  %185 = load ptr, ptr %184, align 8, !tbaa !19
  %186 = getelementptr inbounds double, ptr %185, i64 %indvars.iv304
  store double 0.000000e+00, ptr %186, align 8, !tbaa !25
  %187 = getelementptr inbounds double, ptr %171, i64 %indvars.iv.next300
  store double 0.000000e+00, ptr %187, align 8, !tbaa !25
  %188 = getelementptr inbounds double, ptr %174, i64 %indvars.iv.next300
  store double 0.000000e+00, ptr %188, align 8, !tbaa !25
  %indvars.iv.next300.1 = add nuw nsw i64 %indvars.iv299, 2
  %niter362.next.1 = add i64 %niter362, 2
  %niter362.ncmp.1 = icmp eq i64 %niter362.next.1, %unroll_iter361
  br i1 %niter362.ncmp.1, label %._crit_edge264.loopexit.unr-lcssa, label %178, !llvm.loop !62

._crit_edge264.loopexit.unr-lcssa:                ; preds = %178, %.lr.ph263
  %indvars.iv299.unr = phi i64 [ 0, %.lr.ph263 ], [ %indvars.iv.next300.1, %178 ]
  %lcmp.mod360.not = icmp eq i64 %xtraiter358, 0
  br i1 %lcmp.mod360.not, label %._crit_edge264, label %._crit_edge264.loopexit.epilog-lcssa

._crit_edge264.loopexit.epilog-lcssa:             ; preds = %._crit_edge264.loopexit.unr-lcssa
  %189 = getelementptr inbounds ptr, ptr %169, i64 %indvars.iv299.unr
  %190 = load ptr, ptr %189, align 8, !tbaa !19
  %191 = getelementptr inbounds double, ptr %190, i64 %indvars.iv304
  store double 0.000000e+00, ptr %191, align 8, !tbaa !25
  %192 = getelementptr inbounds double, ptr %171, i64 %indvars.iv299.unr
  store double 0.000000e+00, ptr %192, align 8, !tbaa !25
  %193 = getelementptr inbounds double, ptr %174, i64 %indvars.iv299.unr
  store double 0.000000e+00, ptr %193, align 8, !tbaa !25
  br label %._crit_edge264

._crit_edge264:                                   ; preds = %._crit_edge264.loopexit.epilog-lcssa, %._crit_edge264.loopexit.unr-lcssa, %.preheader245
  %indvars.iv.next305 = add nuw nsw i64 %indvars.iv304, 1
  %exitcond308.not = icmp eq i64 %indvars.iv.next305, %wide.trip.count307
  br i1 %exitcond308.not, label %.preheader244, label %.preheader245, !llvm.loop !63

194:                                              ; preds = %.lr.ph267, %194
  %indvars.iv309 = phi i64 [ 0, %.lr.ph267 ], [ %indvars.iv.next310, %194 ]
  %195 = load ptr, ptr %111, align 8, !tbaa !51
  %196 = getelementptr inbounds ptr, ptr %195, i64 %indvars.iv309
  %197 = load ptr, ptr %196, align 8, !tbaa !19
  %198 = getelementptr inbounds double, ptr %197, i64 %indvars.iv309
  store double 1.000000e+00, ptr %198, align 8, !tbaa !25
  %199 = load ptr, ptr %176, align 8, !tbaa !24
  %200 = getelementptr inbounds double, ptr %199, i64 %indvars.iv309
  %201 = load double, ptr %200, align 8, !tbaa !25
  %202 = tail call double @sqrt(double noundef %177) #7
  %203 = fmul double %201, %202
  %204 = load ptr, ptr %107, align 8, !tbaa !49
  %205 = getelementptr inbounds double, ptr %204, i64 %indvars.iv309
  store double %203, ptr %205, align 8, !tbaa !25
  %206 = load ptr, ptr %109, align 8, !tbaa !50
  %207 = getelementptr inbounds ptr, ptr %206, i64 %indvars.iv309
  %208 = load ptr, ptr %207, align 8, !tbaa !19
  %209 = getelementptr inbounds double, ptr %208, i64 %indvars.iv309
  %210 = fmul double %203, %203
  store double %210, ptr %209, align 8, !tbaa !25
  %211 = load ptr, ptr %86, align 8, !tbaa !42
  %212 = getelementptr inbounds double, ptr %211, i64 %indvars.iv309
  store double 0.000000e+00, ptr %212, align 8, !tbaa !25
  %213 = load ptr, ptr %84, align 8, !tbaa !41
  %214 = getelementptr inbounds double, ptr %213, i64 %indvars.iv309
  store double 0.000000e+00, ptr %214, align 8, !tbaa !25
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %exitcond313.not = icmp eq i64 %indvars.iv.next310, %wide.trip.count312
  br i1 %exitcond313.not, label %._crit_edge268, label %194, !llvm.loop !64

._crit_edge268:                                   ; preds = %194, %.preheader244.._crit_edge268_crit_edge
  %215 = phi ptr [ %.pre335, %.preheader244.._crit_edge268_crit_edge ], [ %204, %194 ]
  %216 = tail call double @rgdouMin(ptr noundef %215, i32 noundef %28)
  %217 = getelementptr inbounds i8, ptr %0, i64 656
  %218 = fmul double %216, %216
  store double %218, ptr %217, align 8, !tbaa !65
  %219 = load ptr, ptr %107, align 8, !tbaa !49
  %220 = tail call double @rgdouMax(ptr noundef %219, i32 noundef %28)
  %221 = getelementptr inbounds i8, ptr %0, i64 648
  %222 = fmul double %220, %220
  store double %222, ptr %221, align 8, !tbaa !66
  %223 = load ptr, ptr %109, align 8, !tbaa !50
  %224 = load ptr, ptr %223, align 8, !tbaa !19
  %225 = load double, ptr %224, align 8, !tbaa !25
  %226 = getelementptr inbounds i8, ptr %0, i64 632
  store double %225, ptr %226, align 8, !tbaa !67
  %227 = icmp sgt i32 %28, 1
  br i1 %227, label %.lr.ph271, label %._crit_edge272.thread

._crit_edge272.thread:                            ; preds = %._crit_edge268
  %228 = getelementptr inbounds i8, ptr %0, i64 640
  store double %225, ptr %228, align 8, !tbaa !68
  br label %.preheader243

.lr.ph271:                                        ; preds = %._crit_edge268
  %wide.trip.count317 = zext nneg i32 %28 to i64
  %229 = add nsw i64 %wide.trip.count317, -1
  %230 = add nsw i64 %wide.trip.count317, -2
  %xtraiter364 = and i64 %229, 1
  %231 = icmp eq i64 %230, 0
  br i1 %231, label %._crit_edge272.unr-lcssa, label %.lr.ph271.new

.lr.ph271.new:                                    ; preds = %.lr.ph271
  %unroll_iter367 = and i64 %229, -2
  br label %232

232:                                              ; preds = %248, %.lr.ph271.new
  %indvars.iv314 = phi i64 [ 1, %.lr.ph271.new ], [ %indvars.iv.next315.1, %248 ]
  %233 = phi double [ %225, %.lr.ph271.new ], [ %249, %248 ]
  %niter368 = phi i64 [ 0, %.lr.ph271.new ], [ %niter368.next.1, %248 ]
  %234 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv314
  %235 = load ptr, ptr %234, align 8, !tbaa !19
  %236 = getelementptr inbounds double, ptr %235, i64 %indvars.iv314
  %237 = load double, ptr %236, align 8, !tbaa !25
  %238 = fcmp olt double %233, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %232
  store double %237, ptr %226, align 8, !tbaa !67
  br label %240

240:                                              ; preds = %232, %239
  %241 = phi double [ %233, %232 ], [ %237, %239 ]
  %indvars.iv.next315 = add nuw nsw i64 %indvars.iv314, 1
  %242 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv.next315
  %243 = load ptr, ptr %242, align 8, !tbaa !19
  %244 = getelementptr inbounds double, ptr %243, i64 %indvars.iv.next315
  %245 = load double, ptr %244, align 8, !tbaa !25
  %246 = fcmp olt double %241, %245
  br i1 %246, label %247, label %248

247:                                              ; preds = %240
  store double %245, ptr %226, align 8, !tbaa !67
  br label %248

248:                                              ; preds = %247, %240
  %249 = phi double [ %241, %240 ], [ %245, %247 ]
  %indvars.iv.next315.1 = add nuw nsw i64 %indvars.iv314, 2
  %niter368.next.1 = add i64 %niter368, 2
  %niter368.ncmp.1 = icmp eq i64 %niter368.next.1, %unroll_iter367
  br i1 %niter368.ncmp.1, label %._crit_edge272.unr-lcssa, label %232, !llvm.loop !69

._crit_edge272.unr-lcssa:                         ; preds = %248, %.lr.ph271
  %indvars.iv314.unr = phi i64 [ 1, %.lr.ph271 ], [ %indvars.iv.next315.1, %248 ]
  %.unr = phi double [ %225, %.lr.ph271 ], [ %249, %248 ]
  %lcmp.mod366.not = icmp eq i64 %xtraiter364, 0
  br i1 %lcmp.mod366.not, label %._crit_edge272, label %.epil.preheader363

.epil.preheader363:                               ; preds = %._crit_edge272.unr-lcssa
  %250 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv314.unr
  %251 = load ptr, ptr %250, align 8, !tbaa !19
  %252 = getelementptr inbounds double, ptr %251, i64 %indvars.iv314.unr
  %253 = load double, ptr %252, align 8, !tbaa !25
  %254 = fcmp olt double %.unr, %253
  br i1 %254, label %255, label %._crit_edge272

255:                                              ; preds = %.epil.preheader363
  store double %253, ptr %226, align 8, !tbaa !67
  br label %._crit_edge272

._crit_edge272:                                   ; preds = %.epil.preheader363, %255, %._crit_edge272.unr-lcssa
  %.pre336 = load double, ptr %224, align 8, !tbaa !25
  %256 = getelementptr inbounds i8, ptr %0, i64 640
  store double %.pre336, ptr %256, align 8, !tbaa !68
  br i1 %227, label %.lr.ph275, label %.preheader243

.lr.ph275:                                        ; preds = %._crit_edge272
  %xtraiter370 = and i64 %229, 1
  %257 = icmp eq i64 %230, 0
  br i1 %257, label %.preheader243.loopexit.unr-lcssa, label %.lr.ph275.new

.lr.ph275.new:                                    ; preds = %.lr.ph275
  %unroll_iter374 = and i64 %229, -2
  br label %287

.preheader243.loopexit.unr-lcssa:                 ; preds = %303, %.lr.ph275
  %indvars.iv319.unr = phi i64 [ 1, %.lr.ph275 ], [ %indvars.iv.next320.1, %303 ]
  %.unr372 = phi double [ %.pre336, %.lr.ph275 ], [ %304, %303 ]
  %lcmp.mod373.not = icmp eq i64 %xtraiter370, 0
  br i1 %lcmp.mod373.not, label %.preheader243, label %.epil.preheader369

.epil.preheader369:                               ; preds = %.preheader243.loopexit.unr-lcssa
  %258 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv319.unr
  %259 = load ptr, ptr %258, align 8, !tbaa !19
  %260 = getelementptr inbounds double, ptr %259, i64 %indvars.iv319.unr
  %261 = load double, ptr %260, align 8, !tbaa !25
  %262 = fcmp ogt double %.unr372, %261
  br i1 %262, label %263, label %.preheader243

263:                                              ; preds = %.epil.preheader369
  store double %261, ptr %256, align 8, !tbaa !68
  br label %.preheader243

.preheader243:                                    ; preds = %.preheader243.loopexit.unr-lcssa, %263, %.epil.preheader369, %._crit_edge272.thread, %._crit_edge272
  br i1 %29, label %.lr.ph278, label %.loopexit

.lr.ph278:                                        ; preds = %.preheader243
  %264 = getelementptr inbounds i8, ptr %0, i64 32
  %265 = load ptr, ptr %264, align 8, !tbaa !70
  %266 = load ptr, ptr %97, align 8, !tbaa !46
  %267 = load ptr, ptr %94, align 8, !tbaa !45
  %wide.trip.count327 = zext nneg i32 %28 to i64
  %min.iters.check = icmp ult i32 %28, 16
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph278
  %indvars.iv324.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph278 ], [ %n.vec, %middle.block ]
  %xtraiter376 = and i64 %wide.trip.count327, 3
  %lcmp.mod377.not = icmp eq i64 %xtraiter376, 0
  br i1 %lcmp.mod377.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv324.prol = phi i64 [ %indvars.iv.next325.prol, %scalar.ph.prol ], [ %indvars.iv324.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %268 = getelementptr inbounds double, ptr %265, i64 %indvars.iv324.prol
  %269 = load double, ptr %268, align 8, !tbaa !25
  %270 = getelementptr inbounds double, ptr %266, i64 %indvars.iv324.prol
  store double %269, ptr %270, align 8, !tbaa !25
  %271 = getelementptr inbounds double, ptr %267, i64 %indvars.iv324.prol
  store double %269, ptr %271, align 8, !tbaa !25
  %indvars.iv.next325.prol = add nuw nsw i64 %indvars.iv324.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter376
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !71

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv324.unr = phi i64 [ %indvars.iv324.ph, %scalar.ph.preheader ], [ %indvars.iv.next325.prol, %scalar.ph.prol ]
  %272 = sub nsw i64 %indvars.iv324.ph, %wide.trip.count327
  %273 = icmp ugt i64 %272, -4
  br i1 %273, label %._crit_edge279, label %scalar.ph

vector.memcheck:                                  ; preds = %.lr.ph278
  %274 = ptrtoint ptr %267 to i64
  %275 = ptrtoint ptr %266 to i64
  %276 = ptrtoint ptr %265 to i64
  %277 = sub i64 %274, %275
  %diff.check = icmp ult i64 %277, 32
  %278 = sub i64 %275, %276
  %diff.check348 = icmp ult i64 %278, 32
  %conflict.rdx = or i1 %diff.check, %diff.check348
  %279 = sub i64 %274, %276
  %diff.check349 = icmp ult i64 %279, 32
  %conflict.rdx350 = or i1 %conflict.rdx, %diff.check349
  br i1 %conflict.rdx350, label %scalar.ph.preheader, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %280 = getelementptr inbounds double, ptr %265, i64 %index
  %281 = getelementptr inbounds i8, ptr %280, i64 16
  %wide.load = load <2 x double>, ptr %280, align 8, !tbaa !25
  %wide.load351 = load <2 x double>, ptr %281, align 8, !tbaa !25
  %282 = getelementptr inbounds double, ptr %266, i64 %index
  %283 = getelementptr inbounds i8, ptr %282, i64 16
  store <2 x double> %wide.load, ptr %282, align 8, !tbaa !25
  store <2 x double> %wide.load351, ptr %283, align 8, !tbaa !25
  %284 = getelementptr inbounds double, ptr %267, i64 %index
  %285 = getelementptr inbounds i8, ptr %284, i64 16
  store <2 x double> %wide.load, ptr %284, align 8, !tbaa !25
  store <2 x double> %wide.load351, ptr %285, align 8, !tbaa !25
  %index.next = add nuw i64 %index, 4
  %286 = icmp eq i64 %index.next, %n.vec
  br i1 %286, label %middle.block, label %vector.body, !llvm.loop !72

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

287:                                              ; preds = %303, %.lr.ph275.new
  %indvars.iv319 = phi i64 [ 1, %.lr.ph275.new ], [ %indvars.iv.next320.1, %303 ]
  %288 = phi double [ %.pre336, %.lr.ph275.new ], [ %304, %303 ]
  %niter375 = phi i64 [ 0, %.lr.ph275.new ], [ %niter375.next.1, %303 ]
  %289 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv319
  %290 = load ptr, ptr %289, align 8, !tbaa !19
  %291 = getelementptr inbounds double, ptr %290, i64 %indvars.iv319
  %292 = load double, ptr %291, align 8, !tbaa !25
  %293 = fcmp ogt double %288, %292
  br i1 %293, label %294, label %295

294:                                              ; preds = %287
  store double %292, ptr %256, align 8, !tbaa !68
  br label %295

295:                                              ; preds = %287, %294
  %296 = phi double [ %288, %287 ], [ %292, %294 ]
  %indvars.iv.next320 = add nuw nsw i64 %indvars.iv319, 1
  %297 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv.next320
  %298 = load ptr, ptr %297, align 8, !tbaa !19
  %299 = getelementptr inbounds double, ptr %298, i64 %indvars.iv.next320
  %300 = load double, ptr %299, align 8, !tbaa !25
  %301 = fcmp ogt double %296, %300
  br i1 %301, label %302, label %303

302:                                              ; preds = %295
  store double %300, ptr %256, align 8, !tbaa !68
  br label %303

303:                                              ; preds = %302, %295
  %304 = phi double [ %296, %295 ], [ %300, %302 ]
  %indvars.iv.next320.1 = add nuw nsw i64 %indvars.iv319, 2
  %niter375.next.1 = add i64 %niter375, 2
  %niter375.ncmp.1 = icmp eq i64 %niter375.next.1, %unroll_iter374
  br i1 %niter375.ncmp.1, label %.preheader243.loopexit.unr-lcssa, label %287, !llvm.loop !75

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv324 = phi i64 [ %indvars.iv.next325.3, %scalar.ph ], [ %indvars.iv324.unr, %scalar.ph.prol.loopexit ]
  %305 = getelementptr inbounds double, ptr %265, i64 %indvars.iv324
  %306 = load double, ptr %305, align 8, !tbaa !25
  %307 = getelementptr inbounds double, ptr %266, i64 %indvars.iv324
  store double %306, ptr %307, align 8, !tbaa !25
  %308 = getelementptr inbounds double, ptr %267, i64 %indvars.iv324
  store double %306, ptr %308, align 8, !tbaa !25
  %indvars.iv.next325 = add nuw nsw i64 %indvars.iv324, 1
  %309 = getelementptr inbounds double, ptr %265, i64 %indvars.iv.next325
  %310 = load double, ptr %309, align 8, !tbaa !25
  %311 = getelementptr inbounds double, ptr %266, i64 %indvars.iv.next325
  store double %310, ptr %311, align 8, !tbaa !25
  %312 = getelementptr inbounds double, ptr %267, i64 %indvars.iv.next325
  store double %310, ptr %312, align 8, !tbaa !25
  %indvars.iv.next325.1 = add nuw nsw i64 %indvars.iv324, 2
  %313 = getelementptr inbounds double, ptr %265, i64 %indvars.iv.next325.1
  %314 = load double, ptr %313, align 8, !tbaa !25
  %315 = getelementptr inbounds double, ptr %266, i64 %indvars.iv.next325.1
  store double %314, ptr %315, align 8, !tbaa !25
  %316 = getelementptr inbounds double, ptr %267, i64 %indvars.iv.next325.1
  store double %314, ptr %316, align 8, !tbaa !25
  %indvars.iv.next325.2 = add nuw nsw i64 %indvars.iv324, 3
  %317 = getelementptr inbounds double, ptr %265, i64 %indvars.iv.next325.2
  %318 = load double, ptr %317, align 8, !tbaa !25
  %319 = getelementptr inbounds double, ptr %266, i64 %indvars.iv.next325.2
  store double %318, ptr %319, align 8, !tbaa !25
  %320 = getelementptr inbounds double, ptr %267, i64 %indvars.iv.next325.2
  store double %318, ptr %320, align 8, !tbaa !25
  %indvars.iv.next325.3 = add nuw nsw i64 %indvars.iv324, 4
  %exitcond328.not.3 = icmp eq i64 %indvars.iv.next325.3, %wide.trip.count327
  br i1 %exitcond328.not.3, label %._crit_edge279, label %scalar.ph, !llvm.loop !76

._crit_edge279:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %321 = getelementptr inbounds i8, ptr %0, i64 48
  %322 = load i32, ptr %321, align 8, !tbaa !77
  %.not236 = icmp ne i32 %322, 0
  %or.cond282 = and i1 %.not236, %29
  br i1 %or.cond282, label %.lr.ph281.preheader, label %.loopexit

.lr.ph281.preheader:                              ; preds = %._crit_edge279
  %wide.trip.count332 = zext nneg i32 %28 to i64
  br label %.lr.ph281

.lr.ph281:                                        ; preds = %.lr.ph281.preheader, %.lr.ph281
  %indvars.iv329 = phi i64 [ 0, %.lr.ph281.preheader ], [ %indvars.iv.next330, %.lr.ph281 ]
  %323 = load double, ptr %52, align 8, !tbaa !30
  %324 = load ptr, ptr %107, align 8, !tbaa !49
  %325 = getelementptr inbounds double, ptr %324, i64 %indvars.iv329
  %326 = load double, ptr %325, align 8, !tbaa !25
  %327 = fmul double %323, %326
  %328 = tail call double @cmaes_random_Gauss(ptr noundef nonnull %21)
  %329 = load ptr, ptr %94, align 8, !tbaa !45
  %330 = getelementptr inbounds double, ptr %329, i64 %indvars.iv329
  %331 = load double, ptr %330, align 8, !tbaa !25
  %332 = tail call double @llvm.fmuladd.f64(double %327, double %328, double %331)
  store double %332, ptr %330, align 8, !tbaa !25
  %indvars.iv.next330 = add nuw nsw i64 %indvars.iv329, 1
  %exitcond333.not = icmp eq i64 %indvars.iv.next330, %wide.trip.count332
  br i1 %exitcond333.not, label %.loopexit, label %.lr.ph281, !llvm.loop !78

.loopexit:                                        ; preds = %.lr.ph281, %.preheader243, %._crit_edge279
  %333 = getelementptr inbounds i8, ptr %0, i64 256
  %334 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %333, ptr noundef nonnull dereferenceable(1) @.str.8) #6
  %.not237 = icmp eq i32 %334, 0
  br i1 %.not237, label %336, label %335

335:                                              ; preds = %.loopexit
  tail call void @cmaes_resume_distribution(ptr noundef nonnull %0, ptr noundef nonnull %333)
  br label %336

336:                                              ; preds = %335, %.loopexit
  %337 = load ptr, ptr %115, align 8, !tbaa !53
  ret ptr %337
}

; Function Attrs: nounwind uwtable
declare hidden void @ERRORMESSAGE(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden ptr @new_void(i32 noundef, i64 noundef) local_unnamed_addr #0

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

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

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind willreturn memory(read) }
attributes #7 = { 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 = !{!"", !7, i64 0, !10, i64 8, !16, i64 408, !13, i64 456, !7, i64 464, !7, i64 472, !7, i64 480, !7, i64 488, !7, i64 496, !11, i64 504, !11, i64 506, !13, i64 512, !7, i64 520, !7, i64 528, !7, i64 536, !7, i64 544, !7, i64 552, !7, i64 560, !7, i64 568, !7, i64 576, !7, i64 584, !7, i64 592, !7, i64 600, !13, i64 608, !13, i64 616, !13, i64 624, !13, i64 632, !13, i64 640, !13, i64 648, !13, i64 656, !8, i64 664, !11, i64 994, !11, i64 996, !13, i64 1000, !18, i64 1008, !13, i64 1096, !13, i64 1104, !11, i64 1112, !17, i64 1120, !17, i64 1128, !17, i64 1136, !17, i64 1144}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !7, i64 0, !11, i64 8, !12, i64 12, !12, i64 16, !7, i64 24, !7, i64 32, !12, i64 40, !7, i64 48, !7, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !14, i64 88, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !12, i64 136, !12, i64 140, !13, i64 144, !13, i64 152, !7, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !15, i64 208, !13, i64 232, !7, i64 240, !8, i64 248, !7, i64 352, !7, i64 360, !7, i64 368, !7, i64 376, !12, i64 384, !12, i64 388, !12, i64 392}
!11 = !{!"short", !8, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"double", !8, i64 0}
!14 = !{!"", !12, i64 0, !13, i64 8}
!15 = !{!"", !12, i64 0, !13, i64 8, !13, i64 16}
!16 = !{!"", !17, i64 0, !17, i64 8, !17, i64 16, !7, i64 24, !11, i64 32, !13, i64 40}
!17 = !{!"long", !8, i64 0}
!18 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !17, i64 32, !17, i64 40, !17, i64 48, !17, i64 56, !11, i64 64, !11, i64 66, !13, i64 72, !13, i64 80}
!19 = !{!7, !7, i64 0}
!20 = !{!6, !11, i64 16}
!21 = !{!6, !7, i64 8}
!22 = !{!6, !12, i64 24}
!23 = !{!6, !12, i64 20}
!24 = !{!6, !7, i64 56}
!25 = !{!13, !13, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.unroll.disable"}
!30 = !{!6, !13, i64 456}
!31 = !{!6, !13, i64 512}
!32 = !{!6, !11, i64 994}
!33 = !{!6, !11, i64 996}
!34 = !{!6, !13, i64 1000}
!35 = !{!6, !11, i64 504}
!36 = !{!6, !11, i64 1112}
!37 = !{!6, !11, i64 506}
!38 = distinct !{!38, !27}
!39 = !{!6, !13, i64 1096}
!40 = !{!6, !13, i64 1104}
!41 = !{!6, !7, i64 544}
!42 = !{!6, !7, i64 552}
!43 = !{!6, !7, i64 584}
!44 = !{!6, !7, i64 576}
!45 = !{!6, !7, i64 464}
!46 = !{!6, !7, i64 560}
!47 = !{!6, !7, i64 472}
!48 = !{!6, !7, i64 568}
!49 = !{!6, !7, i64 536}
!50 = !{!6, !7, i64 520}
!51 = !{!6, !7, i64 528}
!52 = !{!6, !12, i64 144}
!53 = !{!6, !7, i64 600}
!54 = !{!6, !7, i64 592}
!55 = !{!6, !7, i64 496}
!56 = distinct !{!56, !27}
!57 = !{!6, !7, i64 488}
!58 = !{!12, !12, i64 0}
!59 = distinct !{!59, !27}
!60 = !{!6, !7, i64 480}
!61 = distinct !{!61, !27}
!62 = distinct !{!62, !27}
!63 = distinct !{!63, !27}
!64 = distinct !{!64, !27}
!65 = !{!6, !13, i64 656}
!66 = !{!6, !13, i64 648}
!67 = !{!6, !13, i64 632}
!68 = !{!6, !13, i64 640}
!69 = distinct !{!69, !27}
!70 = !{!6, !7, i64 32}
!71 = distinct !{!71, !29}
!72 = distinct !{!72, !27, !73, !74}
!73 = !{!"llvm.loop.isvectorized", i32 1}
!74 = !{!"llvm.loop.unroll.runtime.disable"}
!75 = distinct !{!75, !27}
!76 = distinct !{!76, !27, !73}
!77 = !{!6, !12, i64 48}
!78 = distinct !{!78, !27}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass