; LLVM IR from csviragh/robotsim :: src (algo_spp_evol_stat)

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

@TimeElapsedNearArena = external dso_local global double, align 8
@Data_Corr_Sum = external dso_local global double, align 8
@Data_CorrStd_Sum = external dso_local global double, align 8
@Data_CorrMin_Sum = external dso_local global double, align 8
@Data_CorrMax_Sum = external dso_local global double, align 8
@Data_MinCluster_Sum = external dso_local global double, align 8
@Data_MaxCluster_Sum = external dso_local global double, align 8
@Data_IndependentAgents_Sum = external dso_local global double, align 8
@Data_DistanceFromArena_Sum = external dso_local global double, align 8
@Data_DistanceFromArenaMin_Sum = external dso_local global double, align 8
@Data_DistanceFromArenaMax_Sum = external dso_local global double, align 8
@Data_DistanceFromArenaStd_Sum = external dso_local global double, align 8
@Data_Corr_StDev = external dso_local global double, align 8
@Data_CorrStd_StDev = external dso_local global double, align 8
@Data_CorrMin_StDev = external dso_local global double, align 8
@Data_CorrMax_StDev = external dso_local global double, align 8
@Data_MinCluster_StDev = external dso_local global double, align 8
@Data_MaxCluster_StDev = external dso_local global double, align 8
@Data_IndependentAgents_StDev = external dso_local global double, align 8
@Data_DistanceFromArena_StDev = external dso_local global double, align 8
@Data_DistanceFromArenaMin_StDev = external dso_local global double, align 8
@Data_DistanceFromArenaMax_StDev = external dso_local global double, align 8
@Data_DistanceFromArenaStd_StDev = external dso_local global double, align 8
@n_Avg = external dso_local global double, align 8
@n_StDev = external dso_local global double, align 8
@f_DistanceFromArenaFile = external dso_local global ptr, align 8
@f_ClusterDependentParams = external dso_local global ptr, align 8
@f_ClusterParams = external dso_local global ptr, align 8
@f_DistanceFromArenaFile_StDev = external dso_local global ptr, align 8
@f_ClusterDependentParams_StDev = external dso_local global ptr, align 8
@f_ClusterParams_StDev = external dso_local global ptr, align 8
@Visited = external dso_local global ptr, align 8
@Dimension = external hidden global i32, align 4
@Adjacency = external dso_local global ptr, align 8
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [4 x i8], align 1
@StDev_Temp = external hidden global double, align 8
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #0

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @CloseModelSpecificStats(ptr noundef %0) #2 {
  %2 = alloca ptr, align 8
  %3 = alloca double, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %4 = load ptr, ptr %2, align 8, !tbaa !5
  %5 = getelementptr inbounds %struct.stat_utils_t, ptr %4, i32 0, i32 3
  %6 = load i32, ptr %5, align 8, !tbaa !9
  %7 = icmp eq i32 2, %6
  br i1 %7, label %13, label %8

8:                                                ; preds = %1
  %9 = load ptr, ptr %2, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.stat_utils_t, ptr %9, i32 0, i32 3
  %11 = load i32, ptr %10, align 8, !tbaa !9
  %12 = icmp eq i32 3, %11
  br i1 %12, label %13, label %286

13:                                               ; preds = %8, %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  %14 = load ptr, ptr %2, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.stat_utils_t, ptr %14, i32 0, i32 0
  %16 = load double, ptr %15, align 8, !tbaa !13
  store double %16, ptr %3, align 8, !tbaa !14
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.stat_utils_t, ptr %17, i32 0, i32 3
  %19 = load i32, ptr %18, align 8, !tbaa !9
  %20 = icmp eq i32 3, %19
  br i1 %20, label %21, label %27

21:                                               ; preds = %13
  %22 = load ptr, ptr %2, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.stat_utils_t, ptr %22, i32 0, i32 1
  %24 = load double, ptr %23, align 8, !tbaa !15
  %25 = load double, ptr %3, align 8, !tbaa !14
  %26 = fsub double %25, %24
  store double %26, ptr %3, align 8, !tbaa !14
  br label %27

27:                                               ; preds = %21, %13
  %28 = load ptr, ptr @f_ClusterDependentParams, align 8, !tbaa !5
  %29 = load double, ptr %3, align 8, !tbaa !14
  %30 = load double, ptr @Data_Corr_Sum, align 8, !tbaa !14
  %31 = load double, ptr %3, align 8, !tbaa !14
  %32 = fdiv double %30, %31
  %33 = load double, ptr @Data_CorrStd_Sum, align 8, !tbaa !14
  %34 = load double, ptr %3, align 8, !tbaa !14
  %35 = fdiv double %33, %34
  %36 = load double, ptr @Data_CorrMin_Sum, align 8, !tbaa !14
  %37 = load double, ptr %3, align 8, !tbaa !14
  %38 = fdiv double %36, %37
  %39 = load double, ptr @Data_CorrMax_Sum, align 8, !tbaa !14
  %40 = load double, ptr %3, align 8, !tbaa !14
  %41 = fdiv double %39, %40
  %42 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %28, ptr noundef @.str.16, double noundef %29, double noundef %32, double noundef %35, double noundef %38, double noundef %41) #4
  %43 = load ptr, ptr @f_ClusterParams, align 8, !tbaa !5
  %44 = load double, ptr %3, align 8, !tbaa !14
  %45 = load double, ptr @Data_MinCluster_Sum, align 8, !tbaa !14
  %46 = load double, ptr %3, align 8, !tbaa !14
  %47 = fdiv double %45, %46
  %48 = load double, ptr @Data_MaxCluster_Sum, align 8, !tbaa !14
  %49 = load double, ptr %3, align 8, !tbaa !14
  %50 = fdiv double %48, %49
  %51 = load double, ptr @Data_IndependentAgents_Sum, align 8, !tbaa !14
  %52 = load double, ptr %3, align 8, !tbaa !14
  %53 = fdiv double %51, %52
  %54 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef @.str.19, double noundef %44, double noundef %47, double noundef %50, double noundef %53) #4
  %55 = load ptr, ptr @f_DistanceFromArenaFile, align 8, !tbaa !5
  %56 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %57 = load double, ptr @Data_DistanceFromArena_Sum, align 8, !tbaa !14
  %58 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %59 = fdiv double %57, %58
  %60 = load double, ptr @Data_DistanceFromArenaStd_Sum, align 8, !tbaa !14
  %61 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %62 = fdiv double %60, %61
  %63 = load double, ptr @Data_DistanceFromArenaMin_Sum, align 8, !tbaa !14
  %64 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %65 = fdiv double %63, %64
  %66 = load double, ptr @Data_DistanceFromArenaMax_Sum, align 8, !tbaa !14
  %67 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %68 = fdiv double %66, %67
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %55, ptr noundef @.str.20, double noundef %56, double noundef %59, double noundef %62, double noundef %65, double noundef %68) #4
  %70 = load ptr, ptr @f_DistanceFromArenaFile, align 8, !tbaa !5
  %71 = load double, ptr @n_Avg, align 8, !tbaa !14
  %72 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %73 = fdiv double %71, %72
  %74 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %70, ptr noundef @.str.21, double noundef %73) #4
  %75 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %76 = load double, ptr %3, align 8, !tbaa !14
  %77 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %75, ptr noundef @.str.22, double noundef %76) #4
  %78 = load double, ptr @Data_Corr_StDev, align 8, !tbaa !14
  %79 = load double, ptr %3, align 8, !tbaa !14
  %80 = fdiv double %78, %79
  %81 = load double, ptr @Data_Corr_Sum, align 8, !tbaa !14
  %82 = load double, ptr %3, align 8, !tbaa !14
  %83 = fdiv double %81, %82
  %84 = call double @pow(double noundef %83, double noundef 2.000000e+00) #4
  %85 = fsub double %80, %84
  store double %85, ptr @StDev_Temp, align 8, !tbaa !14
  %86 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %87 = fcmp olt double %86, 0.000000e+00
  br i1 %87, label %88, label %89

88:                                               ; preds = %27
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %89

89:                                               ; preds = %88, %27
  %90 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %91 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %92 = call double @sqrt(double noundef %91) #4
  %93 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %90, ptr noundef @.str.23, double noundef %92) #4
  %94 = load double, ptr @Data_CorrStd_StDev, align 8, !tbaa !14
  %95 = load double, ptr %3, align 8, !tbaa !14
  %96 = fdiv double %94, %95
  %97 = load double, ptr @Data_CorrStd_Sum, align 8, !tbaa !14
  %98 = load double, ptr %3, align 8, !tbaa !14
  %99 = fdiv double %97, %98
  %100 = call double @pow(double noundef %99, double noundef 2.000000e+00) #4
  %101 = fsub double %96, %100
  store double %101, ptr @StDev_Temp, align 8, !tbaa !14
  %102 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %103 = fcmp olt double %102, 0.000000e+00
  br i1 %103, label %104, label %105

104:                                              ; preds = %89
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %105

105:                                              ; preds = %104, %89
  %106 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %107 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %108 = call double @sqrt(double noundef %107) #4
  %109 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %106, ptr noundef @.str.23, double noundef %108) #4
  %110 = load double, ptr @Data_CorrMin_StDev, align 8, !tbaa !14
  %111 = load double, ptr %3, align 8, !tbaa !14
  %112 = fdiv double %110, %111
  %113 = load double, ptr @Data_CorrMin_Sum, align 8, !tbaa !14
  %114 = load double, ptr %3, align 8, !tbaa !14
  %115 = fdiv double %113, %114
  %116 = call double @pow(double noundef %115, double noundef 2.000000e+00) #4
  %117 = fsub double %112, %116
  store double %117, ptr @StDev_Temp, align 8, !tbaa !14
  %118 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %119 = fcmp olt double %118, 0.000000e+00
  br i1 %119, label %120, label %121

120:                                              ; preds = %105
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %121

121:                                              ; preds = %120, %105
  %122 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %123 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %124 = call double @sqrt(double noundef %123) #4
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %122, ptr noundef @.str.23, double noundef %124) #4
  %126 = load double, ptr @Data_CorrMax_StDev, align 8, !tbaa !14
  %127 = load double, ptr %3, align 8, !tbaa !14
  %128 = fdiv double %126, %127
  %129 = load double, ptr @Data_CorrMax_Sum, align 8, !tbaa !14
  %130 = load double, ptr %3, align 8, !tbaa !14
  %131 = fdiv double %129, %130
  %132 = call double @pow(double noundef %131, double noundef 2.000000e+00) #4
  %133 = fsub double %128, %132
  store double %133, ptr @StDev_Temp, align 8, !tbaa !14
  %134 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %135 = fcmp olt double %134, 0.000000e+00
  br i1 %135, label %136, label %137

136:                                              ; preds = %121
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %137

137:                                              ; preds = %136, %121
  %138 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %139 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %140 = call double @sqrt(double noundef %139) #4
  %141 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %138, ptr noundef @.str.23, double noundef %140) #4
  %142 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %143 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %142, ptr noundef @.str.24) #4
  %144 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !5
  %145 = load double, ptr %3, align 8, !tbaa !14
  %146 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %144, ptr noundef @.str.22, double noundef %145) #4
  %147 = load double, ptr @Data_MinCluster_StDev, align 8, !tbaa !14
  %148 = load double, ptr %3, align 8, !tbaa !14
  %149 = fdiv double %147, %148
  %150 = load double, ptr @Data_MinCluster_Sum, align 8, !tbaa !14
  %151 = load double, ptr %3, align 8, !tbaa !14
  %152 = fdiv double %150, %151
  %153 = call double @pow(double noundef %152, double noundef 2.000000e+00) #4
  %154 = fsub double %149, %153
  store double %154, ptr @StDev_Temp, align 8, !tbaa !14
  %155 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %156 = fcmp olt double %155, 0.000000e+00
  br i1 %156, label %157, label %158

157:                                              ; preds = %137
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %158

158:                                              ; preds = %157, %137
  %159 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !5
  %160 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %161 = call double @sqrt(double noundef %160) #4
  %162 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %159, ptr noundef @.str.23, double noundef %161) #4
  %163 = load double, ptr @Data_MaxCluster_StDev, align 8, !tbaa !14
  %164 = load double, ptr %3, align 8, !tbaa !14
  %165 = fdiv double %163, %164
  %166 = load double, ptr @Data_MaxCluster_Sum, align 8, !tbaa !14
  %167 = load double, ptr %3, align 8, !tbaa !14
  %168 = fdiv double %166, %167
  %169 = call double @pow(double noundef %168, double noundef 2.000000e+00) #4
  %170 = fsub double %165, %169
  store double %170, ptr @StDev_Temp, align 8, !tbaa !14
  %171 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %172 = fcmp olt double %171, 0.000000e+00
  br i1 %172, label %173, label %174

173:                                              ; preds = %158
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %174

174:                                              ; preds = %173, %158
  %175 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !5
  %176 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %177 = call double @sqrt(double noundef %176) #4
  %178 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef @.str.23, double noundef %177) #4
  %179 = load double, ptr @Data_IndependentAgents_StDev, align 8, !tbaa !14
  %180 = load double, ptr %3, align 8, !tbaa !14
  %181 = fdiv double %179, %180
  %182 = load double, ptr @Data_IndependentAgents_Sum, align 8, !tbaa !14
  %183 = load double, ptr %3, align 8, !tbaa !14
  %184 = fdiv double %182, %183
  %185 = call double @pow(double noundef %184, double noundef 2.000000e+00) #4
  %186 = fsub double %181, %185
  store double %186, ptr @StDev_Temp, align 8, !tbaa !14
  %187 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %188 = fcmp olt double %187, 0.000000e+00
  br i1 %188, label %189, label %190

189:                                              ; preds = %174
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %190

190:                                              ; preds = %189, %174
  %191 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !5
  %192 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %193 = call double @sqrt(double noundef %192) #4
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %191, ptr noundef @.str.23, double noundef %193) #4
  %195 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !5
  %196 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %195, ptr noundef @.str.24) #4
  %197 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %198 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %199 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef @.str.22, double noundef %198) #4
  %200 = load double, ptr @Data_DistanceFromArena_StDev, align 8, !tbaa !14
  %201 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %202 = fdiv double %200, %201
  %203 = load double, ptr @Data_DistanceFromArena_Sum, align 8, !tbaa !14
  %204 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %205 = fdiv double %203, %204
  %206 = call double @pow(double noundef %205, double noundef 2.000000e+00) #4
  %207 = fsub double %202, %206
  store double %207, ptr @StDev_Temp, align 8, !tbaa !14
  %208 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %209 = fcmp olt double %208, 0.000000e+00
  br i1 %209, label %210, label %211

210:                                              ; preds = %190
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %211

211:                                              ; preds = %210, %190
  %212 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %213 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %214 = call double @sqrt(double noundef %213) #4
  %215 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %212, ptr noundef @.str.23, double noundef %214) #4
  %216 = load double, ptr @Data_DistanceFromArenaStd_StDev, align 8, !tbaa !14
  %217 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %218 = fdiv double %216, %217
  %219 = load double, ptr @Data_DistanceFromArenaStd_Sum, align 8, !tbaa !14
  %220 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %221 = fdiv double %219, %220
  %222 = call double @pow(double noundef %221, double noundef 2.000000e+00) #4
  %223 = fsub double %218, %222
  store double %223, ptr @StDev_Temp, align 8, !tbaa !14
  %224 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %225 = fcmp olt double %224, 0.000000e+00
  br i1 %225, label %226, label %227

226:                                              ; preds = %211
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %227

227:                                              ; preds = %226, %211
  %228 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %229 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %230 = call double @sqrt(double noundef %229) #4
  %231 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %228, ptr noundef @.str.23, double noundef %230) #4
  %232 = load double, ptr @Data_DistanceFromArenaMin_StDev, align 8, !tbaa !14
  %233 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %234 = fdiv double %232, %233
  %235 = load double, ptr @Data_DistanceFromArenaMin_Sum, align 8, !tbaa !14
  %236 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %237 = fdiv double %235, %236
  %238 = call double @pow(double noundef %237, double noundef 2.000000e+00) #4
  %239 = fsub double %234, %238
  store double %239, ptr @StDev_Temp, align 8, !tbaa !14
  %240 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %241 = fcmp olt double %240, 0.000000e+00
  br i1 %241, label %242, label %243

242:                                              ; preds = %227
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %243

243:                                              ; preds = %242, %227
  %244 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %245 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %246 = call double @sqrt(double noundef %245) #4
  %247 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %244, ptr noundef @.str.23, double noundef %246) #4
  %248 = load double, ptr @Data_DistanceFromArenaMax_StDev, align 8, !tbaa !14
  %249 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %250 = fdiv double %248, %249
  %251 = load double, ptr @Data_DistanceFromArenaMax_Sum, align 8, !tbaa !14
  %252 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %253 = fdiv double %251, %252
  %254 = call double @pow(double noundef %253, double noundef 2.000000e+00) #4
  %255 = fsub double %250, %254
  store double %255, ptr @StDev_Temp, align 8, !tbaa !14
  %256 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %257 = fcmp olt double %256, 0.000000e+00
  br i1 %257, label %258, label %259

258:                                              ; preds = %243
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %259

259:                                              ; preds = %258, %243
  %260 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %261 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %262 = call double @sqrt(double noundef %261) #4
  %263 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %260, ptr noundef @.str.23, double noundef %262) #4
  %264 = load double, ptr @n_StDev, align 8, !tbaa !14
  %265 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %266 = fdiv double %264, %265
  %267 = load double, ptr @n_Avg, align 8, !tbaa !14
  %268 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !14
  %269 = fdiv double %267, %268
  %270 = call double @pow(double noundef %269, double noundef 2.000000e+00) #4
  %271 = fsub double %266, %270
  store double %271, ptr @StDev_Temp, align 8, !tbaa !14
  %272 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %273 = fcmp olt double %272, 0.000000e+00
  br i1 %273, label %274, label %275

274:                                              ; preds = %259
  store double 0.000000e+00, ptr @StDev_Temp, align 8, !tbaa !14
  br label %275

275:                                              ; preds = %274, %259
  %276 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %277 = load double, ptr @StDev_Temp, align 8, !tbaa !14
  %278 = call double @sqrt(double noundef %277) #4
  %279 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %276, ptr noundef @.str.25, double noundef %278) #4
  %280 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !5
  %281 = call i32 @fclose(ptr noundef %280)
  %282 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !5
  %283 = call i32 @fclose(ptr noundef %282)
  %284 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !5
  %285 = call i32 @fclose(ptr noundef %284)
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  br label %286

286:                                              ; preds = %275, %8
  %287 = load ptr, ptr @f_DistanceFromArenaFile, align 8, !tbaa !5
  %288 = call i32 @fclose(ptr noundef %287)
  %289 = load ptr, ptr @f_ClusterDependentParams, align 8, !tbaa !5
  %290 = call i32 @fclose(ptr noundef %289)
  %291 = load ptr, ptr @f_ClusterParams, align 8, !tbaa !5
  %292 = call i32 @fclose(ptr noundef %291)
  %293 = load ptr, ptr @Adjacency, align 8, !tbaa !5
  %294 = load i32, ptr @Dimension, align 4, !tbaa !16
  %295 = load i32, ptr @Dimension, align 4, !tbaa !16
  call void @freeMatrix(ptr noundef %293, i32 noundef %294, i32 noundef %295)
  %296 = load ptr, ptr @Visited, align 8, !tbaa !5
  call void @free(ptr noundef %296) #4
  ret void
}

declare i32 @fclose(ptr noundef) #3

declare void @freeMatrix(ptr noundef, i32 noundef, i32 noundef) #3

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "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 24}
!10 = !{!"", !11, i64 0, !11, i64 8, !6, i64 16, !12, i64 24}
!11 = !{!"double", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!10, !11, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!10, !11, i64 8}
!16 = !{!12, !12, i64 0}


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

@TimeElapsedNearArena = external dso_local local_unnamed_addr global double, align 8
@Data_Corr_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_CorrStd_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_CorrMin_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_CorrMax_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_MinCluster_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_MaxCluster_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_IndependentAgents_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArena_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArenaMin_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArenaMax_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArenaStd_Sum = external dso_local local_unnamed_addr global double, align 8
@Data_Corr_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_CorrStd_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_CorrMin_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_CorrMax_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_MinCluster_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_MaxCluster_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_IndependentAgents_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArena_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArenaMin_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArenaMax_StDev = external dso_local local_unnamed_addr global double, align 8
@Data_DistanceFromArenaStd_StDev = external dso_local local_unnamed_addr global double, align 8
@n_Avg = external dso_local local_unnamed_addr global double, align 8
@n_StDev = external dso_local local_unnamed_addr global double, align 8
@f_DistanceFromArenaFile = external dso_local local_unnamed_addr global ptr, align 8
@f_ClusterDependentParams = external dso_local local_unnamed_addr global ptr, align 8
@f_ClusterParams = external dso_local local_unnamed_addr global ptr, align 8
@f_DistanceFromArenaFile_StDev = external dso_local local_unnamed_addr global ptr, align 8
@f_ClusterDependentParams_StDev = external dso_local local_unnamed_addr global ptr, align 8
@f_ClusterParams_StDev = external dso_local local_unnamed_addr global ptr, align 8
@Visited = external dso_local local_unnamed_addr global ptr, align 8
@Dimension = external hidden local_unnamed_addr global i32, align 4
@Adjacency = external dso_local local_unnamed_addr global ptr, align 8
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [4 x i8], align 1
@StDev_Temp = external hidden local_unnamed_addr global double, align 8
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [6 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local void @CloseModelSpecificStats(ptr nocapture noundef readonly %0) local_unnamed_addr #1 {
  %2 = getelementptr inbounds i8, ptr %0, i64 24
  %3 = load i32, ptr %2, align 8, !tbaa !5
  %4 = and i32 %3, -2
  %switch = icmp eq i32 %4, 2
  br i1 %switch, label %5, label %213

5:                                                ; preds = %1
  %6 = load double, ptr %0, align 8, !tbaa !12
  %7 = icmp eq i32 %3, 3
  br i1 %7, label %8, label %12

8:                                                ; preds = %5
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %10 = load double, ptr %9, align 8, !tbaa !13
  %11 = fsub double %6, %10
  br label %12

12:                                               ; preds = %8, %5
  %.0 = phi double [ %11, %8 ], [ %6, %5 ]
  %13 = load ptr, ptr @f_ClusterDependentParams, align 8, !tbaa !14
  %14 = load double, ptr @Data_Corr_Sum, align 8, !tbaa !15
  %15 = fdiv double %14, %.0
  %16 = load double, ptr @Data_CorrStd_Sum, align 8, !tbaa !15
  %17 = fdiv double %16, %.0
  %18 = load double, ptr @Data_CorrMin_Sum, align 8, !tbaa !15
  %19 = fdiv double %18, %.0
  %20 = load double, ptr @Data_CorrMax_Sum, align 8, !tbaa !15
  %21 = fdiv double %20, %.0
  %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %13, ptr noundef nonnull @.str.16, double noundef %.0, double noundef %15, double noundef %17, double noundef %19, double noundef %21) #5
  %23 = load ptr, ptr @f_ClusterParams, align 8, !tbaa !14
  %24 = load double, ptr @Data_MinCluster_Sum, align 8, !tbaa !15
  %25 = fdiv double %24, %.0
  %26 = load double, ptr @Data_MaxCluster_Sum, align 8, !tbaa !15
  %27 = fdiv double %26, %.0
  %28 = load double, ptr @Data_IndependentAgents_Sum, align 8, !tbaa !15
  %29 = fdiv double %28, %.0
  %30 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.19, double noundef %.0, double noundef %25, double noundef %27, double noundef %29) #5
  %31 = load ptr, ptr @f_DistanceFromArenaFile, align 8, !tbaa !14
  %32 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %33 = load double, ptr @Data_DistanceFromArena_Sum, align 8, !tbaa !15
  %34 = fdiv double %33, %32
  %35 = load double, ptr @Data_DistanceFromArenaStd_Sum, align 8, !tbaa !15
  %36 = fdiv double %35, %32
  %37 = load double, ptr @Data_DistanceFromArenaMin_Sum, align 8, !tbaa !15
  %38 = fdiv double %37, %32
  %39 = load double, ptr @Data_DistanceFromArenaMax_Sum, align 8, !tbaa !15
  %40 = fdiv double %39, %32
  %41 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %31, ptr noundef nonnull @.str.20, double noundef %32, double noundef %34, double noundef %36, double noundef %38, double noundef %40) #5
  %42 = load ptr, ptr @f_DistanceFromArenaFile, align 8, !tbaa !14
  %43 = load double, ptr @n_Avg, align 8, !tbaa !15
  %44 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %45 = fdiv double %43, %44
  %46 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %42, ptr noundef nonnull @.str.21, double noundef %45) #5
  %47 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %48 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %47, ptr noundef nonnull @.str.22, double noundef %.0) #5
  %49 = load double, ptr @Data_Corr_StDev, align 8, !tbaa !15
  %50 = load double, ptr @Data_Corr_Sum, align 8, !tbaa !15
  %51 = insertelement <2 x double> poison, double %49, i64 0
  %52 = insertelement <2 x double> %51, double %50, i64 1
  %53 = insertelement <2 x double> poison, double %.0, i64 0
  %54 = shufflevector <2 x double> %53, <2 x double> poison, <2 x i32> zeroinitializer
  %55 = fdiv <2 x double> %52, %54
  %56 = fmul <2 x double> %55, %55
  %shift = shufflevector <2 x double> %56, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %57 = fsub <2 x double> %55, %shift
  %58 = extractelement <2 x double> %57, i64 0
  %59 = fcmp olt double %58, 0.000000e+00
  %storemerge = select i1 %59, double 0.000000e+00, double %58
  store double %storemerge, ptr @StDev_Temp, align 8, !tbaa !15
  %60 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %sqrt64 = tail call double @llvm.sqrt.f64(double %storemerge)
  %61 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %60, ptr noundef nonnull @.str.23, double noundef %sqrt64) #5
  %62 = load double, ptr @Data_CorrStd_StDev, align 8, !tbaa !15
  %63 = load double, ptr @Data_CorrStd_Sum, align 8, !tbaa !15
  %64 = insertelement <2 x double> poison, double %62, i64 0
  %65 = insertelement <2 x double> %64, double %63, i64 1
  %66 = fdiv <2 x double> %65, %54
  %67 = fmul <2 x double> %66, %66
  %shift65 = shufflevector <2 x double> %67, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %68 = fsub <2 x double> %66, %shift65
  %69 = extractelement <2 x double> %68, i64 0
  %70 = fcmp olt double %69, 0.000000e+00
  %storemerge33 = select i1 %70, double 0.000000e+00, double %69
  store double %storemerge33, ptr @StDev_Temp, align 8, !tbaa !15
  %71 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %sqrt63 = tail call double @llvm.sqrt.f64(double %storemerge33)
  %72 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %71, ptr noundef nonnull @.str.23, double noundef %sqrt63) #5
  %73 = load double, ptr @Data_CorrMin_StDev, align 8, !tbaa !15
  %74 = load double, ptr @Data_CorrMin_Sum, align 8, !tbaa !15
  %75 = insertelement <2 x double> poison, double %73, i64 0
  %76 = insertelement <2 x double> %75, double %74, i64 1
  %77 = fdiv <2 x double> %76, %54
  %78 = fmul <2 x double> %77, %77
  %shift66 = shufflevector <2 x double> %78, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %79 = fsub <2 x double> %77, %shift66
  %80 = extractelement <2 x double> %79, i64 0
  %81 = fcmp olt double %80, 0.000000e+00
  %storemerge35 = select i1 %81, double 0.000000e+00, double %80
  store double %storemerge35, ptr @StDev_Temp, align 8, !tbaa !15
  %82 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %sqrt62 = tail call double @llvm.sqrt.f64(double %storemerge35)
  %83 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef nonnull @.str.23, double noundef %sqrt62) #5
  %84 = load double, ptr @Data_CorrMax_StDev, align 8, !tbaa !15
  %85 = load double, ptr @Data_CorrMax_Sum, align 8, !tbaa !15
  %86 = insertelement <2 x double> poison, double %84, i64 0
  %87 = insertelement <2 x double> %86, double %85, i64 1
  %88 = fdiv <2 x double> %87, %54
  %89 = fmul <2 x double> %88, %88
  %shift67 = shufflevector <2 x double> %89, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %90 = fsub <2 x double> %88, %shift67
  %91 = extractelement <2 x double> %90, i64 0
  %92 = fcmp olt double %91, 0.000000e+00
  %storemerge37 = select i1 %92, double 0.000000e+00, double %91
  store double %storemerge37, ptr @StDev_Temp, align 8, !tbaa !15
  %93 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %sqrt61 = tail call double @llvm.sqrt.f64(double %storemerge37)
  %94 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %93, ptr noundef nonnull @.str.23, double noundef %sqrt61) #5
  %95 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %96 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %95, ptr noundef nonnull @.str.24) #5
  %97 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !14
  %98 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %97, ptr noundef nonnull @.str.22, double noundef %.0) #5
  %99 = load double, ptr @Data_MinCluster_StDev, align 8, !tbaa !15
  %100 = load double, ptr @Data_MinCluster_Sum, align 8, !tbaa !15
  %101 = insertelement <2 x double> poison, double %99, i64 0
  %102 = insertelement <2 x double> %101, double %100, i64 1
  %103 = fdiv <2 x double> %102, %54
  %104 = fmul <2 x double> %103, %103
  %shift68 = shufflevector <2 x double> %104, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %105 = fsub <2 x double> %103, %shift68
  %106 = extractelement <2 x double> %105, i64 0
  %107 = fcmp olt double %106, 0.000000e+00
  %storemerge39 = select i1 %107, double 0.000000e+00, double %106
  store double %storemerge39, ptr @StDev_Temp, align 8, !tbaa !15
  %108 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !14
  %sqrt60 = tail call double @llvm.sqrt.f64(double %storemerge39)
  %109 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.23, double noundef %sqrt60) #5
  %110 = load double, ptr @Data_MaxCluster_StDev, align 8, !tbaa !15
  %111 = load double, ptr @Data_MaxCluster_Sum, align 8, !tbaa !15
  %112 = insertelement <2 x double> poison, double %110, i64 0
  %113 = insertelement <2 x double> %112, double %111, i64 1
  %114 = fdiv <2 x double> %113, %54
  %115 = fmul <2 x double> %114, %114
  %shift69 = shufflevector <2 x double> %115, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %116 = fsub <2 x double> %114, %shift69
  %117 = extractelement <2 x double> %116, i64 0
  %118 = fcmp olt double %117, 0.000000e+00
  %storemerge41 = select i1 %118, double 0.000000e+00, double %117
  store double %storemerge41, ptr @StDev_Temp, align 8, !tbaa !15
  %119 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !14
  %sqrt59 = tail call double @llvm.sqrt.f64(double %storemerge41)
  %120 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef nonnull @.str.23, double noundef %sqrt59) #5
  %121 = load double, ptr @Data_IndependentAgents_StDev, align 8, !tbaa !15
  %122 = load double, ptr @Data_IndependentAgents_Sum, align 8, !tbaa !15
  %123 = insertelement <2 x double> poison, double %121, i64 0
  %124 = insertelement <2 x double> %123, double %122, i64 1
  %125 = fdiv <2 x double> %124, %54
  %126 = fmul <2 x double> %125, %125
  %shift70 = shufflevector <2 x double> %126, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %127 = fsub <2 x double> %125, %shift70
  %128 = extractelement <2 x double> %127, i64 0
  %129 = fcmp olt double %128, 0.000000e+00
  %storemerge43 = select i1 %129, double 0.000000e+00, double %128
  store double %storemerge43, ptr @StDev_Temp, align 8, !tbaa !15
  %130 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !14
  %sqrt58 = tail call double @llvm.sqrt.f64(double %storemerge43)
  %131 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %130, ptr noundef nonnull @.str.23, double noundef %sqrt58) #5
  %132 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !14
  %133 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %132, ptr noundef nonnull @.str.24) #5
  %134 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %135 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %136 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef nonnull @.str.22, double noundef %135) #5
  %137 = load double, ptr @Data_DistanceFromArena_StDev, align 8, !tbaa !15
  %138 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %139 = load double, ptr @Data_DistanceFromArena_Sum, align 8, !tbaa !15
  %140 = insertelement <2 x double> poison, double %137, i64 0
  %141 = insertelement <2 x double> %140, double %139, i64 1
  %142 = insertelement <2 x double> poison, double %138, i64 0
  %143 = shufflevector <2 x double> %142, <2 x double> poison, <2 x i32> zeroinitializer
  %144 = fdiv <2 x double> %141, %143
  %145 = fmul <2 x double> %144, %144
  %shift71 = shufflevector <2 x double> %145, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %146 = fsub <2 x double> %144, %shift71
  %147 = extractelement <2 x double> %146, i64 0
  %148 = fcmp olt double %147, 0.000000e+00
  %storemerge45 = select i1 %148, double 0.000000e+00, double %147
  store double %storemerge45, ptr @StDev_Temp, align 8, !tbaa !15
  %149 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %sqrt57 = tail call double @llvm.sqrt.f64(double %storemerge45)
  %150 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %149, ptr noundef nonnull @.str.23, double noundef %sqrt57) #5
  %151 = load double, ptr @Data_DistanceFromArenaStd_StDev, align 8, !tbaa !15
  %152 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %153 = load double, ptr @Data_DistanceFromArenaStd_Sum, align 8, !tbaa !15
  %154 = insertelement <2 x double> poison, double %151, i64 0
  %155 = insertelement <2 x double> %154, double %153, i64 1
  %156 = insertelement <2 x double> poison, double %152, i64 0
  %157 = shufflevector <2 x double> %156, <2 x double> poison, <2 x i32> zeroinitializer
  %158 = fdiv <2 x double> %155, %157
  %159 = fmul <2 x double> %158, %158
  %shift72 = shufflevector <2 x double> %159, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %160 = fsub <2 x double> %158, %shift72
  %161 = extractelement <2 x double> %160, i64 0
  %162 = fcmp olt double %161, 0.000000e+00
  %storemerge47 = select i1 %162, double 0.000000e+00, double %161
  store double %storemerge47, ptr @StDev_Temp, align 8, !tbaa !15
  %163 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %sqrt56 = tail call double @llvm.sqrt.f64(double %storemerge47)
  %164 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %163, ptr noundef nonnull @.str.23, double noundef %sqrt56) #5
  %165 = load double, ptr @Data_DistanceFromArenaMin_StDev, align 8, !tbaa !15
  %166 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %167 = load double, ptr @Data_DistanceFromArenaMin_Sum, align 8, !tbaa !15
  %168 = insertelement <2 x double> poison, double %165, i64 0
  %169 = insertelement <2 x double> %168, double %167, i64 1
  %170 = insertelement <2 x double> poison, double %166, i64 0
  %171 = shufflevector <2 x double> %170, <2 x double> poison, <2 x i32> zeroinitializer
  %172 = fdiv <2 x double> %169, %171
  %173 = fmul <2 x double> %172, %172
  %shift73 = shufflevector <2 x double> %173, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %174 = fsub <2 x double> %172, %shift73
  %175 = extractelement <2 x double> %174, i64 0
  %176 = fcmp olt double %175, 0.000000e+00
  %storemerge49 = select i1 %176, double 0.000000e+00, double %175
  store double %storemerge49, ptr @StDev_Temp, align 8, !tbaa !15
  %177 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %sqrt55 = tail call double @llvm.sqrt.f64(double %storemerge49)
  %178 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %177, ptr noundef nonnull @.str.23, double noundef %sqrt55) #5
  %179 = load double, ptr @Data_DistanceFromArenaMax_StDev, align 8, !tbaa !15
  %180 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %181 = load double, ptr @Data_DistanceFromArenaMax_Sum, align 8, !tbaa !15
  %182 = insertelement <2 x double> poison, double %179, i64 0
  %183 = insertelement <2 x double> %182, double %181, i64 1
  %184 = insertelement <2 x double> poison, double %180, i64 0
  %185 = shufflevector <2 x double> %184, <2 x double> poison, <2 x i32> zeroinitializer
  %186 = fdiv <2 x double> %183, %185
  %187 = fmul <2 x double> %186, %186
  %shift74 = shufflevector <2 x double> %187, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %188 = fsub <2 x double> %186, %shift74
  %189 = extractelement <2 x double> %188, i64 0
  %190 = fcmp olt double %189, 0.000000e+00
  %storemerge51 = select i1 %190, double 0.000000e+00, double %189
  store double %storemerge51, ptr @StDev_Temp, align 8, !tbaa !15
  %191 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %sqrt54 = tail call double @llvm.sqrt.f64(double %storemerge51)
  %192 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %191, ptr noundef nonnull @.str.23, double noundef %sqrt54) #5
  %193 = load double, ptr @n_StDev, align 8, !tbaa !15
  %194 = load double, ptr @TimeElapsedNearArena, align 8, !tbaa !15
  %195 = load double, ptr @n_Avg, align 8, !tbaa !15
  %196 = insertelement <2 x double> poison, double %193, i64 0
  %197 = insertelement <2 x double> %196, double %195, i64 1
  %198 = insertelement <2 x double> poison, double %194, i64 0
  %199 = shufflevector <2 x double> %198, <2 x double> poison, <2 x i32> zeroinitializer
  %200 = fdiv <2 x double> %197, %199
  %201 = fmul <2 x double> %200, %200
  %shift75 = shufflevector <2 x double> %201, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %202 = fsub <2 x double> %200, %shift75
  %203 = extractelement <2 x double> %202, i64 0
  %204 = fcmp olt double %203, 0.000000e+00
  %storemerge53 = select i1 %204, double 0.000000e+00, double %203
  store double %storemerge53, ptr @StDev_Temp, align 8, !tbaa !15
  %205 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %sqrt = tail call double @llvm.sqrt.f64(double %storemerge53)
  %206 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef nonnull @.str.25, double noundef %sqrt) #5
  %207 = load ptr, ptr @f_DistanceFromArenaFile_StDev, align 8, !tbaa !14
  %208 = tail call i32 @fclose(ptr noundef %207)
  %209 = load ptr, ptr @f_ClusterDependentParams_StDev, align 8, !tbaa !14
  %210 = tail call i32 @fclose(ptr noundef %209)
  %211 = load ptr, ptr @f_ClusterParams_StDev, align 8, !tbaa !14
  %212 = tail call i32 @fclose(ptr noundef %211)
  br label %213

213:                                              ; preds = %1, %12
  %214 = load ptr, ptr @f_DistanceFromArenaFile, align 8, !tbaa !14
  %215 = tail call i32 @fclose(ptr noundef %214)
  %216 = load ptr, ptr @f_ClusterDependentParams, align 8, !tbaa !14
  %217 = tail call i32 @fclose(ptr noundef %216)
  %218 = load ptr, ptr @f_ClusterParams, align 8, !tbaa !14
  %219 = tail call i32 @fclose(ptr noundef %218)
  %220 = load ptr, ptr @Adjacency, align 8, !tbaa !14
  %221 = load i32, ptr @Dimension, align 4, !tbaa !16
  tail call void @freeMatrix(ptr noundef %220, i32 noundef %221, i32 noundef %221) #5
  %222 = load ptr, ptr @Visited, align 8, !tbaa !14
  tail call void @free(ptr noundef %222) #5
  ret void
}

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #0

declare void @freeMatrix(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 24}
!6 = !{!"", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !7, i64 0}
!13 = !{!6, !7, i64 8}
!14 = !{!10, !10, i64 0}
!15 = !{!7, !7, i64 0}
!16 = !{!11, !11, i64 0}


; Effective O3 passes: AggressiveInstCombinePass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass