; LLVM IR from stivalaa/EstimNetDirected :: src (simulation)

; 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.timeval = type { i64, i64 }
%struct.sim_config_s = type { i32, i32, i64, i64, i32, i32, double, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, i32, ptr, i32, i32, i32, i32, %struct.param_config_s }
%struct.param_config_s = type { i32, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr }
%struct.graph_s = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i32, ptr, ptr, i32, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, i32, ptr, i32, ptr }
%struct.string_pair_s = type { ptr, ptr }
%struct.nodepair_s = type { i32, i32 }

@.str.1 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external global ptr, align 8
@.str.26 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [15 x i8], align 1
@__PRETTY_FUNCTION__.do_simulation = external hidden unnamed_addr constant [34 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [98 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @simulate_ergm(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i64 noundef, i64 noundef, ptr noundef, i32 noundef, double noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef, i32 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

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

; Function Attrs: nounwind
declare i32 @gettimeofday(ptr noundef, ptr noundef) #4

declare i32 @timeval_subtract(ptr noundef, ptr noundef, ptr noundef) #3

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

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #4

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #5

declare noalias ptr @fopen(ptr noundef, ptr noundef) #3

declare i32 @fclose(ptr noundef) #3

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @do_simulation(ptr noundef %0) #0 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca %struct.timeval, align 8
  %5 = alloca %struct.timeval, align 8
  %6 = alloca %struct.timeval, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca [65536 x i8], align 16
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %4) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 65536, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  store ptr null, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  store i32 0, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  store ptr null, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store ptr null, ptr %29, align 8, !tbaa !5
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.sim_config_s, ptr %31, i32 0, i32 12
  %33 = load ptr, ptr %32, align 8, !tbaa !11
  %34 = icmp ne ptr %33, null
  br i1 %34, label %38, label %35

35:                                               ; preds = %1
  %36 = load ptr, ptr @stderr, align 8, !tbaa !5
  %37 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef @.str.26) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

38:                                               ; preds = %1
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.sim_config_s, ptr %39, i32 0, i32 23
  %41 = load i32, ptr %40, align 8, !tbaa !16
  %42 = icmp ne i32 %41, 0
  br i1 %42, label %43, label %93

43:                                               ; preds = %38
  %44 = load ptr, ptr %3, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.sim_config_s, ptr %44, i32 0, i32 21
  %46 = load i32, ptr %45, align 8, !tbaa !17
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %51

48:                                               ; preds = %43
  %49 = load ptr, ptr @stderr, align 8, !tbaa !5
  %50 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %49, ptr noundef @.str.27) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

51:                                               ; preds = %43
  %52 = load ptr, ptr %3, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.sim_config_s, ptr %52, i32 0, i32 22
  %54 = load i32, ptr %53, align 4, !tbaa !18
  %55 = icmp ne i32 %54, 0
  br i1 %55, label %56, label %59

56:                                               ; preds = %51
  %57 = load ptr, ptr @stderr, align 8, !tbaa !5
  %58 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %57, ptr noundef @.str.28) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

59:                                               ; preds = %51
  %60 = load ptr, ptr %3, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.sim_config_s, ptr %60, i32 0, i32 15
  %62 = load i32, ptr %61, align 8, !tbaa !19
  %63 = icmp ne i32 %62, 0
  br i1 %63, label %64, label %67

64:                                               ; preds = %59
  %65 = load ptr, ptr @stderr, align 8, !tbaa !5
  %66 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %65, ptr noundef @.str.29) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

67:                                               ; preds = %59
  %68 = load ptr, ptr %3, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.sim_config_s, ptr %68, i32 0, i32 24
  %70 = load i32, ptr %69, align 4, !tbaa !20
  %71 = icmp eq i32 %70, 0
  br i1 %71, label %72, label %75

72:                                               ; preds = %67
  %73 = load ptr, ptr @stderr, align 8, !tbaa !5
  %74 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %73, ptr noundef @.str.30) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

75:                                               ; preds = %67
  %76 = load ptr, ptr %3, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.sim_config_s, ptr %76, i32 0, i32 24
  %78 = load i32, ptr %77, align 4, !tbaa !20
  %79 = load ptr, ptr %3, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.sim_config_s, ptr %79, i32 0, i32 0
  %81 = load i32, ptr %80, align 8, !tbaa !21
  %82 = icmp uge i32 %78, %81
  br i1 %82, label %83, label %92

83:                                               ; preds = %75
  %84 = load ptr, ptr @stderr, align 8, !tbaa !5
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.sim_config_s, ptr %85, i32 0, i32 24
  %87 = load i32, ptr %86, align 4, !tbaa !20
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.sim_config_s, ptr %88, i32 0, i32 0
  %90 = load i32, ptr %89, align 8, !tbaa !21
  %91 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %84, ptr noundef @.str.31, i32 noundef %87, i32 noundef %90) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

92:                                               ; preds = %75
  br label %102

93:                                               ; preds = %38
  %94 = load ptr, ptr %3, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.sim_config_s, ptr %94, i32 0, i32 24
  %96 = load i32, ptr %95, align 4, !tbaa !20
  %97 = icmp ne i32 %96, 0
  br i1 %97, label %98, label %101

98:                                               ; preds = %93
  %99 = load ptr, ptr @stderr, align 8, !tbaa !5
  %100 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %99, ptr noundef @.str.32) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

101:                                              ; preds = %93
  br label %102

102:                                              ; preds = %101, %92
  %103 = load ptr, ptr %3, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.sim_config_s, ptr %103, i32 0, i32 0
  %105 = load i32, ptr %104, align 8, !tbaa !21
  %106 = load ptr, ptr %3, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.sim_config_s, ptr %106, i32 0, i32 22
  %108 = load i32, ptr %107, align 4, !tbaa !18
  %109 = load ptr, ptr %3, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.sim_config_s, ptr %109, i32 0, i32 23
  %111 = load i32, ptr %110, align 8, !tbaa !16
  %112 = load ptr, ptr %3, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.sim_config_s, ptr %112, i32 0, i32 24
  %114 = load i32, ptr %113, align 4, !tbaa !20
  %115 = call ptr @allocate_graph(i32 noundef %105, i32 noundef %108, i32 noundef %111, i32 noundef %114)
  store ptr %115, ptr %8, align 8, !tbaa !5
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.sim_config_s, ptr %117, i32 0, i32 8
  %119 = load ptr, ptr %118, align 8, !tbaa !22
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.sim_config_s, ptr %120, i32 0, i32 9
  %122 = load ptr, ptr %121, align 8, !tbaa !23
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.sim_config_s, ptr %123, i32 0, i32 10
  %125 = load ptr, ptr %124, align 8, !tbaa !24
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.sim_config_s, ptr %126, i32 0, i32 11
  %128 = load ptr, ptr %127, align 8, !tbaa !25
  %129 = call i32 @load_attributes(ptr noundef %116, ptr noundef %119, ptr noundef %122, ptr noundef %125, ptr noundef %128)
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %131, label %134

131:                                              ; preds = %102
  %132 = load ptr, ptr @stderr, align 8, !tbaa !5
  %133 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %132, ptr noundef @.str.33) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

134:                                              ; preds = %102
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.sim_config_s, ptr %135, i32 0, i32 14
  %137 = load ptr, ptr %136, align 8, !tbaa !26
  %138 = icmp ne ptr %137, null
  br i1 %138, label %139, label %153

139:                                              ; preds = %134
  %140 = load ptr, ptr %8, align 8, !tbaa !5
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.sim_config_s, ptr %141, i32 0, i32 14
  %143 = load ptr, ptr %142, align 8, !tbaa !26
  %144 = call i32 @add_snowball_zones_to_graph(ptr noundef %140, ptr noundef %143)
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %146, label %152

146:                                              ; preds = %139
  %147 = load ptr, ptr @stderr, align 8, !tbaa !5
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.sim_config_s, ptr %148, i32 0, i32 14
  %150 = load ptr, ptr %149, align 8, !tbaa !26
  %151 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %147, ptr noundef @.str.34, ptr noundef %150) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

152:                                              ; preds = %139
  br label %153

153:                                              ; preds = %152, %134
  %154 = load ptr, ptr %3, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.sim_config_s, ptr %154, i32 0, i32 18
  %156 = load ptr, ptr %155, align 8, !tbaa !27
  %157 = icmp ne ptr %156, null
  br i1 %157, label %158, label %172

158:                                              ; preds = %153
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = load ptr, ptr %3, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.sim_config_s, ptr %160, i32 0, i32 18
  %162 = load ptr, ptr %161, align 8, !tbaa !27
  %163 = call i32 @add_cergm_terms_to_digraph(ptr noundef %159, ptr noundef %162)
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %165, label %171

165:                                              ; preds = %158
  %166 = load ptr, ptr @stderr, align 8, !tbaa !5
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.sim_config_s, ptr %167, i32 0, i32 18
  %169 = load ptr, ptr %168, align 8, !tbaa !27
  %170 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef @.str.35, ptr noundef %169) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

171:                                              ; preds = %158
  br label %172

172:                                              ; preds = %171, %153
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.sim_config_s, ptr %173, i32 0, i32 25
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = call i32 @check_param_network_type(ptr noundef %174, ptr noundef %175)
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %178, label %181

178:                                              ; preds = %172
  %179 = load ptr, ptr @stderr, align 8, !tbaa !5
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %179, ptr noundef @.str.36) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

181:                                              ; preds = %172
  %182 = load ptr, ptr %3, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.sim_config_s, ptr %182, i32 0, i32 25
  %184 = load ptr, ptr %8, align 8, !tbaa !5
  %185 = call i32 @build_attr_indices_from_names(ptr noundef %183, ptr noundef %184)
  %186 = icmp ne i32 %185, 0
  br i1 %186, label %187, label %190

187:                                              ; preds = %181
  %188 = load ptr, ptr @stderr, align 8, !tbaa !5
  %189 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %188, ptr noundef @.str.37) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

190:                                              ; preds = %181
  %191 = load ptr, ptr %3, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.sim_config_s, ptr %191, i32 0, i32 25
  %193 = load ptr, ptr %8, align 8, !tbaa !5
  %194 = call i32 @build_dyadic_indices_from_names(ptr noundef %192, ptr noundef %193, i32 noundef 1)
  %195 = icmp ne i32 %194, 0
  br i1 %195, label %196, label %199

196:                                              ; preds = %190
  %197 = load ptr, ptr @stderr, align 8, !tbaa !5
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef @.str.38) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

199:                                              ; preds = %190
  %200 = load ptr, ptr %3, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.sim_config_s, ptr %200, i32 0, i32 25
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = call i32 @build_attr_interaction_pair_indices_from_names(ptr noundef %201, ptr noundef %202)
  %204 = icmp ne i32 %203, 0
  br i1 %204, label %205, label %208

205:                                              ; preds = %199
  %206 = load ptr, ptr @stderr, align 8, !tbaa !5
  %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %206, ptr noundef @.str.39) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

208:                                              ; preds = %199
  %209 = load ptr, ptr %3, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.sim_config_s, ptr %209, i32 0, i32 25
  %211 = getelementptr inbounds %struct.param_config_s, ptr %210, i32 0, i32 0
  %212 = load i32, ptr %211, align 8, !tbaa !28
  store i32 %212, ptr %9, align 4, !tbaa !9
  %213 = load ptr, ptr %3, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.sim_config_s, ptr %213, i32 0, i32 25
  %215 = getelementptr inbounds %struct.param_config_s, ptr %214, i32 0, i32 5
  %216 = load i32, ptr %215, align 8, !tbaa !29
  store i32 %216, ptr %10, align 4, !tbaa !9
  %217 = load ptr, ptr %3, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.sim_config_s, ptr %217, i32 0, i32 25
  %219 = getelementptr inbounds %struct.param_config_s, ptr %218, i32 0, i32 12
  %220 = load i32, ptr %219, align 8, !tbaa !30
  store i32 %220, ptr %11, align 4, !tbaa !9
  %221 = load ptr, ptr %3, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.sim_config_s, ptr %221, i32 0, i32 25
  %223 = getelementptr inbounds %struct.param_config_s, ptr %222, i32 0, i32 19
  %224 = load i32, ptr %223, align 8, !tbaa !31
  store i32 %224, ptr %12, align 4, !tbaa !9
  %225 = load i32, ptr %9, align 4, !tbaa !9
  %226 = load i32, ptr %10, align 4, !tbaa !9
  %227 = add i32 %225, %226
  %228 = load i32, ptr %11, align 4, !tbaa !9
  %229 = add i32 %227, %228
  %230 = load i32, ptr %12, align 4, !tbaa !9
  %231 = add i32 %229, %230
  store i32 %231, ptr %13, align 4, !tbaa !9
  %232 = load ptr, ptr %3, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.sim_config_s, ptr %232, i32 0, i32 15
  %234 = load i32, ptr %233, align 8, !tbaa !19
  %235 = icmp ne i32 %234, 0
  br i1 %235, label %236, label %253

236:                                              ; preds = %208
  %237 = load ptr, ptr %3, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.sim_config_s, ptr %237, i32 0, i32 14
  %239 = load ptr, ptr %238, align 8, !tbaa !26
  %240 = icmp ne ptr %239, null
  br i1 %240, label %244, label %241

241:                                              ; preds = %236
  %242 = load ptr, ptr @stderr, align 8, !tbaa !5
  %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %242, ptr noundef @.str.40) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

244:                                              ; preds = %236
  %245 = load ptr, ptr %8, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.graph_s, ptr %245, i32 0, i32 34
  %247 = load i32, ptr %246, align 8, !tbaa !32
  %248 = icmp ult i32 %247, 1
  br i1 %248, label %249, label %252

249:                                              ; preds = %244
  %250 = load ptr, ptr @stderr, align 8, !tbaa !5
  %251 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %250, ptr noundef @.str.41) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

252:                                              ; preds = %244
  br label %262

253:                                              ; preds = %208
  %254 = load ptr, ptr %3, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.sim_config_s, ptr %254, i32 0, i32 14
  %256 = load ptr, ptr %255, align 8, !tbaa !26
  %257 = icmp ne ptr %256, null
  br i1 %257, label %258, label %261

258:                                              ; preds = %253
  %259 = load ptr, ptr @stderr, align 8, !tbaa !5
  %260 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %259, ptr noundef @.str.42) #8
  br label %261

261:                                              ; preds = %258, %253
  br label %262

262:                                              ; preds = %261, %252
  %263 = load ptr, ptr %3, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.sim_config_s, ptr %263, i32 0, i32 19
  %265 = load i32, ptr %264, align 8, !tbaa !34
  %266 = icmp ne i32 %265, 0
  br i1 %266, label %267, label %308

267:                                              ; preds = %262
  %268 = load ptr, ptr %3, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.sim_config_s, ptr %268, i32 0, i32 22
  %270 = load i32, ptr %269, align 4, !tbaa !18
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %275, label %272

272:                                              ; preds = %267
  %273 = load ptr, ptr @stderr, align 8, !tbaa !5
  %274 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %273, ptr noundef @.str.43) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

275:                                              ; preds = %267
  %276 = load ptr, ptr %3, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.sim_config_s, ptr %276, i32 0, i32 23
  %278 = load i32, ptr %277, align 8, !tbaa !16
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %283

280:                                              ; preds = %275
  %281 = load ptr, ptr @stderr, align 8, !tbaa !5
  %282 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %281, ptr noundef @.str.44) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

283:                                              ; preds = %275
  %284 = load ptr, ptr %3, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.sim_config_s, ptr %284, i32 0, i32 15
  %286 = load i32, ptr %285, align 8, !tbaa !19
  %287 = icmp ne i32 %286, 0
  br i1 %287, label %288, label %291

288:                                              ; preds = %283
  %289 = load ptr, ptr @stderr, align 8, !tbaa !5
  %290 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %289, ptr noundef @.str.45) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

291:                                              ; preds = %283
  %292 = load ptr, ptr %3, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.sim_config_s, ptr %292, i32 0, i32 18
  %294 = load ptr, ptr %293, align 8, !tbaa !27
  %295 = icmp ne ptr %294, null
  br i1 %295, label %299, label %296

296:                                              ; preds = %291
  %297 = load ptr, ptr @stderr, align 8, !tbaa !5
  %298 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %297, ptr noundef @.str.46) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

299:                                              ; preds = %291
  %300 = load ptr, ptr %8, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.graph_s, ptr %300, i32 0, i32 43
  %302 = load i32, ptr %301, align 8, !tbaa !35
  %303 = icmp ult i32 %302, 1
  br i1 %303, label %304, label %307

304:                                              ; preds = %299
  %305 = load ptr, ptr @stderr, align 8, !tbaa !5
  %306 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %305, ptr noundef @.str.47) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

307:                                              ; preds = %299
  br label %308

308:                                              ; preds = %307, %262
  %309 = load ptr, ptr %3, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.sim_config_s, ptr %309, i32 0, i32 21
  %311 = load i32, ptr %310, align 8, !tbaa !17
  %312 = icmp ne i32 %311, 0
  br i1 %312, label %313, label %338

313:                                              ; preds = %308
  %314 = load ptr, ptr %3, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.sim_config_s, ptr %314, i32 0, i32 22
  %316 = load i32, ptr %315, align 4, !tbaa !18
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %321, label %318

318:                                              ; preds = %313
  %319 = load ptr, ptr @stderr, align 8, !tbaa !5
  %320 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %319, ptr noundef @.str.48) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

321:                                              ; preds = %313
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.sim_config_s, ptr %322, i32 0, i32 15
  %324 = load i32, ptr %323, align 8, !tbaa !19
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %326, label %329

326:                                              ; preds = %321
  %327 = load ptr, ptr @stderr, align 8, !tbaa !5
  %328 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %327, ptr noundef @.str.49) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

329:                                              ; preds = %321
  %330 = load ptr, ptr %3, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.sim_config_s, ptr %330, i32 0, i32 19
  %332 = load i32, ptr %331, align 8, !tbaa !34
  %333 = icmp ne i32 %332, 0
  br i1 %333, label %334, label %337

334:                                              ; preds = %329
  %335 = load ptr, ptr @stderr, align 8, !tbaa !5
  %336 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %335, ptr noundef @.str.50) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

337:                                              ; preds = %329
  br label %338

338:                                              ; preds = %337, %308
  %339 = load ptr, ptr %3, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.sim_config_s, ptr %339, i32 0, i32 16
  %341 = load i32, ptr %340, align 4, !tbaa !36
  %342 = icmp ne i32 %341, 0
  br i1 %342, label %343, label %351

343:                                              ; preds = %338
  %344 = load ptr, ptr %3, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.sim_config_s, ptr %344, i32 0, i32 22
  %346 = load i32, ptr %345, align 4, !tbaa !18
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %351, label %348

348:                                              ; preds = %343
  %349 = load ptr, ptr @stderr, align 8, !tbaa !5
  %350 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %349, ptr noundef @.str.51) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

351:                                              ; preds = %343, %338
  %352 = load i32, ptr %13, align 4, !tbaa !9
  %353 = zext i32 %352 to i64
  %354 = call ptr @safe_calloc(i64 noundef %353, i64 noundef 8)
  store ptr %354, ptr %14, align 8, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !9
  %355 = call i32 (ptr, ...) @printf(ptr noundef @.str.52)
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %356

356:                                              ; preds = %424, %351
  %357 = load i32, ptr %15, align 4, !tbaa !9
  %358 = load ptr, ptr %3, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.sim_config_s, ptr %358, i32 0, i32 25
  %360 = getelementptr inbounds %struct.param_config_s, ptr %359, i32 0, i32 0
  %361 = load i32, ptr %360, align 8, !tbaa !28
  %362 = icmp ult i32 %357, %361
  br i1 %362, label %363, label %429

363:                                              ; preds = %356
  %364 = load ptr, ptr %3, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.sim_config_s, ptr %364, i32 0, i32 25
  %366 = getelementptr inbounds %struct.param_config_s, ptr %365, i32 0, i32 4
  %367 = load ptr, ptr %366, align 8, !tbaa !37
  %368 = load i32, ptr %15, align 4, !tbaa !9
  %369 = zext i32 %368 to i64
  %370 = getelementptr inbounds double, ptr %367, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !38
  %372 = load ptr, ptr %14, align 8, !tbaa !5
  %373 = load i32, ptr %16, align 4, !tbaa !9
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds double, ptr %372, i64 %374
  store double %371, ptr %375, align 8, !tbaa !38
  %376 = load ptr, ptr %3, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.sim_config_s, ptr %376, i32 0, i32 25
  %378 = getelementptr inbounds %struct.param_config_s, ptr %377, i32 0, i32 3
  %379 = load ptr, ptr %378, align 8, !tbaa !39
  %380 = load i32, ptr %15, align 4, !tbaa !9
  %381 = zext i32 %380 to i64
  %382 = getelementptr inbounds double, ptr %379, i64 %381
  %383 = load double, ptr %382, align 8, !tbaa !38
  %384 = fcmp ogt double %383, 0.000000e+00
  br i1 %384, label %385, label %408

385:                                              ; preds = %363
  %386 = load ptr, ptr %3, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.sim_config_s, ptr %386, i32 0, i32 25
  %388 = getelementptr inbounds %struct.param_config_s, ptr %387, i32 0, i32 2
  %389 = load ptr, ptr %388, align 8, !tbaa !40
  %390 = load i32, ptr %15, align 4, !tbaa !9
  %391 = zext i32 %390 to i64
  %392 = getelementptr inbounds ptr, ptr %389, i64 %391
  %393 = load ptr, ptr %392, align 8, !tbaa !5
  %394 = load ptr, ptr %3, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.sim_config_s, ptr %394, i32 0, i32 25
  %396 = getelementptr inbounds %struct.param_config_s, ptr %395, i32 0, i32 3
  %397 = load ptr, ptr %396, align 8, !tbaa !39
  %398 = load i32, ptr %15, align 4, !tbaa !9
  %399 = zext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %397, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !38
  %402 = load ptr, ptr %14, align 8, !tbaa !5
  %403 = load i32, ptr %16, align 4, !tbaa !9
  %404 = zext i32 %403 to i64
  %405 = getelementptr inbounds double, ptr %402, i64 %404
  %406 = load double, ptr %405, align 8, !tbaa !38
  %407 = call i32 (ptr, ...) @printf(ptr noundef @.str.53, ptr noundef %393, double noundef %401, double noundef %406)
  br label %423

408:                                              ; preds = %363
  %409 = load ptr, ptr %3, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.sim_config_s, ptr %409, i32 0, i32 25
  %411 = getelementptr inbounds %struct.param_config_s, ptr %410, i32 0, i32 2
  %412 = load ptr, ptr %411, align 8, !tbaa !40
  %413 = load i32, ptr %15, align 4, !tbaa !9
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds ptr, ptr %412, i64 %414
  %416 = load ptr, ptr %415, align 8, !tbaa !5
  %417 = load ptr, ptr %14, align 8, !tbaa !5
  %418 = load i32, ptr %16, align 4, !tbaa !9
  %419 = zext i32 %418 to i64
  %420 = getelementptr inbounds double, ptr %417, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !38
  %422 = call i32 (ptr, ...) @printf(ptr noundef @.str.54, ptr noundef %416, double noundef %421)
  br label %423

423:                                              ; preds = %408, %385
  br label %424

424:                                              ; preds = %423
  %425 = load i32, ptr %15, align 4, !tbaa !9
  %426 = add i32 %425, 1
  store i32 %426, ptr %15, align 4, !tbaa !9
  %427 = load i32, ptr %16, align 4, !tbaa !9
  %428 = add i32 %427, 1
  store i32 %428, ptr %16, align 4, !tbaa !9
  br label %356, !llvm.loop !41

429:                                              ; preds = %356
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %430

430:                                              ; preds = %514, %429
  %431 = load i32, ptr %15, align 4, !tbaa !9
  %432 = load ptr, ptr %3, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.sim_config_s, ptr %432, i32 0, i32 25
  %434 = getelementptr inbounds %struct.param_config_s, ptr %433, i32 0, i32 5
  %435 = load i32, ptr %434, align 8, !tbaa !29
  %436 = icmp ult i32 %431, %435
  br i1 %436, label %437, label %519

437:                                              ; preds = %430
  %438 = load ptr, ptr %3, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.sim_config_s, ptr %438, i32 0, i32 25
  %440 = getelementptr inbounds %struct.param_config_s, ptr %439, i32 0, i32 11
  %441 = load ptr, ptr %440, align 8, !tbaa !43
  %442 = load i32, ptr %15, align 4, !tbaa !9
  %443 = zext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %441, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !38
  %446 = load ptr, ptr %14, align 8, !tbaa !5
  %447 = load i32, ptr %16, align 4, !tbaa !9
  %448 = zext i32 %447 to i64
  %449 = getelementptr inbounds double, ptr %446, i64 %448
  store double %445, ptr %449, align 8, !tbaa !38
  %450 = load ptr, ptr %3, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.sim_config_s, ptr %450, i32 0, i32 25
  %452 = getelementptr inbounds %struct.param_config_s, ptr %451, i32 0, i32 10
  %453 = load ptr, ptr %452, align 8, !tbaa !44
  %454 = load i32, ptr %15, align 4, !tbaa !9
  %455 = zext i32 %454 to i64
  %456 = getelementptr inbounds double, ptr %453, i64 %455
  %457 = load double, ptr %456, align 8, !tbaa !38
  %458 = fcmp ogt double %457, 0.000000e+00
  br i1 %458, label %459, label %490

459:                                              ; preds = %437
  %460 = load ptr, ptr %3, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.sim_config_s, ptr %460, i32 0, i32 25
  %462 = getelementptr inbounds %struct.param_config_s, ptr %461, i32 0, i32 9
  %463 = load ptr, ptr %462, align 8, !tbaa !45
  %464 = load i32, ptr %15, align 4, !tbaa !9
  %465 = zext i32 %464 to i64
  %466 = getelementptr inbounds ptr, ptr %463, i64 %465
  %467 = load ptr, ptr %466, align 8, !tbaa !5
  %468 = load ptr, ptr %3, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.sim_config_s, ptr %468, i32 0, i32 25
  %470 = getelementptr inbounds %struct.param_config_s, ptr %469, i32 0, i32 7
  %471 = load ptr, ptr %470, align 8, !tbaa !46
  %472 = load i32, ptr %15, align 4, !tbaa !9
  %473 = zext i32 %472 to i64
  %474 = getelementptr inbounds ptr, ptr %471, i64 %473
  %475 = load ptr, ptr %474, align 8, !tbaa !5
  %476 = load ptr, ptr %3, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.sim_config_s, ptr %476, i32 0, i32 25
  %478 = getelementptr inbounds %struct.param_config_s, ptr %477, i32 0, i32 10
  %479 = load ptr, ptr %478, align 8, !tbaa !44
  %480 = load i32, ptr %15, align 4, !tbaa !9
  %481 = zext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %479, i64 %481
  %483 = load double, ptr %482, align 8, !tbaa !38
  %484 = load ptr, ptr %14, align 8, !tbaa !5
  %485 = load i32, ptr %16, align 4, !tbaa !9
  %486 = zext i32 %485 to i64
  %487 = getelementptr inbounds double, ptr %484, i64 %486
  %488 = load double, ptr %487, align 8, !tbaa !38
  %489 = call i32 (ptr, ...) @printf(ptr noundef @.str.55, ptr noundef %467, ptr noundef %475, double noundef %483, double noundef %488)
  br label %513

490:                                              ; preds = %437
  %491 = load ptr, ptr %3, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.sim_config_s, ptr %491, i32 0, i32 25
  %493 = getelementptr inbounds %struct.param_config_s, ptr %492, i32 0, i32 9
  %494 = load ptr, ptr %493, align 8, !tbaa !45
  %495 = load i32, ptr %15, align 4, !tbaa !9
  %496 = zext i32 %495 to i64
  %497 = getelementptr inbounds ptr, ptr %494, i64 %496
  %498 = load ptr, ptr %497, align 8, !tbaa !5
  %499 = load ptr, ptr %3, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.sim_config_s, ptr %499, i32 0, i32 25
  %501 = getelementptr inbounds %struct.param_config_s, ptr %500, i32 0, i32 7
  %502 = load ptr, ptr %501, align 8, !tbaa !46
  %503 = load i32, ptr %15, align 4, !tbaa !9
  %504 = zext i32 %503 to i64
  %505 = getelementptr inbounds ptr, ptr %502, i64 %504
  %506 = load ptr, ptr %505, align 8, !tbaa !5
  %507 = load ptr, ptr %14, align 8, !tbaa !5
  %508 = load i32, ptr %16, align 4, !tbaa !9
  %509 = zext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %507, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !38
  %512 = call i32 (ptr, ...) @printf(ptr noundef @.str.56, ptr noundef %498, ptr noundef %506, double noundef %511)
  br label %513

513:                                              ; preds = %490, %459
  br label %514

514:                                              ; preds = %513
  %515 = load i32, ptr %15, align 4, !tbaa !9
  %516 = add i32 %515, 1
  store i32 %516, ptr %15, align 4, !tbaa !9
  %517 = load i32, ptr %16, align 4, !tbaa !9
  %518 = add i32 %517, 1
  store i32 %518, ptr %16, align 4, !tbaa !9
  br label %430, !llvm.loop !47

519:                                              ; preds = %430
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %520

520:                                              ; preds = %554, %519
  %521 = load i32, ptr %15, align 4, !tbaa !9
  %522 = load ptr, ptr %3, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.sim_config_s, ptr %522, i32 0, i32 25
  %524 = getelementptr inbounds %struct.param_config_s, ptr %523, i32 0, i32 12
  %525 = load i32, ptr %524, align 8, !tbaa !30
  %526 = icmp ult i32 %521, %525
  br i1 %526, label %527, label %559

527:                                              ; preds = %520
  %528 = load ptr, ptr %3, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.sim_config_s, ptr %528, i32 0, i32 25
  %530 = getelementptr inbounds %struct.param_config_s, ptr %529, i32 0, i32 18
  %531 = load ptr, ptr %530, align 8, !tbaa !48
  %532 = load i32, ptr %15, align 4, !tbaa !9
  %533 = zext i32 %532 to i64
  %534 = getelementptr inbounds double, ptr %531, i64 %533
  %535 = load double, ptr %534, align 8, !tbaa !38
  %536 = load ptr, ptr %14, align 8, !tbaa !5
  %537 = load i32, ptr %16, align 4, !tbaa !9
  %538 = zext i32 %537 to i64
  %539 = getelementptr inbounds double, ptr %536, i64 %538
  store double %535, ptr %539, align 8, !tbaa !38
  %540 = load ptr, ptr %3, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.sim_config_s, ptr %540, i32 0, i32 25
  %542 = getelementptr inbounds %struct.param_config_s, ptr %541, i32 0, i32 17
  %543 = load ptr, ptr %542, align 8, !tbaa !49
  %544 = load i32, ptr %15, align 4, !tbaa !9
  %545 = zext i32 %544 to i64
  %546 = getelementptr inbounds ptr, ptr %543, i64 %545
  %547 = load ptr, ptr %546, align 8, !tbaa !5
  %548 = load ptr, ptr %14, align 8, !tbaa !5
  %549 = load i32, ptr %16, align 4, !tbaa !9
  %550 = zext i32 %549 to i64
  %551 = getelementptr inbounds double, ptr %548, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !38
  %553 = call i32 (ptr, ...) @printf(ptr noundef @.str.54, ptr noundef %547, double noundef %552)
  br label %554

554:                                              ; preds = %527
  %555 = load i32, ptr %15, align 4, !tbaa !9
  %556 = add i32 %555, 1
  store i32 %556, ptr %15, align 4, !tbaa !9
  %557 = load i32, ptr %16, align 4, !tbaa !9
  %558 = add i32 %557, 1
  store i32 %558, ptr %16, align 4, !tbaa !9
  br label %520, !llvm.loop !50

559:                                              ; preds = %520
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %560

560:                                              ; preds = %612, %559
  %561 = load i32, ptr %15, align 4, !tbaa !9
  %562 = load ptr, ptr %3, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.sim_config_s, ptr %562, i32 0, i32 25
  %564 = getelementptr inbounds %struct.param_config_s, ptr %563, i32 0, i32 19
  %565 = load i32, ptr %564, align 8, !tbaa !31
  %566 = icmp ult i32 %561, %565
  br i1 %566, label %567, label %617

567:                                              ; preds = %560
  %568 = load ptr, ptr %3, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.sim_config_s, ptr %568, i32 0, i32 25
  %570 = getelementptr inbounds %struct.param_config_s, ptr %569, i32 0, i32 24
  %571 = load ptr, ptr %570, align 8, !tbaa !51
  %572 = load i32, ptr %15, align 4, !tbaa !9
  %573 = zext i32 %572 to i64
  %574 = getelementptr inbounds double, ptr %571, i64 %573
  %575 = load double, ptr %574, align 8, !tbaa !38
  %576 = load ptr, ptr %14, align 8, !tbaa !5
  %577 = load i32, ptr %16, align 4, !tbaa !9
  %578 = zext i32 %577 to i64
  %579 = getelementptr inbounds double, ptr %576, i64 %578
  store double %575, ptr %579, align 8, !tbaa !38
  %580 = load ptr, ptr %3, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.sim_config_s, ptr %580, i32 0, i32 25
  %582 = getelementptr inbounds %struct.param_config_s, ptr %581, i32 0, i32 23
  %583 = load ptr, ptr %582, align 8, !tbaa !52
  %584 = load i32, ptr %15, align 4, !tbaa !9
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds ptr, ptr %583, i64 %585
  %587 = load ptr, ptr %586, align 8, !tbaa !5
  %588 = load ptr, ptr %3, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.sim_config_s, ptr %588, i32 0, i32 25
  %590 = getelementptr inbounds %struct.param_config_s, ptr %589, i32 0, i32 21
  %591 = load ptr, ptr %590, align 8, !tbaa !53
  %592 = load i32, ptr %15, align 4, !tbaa !9
  %593 = zext i32 %592 to i64
  %594 = getelementptr inbounds %struct.string_pair_s, ptr %591, i64 %593
  %595 = getelementptr inbounds %struct.string_pair_s, ptr %594, i32 0, i32 0
  %596 = load ptr, ptr %595, align 8, !tbaa !54
  %597 = load ptr, ptr %3, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.sim_config_s, ptr %597, i32 0, i32 25
  %599 = getelementptr inbounds %struct.param_config_s, ptr %598, i32 0, i32 21
  %600 = load ptr, ptr %599, align 8, !tbaa !53
  %601 = load i32, ptr %15, align 4, !tbaa !9
  %602 = zext i32 %601 to i64
  %603 = getelementptr inbounds %struct.string_pair_s, ptr %600, i64 %602
  %604 = getelementptr inbounds %struct.string_pair_s, ptr %603, i32 0, i32 1
  %605 = load ptr, ptr %604, align 8, !tbaa !56
  %606 = load ptr, ptr %14, align 8, !tbaa !5
  %607 = load i32, ptr %16, align 4, !tbaa !9
  %608 = zext i32 %607 to i64
  %609 = getelementptr inbounds double, ptr %606, i64 %608
  %610 = load double, ptr %609, align 8, !tbaa !38
  %611 = call i32 (ptr, ...) @printf(ptr noundef @.str.57, ptr noundef %587, ptr noundef %596, ptr noundef %605, double noundef %610)
  br label %612

612:                                              ; preds = %567
  %613 = load i32, ptr %15, align 4, !tbaa !9
  %614 = add i32 %613, 1
  store i32 %614, ptr %15, align 4, !tbaa !9
  %615 = load i32, ptr %16, align 4, !tbaa !9
  %616 = add i32 %615, 1
  store i32 %616, ptr %16, align 4, !tbaa !9
  br label %560, !llvm.loop !57

617:                                              ; preds = %560
  %618 = call i32 (ptr, ...) @printf(ptr noundef @.str.52)
  %619 = load ptr, ptr %3, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.sim_config_s, ptr %619, i32 0, i32 4
  %621 = load i32, ptr %620, align 8, !tbaa !58
  %622 = icmp ne i32 %621, 0
  br i1 %622, label %623, label %631

623:                                              ; preds = %617
  %624 = load ptr, ptr %3, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.sim_config_s, ptr %624, i32 0, i32 5
  %626 = load i32, ptr %625, align 4, !tbaa !59
  %627 = icmp ne i32 %626, 0
  br i1 %627, label %628, label %631

628:                                              ; preds = %623
  %629 = load ptr, ptr @stderr, align 8, !tbaa !5
  %630 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %629, ptr noundef @.str.58) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

631:                                              ; preds = %623, %617
  %632 = load ptr, ptr %3, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.sim_config_s, ptr %632, i32 0, i32 22
  %634 = load i32, ptr %633, align 4, !tbaa !18
  %635 = icmp ne i32 %634, 0
  %636 = zext i1 %635 to i64
  %637 = select i1 %635, ptr @.str.59, ptr @.str.60
  store ptr %637, ptr %29, align 8, !tbaa !5
  %638 = load ptr, ptr %3, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.sim_config_s, ptr %638, i32 0, i32 4
  %640 = load i32, ptr %639, align 8, !tbaa !58
  %641 = icmp ne i32 %640, 0
  br i1 %641, label %642, label %689

642:                                              ; preds = %631
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %643

643:                                              ; preds = %665, %642
  %644 = load i32, ptr %15, align 4, !tbaa !9
  %645 = load ptr, ptr %3, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.sim_config_s, ptr %645, i32 0, i32 25
  %647 = getelementptr inbounds %struct.param_config_s, ptr %646, i32 0, i32 0
  %648 = load i32, ptr %647, align 8, !tbaa !28
  %649 = icmp ult i32 %644, %648
  br i1 %649, label %650, label %668

650:                                              ; preds = %643
  %651 = load ptr, ptr %3, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.sim_config_s, ptr %651, i32 0, i32 25
  %653 = getelementptr inbounds %struct.param_config_s, ptr %652, i32 0, i32 2
  %654 = load ptr, ptr %653, align 8, !tbaa !40
  %655 = load i32, ptr %15, align 4, !tbaa !9
  %656 = zext i32 %655 to i64
  %657 = getelementptr inbounds ptr, ptr %654, i64 %656
  %658 = load ptr, ptr %657, align 8, !tbaa !5
  %659 = load ptr, ptr %29, align 8, !tbaa !5
  %660 = call i32 @strcasecmp(ptr noundef %658, ptr noundef %659) #9
  %661 = icmp eq i32 %660, 0
  br i1 %661, label %662, label %664

662:                                              ; preds = %650
  %663 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %663, ptr %23, align 4, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !9
  br label %664

664:                                              ; preds = %662, %650
  br label %665

665:                                              ; preds = %664
  %666 = load i32, ptr %15, align 4, !tbaa !9
  %667 = add i32 %666, 1
  store i32 %667, ptr %15, align 4, !tbaa !9
  br label %643, !llvm.loop !60

668:                                              ; preds = %643
  %669 = load i32, ptr %22, align 4, !tbaa !9
  %670 = icmp ne i32 %669, 0
  br i1 %670, label %675, label %671

671:                                              ; preds = %668
  %672 = load ptr, ptr @stderr, align 8, !tbaa !5
  %673 = load ptr, ptr %29, align 8, !tbaa !5
  %674 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %672, ptr noundef @.str.61, ptr noundef %673) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

675:                                              ; preds = %668
  %676 = load ptr, ptr %3, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.sim_config_s, ptr %676, i32 0, i32 17
  %678 = load i32, ptr %677, align 8, !tbaa !61
  %679 = icmp eq i32 %678, 0
  br i1 %679, label %680, label %688

680:                                              ; preds = %675
  %681 = load ptr, ptr %3, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.sim_config_s, ptr %681, i32 0, i32 19
  %683 = load i32, ptr %682, align 8, !tbaa !34
  %684 = icmp ne i32 %683, 0
  br i1 %684, label %688, label %685

685:                                              ; preds = %680
  %686 = load ptr, ptr @stderr, align 8, !tbaa !5
  %687 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %686, ptr noundef @.str.62) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

688:                                              ; preds = %680, %675
  br label %698

689:                                              ; preds = %631
  %690 = load ptr, ptr %3, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.sim_config_s, ptr %690, i32 0, i32 17
  %692 = load i32, ptr %691, align 8, !tbaa !61
  %693 = icmp ne i32 %692, 0
  br i1 %693, label %694, label %697

694:                                              ; preds = %689
  %695 = load ptr, ptr @stderr, align 8, !tbaa !5
  %696 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %695, ptr noundef @.str.63) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

697:                                              ; preds = %689
  br label %698

698:                                              ; preds = %697, %688
  %699 = load ptr, ptr %3, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.sim_config_s, ptr %699, i32 0, i32 4
  %701 = load i32, ptr %700, align 8, !tbaa !58
  %702 = icmp ne i32 %701, 0
  br i1 %702, label %716, label %703

703:                                              ; preds = %698
  %704 = load ptr, ptr %3, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.sim_config_s, ptr %704, i32 0, i32 6
  %706 = load double, ptr %705, align 8, !tbaa !62
  %707 = fsub double %706, 1.000000e-01
  %708 = call double @llvm.fabs.f64(double %707)
  %709 = fcmp ole double %708, 0x3CB0000000000000
  br i1 %709, label %716, label %710

710:                                              ; preds = %703
  %711 = load ptr, ptr @stderr, align 8, !tbaa !5
  %712 = load ptr, ptr %3, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.sim_config_s, ptr %712, i32 0, i32 6
  %714 = load double, ptr %713, align 8, !tbaa !62
  %715 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %711, ptr noundef @.str.64, double noundef %714) #8
  br label %716

716:                                              ; preds = %710, %703, %698
  %717 = load i32, ptr %13, align 4, !tbaa !9
  %718 = zext i32 %717 to i64
  %719 = call ptr @safe_calloc(i64 noundef %718, i64 noundef 8)
  store ptr %719, ptr %24, align 8, !tbaa !5
  %720 = load ptr, ptr %8, align 8, !tbaa !5
  %721 = load i32, ptr %13, align 4, !tbaa !9
  %722 = load i32, ptr %10, align 4, !tbaa !9
  %723 = load i32, ptr %11, align 4, !tbaa !9
  %724 = load i32, ptr %12, align 4, !tbaa !9
  %725 = load ptr, ptr %3, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.sim_config_s, ptr %725, i32 0, i32 25
  %727 = getelementptr inbounds %struct.param_config_s, ptr %726, i32 0, i32 1
  %728 = load ptr, ptr %727, align 8, !tbaa !63
  %729 = load ptr, ptr %3, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.sim_config_s, ptr %729, i32 0, i32 25
  %731 = getelementptr inbounds %struct.param_config_s, ptr %730, i32 0, i32 3
  %732 = load ptr, ptr %731, align 8, !tbaa !39
  %733 = load ptr, ptr %3, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.sim_config_s, ptr %733, i32 0, i32 25
  %735 = getelementptr inbounds %struct.param_config_s, ptr %734, i32 0, i32 6
  %736 = load ptr, ptr %735, align 8, !tbaa !64
  %737 = load ptr, ptr %3, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.sim_config_s, ptr %737, i32 0, i32 25
  %739 = getelementptr inbounds %struct.param_config_s, ptr %738, i32 0, i32 13
  %740 = load ptr, ptr %739, align 8, !tbaa !65
  %741 = load ptr, ptr %3, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.sim_config_s, ptr %741, i32 0, i32 25
  %743 = getelementptr inbounds %struct.param_config_s, ptr %742, i32 0, i32 20
  %744 = load ptr, ptr %743, align 8, !tbaa !66
  %745 = load ptr, ptr %3, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.sim_config_s, ptr %745, i32 0, i32 25
  %747 = getelementptr inbounds %struct.param_config_s, ptr %746, i32 0, i32 8
  %748 = load ptr, ptr %747, align 8, !tbaa !67
  %749 = load ptr, ptr %3, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.sim_config_s, ptr %749, i32 0, i32 25
  %751 = getelementptr inbounds %struct.param_config_s, ptr %750, i32 0, i32 10
  %752 = load ptr, ptr %751, align 8, !tbaa !44
  %753 = load ptr, ptr %3, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.sim_config_s, ptr %753, i32 0, i32 25
  %755 = getelementptr inbounds %struct.param_config_s, ptr %754, i32 0, i32 22
  %756 = load ptr, ptr %755, align 8, !tbaa !68
  %757 = load ptr, ptr %24, align 8, !tbaa !5
  %758 = call ptr @empty_graph_stats(ptr noundef %720, i32 noundef %721, i32 noundef %722, i32 noundef %723, i32 noundef %724, ptr noundef %728, ptr noundef %732, ptr noundef %736, ptr noundef %740, ptr noundef %744, ptr noundef %748, ptr noundef %752, ptr noundef %756, ptr noundef %757)
  %759 = load ptr, ptr %3, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.sim_config_s, ptr %759, i32 0, i32 19
  %761 = load i32, ptr %760, align 8, !tbaa !34
  %762 = icmp ne i32 %761, 0
  br i1 %762, label %763, label %1109

763:                                              ; preds = %716
  %764 = load ptr, ptr %8, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.graph_s, ptr %764, i32 0, i32 1
  %766 = load i32, ptr %765, align 4, !tbaa !69
  %767 = icmp ne i32 %766, 0
  br i1 %767, label %768, label %769

768:                                              ; preds = %763
  br label %770

769:                                              ; preds = %763
  call void @__assert_fail(ptr noundef @.str.65, ptr noundef @.str.1, i32 noundef 823, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

770:                                              ; preds = %768
  %771 = load ptr, ptr %3, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.sim_config_s, ptr %771, i32 0, i32 21
  %773 = load i32, ptr %772, align 8, !tbaa !17
  %774 = icmp ne i32 %773, 0
  br i1 %774, label %776, label %775

775:                                              ; preds = %770
  br label %777

776:                                              ; preds = %770
  call void @__assert_fail(ptr noundef @.str.66, ptr noundef @.str.1, i32 noundef 824, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

777:                                              ; preds = %775
  %778 = load ptr, ptr %3, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.sim_config_s, ptr %778, i32 0, i32 20
  %780 = load ptr, ptr %779, align 8, !tbaa !70
  %781 = icmp ne ptr %780, null
  br i1 %781, label %785, label %782

782:                                              ; preds = %777
  %783 = load ptr, ptr @stderr, align 8, !tbaa !5
  %784 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %783, ptr noundef @.str.67) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

785:                                              ; preds = %777
  %786 = load ptr, ptr %3, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.sim_config_s, ptr %786, i32 0, i32 20
  %788 = load ptr, ptr %787, align 8, !tbaa !70
  %789 = call noalias ptr @fopen(ptr noundef %788, ptr noundef @.str.68)
  store ptr %789, ptr %25, align 8, !tbaa !5
  %790 = icmp ne ptr %789, null
  br i1 %790, label %800, label %791

791:                                              ; preds = %785
  %792 = load ptr, ptr @stderr, align 8, !tbaa !5
  %793 = load ptr, ptr %3, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.sim_config_s, ptr %793, i32 0, i32 20
  %795 = load ptr, ptr %794, align 8, !tbaa !70
  %796 = call ptr @__errno_location() #11
  %797 = load i32, ptr %796, align 4, !tbaa !9
  %798 = call ptr @strerror(i32 noundef %797) #8
  %799 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %792, ptr noundef @.str.69, ptr noundef %795, ptr noundef %798) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

800:                                              ; preds = %785
  %801 = load ptr, ptr %3, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.sim_config_s, ptr %801, i32 0, i32 17
  %803 = load i32, ptr %802, align 8, !tbaa !61
  %804 = icmp ne i32 %803, 0
  br i1 %804, label %805, label %811

805:                                              ; preds = %800
  %806 = load ptr, ptr @stderr, align 8, !tbaa !5
  %807 = load ptr, ptr %3, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.sim_config_s, ptr %807, i32 0, i32 17
  %809 = load i32, ptr %808, align 8, !tbaa !61
  %810 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %806, ptr noundef @.str.70, i32 noundef %809) #8
  br label %811

811:                                              ; preds = %805, %800
  %812 = load ptr, ptr %25, align 8, !tbaa !5
  %813 = call i32 @get_num_vertices_from_arclist_file(ptr noundef %812)
  store i32 %813, ptr %26, align 4, !tbaa !9
  %814 = load i32, ptr %26, align 4, !tbaa !9
  %815 = load ptr, ptr %3, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.sim_config_s, ptr %815, i32 0, i32 0
  %817 = load i32, ptr %816, align 8, !tbaa !21
  %818 = icmp ne i32 %814, %817
  br i1 %818, label %819, label %829

819:                                              ; preds = %811
  %820 = load ptr, ptr @stderr, align 8, !tbaa !5
  %821 = load ptr, ptr %3, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.sim_config_s, ptr %821, i32 0, i32 0
  %823 = load i32, ptr %822, align 8, !tbaa !21
  %824 = load ptr, ptr %3, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.sim_config_s, ptr %824, i32 0, i32 20
  %826 = load ptr, ptr %825, align 8, !tbaa !70
  %827 = load i32, ptr %26, align 4, !tbaa !9
  %828 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %820, ptr noundef @.str.71, i32 noundef %823, ptr noundef %826, i32 noundef %827) #8
  store i32 1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

829:                                              ; preds = %811
  %830 = load ptr, ptr %3, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.sim_config_s, ptr %830, i32 0, i32 20
  %832 = load ptr, ptr %831, align 8, !tbaa !70
  %833 = call noalias ptr @fopen(ptr noundef %832, ptr noundef @.str.68)
  store ptr %833, ptr %25, align 8, !tbaa !5
  %834 = icmp ne ptr %833, null
  br i1 %834, label %844, label %835

835:                                              ; preds = %829
  %836 = load ptr, ptr @stderr, align 8, !tbaa !5
  %837 = load ptr, ptr %3, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.sim_config_s, ptr %837, i32 0, i32 20
  %839 = load ptr, ptr %838, align 8, !tbaa !70
  %840 = call ptr @__errno_location() #11
  %841 = load i32, ptr %840, align 4, !tbaa !9
  %842 = call ptr @strerror(i32 noundef %841) #8
  %843 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %836, ptr noundef @.str.69, ptr noundef %839, ptr noundef %842) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

844:                                              ; preds = %829
  %845 = load ptr, ptr %25, align 8, !tbaa !5
  %846 = load ptr, ptr %8, align 8, !tbaa !5
  %847 = load i32, ptr %13, align 4, !tbaa !9
  %848 = load i32, ptr %10, align 4, !tbaa !9
  %849 = load i32, ptr %11, align 4, !tbaa !9
  %850 = load i32, ptr %12, align 4, !tbaa !9
  %851 = load ptr, ptr %3, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.sim_config_s, ptr %851, i32 0, i32 25
  %853 = getelementptr inbounds %struct.param_config_s, ptr %852, i32 0, i32 1
  %854 = load ptr, ptr %853, align 8, !tbaa !63
  %855 = load ptr, ptr %3, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.sim_config_s, ptr %855, i32 0, i32 25
  %857 = getelementptr inbounds %struct.param_config_s, ptr %856, i32 0, i32 3
  %858 = load ptr, ptr %857, align 8, !tbaa !39
  %859 = load ptr, ptr %3, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.sim_config_s, ptr %859, i32 0, i32 25
  %861 = getelementptr inbounds %struct.param_config_s, ptr %860, i32 0, i32 6
  %862 = load ptr, ptr %861, align 8, !tbaa !64
  %863 = load ptr, ptr %3, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.sim_config_s, ptr %863, i32 0, i32 25
  %865 = getelementptr inbounds %struct.param_config_s, ptr %864, i32 0, i32 13
  %866 = load ptr, ptr %865, align 8, !tbaa !65
  %867 = load ptr, ptr %3, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.sim_config_s, ptr %867, i32 0, i32 25
  %869 = getelementptr inbounds %struct.param_config_s, ptr %868, i32 0, i32 20
  %870 = load ptr, ptr %869, align 8, !tbaa !66
  %871 = load ptr, ptr %3, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.sim_config_s, ptr %871, i32 0, i32 25
  %873 = getelementptr inbounds %struct.param_config_s, ptr %872, i32 0, i32 8
  %874 = load ptr, ptr %873, align 8, !tbaa !67
  %875 = load ptr, ptr %3, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.sim_config_s, ptr %875, i32 0, i32 25
  %877 = getelementptr inbounds %struct.param_config_s, ptr %876, i32 0, i32 10
  %878 = load ptr, ptr %877, align 8, !tbaa !44
  %879 = load ptr, ptr %3, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.sim_config_s, ptr %879, i32 0, i32 25
  %881 = getelementptr inbounds %struct.param_config_s, ptr %880, i32 0, i32 22
  %882 = load ptr, ptr %881, align 8, !tbaa !68
  %883 = load ptr, ptr %24, align 8, !tbaa !5
  %884 = load ptr, ptr %14, align 8, !tbaa !5
  %885 = call ptr @load_graph_from_arclist_file(ptr noundef %845, ptr noundef %846, i32 noundef 1, i32 noundef %847, i32 noundef %848, i32 noundef %849, i32 noundef %850, ptr noundef %854, ptr noundef %858, ptr noundef %862, ptr noundef %866, ptr noundef %870, ptr noundef %874, ptr noundef %878, ptr noundef %882, ptr noundef %883, ptr noundef %884)
  store ptr %885, ptr %8, align 8, !tbaa !5
  %886 = load ptr, ptr %8, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.graph_s, ptr %886, i32 0, i32 44
  store i32 0, ptr %887, align 4, !tbaa !71
  %888 = load ptr, ptr %8, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.graph_s, ptr %888, i32 0, i32 45
  %890 = load ptr, ptr %889, align 8, !tbaa !72
  call void @free(ptr noundef %890) #8
  %891 = load ptr, ptr %8, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.graph_s, ptr %891, i32 0, i32 45
  store ptr null, ptr %892, align 8, !tbaa !72
  %893 = load ptr, ptr %8, align 8, !tbaa !5
  %894 = load ptr, ptr %3, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.sim_config_s, ptr %894, i32 0, i32 18
  %896 = load ptr, ptr %895, align 8, !tbaa !27
  %897 = call i32 @add_cergm_terms_to_digraph(ptr noundef %893, ptr noundef %896)
  %898 = icmp ne i32 %897, 0
  br i1 %898, label %899, label %905

899:                                              ; preds = %844
  %900 = load ptr, ptr @stderr, align 8, !tbaa !5
  %901 = load ptr, ptr %3, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.sim_config_s, ptr %901, i32 0, i32 18
  %903 = load ptr, ptr %902, align 8, !tbaa !27
  %904 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %900, ptr noundef @.str.35, ptr noundef %903) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

905:                                              ; preds = %844
  %906 = load ptr, ptr %8, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.graph_s, ptr %906, i32 0, i32 46
  %908 = load i32, ptr %907, align 8, !tbaa !73
  store i32 %908, ptr %28, align 4, !tbaa !9
  %909 = load i32, ptr %28, align 4, !tbaa !9
  %910 = call i32 (ptr, ...) @printf(ptr noundef @.str.72, i32 noundef %909)
  %911 = load i32, ptr %13, align 4, !tbaa !9
  %912 = zext i32 %911 to i64
  %913 = call ptr @safe_calloc(i64 noundef %912, i64 noundef 8)
  store ptr %913, ptr %27, align 8, !tbaa !5
  %914 = load i32, ptr %28, align 4, !tbaa !9
  %915 = sub i32 %914, 1
  store i32 %915, ptr %19, align 4, !tbaa !9
  br label %916

916:                                              ; preds = %1024, %905
  %917 = load i32, ptr %19, align 4, !tbaa !9
  %918 = icmp sge i32 %917, 0
  br i1 %918, label %919, label %1027

919:                                              ; preds = %916
  %920 = load ptr, ptr %8, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.graph_s, ptr %920, i32 0, i32 47
  %922 = load ptr, ptr %921, align 8, !tbaa !74
  %923 = load i32, ptr %19, align 4, !tbaa !9
  %924 = sext i32 %923 to i64
  %925 = getelementptr inbounds %struct.nodepair_s, ptr %922, i64 %924
  %926 = getelementptr inbounds %struct.nodepair_s, ptr %925, i32 0, i32 0
  %927 = load i32, ptr %926, align 4, !tbaa !75
  store i32 %927, ptr %15, align 4, !tbaa !9
  %928 = load ptr, ptr %8, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.graph_s, ptr %928, i32 0, i32 47
  %930 = load ptr, ptr %929, align 8, !tbaa !74
  %931 = load i32, ptr %19, align 4, !tbaa !9
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds %struct.nodepair_s, ptr %930, i64 %932
  %934 = getelementptr inbounds %struct.nodepair_s, ptr %933, i32 0, i32 1
  %935 = load i32, ptr %934, align 4, !tbaa !77
  store i32 %935, ptr %17, align 4, !tbaa !9
  %936 = load ptr, ptr %8, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.graph_s, ptr %936, i32 0, i32 42
  %938 = load ptr, ptr %937, align 8, !tbaa !78
  %939 = load i32, ptr %15, align 4, !tbaa !9
  %940 = zext i32 %939 to i64
  %941 = getelementptr inbounds i32, ptr %938, i64 %940
  %942 = load i32, ptr %941, align 4, !tbaa !9
  %943 = load ptr, ptr %8, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.graph_s, ptr %943, i32 0, i32 43
  %945 = load i32, ptr %944, align 8, !tbaa !35
  %946 = icmp eq i32 %942, %945
  br i1 %946, label %947, label %948

947:                                              ; preds = %919
  br label %949

948:                                              ; preds = %919
  call void @__assert_fail(ptr noundef @.str.73, ptr noundef @.str.1, i32 noundef 887, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

949:                                              ; preds = %947
  %950 = load ptr, ptr %8, align 8, !tbaa !5
  %951 = load i32, ptr %15, align 4, !tbaa !9
  %952 = load i32, ptr %17, align 4, !tbaa !9
  %953 = call i32 @isArc(ptr noundef %950, i32 noundef %951, i32 noundef %952)
  %954 = icmp ne i32 %953, 0
  br i1 %954, label %955, label %956

955:                                              ; preds = %949
  br label %957

956:                                              ; preds = %949
  call void @__assert_fail(ptr noundef @.str.74, ptr noundef @.str.1, i32 noundef 888, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

957:                                              ; preds = %955
  %958 = load ptr, ptr %8, align 8, !tbaa !5
  %959 = load i32, ptr %15, align 4, !tbaa !9
  %960 = load i32, ptr %17, align 4, !tbaa !9
  %961 = load i32, ptr %19, align 4, !tbaa !9
  call void @removeArc_all_maxtermsender_arcs(ptr noundef %958, i32 noundef %959, i32 noundef %960, i32 noundef %961)
  %962 = load ptr, ptr %8, align 8, !tbaa !5
  %963 = load i32, ptr %15, align 4, !tbaa !9
  %964 = load i32, ptr %17, align 4, !tbaa !9
  %965 = load i32, ptr %13, align 4, !tbaa !9
  %966 = load i32, ptr %10, align 4, !tbaa !9
  %967 = load i32, ptr %11, align 4, !tbaa !9
  %968 = load i32, ptr %12, align 4, !tbaa !9
  %969 = load ptr, ptr %3, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.sim_config_s, ptr %969, i32 0, i32 25
  %971 = getelementptr inbounds %struct.param_config_s, ptr %970, i32 0, i32 1
  %972 = load ptr, ptr %971, align 8, !tbaa !63
  %973 = load ptr, ptr %3, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.sim_config_s, ptr %973, i32 0, i32 25
  %975 = getelementptr inbounds %struct.param_config_s, ptr %974, i32 0, i32 3
  %976 = load ptr, ptr %975, align 8, !tbaa !39
  %977 = load ptr, ptr %3, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.sim_config_s, ptr %977, i32 0, i32 25
  %979 = getelementptr inbounds %struct.param_config_s, ptr %978, i32 0, i32 6
  %980 = load ptr, ptr %979, align 8, !tbaa !64
  %981 = load ptr, ptr %3, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.sim_config_s, ptr %981, i32 0, i32 25
  %983 = getelementptr inbounds %struct.param_config_s, ptr %982, i32 0, i32 13
  %984 = load ptr, ptr %983, align 8, !tbaa !65
  %985 = load ptr, ptr %3, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.sim_config_s, ptr %985, i32 0, i32 25
  %987 = getelementptr inbounds %struct.param_config_s, ptr %986, i32 0, i32 20
  %988 = load ptr, ptr %987, align 8, !tbaa !66
  %989 = load ptr, ptr %3, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.sim_config_s, ptr %989, i32 0, i32 25
  %991 = getelementptr inbounds %struct.param_config_s, ptr %990, i32 0, i32 8
  %992 = load ptr, ptr %991, align 8, !tbaa !67
  %993 = load ptr, ptr %3, align 8, !tbaa !5
  %994 = getelementptr inbounds %struct.sim_config_s, ptr %993, i32 0, i32 25
  %995 = getelementptr inbounds %struct.param_config_s, ptr %994, i32 0, i32 10
  %996 = load ptr, ptr %995, align 8, !tbaa !44
  %997 = load ptr, ptr %3, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.sim_config_s, ptr %997, i32 0, i32 25
  %999 = getelementptr inbounds %struct.param_config_s, ptr %998, i32 0, i32 22
  %1000 = load ptr, ptr %999, align 8, !tbaa !68
  %1001 = load ptr, ptr %14, align 8, !tbaa !5
  %1002 = load ptr, ptr %27, align 8, !tbaa !5
  %1003 = call double @calcChangeStats(ptr noundef %962, i32 noundef %963, i32 noundef %964, i32 noundef %965, i32 noundef %966, i32 noundef %967, i32 noundef %968, ptr noundef %972, ptr noundef %976, ptr noundef %980, ptr noundef %984, ptr noundef %988, ptr noundef %992, ptr noundef %996, ptr noundef %1000, ptr noundef %1001, i32 noundef 1, ptr noundef %1002)
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %1004

1004:                                             ; preds = %1020, %957
  %1005 = load i32, ptr %18, align 4, !tbaa !9
  %1006 = load i32, ptr %13, align 4, !tbaa !9
  %1007 = icmp ult i32 %1005, %1006
  br i1 %1007, label %1008, label %1023

1008:                                             ; preds = %1004
  %1009 = load ptr, ptr %27, align 8, !tbaa !5
  %1010 = load i32, ptr %18, align 4, !tbaa !9
  %1011 = zext i32 %1010 to i64
  %1012 = getelementptr inbounds double, ptr %1009, i64 %1011
  %1013 = load double, ptr %1012, align 8, !tbaa !38
  %1014 = load ptr, ptr %24, align 8, !tbaa !5
  %1015 = load i32, ptr %18, align 4, !tbaa !9
  %1016 = zext i32 %1015 to i64
  %1017 = getelementptr inbounds double, ptr %1014, i64 %1016
  %1018 = load double, ptr %1017, align 8, !tbaa !38
  %1019 = fsub double %1018, %1013
  store double %1019, ptr %1017, align 8, !tbaa !38
  br label %1020

1020:                                             ; preds = %1008
  %1021 = load i32, ptr %18, align 4, !tbaa !9
  %1022 = add i32 %1021, 1
  store i32 %1022, ptr %18, align 4, !tbaa !9
  br label %1004, !llvm.loop !79

1023:                                             ; preds = %1004
  br label %1024

1024:                                             ; preds = %1023
  %1025 = load i32, ptr %19, align 4, !tbaa !9
  %1026 = add nsw i32 %1025, -1
  store i32 %1026, ptr %19, align 4, !tbaa !9
  br label %916, !llvm.loop !80

1027:                                             ; preds = %916
  %1028 = load ptr, ptr %8, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.graph_s, ptr %1028, i32 0, i32 46
  %1030 = load i32, ptr %1029, align 8, !tbaa !73
  %1031 = icmp eq i32 %1030, 0
  br i1 %1031, label %1032, label %1033

1032:                                             ; preds = %1027
  br label %1034

1033:                                             ; preds = %1027
  call void @__assert_fail(ptr noundef @.str.75, ptr noundef @.str.1, i32 noundef 916, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

1034:                                             ; preds = %1032
  %1035 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %1035) #8
  %1036 = load ptr, ptr %3, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.sim_config_s, ptr %1036, i32 0, i32 4
  %1038 = load i32, ptr %1037, align 8, !tbaa !58
  %1039 = icmp ne i32 %1038, 0
  br i1 %1039, label %1040, label %1108

1040:                                             ; preds = %1034
  %1041 = load ptr, ptr %3, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.sim_config_s, ptr %1041, i32 0, i32 23
  %1043 = load i32, ptr %1042, align 8, !tbaa !16
  %1044 = icmp ne i32 %1043, 0
  br i1 %1044, label %1046, label %1045

1045:                                             ; preds = %1040
  br label %1047

1046:                                             ; preds = %1040
  call void @__assert_fail(ptr noundef @.str.76, ptr noundef @.str.1, i32 noundef 919, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

1047:                                             ; preds = %1045
  %1048 = load ptr, ptr %8, align 8, !tbaa !5
  %1049 = load i32, ptr %28, align 4, !tbaa !9
  %1050 = load i32, ptr %13, align 4, !tbaa !9
  %1051 = load i32, ptr %10, align 4, !tbaa !9
  %1052 = load i32, ptr %11, align 4, !tbaa !9
  %1053 = load i32, ptr %12, align 4, !tbaa !9
  %1054 = load ptr, ptr %3, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.sim_config_s, ptr %1054, i32 0, i32 25
  %1056 = getelementptr inbounds %struct.param_config_s, ptr %1055, i32 0, i32 1
  %1057 = load ptr, ptr %1056, align 8, !tbaa !63
  %1058 = load ptr, ptr %3, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.sim_config_s, ptr %1058, i32 0, i32 25
  %1060 = getelementptr inbounds %struct.param_config_s, ptr %1059, i32 0, i32 3
  %1061 = load ptr, ptr %1060, align 8, !tbaa !39
  %1062 = load ptr, ptr %3, align 8, !tbaa !5
  %1063 = getelementptr inbounds %struct.sim_config_s, ptr %1062, i32 0, i32 25
  %1064 = getelementptr inbounds %struct.param_config_s, ptr %1063, i32 0, i32 6
  %1065 = load ptr, ptr %1064, align 8, !tbaa !64
  %1066 = load ptr, ptr %3, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.sim_config_s, ptr %1066, i32 0, i32 25
  %1068 = getelementptr inbounds %struct.param_config_s, ptr %1067, i32 0, i32 13
  %1069 = load ptr, ptr %1068, align 8, !tbaa !65
  %1070 = load ptr, ptr %3, align 8, !tbaa !5
  %1071 = getelementptr inbounds %struct.sim_config_s, ptr %1070, i32 0, i32 25
  %1072 = getelementptr inbounds %struct.param_config_s, ptr %1071, i32 0, i32 20
  %1073 = load ptr, ptr %1072, align 8, !tbaa !66
  %1074 = load ptr, ptr %3, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.sim_config_s, ptr %1074, i32 0, i32 25
  %1076 = getelementptr inbounds %struct.param_config_s, ptr %1075, i32 0, i32 8
  %1077 = load ptr, ptr %1076, align 8, !tbaa !67
  %1078 = load ptr, ptr %3, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.sim_config_s, ptr %1078, i32 0, i32 25
  %1080 = getelementptr inbounds %struct.param_config_s, ptr %1079, i32 0, i32 10
  %1081 = load ptr, ptr %1080, align 8, !tbaa !44
  %1082 = load ptr, ptr %3, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.sim_config_s, ptr %1082, i32 0, i32 25
  %1084 = getelementptr inbounds %struct.param_config_s, ptr %1083, i32 0, i32 22
  %1085 = load ptr, ptr %1084, align 8, !tbaa !68
  %1086 = load ptr, ptr %3, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.sim_config_s, ptr %1086, i32 0, i32 15
  %1088 = load i32, ptr %1087, align 8, !tbaa !19
  %1089 = load ptr, ptr %3, align 8, !tbaa !5
  %1090 = getelementptr inbounds %struct.sim_config_s, ptr %1089, i32 0, i32 16
  %1091 = load i32, ptr %1090, align 4, !tbaa !36
  %1092 = load ptr, ptr %24, align 8, !tbaa !5
  %1093 = load ptr, ptr %14, align 8, !tbaa !5
  %1094 = load ptr, ptr %3, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.sim_config_s, ptr %1094, i32 0, i32 19
  %1096 = load i32, ptr %1095, align 8, !tbaa !34
  %1097 = load ptr, ptr %3, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.sim_config_s, ptr %1097, i32 0, i32 21
  %1099 = load i32, ptr %1098, align 8, !tbaa !17
  call void @make_erdos_renyi_digraph(ptr noundef %1048, i32 noundef %1049, i32 noundef %1050, i32 noundef %1051, i32 noundef %1052, i32 noundef %1053, ptr noundef %1057, ptr noundef %1061, ptr noundef %1065, ptr noundef %1069, ptr noundef %1073, ptr noundef %1077, ptr noundef %1081, ptr noundef %1085, i32 noundef %1088, i32 noundef %1091, ptr noundef %1092, ptr noundef %1093, i32 noundef %1096, i32 noundef %1099)
  %1100 = load ptr, ptr %8, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.graph_s, ptr %1100, i32 0, i32 46
  %1102 = load i32, ptr %1101, align 8, !tbaa !73
  %1103 = load i32, ptr %28, align 4, !tbaa !9
  %1104 = icmp eq i32 %1102, %1103
  br i1 %1104, label %1105, label %1106

1105:                                             ; preds = %1047
  br label %1107

1106:                                             ; preds = %1047
  call void @__assert_fail(ptr noundef @.str.77, ptr noundef @.str.1, i32 noundef 941, ptr noundef @__PRETTY_FUNCTION__.do_simulation) #10
  unreachable

1107:                                             ; preds = %1105
  br label %1108

1108:                                             ; preds = %1107, %1034
  br label %1182

1109:                                             ; preds = %716
  %1110 = load ptr, ptr %3, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.sim_config_s, ptr %1110, i32 0, i32 4
  %1112 = load i32, ptr %1111, align 8, !tbaa !58
  %1113 = icmp ne i32 %1112, 0
  br i1 %1113, label %1114, label %1169

1114:                                             ; preds = %1109
  %1115 = load ptr, ptr %8, align 8, !tbaa !5
  %1116 = load ptr, ptr %3, align 8, !tbaa !5
  %1117 = getelementptr inbounds %struct.sim_config_s, ptr %1116, i32 0, i32 17
  %1118 = load i32, ptr %1117, align 8, !tbaa !61
  %1119 = load i32, ptr %13, align 4, !tbaa !9
  %1120 = load i32, ptr %10, align 4, !tbaa !9
  %1121 = load i32, ptr %11, align 4, !tbaa !9
  %1122 = load i32, ptr %12, align 4, !tbaa !9
  %1123 = load ptr, ptr %3, align 8, !tbaa !5
  %1124 = getelementptr inbounds %struct.sim_config_s, ptr %1123, i32 0, i32 25
  %1125 = getelementptr inbounds %struct.param_config_s, ptr %1124, i32 0, i32 1
  %1126 = load ptr, ptr %1125, align 8, !tbaa !63
  %1127 = load ptr, ptr %3, align 8, !tbaa !5
  %1128 = getelementptr inbounds %struct.sim_config_s, ptr %1127, i32 0, i32 25
  %1129 = getelementptr inbounds %struct.param_config_s, ptr %1128, i32 0, i32 3
  %1130 = load ptr, ptr %1129, align 8, !tbaa !39
  %1131 = load ptr, ptr %3, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.sim_config_s, ptr %1131, i32 0, i32 25
  %1133 = getelementptr inbounds %struct.param_config_s, ptr %1132, i32 0, i32 6
  %1134 = load ptr, ptr %1133, align 8, !tbaa !64
  %1135 = load ptr, ptr %3, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.sim_config_s, ptr %1135, i32 0, i32 25
  %1137 = getelementptr inbounds %struct.param_config_s, ptr %1136, i32 0, i32 13
  %1138 = load ptr, ptr %1137, align 8, !tbaa !65
  %1139 = load ptr, ptr %3, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.sim_config_s, ptr %1139, i32 0, i32 25
  %1141 = getelementptr inbounds %struct.param_config_s, ptr %1140, i32 0, i32 20
  %1142 = load ptr, ptr %1141, align 8, !tbaa !66
  %1143 = load ptr, ptr %3, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.sim_config_s, ptr %1143, i32 0, i32 25
  %1145 = getelementptr inbounds %struct.param_config_s, ptr %1144, i32 0, i32 8
  %1146 = load ptr, ptr %1145, align 8, !tbaa !67
  %1147 = load ptr, ptr %3, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.sim_config_s, ptr %1147, i32 0, i32 25
  %1149 = getelementptr inbounds %struct.param_config_s, ptr %1148, i32 0, i32 10
  %1150 = load ptr, ptr %1149, align 8, !tbaa !44
  %1151 = load ptr, ptr %3, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.sim_config_s, ptr %1151, i32 0, i32 25
  %1153 = getelementptr inbounds %struct.param_config_s, ptr %1152, i32 0, i32 22
  %1154 = load ptr, ptr %1153, align 8, !tbaa !68
  %1155 = load ptr, ptr %3, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.sim_config_s, ptr %1155, i32 0, i32 15
  %1157 = load i32, ptr %1156, align 8, !tbaa !19
  %1158 = load ptr, ptr %3, align 8, !tbaa !5
  %1159 = getelementptr inbounds %struct.sim_config_s, ptr %1158, i32 0, i32 16
  %1160 = load i32, ptr %1159, align 4, !tbaa !36
  %1161 = load ptr, ptr %24, align 8, !tbaa !5
  %1162 = load ptr, ptr %14, align 8, !tbaa !5
  %1163 = load ptr, ptr %3, align 8, !tbaa !5
  %1164 = getelementptr inbounds %struct.sim_config_s, ptr %1163, i32 0, i32 19
  %1165 = load i32, ptr %1164, align 8, !tbaa !34
  %1166 = load ptr, ptr %3, align 8, !tbaa !5
  %1167 = getelementptr inbounds %struct.sim_config_s, ptr %1166, i32 0, i32 21
  %1168 = load i32, ptr %1167, align 8, !tbaa !17
  call void @make_erdos_renyi_digraph(ptr noundef %1115, i32 noundef %1118, i32 noundef %1119, i32 noundef %1120, i32 noundef %1121, i32 noundef %1122, ptr noundef %1126, ptr noundef %1130, ptr noundef %1134, ptr noundef %1138, ptr noundef %1142, ptr noundef %1146, ptr noundef %1150, ptr noundef %1154, i32 noundef %1157, i32 noundef %1160, ptr noundef %1161, ptr noundef %1162, i32 noundef %1165, i32 noundef %1168)
  br label %1181

1169:                                             ; preds = %1109
  %1170 = load ptr, ptr %3, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.sim_config_s, ptr %1170, i32 0, i32 17
  %1172 = load i32, ptr %1171, align 8, !tbaa !61
  %1173 = icmp ne i32 %1172, 0
  br i1 %1173, label %1174, label %1180

1174:                                             ; preds = %1169
  %1175 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1176 = load ptr, ptr %3, align 8, !tbaa !5
  %1177 = getelementptr inbounds %struct.sim_config_s, ptr %1176, i32 0, i32 17
  %1178 = load i32, ptr %1177, align 8, !tbaa !61
  %1179 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1175, ptr noundef @.str.78, i32 noundef %1178) #8
  br label %1180

1180:                                             ; preds = %1174, %1169
  br label %1181

1181:                                             ; preds = %1180, %1114
  br label %1182

1182:                                             ; preds = %1181, %1108
  %1183 = load ptr, ptr %3, align 8, !tbaa !5
  %1184 = getelementptr inbounds %struct.sim_config_s, ptr %1183, i32 0, i32 12
  %1185 = load ptr, ptr %1184, align 8, !tbaa !11
  %1186 = call noalias ptr @fopen(ptr noundef %1185, ptr noundef @.str.24)
  store ptr %1186, ptr %20, align 8, !tbaa !5
  %1187 = icmp ne ptr %1186, null
  br i1 %1187, label %1197, label %1188

1188:                                             ; preds = %1182
  %1189 = load ptr, ptr @stderr, align 8, !tbaa !5
  %1190 = load ptr, ptr %3, align 8, !tbaa !5
  %1191 = getelementptr inbounds %struct.sim_config_s, ptr %1190, i32 0, i32 12
  %1192 = load ptr, ptr %1191, align 8, !tbaa !11
  %1193 = call ptr @__errno_location() #11
  %1194 = load i32, ptr %1193, align 4, !tbaa !9
  %1195 = call ptr @strerror(i32 noundef %1194) #8
  %1196 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1189, ptr noundef @.str.79, ptr noundef %1192, ptr noundef %1195) #8
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

1197:                                             ; preds = %1182
  %1198 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1199 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %1198, ptr noundef @.str.80) #8
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1200

1200:                                             ; preds = %1254, %1197
  %1201 = load i32, ptr %15, align 4, !tbaa !9
  %1202 = load ptr, ptr %3, align 8, !tbaa !5
  %1203 = getelementptr inbounds %struct.sim_config_s, ptr %1202, i32 0, i32 25
  %1204 = getelementptr inbounds %struct.param_config_s, ptr %1203, i32 0, i32 0
  %1205 = load i32, ptr %1204, align 8, !tbaa !28
  %1206 = icmp ult i32 %1201, %1205
  br i1 %1206, label %1207, label %1257

1207:                                             ; preds = %1200
  %1208 = load ptr, ptr %3, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct.sim_config_s, ptr %1208, i32 0, i32 25
  %1210 = getelementptr inbounds %struct.param_config_s, ptr %1209, i32 0, i32 3
  %1211 = load ptr, ptr %1210, align 8, !tbaa !39
  %1212 = load i32, ptr %15, align 4, !tbaa !9
  %1213 = zext i32 %1212 to i64
  %1214 = getelementptr inbounds double, ptr %1211, i64 %1213
  %1215 = load double, ptr %1214, align 8, !tbaa !38
  %1216 = fcmp ogt double %1215, 0.000000e+00
  br i1 %1216, label %1217, label %1239

1217:                                             ; preds = %1207
  %1218 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1219 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1220 = call i64 @strlen(ptr noundef %1219) #9
  %1221 = getelementptr inbounds i8, ptr %1218, i64 %1220
  %1222 = load ptr, ptr %3, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.sim_config_s, ptr %1222, i32 0, i32 25
  %1224 = getelementptr inbounds %struct.param_config_s, ptr %1223, i32 0, i32 2
  %1225 = load ptr, ptr %1224, align 8, !tbaa !40
  %1226 = load i32, ptr %15, align 4, !tbaa !9
  %1227 = zext i32 %1226 to i64
  %1228 = getelementptr inbounds ptr, ptr %1225, i64 %1227
  %1229 = load ptr, ptr %1228, align 8, !tbaa !5
  %1230 = load ptr, ptr %3, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.sim_config_s, ptr %1230, i32 0, i32 25
  %1232 = getelementptr inbounds %struct.param_config_s, ptr %1231, i32 0, i32 3
  %1233 = load ptr, ptr %1232, align 8, !tbaa !39
  %1234 = load i32, ptr %15, align 4, !tbaa !9
  %1235 = zext i32 %1234 to i64
  %1236 = getelementptr inbounds double, ptr %1233, i64 %1235
  %1237 = load double, ptr %1236, align 8, !tbaa !38
  %1238 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1221, i64 noundef 65536, ptr noundef @.str.81, ptr noundef %1229, double noundef %1237) #8
  br label %1253

1239:                                             ; preds = %1207
  %1240 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1241 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1242 = call i64 @strlen(ptr noundef %1241) #9
  %1243 = getelementptr inbounds i8, ptr %1240, i64 %1242
  %1244 = load ptr, ptr %3, align 8, !tbaa !5
  %1245 = getelementptr inbounds %struct.sim_config_s, ptr %1244, i32 0, i32 25
  %1246 = getelementptr inbounds %struct.param_config_s, ptr %1245, i32 0, i32 2
  %1247 = load ptr, ptr %1246, align 8, !tbaa !40
  %1248 = load i32, ptr %15, align 4, !tbaa !9
  %1249 = zext i32 %1248 to i64
  %1250 = getelementptr inbounds ptr, ptr %1247, i64 %1249
  %1251 = load ptr, ptr %1250, align 8, !tbaa !5
  %1252 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1243, i64 noundef 65536, ptr noundef @.str.82, ptr noundef %1251) #8
  br label %1253

1253:                                             ; preds = %1239, %1217
  br label %1254

1254:                                             ; preds = %1253
  %1255 = load i32, ptr %15, align 4, !tbaa !9
  %1256 = add i32 %1255, 1
  store i32 %1256, ptr %15, align 4, !tbaa !9
  br label %1200, !llvm.loop !81

1257:                                             ; preds = %1200
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1258

1258:                                             ; preds = %1328, %1257
  %1259 = load i32, ptr %15, align 4, !tbaa !9
  %1260 = load ptr, ptr %3, align 8, !tbaa !5
  %1261 = getelementptr inbounds %struct.sim_config_s, ptr %1260, i32 0, i32 25
  %1262 = getelementptr inbounds %struct.param_config_s, ptr %1261, i32 0, i32 5
  %1263 = load i32, ptr %1262, align 8, !tbaa !29
  %1264 = icmp ult i32 %1259, %1263
  br i1 %1264, label %1265, label %1331

1265:                                             ; preds = %1258
  %1266 = load ptr, ptr %3, align 8, !tbaa !5
  %1267 = getelementptr inbounds %struct.sim_config_s, ptr %1266, i32 0, i32 25
  %1268 = getelementptr inbounds %struct.param_config_s, ptr %1267, i32 0, i32 10
  %1269 = load ptr, ptr %1268, align 8, !tbaa !44
  %1270 = load i32, ptr %15, align 4, !tbaa !9
  %1271 = zext i32 %1270 to i64
  %1272 = getelementptr inbounds double, ptr %1269, i64 %1271
  %1273 = load double, ptr %1272, align 8, !tbaa !38
  %1274 = fcmp oge double %1273, 0.000000e+00
  br i1 %1274, label %1275, label %1305

1275:                                             ; preds = %1265
  %1276 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1277 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1278 = call i64 @strlen(ptr noundef %1277) #9
  %1279 = getelementptr inbounds i8, ptr %1276, i64 %1278
  %1280 = load ptr, ptr %3, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct.sim_config_s, ptr %1280, i32 0, i32 25
  %1282 = getelementptr inbounds %struct.param_config_s, ptr %1281, i32 0, i32 9
  %1283 = load ptr, ptr %1282, align 8, !tbaa !45
  %1284 = load i32, ptr %15, align 4, !tbaa !9
  %1285 = zext i32 %1284 to i64
  %1286 = getelementptr inbounds ptr, ptr %1283, i64 %1285
  %1287 = load ptr, ptr %1286, align 8, !tbaa !5
  %1288 = load ptr, ptr %3, align 8, !tbaa !5
  %1289 = getelementptr inbounds %struct.sim_config_s, ptr %1288, i32 0, i32 25
  %1290 = getelementptr inbounds %struct.param_config_s, ptr %1289, i32 0, i32 7
  %1291 = load ptr, ptr %1290, align 8, !tbaa !46
  %1292 = load i32, ptr %15, align 4, !tbaa !9
  %1293 = zext i32 %1292 to i64
  %1294 = getelementptr inbounds ptr, ptr %1291, i64 %1293
  %1295 = load ptr, ptr %1294, align 8, !tbaa !5
  %1296 = load ptr, ptr %3, align 8, !tbaa !5
  %1297 = getelementptr inbounds %struct.sim_config_s, ptr %1296, i32 0, i32 25
  %1298 = getelementptr inbounds %struct.param_config_s, ptr %1297, i32 0, i32 10
  %1299 = load ptr, ptr %1298, align 8, !tbaa !44
  %1300 = load i32, ptr %15, align 4, !tbaa !9
  %1301 = zext i32 %1300 to i64
  %1302 = getelementptr inbounds double, ptr %1299, i64 %1301
  %1303 = load double, ptr %1302, align 8, !tbaa !38
  %1304 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1279, i64 noundef 65536, ptr noundef @.str.83, ptr noundef %1287, ptr noundef %1295, double noundef %1303) #8
  br label %1327

1305:                                             ; preds = %1265
  %1306 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1307 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1308 = call i64 @strlen(ptr noundef %1307) #9
  %1309 = getelementptr inbounds i8, ptr %1306, i64 %1308
  %1310 = load ptr, ptr %3, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct.sim_config_s, ptr %1310, i32 0, i32 25
  %1312 = getelementptr inbounds %struct.param_config_s, ptr %1311, i32 0, i32 9
  %1313 = load ptr, ptr %1312, align 8, !tbaa !45
  %1314 = load i32, ptr %15, align 4, !tbaa !9
  %1315 = zext i32 %1314 to i64
  %1316 = getelementptr inbounds ptr, ptr %1313, i64 %1315
  %1317 = load ptr, ptr %1316, align 8, !tbaa !5
  %1318 = load ptr, ptr %3, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.sim_config_s, ptr %1318, i32 0, i32 25
  %1320 = getelementptr inbounds %struct.param_config_s, ptr %1319, i32 0, i32 7
  %1321 = load ptr, ptr %1320, align 8, !tbaa !46
  %1322 = load i32, ptr %15, align 4, !tbaa !9
  %1323 = zext i32 %1322 to i64
  %1324 = getelementptr inbounds ptr, ptr %1321, i64 %1323
  %1325 = load ptr, ptr %1324, align 8, !tbaa !5
  %1326 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1309, i64 noundef 65536, ptr noundef @.str.84, ptr noundef %1317, ptr noundef %1325) #8
  br label %1327

1327:                                             ; preds = %1305, %1275
  br label %1328

1328:                                             ; preds = %1327
  %1329 = load i32, ptr %15, align 4, !tbaa !9
  %1330 = add i32 %1329, 1
  store i32 %1330, ptr %15, align 4, !tbaa !9
  br label %1258, !llvm.loop !82

1331:                                             ; preds = %1258
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1332

1332:                                             ; preds = %1353, %1331
  %1333 = load i32, ptr %15, align 4, !tbaa !9
  %1334 = load ptr, ptr %3, align 8, !tbaa !5
  %1335 = getelementptr inbounds %struct.sim_config_s, ptr %1334, i32 0, i32 25
  %1336 = getelementptr inbounds %struct.param_config_s, ptr %1335, i32 0, i32 12
  %1337 = load i32, ptr %1336, align 8, !tbaa !30
  %1338 = icmp ult i32 %1333, %1337
  br i1 %1338, label %1339, label %1356

1339:                                             ; preds = %1332
  %1340 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1341 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1342 = call i64 @strlen(ptr noundef %1341) #9
  %1343 = getelementptr inbounds i8, ptr %1340, i64 %1342
  %1344 = load ptr, ptr %3, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct.sim_config_s, ptr %1344, i32 0, i32 25
  %1346 = getelementptr inbounds %struct.param_config_s, ptr %1345, i32 0, i32 17
  %1347 = load ptr, ptr %1346, align 8, !tbaa !49
  %1348 = load i32, ptr %15, align 4, !tbaa !9
  %1349 = zext i32 %1348 to i64
  %1350 = getelementptr inbounds ptr, ptr %1347, i64 %1349
  %1351 = load ptr, ptr %1350, align 8, !tbaa !5
  %1352 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1343, i64 noundef 65536, ptr noundef @.str.82, ptr noundef %1351) #8
  br label %1353

1353:                                             ; preds = %1339
  %1354 = load i32, ptr %15, align 4, !tbaa !9
  %1355 = add i32 %1354, 1
  store i32 %1355, ptr %15, align 4, !tbaa !9
  br label %1332, !llvm.loop !83

1356:                                             ; preds = %1332
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %1357

1357:                                             ; preds = %1396, %1356
  %1358 = load i32, ptr %15, align 4, !tbaa !9
  %1359 = load ptr, ptr %3, align 8, !tbaa !5
  %1360 = getelementptr inbounds %struct.sim_config_s, ptr %1359, i32 0, i32 25
  %1361 = getelementptr inbounds %struct.param_config_s, ptr %1360, i32 0, i32 19
  %1362 = load i32, ptr %1361, align 8, !tbaa !31
  %1363 = icmp ult i32 %1358, %1362
  br i1 %1363, label %1364, label %1399

1364:                                             ; preds = %1357
  %1365 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1366 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1367 = call i64 @strlen(ptr noundef %1366) #9
  %1368 = getelementptr inbounds i8, ptr %1365, i64 %1367
  %1369 = load ptr, ptr %3, align 8, !tbaa !5
  %1370 = getelementptr inbounds %struct.sim_config_s, ptr %1369, i32 0, i32 25
  %1371 = getelementptr inbounds %struct.param_config_s, ptr %1370, i32 0, i32 23
  %1372 = load ptr, ptr %1371, align 8, !tbaa !52
  %1373 = load i32, ptr %15, align 4, !tbaa !9
  %1374 = zext i32 %1373 to i64
  %1375 = getelementptr inbounds ptr, ptr %1372, i64 %1374
  %1376 = load ptr, ptr %1375, align 8, !tbaa !5
  %1377 = load ptr, ptr %3, align 8, !tbaa !5
  %1378 = getelementptr inbounds %struct.sim_config_s, ptr %1377, i32 0, i32 25
  %1379 = getelementptr inbounds %struct.param_config_s, ptr %1378, i32 0, i32 21
  %1380 = load ptr, ptr %1379, align 8, !tbaa !53
  %1381 = load i32, ptr %15, align 4, !tbaa !9
  %1382 = zext i32 %1381 to i64
  %1383 = getelementptr inbounds %struct.string_pair_s, ptr %1380, i64 %1382
  %1384 = getelementptr inbounds %struct.string_pair_s, ptr %1383, i32 0, i32 0
  %1385 = load ptr, ptr %1384, align 8, !tbaa !54
  %1386 = load ptr, ptr %3, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.sim_config_s, ptr %1386, i32 0, i32 25
  %1388 = getelementptr inbounds %struct.param_config_s, ptr %1387, i32 0, i32 21
  %1389 = load ptr, ptr %1388, align 8, !tbaa !53
  %1390 = load i32, ptr %15, align 4, !tbaa !9
  %1391 = zext i32 %1390 to i64
  %1392 = getelementptr inbounds %struct.string_pair_s, ptr %1389, i64 %1391
  %1393 = getelementptr inbounds %struct.string_pair_s, ptr %1392, i32 0, i32 1
  %1394 = load ptr, ptr %1393, align 8, !tbaa !56
  %1395 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %1368, i64 noundef 65536, ptr noundef @.str.85, ptr noundef %1376, ptr noundef %1385, ptr noundef %1394) #8
  br label %1396

1396:                                             ; preds = %1364
  %1397 = load i32, ptr %15, align 4, !tbaa !9
  %1398 = add i32 %1397, 1
  store i32 %1398, ptr %15, align 4, !tbaa !9
  br label %1357, !llvm.loop !84

1399:                                             ; preds = %1357
  %1400 = load ptr, ptr %20, align 8, !tbaa !5
  %1401 = getelementptr inbounds [65536 x i8], ptr %21, i64 0, i64 0
  %1402 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1400, ptr noundef @.str.86, ptr noundef %1401) #8
  %1403 = load ptr, ptr %8, align 8, !tbaa !5
  %1404 = load ptr, ptr %3, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct.sim_config_s, ptr %1404, i32 0, i32 21
  %1406 = load i32, ptr %1405, align 8, !tbaa !17
  call void @print_data_summary(ptr noundef %1403, i32 noundef %1406)
  %1407 = load ptr, ptr %8, align 8, !tbaa !5
  call void @print_zone_summary(ptr noundef %1407)
  %1408 = load ptr, ptr %8, align 8, !tbaa !5
  call void @print_term_summary(ptr noundef %1408)
  %1409 = call i32 (ptr, ...) @printf(ptr noundef @.str.87)
  %1410 = call i32 @gettimeofday(ptr noundef %4, ptr noundef null) #8
  %1411 = load ptr, ptr %8, align 8, !tbaa !5
  %1412 = load i32, ptr %13, align 4, !tbaa !9
  %1413 = load i32, ptr %10, align 4, !tbaa !9
  %1414 = load i32, ptr %11, align 4, !tbaa !9
  %1415 = load i32, ptr %12, align 4, !tbaa !9
  %1416 = load ptr, ptr %3, align 8, !tbaa !5
  %1417 = getelementptr inbounds %struct.sim_config_s, ptr %1416, i32 0, i32 25
  %1418 = getelementptr inbounds %struct.param_config_s, ptr %1417, i32 0, i32 1
  %1419 = load ptr, ptr %1418, align 8, !tbaa !63
  %1420 = load ptr, ptr %3, align 8, !tbaa !5
  %1421 = getelementptr inbounds %struct.sim_config_s, ptr %1420, i32 0, i32 25
  %1422 = getelementptr inbounds %struct.param_config_s, ptr %1421, i32 0, i32 3
  %1423 = load ptr, ptr %1422, align 8, !tbaa !39
  %1424 = load ptr, ptr %3, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct.sim_config_s, ptr %1424, i32 0, i32 25
  %1426 = getelementptr inbounds %struct.param_config_s, ptr %1425, i32 0, i32 6
  %1427 = load ptr, ptr %1426, align 8, !tbaa !64
  %1428 = load ptr, ptr %3, align 8, !tbaa !5
  %1429 = getelementptr inbounds %struct.sim_config_s, ptr %1428, i32 0, i32 25
  %1430 = getelementptr inbounds %struct.param_config_s, ptr %1429, i32 0, i32 13
  %1431 = load ptr, ptr %1430, align 8, !tbaa !65
  %1432 = load ptr, ptr %3, align 8, !tbaa !5
  %1433 = getelementptr inbounds %struct.sim_config_s, ptr %1432, i32 0, i32 25
  %1434 = getelementptr inbounds %struct.param_config_s, ptr %1433, i32 0, i32 20
  %1435 = load ptr, ptr %1434, align 8, !tbaa !66
  %1436 = load ptr, ptr %3, align 8, !tbaa !5
  %1437 = getelementptr inbounds %struct.sim_config_s, ptr %1436, i32 0, i32 25
  %1438 = getelementptr inbounds %struct.param_config_s, ptr %1437, i32 0, i32 8
  %1439 = load ptr, ptr %1438, align 8, !tbaa !67
  %1440 = load ptr, ptr %3, align 8, !tbaa !5
  %1441 = getelementptr inbounds %struct.sim_config_s, ptr %1440, i32 0, i32 25
  %1442 = getelementptr inbounds %struct.param_config_s, ptr %1441, i32 0, i32 10
  %1443 = load ptr, ptr %1442, align 8, !tbaa !44
  %1444 = load ptr, ptr %3, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.sim_config_s, ptr %1444, i32 0, i32 25
  %1446 = getelementptr inbounds %struct.param_config_s, ptr %1445, i32 0, i32 22
  %1447 = load ptr, ptr %1446, align 8, !tbaa !68
  %1448 = load ptr, ptr %3, align 8, !tbaa !5
  %1449 = getelementptr inbounds %struct.sim_config_s, ptr %1448, i32 0, i32 1
  %1450 = load i32, ptr %1449, align 4, !tbaa !85
  %1451 = load ptr, ptr %3, align 8, !tbaa !5
  %1452 = getelementptr inbounds %struct.sim_config_s, ptr %1451, i32 0, i32 2
  %1453 = load i64, ptr %1452, align 8, !tbaa !86
  %1454 = load ptr, ptr %3, align 8, !tbaa !5
  %1455 = getelementptr inbounds %struct.sim_config_s, ptr %1454, i32 0, i32 3
  %1456 = load i64, ptr %1455, align 8, !tbaa !87
  %1457 = load ptr, ptr %14, align 8, !tbaa !5
  %1458 = load ptr, ptr %3, align 8, !tbaa !5
  %1459 = getelementptr inbounds %struct.sim_config_s, ptr %1458, i32 0, i32 4
  %1460 = load i32, ptr %1459, align 8, !tbaa !58
  %1461 = load ptr, ptr %3, align 8, !tbaa !5
  %1462 = getelementptr inbounds %struct.sim_config_s, ptr %1461, i32 0, i32 6
  %1463 = load double, ptr %1462, align 8, !tbaa !62
  %1464 = load ptr, ptr %3, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct.sim_config_s, ptr %1464, i32 0, i32 15
  %1466 = load i32, ptr %1465, align 8, !tbaa !19
  %1467 = load ptr, ptr %3, align 8, !tbaa !5
  %1468 = getelementptr inbounds %struct.sim_config_s, ptr %1467, i32 0, i32 16
  %1469 = load i32, ptr %1468, align 4, !tbaa !36
  %1470 = load ptr, ptr %3, align 8, !tbaa !5
  %1471 = getelementptr inbounds %struct.sim_config_s, ptr %1470, i32 0, i32 13
  %1472 = load ptr, ptr %1471, align 8, !tbaa !88
  %1473 = load ptr, ptr %20, align 8, !tbaa !5
  %1474 = load ptr, ptr %3, align 8, !tbaa !5
  %1475 = getelementptr inbounds %struct.sim_config_s, ptr %1474, i32 0, i32 7
  %1476 = load i32, ptr %1475, align 8, !tbaa !89
  %1477 = load i32, ptr %23, align 4, !tbaa !9
  %1478 = load ptr, ptr %24, align 8, !tbaa !5
  %1479 = load ptr, ptr %3, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.sim_config_s, ptr %1479, i32 0, i32 5
  %1481 = load i32, ptr %1480, align 4, !tbaa !59
  %1482 = load ptr, ptr %3, align 8, !tbaa !5
  %1483 = getelementptr inbounds %struct.sim_config_s, ptr %1482, i32 0, i32 19
  %1484 = load i32, ptr %1483, align 8, !tbaa !34
  %1485 = load ptr, ptr %3, align 8, !tbaa !5
  %1486 = getelementptr inbounds %struct.sim_config_s, ptr %1485, i32 0, i32 21
  %1487 = load i32, ptr %1486, align 8, !tbaa !17
  %1488 = call i32 @simulate_ergm(ptr noundef %1411, i32 noundef %1412, i32 noundef %1413, i32 noundef %1414, i32 noundef %1415, ptr noundef %1419, ptr noundef %1423, ptr noundef %1427, ptr noundef %1431, ptr noundef %1435, ptr noundef %1439, ptr noundef %1443, ptr noundef %1447, i32 noundef %1450, i64 noundef %1453, i64 noundef %1456, ptr noundef %1457, i32 noundef %1460, double noundef %1463, i32 noundef %1466, i32 noundef %1469, ptr noundef %1472, ptr noundef %1473, i32 noundef %1476, i32 noundef %1477, ptr noundef %1478, i32 noundef %1481, i32 noundef %1484, i32 noundef %1487)
  %1489 = call i32 @gettimeofday(ptr noundef %5, ptr noundef null) #8
  %1490 = call i32 @timeval_subtract(ptr noundef %6, ptr noundef %5, ptr noundef %4)
  %1491 = getelementptr inbounds %struct.timeval, ptr %6, i32 0, i32 0
  %1492 = load i64, ptr %1491, align 8, !tbaa !90
  %1493 = mul nsw i64 1000, %1492
  %1494 = getelementptr inbounds %struct.timeval, ptr %6, i32 0, i32 1
  %1495 = load i64, ptr %1494, align 8, !tbaa !92
  %1496 = sdiv i64 %1495, 1000
  %1497 = add nsw i64 %1493, %1496
  %1498 = trunc i64 %1497 to i32
  store i32 %1498, ptr %7, align 4, !tbaa !9
  %1499 = load i32, ptr %7, align 4, !tbaa !9
  %1500 = sitofp i32 %1499 to double
  %1501 = fdiv double %1500, 1.000000e+03
  %1502 = call i32 (ptr, ...) @printf(ptr noundef @.str.88, double noundef %1501)
  %1503 = load ptr, ptr %20, align 8, !tbaa !5
  %1504 = call i32 @fclose(ptr noundef %1503)
  %1505 = load ptr, ptr %8, align 8, !tbaa !5
  %1506 = load ptr, ptr %3, align 8, !tbaa !5
  %1507 = getelementptr inbounds %struct.sim_config_s, ptr %1506, i32 0, i32 21
  %1508 = load i32, ptr %1507, align 8, !tbaa !17
  call void @print_data_summary(ptr noundef %1505, i32 noundef %1508)
  %1509 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %1509) #8
  %1510 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %1510) #8
  %1511 = load ptr, ptr %8, align 8, !tbaa !5
  call void @free_graph(ptr noundef %1511)
  store i32 0, ptr %2, align 4
  store i32 1, ptr %30, align 4
  br label %1512

1512:                                             ; preds = %1399, %1188, %899, %835, %819, %791, %782, %694, %685, %671, %628, %348, %334, %326, %318, %304, %296, %288, %280, %272, %249, %241, %205, %196, %187, %178, %165, %146, %131, %98, %83, %72, %64, %56, %48, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 65536, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %4) #8
  %1513 = load i32, ptr %2, align 4
  ret i32 %1513
}

declare ptr @allocate_graph(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare i32 @load_attributes(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @add_snowball_zones_to_graph(ptr noundef, ptr noundef) #3

declare i32 @add_cergm_terms_to_digraph(ptr noundef, ptr noundef) #3

declare i32 @check_param_network_type(ptr noundef, ptr noundef) #3

declare i32 @build_attr_indices_from_names(ptr noundef, ptr noundef) #3

declare i32 @build_dyadic_indices_from_names(ptr noundef, ptr noundef, i32 noundef) #3

declare i32 @build_attr_interaction_pair_indices_from_names(ptr noundef, ptr noundef) #3

declare ptr @safe_calloc(i64 noundef, i64 noundef) #3

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

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

declare ptr @empty_graph_stats(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #4

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #7

declare i32 @get_num_vertices_from_arclist_file(ptr noundef) #3

declare ptr @load_graph_from_arclist_file(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

declare i32 @isArc(ptr noundef, i32 noundef, i32 noundef) #3

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

declare double @calcChangeStats(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

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

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #4

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

declare void @print_zone_summary(ptr noundef) #3

declare void @print_term_summary(ptr noundef) #3

declare void @free_graph(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 80}
!12 = !{!"sim_config_s", !10, i64 0, !10, i64 4, !13, i64 8, !13, i64 16, !10, i64 24, !10, i64 28, !14, i64 32, !10, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !10, i64 104, !10, i64 108, !10, i64 112, !6, i64 120, !10, i64 128, !6, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !15, i64 160}
!13 = !{!"long", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!"param_config_s", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !10, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !10, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192}
!16 = !{!12, !10, i64 152}
!17 = !{!12, !10, i64 144}
!18 = !{!12, !10, i64 148}
!19 = !{!12, !10, i64 104}
!20 = !{!12, !10, i64 156}
!21 = !{!12, !10, i64 0}
!22 = !{!12, !6, i64 48}
!23 = !{!12, !6, i64 56}
!24 = !{!12, !6, i64 64}
!25 = !{!12, !6, i64 72}
!26 = !{!12, !6, i64 96}
!27 = !{!12, !6, i64 120}
!28 = !{!12, !10, i64 160}
!29 = !{!12, !10, i64 200}
!30 = !{!12, !10, i64 256}
!31 = !{!12, !10, i64 312}
!32 = !{!33, !10, i64 232}
!33 = !{!"graph_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !10, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !10, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !6, i64 224, !10, i64 232, !10, i64 236, !6, i64 240, !6, i64 248, !10, i64 256, !6, i64 264, !10, i64 272, !6, i64 280, !6, i64 288, !10, i64 296, !10, i64 300, !6, i64 304, !10, i64 312, !6, i64 320}
!34 = !{!12, !10, i64 128}
!35 = !{!33, !10, i64 296}
!36 = !{!12, !10, i64 108}
!37 = !{!12, !6, i64 192}
!38 = !{!14, !14, i64 0}
!39 = !{!12, !6, i64 184}
!40 = !{!12, !6, i64 176}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!12, !6, i64 248}
!44 = !{!12, !6, i64 240}
!45 = !{!12, !6, i64 232}
!46 = !{!12, !6, i64 216}
!47 = distinct !{!47, !42}
!48 = !{!12, !6, i64 304}
!49 = !{!12, !6, i64 296}
!50 = distinct !{!50, !42}
!51 = !{!12, !6, i64 352}
!52 = !{!12, !6, i64 344}
!53 = !{!12, !6, i64 328}
!54 = !{!55, !6, i64 0}
!55 = !{!"string_pair_s", !6, i64 0, !6, i64 8}
!56 = !{!55, !6, i64 8}
!57 = distinct !{!57, !42}
!58 = !{!12, !10, i64 24}
!59 = !{!12, !10, i64 28}
!60 = distinct !{!60, !42}
!61 = !{!12, !10, i64 112}
!62 = !{!12, !14, i64 32}
!63 = !{!12, !6, i64 168}
!64 = !{!12, !6, i64 208}
!65 = !{!12, !6, i64 264}
!66 = !{!12, !6, i64 320}
!67 = !{!12, !6, i64 224}
!68 = !{!12, !6, i64 336}
!69 = !{!33, !10, i64 4}
!70 = !{!12, !6, i64 136}
!71 = !{!33, !10, i64 300}
!72 = !{!33, !6, i64 304}
!73 = !{!33, !10, i64 312}
!74 = !{!33, !6, i64 320}
!75 = !{!76, !10, i64 0}
!76 = !{!"nodepair_s", !10, i64 0, !10, i64 4}
!77 = !{!76, !10, i64 4}
!78 = !{!33, !6, i64 288}
!79 = distinct !{!79, !42}
!80 = distinct !{!80, !42}
!81 = distinct !{!81, !42}
!82 = distinct !{!82, !42}
!83 = distinct !{!83, !42}
!84 = distinct !{!84, !42}
!85 = !{!12, !10, i64 4}
!86 = !{!12, !13, i64 8}
!87 = !{!12, !13, i64 16}
!88 = !{!12, !6, i64 88}
!89 = !{!12, !10, i64 40}
!90 = !{!91, !13, i64 0}
!91 = !{!"timeval", !13, i64 0, !13, i64 8}
!92 = !{!91, !13, i64 8}


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

%struct.timeval = type { i64, i64 }
%struct.string_pair_s = type { ptr, ptr }
%struct.nodepair_s = type { i32, i32 }

@.str.1 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.26 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [93 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [15 x i8], align 1
@__PRETTY_FUNCTION__.do_simulation = external hidden unnamed_addr constant [34 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [98 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [24 x i8], align 1

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nofree nounwind
declare noundef i32 @gettimeofday(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #3

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #3

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 2) i32 @do_simulation(ptr noundef %0) local_unnamed_addr #0 {
  %2 = alloca %struct.timeval, align 8
  %3 = alloca %struct.timeval, align 8
  %4 = alloca %struct.timeval, align 8
  %5 = alloca [65536 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #11
  call void @llvm.lifetime.start.p0(i64 65536, ptr nonnull %5) #11
  %6 = getelementptr inbounds i8, ptr %0, i64 80
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %.not = icmp eq ptr %7, null
  br i1 %.not, label %8, label %11

8:                                                ; preds = %1
  %9 = load ptr, ptr @stderr, align 8, !tbaa !14
  %10 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %9, ptr noundef nonnull @.str.26) #12
  br label %668

11:                                               ; preds = %1
  %12 = getelementptr inbounds i8, ptr %0, i64 152
  %13 = load i32, ptr %12, align 8, !tbaa !15
  %.not411 = icmp eq i32 %13, 0
  br i1 %.not411, label %44, label %14

14:                                               ; preds = %11
  %15 = getelementptr inbounds i8, ptr %0, i64 144
  %16 = load i32, ptr %15, align 8, !tbaa !16
  %.not413 = icmp eq i32 %16, 0
  br i1 %.not413, label %20, label %17

17:                                               ; preds = %14
  %18 = load ptr, ptr @stderr, align 8, !tbaa !14
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.27) #12
  br label %668

20:                                               ; preds = %14
  %21 = getelementptr inbounds i8, ptr %0, i64 148
  %22 = load i32, ptr %21, align 4, !tbaa !17
  %.not414 = icmp eq i32 %22, 0
  br i1 %.not414, label %26, label %23

23:                                               ; preds = %20
  %24 = load ptr, ptr @stderr, align 8, !tbaa !14
  %25 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %24, ptr noundef nonnull @.str.28) #12
  br label %668

26:                                               ; preds = %20
  %27 = getelementptr inbounds i8, ptr %0, i64 104
  %28 = load i32, ptr %27, align 8, !tbaa !18
  %.not415 = icmp eq i32 %28, 0
  br i1 %.not415, label %32, label %29

29:                                               ; preds = %26
  %30 = load ptr, ptr @stderr, align 8, !tbaa !14
  %31 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %30, ptr noundef nonnull @.str.29) #12
  br label %668

32:                                               ; preds = %26
  %33 = getelementptr inbounds i8, ptr %0, i64 156
  %34 = load i32, ptr %33, align 4, !tbaa !19
  %35 = icmp eq i32 %34, 0
  br i1 %35, label %36, label %39

36:                                               ; preds = %32
  %37 = load ptr, ptr @stderr, align 8, !tbaa !14
  %38 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %37, ptr noundef nonnull @.str.30) #12
  br label %668

39:                                               ; preds = %32
  %40 = load i32, ptr %0, align 8, !tbaa !20
  %.not416 = icmp ult i32 %34, %40
  br i1 %.not416, label %50, label %41

41:                                               ; preds = %39
  %42 = load ptr, ptr @stderr, align 8, !tbaa !14
  %43 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %42, ptr noundef nonnull @.str.31, i32 noundef %34, i32 noundef %40) #12
  br label %668

44:                                               ; preds = %11
  %45 = getelementptr inbounds i8, ptr %0, i64 156
  %46 = load i32, ptr %45, align 4, !tbaa !19
  %.not412 = icmp eq i32 %46, 0
  br i1 %.not412, label %._crit_edge557, label %47

._crit_edge557:                                   ; preds = %44
  %.pre = load i32, ptr %0, align 8, !tbaa !20
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 148
  %.pre558 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !17
  br label %50

47:                                               ; preds = %44
  %48 = load ptr, ptr @stderr, align 8, !tbaa !14
  %49 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef nonnull @.str.32) #12
  br label %668

50:                                               ; preds = %._crit_edge557, %39
  %51 = phi i32 [ 0, %._crit_edge557 ], [ %34, %39 ]
  %52 = phi i32 [ %.pre558, %._crit_edge557 ], [ 0, %39 ]
  %53 = phi i32 [ %.pre, %._crit_edge557 ], [ %40, %39 ]
  %54 = getelementptr inbounds i8, ptr %0, i64 148
  %55 = tail call ptr @allocate_graph(i32 noundef %53, i32 noundef %52, i32 noundef %13, i32 noundef %51) #11
  %56 = getelementptr inbounds i8, ptr %0, i64 48
  %57 = load ptr, ptr %56, align 8, !tbaa !21
  %58 = getelementptr inbounds i8, ptr %0, i64 56
  %59 = load ptr, ptr %58, align 8, !tbaa !22
  %60 = getelementptr inbounds i8, ptr %0, i64 64
  %61 = load ptr, ptr %60, align 8, !tbaa !23
  %62 = getelementptr inbounds i8, ptr %0, i64 72
  %63 = load ptr, ptr %62, align 8, !tbaa !24
  %64 = tail call i32 @load_attributes(ptr noundef %55, ptr noundef %57, ptr noundef %59, ptr noundef %61, ptr noundef %63) #11
  %.not417 = icmp eq i32 %64, 0
  br i1 %.not417, label %68, label %65

65:                                               ; preds = %50
  %66 = load ptr, ptr @stderr, align 8, !tbaa !14
  %67 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef nonnull @.str.33) #12
  br label %668

68:                                               ; preds = %50
  %69 = getelementptr inbounds i8, ptr %0, i64 96
  %70 = load ptr, ptr %69, align 8, !tbaa !25
  %.not418 = icmp eq ptr %70, null
  br i1 %.not418, label %77, label %71

71:                                               ; preds = %68
  %72 = tail call i32 @add_snowball_zones_to_graph(ptr noundef %55, ptr noundef nonnull %70) #11
  %.not419 = icmp eq i32 %72, 0
  br i1 %.not419, label %77, label %73

73:                                               ; preds = %71
  %74 = load ptr, ptr @stderr, align 8, !tbaa !14
  %75 = load ptr, ptr %69, align 8, !tbaa !25
  %76 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %74, ptr noundef nonnull @.str.34, ptr noundef %75) #12
  br label %668

77:                                               ; preds = %71, %68
  %78 = getelementptr inbounds i8, ptr %0, i64 120
  %79 = load ptr, ptr %78, align 8, !tbaa !26
  %.not420 = icmp eq ptr %79, null
  br i1 %.not420, label %86, label %80

80:                                               ; preds = %77
  %81 = tail call i32 @add_cergm_terms_to_digraph(ptr noundef %55, ptr noundef nonnull %79) #11
  %.not421 = icmp eq i32 %81, 0
  br i1 %.not421, label %86, label %82

82:                                               ; preds = %80
  %83 = load ptr, ptr @stderr, align 8, !tbaa !14
  %84 = load ptr, ptr %78, align 8, !tbaa !26
  %85 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %83, ptr noundef nonnull @.str.35, ptr noundef %84) #12
  br label %668

86:                                               ; preds = %80, %77
  %87 = getelementptr inbounds i8, ptr %0, i64 160
  %88 = tail call i32 @check_param_network_type(ptr noundef nonnull %87, ptr noundef %55) #11
  %.not422 = icmp eq i32 %88, 0
  br i1 %.not422, label %92, label %89

89:                                               ; preds = %86
  %90 = load ptr, ptr @stderr, align 8, !tbaa !14
  %91 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %90, ptr noundef nonnull @.str.36) #12
  br label %668

92:                                               ; preds = %86
  %93 = tail call i32 @build_attr_indices_from_names(ptr noundef nonnull %87, ptr noundef %55) #11
  %.not423 = icmp eq i32 %93, 0
  br i1 %.not423, label %97, label %94

94:                                               ; preds = %92
  %95 = load ptr, ptr @stderr, align 8, !tbaa !14
  %96 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %95, ptr noundef nonnull @.str.37) #12
  br label %668

97:                                               ; preds = %92
  %98 = tail call i32 @build_dyadic_indices_from_names(ptr noundef nonnull %87, ptr noundef %55, i32 noundef 1) #11
  %.not424 = icmp eq i32 %98, 0
  br i1 %.not424, label %102, label %99

99:                                               ; preds = %97
  %100 = load ptr, ptr @stderr, align 8, !tbaa !14
  %101 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %100, ptr noundef nonnull @.str.38) #12
  br label %668

102:                                              ; preds = %97
  %103 = tail call i32 @build_attr_interaction_pair_indices_from_names(ptr noundef nonnull %87, ptr noundef %55) #11
  %.not425 = icmp eq i32 %103, 0
  br i1 %.not425, label %107, label %104

104:                                              ; preds = %102
  %105 = load ptr, ptr @stderr, align 8, !tbaa !14
  %106 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %105, ptr noundef nonnull @.str.39) #12
  br label %668

107:                                              ; preds = %102
  %108 = load i32, ptr %87, align 8, !tbaa !27
  %109 = getelementptr inbounds i8, ptr %0, i64 200
  %110 = load i32, ptr %109, align 8, !tbaa !28
  %111 = getelementptr inbounds i8, ptr %0, i64 256
  %112 = load i32, ptr %111, align 8, !tbaa !29
  %113 = getelementptr inbounds i8, ptr %0, i64 312
  %114 = load i32, ptr %113, align 8, !tbaa !30
  %115 = add i32 %110, %108
  %116 = add i32 %115, %112
  %117 = add i32 %116, %114
  %118 = getelementptr inbounds i8, ptr %0, i64 104
  %119 = load i32, ptr %118, align 8, !tbaa !18
  %.not426 = icmp eq i32 %119, 0
  %120 = load ptr, ptr %69, align 8, !tbaa !25
  %.not427 = icmp eq ptr %120, null
  br i1 %.not426, label %132, label %121

121:                                              ; preds = %107
  br i1 %.not427, label %122, label %125

122:                                              ; preds = %121
  %123 = load ptr, ptr @stderr, align 8, !tbaa !14
  %124 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %123, ptr noundef nonnull @.str.40) #12
  br label %668

125:                                              ; preds = %121
  %126 = getelementptr inbounds i8, ptr %55, i64 232
  %127 = load i32, ptr %126, align 8, !tbaa !31
  %128 = icmp eq i32 %127, 0
  br i1 %128, label %129, label %136

129:                                              ; preds = %125
  %130 = load ptr, ptr @stderr, align 8, !tbaa !14
  %131 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %130, ptr noundef nonnull @.str.41) #12
  br label %668

132:                                              ; preds = %107
  br i1 %.not427, label %136, label %133

133:                                              ; preds = %132
  %134 = load ptr, ptr @stderr, align 8, !tbaa !14
  %135 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %134, ptr noundef nonnull @.str.42) #12
  br label %136

136:                                              ; preds = %132, %133, %125
  %137 = getelementptr inbounds i8, ptr %0, i64 128
  %138 = load i32, ptr %137, align 8, !tbaa !33
  %.not429 = icmp eq i32 %138, 0
  br i1 %.not429, label %166, label %139

139:                                              ; preds = %136
  %140 = load i32, ptr %54, align 4, !tbaa !17
  %.not430 = icmp eq i32 %140, 0
  br i1 %.not430, label %141, label %144

141:                                              ; preds = %139
  %142 = load ptr, ptr @stderr, align 8, !tbaa !14
  %143 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %142, ptr noundef nonnull @.str.43) #12
  br label %668

144:                                              ; preds = %139
  %145 = load i32, ptr %12, align 8, !tbaa !15
  %.not431 = icmp eq i32 %145, 0
  br i1 %.not431, label %149, label %146

146:                                              ; preds = %144
  %147 = load ptr, ptr @stderr, align 8, !tbaa !14
  %148 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %147, ptr noundef nonnull @.str.44) #12
  br label %668

149:                                              ; preds = %144
  %150 = load i32, ptr %118, align 8, !tbaa !18
  %.not432 = icmp eq i32 %150, 0
  br i1 %.not432, label %154, label %151

151:                                              ; preds = %149
  %152 = load ptr, ptr @stderr, align 8, !tbaa !14
  %153 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %152, ptr noundef nonnull @.str.45) #12
  br label %668

154:                                              ; preds = %149
  %155 = load ptr, ptr %78, align 8, !tbaa !26
  %.not433 = icmp eq ptr %155, null
  br i1 %.not433, label %156, label %159

156:                                              ; preds = %154
  %157 = load ptr, ptr @stderr, align 8, !tbaa !14
  %158 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %157, ptr noundef nonnull @.str.46) #12
  br label %668

159:                                              ; preds = %154
  %160 = getelementptr inbounds i8, ptr %55, i64 296
  %161 = load i32, ptr %160, align 8, !tbaa !34
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %163, label %166

163:                                              ; preds = %159
  %164 = load ptr, ptr @stderr, align 8, !tbaa !14
  %165 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %164, ptr noundef nonnull @.str.47) #12
  br label %668

166:                                              ; preds = %159, %136
  %167 = getelementptr inbounds i8, ptr %0, i64 144
  %168 = load i32, ptr %167, align 8, !tbaa !16
  %.not434 = icmp eq i32 %168, 0
  br i1 %.not434, label %183, label %169

169:                                              ; preds = %166
  %170 = load i32, ptr %54, align 4, !tbaa !17
  %.not435 = icmp eq i32 %170, 0
  br i1 %.not435, label %171, label %174

171:                                              ; preds = %169
  %172 = load ptr, ptr @stderr, align 8, !tbaa !14
  %173 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %172, ptr noundef nonnull @.str.48) #12
  br label %668

174:                                              ; preds = %169
  %175 = load i32, ptr %118, align 8, !tbaa !18
  %.not436 = icmp eq i32 %175, 0
  br i1 %.not436, label %179, label %176

176:                                              ; preds = %174
  %177 = load ptr, ptr @stderr, align 8, !tbaa !14
  %178 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %177, ptr noundef nonnull @.str.49) #12
  br label %668

179:                                              ; preds = %174
  br i1 %.not429, label %183, label %180

180:                                              ; preds = %179
  %181 = load ptr, ptr @stderr, align 8, !tbaa !14
  %182 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %181, ptr noundef nonnull @.str.50) #12
  br label %668

183:                                              ; preds = %179, %166
  %184 = getelementptr inbounds i8, ptr %0, i64 108
  %185 = load i32, ptr %184, align 4, !tbaa !35
  %.not438 = icmp eq i32 %185, 0
  br i1 %.not438, label %191, label %186

186:                                              ; preds = %183
  %187 = load i32, ptr %54, align 4, !tbaa !17
  %.not439 = icmp eq i32 %187, 0
  br i1 %.not439, label %188, label %191

188:                                              ; preds = %186
  %189 = load ptr, ptr @stderr, align 8, !tbaa !14
  %190 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %189, ptr noundef nonnull @.str.51) #12
  br label %668

191:                                              ; preds = %186, %183
  %192 = zext i32 %117 to i64
  %193 = tail call ptr @safe_calloc(i64 noundef %192, i64 noundef 8) #11
  %194 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52)
  %195 = load i32, ptr %87, align 8, !tbaa !27
  %.not513 = icmp eq i32 %195, 0
  br i1 %.not513, label %.preheader473, label %.lr.ph

.lr.ph:                                           ; preds = %191
  %196 = getelementptr inbounds i8, ptr %0, i64 192
  %197 = getelementptr inbounds i8, ptr %0, i64 184
  %198 = getelementptr inbounds i8, ptr %0, i64 176
  br label %205

.preheader473.loopexit:                           ; preds = %221
  %199 = trunc nuw i64 %indvars.iv.next to i32
  br label %.preheader473

.preheader473:                                    ; preds = %.preheader473.loopexit, %191
  %.0390.lcssa = phi i32 [ 0, %191 ], [ %199, %.preheader473.loopexit ]
  %200 = load i32, ptr %109, align 8, !tbaa !28
  %.not514 = icmp eq i32 %200, 0
  br i1 %.not514, label %.preheader472, label %.lr.ph478

.lr.ph478:                                        ; preds = %.preheader473
  %201 = getelementptr inbounds i8, ptr %0, i64 248
  %202 = getelementptr inbounds i8, ptr %0, i64 240
  %203 = getelementptr inbounds i8, ptr %0, i64 232
  %204 = getelementptr inbounds i8, ptr %0, i64 216
  br label %228

205:                                              ; preds = %.lr.ph, %221
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %221 ]
  %206 = load ptr, ptr %196, align 8, !tbaa !36
  %207 = getelementptr inbounds double, ptr %206, i64 %indvars.iv
  %208 = load double, ptr %207, align 8, !tbaa !37
  %209 = getelementptr inbounds double, ptr %193, i64 %indvars.iv
  store double %208, ptr %209, align 8, !tbaa !37
  %210 = load ptr, ptr %197, align 8, !tbaa !38
  %211 = getelementptr inbounds double, ptr %210, i64 %indvars.iv
  %212 = load double, ptr %211, align 8, !tbaa !37
  %213 = fcmp ogt double %212, 0.000000e+00
  %214 = load ptr, ptr %198, align 8, !tbaa !39
  %215 = getelementptr inbounds ptr, ptr %214, i64 %indvars.iv
  %216 = load ptr, ptr %215, align 8, !tbaa !14
  br i1 %213, label %217, label %219

217:                                              ; preds = %205
  %218 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53, ptr noundef %216, double noundef %212, double noundef %208)
  br label %221

219:                                              ; preds = %205
  %220 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54, ptr noundef %216, double noundef %208)
  br label %221

221:                                              ; preds = %217, %219
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %222 = load i32, ptr %87, align 8, !tbaa !27
  %223 = zext i32 %222 to i64
  %224 = icmp ult i64 %indvars.iv.next, %223
  br i1 %224, label %205, label %.preheader473.loopexit, !llvm.loop !40

.preheader472:                                    ; preds = %248, %.preheader473
  %.1391.lcssa = phi i32 [ %.0390.lcssa, %.preheader473 ], [ %249, %248 ]
  %225 = load i32, ptr %111, align 8, !tbaa !29
  %.not515 = icmp eq i32 %225, 0
  br i1 %.not515, label %.preheader471, label %.lr.ph482

.lr.ph482:                                        ; preds = %.preheader472
  %226 = getelementptr inbounds i8, ptr %0, i64 304
  %227 = getelementptr inbounds i8, ptr %0, i64 296
  br label %257

228:                                              ; preds = %.lr.ph478, %248
  %indvars.iv528 = phi i64 [ 0, %.lr.ph478 ], [ %indvars.iv.next529, %248 ]
  %.1391476 = phi i32 [ %.0390.lcssa, %.lr.ph478 ], [ %249, %248 ]
  %229 = load ptr, ptr %201, align 8, !tbaa !42
  %230 = getelementptr inbounds double, ptr %229, i64 %indvars.iv528
  %231 = load double, ptr %230, align 8, !tbaa !37
  %232 = zext i32 %.1391476 to i64
  %233 = getelementptr inbounds double, ptr %193, i64 %232
  store double %231, ptr %233, align 8, !tbaa !37
  %234 = load ptr, ptr %202, align 8, !tbaa !43
  %235 = getelementptr inbounds double, ptr %234, i64 %indvars.iv528
  %236 = load double, ptr %235, align 8, !tbaa !37
  %237 = fcmp ogt double %236, 0.000000e+00
  %238 = load ptr, ptr %203, align 8, !tbaa !44
  %239 = getelementptr inbounds ptr, ptr %238, i64 %indvars.iv528
  %240 = load ptr, ptr %239, align 8, !tbaa !14
  %241 = load ptr, ptr %204, align 8, !tbaa !45
  %242 = getelementptr inbounds ptr, ptr %241, i64 %indvars.iv528
  %243 = load ptr, ptr %242, align 8, !tbaa !14
  br i1 %237, label %244, label %246

244:                                              ; preds = %228
  %245 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.55, ptr noundef %240, ptr noundef %243, double noundef %236, double noundef %231)
  br label %248

246:                                              ; preds = %228
  %247 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.56, ptr noundef %240, ptr noundef %243, double noundef %231)
  br label %248

248:                                              ; preds = %244, %246
  %indvars.iv.next529 = add nuw nsw i64 %indvars.iv528, 1
  %249 = add i32 %.1391476, 1
  %250 = load i32, ptr %109, align 8, !tbaa !28
  %251 = zext i32 %250 to i64
  %252 = icmp ult i64 %indvars.iv.next529, %251
  br i1 %252, label %228, label %.preheader472, !llvm.loop !46

.preheader471:                                    ; preds = %257, %.preheader472
  %.2392.lcssa = phi i32 [ %.1391.lcssa, %.preheader472 ], [ %267, %257 ]
  %253 = load i32, ptr %113, align 8, !tbaa !30
  %.not516 = icmp eq i32 %253, 0
  br i1 %.not516, label %._crit_edge, label %.lr.ph486

.lr.ph486:                                        ; preds = %.preheader471
  %254 = getelementptr inbounds i8, ptr %0, i64 352
  %255 = getelementptr inbounds i8, ptr %0, i64 344
  %256 = getelementptr inbounds i8, ptr %0, i64 328
  br label %271

257:                                              ; preds = %.lr.ph482, %257
  %indvars.iv531 = phi i64 [ 0, %.lr.ph482 ], [ %indvars.iv.next532, %257 ]
  %.2392480 = phi i32 [ %.1391.lcssa, %.lr.ph482 ], [ %267, %257 ]
  %258 = load ptr, ptr %226, align 8, !tbaa !47
  %259 = getelementptr inbounds double, ptr %258, i64 %indvars.iv531
  %260 = load double, ptr %259, align 8, !tbaa !37
  %261 = zext i32 %.2392480 to i64
  %262 = getelementptr inbounds double, ptr %193, i64 %261
  store double %260, ptr %262, align 8, !tbaa !37
  %263 = load ptr, ptr %227, align 8, !tbaa !48
  %264 = getelementptr inbounds ptr, ptr %263, i64 %indvars.iv531
  %265 = load ptr, ptr %264, align 8, !tbaa !14
  %266 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54, ptr noundef %265, double noundef %260)
  %indvars.iv.next532 = add nuw nsw i64 %indvars.iv531, 1
  %267 = add i32 %.2392480, 1
  %268 = load i32, ptr %111, align 8, !tbaa !29
  %269 = zext i32 %268 to i64
  %270 = icmp ult i64 %indvars.iv.next532, %269
  br i1 %270, label %257, label %.preheader471, !llvm.loop !49

271:                                              ; preds = %.lr.ph486, %271
  %indvars.iv534 = phi i64 [ 0, %.lr.ph486 ], [ %indvars.iv.next535, %271 ]
  %.3393484 = phi i32 [ %.2392.lcssa, %.lr.ph486 ], [ %286, %271 ]
  %272 = load ptr, ptr %254, align 8, !tbaa !50
  %273 = getelementptr inbounds double, ptr %272, i64 %indvars.iv534
  %274 = load double, ptr %273, align 8, !tbaa !37
  %275 = zext i32 %.3393484 to i64
  %276 = getelementptr inbounds double, ptr %193, i64 %275
  store double %274, ptr %276, align 8, !tbaa !37
  %277 = load ptr, ptr %255, align 8, !tbaa !51
  %278 = getelementptr inbounds ptr, ptr %277, i64 %indvars.iv534
  %279 = load ptr, ptr %278, align 8, !tbaa !14
  %280 = load ptr, ptr %256, align 8, !tbaa !52
  %281 = getelementptr inbounds %struct.string_pair_s, ptr %280, i64 %indvars.iv534
  %282 = load ptr, ptr %281, align 8, !tbaa !53
  %283 = getelementptr inbounds i8, ptr %281, i64 8
  %284 = load ptr, ptr %283, align 8, !tbaa !55
  %285 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.57, ptr noundef %279, ptr noundef %282, ptr noundef %284, double noundef %274)
  %indvars.iv.next535 = add nuw nsw i64 %indvars.iv534, 1
  %286 = add i32 %.3393484, 1
  %287 = load i32, ptr %113, align 8, !tbaa !30
  %288 = zext i32 %287 to i64
  %289 = icmp ult i64 %indvars.iv.next535, %288
  br i1 %289, label %271, label %._crit_edge, !llvm.loop !56

._crit_edge:                                      ; preds = %271, %.preheader471
  %290 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52)
  %291 = getelementptr inbounds i8, ptr %0, i64 24
  %292 = load i32, ptr %291, align 8, !tbaa !57
  %.not440 = icmp eq i32 %292, 0
  br i1 %.not440, label %322, label %293

293:                                              ; preds = %._crit_edge
  %294 = getelementptr inbounds i8, ptr %0, i64 28
  %295 = load i32, ptr %294, align 4, !tbaa !58
  %.not441 = icmp eq i32 %295, 0
  br i1 %.not441, label %299, label %296

296:                                              ; preds = %293
  %297 = load ptr, ptr @stderr, align 8, !tbaa !14
  %298 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %297, ptr noundef nonnull @.str.58) #12
  br label %668

299:                                              ; preds = %293
  %300 = load i32, ptr %54, align 4, !tbaa !17
  %.not442 = icmp eq i32 %300, 0
  %301 = select i1 %.not442, ptr @.str.60, ptr @.str.59
  %302 = load i32, ptr %87, align 8, !tbaa !27
  %.not517 = icmp eq i32 %302, 0
  br i1 %.not517, label %._crit_edge492.thread, label %.lr.ph491

.lr.ph491:                                        ; preds = %299
  %303 = getelementptr inbounds i8, ptr %0, i64 176
  %304 = load ptr, ptr %303, align 8, !tbaa !39
  %wide.trip.count = zext i32 %302 to i64
  br label %305

305:                                              ; preds = %.lr.ph491, %305
  %indvars.iv537 = phi i64 [ 0, %.lr.ph491 ], [ %indvars.iv.next538, %305 ]
  %.0381489 = phi i32 [ 0, %.lr.ph491 ], [ %spec.select463, %305 ]
  %.0382488 = phi i32 [ 0, %.lr.ph491 ], [ %spec.select, %305 ]
  %306 = getelementptr inbounds ptr, ptr %304, i64 %indvars.iv537
  %307 = load ptr, ptr %306, align 8, !tbaa !14
  %308 = tail call i32 @strcasecmp(ptr noundef %307, ptr noundef nonnull %301) #13
  %309 = icmp eq i32 %308, 0
  %spec.select = select i1 %309, i32 1, i32 %.0382488
  %310 = trunc nuw i64 %indvars.iv537 to i32
  %spec.select463 = select i1 %309, i32 %310, i32 %.0381489
  %indvars.iv.next538 = add nuw nsw i64 %indvars.iv537, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next538, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge492, label %305, !llvm.loop !59

._crit_edge492:                                   ; preds = %305
  %.not445 = icmp eq i32 %spec.select, 0
  br i1 %.not445, label %._crit_edge492.thread, label %313

._crit_edge492.thread:                            ; preds = %299, %._crit_edge492
  %311 = load ptr, ptr @stderr, align 8, !tbaa !14
  %312 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %311, ptr noundef nonnull @.str.61, ptr noundef nonnull %301) #12
  br label %668

313:                                              ; preds = %._crit_edge492
  %314 = getelementptr inbounds i8, ptr %0, i64 112
  %315 = load i32, ptr %314, align 8, !tbaa !60
  %316 = icmp eq i32 %315, 0
  br i1 %316, label %317, label %336

317:                                              ; preds = %313
  %318 = load i32, ptr %137, align 8, !tbaa !33
  %.not446 = icmp eq i32 %318, 0
  br i1 %.not446, label %319, label %336

319:                                              ; preds = %317
  %320 = load ptr, ptr @stderr, align 8, !tbaa !14
  %321 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %320, ptr noundef nonnull @.str.62) #12
  br label %668

322:                                              ; preds = %._crit_edge
  %323 = getelementptr inbounds i8, ptr %0, i64 112
  %324 = load i32, ptr %323, align 8, !tbaa !60
  %.not444 = icmp eq i32 %324, 0
  br i1 %.not444, label %.thread465, label %325

325:                                              ; preds = %322
  %326 = load ptr, ptr @stderr, align 8, !tbaa !14
  %327 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %326, ptr noundef nonnull @.str.63) #12
  br label %668

.thread465:                                       ; preds = %322
  %328 = getelementptr inbounds i8, ptr %0, i64 32
  %329 = load double, ptr %328, align 8, !tbaa !61
  %330 = fadd double %329, -1.000000e-01
  %331 = tail call double @llvm.fabs.f64(double %330)
  %332 = fcmp ugt double %331, 0x3CB0000000000000
  br i1 %332, label %333, label %336

333:                                              ; preds = %.thread465
  %334 = load ptr, ptr @stderr, align 8, !tbaa !14
  %335 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %334, ptr noundef nonnull @.str.64, double noundef %329) #12
  br label %336

336:                                              ; preds = %317, %313, %333, %.thread465
  %.2467 = phi i32 [ 0, %333 ], [ 0, %.thread465 ], [ %spec.select463, %313 ], [ %spec.select463, %317 ]
  %337 = tail call ptr @safe_calloc(i64 noundef %192, i64 noundef 8) #11
  %338 = getelementptr inbounds i8, ptr %0, i64 168
  %339 = load ptr, ptr %338, align 8, !tbaa !62
  %340 = getelementptr inbounds i8, ptr %0, i64 184
  %341 = load ptr, ptr %340, align 8, !tbaa !38
  %342 = getelementptr inbounds i8, ptr %0, i64 208
  %343 = load ptr, ptr %342, align 8, !tbaa !63
  %344 = getelementptr inbounds i8, ptr %0, i64 264
  %345 = load ptr, ptr %344, align 8, !tbaa !64
  %346 = getelementptr inbounds i8, ptr %0, i64 320
  %347 = load ptr, ptr %346, align 8, !tbaa !65
  %348 = getelementptr inbounds i8, ptr %0, i64 224
  %349 = load ptr, ptr %348, align 8, !tbaa !66
  %350 = getelementptr inbounds i8, ptr %0, i64 240
  %351 = load ptr, ptr %350, align 8, !tbaa !43
  %352 = getelementptr inbounds i8, ptr %0, i64 336
  %353 = load ptr, ptr %352, align 8, !tbaa !67
  %354 = tail call ptr @empty_graph_stats(ptr noundef %55, i32 noundef %117, i32 noundef %110, i32 noundef %112, i32 noundef %114, ptr noundef %339, ptr noundef %341, ptr noundef %343, ptr noundef %345, ptr noundef %347, ptr noundef %349, ptr noundef %351, ptr noundef %353, ptr noundef %337) #11
  %355 = load i32, ptr %137, align 8, !tbaa !33
  %.not448 = icmp eq i32 %355, 0
  br i1 %.not448, label %516, label %356

356:                                              ; preds = %336
  %357 = getelementptr inbounds i8, ptr %55, i64 4
  %358 = load i32, ptr %357, align 4, !tbaa !68
  %.not451 = icmp eq i32 %358, 0
  br i1 %.not451, label %359, label %360

359:                                              ; preds = %356
  tail call void @__assert_fail(ptr noundef nonnull @.str.65, ptr noundef nonnull @.str.1, i32 noundef 823, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

360:                                              ; preds = %356
  %361 = load i32, ptr %167, align 8, !tbaa !16
  %.not452 = icmp eq i32 %361, 0
  br i1 %.not452, label %363, label %362

362:                                              ; preds = %360
  tail call void @__assert_fail(ptr noundef nonnull @.str.66, ptr noundef nonnull @.str.1, i32 noundef 824, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

363:                                              ; preds = %360
  %364 = getelementptr inbounds i8, ptr %0, i64 136
  %365 = load ptr, ptr %364, align 8, !tbaa !69
  %.not453 = icmp eq ptr %365, null
  br i1 %.not453, label %366, label %369

366:                                              ; preds = %363
  %367 = load ptr, ptr @stderr, align 8, !tbaa !14
  %368 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %367, ptr noundef nonnull @.str.67) #12
  br label %668

369:                                              ; preds = %363
  %370 = tail call noalias ptr @fopen(ptr noundef nonnull %365, ptr noundef nonnull @.str.68)
  %.not454 = icmp eq ptr %370, null
  br i1 %.not454, label %371, label %378

371:                                              ; preds = %369
  %372 = load ptr, ptr @stderr, align 8, !tbaa !14
  %373 = load ptr, ptr %364, align 8, !tbaa !69
  %374 = tail call ptr @__errno_location() #15
  %375 = load i32, ptr %374, align 4, !tbaa !70
  %376 = tail call ptr @strerror(i32 noundef %375) #11
  %377 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %372, ptr noundef nonnull @.str.69, ptr noundef %373, ptr noundef %376) #12
  br label %668

378:                                              ; preds = %369
  %379 = getelementptr inbounds i8, ptr %0, i64 112
  %380 = load i32, ptr %379, align 8, !tbaa !60
  %.not455 = icmp eq i32 %380, 0
  br i1 %.not455, label %384, label %381

381:                                              ; preds = %378
  %382 = load ptr, ptr @stderr, align 8, !tbaa !14
  %383 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %382, ptr noundef nonnull @.str.70, i32 noundef %380) #12
  br label %384

384:                                              ; preds = %381, %378
  %385 = tail call i32 @get_num_vertices_from_arclist_file(ptr noundef nonnull %370) #11
  %386 = load i32, ptr %0, align 8, !tbaa !20
  %.not456 = icmp eq i32 %385, %386
  br i1 %.not456, label %391, label %387

387:                                              ; preds = %384
  %388 = load ptr, ptr @stderr, align 8, !tbaa !14
  %389 = load ptr, ptr %364, align 8, !tbaa !69
  %390 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %388, ptr noundef nonnull @.str.71, i32 noundef %386, ptr noundef %389, i32 noundef %385) #12
  br label %668

391:                                              ; preds = %384
  %392 = load ptr, ptr %364, align 8, !tbaa !69
  %393 = tail call noalias ptr @fopen(ptr noundef %392, ptr noundef nonnull @.str.68)
  %.not457 = icmp eq ptr %393, null
  br i1 %.not457, label %394, label %401

394:                                              ; preds = %391
  %395 = load ptr, ptr @stderr, align 8, !tbaa !14
  %396 = load ptr, ptr %364, align 8, !tbaa !69
  %397 = tail call ptr @__errno_location() #15
  %398 = load i32, ptr %397, align 4, !tbaa !70
  %399 = tail call ptr @strerror(i32 noundef %398) #11
  %400 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %395, ptr noundef nonnull @.str.69, ptr noundef %396, ptr noundef %399) #12
  br label %668

401:                                              ; preds = %391
  %402 = load ptr, ptr %338, align 8, !tbaa !62
  %403 = load ptr, ptr %340, align 8, !tbaa !38
  %404 = load ptr, ptr %342, align 8, !tbaa !63
  %405 = load ptr, ptr %344, align 8, !tbaa !64
  %406 = load ptr, ptr %346, align 8, !tbaa !65
  %407 = load ptr, ptr %348, align 8, !tbaa !66
  %408 = load ptr, ptr %350, align 8, !tbaa !43
  %409 = load ptr, ptr %352, align 8, !tbaa !67
  %410 = tail call ptr @load_graph_from_arclist_file(ptr noundef nonnull %393, ptr noundef nonnull %55, i32 noundef 1, i32 noundef %117, i32 noundef %110, i32 noundef %112, i32 noundef %114, ptr noundef %402, ptr noundef %403, ptr noundef %404, ptr noundef %405, ptr noundef %406, ptr noundef %407, ptr noundef %408, ptr noundef %409, ptr noundef %337, ptr noundef %193) #11
  %411 = getelementptr inbounds i8, ptr %410, i64 300
  store i32 0, ptr %411, align 4, !tbaa !71
  %412 = getelementptr inbounds i8, ptr %410, i64 304
  %413 = load ptr, ptr %412, align 8, !tbaa !72
  tail call void @free(ptr noundef %413) #11
  store ptr null, ptr %412, align 8, !tbaa !72
  %414 = load ptr, ptr %78, align 8, !tbaa !26
  %415 = tail call i32 @add_cergm_terms_to_digraph(ptr noundef %410, ptr noundef %414) #11
  %.not458 = icmp eq i32 %415, 0
  br i1 %.not458, label %420, label %416

416:                                              ; preds = %401
  %417 = load ptr, ptr @stderr, align 8, !tbaa !14
  %418 = load ptr, ptr %78, align 8, !tbaa !26
  %419 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %417, ptr noundef nonnull @.str.35, ptr noundef %418) #12
  br label %668

420:                                              ; preds = %401
  %421 = getelementptr inbounds i8, ptr %410, i64 312
  %422 = load i32, ptr %421, align 8, !tbaa !73
  %423 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.72, i32 noundef %422)
  %424 = tail call ptr @safe_calloc(i64 noundef %192, i64 noundef 8) #11
  %.0385498 = add i32 %422, -1
  %425 = icmp sgt i32 %.0385498, -1
  br i1 %425, label %.lr.ph501, label %._crit_edge502

.lr.ph501:                                        ; preds = %420
  %426 = getelementptr inbounds i8, ptr %410, i64 320
  %427 = getelementptr inbounds i8, ptr %410, i64 288
  %428 = getelementptr inbounds i8, ptr %410, i64 296
  %.not518 = icmp eq i32 %117, 0
  %429 = shl nuw nsw i64 %192, 3
  %scevgep = getelementptr i8, ptr %337, i64 %429
  %scevgep564 = getelementptr i8, ptr %424, i64 %429
  %min.iters.check = icmp ult i32 %117, 4
  %bound0 = icmp ult ptr %337, %scevgep564
  %bound1 = icmp ult ptr %424, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  %n.vec = and i64 %192, 4294967292
  %cmp.n = icmp eq i64 %n.vec, %192
  %xtraiter = and i64 %192, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %431

.loopexit:                                        ; preds = %.lr.ph497.prol.loopexit, %.lr.ph497, %middle.block, %448
  %.0385 = add nsw i32 %.0385499, -1
  %430 = icmp sgt i32 %.0385499, 0
  br i1 %430, label %431, label %._crit_edge502, !llvm.loop !74

431:                                              ; preds = %.lr.ph501, %.loopexit
  %.0385499 = phi i32 [ %.0385498, %.lr.ph501 ], [ %.0385, %.loopexit ]
  %432 = load ptr, ptr %426, align 8, !tbaa !75
  %433 = zext nneg i32 %.0385499 to i64
  %434 = getelementptr inbounds %struct.nodepair_s, ptr %432, i64 %433
  %435 = load i32, ptr %434, align 4, !tbaa !76
  %436 = getelementptr inbounds i8, ptr %434, i64 4
  %437 = load i32, ptr %436, align 4, !tbaa !78
  %438 = load ptr, ptr %427, align 8, !tbaa !79
  %439 = zext i32 %435 to i64
  %440 = getelementptr inbounds i32, ptr %438, i64 %439
  %441 = load i32, ptr %440, align 4, !tbaa !70
  %442 = load i32, ptr %428, align 8, !tbaa !34
  %443 = icmp eq i32 %441, %442
  br i1 %443, label %445, label %444

444:                                              ; preds = %431
  tail call void @__assert_fail(ptr noundef nonnull @.str.73, ptr noundef nonnull @.str.1, i32 noundef 887, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

445:                                              ; preds = %431
  %446 = tail call i32 @isArc(ptr noundef nonnull %410, i32 noundef %435, i32 noundef %437) #11
  %.not462 = icmp eq i32 %446, 0
  br i1 %.not462, label %447, label %448

447:                                              ; preds = %445
  tail call void @__assert_fail(ptr noundef nonnull @.str.74, ptr noundef nonnull @.str.1, i32 noundef 888, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

448:                                              ; preds = %445
  tail call void @removeArc_all_maxtermsender_arcs(ptr noundef nonnull %410, i32 noundef %435, i32 noundef %437, i32 noundef %.0385499) #11
  %449 = load ptr, ptr %338, align 8, !tbaa !62
  %450 = load ptr, ptr %340, align 8, !tbaa !38
  %451 = load ptr, ptr %342, align 8, !tbaa !63
  %452 = load ptr, ptr %344, align 8, !tbaa !64
  %453 = load ptr, ptr %346, align 8, !tbaa !65
  %454 = load ptr, ptr %348, align 8, !tbaa !66
  %455 = load ptr, ptr %350, align 8, !tbaa !43
  %456 = load ptr, ptr %352, align 8, !tbaa !67
  %457 = tail call double @calcChangeStats(ptr noundef nonnull %410, i32 noundef %435, i32 noundef %437, i32 noundef %117, i32 noundef %110, i32 noundef %112, i32 noundef %114, ptr noundef %449, ptr noundef %450, ptr noundef %451, ptr noundef %452, ptr noundef %453, ptr noundef %454, ptr noundef %455, ptr noundef %456, ptr noundef %193, i32 noundef 1, ptr noundef %424) #11
  br i1 %.not518, label %.loopexit, label %.lr.ph497.preheader

.lr.ph497.preheader:                              ; preds = %448
  %brmerge = select i1 %min.iters.check, i1 true, i1 %found.conflict
  br i1 %brmerge, label %.lr.ph497.preheader568, label %vector.body

vector.body:                                      ; preds = %.lr.ph497.preheader, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph497.preheader ]
  %458 = getelementptr inbounds double, ptr %424, i64 %index
  %459 = getelementptr inbounds i8, ptr %458, i64 16
  %wide.load = load <2 x double>, ptr %458, align 8, !tbaa !37, !alias.scope !80
  %wide.load565 = load <2 x double>, ptr %459, align 8, !tbaa !37, !alias.scope !80
  %460 = getelementptr inbounds double, ptr %337, i64 %index
  %461 = getelementptr inbounds i8, ptr %460, i64 16
  %wide.load566 = load <2 x double>, ptr %460, align 8, !tbaa !37, !alias.scope !83, !noalias !80
  %wide.load567 = load <2 x double>, ptr %461, align 8, !tbaa !37, !alias.scope !83, !noalias !80
  %462 = fsub <2 x double> %wide.load566, %wide.load
  %463 = fsub <2 x double> %wide.load567, %wide.load565
  store <2 x double> %462, ptr %460, align 8, !tbaa !37, !alias.scope !83, !noalias !80
  store <2 x double> %463, ptr %461, align 8, !tbaa !37, !alias.scope !83, !noalias !80
  %index.next = add nuw i64 %index, 4
  %464 = icmp eq i64 %index.next, %n.vec
  br i1 %464, label %middle.block, label %vector.body, !llvm.loop !85

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit, label %.lr.ph497.preheader568

.lr.ph497.preheader568:                           ; preds = %.lr.ph497.preheader, %middle.block
  %indvars.iv540.ph = phi i64 [ 0, %.lr.ph497.preheader ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %.lr.ph497.prol.loopexit, label %.lr.ph497.prol

.lr.ph497.prol:                                   ; preds = %.lr.ph497.preheader568, %.lr.ph497.prol
  %indvars.iv540.prol = phi i64 [ %indvars.iv.next541.prol, %.lr.ph497.prol ], [ %indvars.iv540.ph, %.lr.ph497.preheader568 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph497.prol ], [ 0, %.lr.ph497.preheader568 ]
  %465 = getelementptr inbounds double, ptr %424, i64 %indvars.iv540.prol
  %466 = load double, ptr %465, align 8, !tbaa !37
  %467 = getelementptr inbounds double, ptr %337, i64 %indvars.iv540.prol
  %468 = load double, ptr %467, align 8, !tbaa !37
  %469 = fsub double %468, %466
  store double %469, ptr %467, align 8, !tbaa !37
  %indvars.iv.next541.prol = add nuw nsw i64 %indvars.iv540.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph497.prol.loopexit, label %.lr.ph497.prol, !llvm.loop !88

.lr.ph497.prol.loopexit:                          ; preds = %.lr.ph497.prol, %.lr.ph497.preheader568
  %indvars.iv540.unr = phi i64 [ %indvars.iv540.ph, %.lr.ph497.preheader568 ], [ %indvars.iv.next541.prol, %.lr.ph497.prol ]
  %470 = sub nsw i64 %indvars.iv540.ph, %192
  %471 = icmp ugt i64 %470, -4
  br i1 %471, label %.loopexit, label %.lr.ph497

.lr.ph497:                                        ; preds = %.lr.ph497.prol.loopexit, %.lr.ph497
  %indvars.iv540 = phi i64 [ %indvars.iv.next541.3, %.lr.ph497 ], [ %indvars.iv540.unr, %.lr.ph497.prol.loopexit ]
  %472 = getelementptr inbounds double, ptr %424, i64 %indvars.iv540
  %473 = load double, ptr %472, align 8, !tbaa !37
  %474 = getelementptr inbounds double, ptr %337, i64 %indvars.iv540
  %475 = load double, ptr %474, align 8, !tbaa !37
  %476 = fsub double %475, %473
  store double %476, ptr %474, align 8, !tbaa !37
  %indvars.iv.next541 = add nuw nsw i64 %indvars.iv540, 1
  %477 = getelementptr inbounds double, ptr %424, i64 %indvars.iv.next541
  %478 = load double, ptr %477, align 8, !tbaa !37
  %479 = getelementptr inbounds double, ptr %337, i64 %indvars.iv.next541
  %480 = load double, ptr %479, align 8, !tbaa !37
  %481 = fsub double %480, %478
  store double %481, ptr %479, align 8, !tbaa !37
  %indvars.iv.next541.1 = add nuw nsw i64 %indvars.iv540, 2
  %482 = getelementptr inbounds double, ptr %424, i64 %indvars.iv.next541.1
  %483 = load double, ptr %482, align 8, !tbaa !37
  %484 = getelementptr inbounds double, ptr %337, i64 %indvars.iv.next541.1
  %485 = load double, ptr %484, align 8, !tbaa !37
  %486 = fsub double %485, %483
  store double %486, ptr %484, align 8, !tbaa !37
  %indvars.iv.next541.2 = add nuw nsw i64 %indvars.iv540, 3
  %487 = getelementptr inbounds double, ptr %424, i64 %indvars.iv.next541.2
  %488 = load double, ptr %487, align 8, !tbaa !37
  %489 = getelementptr inbounds double, ptr %337, i64 %indvars.iv.next541.2
  %490 = load double, ptr %489, align 8, !tbaa !37
  %491 = fsub double %490, %488
  store double %491, ptr %489, align 8, !tbaa !37
  %indvars.iv.next541.3 = add nuw nsw i64 %indvars.iv540, 4
  %exitcond544.not.3 = icmp eq i64 %indvars.iv.next541.3, %192
  br i1 %exitcond544.not.3, label %.loopexit, label %.lr.ph497, !llvm.loop !90

._crit_edge502:                                   ; preds = %.loopexit, %420
  %492 = load i32, ptr %421, align 8, !tbaa !73
  %493 = icmp eq i32 %492, 0
  br i1 %493, label %495, label %494

494:                                              ; preds = %._crit_edge502
  tail call void @__assert_fail(ptr noundef nonnull @.str.75, ptr noundef nonnull @.str.1, i32 noundef 916, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

495:                                              ; preds = %._crit_edge502
  tail call void @free(ptr noundef %424) #11
  %496 = load i32, ptr %291, align 8, !tbaa !57
  %.not459 = icmp eq i32 %496, 0
  br i1 %.not459, label %536, label %497

497:                                              ; preds = %495
  %498 = load i32, ptr %12, align 8, !tbaa !15
  %.not460 = icmp eq i32 %498, 0
  br i1 %.not460, label %500, label %499

499:                                              ; preds = %497
  tail call void @__assert_fail(ptr noundef nonnull @.str.76, ptr noundef nonnull @.str.1, i32 noundef 919, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

500:                                              ; preds = %497
  %501 = load ptr, ptr %338, align 8, !tbaa !62
  %502 = load ptr, ptr %340, align 8, !tbaa !38
  %503 = load ptr, ptr %342, align 8, !tbaa !63
  %504 = load ptr, ptr %344, align 8, !tbaa !64
  %505 = load ptr, ptr %346, align 8, !tbaa !65
  %506 = load ptr, ptr %348, align 8, !tbaa !66
  %507 = load ptr, ptr %350, align 8, !tbaa !43
  %508 = load ptr, ptr %352, align 8, !tbaa !67
  %509 = load i32, ptr %118, align 8, !tbaa !18
  %510 = load i32, ptr %184, align 4, !tbaa !35
  %511 = load i32, ptr %137, align 8, !tbaa !33
  %512 = load i32, ptr %167, align 8, !tbaa !16
  tail call void @make_erdos_renyi_digraph(ptr noundef nonnull %410, i32 noundef %422, i32 noundef %117, i32 noundef %110, i32 noundef %112, i32 noundef %114, ptr noundef %501, ptr noundef %502, ptr noundef %503, ptr noundef %504, ptr noundef %505, ptr noundef %506, ptr noundef %507, ptr noundef %508, i32 noundef %509, i32 noundef %510, ptr noundef %337, ptr noundef %193, i32 noundef %511, i32 noundef %512)
  %513 = load i32, ptr %421, align 8, !tbaa !73
  %514 = icmp eq i32 %513, %422
  br i1 %514, label %536, label %515

515:                                              ; preds = %500
  tail call void @__assert_fail(ptr noundef nonnull @.str.77, ptr noundef nonnull @.str.1, i32 noundef 941, ptr noundef nonnull @__PRETTY_FUNCTION__.do_simulation) #14
  unreachable

516:                                              ; preds = %336
  %517 = load i32, ptr %291, align 8, !tbaa !57
  %.not449 = icmp eq i32 %517, 0
  %518 = getelementptr inbounds i8, ptr %0, i64 112
  %519 = load i32, ptr %518, align 8, !tbaa !60
  br i1 %.not449, label %532, label %520

520:                                              ; preds = %516
  %521 = load ptr, ptr %338, align 8, !tbaa !62
  %522 = load ptr, ptr %340, align 8, !tbaa !38
  %523 = load ptr, ptr %342, align 8, !tbaa !63
  %524 = load ptr, ptr %344, align 8, !tbaa !64
  %525 = load ptr, ptr %346, align 8, !tbaa !65
  %526 = load ptr, ptr %348, align 8, !tbaa !66
  %527 = load ptr, ptr %350, align 8, !tbaa !43
  %528 = load ptr, ptr %352, align 8, !tbaa !67
  %529 = load i32, ptr %118, align 8, !tbaa !18
  %530 = load i32, ptr %184, align 4, !tbaa !35
  %531 = load i32, ptr %167, align 8, !tbaa !16
  tail call void @make_erdos_renyi_digraph(ptr noundef %55, i32 noundef %519, i32 noundef %117, i32 noundef %110, i32 noundef %112, i32 noundef %114, ptr noundef %521, ptr noundef %522, ptr noundef %523, ptr noundef %524, ptr noundef %525, ptr noundef %526, ptr noundef %527, ptr noundef %528, i32 noundef %529, i32 noundef %530, ptr noundef %337, ptr noundef %193, i32 noundef 0, i32 noundef %531)
  br label %536

532:                                              ; preds = %516
  %.not450 = icmp eq i32 %519, 0
  br i1 %.not450, label %536, label %533

533:                                              ; preds = %532
  %534 = load ptr, ptr @stderr, align 8, !tbaa !14
  %535 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %534, ptr noundef nonnull @.str.78, i32 noundef %519) #12
  br label %536

536:                                              ; preds = %520, %533, %532, %495, %500
  %.0384 = phi ptr [ %410, %500 ], [ %410, %495 ], [ %55, %520 ], [ %55, %533 ], [ %55, %532 ]
  %537 = load ptr, ptr %6, align 8, !tbaa !5
  %538 = tail call noalias ptr @fopen(ptr noundef %537, ptr noundef nonnull @.str.24)
  %.not461 = icmp eq ptr %538, null
  br i1 %.not461, label %539, label %546

539:                                              ; preds = %536
  %540 = load ptr, ptr @stderr, align 8, !tbaa !14
  %541 = load ptr, ptr %6, align 8, !tbaa !5
  %542 = tail call ptr @__errno_location() #15
  %543 = load i32, ptr %542, align 4, !tbaa !70
  %544 = tail call ptr @strerror(i32 noundef %543) #11
  %545 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %540, ptr noundef nonnull @.str.79, ptr noundef %541, ptr noundef %544) #12
  br label %668

546:                                              ; preds = %536
  %547 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.80) #11
  %548 = load i32, ptr %87, align 8, !tbaa !27
  %.not519 = icmp eq i32 %548, 0
  br i1 %.not519, label %.preheader470, label %.lr.ph505

.lr.ph505:                                        ; preds = %546
  %549 = getelementptr inbounds i8, ptr %0, i64 176
  br label %553

.preheader470:                                    ; preds = %567, %546
  %550 = load i32, ptr %109, align 8, !tbaa !28
  %.not520 = icmp eq i32 %550, 0
  br i1 %.not520, label %.preheader469, label %.lr.ph507

.lr.ph507:                                        ; preds = %.preheader470
  %551 = getelementptr inbounds i8, ptr %0, i64 232
  %552 = getelementptr inbounds i8, ptr %0, i64 216
  br label %573

553:                                              ; preds = %.lr.ph505, %567
  %indvars.iv545 = phi i64 [ 0, %.lr.ph505 ], [ %indvars.iv.next546, %567 ]
  %554 = load ptr, ptr %340, align 8, !tbaa !38
  %555 = getelementptr inbounds double, ptr %554, i64 %indvars.iv545
  %556 = load double, ptr %555, align 8, !tbaa !37
  %557 = fcmp ogt double %556, 0.000000e+00
  %558 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %5) #13
  %559 = getelementptr inbounds i8, ptr %5, i64 %558
  %560 = load ptr, ptr %549, align 8, !tbaa !39
  %561 = getelementptr inbounds ptr, ptr %560, i64 %indvars.iv545
  %562 = load ptr, ptr %561, align 8, !tbaa !14
  br i1 %557, label %563, label %565

563:                                              ; preds = %553
  %564 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %559, i64 noundef 65536, ptr noundef nonnull @.str.81, ptr noundef %562, double noundef %556) #11
  br label %567

565:                                              ; preds = %553
  %566 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %559, i64 noundef 65536, ptr noundef nonnull @.str.82, ptr noundef %562) #11
  br label %567

567:                                              ; preds = %563, %565
  %indvars.iv.next546 = add nuw nsw i64 %indvars.iv545, 1
  %568 = load i32, ptr %87, align 8, !tbaa !27
  %569 = zext i32 %568 to i64
  %570 = icmp ult i64 %indvars.iv.next546, %569
  br i1 %570, label %553, label %.preheader470, !llvm.loop !91

.preheader469:                                    ; preds = %590, %.preheader470
  %571 = load i32, ptr %111, align 8, !tbaa !29
  %.not521 = icmp eq i32 %571, 0
  br i1 %.not521, label %.preheader, label %.lr.ph509

.lr.ph509:                                        ; preds = %.preheader469
  %572 = getelementptr inbounds i8, ptr %0, i64 296
  br label %597

573:                                              ; preds = %.lr.ph507, %590
  %indvars.iv548 = phi i64 [ 0, %.lr.ph507 ], [ %indvars.iv.next549, %590 ]
  %574 = load ptr, ptr %350, align 8, !tbaa !43
  %575 = getelementptr inbounds double, ptr %574, i64 %indvars.iv548
  %576 = load double, ptr %575, align 8, !tbaa !37
  %577 = fcmp ult double %576, 0.000000e+00
  %578 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %5) #13
  %579 = getelementptr inbounds i8, ptr %5, i64 %578
  %580 = load ptr, ptr %551, align 8, !tbaa !44
  %581 = getelementptr inbounds ptr, ptr %580, i64 %indvars.iv548
  %582 = load ptr, ptr %581, align 8, !tbaa !14
  %583 = load ptr, ptr %552, align 8, !tbaa !45
  %584 = getelementptr inbounds ptr, ptr %583, i64 %indvars.iv548
  %585 = load ptr, ptr %584, align 8, !tbaa !14
  br i1 %577, label %588, label %586

586:                                              ; preds = %573
  %587 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %579, i64 noundef 65536, ptr noundef nonnull @.str.83, ptr noundef %582, ptr noundef %585, double noundef %576) #11
  br label %590

588:                                              ; preds = %573
  %589 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %579, i64 noundef 65536, ptr noundef nonnull @.str.84, ptr noundef %582, ptr noundef %585) #11
  br label %590

590:                                              ; preds = %586, %588
  %indvars.iv.next549 = add nuw nsw i64 %indvars.iv548, 1
  %591 = load i32, ptr %109, align 8, !tbaa !28
  %592 = zext i32 %591 to i64
  %593 = icmp ult i64 %indvars.iv.next549, %592
  br i1 %593, label %573, label %.preheader469, !llvm.loop !92

.preheader:                                       ; preds = %597, %.preheader469
  %594 = load i32, ptr %113, align 8, !tbaa !30
  %.not522 = icmp eq i32 %594, 0
  br i1 %.not522, label %._crit_edge512, label %.lr.ph511

.lr.ph511:                                        ; preds = %.preheader
  %595 = getelementptr inbounds i8, ptr %0, i64 344
  %596 = getelementptr inbounds i8, ptr %0, i64 328
  br label %607

597:                                              ; preds = %.lr.ph509, %597
  %indvars.iv551 = phi i64 [ 0, %.lr.ph509 ], [ %indvars.iv.next552, %597 ]
  %598 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %5) #13
  %599 = getelementptr inbounds i8, ptr %5, i64 %598
  %600 = load ptr, ptr %572, align 8, !tbaa !48
  %601 = getelementptr inbounds ptr, ptr %600, i64 %indvars.iv551
  %602 = load ptr, ptr %601, align 8, !tbaa !14
  %603 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %599, i64 noundef 65536, ptr noundef nonnull @.str.82, ptr noundef %602) #11
  %indvars.iv.next552 = add nuw nsw i64 %indvars.iv551, 1
  %604 = load i32, ptr %111, align 8, !tbaa !29
  %605 = zext i32 %604 to i64
  %606 = icmp ult i64 %indvars.iv.next552, %605
  br i1 %606, label %597, label %.preheader, !llvm.loop !93

607:                                              ; preds = %.lr.ph511, %607
  %indvars.iv554 = phi i64 [ 0, %.lr.ph511 ], [ %indvars.iv.next555, %607 ]
  %608 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %5) #13
  %609 = getelementptr inbounds i8, ptr %5, i64 %608
  %610 = load ptr, ptr %595, align 8, !tbaa !51
  %611 = getelementptr inbounds ptr, ptr %610, i64 %indvars.iv554
  %612 = load ptr, ptr %611, align 8, !tbaa !14
  %613 = load ptr, ptr %596, align 8, !tbaa !52
  %614 = getelementptr inbounds %struct.string_pair_s, ptr %613, i64 %indvars.iv554
  %615 = load ptr, ptr %614, align 8, !tbaa !53
  %616 = getelementptr inbounds i8, ptr %614, i64 8
  %617 = load ptr, ptr %616, align 8, !tbaa !55
  %618 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %609, i64 noundef 65536, ptr noundef nonnull @.str.85, ptr noundef %612, ptr noundef %615, ptr noundef %617) #11
  %indvars.iv.next555 = add nuw nsw i64 %indvars.iv554, 1
  %619 = load i32, ptr %113, align 8, !tbaa !30
  %620 = zext i32 %619 to i64
  %621 = icmp ult i64 %indvars.iv.next555, %620
  br i1 %621, label %607, label %._crit_edge512, !llvm.loop !94

._crit_edge512:                                   ; preds = %607, %.preheader
  %622 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %538, ptr noundef nonnull @.str.86, ptr noundef nonnull %5) #11
  %623 = load i32, ptr %167, align 8, !tbaa !16
  call void @print_data_summary(ptr noundef %.0384, i32 noundef %623) #11
  call void @print_zone_summary(ptr noundef %.0384) #11
  call void @print_term_summary(ptr noundef %.0384) #11
  %624 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.87)
  %625 = call i32 @gettimeofday(ptr noundef nonnull %2, ptr noundef null) #11
  %626 = load ptr, ptr %338, align 8, !tbaa !62
  %627 = load ptr, ptr %340, align 8, !tbaa !38
  %628 = load ptr, ptr %342, align 8, !tbaa !63
  %629 = load ptr, ptr %344, align 8, !tbaa !64
  %630 = load ptr, ptr %346, align 8, !tbaa !65
  %631 = load ptr, ptr %348, align 8, !tbaa !66
  %632 = load ptr, ptr %350, align 8, !tbaa !43
  %633 = load ptr, ptr %352, align 8, !tbaa !67
  %634 = getelementptr inbounds i8, ptr %0, i64 4
  %635 = load i32, ptr %634, align 4, !tbaa !95
  %636 = getelementptr inbounds i8, ptr %0, i64 8
  %637 = load i64, ptr %636, align 8, !tbaa !96
  %638 = getelementptr inbounds i8, ptr %0, i64 16
  %639 = load i64, ptr %638, align 8, !tbaa !97
  %640 = load i32, ptr %291, align 8, !tbaa !57
  %641 = getelementptr inbounds i8, ptr %0, i64 32
  %642 = load double, ptr %641, align 8, !tbaa !61
  %643 = load i32, ptr %118, align 8, !tbaa !18
  %644 = load i32, ptr %184, align 4, !tbaa !35
  %645 = getelementptr inbounds i8, ptr %0, i64 88
  %646 = load ptr, ptr %645, align 8, !tbaa !98
  %647 = getelementptr inbounds i8, ptr %0, i64 40
  %648 = load i32, ptr %647, align 8, !tbaa !99
  %649 = getelementptr inbounds i8, ptr %0, i64 28
  %650 = load i32, ptr %649, align 4, !tbaa !58
  %651 = load i32, ptr %137, align 8, !tbaa !33
  %652 = load i32, ptr %167, align 8, !tbaa !16
  %653 = call i32 @simulate_ergm(ptr noundef %.0384, i32 noundef %117, i32 noundef %110, i32 noundef %112, i32 noundef %114, ptr noundef %626, ptr noundef %627, ptr noundef %628, ptr noundef %629, ptr noundef %630, ptr noundef %631, ptr noundef %632, ptr noundef %633, i32 noundef %635, i64 noundef %637, i64 noundef %639, ptr noundef %193, i32 noundef %640, double noundef %642, i32 noundef %643, i32 noundef %644, ptr noundef %646, ptr noundef nonnull %538, i32 noundef %648, i32 noundef %.2467, ptr noundef %337, i32 noundef %650, i32 noundef %651, i32 noundef %652)
  %654 = call i32 @gettimeofday(ptr noundef nonnull %3, ptr noundef null) #11
  %655 = call i32 @timeval_subtract(ptr noundef nonnull %4, ptr noundef nonnull %3, ptr noundef nonnull %2) #11
  %656 = load i64, ptr %4, align 8, !tbaa !100
  %657 = mul nsw i64 %656, 1000
  %658 = getelementptr inbounds i8, ptr %4, i64 8
  %659 = load i64, ptr %658, align 8, !tbaa !102
  %660 = sdiv i64 %659, 1000
  %661 = add nsw i64 %660, %657
  %662 = trunc i64 %661 to i32
  %663 = sitofp i32 %662 to double
  %664 = fdiv double %663, 1.000000e+03
  %665 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.88, double noundef %664)
  %666 = call i32 @fclose(ptr noundef nonnull %538)
  %667 = load i32, ptr %167, align 8, !tbaa !16
  call void @print_data_summary(ptr noundef %.0384, i32 noundef %667) #11
  call void @free(ptr noundef %193) #11
  call void @free(ptr noundef %337) #11
  call void @free_graph(ptr noundef %.0384) #11
  br label %668

668:                                              ; preds = %._crit_edge512, %539, %416, %394, %387, %371, %366, %325, %319, %._crit_edge492.thread, %296, %188, %180, %176, %171, %163, %156, %151, %146, %141, %129, %122, %104, %99, %94, %89, %82, %73, %65, %47, %41, %36, %29, %23, %17, %8
  %.0 = phi i32 [ -1, %17 ], [ -1, %23 ], [ -1, %29 ], [ -1, %36 ], [ -1, %41 ], [ -1, %65 ], [ -1, %73 ], [ -1, %82 ], [ -1, %89 ], [ -1, %94 ], [ -1, %99 ], [ -1, %104 ], [ -1, %129 ], [ -1, %146 ], [ -1, %151 ], [ -1, %163 ], [ -1, %176 ], [ -1, %180 ], [ -1, %296 ], [ 1, %387 ], [ -1, %416 ], [ 0, %._crit_edge512 ], [ -1, %539 ], [ -1, %394 ], [ -1, %371 ], [ -1, %366 ], [ -1, %319 ], [ -1, %._crit_edge492.thread ], [ -1, %325 ], [ -1, %188 ], [ -1, %171 ], [ -1, %156 ], [ -1, %141 ], [ -1, %122 ], [ -1, %47 ], [ -1, %8 ]
  call void @llvm.lifetime.end.p0(i64 65536, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #11
  ret i32 %.0
}

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

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

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

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

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

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

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

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

declare ptr @safe_calloc(i64 noundef, i64 noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #9

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #10

declare i32 @get_num_vertices_from_arclist_file(ptr noundef) local_unnamed_addr #4

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

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

declare void @removeArc_all_maxtermsender_arcs(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare double @calcChangeStats(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

declare void @print_data_summary(ptr noundef, i32 noundef) local_unnamed_addr #4

declare void @print_zone_summary(ptr noundef) local_unnamed_addr #4

declare void @print_term_summary(ptr noundef) local_unnamed_addr #4

declare void @free_graph(ptr noundef) local_unnamed_addr #4

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

!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, !12, i64 80}
!6 = !{!"sim_config_s", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16, !7, i64 24, !7, i64 28, !11, i64 32, !7, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !7, i64 104, !7, i64 108, !7, i64 112, !12, i64 120, !7, i64 128, !12, i64 136, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !13, i64 160}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"param_config_s", !7, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !7, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !7, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !7, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192}
!14 = !{!12, !12, i64 0}
!15 = !{!6, !7, i64 152}
!16 = !{!6, !7, i64 144}
!17 = !{!6, !7, i64 148}
!18 = !{!6, !7, i64 104}
!19 = !{!6, !7, i64 156}
!20 = !{!6, !7, i64 0}
!21 = !{!6, !12, i64 48}
!22 = !{!6, !12, i64 56}
!23 = !{!6, !12, i64 64}
!24 = !{!6, !12, i64 72}
!25 = !{!6, !12, i64 96}
!26 = !{!6, !12, i64 120}
!27 = !{!6, !7, i64 160}
!28 = !{!6, !7, i64 200}
!29 = !{!6, !7, i64 256}
!30 = !{!6, !7, i64 312}
!31 = !{!32, !7, i64 232}
!32 = !{!"graph_s", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !7, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !7, i64 88, !7, i64 92, !7, i64 96, !12, i64 104, !12, i64 112, !7, i64 120, !12, i64 128, !12, i64 136, !7, i64 144, !12, i64 152, !12, i64 160, !7, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !12, i64 224, !7, i64 232, !7, i64 236, !12, i64 240, !12, i64 248, !7, i64 256, !12, i64 264, !7, i64 272, !12, i64 280, !12, i64 288, !7, i64 296, !7, i64 300, !12, i64 304, !7, i64 312, !12, i64 320}
!33 = !{!6, !7, i64 128}
!34 = !{!32, !7, i64 296}
!35 = !{!6, !7, i64 108}
!36 = !{!6, !12, i64 192}
!37 = !{!11, !11, i64 0}
!38 = !{!6, !12, i64 184}
!39 = !{!6, !12, i64 176}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = !{!6, !12, i64 248}
!43 = !{!6, !12, i64 240}
!44 = !{!6, !12, i64 232}
!45 = !{!6, !12, i64 216}
!46 = distinct !{!46, !41}
!47 = !{!6, !12, i64 304}
!48 = !{!6, !12, i64 296}
!49 = distinct !{!49, !41}
!50 = !{!6, !12, i64 352}
!51 = !{!6, !12, i64 344}
!52 = !{!6, !12, i64 328}
!53 = !{!54, !12, i64 0}
!54 = !{!"string_pair_s", !12, i64 0, !12, i64 8}
!55 = !{!54, !12, i64 8}
!56 = distinct !{!56, !41}
!57 = !{!6, !7, i64 24}
!58 = !{!6, !7, i64 28}
!59 = distinct !{!59, !41}
!60 = !{!6, !7, i64 112}
!61 = !{!6, !11, i64 32}
!62 = !{!6, !12, i64 168}
!63 = !{!6, !12, i64 208}
!64 = !{!6, !12, i64 264}
!65 = !{!6, !12, i64 320}
!66 = !{!6, !12, i64 224}
!67 = !{!6, !12, i64 336}
!68 = !{!32, !7, i64 4}
!69 = !{!6, !12, i64 136}
!70 = !{!7, !7, i64 0}
!71 = !{!32, !7, i64 300}
!72 = !{!32, !12, i64 304}
!73 = !{!32, !7, i64 312}
!74 = distinct !{!74, !41}
!75 = !{!32, !12, i64 320}
!76 = !{!77, !7, i64 0}
!77 = !{!"nodepair_s", !7, i64 0, !7, i64 4}
!78 = !{!77, !7, i64 4}
!79 = !{!32, !12, i64 288}
!80 = !{!81}
!81 = distinct !{!81, !82}
!82 = distinct !{!82, !"LVerDomain"}
!83 = !{!84}
!84 = distinct !{!84, !82}
!85 = distinct !{!85, !41, !86, !87}
!86 = !{!"llvm.loop.isvectorized", i32 1}
!87 = !{!"llvm.loop.unroll.runtime.disable"}
!88 = distinct !{!88, !89}
!89 = !{!"llvm.loop.unroll.disable"}
!90 = distinct !{!90, !41, !86}
!91 = distinct !{!91, !41}
!92 = distinct !{!92, !41}
!93 = distinct !{!93, !41}
!94 = distinct !{!94, !41}
!95 = !{!6, !7, i64 4}
!96 = !{!6, !10, i64 8}
!97 = !{!6, !10, i64 16}
!98 = !{!6, !12, i64 88}
!99 = !{!6, !7, i64 40}
!100 = !{!101, !10, i64 0}
!101 = !{!"timeval", !10, i64 0, !10, i64 8}
!102 = !{!101, !10, i64 8}


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