; LLVM IR from humz2k/sugaryc :: ext/bdwgc/extra (gc)

; 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._GC_arrays = type { i64, i64, i64, ptr, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i64, i64, i64, ptr, ptr, i64, i32, i64, i64, i64, %struct.dl_hashtbl_s, %struct.dl_hashtbl_s, %struct.fnlz_roots_s, i32, ptr, i64, i64, i32, i64, i64, i64, ptr, [64 x ptr], [8 x i8], [64 x ptr], [129 x ptr], [129 x ptr], [129 x ptr], [2049 x i64], [129 x ptr], [4096 x i8], [4096 x i64], [4096 x i64], ptr, [2048 x %struct.roots], [512 x %struct.exclusion], [2048 x ptr] }
%struct.dl_hashtbl_s = type { ptr, i64, i32 }
%struct.fnlz_roots_s = type { ptr, ptr }
%struct.roots = type { ptr, ptr, ptr, i32 }
%struct.exclusion = type { ptr, ptr }
%struct.timespec = type { i64, i64 }
%struct.obj_kind = type { ptr, ptr, i64, i32, i32 }

@GC_all_interior_pointers = external dso_local global i32, align 4
@GC_arrays = external dso_local global %struct._GC_arrays, align 8
@GC_is_initialized = external hidden global i32, align 4
@GC_incremental = external hidden global i32, align 4
@GC_full_freq = external dso_local global i32, align 4
@GC_free_space_divisor = external dso_local global i64, align 8
@GC_time_limit = external dso_local global i64, align 8
@GC_dont_gc = external dso_local global i32, align 4
@GC_max_retries = external dso_local global i64, align 8
@GC_on_abort = external dso_local global ptr, align 8
@GC_find_leak = external dso_local global i32, align 4
@GC_findleak_delay_free = external hidden global i32, align 4
@GC_current_warn_proc = external hidden global ptr, align 8
@GC_stackbottom = external dso_local global ptr, align 8
@GC_dont_precollect = external dso_local global i32, align 4
@GC_log = external hidden global i32, align 4
@.str.55 = external hidden unnamed_addr constant [23 x i8], align 1
@GC_print_stats = external hidden global i32, align 4
@.str.56 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [20 x i8], align 1
@GC_stdout = external hidden global i32, align 4
@GC_stderr = external hidden global i32, align 4
@.str.60 = external hidden unnamed_addr constant [18 x i8], align 1
@GC_dump_regularly = external hidden global i32, align 4
@.str.61 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [21 x i8], align 1
@GC_print_back_height = external hidden global i32, align 4
@.str.66 = external hidden unnamed_addr constant [24 x i8], align 1
@GC_large_alloc_warn_interval = external hidden global i64, align 8
@.str.67 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [22 x i8], align 1
@GC_init_time = external hidden global %struct.timespec, align 8
@.str.74 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [35 x i8], align 1
@GC_obj_kinds = external hidden global <{ %struct.obj_kind, %struct.obj_kind, %struct.obj_kind, [13 x %struct.obj_kind] }>, align 16

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

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

; Function Attrs: nounwind uwtable
declare hidden void @GC_register_displacement_inner(i64 noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @GC_init() #1 {
  %1 = alloca i64, align 8
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %1) #7
  %19 = load i32, ptr @GC_is_initialized, align 4, !tbaa !5
  %20 = sext i32 %19 to i64
  %21 = call i64 @llvm.expect.i64(i64 %20, i64 1)
  %22 = icmp ne i64 %21, 0
  br i1 %22, label %23, label %24

23:                                               ; preds = %0
  store i32 1, ptr %2, align 4
  br label %269

24:                                               ; preds = %0
  store i64 65536, ptr %1, align 8, !tbaa !9
  call void @GC_setpagesize()
  %25 = call ptr @getenv(ptr noundef @.str.55) #7
  %26 = icmp ne ptr null, %25
  br i1 %26, label %27, label %28

27:                                               ; preds = %24
  store i32 2, ptr @GC_print_stats, align 4, !tbaa !5
  br label %33

28:                                               ; preds = %24
  %29 = call ptr @getenv(ptr noundef @.str.56) #7
  %30 = icmp ne ptr null, %29
  br i1 %30, label %31, label %32

31:                                               ; preds = %28
  store i32 1, ptr @GC_print_stats, align 4, !tbaa !5
  br label %32

32:                                               ; preds = %31, %28
  br label %33

33:                                               ; preds = %32, %27
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  %34 = call ptr @getenv(ptr noundef @.str.57) #7
  %35 = ptrtoint ptr %34 to i64
  %36 = inttoptr i64 %35 to ptr
  store ptr %36, ptr %3, align 8, !tbaa !11
  %37 = load ptr, ptr %3, align 8, !tbaa !11
  %38 = icmp ne ptr null, %37
  br i1 %38, label %39, label %67

39:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #7
  %40 = load ptr, ptr %3, align 8, !tbaa !11
  %41 = call i32 (ptr, i32, ...) @open(ptr noundef %40, i32 noundef 1089, i32 noundef 420)
  store i32 %41, ptr %4, align 4, !tbaa !5
  %42 = load i32, ptr %4, align 4, !tbaa !5
  %43 = icmp slt i32 %42, 0
  br i1 %43, label %44, label %46

44:                                               ; preds = %39
  %45 = load ptr, ptr %3, align 8, !tbaa !11
  call void (ptr, ...) @GC_err_printf(ptr noundef @.str.58, ptr noundef %45)
  br label %66

46:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  %47 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %47, ptr @GC_log, align 4, !tbaa !5
  %48 = call ptr @getenv(ptr noundef @.str.59) #7
  store ptr %48, ptr %5, align 8, !tbaa !11
  %49 = load ptr, ptr %5, align 8, !tbaa !11
  %50 = icmp eq ptr %49, null
  br i1 %50, label %62, label %51

51:                                               ; preds = %46
  %52 = load ptr, ptr %5, align 8, !tbaa !11
  %53 = load i8, ptr %52, align 1, !tbaa !13
  %54 = sext i8 %53 to i32
  %55 = icmp eq i32 %54, 48
  br i1 %55, label %56, label %65

56:                                               ; preds = %51
  %57 = load ptr, ptr %5, align 8, !tbaa !11
  %58 = getelementptr inbounds i8, ptr %57, i64 1
  %59 = load i8, ptr %58, align 1, !tbaa !13
  %60 = sext i8 %59 to i32
  %61 = icmp eq i32 %60, 0
  br i1 %61, label %62, label %65

62:                                               ; preds = %56, %46
  %63 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %63, ptr @GC_stdout, align 4, !tbaa !5
  %64 = load i32, ptr %4, align 4, !tbaa !5
  store i32 %64, ptr @GC_stderr, align 4, !tbaa !5
  br label %65

65:                                               ; preds = %62, %56, %51
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  br label %66

66:                                               ; preds = %65, %44
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #7
  br label %67

67:                                               ; preds = %66, %33
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  %68 = call ptr @getenv(ptr noundef @.str.60) #7
  %69 = icmp ne ptr null, %68
  br i1 %69, label %70, label %71

70:                                               ; preds = %67
  store i32 1, ptr @GC_dump_regularly, align 4, !tbaa !5
  br label %71

71:                                               ; preds = %70, %67
  %72 = call ptr @getenv(ptr noundef @.str.61) #7
  %73 = icmp ne ptr null, %72
  br i1 %73, label %74, label %75

74:                                               ; preds = %71
  store i32 1, ptr @GC_find_leak, align 4, !tbaa !5
  br label %75

75:                                               ; preds = %74, %71
  %76 = call ptr @getenv(ptr noundef @.str.62) #7
  %77 = icmp ne ptr null, %76
  br i1 %77, label %78, label %79

78:                                               ; preds = %75
  store i32 1, ptr @GC_findleak_delay_free, align 4, !tbaa !5
  br label %79

79:                                               ; preds = %78, %75
  %80 = call ptr @getenv(ptr noundef @.str.63) #7
  %81 = icmp ne ptr null, %80
  br i1 %81, label %82, label %83

82:                                               ; preds = %79
  store i32 1, ptr @GC_all_interior_pointers, align 4, !tbaa !5
  br label %83

83:                                               ; preds = %82, %79
  %84 = call ptr @getenv(ptr noundef @.str.64) #7
  %85 = icmp ne ptr null, %84
  br i1 %85, label %86, label %87

86:                                               ; preds = %83
  store i32 1, ptr @GC_dont_gc, align 4, !tbaa !5
  br label %87

87:                                               ; preds = %86, %83
  %88 = call ptr @getenv(ptr noundef @.str.65) #7
  %89 = icmp ne ptr null, %88
  br i1 %89, label %90, label %91

90:                                               ; preds = %87
  store i32 1, ptr @GC_print_back_height, align 4, !tbaa !5
  br label %91

91:                                               ; preds = %90, %87
  %92 = call ptr @getenv(ptr noundef @.str.66) #7
  %93 = icmp ne ptr null, %92
  br i1 %93, label %94, label %95

94:                                               ; preds = %91
  store i64 9223372036854775807, ptr @GC_large_alloc_warn_interval, align 8, !tbaa !9
  br label %95

95:                                               ; preds = %94, %91
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %96 = call ptr @getenv(ptr noundef @.str.67) #7
  store ptr %96, ptr %6, align 8, !tbaa !11
  %97 = load ptr, ptr %6, align 8, !tbaa !11
  %98 = icmp ne ptr null, %97
  br i1 %98, label %99, label %101

99:                                               ; preds = %95
  %100 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !11
  call void %100(ptr noundef @.str.68, i64 noundef 0)
  br label %101

101:                                              ; preds = %99, %95
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  %102 = call ptr @getenv(ptr noundef @.str.69) #7
  store ptr %102, ptr %7, align 8, !tbaa !11
  %103 = load ptr, ptr %7, align 8, !tbaa !11
  %104 = icmp ne ptr null, %103
  br i1 %104, label %105, label %113

105:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %106 = load ptr, ptr %7, align 8, !tbaa !11
  %107 = call i64 @atol(ptr noundef %106) #8
  store i64 %107, ptr %8, align 8, !tbaa !9
  %108 = load i64, ptr %8, align 8, !tbaa !9
  %109 = icmp sgt i64 %108, 0
  br i1 %109, label %110, label %112

110:                                              ; preds = %105
  %111 = load i64, ptr %8, align 8, !tbaa !9
  store i64 %111, ptr @GC_time_limit, align 8, !tbaa !9
  br label %112

112:                                              ; preds = %110, %105
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %113

113:                                              ; preds = %112, %101
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %114 = call ptr @getenv(ptr noundef @.str.70) #7
  store ptr %114, ptr %9, align 8, !tbaa !11
  %115 = load ptr, ptr %9, align 8, !tbaa !11
  %116 = icmp ne ptr %115, null
  br i1 %116, label %117, label %125

117:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %118 = load ptr, ptr %9, align 8, !tbaa !11
  %119 = call i32 @atoi(ptr noundef %118) #8
  store i32 %119, ptr %10, align 4, !tbaa !5
  %120 = load i32, ptr %10, align 4, !tbaa !5
  %121 = icmp sgt i32 %120, 0
  br i1 %121, label %122, label %124

122:                                              ; preds = %117
  %123 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %123, ptr @GC_full_freq, align 4, !tbaa !5
  br label %124

124:                                              ; preds = %122, %117
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %125

125:                                              ; preds = %124, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  %126 = call ptr @getenv(ptr noundef @.str.71) #7
  store ptr %126, ptr %11, align 8, !tbaa !11
  %127 = load ptr, ptr %11, align 8, !tbaa !11
  %128 = icmp ne ptr null, %127
  br i1 %128, label %129, label %139

129:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %130 = load ptr, ptr %11, align 8, !tbaa !11
  %131 = call i64 @atol(ptr noundef %130) #8
  store i64 %131, ptr %12, align 8, !tbaa !9
  %132 = load i64, ptr %12, align 8, !tbaa !9
  %133 = icmp sle i64 %132, 0
  br i1 %133, label %134, label %136

134:                                              ; preds = %129
  %135 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !11
  call void %135(ptr noundef @.str.72, i64 noundef 0)
  br label %138

136:                                              ; preds = %129
  %137 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %137, ptr @GC_large_alloc_warn_interval, align 8, !tbaa !9
  br label %138

138:                                              ; preds = %136, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  br label %139

139:                                              ; preds = %138, %125
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  %140 = call ptr @getenv(ptr noundef @.str.73) #7
  store ptr %140, ptr %13, align 8, !tbaa !11
  %141 = load ptr, ptr %13, align 8, !tbaa !11
  %142 = icmp ne ptr %141, null
  br i1 %142, label %143, label %152

143:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %144 = load ptr, ptr %13, align 8, !tbaa !11
  %145 = call i32 @atoi(ptr noundef %144) #8
  store i32 %145, ptr %14, align 4, !tbaa !5
  %146 = load i32, ptr %14, align 4, !tbaa !5
  %147 = icmp sgt i32 %146, 0
  br i1 %147, label %148, label %151

148:                                              ; preds = %143
  %149 = load i32, ptr %14, align 4, !tbaa !5
  %150 = zext i32 %149 to i64
  store i64 %150, ptr @GC_free_space_divisor, align 8, !tbaa !9
  br label %151

151:                                              ; preds = %148, %143
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  br label %152

152:                                              ; preds = %151, %139
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %153

153:                                              ; preds = %152
  %154 = call i32 @clock_gettime(i32 noundef 1, ptr noundef @GC_init_time) #7
  %155 = icmp eq i32 %154, -1
  br i1 %155, label %156, label %158

156:                                              ; preds = %153
  %157 = load ptr, ptr @GC_on_abort, align 8, !tbaa !11
  call void %157(ptr noundef @.str.74)
  call void @abort() #9
  unreachable

158:                                              ; preds = %153
  br label %159

159:                                              ; preds = %158
  br label %160

160:                                              ; preds = %159
  call void @maybe_install_looping_handler()
  %161 = load i32, ptr @GC_all_interior_pointers, align 4, !tbaa !5
  %162 = sext i32 %161 to i64
  %163 = icmp ne i64 %162, 0
  br i1 %163, label %164, label %165

164:                                              ; preds = %160
  store i64 -8, ptr getelementptr inbounds (%struct.obj_kind, ptr getelementptr inbounds ([16 x %struct.obj_kind], ptr @GC_obj_kinds, i64 0, i64 1), i32 0, i32 2), align 16, !tbaa !14
  br label %165

165:                                              ; preds = %164, %160
  call void @GC_exclude_static_roots_inner(ptr noundef @GC_arrays, ptr noundef getelementptr inbounds (i8, ptr @GC_arrays, i64 181712))
  call void @GC_exclude_static_roots_inner(ptr noundef @GC_obj_kinds, ptr noundef getelementptr inbounds (i8, ptr @GC_obj_kinds, i64 512))
  %166 = load ptr, ptr @GC_stackbottom, align 8, !tbaa !11
  %167 = icmp eq ptr %166, null
  br i1 %167, label %168, label %170

168:                                              ; preds = %165
  %169 = call ptr @GC_get_main_stack_base()
  store ptr %169, ptr @GC_stackbottom, align 8, !tbaa !11
  br label %171

170:                                              ; preds = %165
  br label %171

171:                                              ; preds = %170, %168
  call void @GC_init_headers()
  %172 = call i32 @GC_register_main_static_data()
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %174, label %175

174:                                              ; preds = %171
  call void @GC_init_linux_data_start()
  br label %175

175:                                              ; preds = %174, %171
  %176 = load i32, ptr @GC_incremental, align 4, !tbaa !5
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %181, label %178

178:                                              ; preds = %175
  %179 = call ptr @getenv(ptr noundef @.str.75) #7
  %180 = icmp ne ptr null, %179
  br i1 %180, label %181, label %182

181:                                              ; preds = %178, %175
  call void @set_incremental_mode_on()
  br label %182

182:                                              ; preds = %181, %178
  %183 = call i32 @GC_register_main_static_data()
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %185, label %186

185:                                              ; preds = %182
  call void @GC_register_data_segments()
  br label %186

186:                                              ; preds = %185, %182
  call void @GC_bl_init()
  call void @GC_mark_init()
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %187 = call ptr @getenv(ptr noundef @.str.76) #7
  store ptr %187, ptr %15, align 8, !tbaa !11
  %188 = load ptr, ptr %15, align 8, !tbaa !11
  %189 = icmp ne ptr %188, null
  br i1 %189, label %190, label %202

190:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %191 = load ptr, ptr %15, align 8, !tbaa !11
  %192 = call i64 @GC_parse_mem_size_arg(ptr noundef %191)
  store i64 %192, ptr %16, align 8, !tbaa !9
  %193 = load i64, ptr %16, align 8, !tbaa !9
  %194 = icmp eq i64 -1, %193
  br i1 %194, label %195, label %199

195:                                              ; preds = %190
  %196 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !11
  %197 = load ptr, ptr %15, align 8, !tbaa !11
  %198 = ptrtoint ptr %197 to i64
  call void %196(ptr noundef @.str.77, i64 noundef %198)
  br label %201

199:                                              ; preds = %190
  %200 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %200, ptr %1, align 8, !tbaa !9
  br label %201

201:                                              ; preds = %199, %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %202

202:                                              ; preds = %201, %186
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %203 = call ptr @getenv(ptr noundef @.str.78) #7
  store ptr %203, ptr %17, align 8, !tbaa !11
  %204 = load ptr, ptr %17, align 8, !tbaa !11
  %205 = icmp ne ptr %204, null
  br i1 %205, label %206, label %226

206:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %207 = load ptr, ptr %17, align 8, !tbaa !11
  %208 = call i64 @GC_parse_mem_size_arg(ptr noundef %207)
  store i64 %208, ptr %18, align 8, !tbaa !9
  %209 = load i64, ptr %18, align 8, !tbaa !9
  %210 = load i64, ptr %1, align 8, !tbaa !9
  %211 = icmp ult i64 %209, %210
  br i1 %211, label %215, label %212

212:                                              ; preds = %206
  %213 = load i64, ptr %18, align 8, !tbaa !9
  %214 = icmp eq i64 -1, %213
  br i1 %214, label %215, label %219

215:                                              ; preds = %212, %206
  %216 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !11
  %217 = load ptr, ptr %17, align 8, !tbaa !11
  %218 = ptrtoint ptr %217 to i64
  call void %216(ptr noundef @.str.79, i64 noundef %218)
  br label %225

219:                                              ; preds = %212
  %220 = load i64, ptr @GC_max_retries, align 8, !tbaa !9
  %221 = icmp eq i64 0, %220
  br i1 %221, label %222, label %223

222:                                              ; preds = %219
  store i64 2, ptr @GC_max_retries, align 8, !tbaa !9
  br label %223

223:                                              ; preds = %222, %219
  %224 = load i64, ptr %18, align 8, !tbaa !9
  call void @GC_set_max_heap_size(i64 noundef %224)
  br label %225

225:                                              ; preds = %223, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %226

226:                                              ; preds = %225, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  %227 = load i64, ptr %1, align 8, !tbaa !9
  %228 = icmp ne i64 %227, 0
  br i1 %228, label %229, label %241

229:                                              ; preds = %226
  %230 = load i64, ptr %1, align 8, !tbaa !9
  %231 = lshr i64 %230, 12
  %232 = call i32 @GC_expand_hp_inner(i64 noundef %231)
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %236, label %234

234:                                              ; preds = %229
  call void (ptr, ...) @GC_err_printf(ptr noundef @.str.80)
  %235 = load ptr, ptr @GC_on_abort, align 8, !tbaa !11
  call void %235(ptr noundef null)
  call void @exit(i32 noundef 1) #9
  unreachable

236:                                              ; preds = %229
  %237 = load i64, ptr %1, align 8, !tbaa !9
  %238 = load i64, ptr getelementptr inbounds (%struct._GC_arrays, ptr @GC_arrays, i32 0, i32 1), align 8, !tbaa !16
  %239 = add i64 %238, %237
  store i64 %239, ptr getelementptr inbounds (%struct._GC_arrays, ptr @GC_arrays, i32 0, i32 1), align 8, !tbaa !16
  br label %240

240:                                              ; preds = %236
  br label %241

241:                                              ; preds = %240, %226
  %242 = load i32, ptr @GC_all_interior_pointers, align 4, !tbaa !5
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %244, label %245

244:                                              ; preds = %241
  call void @GC_initialize_offsets()
  br label %245

245:                                              ; preds = %244, %241
  call void @GC_register_displacement_inner(i64 noundef 0)
  call void @GC_init_size_map()
  store i32 1, ptr @GC_is_initialized, align 4, !tbaa !5
  %246 = load i32, ptr @GC_dump_regularly, align 4, !tbaa !5
  %247 = sext i32 %246 to i64
  %248 = call i64 @llvm.expect.i64(i64 %247, i64 0)
  %249 = icmp ne i64 %248, 0
  br i1 %249, label %250, label %251

250:                                              ; preds = %245
  call void @GC_dump_named(ptr noundef null)
  br label %255

251:                                              ; preds = %245
  br label %252

252:                                              ; preds = %251
  br label %253

253:                                              ; preds = %252
  br label %254

254:                                              ; preds = %253
  br label %255

255:                                              ; preds = %254, %250
  %256 = load i32, ptr @GC_dont_precollect, align 4, !tbaa !5
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %258, label %261

258:                                              ; preds = %255
  %259 = load i32, ptr @GC_incremental, align 4, !tbaa !5
  %260 = icmp ne i32 %259, 0
  br i1 %260, label %261, label %263

261:                                              ; preds = %258, %255
  %262 = call i32 @GC_try_to_collect_inner(ptr noundef @GC_never_stop_func)
  br label %263

263:                                              ; preds = %261, %258
  %264 = load i32, ptr @GC_find_leak, align 4, !tbaa !5
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %268

266:                                              ; preds = %263
  %267 = call i32 @atexit(ptr noundef @GC_exit_check) #7
  br label %268

268:                                              ; preds = %266, %263
  store i32 0, ptr %2, align 4
  br label %269

269:                                              ; preds = %268, %23
  call void @llvm.lifetime.end.p0(i64 8, ptr %1) #7
  %270 = load i32, ptr %2, align 4
  switch i32 %270, label %272 [
    i32 0, label %271
    i32 1, label %271
  ]

271:                                              ; preds = %269, %269
  ret void

272:                                              ; preds = %269
  unreachable
}

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

; Function Attrs: nounwind uwtable
declare hidden i32 @GC_never_stop_func() #1

; Function Attrs: nounwind uwtable
declare dso_local void @GC_set_max_heap_size(i64 noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @GC_expand_hp_inner(i64 noundef) #1

; Function Attrs: noreturn nounwind
declare void @abort() #3

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

; Function Attrs: nounwind uwtable
declare hidden void @GC_setpagesize() #1

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

declare i32 @open(ptr noundef, i32 noundef, ...) #5

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i64 @atol(ptr noundef nonnull) #6

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #6

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

; Function Attrs: nounwind uwtable
declare hidden void @maybe_install_looping_handler() #1

; Function Attrs: nounwind uwtable
declare dso_local ptr @GC_get_main_stack_base() #1

; Function Attrs: nounwind uwtable
declare hidden void @GC_init_headers() #1

; Function Attrs: nounwind uwtable
declare hidden i32 @GC_register_main_static_data() #1

; Function Attrs: nounwind uwtable
declare hidden void @GC_init_linux_data_start() #1

; Function Attrs: nounwind uwtable
declare hidden void @set_incremental_mode_on() #1

; Function Attrs: nounwind uwtable
declare dso_local void @GC_register_data_segments() #1

; Function Attrs: nounwind uwtable
declare hidden void @GC_bl_init() #1

; Function Attrs: nounwind uwtable
declare hidden void @GC_mark_init() #1

; Function Attrs: nounwind uwtable
declare hidden i64 @GC_parse_mem_size_arg(ptr noundef) #1

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @GC_initialize_offsets() #1

; Function Attrs: nounwind uwtable
declare hidden void @GC_init_size_map() #1

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

; Function Attrs: nounwind uwtable
declare hidden i32 @GC_try_to_collect_inner(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
declare hidden void @GC_exit_check() #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !10, i64 16}
!15 = !{!"obj_kind", !12, i64 0, !12, i64 8, !10, i64 16, !6, i64 24, !6, i64 28}
!16 = !{!17, !10, i64 8}
!17 = !{!"_GC_arrays", !10, i64 0, !10, i64 8, !10, i64 16, !12, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !12, i64 216, !12, i64 224, !10, i64 232, !6, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !18, i64 272, !18, i64 296, !19, i64 320, !6, i64 336, !12, i64 344, !10, i64 352, !10, i64 360, !6, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !12, i64 400, !7, i64 408, !7, i64 920, !7, i64 928, !7, i64 1440, !7, i64 2472, !7, i64 3504, !7, i64 4536, !7, i64 20928, !7, i64 21960, !7, i64 26056, !7, i64 58824, !12, i64 91592, !7, i64 91600, !7, i64 157136, !7, i64 165328}
!18 = !{!"dl_hashtbl_s", !12, i64 0, !10, i64 8, !6, i64 16}
!19 = !{!"fnlz_roots_s", !12, i64 0, !12, 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._GC_arrays = type { i64, i64, i64, ptr, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i64, i64, i64, ptr, ptr, i64, i32, i64, i64, i64, %struct.dl_hashtbl_s, %struct.dl_hashtbl_s, %struct.fnlz_roots_s, i32, ptr, i64, i64, i32, i64, i64, i64, ptr, [64 x ptr], [8 x i8], [64 x ptr], [129 x ptr], [129 x ptr], [129 x ptr], [2049 x i64], [129 x ptr], [4096 x i8], [4096 x i64], [4096 x i64], ptr, [2048 x %struct.roots], [512 x %struct.exclusion], [2048 x ptr] }
%struct.dl_hashtbl_s = type { ptr, i64, i32 }
%struct.fnlz_roots_s = type { ptr, ptr }
%struct.roots = type { ptr, ptr, ptr, i32 }
%struct.exclusion = type { ptr, ptr }
%struct.timespec = type { i64, i64 }
%struct.obj_kind = type { ptr, ptr, i64, i32, i32 }

@GC_all_interior_pointers = external dso_local local_unnamed_addr global i32, align 4
@GC_arrays = external dso_local global %struct._GC_arrays, align 8
@GC_is_initialized = external hidden local_unnamed_addr global i32, align 4
@GC_incremental = external hidden local_unnamed_addr global i32, align 4
@GC_full_freq = external dso_local local_unnamed_addr global i32, align 4
@GC_free_space_divisor = external dso_local local_unnamed_addr global i64, align 8
@GC_time_limit = external dso_local local_unnamed_addr global i64, align 8
@GC_dont_gc = external dso_local local_unnamed_addr global i32, align 4
@GC_max_retries = external dso_local local_unnamed_addr global i64, align 8
@GC_on_abort = external dso_local local_unnamed_addr global ptr, align 8
@GC_find_leak = external dso_local local_unnamed_addr global i32, align 4
@GC_findleak_delay_free = external hidden local_unnamed_addr global i32, align 4
@GC_current_warn_proc = external hidden local_unnamed_addr global ptr, align 8
@GC_stackbottom = external dso_local local_unnamed_addr global ptr, align 8
@GC_dont_precollect = external dso_local local_unnamed_addr global i32, align 4
@GC_log = external hidden local_unnamed_addr global i32, align 4
@.str.55 = external hidden unnamed_addr constant [23 x i8], align 1
@GC_print_stats = external hidden local_unnamed_addr global i32, align 4
@.str.56 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [20 x i8], align 1
@GC_stdout = external hidden local_unnamed_addr global i32, align 4
@GC_stderr = external hidden local_unnamed_addr global i32, align 4
@.str.60 = external hidden unnamed_addr constant [18 x i8], align 1
@GC_dump_regularly = external hidden local_unnamed_addr global i32, align 4
@.str.61 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [21 x i8], align 1
@GC_print_back_height = external hidden local_unnamed_addr global i32, align 4
@.str.66 = external hidden unnamed_addr constant [24 x i8], align 1
@GC_large_alloc_warn_interval = external hidden local_unnamed_addr global i64, align 8
@.str.67 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [22 x i8], align 1
@GC_init_time = external hidden global %struct.timespec, align 8
@.str.74 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [35 x i8], align 1
@GC_obj_kinds = external hidden global <{ %struct.obj_kind, %struct.obj_kind, %struct.obj_kind, [13 x %struct.obj_kind] }>, align 16

; Function Attrs: nounwind uwtable
declare hidden void @GC_register_displacement_inner(i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @GC_init() local_unnamed_addr #0 {
  %1 = load i32, ptr @GC_is_initialized, align 4, !tbaa !5
  %.not = icmp eq i32 %1, 0
  br i1 %.not, label %2, label %147, !prof !9

2:                                                ; preds = %0
  tail call void @GC_setpagesize()
  %3 = tail call ptr @getenv(ptr noundef nonnull @.str.55) #7
  %.not59 = icmp eq ptr %3, null
  br i1 %.not59, label %4, label %.sink.split

4:                                                ; preds = %2
  %5 = tail call ptr @getenv(ptr noundef nonnull @.str.56) #7
  %.not60 = icmp eq ptr %5, null
  br i1 %.not60, label %6, label %.sink.split

.sink.split:                                      ; preds = %4, %2
  %.sink = phi i32 [ 2, %2 ], [ 1, %4 ]
  store i32 %.sink, ptr @GC_print_stats, align 4, !tbaa !5
  br label %6

6:                                                ; preds = %.sink.split, %4
  %7 = tail call ptr @getenv(ptr noundef nonnull @.str.57) #7
  %.not61 = icmp eq ptr %7, null
  br i1 %.not61, label %23, label %8

8:                                                ; preds = %6
  %9 = tail call i32 (ptr, i32, ...) @open(ptr noundef nonnull %7, i32 noundef 1089, i32 noundef 420) #7
  %10 = icmp slt i32 %9, 0
  br i1 %10, label %11, label %12

11:                                               ; preds = %8
  tail call void (ptr, ...) @GC_err_printf(ptr noundef nonnull @.str.58, ptr noundef nonnull %7)
  br label %23

12:                                               ; preds = %8
  store i32 %9, ptr @GC_log, align 4, !tbaa !5
  %13 = tail call ptr @getenv(ptr noundef nonnull @.str.59) #7
  %14 = icmp eq ptr %13, null
  br i1 %14, label %22, label %15

15:                                               ; preds = %12
  %16 = load i8, ptr %13, align 1, !tbaa !10
  %17 = icmp eq i8 %16, 48
  br i1 %17, label %18, label %23

18:                                               ; preds = %15
  %19 = getelementptr inbounds i8, ptr %13, i64 1
  %20 = load i8, ptr %19, align 1, !tbaa !10
  %21 = icmp eq i8 %20, 0
  br i1 %21, label %22, label %23

22:                                               ; preds = %18, %12
  store i32 %9, ptr @GC_stdout, align 4, !tbaa !5
  store i32 %9, ptr @GC_stderr, align 4, !tbaa !5
  br label %23

23:                                               ; preds = %11, %22, %18, %15, %6
  %24 = tail call ptr @getenv(ptr noundef nonnull @.str.60) #7
  %.not62 = icmp eq ptr %24, null
  br i1 %.not62, label %26, label %25

25:                                               ; preds = %23
  store i32 1, ptr @GC_dump_regularly, align 4, !tbaa !5
  br label %26

26:                                               ; preds = %25, %23
  %27 = tail call ptr @getenv(ptr noundef nonnull @.str.61) #7
  %.not63 = icmp eq ptr %27, null
  br i1 %.not63, label %29, label %28

28:                                               ; preds = %26
  store i32 1, ptr @GC_find_leak, align 4, !tbaa !5
  br label %29

29:                                               ; preds = %28, %26
  %30 = tail call ptr @getenv(ptr noundef nonnull @.str.62) #7
  %.not64 = icmp eq ptr %30, null
  br i1 %.not64, label %32, label %31

31:                                               ; preds = %29
  store i32 1, ptr @GC_findleak_delay_free, align 4, !tbaa !5
  br label %32

32:                                               ; preds = %31, %29
  %33 = tail call ptr @getenv(ptr noundef nonnull @.str.63) #7
  %.not65 = icmp eq ptr %33, null
  br i1 %.not65, label %35, label %34

34:                                               ; preds = %32
  store i32 1, ptr @GC_all_interior_pointers, align 4, !tbaa !5
  br label %35

35:                                               ; preds = %34, %32
  %36 = tail call ptr @getenv(ptr noundef nonnull @.str.64) #7
  %.not66 = icmp eq ptr %36, null
  br i1 %.not66, label %38, label %37

37:                                               ; preds = %35
  store i32 1, ptr @GC_dont_gc, align 4, !tbaa !5
  br label %38

38:                                               ; preds = %37, %35
  %39 = tail call ptr @getenv(ptr noundef nonnull @.str.65) #7
  %.not67 = icmp eq ptr %39, null
  br i1 %.not67, label %41, label %40

40:                                               ; preds = %38
  store i32 1, ptr @GC_print_back_height, align 4, !tbaa !5
  br label %41

41:                                               ; preds = %40, %38
  %42 = tail call ptr @getenv(ptr noundef nonnull @.str.66) #7
  %.not68 = icmp eq ptr %42, null
  br i1 %.not68, label %44, label %43

43:                                               ; preds = %41
  store i64 9223372036854775807, ptr @GC_large_alloc_warn_interval, align 8, !tbaa !11
  br label %44

44:                                               ; preds = %43, %41
  %45 = tail call ptr @getenv(ptr noundef nonnull @.str.67) #7
  %.not69 = icmp eq ptr %45, null
  br i1 %.not69, label %48, label %46

46:                                               ; preds = %44
  %47 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !13
  tail call void %47(ptr noundef nonnull @.str.68, i64 noundef 0) #7
  br label %48

48:                                               ; preds = %46, %44
  %49 = tail call ptr @getenv(ptr noundef nonnull @.str.69) #7
  %.not70 = icmp eq ptr %49, null
  br i1 %.not70, label %54, label %50

50:                                               ; preds = %48
  %51 = tail call i64 @atol(ptr nocapture noundef %49) #8
  %52 = icmp sgt i64 %51, 0
  br i1 %52, label %53, label %54

53:                                               ; preds = %50
  store i64 %51, ptr @GC_time_limit, align 8, !tbaa !11
  br label %54

54:                                               ; preds = %50, %53, %48
  %55 = tail call ptr @getenv(ptr noundef nonnull @.str.70) #7
  %.not71 = icmp eq ptr %55, null
  br i1 %.not71, label %60, label %56

56:                                               ; preds = %54
  %57 = tail call i32 @atoi(ptr nocapture noundef %55) #8
  %58 = icmp sgt i32 %57, 0
  br i1 %58, label %59, label %60

59:                                               ; preds = %56
  store i32 %57, ptr @GC_full_freq, align 4, !tbaa !5
  br label %60

60:                                               ; preds = %56, %59, %54
  %61 = tail call ptr @getenv(ptr noundef nonnull @.str.71) #7
  %.not72 = icmp eq ptr %61, null
  br i1 %.not72, label %68, label %62

62:                                               ; preds = %60
  %63 = tail call i64 @atol(ptr nocapture noundef %61) #8
  %64 = icmp slt i64 %63, 1
  br i1 %64, label %65, label %67

65:                                               ; preds = %62
  %66 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !13
  tail call void %66(ptr noundef nonnull @.str.72, i64 noundef 0) #7
  br label %68

67:                                               ; preds = %62
  store i64 %63, ptr @GC_large_alloc_warn_interval, align 8, !tbaa !11
  br label %68

68:                                               ; preds = %65, %67, %60
  %69 = tail call ptr @getenv(ptr noundef nonnull @.str.73) #7
  %.not73 = icmp eq ptr %69, null
  br i1 %.not73, label %75, label %70

70:                                               ; preds = %68
  %71 = tail call i32 @atoi(ptr nocapture noundef %69) #8
  %72 = icmp sgt i32 %71, 0
  br i1 %72, label %73, label %75

73:                                               ; preds = %70
  %74 = zext nneg i32 %71 to i64
  store i64 %74, ptr @GC_free_space_divisor, align 8, !tbaa !11
  br label %75

75:                                               ; preds = %70, %73, %68
  %76 = tail call i32 @clock_gettime(i32 noundef 1, ptr noundef nonnull @GC_init_time) #7
  %77 = icmp eq i32 %76, -1
  br i1 %77, label %78, label %80

78:                                               ; preds = %75
  %79 = load ptr, ptr @GC_on_abort, align 8, !tbaa !13
  tail call void %79(ptr noundef nonnull @.str.74) #7
  tail call void @abort() #9
  unreachable

80:                                               ; preds = %75
  tail call void @maybe_install_looping_handler()
  %81 = load i32, ptr @GC_all_interior_pointers, align 4, !tbaa !5
  %.not74 = icmp eq i32 %81, 0
  br i1 %.not74, label %83, label %82

82:                                               ; preds = %80
  store i64 -8, ptr getelementptr inbounds (i8, ptr @GC_obj_kinds, i64 48), align 16, !tbaa !15
  br label %83

83:                                               ; preds = %82, %80
  tail call void @GC_exclude_static_roots_inner(ptr noundef nonnull @GC_arrays, ptr noundef nonnull getelementptr inbounds (i8, ptr @GC_arrays, i64 181712))
  tail call void @GC_exclude_static_roots_inner(ptr noundef nonnull @GC_obj_kinds, ptr noundef nonnull getelementptr inbounds (i8, ptr @GC_obj_kinds, i64 512))
  %84 = load ptr, ptr @GC_stackbottom, align 8, !tbaa !13
  %85 = icmp eq ptr %84, null
  br i1 %85, label %86, label %88

86:                                               ; preds = %83
  %87 = tail call ptr @GC_get_main_stack_base()
  store ptr %87, ptr @GC_stackbottom, align 8, !tbaa !13
  br label %88

88:                                               ; preds = %83, %86
  tail call void @GC_init_headers()
  %89 = tail call i32 @GC_register_main_static_data()
  %.not75 = icmp eq i32 %89, 0
  br i1 %.not75, label %91, label %90

90:                                               ; preds = %88
  tail call void @GC_init_linux_data_start()
  br label %91

91:                                               ; preds = %90, %88
  %92 = load i32, ptr @GC_incremental, align 4, !tbaa !5
  %.not76 = icmp eq i32 %92, 0
  br i1 %.not76, label %93, label %95

93:                                               ; preds = %91
  %94 = tail call ptr @getenv(ptr noundef nonnull @.str.75) #7
  %.not77 = icmp eq ptr %94, null
  br i1 %.not77, label %96, label %95

95:                                               ; preds = %93, %91
  tail call void @set_incremental_mode_on()
  br label %96

96:                                               ; preds = %95, %93
  %97 = tail call i32 @GC_register_main_static_data()
  %.not78 = icmp eq i32 %97, 0
  br i1 %.not78, label %99, label %98

98:                                               ; preds = %96
  tail call void @GC_register_data_segments()
  br label %99

99:                                               ; preds = %98, %96
  tail call void @GC_bl_init()
  tail call void @GC_mark_init()
  %100 = tail call ptr @getenv(ptr noundef nonnull @.str.76) #7
  %.not79 = icmp eq ptr %100, null
  br i1 %.not79, label %107, label %101

101:                                              ; preds = %99
  %102 = tail call i64 @GC_parse_mem_size_arg(ptr noundef nonnull %100)
  %103 = icmp eq i64 %102, -1
  br i1 %103, label %104, label %107

104:                                              ; preds = %101
  %105 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !13
  %106 = ptrtoint ptr %100 to i64
  tail call void %105(ptr noundef nonnull @.str.77, i64 noundef %106) #7
  br label %107

107:                                              ; preds = %104, %101, %99
  %.1 = phi i64 [ 65536, %99 ], [ 65536, %104 ], [ %102, %101 ]
  %108 = tail call ptr @getenv(ptr noundef nonnull @.str.78) #7
  %.not80 = icmp eq ptr %108, null
  br i1 %.not80, label %121, label %109

109:                                              ; preds = %107
  %110 = tail call i64 @GC_parse_mem_size_arg(ptr noundef nonnull %108)
  %111 = icmp ult i64 %110, %.1
  %112 = icmp eq i64 %110, -1
  %or.cond = or i1 %111, %112
  br i1 %or.cond, label %113, label %116

113:                                              ; preds = %109
  %114 = load ptr, ptr @GC_current_warn_proc, align 8, !tbaa !13
  %115 = ptrtoint ptr %108 to i64
  tail call void %114(ptr noundef nonnull @.str.79, i64 noundef %115) #7
  br label %121

116:                                              ; preds = %109
  %117 = load i64, ptr @GC_max_retries, align 8, !tbaa !11
  %118 = icmp eq i64 %117, 0
  br i1 %118, label %119, label %120

119:                                              ; preds = %116
  store i64 2, ptr @GC_max_retries, align 8, !tbaa !11
  br label %120

120:                                              ; preds = %119, %116
  tail call void @GC_set_max_heap_size(i64 noundef %110)
  br label %121

121:                                              ; preds = %113, %120, %107
  %.not81 = icmp eq i64 %.1, 0
  br i1 %.not81, label %130, label %122

122:                                              ; preds = %121
  %123 = lshr i64 %.1, 12
  %124 = tail call i32 @GC_expand_hp_inner(i64 noundef %123)
  %.not82 = icmp eq i32 %124, 0
  br i1 %.not82, label %125, label %127

125:                                              ; preds = %122
  tail call void (ptr, ...) @GC_err_printf(ptr noundef nonnull @.str.80)
  %126 = load ptr, ptr @GC_on_abort, align 8, !tbaa !13
  tail call void %126(ptr noundef null) #7
  tail call void @exit(i32 noundef 1) #9
  unreachable

127:                                              ; preds = %122
  %128 = load i64, ptr getelementptr inbounds (i8, ptr @GC_arrays, i64 8), align 8, !tbaa !17
  %129 = add i64 %128, %.1
  store i64 %129, ptr getelementptr inbounds (i8, ptr @GC_arrays, i64 8), align 8, !tbaa !17
  br label %130

130:                                              ; preds = %127, %121
  %131 = load i32, ptr @GC_all_interior_pointers, align 4, !tbaa !5
  %.not83 = icmp eq i32 %131, 0
  br i1 %.not83, label %133, label %132

132:                                              ; preds = %130
  tail call void @GC_initialize_offsets()
  br label %133

133:                                              ; preds = %132, %130
  tail call void @GC_register_displacement_inner(i64 noundef 0)
  tail call void @GC_init_size_map()
  store i32 1, ptr @GC_is_initialized, align 4, !tbaa !5
  %134 = load i32, ptr @GC_dump_regularly, align 4, !tbaa !5
  %.not84 = icmp eq i32 %134, 0
  br i1 %.not84, label %136, label %135, !prof !21

135:                                              ; preds = %133
  tail call void @GC_dump_named(ptr noundef null)
  br label %136

136:                                              ; preds = %133, %135
  %137 = load i32, ptr @GC_dont_precollect, align 4, !tbaa !5
  %138 = icmp eq i32 %137, 0
  %139 = load i32, ptr @GC_incremental, align 4
  %140 = icmp ne i32 %139, 0
  %or.cond3 = select i1 %138, i1 true, i1 %140
  br i1 %or.cond3, label %141, label %143

141:                                              ; preds = %136
  %142 = tail call i32 @GC_try_to_collect_inner(ptr noundef nonnull @GC_never_stop_func)
  br label %143

143:                                              ; preds = %136, %141
  %144 = load i32, ptr @GC_find_leak, align 4, !tbaa !5
  %.not85 = icmp eq i32 %144, 0
  br i1 %.not85, label %147, label %145

145:                                              ; preds = %143
  %146 = tail call i32 @atexit(ptr noundef nonnull @GC_exit_check) #7
  br label %147

147:                                              ; preds = %143, %145, %0
  ret void
}

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

; Function Attrs: nounwind uwtable
declare hidden i32 @GC_never_stop_func() #0

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

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

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare hidden void @GC_setpagesize() local_unnamed_addr #0

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i64 @atol(ptr nocapture noundef nonnull) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #4

; Function Attrs: nounwind
declare i32 @clock_gettime(i32 noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare hidden void @maybe_install_looping_handler() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local ptr @GC_get_main_stack_base() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @GC_init_headers() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @GC_register_main_static_data() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @GC_init_linux_data_start() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @set_incremental_mode_on() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @GC_register_data_segments() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @GC_bl_init() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @GC_mark_init() local_unnamed_addr #0

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @GC_initialize_offsets() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @GC_init_size_map() local_unnamed_addr #0

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

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

; Function Attrs: nofree nounwind
declare i32 @atexit(ptr noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare hidden void @GC_exit_check() #0

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!16, !12, i64 16}
!16 = !{!"obj_kind", !14, i64 0, !14, i64 8, !12, i64 16, !6, i64 24, !6, i64 28}
!17 = !{!18, !12, i64 8}
!18 = !{!"_GC_arrays", !12, i64 0, !12, i64 8, !12, i64 16, !14, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !6, i64 176, !6, i64 180, !6, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !14, i64 216, !14, i64 224, !12, i64 232, !6, i64 240, !12, i64 248, !12, i64 256, !12, i64 264, !19, i64 272, !19, i64 296, !20, i64 320, !6, i64 336, !14, i64 344, !12, i64 352, !12, i64 360, !6, i64 368, !12, i64 376, !12, i64 384, !12, i64 392, !14, i64 400, !7, i64 408, !7, i64 920, !7, i64 928, !7, i64 1440, !7, i64 2472, !7, i64 3504, !7, i64 4536, !7, i64 20928, !7, i64 21960, !7, i64 26056, !7, i64 58824, !14, i64 91592, !7, i64 91600, !7, i64 157136, !7, i64 165328}
!19 = !{!"dl_hashtbl_s", !14, i64 0, !12, i64 8, !6, i64 16}
!20 = !{!"fnlz_roots_s", !14, i64 0, !14, i64 8}
!21 = !{!"branch_weights", !"expected", i32 2000, i32 1}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,LowerExpectIntrinsicPass,SROAPass,SimplifyCFGPass,TailCallElimPass