; 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_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 }

@.str.237 = external hidden unnamed_addr constant [60 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local void @cmaes_readpara_SupplementDefaults(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca double, align 8
  %4 = alloca double, align 8
  %5 = alloca i32, align 4
  %6 = alloca i64, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  %7 = load ptr, ptr %2, align 8, !tbaa !5
  %8 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %7, i32 0, i32 2
  %9 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %9, ptr %5, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %10 = call i64 @clock() #4
  store i64 %10, ptr %6, align 8, !tbaa !17
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  %12 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %11, i32 0, i32 1
  %13 = load i16, ptr %12, align 8, !tbaa !19
  %14 = icmp ne i16 %13, 0
  br i1 %14, label %15, label %16

15:                                               ; preds = %1
  call void @FATAL(ptr noundef @.str.237, ptr noundef null, ptr noundef null, ptr noundef null)
  br label %16

16:                                               ; preds = %15, %1
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %17, i32 0, i32 3
  %19 = load i32, ptr %18, align 8, !tbaa !20
  %20 = icmp ult i32 %19, 1
  br i1 %20, label %21, label %38

21:                                               ; preds = %16
  br label %22

22:                                               ; preds = %28, %21
  %23 = load i64, ptr %6, align 8, !tbaa !17
  %24 = call i64 @clock() #4
  %25 = sub nsw i64 %23, %24
  %26 = trunc i64 %25 to i32
  %27 = icmp eq i32 %26, 0
  br i1 %27, label %28, label %29

28:                                               ; preds = %22
  br label %22, !llvm.loop !21

29:                                               ; preds = %22
  %30 = call i64 @time(ptr noundef null) #4
  %31 = mul nsw i64 100, %30
  %32 = call i64 @clock() #4
  %33 = add nsw i64 %31, %32
  %34 = call i64 @llvm.abs.i64(i64 %33, i1 true)
  %35 = trunc i64 %34 to i32
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %36, i32 0, i32 3
  store i32 %35, ptr %37, align 8, !tbaa !20
  br label %38

38:                                               ; preds = %29, %16
  %39 = load ptr, ptr %2, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %39, i32 0, i32 12
  %41 = getelementptr inbounds %struct.anon, ptr %40, i32 0, i32 0
  %42 = load i32, ptr %41, align 8, !tbaa !23
  %43 = icmp eq i32 %42, -1
  br i1 %43, label %44, label %48

44:                                               ; preds = %38
  %45 = load ptr, ptr %2, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %45, i32 0, i32 12
  %47 = getelementptr inbounds %struct.anon, ptr %46, i32 0, i32 0
  store i32 0, ptr %47, align 8, !tbaa !23
  br label %48

48:                                               ; preds = %44, %38
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %49, i32 0, i32 17
  %51 = load i32, ptr %50, align 8, !tbaa !24
  %52 = icmp slt i32 %51, 2
  br i1 %52, label %53, label %62

53:                                               ; preds = %48
  %54 = load i32, ptr %5, align 4, !tbaa !16
  %55 = sitofp i32 %54 to double
  %56 = call double @log(double noundef %55) #4
  %57 = fmul double 3.000000e+00, %56
  %58 = fptosi double %57 to i32
  %59 = add nsw i32 4, %58
  %60 = load ptr, ptr %2, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %60, i32 0, i32 17
  store i32 %59, ptr %61, align 8, !tbaa !24
  br label %62

62:                                               ; preds = %53, %48
  %63 = load ptr, ptr %2, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %63, i32 0, i32 18
  %65 = load i32, ptr %64, align 4, !tbaa !25
  %66 = icmp eq i32 %65, -1
  br i1 %66, label %67, label %78

67:                                               ; preds = %62
  %68 = load ptr, ptr %2, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %68, i32 0, i32 17
  %70 = load i32, ptr %69, align 8, !tbaa !24
  %71 = sdiv i32 %70, 2
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %72, i32 0, i32 18
  store i32 %71, ptr %73, align 4, !tbaa !25
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = load ptr, ptr %2, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %75, i32 0, i32 29
  %77 = load ptr, ptr %76, align 8, !tbaa !26
  call void @cmaes_readpara_SetWeights(ptr noundef %74, ptr noundef %77)
  br label %78

78:                                               ; preds = %67, %62
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %79, i32 0, i32 21
  %81 = load ptr, ptr %80, align 8, !tbaa !27
  %82 = icmp eq ptr %81, null
  br i1 %82, label %83, label %88

83:                                               ; preds = %78
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %85, i32 0, i32 29
  %87 = load ptr, ptr %86, align 8, !tbaa !26
  call void @cmaes_readpara_SetWeights(ptr noundef %84, ptr noundef %87)
  br label %88

88:                                               ; preds = %83, %78
  %89 = load ptr, ptr %2, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %89, i32 0, i32 23
  %91 = load double, ptr %90, align 8, !tbaa !28
  %92 = fcmp ogt double %91, 0.000000e+00
  br i1 %92, label %93, label %110

93:                                               ; preds = %88
  %94 = load ptr, ptr %2, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %94, i32 0, i32 20
  %96 = load double, ptr %95, align 8, !tbaa !29
  %97 = fadd double %96, 2.000000e+00
  %98 = load i32, ptr %5, align 4, !tbaa !16
  %99 = sitofp i32 %98 to double
  %100 = load ptr, ptr %2, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %100, i32 0, i32 20
  %102 = load double, ptr %101, align 8, !tbaa !29
  %103 = fadd double %99, %102
  %104 = fadd double %103, 3.000000e+00
  %105 = fdiv double %97, %104
  %106 = load ptr, ptr %2, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %106, i32 0, i32 23
  %108 = load double, ptr %107, align 8, !tbaa !28
  %109 = fmul double %108, %105
  store double %109, ptr %107, align 8, !tbaa !28
  br label %110

110:                                              ; preds = %93, %88
  %111 = load ptr, ptr %2, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %111, i32 0, i32 23
  %113 = load double, ptr %112, align 8, !tbaa !28
  %114 = fcmp ole double %113, 0.000000e+00
  br i1 %114, label %120, label %115

115:                                              ; preds = %110
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %116, i32 0, i32 23
  %118 = load double, ptr %117, align 8, !tbaa !28
  %119 = fcmp oge double %118, 1.000000e+00
  br i1 %119, label %120, label %135

120:                                              ; preds = %115, %110
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %121, i32 0, i32 20
  %123 = load double, ptr %122, align 8, !tbaa !29
  %124 = fadd double %123, 2.000000e+00
  %125 = load i32, ptr %5, align 4, !tbaa !16
  %126 = sitofp i32 %125 to double
  %127 = load ptr, ptr %2, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %127, i32 0, i32 20
  %129 = load double, ptr %128, align 8, !tbaa !29
  %130 = fadd double %126, %129
  %131 = fadd double %130, 3.000000e+00
  %132 = fdiv double %124, %131
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %133, i32 0, i32 23
  store double %132, ptr %134, align 8, !tbaa !28
  br label %135

135:                                              ; preds = %120, %115
  %136 = load ptr, ptr %2, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %136, i32 0, i32 24
  %138 = load double, ptr %137, align 8, !tbaa !30
  %139 = fcmp ole double %138, 0.000000e+00
  br i1 %139, label %145, label %140

140:                                              ; preds = %135
  %141 = load ptr, ptr %2, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %141, i32 0, i32 24
  %143 = load double, ptr %142, align 8, !tbaa !30
  %144 = fcmp ogt double %143, 1.000000e+00
  br i1 %144, label %145, label %152

145:                                              ; preds = %140, %135
  %146 = load i32, ptr %5, align 4, !tbaa !16
  %147 = add nsw i32 %146, 4
  %148 = sitofp i32 %147 to double
  %149 = fdiv double 4.000000e+00, %148
  %150 = load ptr, ptr %2, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %150, i32 0, i32 24
  store double %149, ptr %151, align 8, !tbaa !30
  br label %152

152:                                              ; preds = %145, %140
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %153, i32 0, i32 19
  %155 = load double, ptr %154, align 8, !tbaa !31
  %156 = fcmp olt double %155, 1.000000e+00
  br i1 %156, label %157, label %163

157:                                              ; preds = %152
  %158 = load ptr, ptr %2, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %158, i32 0, i32 20
  %160 = load double, ptr %159, align 8, !tbaa !29
  %161 = load ptr, ptr %2, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %161, i32 0, i32 19
  store double %160, ptr %162, align 8, !tbaa !31
  br label %163

163:                                              ; preds = %157, %152
  %164 = load i32, ptr %5, align 4, !tbaa !16
  %165 = sitofp i32 %164 to double
  %166 = fadd double %165, 1.414200e+00
  %167 = load i32, ptr %5, align 4, !tbaa !16
  %168 = sitofp i32 %167 to double
  %169 = fadd double %168, 1.414200e+00
  %170 = fmul double %166, %169
  %171 = fdiv double 2.000000e+00, %170
  store double %171, ptr %3, align 8, !tbaa !32
  %172 = load ptr, ptr %2, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %172, i32 0, i32 20
  %174 = load double, ptr %173, align 8, !tbaa !29
  %175 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %174, double -1.000000e+00)
  %176 = load i32, ptr %5, align 4, !tbaa !16
  %177 = sitofp i32 %176 to double
  %178 = fadd double %177, 2.000000e+00
  %179 = load i32, ptr %5, align 4, !tbaa !16
  %180 = sitofp i32 %179 to double
  %181 = fadd double %180, 2.000000e+00
  %182 = load ptr, ptr %2, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %182, i32 0, i32 20
  %184 = load double, ptr %183, align 8, !tbaa !29
  %185 = call double @llvm.fmuladd.f64(double %178, double %181, double %184)
  %186 = fdiv double %175, %185
  store double %186, ptr %4, align 8, !tbaa !32
  %187 = load double, ptr %4, align 8, !tbaa !32
  %188 = fcmp ogt double %187, 1.000000e+00
  br i1 %188, label %189, label %190

189:                                              ; preds = %163
  br label %192

190:                                              ; preds = %163
  %191 = load double, ptr %4, align 8, !tbaa !32
  br label %192

192:                                              ; preds = %190, %189
  %193 = phi double [ 1.000000e+00, %189 ], [ %191, %190 ]
  store double %193, ptr %4, align 8, !tbaa !32
  %194 = load ptr, ptr %2, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %194, i32 0, i32 19
  %196 = load double, ptr %195, align 8, !tbaa !31
  %197 = fdiv double 1.000000e+00, %196
  %198 = load double, ptr %3, align 8, !tbaa !32
  %199 = load ptr, ptr %2, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %199, i32 0, i32 19
  %201 = load double, ptr %200, align 8, !tbaa !31
  %202 = fdiv double 1.000000e+00, %201
  %203 = fsub double 1.000000e+00, %202
  %204 = load double, ptr %4, align 8, !tbaa !32
  %205 = fmul double %203, %204
  %206 = call double @llvm.fmuladd.f64(double %197, double %198, double %205)
  store double %206, ptr %4, align 8, !tbaa !32
  %207 = load ptr, ptr %2, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %207, i32 0, i32 25
  %209 = load double, ptr %208, align 8, !tbaa !33
  %210 = fcmp oge double %209, 0.000000e+00
  br i1 %210, label %211, label %217

211:                                              ; preds = %192
  %212 = load double, ptr %4, align 8, !tbaa !32
  %213 = load ptr, ptr %2, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %213, i32 0, i32 25
  %215 = load double, ptr %214, align 8, !tbaa !33
  %216 = fmul double %215, %212
  store double %216, ptr %214, align 8, !tbaa !33
  br label %217

217:                                              ; preds = %211, %192
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %218, i32 0, i32 25
  %220 = load double, ptr %219, align 8, !tbaa !33
  %221 = fcmp olt double %220, 0.000000e+00
  br i1 %221, label %227, label %222

222:                                              ; preds = %217
  %223 = load ptr, ptr %2, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %223, i32 0, i32 25
  %225 = load double, ptr %224, align 8, !tbaa !33
  %226 = fcmp ogt double %225, 1.000000e+00
  br i1 %226, label %227, label %231

227:                                              ; preds = %222, %217
  %228 = load double, ptr %4, align 8, !tbaa !32
  %229 = load ptr, ptr %2, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %229, i32 0, i32 25
  store double %228, ptr %230, align 8, !tbaa !33
  br label %231

231:                                              ; preds = %227, %222
  %232 = load ptr, ptr %2, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %232, i32 0, i32 26
  %234 = load double, ptr %233, align 8, !tbaa !34
  %235 = fcmp oeq double %234, -1.000000e+00
  br i1 %235, label %236, label %249

236:                                              ; preds = %231
  %237 = load i32, ptr %5, align 4, !tbaa !16
  %238 = sitofp i32 %237 to double
  %239 = fmul double 1.000000e+02, %238
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %240, i32 0, i32 17
  %242 = load i32, ptr %241, align 8, !tbaa !24
  %243 = sitofp i32 %242 to double
  %244 = call double @sqrt(double noundef %243) #4
  %245 = fdiv double %239, %244
  %246 = fadd double 2.000000e+00, %245
  %247 = load ptr, ptr %2, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %247, i32 0, i32 26
  store double %246, ptr %248, align 8, !tbaa !34
  br label %249

249:                                              ; preds = %236, %231
  %250 = load ptr, ptr %2, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %250, i32 0, i32 9
  %252 = load double, ptr %251, align 8, !tbaa !35
  %253 = fcmp oeq double %252, -1.000000e+00
  br i1 %253, label %254, label %269

254:                                              ; preds = %249
  %255 = load ptr, ptr %2, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %255, i32 0, i32 10
  %257 = load double, ptr %256, align 8, !tbaa !36
  %258 = fmul double %257, 9.000000e+02
  %259 = load i32, ptr %5, align 4, !tbaa !16
  %260 = add nsw i32 %259, 3
  %261 = sitofp i32 %260 to double
  %262 = fmul double %258, %261
  %263 = load i32, ptr %5, align 4, !tbaa !16
  %264 = add nsw i32 %263, 3
  %265 = sitofp i32 %264 to double
  %266 = fmul double %262, %265
  %267 = load ptr, ptr %2, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %267, i32 0, i32 9
  store double %266, ptr %268, align 8, !tbaa !35
  br label %277

269:                                              ; preds = %249
  %270 = load ptr, ptr %2, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %270, i32 0, i32 10
  %272 = load double, ptr %271, align 8, !tbaa !36
  %273 = load ptr, ptr %2, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %273, i32 0, i32 9
  %275 = load double, ptr %274, align 8, !tbaa !35
  %276 = fmul double %275, %272
  store double %276, ptr %274, align 8, !tbaa !35
  br label %277

277:                                              ; preds = %269, %254
  %278 = load ptr, ptr %2, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %278, i32 0, i32 11
  %280 = load double, ptr %279, align 8, !tbaa !37
  %281 = fcmp oeq double %280, -1.000000e+00
  br i1 %281, label %282, label %294

282:                                              ; preds = %277
  %283 = load ptr, ptr %2, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %283, i32 0, i32 9
  %285 = load double, ptr %284, align 8, !tbaa !35
  %286 = load ptr, ptr %2, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %286, i32 0, i32 17
  %288 = load i32, ptr %287, align 8, !tbaa !24
  %289 = sitofp i32 %288 to double
  %290 = fdiv double %285, %289
  %291 = call double @llvm.ceil.f64(double %290)
  %292 = load ptr, ptr %2, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %292, i32 0, i32 11
  store double %291, ptr %293, align 8, !tbaa !37
  br label %294

294:                                              ; preds = %282, %277
  %295 = load ptr, ptr %2, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %295, i32 0, i32 22
  %297 = load double, ptr %296, align 8, !tbaa !38
  %298 = fcmp olt double %297, 0.000000e+00
  br i1 %298, label %299, label %302

299:                                              ; preds = %294
  %300 = load ptr, ptr %2, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %300, i32 0, i32 22
  store double 1.000000e+00, ptr %301, align 8, !tbaa !38
  br label %302

302:                                              ; preds = %299, %294
  %303 = load ptr, ptr %2, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %303, i32 0, i32 22
  %305 = load double, ptr %304, align 8, !tbaa !38
  %306 = load ptr, ptr %2, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %306, i32 0, i32 20
  %308 = load double, ptr %307, align 8, !tbaa !29
  %309 = fsub double %308, 1.000000e+00
  %310 = load i32, ptr %5, align 4, !tbaa !16
  %311 = sitofp i32 %310 to double
  %312 = fadd double %311, 1.000000e+00
  %313 = fdiv double %309, %312
  %314 = call double @sqrt(double noundef %313) #4
  %315 = fsub double %314, 1.000000e+00
  %316 = call double @douMax(double noundef 0.000000e+00, double noundef %315)
  %317 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %316, double 1.000000e+00)
  %318 = fmul double %305, %317
  %319 = load i32, ptr %5, align 4, !tbaa !16
  %320 = sitofp i32 %319 to double
  %321 = load ptr, ptr %2, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %321, i32 0, i32 11
  %323 = load double, ptr %322, align 8, !tbaa !37
  %324 = load ptr, ptr %2, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %324, i32 0, i32 9
  %326 = load double, ptr %325, align 8, !tbaa !35
  %327 = load ptr, ptr %2, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %327, i32 0, i32 17
  %329 = load i32, ptr %328, align 8, !tbaa !24
  %330 = sitofp i32 %329 to double
  %331 = fdiv double %326, %330
  %332 = call double @douMin(double noundef %323, double noundef %331)
  %333 = fadd double 0x3EB0C6F7A0B5ED8D, %332
  %334 = fdiv double %320, %333
  %335 = fsub double 1.000000e+00, %334
  %336 = call double @douMax(double noundef 3.000000e-01, double noundef %335)
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %337, i32 0, i32 23
  %339 = load double, ptr %338, align 8, !tbaa !28
  %340 = call double @llvm.fmuladd.f64(double %318, double %336, double %339)
  %341 = load ptr, ptr %2, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %341, i32 0, i32 22
  store double %340, ptr %342, align 8, !tbaa !38
  %343 = load ptr, ptr %2, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %343, i32 0, i32 27
  %345 = getelementptr inbounds %struct.anon.0, ptr %344, i32 0, i32 1
  %346 = load double, ptr %345, align 8, !tbaa !39
  %347 = fcmp olt double %346, 0.000000e+00
  br i1 %347, label %348, label %360

348:                                              ; preds = %302
  %349 = load ptr, ptr %2, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %349, i32 0, i32 25
  %351 = load double, ptr %350, align 8, !tbaa !33
  %352 = fdiv double 1.000000e+00, %351
  %353 = load i32, ptr %5, align 4, !tbaa !16
  %354 = sitofp i32 %353 to double
  %355 = fdiv double %352, %354
  %356 = fdiv double %355, 1.000000e+01
  %357 = load ptr, ptr %2, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %357, i32 0, i32 27
  %359 = getelementptr inbounds %struct.anon.0, ptr %358, i32 0, i32 1
  store double %356, ptr %359, align 8, !tbaa !39
  br label %360

360:                                              ; preds = %348, %302
  %361 = load ptr, ptr %2, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %361, i32 0, i32 28
  %363 = load double, ptr %362, align 8, !tbaa !40
  %364 = load ptr, ptr %2, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %364, i32 0, i32 27
  %366 = getelementptr inbounds %struct.anon.0, ptr %365, i32 0, i32 1
  %367 = load double, ptr %366, align 8, !tbaa !39
  %368 = fmul double %367, %363
  store double %368, ptr %366, align 8, !tbaa !39
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %369, i32 0, i32 27
  %371 = getelementptr inbounds %struct.anon.0, ptr %370, i32 0, i32 2
  %372 = load double, ptr %371, align 8, !tbaa !41
  %373 = fcmp olt double %372, 0.000000e+00
  br i1 %373, label %374, label %378

374:                                              ; preds = %360
  %375 = load ptr, ptr %2, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %375, i32 0, i32 27
  %377 = getelementptr inbounds %struct.anon.0, ptr %376, i32 0, i32 2
  store double 2.000000e-01, ptr %377, align 8, !tbaa !41
  br label %378

378:                                              ; preds = %374, %360
  %379 = load ptr, ptr %2, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.cmaes_readpara_t, ptr %379, i32 0, i32 1
  store i16 1, ptr %380, align 8, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  ret void
}

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden double @douMin(double noundef, double noundef) #1

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden double @douMax(double noundef, double noundef) #1

; Function Attrs: nounwind
declare i64 @clock() #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #2

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

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

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

!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, !12, i64 12}
!10 = !{!"", !6, i64 0, !11, i64 8, !12, i64 12, !12, i64 16, !6, i64 24, !6, i64 32, !12, i64 40, !6, i64 48, !6, 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, !6, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !15, i64 208, !13, i64 232, !6, i64 240, !7, i64 248, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376, !12, i64 384, !12, i64 388, !12, i64 392}
!11 = !{!"short", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!"", !12, i64 0, !13, i64 8}
!15 = !{!"", !12, i64 0, !13, i64 8, !13, i64 16}
!16 = !{!12, !12, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!10, !11, i64 8}
!20 = !{!10, !12, i64 16}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!10, !12, i64 88}
!24 = !{!10, !12, i64 136}
!25 = !{!10, !12, i64 140}
!26 = !{!10, !6, i64 240}
!27 = !{!10, !6, i64 160}
!28 = !{!10, !13, i64 176}
!29 = !{!10, !13, i64 152}
!30 = !{!10, !13, i64 184}
!31 = !{!10, !13, i64 144}
!32 = !{!13, !13, i64 0}
!33 = !{!10, !13, i64 192}
!34 = !{!10, !13, i64 200}
!35 = !{!10, !13, i64 64}
!36 = !{!10, !13, i64 72}
!37 = !{!10, !13, i64 80}
!38 = !{!10, !13, i64 168}
!39 = !{!10, !13, i64 216}
!40 = !{!10, !13, i64 232}
!41 = !{!10, !13, i64 224}


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

@.str.237 = external hidden unnamed_addr constant [60 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @cmaes_readpara_SupplementDefaults(ptr noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 12
  %3 = load i32, ptr %2, align 4, !tbaa !5
  %4 = tail call i64 @clock() #4
  %5 = getelementptr inbounds i8, ptr %0, i64 8
  %6 = load i16, ptr %5, align 8, !tbaa !15
  %.not = icmp eq i16 %6, 0
  br i1 %.not, label %8, label %7

7:                                                ; preds = %1
  tail call void @FATAL(ptr noundef nonnull @.str.237, ptr noundef null, ptr noundef null, ptr noundef null)
  br label %8

8:                                                ; preds = %7, %1
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = load i32, ptr %9, align 8, !tbaa !16
  %11 = icmp eq i32 %10, 0
  br i1 %11, label %.preheader, label %23

.preheader:                                       ; preds = %8, %.preheader
  %12 = tail call i64 @clock() #4
  %13 = sub nsw i64 %4, %12
  %14 = and i64 %13, 4294967295
  %15 = icmp eq i64 %14, 0
  br i1 %15, label %.preheader, label %16, !llvm.loop !17

16:                                               ; preds = %.preheader
  %17 = tail call i64 @time(ptr noundef null) #4
  %18 = mul nsw i64 %17, 100
  %19 = tail call i64 @clock() #4
  %20 = add nsw i64 %18, %19
  %21 = tail call i64 @llvm.abs.i64(i64 %20, i1 true)
  %22 = trunc i64 %21 to i32
  store i32 %22, ptr %9, align 8, !tbaa !16
  br label %23

23:                                               ; preds = %16, %8
  %24 = getelementptr inbounds i8, ptr %0, i64 88
  %25 = load i32, ptr %24, align 8, !tbaa !19
  %26 = icmp eq i32 %25, -1
  br i1 %26, label %27, label %28

27:                                               ; preds = %23
  store i32 0, ptr %24, align 8, !tbaa !19
  br label %28

28:                                               ; preds = %27, %23
  %29 = getelementptr inbounds i8, ptr %0, i64 136
  %30 = load i32, ptr %29, align 8, !tbaa !20
  %31 = icmp slt i32 %30, 2
  br i1 %31, label %32, label %38

32:                                               ; preds = %28
  %33 = sitofp i32 %3 to double
  %34 = tail call double @log(double noundef %33) #4
  %35 = fmul double %34, 3.000000e+00
  %36 = fptosi double %35 to i32
  %37 = add nsw i32 %36, 4
  store i32 %37, ptr %29, align 8, !tbaa !20
  br label %38

38:                                               ; preds = %32, %28
  %39 = phi i32 [ %37, %32 ], [ %30, %28 ]
  %40 = getelementptr inbounds i8, ptr %0, i64 140
  %41 = load i32, ptr %40, align 4, !tbaa !21
  %42 = icmp eq i32 %41, -1
  br i1 %42, label %43, label %47

43:                                               ; preds = %38
  %44 = sdiv i32 %39, 2
  store i32 %44, ptr %40, align 4, !tbaa !21
  %45 = getelementptr inbounds i8, ptr %0, i64 240
  %46 = load ptr, ptr %45, align 8, !tbaa !22
  tail call void @cmaes_readpara_SetWeights(ptr noundef nonnull %0, ptr noundef %46)
  br label %47

47:                                               ; preds = %43, %38
  %48 = getelementptr inbounds i8, ptr %0, i64 160
  %49 = load ptr, ptr %48, align 8, !tbaa !23
  %50 = icmp eq ptr %49, null
  br i1 %50, label %51, label %54

51:                                               ; preds = %47
  %52 = getelementptr inbounds i8, ptr %0, i64 240
  %53 = load ptr, ptr %52, align 8, !tbaa !22
  tail call void @cmaes_readpara_SetWeights(ptr noundef nonnull %0, ptr noundef %53)
  br label %54

54:                                               ; preds = %51, %47
  %55 = getelementptr inbounds i8, ptr %0, i64 176
  %56 = load double, ptr %55, align 8, !tbaa !24
  %57 = fcmp ogt double %56, 0.000000e+00
  br i1 %57, label %58, label %67

58:                                               ; preds = %54
  %59 = getelementptr inbounds i8, ptr %0, i64 152
  %60 = load double, ptr %59, align 8, !tbaa !25
  %61 = fadd double %60, 2.000000e+00
  %62 = sitofp i32 %3 to double
  %63 = fadd double %60, %62
  %64 = fadd double %63, 3.000000e+00
  %65 = fdiv double %61, %64
  %66 = fmul double %56, %65
  store double %66, ptr %55, align 8, !tbaa !24
  br label %67

67:                                               ; preds = %58, %54
  %68 = phi double [ %66, %58 ], [ %56, %54 ]
  %69 = fcmp ugt double %68, 0.000000e+00
  %70 = fcmp ult double %68, 1.000000e+00
  %or.cond = and i1 %69, %70
  br i1 %or.cond, label %79, label %71

71:                                               ; preds = %67
  %72 = getelementptr inbounds i8, ptr %0, i64 152
  %73 = load double, ptr %72, align 8, !tbaa !25
  %74 = fadd double %73, 2.000000e+00
  %75 = sitofp i32 %3 to double
  %76 = fadd double %73, %75
  %77 = fadd double %76, 3.000000e+00
  %78 = fdiv double %74, %77
  store double %78, ptr %55, align 8, !tbaa !24
  br label %79

79:                                               ; preds = %67, %71
  %80 = getelementptr inbounds i8, ptr %0, i64 184
  %81 = load double, ptr %80, align 8, !tbaa !26
  %82 = fcmp ole double %81, 0.000000e+00
  %83 = fcmp ogt double %81, 1.000000e+00
  %or.cond94 = or i1 %82, %83
  br i1 %or.cond94, label %84, label %88

84:                                               ; preds = %79
  %85 = add nsw i32 %3, 4
  %86 = sitofp i32 %85 to double
  %87 = fdiv double 4.000000e+00, %86
  store double %87, ptr %80, align 8, !tbaa !26
  br label %88

88:                                               ; preds = %79, %84
  %89 = getelementptr inbounds i8, ptr %0, i64 144
  %90 = load double, ptr %89, align 8, !tbaa !27
  %91 = fcmp olt double %90, 1.000000e+00
  %92 = getelementptr inbounds i8, ptr %0, i64 152
  %93 = load double, ptr %92, align 8, !tbaa !25
  br i1 %91, label %94, label %._crit_edge

94:                                               ; preds = %88
  store double %93, ptr %89, align 8, !tbaa !27
  br label %._crit_edge

._crit_edge:                                      ; preds = %88, %94
  %95 = phi double [ %93, %94 ], [ %90, %88 ]
  %96 = sitofp i32 %3 to double
  %97 = fadd double %96, 1.414200e+00
  %98 = fmul double %97, %97
  %99 = fdiv double 2.000000e+00, %98
  %100 = getelementptr inbounds i8, ptr %0, i64 152
  %101 = tail call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double -1.000000e+00)
  %102 = fadd double %96, 2.000000e+00
  %103 = tail call double @llvm.fmuladd.f64(double %102, double %102, double %93)
  %104 = fdiv double %101, %103
  %105 = fcmp ogt double %104, 1.000000e+00
  %106 = select i1 %105, double 1.000000e+00, double %104
  %107 = fdiv double 1.000000e+00, %95
  %108 = fsub double 1.000000e+00, %107
  %109 = fmul double %108, %106
  %110 = tail call double @llvm.fmuladd.f64(double %107, double %99, double %109)
  %111 = getelementptr inbounds i8, ptr %0, i64 192
  %112 = load double, ptr %111, align 8, !tbaa !28
  %113 = fcmp oge double %112, 0.000000e+00
  %114 = fmul double %112, %110
  %115 = select i1 %113, double %114, double %112
  %116 = fcmp olt double %115, 0.000000e+00
  %117 = fcmp ogt double %115, 1.000000e+00
  %or.cond95.not.not = or i1 %116, %117
  %118 = or i1 %113, %or.cond95.not.not
  br i1 %118, label %119, label %120

119:                                              ; preds = %._crit_edge
  %simplifycfg.merge = select i1 %or.cond95.not.not, double %110, double %115
  store double %simplifycfg.merge, ptr %111, align 8, !tbaa !28
  br label %120

120:                                              ; preds = %._crit_edge, %119
  %121 = getelementptr inbounds i8, ptr %0, i64 200
  %122 = load double, ptr %121, align 8, !tbaa !29
  %123 = fcmp oeq double %122, -1.000000e+00
  br i1 %123, label %124, label %131

124:                                              ; preds = %120
  %125 = fmul double %96, 1.000000e+02
  %126 = load i32, ptr %29, align 8, !tbaa !20
  %127 = sitofp i32 %126 to double
  %128 = tail call double @sqrt(double noundef %127) #4
  %129 = fdiv double %125, %128
  %130 = fadd double %129, 2.000000e+00
  store double %130, ptr %121, align 8, !tbaa !29
  br label %131

131:                                              ; preds = %124, %120
  %132 = getelementptr inbounds i8, ptr %0, i64 64
  %133 = load double, ptr %132, align 8, !tbaa !30
  %134 = fcmp oeq double %133, -1.000000e+00
  %135 = getelementptr inbounds i8, ptr %0, i64 72
  %136 = load double, ptr %135, align 8, !tbaa !31
  br i1 %134, label %137, label %143

137:                                              ; preds = %131
  %138 = fmul double %136, 9.000000e+02
  %139 = add nsw i32 %3, 3
  %140 = sitofp i32 %139 to double
  %141 = fmul double %138, %140
  %142 = fmul double %141, %140
  br label %145

143:                                              ; preds = %131
  %144 = fmul double %133, %136
  br label %145

145:                                              ; preds = %143, %137
  %storemerge = phi double [ %144, %143 ], [ %142, %137 ]
  store double %storemerge, ptr %132, align 8, !tbaa !30
  %146 = getelementptr inbounds i8, ptr %0, i64 80
  %147 = load double, ptr %146, align 8, !tbaa !32
  %148 = fcmp oeq double %147, -1.000000e+00
  br i1 %148, label %149, label %154

149:                                              ; preds = %145
  %150 = load i32, ptr %29, align 8, !tbaa !20
  %151 = sitofp i32 %150 to double
  %152 = fdiv double %storemerge, %151
  %153 = tail call double @llvm.ceil.f64(double %152)
  store double %153, ptr %146, align 8, !tbaa !32
  br label %154

154:                                              ; preds = %149, %145
  %155 = getelementptr inbounds i8, ptr %0, i64 168
  %156 = load double, ptr %155, align 8, !tbaa !33
  %157 = fcmp olt double %156, 0.000000e+00
  br i1 %157, label %158, label %159

158:                                              ; preds = %154
  store double 1.000000e+00, ptr %155, align 8, !tbaa !33
  br label %159

159:                                              ; preds = %158, %154
  %160 = phi double [ 1.000000e+00, %158 ], [ %156, %154 ]
  %161 = load double, ptr %100, align 8, !tbaa !25
  %162 = fadd double %161, -1.000000e+00
  %163 = fadd double %96, 1.000000e+00
  %164 = fdiv double %162, %163
  %165 = tail call double @sqrt(double noundef %164) #4
  %166 = fadd double %165, -1.000000e+00
  %167 = tail call double @douMax(double noundef 0.000000e+00, double noundef %166)
  %168 = tail call double @llvm.fmuladd.f64(double %167, double 2.000000e+00, double 1.000000e+00)
  %169 = fmul double %160, %168
  %170 = load double, ptr %146, align 8, !tbaa !32
  %171 = load double, ptr %132, align 8, !tbaa !30
  %172 = load i32, ptr %29, align 8, !tbaa !20
  %173 = sitofp i32 %172 to double
  %174 = fdiv double %171, %173
  %175 = tail call double @douMin(double noundef %170, double noundef %174)
  %176 = fadd double %175, 0x3EB0C6F7A0B5ED8D
  %177 = fdiv double %96, %176
  %178 = fsub double 1.000000e+00, %177
  %179 = tail call double @douMax(double noundef 3.000000e-01, double noundef %178)
  %180 = load double, ptr %55, align 8, !tbaa !24
  %181 = tail call double @llvm.fmuladd.f64(double %169, double %179, double %180)
  store double %181, ptr %155, align 8, !tbaa !33
  %182 = getelementptr inbounds i8, ptr %0, i64 216
  %183 = load double, ptr %182, align 8, !tbaa !34
  %184 = fcmp olt double %183, 0.000000e+00
  br i1 %184, label %185, label %190

185:                                              ; preds = %159
  %186 = load double, ptr %111, align 8, !tbaa !28
  %187 = fdiv double 1.000000e+00, %186
  %188 = fdiv double %187, %96
  %189 = fdiv double %188, 1.000000e+01
  br label %190

190:                                              ; preds = %185, %159
  %191 = phi double [ %189, %185 ], [ %183, %159 ]
  %192 = getelementptr inbounds i8, ptr %0, i64 232
  %193 = load double, ptr %192, align 8, !tbaa !35
  %194 = fmul double %193, %191
  store double %194, ptr %182, align 8, !tbaa !34
  %195 = getelementptr inbounds i8, ptr %0, i64 224
  %196 = load double, ptr %195, align 8, !tbaa !36
  %197 = fcmp olt double %196, 0.000000e+00
  br i1 %197, label %198, label %199

198:                                              ; preds = %190
  store double 2.000000e-01, ptr %195, align 8, !tbaa !36
  br label %199

199:                                              ; preds = %198, %190
  store i16 1, ptr %5, align 8, !tbaa !15
  ret void
}

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

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

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

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

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

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind
declare i64 @clock() local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #1

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 12}
!6 = !{!"", !7, i64 0, !10, i64 8, !11, i64 12, !11, i64 16, !7, i64 24, !7, i64 32, !11, i64 40, !7, i64 48, !7, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !13, i64 88, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !11, i64 136, !11, i64 140, !12, i64 144, !12, i64 152, !7, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !14, i64 208, !12, i64 232, !7, i64 240, !8, i64 248, !7, i64 352, !7, i64 360, !7, i64 368, !7, i64 376, !11, i64 384, !11, i64 388, !11, i64 392}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"double", !8, i64 0}
!13 = !{!"", !11, i64 0, !12, i64 8}
!14 = !{!"", !11, i64 0, !12, i64 8, !12, i64 16}
!15 = !{!6, !10, i64 8}
!16 = !{!6, !11, i64 16}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!6, !11, i64 88}
!20 = !{!6, !11, i64 136}
!21 = !{!6, !11, i64 140}
!22 = !{!6, !7, i64 240}
!23 = !{!6, !7, i64 160}
!24 = !{!6, !12, i64 176}
!25 = !{!6, !12, i64 152}
!26 = !{!6, !12, i64 184}
!27 = !{!6, !12, i64 144}
!28 = !{!6, !12, i64 192}
!29 = !{!6, !12, i64 200}
!30 = !{!6, !12, i64 64}
!31 = !{!6, !12, i64 72}
!32 = !{!6, !12, i64 80}
!33 = !{!6, !12, i64 168}
!34 = !{!6, !12, i64 216}
!35 = !{!6, !12, i64 232}
!36 = !{!6, !12, i64 224}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass