; LLVM IR from LamberttLiu/CS-Basic-SelfLearning :: 【DSA】数据结构与算法（C语言版本）/src/search/uthash (example)

; 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.my_struct = type { i32, [21 x i8], %struct.UT_hash_handle }
%struct.UT_hash_handle = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.UT_hash_table = type { ptr, i32, i32, i32, ptr, i64, i32, i32, i32, i32, i32 }

@users = external dso_local global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [20 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @find_user(i32 noundef) #0

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @by_name(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @by_id(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local ptr @getl(ptr noundef) #0

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

28:                                               ; preds = %652, %0
  %29 = load i32, ptr %3, align 4, !tbaa !5
  %30 = icmp ne i32 %29, 0
  br i1 %30, label %31, label %653

31:                                               ; preds = %28
  %32 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %33 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %34 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %35 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  %36 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %37 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %38 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  %39 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  %40 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  %41 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %42 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  %43 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %44 = call ptr @getl(ptr noundef @.str.14)
  %45 = call i32 @atoi(ptr noundef %44) #5
  switch i32 %45, label %652 [
    i32 1, label %46
    i32 2, label %50
    i32 3, label %55
    i32 4, label %69
    i32 5, label %80
    i32 6, label %81
    i32 7, label %358
    i32 8, label %635
    i32 9, label %636
    i32 10, label %651
  ]

46:                                               ; preds = %31
  %47 = load i32, ptr %2, align 4, !tbaa !5
  %48 = add nsw i32 %47, 1
  store i32 %48, ptr %2, align 4, !tbaa !5
  %49 = call ptr @getl(ptr noundef @.str.15)
  call void @add_user(i32 noundef %47, ptr noundef %49)
  br label %652

50:                                               ; preds = %31
  %51 = call ptr @getl(ptr noundef @.str.16)
  %52 = call i32 @atoi(ptr noundef %51) #5
  store i32 %52, ptr %5, align 4, !tbaa !5
  %53 = load i32, ptr %5, align 4, !tbaa !5
  %54 = call ptr @getl(ptr noundef @.str.15)
  call void @add_user(i32 noundef %53, ptr noundef %54)
  br label %652

55:                                               ; preds = %31
  %56 = call ptr @getl(ptr noundef @.str.17)
  %57 = call i32 @atoi(ptr noundef %56) #5
  %58 = call ptr @find_user(i32 noundef %57)
  store ptr %58, ptr %4, align 8, !tbaa !9
  %59 = load ptr, ptr %4, align 8, !tbaa !9
  %60 = icmp ne ptr %59, null
  br i1 %60, label %61, label %65

61:                                               ; preds = %55
  %62 = load ptr, ptr %4, align 8, !tbaa !9
  %63 = getelementptr inbounds %struct.my_struct, ptr %62, i32 0, i32 1
  %64 = getelementptr inbounds [21 x i8], ptr %63, i64 0, i64 0
  br label %66

65:                                               ; preds = %55
  br label %66

66:                                               ; preds = %65, %61
  %67 = phi ptr [ %64, %61 ], [ @.str.19, %65 ]
  %68 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, ptr noundef %67)
  br label %652

69:                                               ; preds = %31
  %70 = call ptr @getl(ptr noundef @.str.20)
  %71 = call i32 @atoi(ptr noundef %70) #5
  %72 = call ptr @find_user(i32 noundef %71)
  store ptr %72, ptr %4, align 8, !tbaa !9
  %73 = load ptr, ptr %4, align 8, !tbaa !9
  %74 = icmp ne ptr %73, null
  br i1 %74, label %75, label %77

75:                                               ; preds = %69
  %76 = load ptr, ptr %4, align 8, !tbaa !9
  call void @delete_user(ptr noundef %76)
  br label %79

77:                                               ; preds = %69
  %78 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  br label %79

79:                                               ; preds = %77, %75
  br label %652

80:                                               ; preds = %31
  call void @delete_all()
  br label %652

81:                                               ; preds = %31
  br label %82

82:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %83 = load ptr, ptr @users, align 8, !tbaa !9
  %84 = icmp ne ptr %83, null
  br i1 %84, label %85, label %355

85:                                               ; preds = %82
  store i32 1, ptr %9, align 4, !tbaa !5
  store i32 1, ptr %7, align 4, !tbaa !5
  %86 = load ptr, ptr @users, align 8, !tbaa !9
  %87 = getelementptr inbounds %struct.my_struct, ptr %86, i32 0, i32 2
  store ptr %87, ptr %15, align 8, !tbaa !9
  br label %88

88:                                               ; preds = %351, %85
  %89 = load i32, ptr %7, align 4, !tbaa !5
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %354

91:                                               ; preds = %88
  %92 = load ptr, ptr %15, align 8, !tbaa !9
  store ptr %92, ptr %12, align 8, !tbaa !9
  store ptr null, ptr %15, align 8, !tbaa !9
  store ptr null, ptr %16, align 8, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !5
  br label %93

93:                                               ; preds = %321, %91
  %94 = load ptr, ptr %12, align 8, !tbaa !9
  %95 = icmp ne ptr %94, null
  br i1 %95, label %96, label %323

96:                                               ; preds = %93
  %97 = load i32, ptr %8, align 4, !tbaa !5
  %98 = add i32 %97, 1
  store i32 %98, ptr %8, align 4, !tbaa !5
  %99 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %99, ptr %13, align 8, !tbaa !9
  store i32 0, ptr %10, align 4, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %100

100:                                              ; preds = %129, %96
  %101 = load i32, ptr %6, align 4, !tbaa !5
  %102 = load i32, ptr %9, align 4, !tbaa !5
  %103 = icmp ult i32 %101, %102
  br i1 %103, label %104, label %132

104:                                              ; preds = %100
  %105 = load i32, ptr %10, align 4, !tbaa !5
  %106 = add i32 %105, 1
  store i32 %106, ptr %10, align 4, !tbaa !5
  %107 = load ptr, ptr %13, align 8, !tbaa !9
  %108 = getelementptr inbounds %struct.UT_hash_handle, ptr %107, i32 0, i32 2
  %109 = load ptr, ptr %108, align 8, !tbaa !11
  %110 = icmp ne ptr %109, null
  br i1 %110, label %111, label %122

111:                                              ; preds = %104
  %112 = load ptr, ptr %13, align 8, !tbaa !9
  %113 = getelementptr inbounds %struct.UT_hash_handle, ptr %112, i32 0, i32 2
  %114 = load ptr, ptr %113, align 8, !tbaa !11
  %115 = load ptr, ptr @users, align 8, !tbaa !9
  %116 = getelementptr inbounds %struct.my_struct, ptr %115, i32 0, i32 2
  %117 = getelementptr inbounds %struct.UT_hash_handle, ptr %116, i32 0, i32 0
  %118 = load ptr, ptr %117, align 8, !tbaa !13
  %119 = getelementptr inbounds %struct.UT_hash_table, ptr %118, i32 0, i32 5
  %120 = load i64, ptr %119, align 8, !tbaa !15
  %121 = getelementptr inbounds i8, ptr %114, i64 %120
  br label %123

122:                                              ; preds = %104
  br label %123

123:                                              ; preds = %122, %111
  %124 = phi ptr [ %121, %111 ], [ null, %122 ]
  store ptr %124, ptr %13, align 8, !tbaa !9
  %125 = load ptr, ptr %13, align 8, !tbaa !9
  %126 = icmp eq ptr %125, null
  br i1 %126, label %127, label %128

127:                                              ; preds = %123
  br label %132

128:                                              ; preds = %123
  br label %129

129:                                              ; preds = %128
  %130 = load i32, ptr %6, align 4, !tbaa !5
  %131 = add i32 %130, 1
  store i32 %131, ptr %6, align 4, !tbaa !5
  br label %100, !llvm.loop !18

132:                                              ; preds = %127, %100
  %133 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %133, ptr %11, align 4, !tbaa !5
  br label %134

134:                                              ; preds = %319, %132
  %135 = load i32, ptr %10, align 4, !tbaa !5
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %145, label %137

137:                                              ; preds = %134
  %138 = load i32, ptr %11, align 4, !tbaa !5
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %143

140:                                              ; preds = %137
  %141 = load ptr, ptr %13, align 8, !tbaa !9
  %142 = icmp ne ptr %141, null
  br label %143

143:                                              ; preds = %140, %137
  %144 = phi i1 [ false, %137 ], [ %142, %140 ]
  br label %145

145:                                              ; preds = %143, %134
  %146 = phi i1 [ true, %134 ], [ %144, %143 ]
  br i1 %146, label %147, label %321

147:                                              ; preds = %145
  %148 = load i32, ptr %10, align 4, !tbaa !5
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %150, label %172

150:                                              ; preds = %147
  %151 = load ptr, ptr %13, align 8, !tbaa !9
  store ptr %151, ptr %14, align 8, !tbaa !9
  %152 = load ptr, ptr %13, align 8, !tbaa !9
  %153 = getelementptr inbounds %struct.UT_hash_handle, ptr %152, i32 0, i32 2
  %154 = load ptr, ptr %153, align 8, !tbaa !11
  %155 = icmp ne ptr %154, null
  br i1 %155, label %156, label %167

156:                                              ; preds = %150
  %157 = load ptr, ptr %13, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct.UT_hash_handle, ptr %157, i32 0, i32 2
  %159 = load ptr, ptr %158, align 8, !tbaa !11
  %160 = load ptr, ptr @users, align 8, !tbaa !9
  %161 = getelementptr inbounds %struct.my_struct, ptr %160, i32 0, i32 2
  %162 = getelementptr inbounds %struct.UT_hash_handle, ptr %161, i32 0, i32 0
  %163 = load ptr, ptr %162, align 8, !tbaa !13
  %164 = getelementptr inbounds %struct.UT_hash_table, ptr %163, i32 0, i32 5
  %165 = load i64, ptr %164, align 8, !tbaa !15
  %166 = getelementptr inbounds i8, ptr %159, i64 %165
  br label %168

167:                                              ; preds = %150
  br label %168

168:                                              ; preds = %167, %156
  %169 = phi ptr [ %166, %156 ], [ null, %167 ]
  store ptr %169, ptr %13, align 8, !tbaa !9
  %170 = load i32, ptr %11, align 4, !tbaa !5
  %171 = add i32 %170, -1
  store i32 %171, ptr %11, align 4, !tbaa !5
  br label %275

172:                                              ; preds = %147
  %173 = load i32, ptr %11, align 4, !tbaa !5
  %174 = icmp eq i32 %173, 0
  br i1 %174, label %178, label %175

175:                                              ; preds = %172
  %176 = load ptr, ptr %13, align 8, !tbaa !9
  %177 = icmp eq ptr %176, null
  br i1 %177, label %178, label %204

178:                                              ; preds = %175, %172
  %179 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %179, ptr %14, align 8, !tbaa !9
  %180 = load ptr, ptr %12, align 8, !tbaa !9
  %181 = icmp ne ptr %180, null
  br i1 %181, label %182, label %201

182:                                              ; preds = %178
  %183 = load ptr, ptr %12, align 8, !tbaa !9
  %184 = getelementptr inbounds %struct.UT_hash_handle, ptr %183, i32 0, i32 2
  %185 = load ptr, ptr %184, align 8, !tbaa !11
  %186 = icmp ne ptr %185, null
  br i1 %186, label %187, label %198

187:                                              ; preds = %182
  %188 = load ptr, ptr %12, align 8, !tbaa !9
  %189 = getelementptr inbounds %struct.UT_hash_handle, ptr %188, i32 0, i32 2
  %190 = load ptr, ptr %189, align 8, !tbaa !11
  %191 = load ptr, ptr @users, align 8, !tbaa !9
  %192 = getelementptr inbounds %struct.my_struct, ptr %191, i32 0, i32 2
  %193 = getelementptr inbounds %struct.UT_hash_handle, ptr %192, i32 0, i32 0
  %194 = load ptr, ptr %193, align 8, !tbaa !13
  %195 = getelementptr inbounds %struct.UT_hash_table, ptr %194, i32 0, i32 5
  %196 = load i64, ptr %195, align 8, !tbaa !15
  %197 = getelementptr inbounds i8, ptr %190, i64 %196
  br label %199

198:                                              ; preds = %182
  br label %199

199:                                              ; preds = %198, %187
  %200 = phi ptr [ %197, %187 ], [ null, %198 ]
  store ptr %200, ptr %12, align 8, !tbaa !9
  br label %201

201:                                              ; preds = %199, %178
  %202 = load i32, ptr %10, align 4, !tbaa !5
  %203 = add i32 %202, -1
  store i32 %203, ptr %10, align 4, !tbaa !5
  br label %274

204:                                              ; preds = %175
  %205 = load ptr, ptr %12, align 8, !tbaa !9
  %206 = load ptr, ptr @users, align 8, !tbaa !9
  %207 = getelementptr inbounds %struct.my_struct, ptr %206, i32 0, i32 2
  %208 = getelementptr inbounds %struct.UT_hash_handle, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !13
  %210 = getelementptr inbounds %struct.UT_hash_table, ptr %209, i32 0, i32 5
  %211 = load i64, ptr %210, align 8, !tbaa !15
  %212 = sub i64 0, %211
  %213 = getelementptr inbounds i8, ptr %205, i64 %212
  %214 = load ptr, ptr %13, align 8, !tbaa !9
  %215 = load ptr, ptr @users, align 8, !tbaa !9
  %216 = getelementptr inbounds %struct.my_struct, ptr %215, i32 0, i32 2
  %217 = getelementptr inbounds %struct.UT_hash_handle, ptr %216, i32 0, i32 0
  %218 = load ptr, ptr %217, align 8, !tbaa !13
  %219 = getelementptr inbounds %struct.UT_hash_table, ptr %218, i32 0, i32 5
  %220 = load i64, ptr %219, align 8, !tbaa !15
  %221 = sub i64 0, %220
  %222 = getelementptr inbounds i8, ptr %214, i64 %221
  %223 = call i32 @by_name(ptr noundef %213, ptr noundef %222)
  %224 = icmp sle i32 %223, 0
  br i1 %224, label %225, label %251

225:                                              ; preds = %204
  %226 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %226, ptr %14, align 8, !tbaa !9
  %227 = load ptr, ptr %12, align 8, !tbaa !9
  %228 = icmp ne ptr %227, null
  br i1 %228, label %229, label %248

229:                                              ; preds = %225
  %230 = load ptr, ptr %12, align 8, !tbaa !9
  %231 = getelementptr inbounds %struct.UT_hash_handle, ptr %230, i32 0, i32 2
  %232 = load ptr, ptr %231, align 8, !tbaa !11
  %233 = icmp ne ptr %232, null
  br i1 %233, label %234, label %245

234:                                              ; preds = %229
  %235 = load ptr, ptr %12, align 8, !tbaa !9
  %236 = getelementptr inbounds %struct.UT_hash_handle, ptr %235, i32 0, i32 2
  %237 = load ptr, ptr %236, align 8, !tbaa !11
  %238 = load ptr, ptr @users, align 8, !tbaa !9
  %239 = getelementptr inbounds %struct.my_struct, ptr %238, i32 0, i32 2
  %240 = getelementptr inbounds %struct.UT_hash_handle, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 8, !tbaa !13
  %242 = getelementptr inbounds %struct.UT_hash_table, ptr %241, i32 0, i32 5
  %243 = load i64, ptr %242, align 8, !tbaa !15
  %244 = getelementptr inbounds i8, ptr %237, i64 %243
  br label %246

245:                                              ; preds = %229
  br label %246

246:                                              ; preds = %245, %234
  %247 = phi ptr [ %244, %234 ], [ null, %245 ]
  store ptr %247, ptr %12, align 8, !tbaa !9
  br label %248

248:                                              ; preds = %246, %225
  %249 = load i32, ptr %10, align 4, !tbaa !5
  %250 = add i32 %249, -1
  store i32 %250, ptr %10, align 4, !tbaa !5
  br label %273

251:                                              ; preds = %204
  %252 = load ptr, ptr %13, align 8, !tbaa !9
  store ptr %252, ptr %14, align 8, !tbaa !9
  %253 = load ptr, ptr %13, align 8, !tbaa !9
  %254 = getelementptr inbounds %struct.UT_hash_handle, ptr %253, i32 0, i32 2
  %255 = load ptr, ptr %254, align 8, !tbaa !11
  %256 = icmp ne ptr %255, null
  br i1 %256, label %257, label %268

257:                                              ; preds = %251
  %258 = load ptr, ptr %13, align 8, !tbaa !9
  %259 = getelementptr inbounds %struct.UT_hash_handle, ptr %258, i32 0, i32 2
  %260 = load ptr, ptr %259, align 8, !tbaa !11
  %261 = load ptr, ptr @users, align 8, !tbaa !9
  %262 = getelementptr inbounds %struct.my_struct, ptr %261, i32 0, i32 2
  %263 = getelementptr inbounds %struct.UT_hash_handle, ptr %262, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !13
  %265 = getelementptr inbounds %struct.UT_hash_table, ptr %264, i32 0, i32 5
  %266 = load i64, ptr %265, align 8, !tbaa !15
  %267 = getelementptr inbounds i8, ptr %260, i64 %266
  br label %269

268:                                              ; preds = %251
  br label %269

269:                                              ; preds = %268, %257
  %270 = phi ptr [ %267, %257 ], [ null, %268 ]
  store ptr %270, ptr %13, align 8, !tbaa !9
  %271 = load i32, ptr %11, align 4, !tbaa !5
  %272 = add i32 %271, -1
  store i32 %272, ptr %11, align 4, !tbaa !5
  br label %273

273:                                              ; preds = %269, %248
  br label %274

274:                                              ; preds = %273, %201
  br label %275

275:                                              ; preds = %274, %168
  %276 = load ptr, ptr %16, align 8, !tbaa !9
  %277 = icmp ne ptr %276, null
  br i1 %277, label %278, label %296

278:                                              ; preds = %275
  %279 = load ptr, ptr %14, align 8, !tbaa !9
  %280 = icmp ne ptr %279, null
  br i1 %280, label %281, label %291

281:                                              ; preds = %278
  %282 = load ptr, ptr %14, align 8, !tbaa !9
  %283 = load ptr, ptr @users, align 8, !tbaa !9
  %284 = getelementptr inbounds %struct.my_struct, ptr %283, i32 0, i32 2
  %285 = getelementptr inbounds %struct.UT_hash_handle, ptr %284, i32 0, i32 0
  %286 = load ptr, ptr %285, align 8, !tbaa !13
  %287 = getelementptr inbounds %struct.UT_hash_table, ptr %286, i32 0, i32 5
  %288 = load i64, ptr %287, align 8, !tbaa !15
  %289 = sub i64 0, %288
  %290 = getelementptr inbounds i8, ptr %282, i64 %289
  br label %292

291:                                              ; preds = %278
  br label %292

292:                                              ; preds = %291, %281
  %293 = phi ptr [ %290, %281 ], [ null, %291 ]
  %294 = load ptr, ptr %16, align 8, !tbaa !9
  %295 = getelementptr inbounds %struct.UT_hash_handle, ptr %294, i32 0, i32 2
  store ptr %293, ptr %295, align 8, !tbaa !11
  br label %298

296:                                              ; preds = %275
  %297 = load ptr, ptr %14, align 8, !tbaa !9
  store ptr %297, ptr %15, align 8, !tbaa !9
  br label %298

298:                                              ; preds = %296, %292
  %299 = load ptr, ptr %14, align 8, !tbaa !9
  %300 = icmp ne ptr %299, null
  br i1 %300, label %301, label %319

301:                                              ; preds = %298
  %302 = load ptr, ptr %16, align 8, !tbaa !9
  %303 = icmp ne ptr %302, null
  br i1 %303, label %304, label %314

304:                                              ; preds = %301
  %305 = load ptr, ptr %16, align 8, !tbaa !9
  %306 = load ptr, ptr @users, align 8, !tbaa !9
  %307 = getelementptr inbounds %struct.my_struct, ptr %306, i32 0, i32 2
  %308 = getelementptr inbounds %struct.UT_hash_handle, ptr %307, i32 0, i32 0
  %309 = load ptr, ptr %308, align 8, !tbaa !13
  %310 = getelementptr inbounds %struct.UT_hash_table, ptr %309, i32 0, i32 5
  %311 = load i64, ptr %310, align 8, !tbaa !15
  %312 = sub i64 0, %311
  %313 = getelementptr inbounds i8, ptr %305, i64 %312
  br label %315

314:                                              ; preds = %301
  br label %315

315:                                              ; preds = %314, %304
  %316 = phi ptr [ %313, %304 ], [ null, %314 ]
  %317 = load ptr, ptr %14, align 8, !tbaa !9
  %318 = getelementptr inbounds %struct.UT_hash_handle, ptr %317, i32 0, i32 1
  store ptr %316, ptr %318, align 8, !tbaa !20
  br label %319

319:                                              ; preds = %315, %298
  %320 = load ptr, ptr %14, align 8, !tbaa !9
  store ptr %320, ptr %16, align 8, !tbaa !9
  br label %134, !llvm.loop !21

321:                                              ; preds = %145
  %322 = load ptr, ptr %13, align 8, !tbaa !9
  store ptr %322, ptr %12, align 8, !tbaa !9
  br label %93, !llvm.loop !22

323:                                              ; preds = %93
  %324 = load ptr, ptr %16, align 8, !tbaa !9
  %325 = icmp ne ptr %324, null
  br i1 %325, label %326, label %329

326:                                              ; preds = %323
  %327 = load ptr, ptr %16, align 8, !tbaa !9
  %328 = getelementptr inbounds %struct.UT_hash_handle, ptr %327, i32 0, i32 2
  store ptr null, ptr %328, align 8, !tbaa !11
  br label %329

329:                                              ; preds = %326, %323
  %330 = load i32, ptr %8, align 4, !tbaa !5
  %331 = icmp ule i32 %330, 1
  br i1 %331, label %332, label %351

332:                                              ; preds = %329
  store i32 0, ptr %7, align 4, !tbaa !5
  %333 = load ptr, ptr %16, align 8, !tbaa !9
  %334 = load ptr, ptr @users, align 8, !tbaa !9
  %335 = getelementptr inbounds %struct.my_struct, ptr %334, i32 0, i32 2
  %336 = getelementptr inbounds %struct.UT_hash_handle, ptr %335, i32 0, i32 0
  %337 = load ptr, ptr %336, align 8, !tbaa !13
  %338 = getelementptr inbounds %struct.UT_hash_table, ptr %337, i32 0, i32 4
  store ptr %333, ptr %338, align 8, !tbaa !23
  br label %339

339:                                              ; preds = %332
  %340 = load ptr, ptr %15, align 8, !tbaa !9
  %341 = load ptr, ptr @users, align 8, !tbaa !9
  %342 = getelementptr inbounds %struct.my_struct, ptr %341, i32 0, i32 2
  %343 = getelementptr inbounds %struct.UT_hash_handle, ptr %342, i32 0, i32 0
  %344 = load ptr, ptr %343, align 8, !tbaa !13
  %345 = getelementptr inbounds %struct.UT_hash_table, ptr %344, i32 0, i32 5
  %346 = load i64, ptr %345, align 8, !tbaa !15
  %347 = sub i64 0, %346
  %348 = getelementptr inbounds i8, ptr %340, i64 %347
  store ptr %348, ptr @users, align 8, !tbaa !9
  br label %349

349:                                              ; preds = %339
  br label %350

350:                                              ; preds = %349
  br label %351

351:                                              ; preds = %350, %329
  %352 = load i32, ptr %9, align 4, !tbaa !5
  %353 = mul i32 %352, 2
  store i32 %353, ptr %9, align 4, !tbaa !5
  br label %88, !llvm.loop !24

354:                                              ; preds = %88
  br label %355

355:                                              ; preds = %354, %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %356

356:                                              ; preds = %355
  br label %357

357:                                              ; preds = %356
  br label %652

358:                                              ; preds = %31
  br label %359

359:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %360 = load ptr, ptr @users, align 8, !tbaa !9
  %361 = icmp ne ptr %360, null
  br i1 %361, label %362, label %632

362:                                              ; preds = %359
  store i32 1, ptr %20, align 4, !tbaa !5
  store i32 1, ptr %18, align 4, !tbaa !5
  %363 = load ptr, ptr @users, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.my_struct, ptr %363, i32 0, i32 2
  store ptr %364, ptr %26, align 8, !tbaa !9
  br label %365

365:                                              ; preds = %628, %362
  %366 = load i32, ptr %18, align 4, !tbaa !5
  %367 = icmp ne i32 %366, 0
  br i1 %367, label %368, label %631

368:                                              ; preds = %365
  %369 = load ptr, ptr %26, align 8, !tbaa !9
  store ptr %369, ptr %23, align 8, !tbaa !9
  store ptr null, ptr %26, align 8, !tbaa !9
  store ptr null, ptr %27, align 8, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %370

370:                                              ; preds = %598, %368
  %371 = load ptr, ptr %23, align 8, !tbaa !9
  %372 = icmp ne ptr %371, null
  br i1 %372, label %373, label %600

373:                                              ; preds = %370
  %374 = load i32, ptr %19, align 4, !tbaa !5
  %375 = add i32 %374, 1
  store i32 %375, ptr %19, align 4, !tbaa !5
  %376 = load ptr, ptr %23, align 8, !tbaa !9
  store ptr %376, ptr %24, align 8, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !5
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %377

377:                                              ; preds = %406, %373
  %378 = load i32, ptr %17, align 4, !tbaa !5
  %379 = load i32, ptr %20, align 4, !tbaa !5
  %380 = icmp ult i32 %378, %379
  br i1 %380, label %381, label %409

381:                                              ; preds = %377
  %382 = load i32, ptr %21, align 4, !tbaa !5
  %383 = add i32 %382, 1
  store i32 %383, ptr %21, align 4, !tbaa !5
  %384 = load ptr, ptr %24, align 8, !tbaa !9
  %385 = getelementptr inbounds %struct.UT_hash_handle, ptr %384, i32 0, i32 2
  %386 = load ptr, ptr %385, align 8, !tbaa !11
  %387 = icmp ne ptr %386, null
  br i1 %387, label %388, label %399

388:                                              ; preds = %381
  %389 = load ptr, ptr %24, align 8, !tbaa !9
  %390 = getelementptr inbounds %struct.UT_hash_handle, ptr %389, i32 0, i32 2
  %391 = load ptr, ptr %390, align 8, !tbaa !11
  %392 = load ptr, ptr @users, align 8, !tbaa !9
  %393 = getelementptr inbounds %struct.my_struct, ptr %392, i32 0, i32 2
  %394 = getelementptr inbounds %struct.UT_hash_handle, ptr %393, i32 0, i32 0
  %395 = load ptr, ptr %394, align 8, !tbaa !13
  %396 = getelementptr inbounds %struct.UT_hash_table, ptr %395, i32 0, i32 5
  %397 = load i64, ptr %396, align 8, !tbaa !15
  %398 = getelementptr inbounds i8, ptr %391, i64 %397
  br label %400

399:                                              ; preds = %381
  br label %400

400:                                              ; preds = %399, %388
  %401 = phi ptr [ %398, %388 ], [ null, %399 ]
  store ptr %401, ptr %24, align 8, !tbaa !9
  %402 = load ptr, ptr %24, align 8, !tbaa !9
  %403 = icmp eq ptr %402, null
  br i1 %403, label %404, label %405

404:                                              ; preds = %400
  br label %409

405:                                              ; preds = %400
  br label %406

406:                                              ; preds = %405
  %407 = load i32, ptr %17, align 4, !tbaa !5
  %408 = add i32 %407, 1
  store i32 %408, ptr %17, align 4, !tbaa !5
  br label %377, !llvm.loop !25

409:                                              ; preds = %404, %377
  %410 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %410, ptr %22, align 4, !tbaa !5
  br label %411

411:                                              ; preds = %596, %409
  %412 = load i32, ptr %21, align 4, !tbaa !5
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %422, label %414

414:                                              ; preds = %411
  %415 = load i32, ptr %22, align 4, !tbaa !5
  %416 = icmp ne i32 %415, 0
  br i1 %416, label %417, label %420

417:                                              ; preds = %414
  %418 = load ptr, ptr %24, align 8, !tbaa !9
  %419 = icmp ne ptr %418, null
  br label %420

420:                                              ; preds = %417, %414
  %421 = phi i1 [ false, %414 ], [ %419, %417 ]
  br label %422

422:                                              ; preds = %420, %411
  %423 = phi i1 [ true, %411 ], [ %421, %420 ]
  br i1 %423, label %424, label %598

424:                                              ; preds = %422
  %425 = load i32, ptr %21, align 4, !tbaa !5
  %426 = icmp eq i32 %425, 0
  br i1 %426, label %427, label %449

427:                                              ; preds = %424
  %428 = load ptr, ptr %24, align 8, !tbaa !9
  store ptr %428, ptr %25, align 8, !tbaa !9
  %429 = load ptr, ptr %24, align 8, !tbaa !9
  %430 = getelementptr inbounds %struct.UT_hash_handle, ptr %429, i32 0, i32 2
  %431 = load ptr, ptr %430, align 8, !tbaa !11
  %432 = icmp ne ptr %431, null
  br i1 %432, label %433, label %444

433:                                              ; preds = %427
  %434 = load ptr, ptr %24, align 8, !tbaa !9
  %435 = getelementptr inbounds %struct.UT_hash_handle, ptr %434, i32 0, i32 2
  %436 = load ptr, ptr %435, align 8, !tbaa !11
  %437 = load ptr, ptr @users, align 8, !tbaa !9
  %438 = getelementptr inbounds %struct.my_struct, ptr %437, i32 0, i32 2
  %439 = getelementptr inbounds %struct.UT_hash_handle, ptr %438, i32 0, i32 0
  %440 = load ptr, ptr %439, align 8, !tbaa !13
  %441 = getelementptr inbounds %struct.UT_hash_table, ptr %440, i32 0, i32 5
  %442 = load i64, ptr %441, align 8, !tbaa !15
  %443 = getelementptr inbounds i8, ptr %436, i64 %442
  br label %445

444:                                              ; preds = %427
  br label %445

445:                                              ; preds = %444, %433
  %446 = phi ptr [ %443, %433 ], [ null, %444 ]
  store ptr %446, ptr %24, align 8, !tbaa !9
  %447 = load i32, ptr %22, align 4, !tbaa !5
  %448 = add i32 %447, -1
  store i32 %448, ptr %22, align 4, !tbaa !5
  br label %552

449:                                              ; preds = %424
  %450 = load i32, ptr %22, align 4, !tbaa !5
  %451 = icmp eq i32 %450, 0
  br i1 %451, label %455, label %452

452:                                              ; preds = %449
  %453 = load ptr, ptr %24, align 8, !tbaa !9
  %454 = icmp eq ptr %453, null
  br i1 %454, label %455, label %481

455:                                              ; preds = %452, %449
  %456 = load ptr, ptr %23, align 8, !tbaa !9
  store ptr %456, ptr %25, align 8, !tbaa !9
  %457 = load ptr, ptr %23, align 8, !tbaa !9
  %458 = icmp ne ptr %457, null
  br i1 %458, label %459, label %478

459:                                              ; preds = %455
  %460 = load ptr, ptr %23, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct.UT_hash_handle, ptr %460, i32 0, i32 2
  %462 = load ptr, ptr %461, align 8, !tbaa !11
  %463 = icmp ne ptr %462, null
  br i1 %463, label %464, label %475

464:                                              ; preds = %459
  %465 = load ptr, ptr %23, align 8, !tbaa !9
  %466 = getelementptr inbounds %struct.UT_hash_handle, ptr %465, i32 0, i32 2
  %467 = load ptr, ptr %466, align 8, !tbaa !11
  %468 = load ptr, ptr @users, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.my_struct, ptr %468, i32 0, i32 2
  %470 = getelementptr inbounds %struct.UT_hash_handle, ptr %469, i32 0, i32 0
  %471 = load ptr, ptr %470, align 8, !tbaa !13
  %472 = getelementptr inbounds %struct.UT_hash_table, ptr %471, i32 0, i32 5
  %473 = load i64, ptr %472, align 8, !tbaa !15
  %474 = getelementptr inbounds i8, ptr %467, i64 %473
  br label %476

475:                                              ; preds = %459
  br label %476

476:                                              ; preds = %475, %464
  %477 = phi ptr [ %474, %464 ], [ null, %475 ]
  store ptr %477, ptr %23, align 8, !tbaa !9
  br label %478

478:                                              ; preds = %476, %455
  %479 = load i32, ptr %21, align 4, !tbaa !5
  %480 = add i32 %479, -1
  store i32 %480, ptr %21, align 4, !tbaa !5
  br label %551

481:                                              ; preds = %452
  %482 = load ptr, ptr %23, align 8, !tbaa !9
  %483 = load ptr, ptr @users, align 8, !tbaa !9
  %484 = getelementptr inbounds %struct.my_struct, ptr %483, i32 0, i32 2
  %485 = getelementptr inbounds %struct.UT_hash_handle, ptr %484, i32 0, i32 0
  %486 = load ptr, ptr %485, align 8, !tbaa !13
  %487 = getelementptr inbounds %struct.UT_hash_table, ptr %486, i32 0, i32 5
  %488 = load i64, ptr %487, align 8, !tbaa !15
  %489 = sub i64 0, %488
  %490 = getelementptr inbounds i8, ptr %482, i64 %489
  %491 = load ptr, ptr %24, align 8, !tbaa !9
  %492 = load ptr, ptr @users, align 8, !tbaa !9
  %493 = getelementptr inbounds %struct.my_struct, ptr %492, i32 0, i32 2
  %494 = getelementptr inbounds %struct.UT_hash_handle, ptr %493, i32 0, i32 0
  %495 = load ptr, ptr %494, align 8, !tbaa !13
  %496 = getelementptr inbounds %struct.UT_hash_table, ptr %495, i32 0, i32 5
  %497 = load i64, ptr %496, align 8, !tbaa !15
  %498 = sub i64 0, %497
  %499 = getelementptr inbounds i8, ptr %491, i64 %498
  %500 = call i32 @by_id(ptr noundef %490, ptr noundef %499)
  %501 = icmp sle i32 %500, 0
  br i1 %501, label %502, label %528

502:                                              ; preds = %481
  %503 = load ptr, ptr %23, align 8, !tbaa !9
  store ptr %503, ptr %25, align 8, !tbaa !9
  %504 = load ptr, ptr %23, align 8, !tbaa !9
  %505 = icmp ne ptr %504, null
  br i1 %505, label %506, label %525

506:                                              ; preds = %502
  %507 = load ptr, ptr %23, align 8, !tbaa !9
  %508 = getelementptr inbounds %struct.UT_hash_handle, ptr %507, i32 0, i32 2
  %509 = load ptr, ptr %508, align 8, !tbaa !11
  %510 = icmp ne ptr %509, null
  br i1 %510, label %511, label %522

511:                                              ; preds = %506
  %512 = load ptr, ptr %23, align 8, !tbaa !9
  %513 = getelementptr inbounds %struct.UT_hash_handle, ptr %512, i32 0, i32 2
  %514 = load ptr, ptr %513, align 8, !tbaa !11
  %515 = load ptr, ptr @users, align 8, !tbaa !9
  %516 = getelementptr inbounds %struct.my_struct, ptr %515, i32 0, i32 2
  %517 = getelementptr inbounds %struct.UT_hash_handle, ptr %516, i32 0, i32 0
  %518 = load ptr, ptr %517, align 8, !tbaa !13
  %519 = getelementptr inbounds %struct.UT_hash_table, ptr %518, i32 0, i32 5
  %520 = load i64, ptr %519, align 8, !tbaa !15
  %521 = getelementptr inbounds i8, ptr %514, i64 %520
  br label %523

522:                                              ; preds = %506
  br label %523

523:                                              ; preds = %522, %511
  %524 = phi ptr [ %521, %511 ], [ null, %522 ]
  store ptr %524, ptr %23, align 8, !tbaa !9
  br label %525

525:                                              ; preds = %523, %502
  %526 = load i32, ptr %21, align 4, !tbaa !5
  %527 = add i32 %526, -1
  store i32 %527, ptr %21, align 4, !tbaa !5
  br label %550

528:                                              ; preds = %481
  %529 = load ptr, ptr %24, align 8, !tbaa !9
  store ptr %529, ptr %25, align 8, !tbaa !9
  %530 = load ptr, ptr %24, align 8, !tbaa !9
  %531 = getelementptr inbounds %struct.UT_hash_handle, ptr %530, i32 0, i32 2
  %532 = load ptr, ptr %531, align 8, !tbaa !11
  %533 = icmp ne ptr %532, null
  br i1 %533, label %534, label %545

534:                                              ; preds = %528
  %535 = load ptr, ptr %24, align 8, !tbaa !9
  %536 = getelementptr inbounds %struct.UT_hash_handle, ptr %535, i32 0, i32 2
  %537 = load ptr, ptr %536, align 8, !tbaa !11
  %538 = load ptr, ptr @users, align 8, !tbaa !9
  %539 = getelementptr inbounds %struct.my_struct, ptr %538, i32 0, i32 2
  %540 = getelementptr inbounds %struct.UT_hash_handle, ptr %539, i32 0, i32 0
  %541 = load ptr, ptr %540, align 8, !tbaa !13
  %542 = getelementptr inbounds %struct.UT_hash_table, ptr %541, i32 0, i32 5
  %543 = load i64, ptr %542, align 8, !tbaa !15
  %544 = getelementptr inbounds i8, ptr %537, i64 %543
  br label %546

545:                                              ; preds = %528
  br label %546

546:                                              ; preds = %545, %534
  %547 = phi ptr [ %544, %534 ], [ null, %545 ]
  store ptr %547, ptr %24, align 8, !tbaa !9
  %548 = load i32, ptr %22, align 4, !tbaa !5
  %549 = add i32 %548, -1
  store i32 %549, ptr %22, align 4, !tbaa !5
  br label %550

550:                                              ; preds = %546, %525
  br label %551

551:                                              ; preds = %550, %478
  br label %552

552:                                              ; preds = %551, %445
  %553 = load ptr, ptr %27, align 8, !tbaa !9
  %554 = icmp ne ptr %553, null
  br i1 %554, label %555, label %573

555:                                              ; preds = %552
  %556 = load ptr, ptr %25, align 8, !tbaa !9
  %557 = icmp ne ptr %556, null
  br i1 %557, label %558, label %568

558:                                              ; preds = %555
  %559 = load ptr, ptr %25, align 8, !tbaa !9
  %560 = load ptr, ptr @users, align 8, !tbaa !9
  %561 = getelementptr inbounds %struct.my_struct, ptr %560, i32 0, i32 2
  %562 = getelementptr inbounds %struct.UT_hash_handle, ptr %561, i32 0, i32 0
  %563 = load ptr, ptr %562, align 8, !tbaa !13
  %564 = getelementptr inbounds %struct.UT_hash_table, ptr %563, i32 0, i32 5
  %565 = load i64, ptr %564, align 8, !tbaa !15
  %566 = sub i64 0, %565
  %567 = getelementptr inbounds i8, ptr %559, i64 %566
  br label %569

568:                                              ; preds = %555
  br label %569

569:                                              ; preds = %568, %558
  %570 = phi ptr [ %567, %558 ], [ null, %568 ]
  %571 = load ptr, ptr %27, align 8, !tbaa !9
  %572 = getelementptr inbounds %struct.UT_hash_handle, ptr %571, i32 0, i32 2
  store ptr %570, ptr %572, align 8, !tbaa !11
  br label %575

573:                                              ; preds = %552
  %574 = load ptr, ptr %25, align 8, !tbaa !9
  store ptr %574, ptr %26, align 8, !tbaa !9
  br label %575

575:                                              ; preds = %573, %569
  %576 = load ptr, ptr %25, align 8, !tbaa !9
  %577 = icmp ne ptr %576, null
  br i1 %577, label %578, label %596

578:                                              ; preds = %575
  %579 = load ptr, ptr %27, align 8, !tbaa !9
  %580 = icmp ne ptr %579, null
  br i1 %580, label %581, label %591

581:                                              ; preds = %578
  %582 = load ptr, ptr %27, align 8, !tbaa !9
  %583 = load ptr, ptr @users, align 8, !tbaa !9
  %584 = getelementptr inbounds %struct.my_struct, ptr %583, i32 0, i32 2
  %585 = getelementptr inbounds %struct.UT_hash_handle, ptr %584, i32 0, i32 0
  %586 = load ptr, ptr %585, align 8, !tbaa !13
  %587 = getelementptr inbounds %struct.UT_hash_table, ptr %586, i32 0, i32 5
  %588 = load i64, ptr %587, align 8, !tbaa !15
  %589 = sub i64 0, %588
  %590 = getelementptr inbounds i8, ptr %582, i64 %589
  br label %592

591:                                              ; preds = %578
  br label %592

592:                                              ; preds = %591, %581
  %593 = phi ptr [ %590, %581 ], [ null, %591 ]
  %594 = load ptr, ptr %25, align 8, !tbaa !9
  %595 = getelementptr inbounds %struct.UT_hash_handle, ptr %594, i32 0, i32 1
  store ptr %593, ptr %595, align 8, !tbaa !20
  br label %596

596:                                              ; preds = %592, %575
  %597 = load ptr, ptr %25, align 8, !tbaa !9
  store ptr %597, ptr %27, align 8, !tbaa !9
  br label %411, !llvm.loop !26

598:                                              ; preds = %422
  %599 = load ptr, ptr %24, align 8, !tbaa !9
  store ptr %599, ptr %23, align 8, !tbaa !9
  br label %370, !llvm.loop !27

600:                                              ; preds = %370
  %601 = load ptr, ptr %27, align 8, !tbaa !9
  %602 = icmp ne ptr %601, null
  br i1 %602, label %603, label %606

603:                                              ; preds = %600
  %604 = load ptr, ptr %27, align 8, !tbaa !9
  %605 = getelementptr inbounds %struct.UT_hash_handle, ptr %604, i32 0, i32 2
  store ptr null, ptr %605, align 8, !tbaa !11
  br label %606

606:                                              ; preds = %603, %600
  %607 = load i32, ptr %19, align 4, !tbaa !5
  %608 = icmp ule i32 %607, 1
  br i1 %608, label %609, label %628

609:                                              ; preds = %606
  store i32 0, ptr %18, align 4, !tbaa !5
  %610 = load ptr, ptr %27, align 8, !tbaa !9
  %611 = load ptr, ptr @users, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.my_struct, ptr %611, i32 0, i32 2
  %613 = getelementptr inbounds %struct.UT_hash_handle, ptr %612, i32 0, i32 0
  %614 = load ptr, ptr %613, align 8, !tbaa !13
  %615 = getelementptr inbounds %struct.UT_hash_table, ptr %614, i32 0, i32 4
  store ptr %610, ptr %615, align 8, !tbaa !23
  br label %616

616:                                              ; preds = %609
  %617 = load ptr, ptr %26, align 8, !tbaa !9
  %618 = load ptr, ptr @users, align 8, !tbaa !9
  %619 = getelementptr inbounds %struct.my_struct, ptr %618, i32 0, i32 2
  %620 = getelementptr inbounds %struct.UT_hash_handle, ptr %619, i32 0, i32 0
  %621 = load ptr, ptr %620, align 8, !tbaa !13
  %622 = getelementptr inbounds %struct.UT_hash_table, ptr %621, i32 0, i32 5
  %623 = load i64, ptr %622, align 8, !tbaa !15
  %624 = sub i64 0, %623
  %625 = getelementptr inbounds i8, ptr %617, i64 %624
  store ptr %625, ptr @users, align 8, !tbaa !9
  br label %626

626:                                              ; preds = %616
  br label %627

627:                                              ; preds = %626
  br label %628

628:                                              ; preds = %627, %606
  %629 = load i32, ptr %20, align 4, !tbaa !5
  %630 = mul i32 %629, 2
  store i32 %630, ptr %20, align 4, !tbaa !5
  br label %365, !llvm.loop !28

631:                                              ; preds = %365
  br label %632

632:                                              ; preds = %631, %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %633

633:                                              ; preds = %632
  br label %634

634:                                              ; preds = %633
  br label %652

635:                                              ; preds = %31
  call void @print_users()
  br label %652

636:                                              ; preds = %31
  %637 = load ptr, ptr @users, align 8, !tbaa !9
  %638 = icmp ne ptr %637, null
  br i1 %638, label %639, label %646

639:                                              ; preds = %636
  %640 = load ptr, ptr @users, align 8, !tbaa !9
  %641 = getelementptr inbounds %struct.my_struct, ptr %640, i32 0, i32 2
  %642 = getelementptr inbounds %struct.UT_hash_handle, ptr %641, i32 0, i32 0
  %643 = load ptr, ptr %642, align 8, !tbaa !13
  %644 = getelementptr inbounds %struct.UT_hash_table, ptr %643, i32 0, i32 3
  %645 = load i32, ptr %644, align 8, !tbaa !29
  br label %647

646:                                              ; preds = %636
  br label %647

647:                                              ; preds = %646, %639
  %648 = phi i32 [ %645, %639 ], [ 0, %646 ]
  store i32 %648, ptr %5, align 4, !tbaa !5
  %649 = load i32, ptr %5, align 4, !tbaa !5
  %650 = call i32 (ptr, ...) @printf(ptr noundef @.str.22, i32 noundef %649)
  br label %652

651:                                              ; preds = %31
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %652

652:                                              ; preds = %651, %647, %635, %634, %357, %80, %79, %66, %50, %46, %31
  br label %28, !llvm.loop !30

653:                                              ; preds = %28
  call void @delete_all()
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #4
  ret i32 0
}

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

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

!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 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"UT_hash_handle", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !6, i64 48, !6, i64 52}
!13 = !{!14, !10, i64 32}
!14 = !{!"my_struct", !6, i64 0, !7, i64 4, !12, i64 32}
!15 = !{!16, !17, i64 32}
!16 = !{!"UT_hash_table", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !10, i64 24, !17, i64 32, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56}
!17 = !{!"long", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!12, !10, i64 8}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = !{!16, !10, i64 24}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = !{!16, !6, i64 16}
!30 = distinct !{!30, !19}


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

@users = external dso_local local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [20 x i8], align 1

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  br label %.loopexit252

.loopexit252:                                     ; preds = %.loopexit252.backedge, %0
  %.0175294 = phi i32 [ 1, %0 ], [ %.0175294.be, %.loopexit252.backedge ]
  %1 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %2 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  %3 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %4 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6)
  %5 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %6 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %7 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  %8 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10)
  %9 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11)
  %10 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %11 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  %12 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %13 = tail call ptr @getl(ptr noundef nonnull @.str.14)
  %14 = tail call i32 @atoi(ptr nocapture noundef %13) #3
  switch i32 %14, label %.loopexit252.backedge [
    i32 1, label %15
    i32 2, label %18
    i32 3, label %22
    i32 4, label %29
    i32 5, label %36
    i32 6, label %37
    i32 7, label %145
    i32 8, label %253
    i32 9, label %254
    i32 10, label %280
  ]

15:                                               ; preds = %.loopexit252
  %16 = add nsw i32 %.0175294, 1
  %17 = tail call ptr @getl(ptr noundef nonnull @.str.15)
  tail call void @add_user(i32 noundef %.0175294, ptr noundef %17)
  br label %.loopexit252.backedge

18:                                               ; preds = %.loopexit252
  %19 = tail call ptr @getl(ptr noundef nonnull @.str.16)
  %20 = tail call i32 @atoi(ptr nocapture noundef %19) #3
  %21 = tail call ptr @getl(ptr noundef nonnull @.str.15)
  tail call void @add_user(i32 noundef %20, ptr noundef %21)
  br label %.loopexit252.backedge

22:                                               ; preds = %.loopexit252
  %23 = tail call ptr @getl(ptr noundef nonnull @.str.17)
  %24 = tail call i32 @atoi(ptr nocapture noundef %23) #3
  %25 = tail call ptr @find_user(i32 noundef %24)
  %.not227 = icmp eq ptr %25, null
  %26 = getelementptr inbounds i8, ptr %25, i64 4
  %27 = select i1 %.not227, ptr @.str.19, ptr %26
  %28 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull %27)
  br label %.loopexit252.backedge

29:                                               ; preds = %.loopexit252
  %30 = tail call ptr @getl(ptr noundef nonnull @.str.20)
  %31 = tail call i32 @atoi(ptr nocapture noundef %30) #3
  %32 = tail call ptr @find_user(i32 noundef %31)
  %.not226 = icmp eq ptr %32, null
  br i1 %.not226, label %34, label %33

33:                                               ; preds = %29
  tail call void @delete_user(ptr noundef nonnull %32)
  br label %.loopexit252.backedge

34:                                               ; preds = %29
  %35 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  br label %.loopexit252.backedge

36:                                               ; preds = %.loopexit252
  tail call void @delete_all()
  br label %.loopexit252.backedge

37:                                               ; preds = %.loopexit252
  %38 = load ptr, ptr @users, align 8, !tbaa !5
  %.not211 = icmp eq ptr %38, null
  br i1 %.not211, label %.loopexit252.backedge, label %39

39:                                               ; preds = %37
  %40 = getelementptr inbounds i8, ptr %38, i64 32
  br label %.lr.ph287

.preheader:                                       ; preds = %143
  %41 = shl i32 %.0168292341, 1
  %.not213282 = icmp eq ptr %.2150.ph, null
  br i1 %.not213282, label %.loopexit252.loopexit, label %.lr.ph287

.lr.ph287:                                        ; preds = %39, %.preheader
  %.0168292341 = phi i32 [ 1, %39 ], [ %41, %.preheader ]
  %.0148293340 = phi ptr [ %40, %39 ], [ %.2150.ph, %.preheader ]
  %.not296 = icmp eq i32 %.0168292341, 0
  br label %42

.loopexit:                                        ; preds = %55
  %.not213 = icmp eq ptr %.2155, null
  br i1 %.not213, label %._crit_edge288, label %42, !llvm.loop !9

42:                                               ; preds = %.lr.ph287, %.loopexit
  %.0146286 = phi ptr [ null, %.lr.ph287 ], [ %.1147, %.loopexit ]
  %.1149285 = phi ptr [ null, %.lr.ph287 ], [ %.2150.ph, %.loopexit ]
  %.0157284 = phi ptr [ %.0148293340, %.lr.ph287 ], [ %.2155, %.loopexit ]
  %.0169283 = phi i32 [ 0, %.lr.ph287 ], [ %43, %.loopexit ]
  %43 = add i32 %.0169283, 1
  br i1 %.not296, label %.thread.preheader, label %.lr.ph276

.lr.ph276:                                        ; preds = %42
  %44 = load ptr, ptr @users, align 8
  %45 = getelementptr inbounds i8, ptr %44, i64 32
  br label %46

46:                                               ; preds = %.lr.ph276, %50
  %.0153274 = phi ptr [ %.0157284, %.lr.ph276 ], [ %54, %50 ]
  %.0164273 = phi i32 [ 0, %.lr.ph276 ], [ %47, %50 ]
  %47 = add nuw i32 %.0164273, 1
  %48 = getelementptr inbounds i8, ptr %.0153274, i64 16
  %49 = load ptr, ptr %48, align 8, !tbaa !11
  %.not215 = icmp eq ptr %49, null
  br i1 %.not215, label %.thread.preheader, label %50

50:                                               ; preds = %46
  %51 = load ptr, ptr %45, align 8, !tbaa !14
  %52 = getelementptr inbounds i8, ptr %51, i64 32
  %53 = load i64, ptr %52, align 8, !tbaa !16
  %54 = getelementptr inbounds i8, ptr %49, i64 %53
  %exitcond301.not = icmp eq i32 %47, %.0168292341
  br i1 %exitcond301.not, label %.thread.preheader, label %46, !llvm.loop !19

.thread.preheader:                                ; preds = %50, %46, %42
  %.2166.ph = phi i32 [ 0, %42 ], [ %47, %46 ], [ %.0168292341, %50 ]
  %.2155.ph = phi ptr [ %.0157284, %42 ], [ null, %46 ], [ %54, %50 ]
  br label %.thread.outer

.thread.outer:                                    ; preds = %.thread.outer.backedge, %.thread.preheader
  %.2166.ph342 = phi i32 [ %.2166.ph, %.thread.preheader ], [ %.3167, %.thread.outer.backedge ]
  %.0162.ph = phi i32 [ %.0168292341, %.thread.preheader ], [ %.1163, %.thread.outer.backedge ]
  %.1158.ph = phi ptr [ %.0157284, %.thread.preheader ], [ %.4161, %.thread.outer.backedge ]
  %.2155.ph343 = phi ptr [ %.2155.ph, %.thread.preheader ], [ %.3156, %.thread.outer.backedge ]
  %.2150.ph = phi ptr [ %.1149285, %.thread.preheader ], [ %.2150.ph.be, %.thread.outer.backedge ]
  %.1147.ph = phi ptr [ %.0146286, %.thread.preheader ], [ %.0152, %.thread.outer.backedge ]
  br label %.thread

.thread:                                          ; preds = %.thread.outer, %.thread229.thread
  %.2166 = phi i32 [ %.3167, %.thread229.thread ], [ %.2166.ph342, %.thread.outer ]
  %.0162 = phi i32 [ %.1163, %.thread229.thread ], [ %.0162.ph, %.thread.outer ]
  %.1158 = phi ptr [ %.4161, %.thread229.thread ], [ %.1158.ph, %.thread.outer ]
  %.2155 = phi ptr [ %.3156, %.thread229.thread ], [ %.2155.ph343, %.thread.outer ]
  %.1147 = phi ptr [ %.0152, %.thread229.thread ], [ %.1147.ph, %.thread.outer ]
  %cond = icmp eq i32 %.2166, 0
  br i1 %cond, label %55, label %71

55:                                               ; preds = %.thread
  %56 = icmp ne i32 %.0162, 0
  %57 = icmp ne ptr %.2155, null
  %58 = select i1 %56, i1 %57, i1 false
  br i1 %58, label %.critedge, label %.loopexit

.critedge:                                        ; preds = %55
  %59 = getelementptr inbounds i8, ptr %.2155, i64 16
  %60 = load ptr, ptr %59, align 8, !tbaa !11
  %.not222 = icmp eq ptr %60, null
  br i1 %.not222, label %68, label %61

61:                                               ; preds = %.critedge
  %62 = load ptr, ptr @users, align 8, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %62, i64 32
  %64 = load ptr, ptr %63, align 8, !tbaa !14
  %65 = getelementptr inbounds i8, ptr %64, i64 32
  %66 = load i64, ptr %65, align 8, !tbaa !16
  %67 = getelementptr inbounds i8, ptr %60, i64 %66
  br label %68

68:                                               ; preds = %.critedge, %61
  %69 = phi ptr [ %67, %61 ], [ null, %.critedge ]
  %70 = add i32 %.0162, -1
  br label %124

71:                                               ; preds = %.thread
  %72 = icmp eq i32 %.0162, 0
  %73 = icmp eq ptr %.2155, null
  %or.cond = select i1 %72, i1 true, i1 %73
  br i1 %or.cond, label %74, label %87

74:                                               ; preds = %71
  %.not220 = icmp eq ptr %.1158, null
  br i1 %.not220, label %85, label %75

75:                                               ; preds = %74
  %76 = getelementptr inbounds i8, ptr %.1158, i64 16
  %77 = load ptr, ptr %76, align 8, !tbaa !11
  %.not221 = icmp eq ptr %77, null
  br i1 %.not221, label %85, label %78

78:                                               ; preds = %75
  %79 = load ptr, ptr @users, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 32
  %81 = load ptr, ptr %80, align 8, !tbaa !14
  %82 = getelementptr inbounds i8, ptr %81, i64 32
  %83 = load i64, ptr %82, align 8, !tbaa !16
  %84 = getelementptr inbounds i8, ptr %77, i64 %83
  br label %85

85:                                               ; preds = %78, %75, %74
  %.2159 = phi ptr [ null, %74 ], [ %84, %78 ], [ null, %75 ]
  %86 = add i32 %.2166, -1
  br label %124

87:                                               ; preds = %71
  %88 = load ptr, ptr @users, align 8, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %88, i64 32
  %90 = load ptr, ptr %89, align 8, !tbaa !14
  %91 = getelementptr inbounds i8, ptr %90, i64 32
  %92 = load i64, ptr %91, align 8, !tbaa !16
  %93 = sub i64 0, %92
  %94 = getelementptr inbounds i8, ptr %.1158, i64 %93
  %95 = getelementptr inbounds i8, ptr %.2155, i64 %93
  %96 = tail call i32 @by_name(ptr noundef %94, ptr noundef %95)
  %97 = icmp slt i32 %96, 1
  br i1 %97, label %98, label %111

98:                                               ; preds = %87
  %.not218 = icmp eq ptr %.1158, null
  br i1 %.not218, label %109, label %99

99:                                               ; preds = %98
  %100 = getelementptr inbounds i8, ptr %.1158, i64 16
  %101 = load ptr, ptr %100, align 8, !tbaa !11
  %.not219 = icmp eq ptr %101, null
  br i1 %.not219, label %109, label %102

102:                                              ; preds = %99
  %103 = load ptr, ptr @users, align 8, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %103, i64 32
  %105 = load ptr, ptr %104, align 8, !tbaa !14
  %106 = getelementptr inbounds i8, ptr %105, i64 32
  %107 = load i64, ptr %106, align 8, !tbaa !16
  %108 = getelementptr inbounds i8, ptr %101, i64 %107
  br label %109

109:                                              ; preds = %102, %99, %98
  %.3160 = phi ptr [ null, %98 ], [ %108, %102 ], [ null, %99 ]
  %110 = add i32 %.2166, -1
  br label %124

111:                                              ; preds = %87
  %112 = getelementptr inbounds i8, ptr %.2155, i64 16
  %113 = load ptr, ptr %112, align 8, !tbaa !11
  %.not217 = icmp eq ptr %113, null
  br i1 %.not217, label %121, label %114

114:                                              ; preds = %111
  %115 = load ptr, ptr @users, align 8, !tbaa !5
  %116 = getelementptr inbounds i8, ptr %115, i64 32
  %117 = load ptr, ptr %116, align 8, !tbaa !14
  %118 = getelementptr inbounds i8, ptr %117, i64 32
  %119 = load i64, ptr %118, align 8, !tbaa !16
  %120 = getelementptr inbounds i8, ptr %113, i64 %119
  br label %121

121:                                              ; preds = %111, %114
  %122 = phi ptr [ %120, %114 ], [ null, %111 ]
  %123 = add i32 %.0162, -1
  br label %124

124:                                              ; preds = %85, %121, %109, %68
  %.3167 = phi i32 [ 0, %68 ], [ %86, %85 ], [ %110, %109 ], [ %.2166, %121 ]
  %.1163 = phi i32 [ %70, %68 ], [ %.0162, %85 ], [ %.0162, %109 ], [ %123, %121 ]
  %.4161 = phi ptr [ %.1158, %68 ], [ %.2159, %85 ], [ %.3160, %109 ], [ %.1158, %121 ]
  %.3156 = phi ptr [ %69, %68 ], [ %.2155, %85 ], [ %.2155, %109 ], [ %122, %121 ]
  %.0152 = phi ptr [ %.2155, %68 ], [ %.1158, %85 ], [ %.1158, %109 ], [ %.2155, %121 ]
  %.not223 = icmp eq ptr %.1147, null
  %.not225 = icmp eq ptr %.0152, null
  br i1 %.not223, label %127, label %125

125:                                              ; preds = %124
  br i1 %.not225, label %.thread229.thread, label %128

.thread229.thread:                                ; preds = %125
  %126 = getelementptr inbounds i8, ptr %.1147, i64 16
  store ptr null, ptr %126, align 8, !tbaa !11
  br label %.thread, !llvm.loop !20

127:                                              ; preds = %124
  br i1 %.not225, label %.thread.outer.backedge, label %138

128:                                              ; preds = %125
  %129 = load ptr, ptr @users, align 8, !tbaa !5
  %130 = getelementptr inbounds i8, ptr %129, i64 32
  %131 = load ptr, ptr %130, align 8, !tbaa !14
  %132 = getelementptr inbounds i8, ptr %131, i64 32
  %133 = load i64, ptr %132, align 8, !tbaa !16
  %134 = sub i64 0, %133
  %135 = getelementptr inbounds i8, ptr %.0152, i64 %134
  %136 = getelementptr inbounds i8, ptr %.1147, i64 16
  store ptr %135, ptr %136, align 8, !tbaa !11
  %137 = getelementptr inbounds i8, ptr %.1147, i64 %134
  br label %138

138:                                              ; preds = %127, %128
  %.3151232237 = phi ptr [ %.2150.ph, %128 ], [ %.0152, %127 ]
  %139 = phi ptr [ %137, %128 ], [ null, %127 ]
  %140 = getelementptr inbounds i8, ptr %.0152, i64 8
  store ptr %139, ptr %140, align 8, !tbaa !21
  br label %.thread.outer.backedge

.thread.outer.backedge:                           ; preds = %138, %127
  %.2150.ph.be = phi ptr [ null, %127 ], [ %.3151232237, %138 ]
  br label %.thread.outer, !llvm.loop !20

._crit_edge288:                                   ; preds = %.loopexit
  %.not214 = icmp eq ptr %.1147, null
  br i1 %.not214, label %143, label %141

141:                                              ; preds = %._crit_edge288
  %142 = getelementptr inbounds i8, ptr %.1147, i64 16
  store ptr null, ptr %142, align 8, !tbaa !11
  br label %143

143:                                              ; preds = %141, %._crit_edge288
  %.0146.lcssa308 = phi ptr [ %.1147, %141 ], [ null, %._crit_edge288 ]
  %144 = icmp ult i32 %43, 2
  br i1 %144, label %.loopexit252.loopexit, label %.preheader

145:                                              ; preds = %.loopexit252
  %146 = load ptr, ptr @users, align 8, !tbaa !5
  %.not196 = icmp eq ptr %146, null
  br i1 %.not196, label %.loopexit252.backedge, label %147

147:                                              ; preds = %145
  %148 = getelementptr inbounds i8, ptr %146, i64 32
  br label %.lr.ph266

.preheader251:                                    ; preds = %251
  %149 = shl i32 %.0141270339, 1
  %.not198261 = icmp eq ptr %.2.ph, null
  br i1 %.not198261, label %.loopexit252.loopexit297, label %.lr.ph266

.lr.ph266:                                        ; preds = %147, %.preheader251
  %.0141270339 = phi i32 [ 1, %147 ], [ %149, %.preheader251 ]
  %.0124271338 = phi ptr [ %148, %147 ], [ %.2.ph, %.preheader251 ]
  %.not295 = icmp eq i32 %.0141270339, 0
  br label %150

.loopexit250:                                     ; preds = %163
  %.not198 = icmp eq ptr %.2129, null
  br i1 %.not198, label %._crit_edge, label %150, !llvm.loop !22

150:                                              ; preds = %.lr.ph266, %.loopexit250
  %.0265 = phi ptr [ null, %.lr.ph266 ], [ %.1, %.loopexit250 ]
  %.1125264 = phi ptr [ null, %.lr.ph266 ], [ %.2.ph, %.loopexit250 ]
  %.0131263 = phi ptr [ %.0124271338, %.lr.ph266 ], [ %.2129, %.loopexit250 ]
  %.0142262 = phi i32 [ 0, %.lr.ph266 ], [ %151, %.loopexit250 ]
  %151 = add i32 %.0142262, 1
  br i1 %.not295, label %.thread238.preheader, label %.lr.ph

.lr.ph:                                           ; preds = %150
  %152 = load ptr, ptr @users, align 8
  %153 = getelementptr inbounds i8, ptr %152, i64 32
  br label %154

154:                                              ; preds = %.lr.ph, %158
  %.0127256 = phi ptr [ %.0131263, %.lr.ph ], [ %162, %158 ]
  %.0137255 = phi i32 [ 0, %.lr.ph ], [ %155, %158 ]
  %155 = add nuw i32 %.0137255, 1
  %156 = getelementptr inbounds i8, ptr %.0127256, i64 16
  %157 = load ptr, ptr %156, align 8, !tbaa !11
  %.not200 = icmp eq ptr %157, null
  br i1 %.not200, label %.thread238.preheader, label %158

158:                                              ; preds = %154
  %159 = load ptr, ptr %153, align 8, !tbaa !14
  %160 = getelementptr inbounds i8, ptr %159, i64 32
  %161 = load i64, ptr %160, align 8, !tbaa !16
  %162 = getelementptr inbounds i8, ptr %157, i64 %161
  %exitcond.not = icmp eq i32 %155, %.0141270339
  br i1 %exitcond.not, label %.thread238.preheader, label %154, !llvm.loop !23

.thread238.preheader:                             ; preds = %158, %154, %150
  %.2139.ph = phi i32 [ 0, %150 ], [ %155, %154 ], [ %.0141270339, %158 ]
  %.2129.ph = phi ptr [ %.0131263, %150 ], [ null, %154 ], [ %162, %158 ]
  br label %.thread238.outer

.thread238.outer:                                 ; preds = %.thread238.outer.backedge, %.thread238.preheader
  %.2139.ph344 = phi i32 [ %.2139.ph, %.thread238.preheader ], [ %.3140, %.thread238.outer.backedge ]
  %.0135.ph = phi i32 [ %.0141270339, %.thread238.preheader ], [ %.1136, %.thread238.outer.backedge ]
  %.1132.ph = phi ptr [ %.0131263, %.thread238.preheader ], [ %.4, %.thread238.outer.backedge ]
  %.2129.ph345 = phi ptr [ %.2129.ph, %.thread238.preheader ], [ %.3130, %.thread238.outer.backedge ]
  %.2.ph = phi ptr [ %.1125264, %.thread238.preheader ], [ %.2.ph.be, %.thread238.outer.backedge ]
  %.1.ph = phi ptr [ %.0265, %.thread238.preheader ], [ %.0126, %.thread238.outer.backedge ]
  br label %.thread238

.thread238:                                       ; preds = %.thread238.outer, %.thread239.thread
  %.2139 = phi i32 [ %.3140, %.thread239.thread ], [ %.2139.ph344, %.thread238.outer ]
  %.0135 = phi i32 [ %.1136, %.thread239.thread ], [ %.0135.ph, %.thread238.outer ]
  %.1132 = phi ptr [ %.4, %.thread239.thread ], [ %.1132.ph, %.thread238.outer ]
  %.2129 = phi ptr [ %.3130, %.thread239.thread ], [ %.2129.ph345, %.thread238.outer ]
  %.1 = phi ptr [ %.0126, %.thread239.thread ], [ %.1.ph, %.thread238.outer ]
  %cond228 = icmp eq i32 %.2139, 0
  br i1 %cond228, label %163, label %179

163:                                              ; preds = %.thread238
  %164 = icmp ne i32 %.0135, 0
  %165 = icmp ne ptr %.2129, null
  %166 = select i1 %164, i1 %165, i1 false
  br i1 %166, label %.critedge3, label %.loopexit250

.critedge3:                                       ; preds = %163
  %167 = getelementptr inbounds i8, ptr %.2129, i64 16
  %168 = load ptr, ptr %167, align 8, !tbaa !11
  %.not207 = icmp eq ptr %168, null
  br i1 %.not207, label %176, label %169

169:                                              ; preds = %.critedge3
  %170 = load ptr, ptr @users, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i64 32
  %172 = load ptr, ptr %171, align 8, !tbaa !14
  %173 = getelementptr inbounds i8, ptr %172, i64 32
  %174 = load i64, ptr %173, align 8, !tbaa !16
  %175 = getelementptr inbounds i8, ptr %168, i64 %174
  br label %176

176:                                              ; preds = %.critedge3, %169
  %177 = phi ptr [ %175, %169 ], [ null, %.critedge3 ]
  %178 = add i32 %.0135, -1
  br label %232

179:                                              ; preds = %.thread238
  %180 = icmp eq i32 %.0135, 0
  %181 = icmp eq ptr %.2129, null
  %or.cond5 = select i1 %180, i1 true, i1 %181
  br i1 %or.cond5, label %182, label %195

182:                                              ; preds = %179
  %.not205 = icmp eq ptr %.1132, null
  br i1 %.not205, label %193, label %183

183:                                              ; preds = %182
  %184 = getelementptr inbounds i8, ptr %.1132, i64 16
  %185 = load ptr, ptr %184, align 8, !tbaa !11
  %.not206 = icmp eq ptr %185, null
  br i1 %.not206, label %193, label %186

186:                                              ; preds = %183
  %187 = load ptr, ptr @users, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i64 32
  %189 = load ptr, ptr %188, align 8, !tbaa !14
  %190 = getelementptr inbounds i8, ptr %189, i64 32
  %191 = load i64, ptr %190, align 8, !tbaa !16
  %192 = getelementptr inbounds i8, ptr %185, i64 %191
  br label %193

193:                                              ; preds = %186, %183, %182
  %.2133 = phi ptr [ null, %182 ], [ %192, %186 ], [ null, %183 ]
  %194 = add i32 %.2139, -1
  br label %232

195:                                              ; preds = %179
  %196 = load ptr, ptr @users, align 8, !tbaa !5
  %197 = getelementptr inbounds i8, ptr %196, i64 32
  %198 = load ptr, ptr %197, align 8, !tbaa !14
  %199 = getelementptr inbounds i8, ptr %198, i64 32
  %200 = load i64, ptr %199, align 8, !tbaa !16
  %201 = sub i64 0, %200
  %202 = getelementptr inbounds i8, ptr %.1132, i64 %201
  %203 = getelementptr inbounds i8, ptr %.2129, i64 %201
  %204 = tail call i32 @by_id(ptr noundef %202, ptr noundef %203)
  %205 = icmp slt i32 %204, 1
  br i1 %205, label %206, label %219

206:                                              ; preds = %195
  %.not203 = icmp eq ptr %.1132, null
  br i1 %.not203, label %217, label %207

207:                                              ; preds = %206
  %208 = getelementptr inbounds i8, ptr %.1132, i64 16
  %209 = load ptr, ptr %208, align 8, !tbaa !11
  %.not204 = icmp eq ptr %209, null
  br i1 %.not204, label %217, label %210

210:                                              ; preds = %207
  %211 = load ptr, ptr @users, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i64 32
  %213 = load ptr, ptr %212, align 8, !tbaa !14
  %214 = getelementptr inbounds i8, ptr %213, i64 32
  %215 = load i64, ptr %214, align 8, !tbaa !16
  %216 = getelementptr inbounds i8, ptr %209, i64 %215
  br label %217

217:                                              ; preds = %210, %207, %206
  %.3134 = phi ptr [ null, %206 ], [ %216, %210 ], [ null, %207 ]
  %218 = add i32 %.2139, -1
  br label %232

219:                                              ; preds = %195
  %220 = getelementptr inbounds i8, ptr %.2129, i64 16
  %221 = load ptr, ptr %220, align 8, !tbaa !11
  %.not202 = icmp eq ptr %221, null
  br i1 %.not202, label %229, label %222

222:                                              ; preds = %219
  %223 = load ptr, ptr @users, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %223, i64 32
  %225 = load ptr, ptr %224, align 8, !tbaa !14
  %226 = getelementptr inbounds i8, ptr %225, i64 32
  %227 = load i64, ptr %226, align 8, !tbaa !16
  %228 = getelementptr inbounds i8, ptr %221, i64 %227
  br label %229

229:                                              ; preds = %219, %222
  %230 = phi ptr [ %228, %222 ], [ null, %219 ]
  %231 = add i32 %.0135, -1
  br label %232

232:                                              ; preds = %193, %229, %217, %176
  %.3140 = phi i32 [ 0, %176 ], [ %194, %193 ], [ %218, %217 ], [ %.2139, %229 ]
  %.1136 = phi i32 [ %178, %176 ], [ %.0135, %193 ], [ %.0135, %217 ], [ %231, %229 ]
  %.4 = phi ptr [ %.1132, %176 ], [ %.2133, %193 ], [ %.3134, %217 ], [ %.1132, %229 ]
  %.3130 = phi ptr [ %177, %176 ], [ %.2129, %193 ], [ %.2129, %217 ], [ %230, %229 ]
  %.0126 = phi ptr [ %.2129, %176 ], [ %.1132, %193 ], [ %.1132, %217 ], [ %.2129, %229 ]
  %.not208 = icmp eq ptr %.1, null
  %.not210 = icmp eq ptr %.0126, null
  br i1 %.not208, label %235, label %233

233:                                              ; preds = %232
  br i1 %.not210, label %.thread239.thread, label %236

.thread239.thread:                                ; preds = %233
  %234 = getelementptr inbounds i8, ptr %.1, i64 16
  store ptr null, ptr %234, align 8, !tbaa !11
  br label %.thread238, !llvm.loop !24

235:                                              ; preds = %232
  br i1 %.not210, label %.thread238.outer.backedge, label %246

236:                                              ; preds = %233
  %237 = load ptr, ptr @users, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %237, i64 32
  %239 = load ptr, ptr %238, align 8, !tbaa !14
  %240 = getelementptr inbounds i8, ptr %239, i64 32
  %241 = load i64, ptr %240, align 8, !tbaa !16
  %242 = sub i64 0, %241
  %243 = getelementptr inbounds i8, ptr %.0126, i64 %242
  %244 = getelementptr inbounds i8, ptr %.1, i64 16
  store ptr %243, ptr %244, align 8, !tbaa !11
  %245 = getelementptr inbounds i8, ptr %.1, i64 %242
  br label %246

246:                                              ; preds = %235, %236
  %.3242247 = phi ptr [ %.2.ph, %236 ], [ %.0126, %235 ]
  %247 = phi ptr [ %245, %236 ], [ null, %235 ]
  %248 = getelementptr inbounds i8, ptr %.0126, i64 8
  store ptr %247, ptr %248, align 8, !tbaa !21
  br label %.thread238.outer.backedge

.thread238.outer.backedge:                        ; preds = %246, %235
  %.2.ph.be = phi ptr [ null, %235 ], [ %.3242247, %246 ]
  br label %.thread238.outer, !llvm.loop !24

._crit_edge:                                      ; preds = %.loopexit250
  %.not199 = icmp eq ptr %.1, null
  br i1 %.not199, label %251, label %249

249:                                              ; preds = %._crit_edge
  %250 = getelementptr inbounds i8, ptr %.1, i64 16
  store ptr null, ptr %250, align 8, !tbaa !11
  br label %251

251:                                              ; preds = %249, %._crit_edge
  %.0.lcssa324 = phi ptr [ %.1, %249 ], [ null, %._crit_edge ]
  %252 = icmp ult i32 %151, 2
  br i1 %252, label %.loopexit252.loopexit297, label %.preheader251

253:                                              ; preds = %.loopexit252
  tail call void @print_users()
  br label %.loopexit252.backedge

254:                                              ; preds = %.loopexit252
  %255 = load ptr, ptr @users, align 8, !tbaa !5
  %.not195 = icmp eq ptr %255, null
  br i1 %.not195, label %261, label %256

256:                                              ; preds = %254
  %257 = getelementptr inbounds i8, ptr %255, i64 32
  %258 = load ptr, ptr %257, align 8, !tbaa !14
  %259 = getelementptr inbounds i8, ptr %258, i64 16
  %260 = load i32, ptr %259, align 8, !tbaa !25
  br label %261

261:                                              ; preds = %254, %256
  %262 = phi i32 [ %260, %256 ], [ 0, %254 ]
  %263 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, i32 noundef %262)
  br label %.loopexit252.backedge

.loopexit252.loopexit:                            ; preds = %.preheader, %143
  %.1149.lcssa307314 = phi ptr [ %.2150.ph, %143 ], [ null, %.preheader ]
  %.0146.lcssa308313 = phi ptr [ %.0146.lcssa308, %143 ], [ null, %.preheader ]
  %264 = load ptr, ptr @users, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %264, i64 32
  %266 = load ptr, ptr %265, align 8, !tbaa !14
  %267 = getelementptr inbounds i8, ptr %266, i64 24
  store ptr %.0146.lcssa308313, ptr %267, align 8, !tbaa !26
  %268 = getelementptr inbounds i8, ptr %266, i64 32
  %269 = load i64, ptr %268, align 8, !tbaa !16
  %270 = sub i64 0, %269
  %271 = getelementptr inbounds i8, ptr %.1149.lcssa307314, i64 %270
  store ptr %271, ptr @users, align 8, !tbaa !5
  br label %.loopexit252.backedge

.loopexit252.loopexit297:                         ; preds = %.preheader251, %251
  %.1125.lcssa323330 = phi ptr [ %.2.ph, %251 ], [ null, %.preheader251 ]
  %.0.lcssa324329 = phi ptr [ %.0.lcssa324, %251 ], [ null, %.preheader251 ]
  %272 = load ptr, ptr @users, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %272, i64 32
  %274 = load ptr, ptr %273, align 8, !tbaa !14
  %275 = getelementptr inbounds i8, ptr %274, i64 24
  store ptr %.0.lcssa324329, ptr %275, align 8, !tbaa !26
  %276 = getelementptr inbounds i8, ptr %274, i64 32
  %277 = load i64, ptr %276, align 8, !tbaa !16
  %278 = sub i64 0, %277
  %279 = getelementptr inbounds i8, ptr %.1125.lcssa323330, i64 %278
  store ptr %279, ptr @users, align 8, !tbaa !5
  br label %.loopexit252.backedge

.loopexit252.backedge:                            ; preds = %.loopexit252.loopexit297, %.loopexit252.loopexit, %145, %37, %33, %34, %261, %253, %36, %22, %18, %15, %.loopexit252
  %.0175294.be = phi i32 [ %.0175294, %.loopexit252 ], [ %.0175294, %261 ], [ %.0175294, %253 ], [ %.0175294, %36 ], [ %.0175294, %33 ], [ %.0175294, %34 ], [ %.0175294, %22 ], [ %.0175294, %18 ], [ %16, %15 ], [ %.0175294, %37 ], [ %.0175294, %145 ], [ %.0175294, %.loopexit252.loopexit ], [ %.0175294, %.loopexit252.loopexit297 ]
  br label %.loopexit252, !llvm.loop !27

280:                                              ; preds = %.loopexit252
  tail call void @delete_all()
  ret i32 0
}

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

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 = { 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 = { 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 #3 = { nounwind willreturn memory(read) }

!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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !6, i64 16}
!12 = !{!"UT_hash_handle", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 52}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !6, i64 32}
!15 = !{!"my_struct", !13, i64 0, !7, i64 4, !12, i64 32}
!16 = !{!17, !18, i64 32}
!17 = !{!"UT_hash_table", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !6, i64 24, !18, i64 32, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56}
!18 = !{!"long", !7, i64 0}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = !{!12, !6, i64 8}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = !{!17, !13, i64 16}
!26 = !{!17, !6, i64 24}
!27 = distinct !{!27, !10}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass