; LLVM IR from clibs/clib :: src/common (clib-package)

; 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.debug_t = type { ptr, i32, i32, ptr }
%struct.clib_package_t = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.list_t = type { ptr, ptr, i32, ptr, ptr }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external global ptr, align 8
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@_debugger = external dso_local global %struct.debug_t, align 8
@.str.24 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [69 x i8], align 1

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

declare i32 @cc_fprintf(i32 noundef, ptr noundef, ptr noundef, ...) #1

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

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

26:                                               ; preds = %2
  %27 = load i32, ptr %5, align 4, !tbaa !9
  %28 = icmp ne i32 %27, 0
  br i1 %28, label %29, label %39

29:                                               ; preds = %26
  %30 = load ptr, ptr @stderr, align 8, !tbaa !5
  %31 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 2, ptr noundef %30, ptr noundef @.str, ptr noundef @.str.1)
  %32 = load ptr, ptr @stderr, align 8, !tbaa !5
  %33 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %32, ptr noundef @.str.2) #7
  %34 = load ptr, ptr @stderr, align 8, !tbaa !5
  %35 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %34, ptr noundef @.str.7)
  %36 = load ptr, ptr @stderr, align 8, !tbaa !5
  %37 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef @.str.4) #7
  store i32 %37, ptr %13, align 4, !tbaa !9
  %38 = load i32, ptr %13, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %29, %26
  br label %402

40:                                               ; preds = %2
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = call ptr @json_parse_string(ptr noundef %41)
  store ptr %42, ptr %7, align 8, !tbaa !5
  %43 = icmp ne ptr %42, null
  br i1 %43, label %58, label %44

44:                                               ; preds = %40
  %45 = load i32, ptr %5, align 4, !tbaa !9
  %46 = icmp ne i32 %45, 0
  br i1 %46, label %47, label %57

47:                                               ; preds = %44
  %48 = load ptr, ptr @stderr, align 8, !tbaa !5
  %49 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 2, ptr noundef %48, ptr noundef @.str, ptr noundef @.str.1)
  %50 = load ptr, ptr @stderr, align 8, !tbaa !5
  %51 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %50, ptr noundef @.str.2) #7
  %52 = load ptr, ptr @stderr, align 8, !tbaa !5
  %53 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %52, ptr noundef @.str.8)
  %54 = load ptr, ptr @stderr, align 8, !tbaa !5
  %55 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %54, ptr noundef @.str.4) #7
  store i32 %55, ptr %14, align 4, !tbaa !9
  %56 = load i32, ptr %14, align 4, !tbaa !9
  br label %57

57:                                               ; preds = %47, %44
  br label %402

58:                                               ; preds = %40
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = call ptr @json_value_get_object(ptr noundef %59)
  store ptr %60, ptr %8, align 8, !tbaa !5
  %61 = icmp ne ptr %60, null
  br i1 %61, label %76, label %62

62:                                               ; preds = %58
  %63 = load i32, ptr %5, align 4, !tbaa !9
  %64 = icmp ne i32 %63, 0
  br i1 %64, label %65, label %75

65:                                               ; preds = %62
  %66 = load ptr, ptr @stderr, align 8, !tbaa !5
  %67 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 2, ptr noundef %66, ptr noundef @.str, ptr noundef @.str.1)
  %68 = load ptr, ptr @stderr, align 8, !tbaa !5
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef @.str.2) #7
  %70 = load ptr, ptr @stderr, align 8, !tbaa !5
  %71 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %70, ptr noundef @.str.9)
  %72 = load ptr, ptr @stderr, align 8, !tbaa !5
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef @.str.4) #7
  store i32 %73, ptr %15, align 4, !tbaa !9
  %74 = load i32, ptr %15, align 4, !tbaa !9
  br label %75

75:                                               ; preds = %65, %62
  br label %402

76:                                               ; preds = %58
  %77 = call noalias ptr @malloc(i64 noundef 160) #8
  store ptr %77, ptr %6, align 8, !tbaa !5
  %78 = icmp ne ptr %77, null
  br i1 %78, label %80, label %79

79:                                               ; preds = %76
  br label %402

80:                                               ; preds = %76
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %81, i8 0, i64 160, i1 false)
  %82 = load ptr, ptr %4, align 8, !tbaa !5
  %83 = call noalias ptr @strdup(ptr noundef %82) #7
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.clib_package_t, ptr %84, i32 0, i32 4
  store ptr %83, ptr %85, align 8, !tbaa !11
  %86 = load ptr, ptr %8, align 8, !tbaa !5
  %87 = call ptr @json_object_get_string_safe(ptr noundef %86, ptr noundef @.str.10)
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.clib_package_t, ptr %88, i32 0, i32 6
  store ptr %87, ptr %89, align 8, !tbaa !13
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = call ptr @json_object_get_string_safe(ptr noundef %90, ptr noundef @.str.11)
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.clib_package_t, ptr %92, i32 0, i32 7
  store ptr %91, ptr %93, align 8, !tbaa !14
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = call ptr @json_object_get_string_safe(ptr noundef %94, ptr noundef @.str.12)
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.clib_package_t, ptr %96, i32 0, i32 10
  store ptr %95, ptr %97, align 8, !tbaa !15
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = call ptr @json_object_get_string_safe(ptr noundef %98, ptr noundef @.str.13)
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.clib_package_t, ptr %100, i32 0, i32 5
  store ptr %99, ptr %101, align 8, !tbaa !16
  %102 = load ptr, ptr %8, align 8, !tbaa !5
  %103 = call ptr @json_object_get_string_safe(ptr noundef %102, ptr noundef @.str.14)
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.clib_package_t, ptr %104, i32 0, i32 1
  store ptr %103, ptr %105, align 8, !tbaa !17
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = call ptr @json_object_get_string_safe(ptr noundef %106, ptr noundef @.str.15)
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.clib_package_t, ptr %108, i32 0, i32 3
  store ptr %107, ptr %109, align 8, !tbaa !18
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = call ptr @json_object_get_string_safe(ptr noundef %110, ptr noundef @.str.16)
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.clib_package_t, ptr %112, i32 0, i32 2
  store ptr %111, ptr %113, align 8, !tbaa !19
  %114 = load ptr, ptr %8, align 8, !tbaa !5
  %115 = call ptr @json_object_get_string_safe(ptr noundef %114, ptr noundef @.str.17)
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.clib_package_t, ptr %116, i32 0, i32 11
  store ptr %115, ptr %117, align 8, !tbaa !20
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  %119 = call ptr @json_object_get_string_safe(ptr noundef %118, ptr noundef @.str.18)
  %120 = load ptr, ptr %6, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.clib_package_t, ptr %120, i32 0, i32 14
  store ptr %119, ptr %121, align 8, !tbaa !21
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = call ptr @json_object_get_string_safe(ptr noundef %122, ptr noundef @.str.19)
  %124 = load ptr, ptr %6, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.clib_package_t, ptr %124, i32 0, i32 13
  store ptr %123, ptr %125, align 8, !tbaa !22
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.clib_package_t, ptr %126, i32 0, i32 13
  %128 = load ptr, ptr %127, align 8, !tbaa !22
  %129 = icmp ne ptr %128, null
  br i1 %129, label %135, label %130

130:                                              ; preds = %80
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = call ptr @json_object_get_string_safe(ptr noundef %131, ptr noundef @.str.20)
  %133 = load ptr, ptr %6, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.clib_package_t, ptr %133, i32 0, i32 13
  store ptr %132, ptr %134, align 8, !tbaa !22
  br label %135

135:                                              ; preds = %130, %80
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.clib_package_t, ptr %136, i32 0, i32 13
  %138 = load ptr, ptr %137, align 8, !tbaa !22
  %139 = icmp ne ptr %138, null
  br i1 %139, label %206, label %140

140:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = call ptr @json_object_get_array(ptr noundef %141, ptr noundef @.str.19)
  store ptr %142, ptr %16, align 8, !tbaa !5
  %143 = load ptr, ptr %16, align 8, !tbaa !5
  %144 = icmp ne ptr %143, null
  br i1 %144, label %148, label %145

145:                                              ; preds = %140
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = call ptr @json_object_get_array(ptr noundef %146, ptr noundef @.str.20)
  store ptr %147, ptr %16, align 8, !tbaa !5
  br label %148

148:                                              ; preds = %145, %140
  %149 = load ptr, ptr %16, align 8, !tbaa !5
  %150 = icmp ne ptr %149, null
  br i1 %150, label %151, label %202

151:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %152

152:                                              ; preds = %196, %151
  %153 = load i32, ptr %17, align 4, !tbaa !9
  %154 = zext i32 %153 to i64
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = call i64 @json_array_get_count(ptr noundef %155)
  %157 = icmp ult i64 %154, %156
  br i1 %157, label %159, label %158

158:                                              ; preds = %152
  store i32 3, ptr %18, align 4
  br label %199

159:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %160 = load ptr, ptr %16, align 8, !tbaa !5
  %161 = load i32, ptr %17, align 4, !tbaa !9
  %162 = call ptr @json_array_get_string_safe(ptr noundef %160, i32 noundef %161)
  store ptr %162, ptr %19, align 8, !tbaa !5
  %163 = load ptr, ptr %19, align 8, !tbaa !5
  %164 = icmp ne ptr %163, null
  br i1 %164, label %165, label %192

165:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.clib_package_t, ptr %166, i32 0, i32 13
  %168 = load ptr, ptr %167, align 8, !tbaa !22
  store ptr %168, ptr %20, align 8, !tbaa !5
  %169 = load ptr, ptr %6, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.clib_package_t, ptr %169, i32 0, i32 13
  %171 = load ptr, ptr %170, align 8, !tbaa !22
  %172 = icmp ne ptr %171, null
  br i1 %172, label %176, label %173

173:                                              ; preds = %165
  %174 = load ptr, ptr %6, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.clib_package_t, ptr %174, i32 0, i32 13
  store ptr @.str.21, ptr %175, align 8, !tbaa !22
  br label %176

176:                                              ; preds = %173, %165
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.clib_package_t, ptr %177, i32 0, i32 13
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.clib_package_t, ptr %179, i32 0, i32 13
  %181 = load ptr, ptr %180, align 8, !tbaa !22
  %182 = load ptr, ptr %19, align 8, !tbaa !5
  %183 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %178, ptr noundef @.str.22, ptr noundef %181, ptr noundef %182)
  %184 = icmp eq i32 -1, %183
  br i1 %184, label %185, label %186

185:                                              ; preds = %176
  store i32 2, ptr %18, align 4
  br label %189

186:                                              ; preds = %176
  %187 = load ptr, ptr %20, align 8, !tbaa !5
  call void @free(ptr noundef %187) #7
  %188 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %188) #7
  store i32 0, ptr %18, align 4
  br label %189

189:                                              ; preds = %186, %185
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  %190 = load i32, ptr %18, align 4
  switch i32 %190, label %193 [
    i32 0, label %191
  ]

191:                                              ; preds = %189
  br label %192

192:                                              ; preds = %191, %159
  store i32 0, ptr %18, align 4
  br label %193

193:                                              ; preds = %192, %189
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  %194 = load i32, ptr %18, align 4
  switch i32 %194, label %199 [
    i32 0, label %195
  ]

195:                                              ; preds = %193
  br label %196

196:                                              ; preds = %195
  %197 = load i32, ptr %17, align 4, !tbaa !9
  %198 = add i32 %197, 1
  store i32 %198, ptr %17, align 4, !tbaa !9
  br label %152, !llvm.loop !23

199:                                              ; preds = %193, %158
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  %200 = load i32, ptr %18, align 4
  switch i32 %200, label %203 [
    i32 3, label %201
  ]

201:                                              ; preds = %199
  br label %202

202:                                              ; preds = %201, %148
  store i32 0, ptr %18, align 4
  br label %203

203:                                              ; preds = %202, %199
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  %204 = load i32, ptr %18, align 4
  switch i32 %204, label %417 [
    i32 0, label %205
    i32 2, label %402
  ]

205:                                              ; preds = %203
  br label %206

206:                                              ; preds = %205, %135
  %207 = load ptr, ptr %6, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.clib_package_t, ptr %207, i32 0, i32 7
  %209 = load ptr, ptr %208, align 8, !tbaa !14
  %210 = icmp ne ptr %209, null
  br i1 %210, label %239, label %211

211:                                              ; preds = %206
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.clib_package_t, ptr %212, i32 0, i32 0
  %214 = load ptr, ptr %213, align 8, !tbaa !25
  %215 = icmp ne ptr %214, null
  br i1 %215, label %216, label %239

216:                                              ; preds = %211
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.clib_package_t, ptr %217, i32 0, i32 6
  %219 = load ptr, ptr %218, align 8, !tbaa !13
  %220 = icmp ne ptr %219, null
  br i1 %220, label %221, label %239

221:                                              ; preds = %216
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.clib_package_t, ptr %222, i32 0, i32 7
  %224 = load ptr, ptr %6, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.clib_package_t, ptr %224, i32 0, i32 0
  %226 = load ptr, ptr %225, align 8, !tbaa !25
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.clib_package_t, ptr %227, i32 0, i32 6
  %229 = load ptr, ptr %228, align 8, !tbaa !13
  %230 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %223, ptr noundef @.str.23, ptr noundef %226, ptr noundef %229)
  %231 = load ptr, ptr @_debugger, align 8, !tbaa !26
  %232 = icmp ne ptr %231, null
  br i1 %232, label %235, label %233

233:                                              ; preds = %221
  %234 = call i32 @debug_init(ptr noundef @_debugger, ptr noundef @.str.24)
  br label %235

235:                                              ; preds = %233, %221
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.clib_package_t, ptr %236, i32 0, i32 7
  %238 = load ptr, ptr %237, align 8, !tbaa !14
  call void (ptr, ptr, ...) @debug(ptr noundef @_debugger, ptr noundef @.str.25, ptr noundef %238)
  br label %239

239:                                              ; preds = %235, %216, %211, %206
  %240 = load ptr, ptr %6, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.clib_package_t, ptr %240, i32 0, i32 0
  %242 = load ptr, ptr %241, align 8, !tbaa !25
  %243 = icmp ne ptr %242, null
  br i1 %243, label %253, label %244

244:                                              ; preds = %239
  %245 = load ptr, ptr @_debugger, align 8, !tbaa !26
  %246 = icmp ne ptr %245, null
  br i1 %246, label %249, label %247

247:                                              ; preds = %244
  %248 = call i32 @debug_init(ptr noundef @_debugger, ptr noundef @.str.24)
  br label %249

249:                                              ; preds = %247, %244
  %250 = load ptr, ptr %6, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.clib_package_t, ptr %250, i32 0, i32 6
  %252 = load ptr, ptr %251, align 8, !tbaa !13
  call void (ptr, ptr, ...) @debug(ptr noundef @_debugger, ptr noundef @.str.26, ptr noundef %252)
  br label %253

253:                                              ; preds = %249, %239
  %254 = load ptr, ptr %6, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.clib_package_t, ptr %254, i32 0, i32 7
  %256 = load ptr, ptr %255, align 8, !tbaa !14
  %257 = icmp ne ptr %256, null
  br i1 %257, label %258, label %271

258:                                              ; preds = %253
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.clib_package_t, ptr %259, i32 0, i32 7
  %261 = load ptr, ptr %260, align 8, !tbaa !14
  %262 = call ptr @parse_repo_owner(ptr noundef %261, ptr noundef @.str.27)
  %263 = load ptr, ptr %6, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.clib_package_t, ptr %263, i32 0, i32 0
  store ptr %262, ptr %264, align 8, !tbaa !25
  %265 = load ptr, ptr %6, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.clib_package_t, ptr %265, i32 0, i32 7
  %267 = load ptr, ptr %266, align 8, !tbaa !14
  %268 = call ptr @parse_repo_name(ptr noundef %267)
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.clib_package_t, ptr %269, i32 0, i32 8
  store ptr %268, ptr %270, align 8, !tbaa !28
  br label %292

271:                                              ; preds = %253
  %272 = load i32, ptr %5, align 4, !tbaa !9
  %273 = icmp ne i32 %272, 0
  br i1 %273, label %274, label %287

274:                                              ; preds = %271
  %275 = load ptr, ptr @stdout, align 8, !tbaa !5
  %276 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 4, ptr noundef %275, ptr noundef @.str, ptr noundef @.str.28)
  %277 = load ptr, ptr @stdout, align 8, !tbaa !5
  %278 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %277, ptr noundef @.str.2) #7
  %279 = load ptr, ptr @stdout, align 8, !tbaa !5
  %280 = load ptr, ptr %6, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.clib_package_t, ptr %280, i32 0, i32 6
  %282 = load ptr, ptr %281, align 8, !tbaa !13
  %283 = call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %279, ptr noundef @.str.29, ptr noundef %282)
  %284 = load ptr, ptr @stdout, align 8, !tbaa !5
  %285 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %284, ptr noundef @.str.4) #7
  store i32 %285, ptr %21, align 4, !tbaa !9
  %286 = load i32, ptr %21, align 4, !tbaa !9
  br label %287

287:                                              ; preds = %274, %271
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.clib_package_t, ptr %288, i32 0, i32 0
  store ptr null, ptr %289, align 8, !tbaa !25
  %290 = load ptr, ptr %6, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.clib_package_t, ptr %290, i32 0, i32 8
  store ptr null, ptr %291, align 8, !tbaa !28
  br label %292

292:                                              ; preds = %287, %258
  %293 = load ptr, ptr %8, align 8, !tbaa !5
  %294 = call ptr @json_object_get_array(ptr noundef %293, ptr noundef @.str.30)
  store ptr %294, ptr %9, align 8, !tbaa !5
  %295 = load ptr, ptr %9, align 8, !tbaa !5
  %296 = icmp ne ptr %295, null
  br i1 %296, label %300, label %297

297:                                              ; preds = %292
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = call ptr @json_object_get_array(ptr noundef %298, ptr noundef @.str.31)
  store ptr %299, ptr %9, align 8, !tbaa !5
  br label %300

300:                                              ; preds = %297, %292
  %301 = load ptr, ptr %9, align 8, !tbaa !5
  %302 = icmp ne ptr %301, null
  br i1 %302, label %303, label %353

303:                                              ; preds = %300
  %304 = call ptr @list_new()
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.clib_package_t, ptr %305, i32 0, i32 17
  store ptr %304, ptr %306, align 8, !tbaa !29
  %307 = icmp ne ptr %304, null
  br i1 %307, label %309, label %308

308:                                              ; preds = %303
  br label %402

309:                                              ; preds = %303
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.clib_package_t, ptr %310, i32 0, i32 17
  %312 = load ptr, ptr %311, align 8, !tbaa !29
  %313 = getelementptr inbounds %struct.list_t, ptr %312, i32 0, i32 3
  store ptr @free, ptr %313, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %347, %309
  %315 = load i32, ptr %22, align 4, !tbaa !9
  %316 = zext i32 %315 to i64
  %317 = load ptr, ptr %9, align 8, !tbaa !5
  %318 = call i64 @json_array_get_count(ptr noundef %317)
  %319 = icmp ult i64 %316, %318
  br i1 %319, label %321, label %320

320:                                              ; preds = %314
  store i32 6, ptr %18, align 4
  br label %350

321:                                              ; preds = %314
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %322 = load ptr, ptr %9, align 8, !tbaa !5
  %323 = load i32, ptr %22, align 4, !tbaa !9
  %324 = call ptr @json_array_get_string_safe(ptr noundef %322, i32 noundef %323)
  store ptr %324, ptr %23, align 8, !tbaa !5
  %325 = load ptr, ptr @_debugger, align 8, !tbaa !26
  %326 = icmp ne ptr %325, null
  br i1 %326, label %329, label %327

327:                                              ; preds = %321
  %328 = call i32 @debug_init(ptr noundef @_debugger, ptr noundef @.str.24)
  br label %329

329:                                              ; preds = %327, %321
  %330 = load ptr, ptr %23, align 8, !tbaa !5
  call void (ptr, ptr, ...) @debug(ptr noundef @_debugger, ptr noundef @.str.32, ptr noundef %330)
  %331 = load ptr, ptr %23, align 8, !tbaa !5
  %332 = icmp ne ptr %331, null
  br i1 %332, label %334, label %333

333:                                              ; preds = %329
  store i32 2, ptr %18, align 4
  br label %344

334:                                              ; preds = %329
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.clib_package_t, ptr %335, i32 0, i32 17
  %337 = load ptr, ptr %336, align 8, !tbaa !29
  %338 = load ptr, ptr %23, align 8, !tbaa !5
  %339 = call ptr @list_node_new(ptr noundef %338)
  %340 = call ptr @list_rpush(ptr noundef %337, ptr noundef %339)
  %341 = icmp ne ptr %340, null
  br i1 %341, label %343, label %342

342:                                              ; preds = %334
  store i32 2, ptr %18, align 4
  br label %344

343:                                              ; preds = %334
  store i32 0, ptr %18, align 4
  br label %344

344:                                              ; preds = %343, %342, %333
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  %345 = load i32, ptr %18, align 4
  switch i32 %345, label %350 [
    i32 0, label %346
  ]

346:                                              ; preds = %344
  br label %347

347:                                              ; preds = %346
  %348 = load i32, ptr %22, align 4, !tbaa !9
  %349 = add i32 %348, 1
  store i32 %349, ptr %22, align 4, !tbaa !9
  br label %314, !llvm.loop !32

350:                                              ; preds = %344, %320
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  %351 = load i32, ptr %18, align 4
  switch i32 %351, label %417 [
    i32 6, label %352
    i32 2, label %402
  ]

352:                                              ; preds = %350
  br label %361

353:                                              ; preds = %300
  %354 = load ptr, ptr @_debugger, align 8, !tbaa !26
  %355 = icmp ne ptr %354, null
  br i1 %355, label %358, label %356

356:                                              ; preds = %353
  %357 = call i32 @debug_init(ptr noundef @_debugger, ptr noundef @.str.24)
  br label %358

358:                                              ; preds = %356, %353
  call void (ptr, ptr, ...) @debug(ptr noundef @_debugger, ptr noundef @.str.33)
  %359 = load ptr, ptr %6, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.clib_package_t, ptr %359, i32 0, i32 17
  store ptr null, ptr %360, align 8, !tbaa !29
  br label %361

361:                                              ; preds = %358, %352
  %362 = load ptr, ptr %8, align 8, !tbaa !5
  %363 = call ptr @json_object_get_object(ptr noundef %362, ptr noundef @.str.34)
  store ptr %363, ptr %10, align 8, !tbaa !5
  %364 = icmp ne ptr %363, null
  br i1 %364, label %365, label %373

365:                                              ; preds = %361
  %366 = load ptr, ptr %10, align 8, !tbaa !5
  %367 = call ptr @parse_package_deps(ptr noundef %366)
  %368 = load ptr, ptr %6, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.clib_package_t, ptr %368, i32 0, i32 15
  store ptr %367, ptr %369, align 8, !tbaa !33
  %370 = icmp ne ptr %367, null
  br i1 %370, label %372, label %371

371:                                              ; preds = %365
  br label %402

372:                                              ; preds = %365
  br label %381

373:                                              ; preds = %361
  %374 = load ptr, ptr @_debugger, align 8, !tbaa !26
  %375 = icmp ne ptr %374, null
  br i1 %375, label %378, label %376

376:                                              ; preds = %373
  %377 = call i32 @debug_init(ptr noundef @_debugger, ptr noundef @.str.24)
  br label %378

378:                                              ; preds = %376, %373
  call void (ptr, ptr, ...) @debug(ptr noundef @_debugger, ptr noundef @.str.35)
  %379 = load ptr, ptr %6, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.clib_package_t, ptr %379, i32 0, i32 15
  store ptr null, ptr %380, align 8, !tbaa !33
  br label %381

381:                                              ; preds = %378, %372
  %382 = load ptr, ptr %8, align 8, !tbaa !5
  %383 = call ptr @json_object_get_object(ptr noundef %382, ptr noundef @.str.36)
  store ptr %383, ptr %11, align 8, !tbaa !5
  %384 = icmp ne ptr %383, null
  br i1 %384, label %385, label %393

385:                                              ; preds = %381
  %386 = load ptr, ptr %11, align 8, !tbaa !5
  %387 = call ptr @parse_package_deps(ptr noundef %386)
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.clib_package_t, ptr %388, i32 0, i32 16
  store ptr %387, ptr %389, align 8, !tbaa !34
  %390 = icmp ne ptr %387, null
  br i1 %390, label %392, label %391

391:                                              ; preds = %385
  br label %402

392:                                              ; preds = %385
  br label %401

393:                                              ; preds = %381
  %394 = load ptr, ptr @_debugger, align 8, !tbaa !26
  %395 = icmp ne ptr %394, null
  br i1 %395, label %398, label %396

396:                                              ; preds = %393
  %397 = call i32 @debug_init(ptr noundef @_debugger, ptr noundef @.str.24)
  br label %398

398:                                              ; preds = %396, %393
  call void (ptr, ptr, ...) @debug(ptr noundef @_debugger, ptr noundef @.str.37)
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.clib_package_t, ptr %399, i32 0, i32 16
  store ptr null, ptr %400, align 8, !tbaa !34
  br label %401

401:                                              ; preds = %398, %392
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %402

402:                                              ; preds = %401, %391, %371, %350, %308, %203, %79, %75, %57, %39
  %403 = load ptr, ptr %7, align 8, !tbaa !5
  %404 = icmp ne ptr %403, null
  br i1 %404, label %405, label %407

405:                                              ; preds = %402
  %406 = load ptr, ptr %7, align 8, !tbaa !5
  call void @json_value_free(ptr noundef %406)
  br label %407

407:                                              ; preds = %405, %402
  %408 = load i32, ptr %12, align 4, !tbaa !9
  %409 = icmp ne i32 %408, 0
  br i1 %409, label %410, label %415

410:                                              ; preds = %407
  %411 = load ptr, ptr %6, align 8, !tbaa !5
  %412 = icmp ne ptr %411, null
  br i1 %412, label %413, label %415

413:                                              ; preds = %410
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  call void @clib_package_free(ptr noundef %414)
  store ptr null, ptr %6, align 8, !tbaa !5
  br label %415

415:                                              ; preds = %413, %410, %407
  %416 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %416, ptr %3, align 8
  store i32 1, ptr %18, align 4
  br label %417

417:                                              ; preds = %415, %350, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  %418 = load ptr, ptr %3, align 8
  ret ptr %418
}

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

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

declare ptr @json_parse_string(ptr noundef) #1

declare ptr @json_value_get_object(ptr noundef) #1

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

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

; Function Attrs: nounwind
declare noalias ptr @strdup(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @json_object_get_string_safe(ptr noundef, ptr noundef) #6

declare ptr @json_object_get_array(ptr noundef, ptr noundef) #1

declare i64 @json_array_get_count(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @json_array_get_string_safe(ptr noundef, i32 noundef) #6

declare i32 @asprintf(ptr noundef, ptr noundef, ...) #1

declare i32 @debug_init(ptr noundef, ptr noundef) #1

declare void @debug(ptr noundef, ptr noundef, ...) #1

declare ptr @parse_repo_owner(ptr noundef, ptr noundef) #1

declare ptr @parse_repo_name(ptr noundef) #1

declare ptr @list_new() #1

declare ptr @list_rpush(ptr noundef, ptr noundef) #1

declare ptr @list_node_new(ptr noundef) #1

declare ptr @json_object_get_object(ptr noundef, ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @parse_package_deps(ptr noundef) #6

declare void @json_value_free(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local void @clib_package_free(ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 = { 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 = { 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 #4 = { nounwind allocsize(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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { inlinehint 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 #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }

!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 32}
!12 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !10, i64 152}
!13 = !{!12, !6, i64 48}
!14 = !{!12, !6, i64 56}
!15 = !{!12, !6, i64 80}
!16 = !{!12, !6, i64 40}
!17 = !{!12, !6, i64 8}
!18 = !{!12, !6, i64 24}
!19 = !{!12, !6, i64 16}
!20 = !{!12, !6, i64 88}
!21 = !{!12, !6, i64 112}
!22 = !{!12, !6, i64 104}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!12, !6, i64 0}
!26 = !{!27, !6, i64 0}
!27 = !{!"", !6, i64 0, !10, i64 8, !10, i64 12, !6, i64 16}
!28 = !{!12, !6, i64 64}
!29 = !{!12, !6, i64 136}
!30 = !{!31, !6, i64 24}
!31 = !{!"", !6, i64 0, !6, i64 8, !10, i64 16, !6, i64 24, !6, i64 32}
!32 = distinct !{!32, !24}
!33 = !{!12, !6, i64 120}
!34 = !{!12, !6, i64 128}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.7 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [6 x i8], align 1
@_debugger = external dso_local global %struct.debug_t, align 8
@.str.24 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [69 x i8], align 1

declare i32 @cc_fprintf(i32 noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local ptr @clib_package_new(ptr noundef %0, i32 noundef %1) local_unnamed_addr #2 {
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %3, label %13

3:                                                ; preds = %2
  %.not138 = icmp eq i32 %1, 0
  br i1 %.not138, label %.thread214, label %4

4:                                                ; preds = %3
  %5 = load ptr, ptr @stderr, align 8, !tbaa !5
  %6 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 2, ptr noundef %5, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1) #7
  %7 = load ptr, ptr @stderr, align 8, !tbaa !5
  %8 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %7, ptr noundef nonnull @.str.2) #8
  %9 = load ptr, ptr @stderr, align 8, !tbaa !5
  %10 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %9, ptr noundef nonnull @.str.7) #7
  %11 = load ptr, ptr @stderr, align 8, !tbaa !5
  %12 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %11, ptr noundef nonnull @.str.4) #8
  br label %.thread214

13:                                               ; preds = %2
  %14 = tail call ptr @json_parse_string(ptr noundef nonnull %0) #7
  %.not139 = icmp eq ptr %14, null
  br i1 %.not139, label %15, label %25

15:                                               ; preds = %13
  %.not140 = icmp eq i32 %1, 0
  br i1 %.not140, label %.thread214, label %16

16:                                               ; preds = %15
  %17 = load ptr, ptr @stderr, align 8, !tbaa !5
  %18 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 2, ptr noundef %17, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1) #7
  %19 = load ptr, ptr @stderr, align 8, !tbaa !5
  %20 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %19, ptr noundef nonnull @.str.2) #8
  %21 = load ptr, ptr @stderr, align 8, !tbaa !5
  %22 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %21, ptr noundef nonnull @.str.8) #7
  %23 = load ptr, ptr @stderr, align 8, !tbaa !5
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.4) #8
  br label %.thread214

25:                                               ; preds = %13
  %26 = tail call ptr @json_value_get_object(ptr noundef nonnull %14) #7
  %.not141 = icmp eq ptr %26, null
  br i1 %.not141, label %27, label %37

27:                                               ; preds = %25
  %.not142 = icmp eq i32 %1, 0
  br i1 %.not142, label %.thread208.thread, label %28

28:                                               ; preds = %27
  %29 = load ptr, ptr @stderr, align 8, !tbaa !5
  %30 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 2, ptr noundef %29, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1) #7
  %31 = load ptr, ptr @stderr, align 8, !tbaa !5
  %32 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %31, ptr noundef nonnull @.str.2) #8
  %33 = load ptr, ptr @stderr, align 8, !tbaa !5
  %34 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %33, ptr noundef nonnull @.str.9) #7
  %35 = load ptr, ptr @stderr, align 8, !tbaa !5
  %36 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %35, ptr noundef nonnull @.str.4) #8
  br label %.thread208.thread

37:                                               ; preds = %25
  %calloc = tail call dereferenceable_or_null(160) ptr @calloc(i64 1, i64 160)
  %.not143 = icmp eq ptr %calloc, null
  br i1 %.not143, label %.thread208.thread, label %38

38:                                               ; preds = %37
  %39 = tail call noalias ptr @strdup(ptr noundef nonnull %0) #7
  %40 = getelementptr inbounds i8, ptr %calloc, i64 32
  store ptr %39, ptr %40, align 8, !tbaa !9
  %41 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.10)
  %42 = getelementptr inbounds i8, ptr %calloc, i64 48
  store ptr %41, ptr %42, align 8, !tbaa !12
  %43 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.11)
  %44 = getelementptr inbounds i8, ptr %calloc, i64 56
  store ptr %43, ptr %44, align 8, !tbaa !13
  %45 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.12)
  %46 = getelementptr inbounds i8, ptr %calloc, i64 80
  store ptr %45, ptr %46, align 8, !tbaa !14
  %47 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.13)
  %48 = getelementptr inbounds i8, ptr %calloc, i64 40
  store ptr %47, ptr %48, align 8, !tbaa !15
  %49 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.14)
  %50 = getelementptr inbounds i8, ptr %calloc, i64 8
  store ptr %49, ptr %50, align 8, !tbaa !16
  %51 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.15)
  %52 = getelementptr inbounds i8, ptr %calloc, i64 24
  store ptr %51, ptr %52, align 8, !tbaa !17
  %53 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.16)
  %54 = getelementptr inbounds i8, ptr %calloc, i64 16
  store ptr %53, ptr %54, align 8, !tbaa !18
  %55 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.17)
  %56 = getelementptr inbounds i8, ptr %calloc, i64 88
  store ptr %55, ptr %56, align 8, !tbaa !19
  %57 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.18)
  %58 = getelementptr inbounds i8, ptr %calloc, i64 112
  store ptr %57, ptr %58, align 8, !tbaa !20
  %59 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.19)
  %60 = getelementptr inbounds i8, ptr %calloc, i64 104
  store ptr %59, ptr %60, align 8, !tbaa !21
  %.not144 = icmp eq ptr %59, null
  br i1 %.not144, label %61, label %.thread

61:                                               ; preds = %38
  %62 = tail call ptr @json_object_get_string_safe(ptr noundef nonnull %26, ptr noundef nonnull @.str.20)
  store ptr %62, ptr %60, align 8, !tbaa !21
  %.not145 = icmp eq ptr %62, null
  br i1 %.not145, label %63, label %.thread

63:                                               ; preds = %61
  %64 = tail call ptr @json_object_get_array(ptr noundef nonnull %26, ptr noundef nonnull @.str.19) #7
  %.not146 = icmp eq ptr %64, null
  br i1 %.not146, label %65, label %.preheader

65:                                               ; preds = %63
  %66 = tail call ptr @json_object_get_array(ptr noundef nonnull %26, ptr noundef nonnull @.str.20) #7
  %.not147 = icmp eq ptr %66, null
  br i1 %.not147, label %.thread, label %.preheader

.preheader:                                       ; preds = %63, %65
  %.0119227 = phi ptr [ %66, %65 ], [ %64, %63 ]
  %67 = tail call i64 @json_array_get_count(ptr noundef nonnull %.0119227) #7
  %.not221 = icmp eq i64 %67, 0
  br i1 %.not221, label %.thread, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %76
  %.0118218 = phi i32 [ %77, %76 ], [ 0, %.preheader ]
  %68 = tail call ptr @json_array_get_string_safe(ptr noundef nonnull %.0119227, i32 noundef %.0118218)
  %.not148 = icmp eq ptr %68, null
  br i1 %.not148, label %76, label %69

69:                                               ; preds = %.lr.ph
  %70 = load ptr, ptr %60, align 8, !tbaa !21
  %.not149 = icmp eq ptr %70, null
  br i1 %.not149, label %71, label %72

71:                                               ; preds = %69
  store ptr @.str.21, ptr %60, align 8, !tbaa !21
  br label %72

72:                                               ; preds = %71, %69
  %73 = phi ptr [ @.str.21, %71 ], [ %70, %69 ]
  %74 = tail call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %60, ptr noundef nonnull @.str.22, ptr noundef nonnull %73, ptr noundef nonnull %68) #7
  %.not150 = icmp eq i32 %74, -1
  br i1 %.not150, label %.thread208, label %75

75:                                               ; preds = %72
  tail call void @free(ptr noundef %70) #7
  tail call void @free(ptr noundef nonnull %68) #7
  br label %76

76:                                               ; preds = %75, %.lr.ph
  %77 = add i32 %.0118218, 1
  %78 = zext i32 %77 to i64
  %79 = tail call i64 @json_array_get_count(ptr noundef nonnull %.0119227) #7
  %80 = icmp ugt i64 %79, %78
  br i1 %80, label %.lr.ph, label %.thread, !llvm.loop !22

.thread:                                          ; preds = %76, %.preheader, %65, %38, %61
  %81 = load ptr, ptr %44, align 8, !tbaa !13
  %.not151 = icmp eq ptr %81, null
  br i1 %.not151, label %82, label %93

82:                                               ; preds = %.thread
  %83 = load ptr, ptr %calloc, align 8, !tbaa !24
  %.not152 = icmp eq ptr %83, null
  br i1 %.not152, label %.thread186, label %84

84:                                               ; preds = %82
  %85 = load ptr, ptr %42, align 8, !tbaa !12
  %.not153 = icmp eq ptr %85, null
  br i1 %.not153, label %.thread188, label %86

86:                                               ; preds = %84
  %87 = tail call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %44, ptr noundef nonnull @.str.23, ptr noundef nonnull %83, ptr noundef nonnull %85) #7
  %88 = load ptr, ptr @_debugger, align 8, !tbaa !25
  %.not154 = icmp eq ptr %88, null
  br i1 %.not154, label %89, label %91

89:                                               ; preds = %86
  %90 = tail call i32 @debug_init(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.24) #7
  br label %91

91:                                               ; preds = %89, %86
  %92 = load ptr, ptr %44, align 8, !tbaa !13
  tail call void (ptr, ptr, ...) @debug(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.25, ptr noundef %92) #7
  br label %93

93:                                               ; preds = %91, %.thread
  %.pr = load ptr, ptr %calloc, align 8, !tbaa !24
  %.not155 = icmp eq ptr %.pr, null
  br i1 %.not155, label %.thread186, label %.thread188

.thread186:                                       ; preds = %82, %93
  %94 = load ptr, ptr @_debugger, align 8, !tbaa !25
  %.not156 = icmp eq ptr %94, null
  br i1 %.not156, label %95, label %97

95:                                               ; preds = %.thread186
  %96 = tail call i32 @debug_init(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.24) #7
  br label %97

97:                                               ; preds = %95, %.thread186
  %98 = load ptr, ptr %42, align 8, !tbaa !12
  tail call void (ptr, ptr, ...) @debug(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.26, ptr noundef %98) #7
  br label %.thread188

.thread188:                                       ; preds = %84, %97, %93
  %99 = load ptr, ptr %44, align 8, !tbaa !13
  %.not157 = icmp eq ptr %99, null
  br i1 %.not157, label %104, label %100

100:                                              ; preds = %.thread188
  %101 = tail call ptr @parse_repo_owner(ptr noundef nonnull %99, ptr noundef nonnull @.str.27) #7
  store ptr %101, ptr %calloc, align 8, !tbaa !24
  %102 = load ptr, ptr %44, align 8, !tbaa !13
  %103 = tail call ptr @parse_repo_name(ptr noundef %102) #7
  br label %116

104:                                              ; preds = %.thread188
  %.not158 = icmp eq i32 %1, 0
  br i1 %.not158, label %115, label %105

105:                                              ; preds = %104
  %106 = load ptr, ptr @stdout, align 8, !tbaa !5
  %107 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 4, ptr noundef %106, ptr noundef nonnull @.str, ptr noundef nonnull @.str.28) #7
  %108 = load ptr, ptr @stdout, align 8, !tbaa !5
  %109 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.2) #7
  %110 = load ptr, ptr @stdout, align 8, !tbaa !5
  %111 = load ptr, ptr %42, align 8, !tbaa !12
  %112 = tail call i32 (i32, ptr, ptr, ...) @cc_fprintf(i32 noundef 9, ptr noundef %110, ptr noundef nonnull @.str.29, ptr noundef %111) #7
  %113 = load ptr, ptr @stdout, align 8, !tbaa !5
  %114 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %113, ptr noundef nonnull @.str.4) #7
  br label %115

115:                                              ; preds = %105, %104
  store ptr null, ptr %calloc, align 8, !tbaa !24
  br label %116

116:                                              ; preds = %115, %100
  %.sink = phi ptr [ null, %115 ], [ %103, %100 ]
  %117 = getelementptr inbounds i8, ptr %calloc, i64 64
  store ptr %.sink, ptr %117, align 8, !tbaa !27
  %118 = tail call ptr @json_object_get_array(ptr noundef nonnull %26, ptr noundef nonnull @.str.30) #7
  %.not159 = icmp eq ptr %118, null
  br i1 %.not159, label %119, label %.thread190

119:                                              ; preds = %116
  %120 = tail call ptr @json_object_get_array(ptr noundef nonnull %26, ptr noundef nonnull @.str.31) #7
  %.not160 = icmp eq ptr %120, null
  br i1 %.not160, label %140, label %.thread190

.thread190:                                       ; preds = %116, %119
  %.0120193 = phi ptr [ %120, %119 ], [ %118, %116 ]
  %121 = tail call ptr @list_new() #7
  %122 = getelementptr inbounds i8, ptr %calloc, i64 136
  store ptr %121, ptr %122, align 8, !tbaa !28
  %.not162 = icmp eq ptr %121, null
  br i1 %.not162, label %.thread208, label %123

123:                                              ; preds = %.thread190
  %124 = getelementptr inbounds i8, ptr %121, i64 24
  store ptr @free, ptr %124, align 8, !tbaa !29
  %125 = tail call i64 @json_array_get_count(ptr noundef nonnull %.0120193) #7
  %.not222 = icmp eq i64 %125, 0
  br i1 %.not222, label %.thread197, label %.lr.ph220

126:                                              ; preds = %136
  %127 = add i32 %.0113219, 1
  %128 = zext i32 %127 to i64
  %129 = tail call i64 @json_array_get_count(ptr noundef nonnull %.0120193) #7
  %130 = icmp ugt i64 %129, %128
  br i1 %130, label %.lr.ph220, label %.thread197, !llvm.loop !31

.lr.ph220:                                        ; preds = %123, %126
  %.0113219 = phi i32 [ %127, %126 ], [ 0, %123 ]
  %131 = tail call ptr @json_array_get_string_safe(ptr noundef nonnull %.0120193, i32 noundef %.0113219)
  %132 = load ptr, ptr @_debugger, align 8, !tbaa !25
  %.not163 = icmp eq ptr %132, null
  br i1 %.not163, label %133, label %135

133:                                              ; preds = %.lr.ph220
  %134 = tail call i32 @debug_init(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.24) #7
  br label %135

135:                                              ; preds = %133, %.lr.ph220
  tail call void (ptr, ptr, ...) @debug(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.32, ptr noundef %131) #7
  %.not164 = icmp eq ptr %131, null
  br i1 %.not164, label %.thread208, label %136

136:                                              ; preds = %135
  %137 = load ptr, ptr %122, align 8, !tbaa !28
  %138 = tail call ptr @list_node_new(ptr noundef nonnull %131) #7
  %139 = tail call ptr @list_rpush(ptr noundef %137, ptr noundef %138) #7
  %.not165.not = icmp eq ptr %139, null
  br i1 %.not165.not, label %.thread208, label %126

140:                                              ; preds = %119
  %141 = load ptr, ptr @_debugger, align 8, !tbaa !25
  %.not161 = icmp eq ptr %141, null
  br i1 %.not161, label %142, label %144

142:                                              ; preds = %140
  %143 = tail call i32 @debug_init(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.24) #7
  br label %144

144:                                              ; preds = %142, %140
  tail call void (ptr, ptr, ...) @debug(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.33) #7
  %145 = getelementptr inbounds i8, ptr %calloc, i64 136
  store ptr null, ptr %145, align 8, !tbaa !28
  br label %.thread197

.thread197:                                       ; preds = %126, %123, %144
  %146 = tail call ptr @json_object_get_object(ptr noundef nonnull %26, ptr noundef nonnull @.str.34) #7
  %.not166 = icmp eq ptr %146, null
  br i1 %.not166, label %150, label %147

147:                                              ; preds = %.thread197
  %148 = tail call ptr @parse_package_deps(ptr noundef nonnull %146)
  %149 = getelementptr inbounds i8, ptr %calloc, i64 120
  store ptr %148, ptr %149, align 8, !tbaa !32
  %.not168 = icmp eq ptr %148, null
  br i1 %.not168, label %.thread208, label %156

150:                                              ; preds = %.thread197
  %151 = load ptr, ptr @_debugger, align 8, !tbaa !25
  %.not167 = icmp eq ptr %151, null
  br i1 %.not167, label %152, label %154

152:                                              ; preds = %150
  %153 = tail call i32 @debug_init(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.24) #7
  br label %154

154:                                              ; preds = %152, %150
  tail call void (ptr, ptr, ...) @debug(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.35) #7
  %155 = getelementptr inbounds i8, ptr %calloc, i64 120
  store ptr null, ptr %155, align 8, !tbaa !32
  br label %156

156:                                              ; preds = %147, %154
  %157 = tail call ptr @json_object_get_object(ptr noundef nonnull %26, ptr noundef nonnull @.str.36) #7
  %.not169 = icmp eq ptr %157, null
  br i1 %.not169, label %161, label %158

158:                                              ; preds = %156
  %159 = tail call ptr @parse_package_deps(ptr noundef nonnull %157)
  %160 = getelementptr inbounds i8, ptr %calloc, i64 128
  store ptr %159, ptr %160, align 8, !tbaa !33
  %.not171 = icmp eq ptr %159, null
  br i1 %.not171, label %.thread208, label %.thread208.thread

161:                                              ; preds = %156
  %162 = load ptr, ptr @_debugger, align 8, !tbaa !25
  %.not170 = icmp eq ptr %162, null
  br i1 %.not170, label %163, label %165

163:                                              ; preds = %161
  %164 = tail call i32 @debug_init(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.24) #7
  br label %165

165:                                              ; preds = %163, %161
  tail call void (ptr, ptr, ...) @debug(ptr noundef nonnull @_debugger, ptr noundef nonnull @.str.37) #7
  %166 = getelementptr inbounds i8, ptr %calloc, i64 128
  store ptr null, ptr %166, align 8, !tbaa !33
  br label %.thread208.thread

.thread208.thread:                                ; preds = %37, %28, %27, %158, %165
  %.0114213.ph = phi ptr [ null, %27 ], [ null, %28 ], [ null, %37 ], [ %calloc, %158 ], [ %calloc, %165 ]
  tail call void @json_value_free(ptr noundef nonnull %14) #7
  br label %.thread214

.thread208:                                       ; preds = %72, %135, %136, %.thread190, %147, %158
  tail call void @json_value_free(ptr noundef nonnull %14) #7
  tail call void @clib_package_free(ptr noundef nonnull %calloc)
  br label %.thread214

.thread214:                                       ; preds = %.thread208.thread, %16, %15, %4, %3, %.thread208
  %.0 = phi ptr [ null, %.thread208 ], [ null, %3 ], [ null, %4 ], [ null, %15 ], [ null, %16 ], [ %.0114213.ph, %.thread208.thread ]
  ret ptr %.0
}

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

declare ptr @json_parse_string(ptr noundef) local_unnamed_addr #0

declare ptr @json_value_get_object(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias ptr @strdup(ptr nocapture noundef readonly) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @json_object_get_string_safe(ptr noundef, ptr noundef) local_unnamed_addr #5

declare ptr @json_object_get_array(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i64 @json_array_get_count(ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @json_array_get_string_safe(ptr noundef, i32 noundef) local_unnamed_addr #5

declare i32 @asprintf(ptr noundef, ptr noundef, ...) local_unnamed_addr #0

declare i32 @debug_init(ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @debug(ptr noundef, ptr noundef, ...) local_unnamed_addr #0

declare ptr @parse_repo_owner(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @parse_repo_name(ptr noundef) local_unnamed_addr #0

declare ptr @list_new() local_unnamed_addr #0

declare ptr @list_rpush(ptr noundef, ptr noundef) local_unnamed_addr #0

declare ptr @list_node_new(ptr noundef) local_unnamed_addr #0

declare ptr @json_object_get_object(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @parse_package_deps(ptr noundef) local_unnamed_addr #5

declare void @json_value_free(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #6

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn 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 #5 = { inlinehint 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 #6 = { nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #7 = { nounwind }
attributes #8 = { cold nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 32}
!10 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !11, i64 152}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !6, i64 48}
!13 = !{!10, !6, i64 56}
!14 = !{!10, !6, i64 80}
!15 = !{!10, !6, i64 40}
!16 = !{!10, !6, i64 8}
!17 = !{!10, !6, i64 24}
!18 = !{!10, !6, i64 16}
!19 = !{!10, !6, i64 88}
!20 = !{!10, !6, i64 112}
!21 = !{!10, !6, i64 104}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!10, !6, i64 0}
!25 = !{!26, !6, i64 0}
!26 = !{!"", !6, i64 0, !11, i64 8, !11, i64 12, !6, i64 16}
!27 = !{!10, !6, i64 64}
!28 = !{!10, !6, i64 136}
!29 = !{!30, !6, i64 24}
!30 = !{!"", !6, i64 0, !6, i64 8, !11, i64 16, !6, i64 24, !6, i64 32}
!31 = distinct !{!31, !23}
!32 = !{!10, !6, i64 120}
!33 = !{!10, !6, i64 128}


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