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

@users = external dso_local global ptr, align 8

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local ptr @find_user(i32 noundef %0) #2 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  store i32 %0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #3
  br label %10

10:                                               ; preds = %1
  store ptr null, ptr %3, align 8, !tbaa !9
  %11 = load ptr, ptr @users, align 8, !tbaa !9
  %12 = icmp ne ptr %11, null
  br i1 %12, label %13, label %488

13:                                               ; preds = %10
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  br label %14

14:                                               ; preds = %13
  br label %15

15:                                               ; preds = %14
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  store ptr %2, ptr %8, align 8, !tbaa !9
  store i32 -17973521, ptr %4, align 4, !tbaa !5
  store i32 -1640531527, ptr %6, align 4, !tbaa !5
  store i32 -1640531527, ptr %5, align 4, !tbaa !5
  store i32 4, ptr %7, align 4, !tbaa !5
  br label %16

16:                                               ; preds = %184, %15
  %17 = load i32, ptr %7, align 4, !tbaa !5
  %18 = icmp uge i32 %17, 12
  br i1 %18, label %19, label %189

19:                                               ; preds = %16
  %20 = load ptr, ptr %8, align 8, !tbaa !9
  %21 = getelementptr inbounds i8, ptr %20, i64 0
  %22 = load i8, ptr %21, align 1, !tbaa !11
  %23 = zext i8 %22 to i32
  %24 = load ptr, ptr %8, align 8, !tbaa !9
  %25 = getelementptr inbounds i8, ptr %24, i64 1
  %26 = load i8, ptr %25, align 1, !tbaa !11
  %27 = zext i8 %26 to i32
  %28 = shl i32 %27, 8
  %29 = add i32 %23, %28
  %30 = load ptr, ptr %8, align 8, !tbaa !9
  %31 = getelementptr inbounds i8, ptr %30, i64 2
  %32 = load i8, ptr %31, align 1, !tbaa !11
  %33 = zext i8 %32 to i32
  %34 = shl i32 %33, 16
  %35 = add i32 %29, %34
  %36 = load ptr, ptr %8, align 8, !tbaa !9
  %37 = getelementptr inbounds i8, ptr %36, i64 3
  %38 = load i8, ptr %37, align 1, !tbaa !11
  %39 = zext i8 %38 to i32
  %40 = shl i32 %39, 24
  %41 = add i32 %35, %40
  %42 = load i32, ptr %5, align 4, !tbaa !5
  %43 = add i32 %42, %41
  store i32 %43, ptr %5, align 4, !tbaa !5
  %44 = load ptr, ptr %8, align 8, !tbaa !9
  %45 = getelementptr inbounds i8, ptr %44, i64 4
  %46 = load i8, ptr %45, align 1, !tbaa !11
  %47 = zext i8 %46 to i32
  %48 = load ptr, ptr %8, align 8, !tbaa !9
  %49 = getelementptr inbounds i8, ptr %48, i64 5
  %50 = load i8, ptr %49, align 1, !tbaa !11
  %51 = zext i8 %50 to i32
  %52 = shl i32 %51, 8
  %53 = add i32 %47, %52
  %54 = load ptr, ptr %8, align 8, !tbaa !9
  %55 = getelementptr inbounds i8, ptr %54, i64 6
  %56 = load i8, ptr %55, align 1, !tbaa !11
  %57 = zext i8 %56 to i32
  %58 = shl i32 %57, 16
  %59 = add i32 %53, %58
  %60 = load ptr, ptr %8, align 8, !tbaa !9
  %61 = getelementptr inbounds i8, ptr %60, i64 7
  %62 = load i8, ptr %61, align 1, !tbaa !11
  %63 = zext i8 %62 to i32
  %64 = shl i32 %63, 24
  %65 = add i32 %59, %64
  %66 = load i32, ptr %6, align 4, !tbaa !5
  %67 = add i32 %66, %65
  store i32 %67, ptr %6, align 4, !tbaa !5
  %68 = load ptr, ptr %8, align 8, !tbaa !9
  %69 = getelementptr inbounds i8, ptr %68, i64 8
  %70 = load i8, ptr %69, align 1, !tbaa !11
  %71 = zext i8 %70 to i32
  %72 = load ptr, ptr %8, align 8, !tbaa !9
  %73 = getelementptr inbounds i8, ptr %72, i64 9
  %74 = load i8, ptr %73, align 1, !tbaa !11
  %75 = zext i8 %74 to i32
  %76 = shl i32 %75, 8
  %77 = add i32 %71, %76
  %78 = load ptr, ptr %8, align 8, !tbaa !9
  %79 = getelementptr inbounds i8, ptr %78, i64 10
  %80 = load i8, ptr %79, align 1, !tbaa !11
  %81 = zext i8 %80 to i32
  %82 = shl i32 %81, 16
  %83 = add i32 %77, %82
  %84 = load ptr, ptr %8, align 8, !tbaa !9
  %85 = getelementptr inbounds i8, ptr %84, i64 11
  %86 = load i8, ptr %85, align 1, !tbaa !11
  %87 = zext i8 %86 to i32
  %88 = shl i32 %87, 24
  %89 = add i32 %83, %88
  %90 = load i32, ptr %4, align 4, !tbaa !5
  %91 = add i32 %90, %89
  store i32 %91, ptr %4, align 4, !tbaa !5
  br label %92

92:                                               ; preds = %19
  %93 = load i32, ptr %6, align 4, !tbaa !5
  %94 = load i32, ptr %5, align 4, !tbaa !5
  %95 = sub i32 %94, %93
  store i32 %95, ptr %5, align 4, !tbaa !5
  %96 = load i32, ptr %4, align 4, !tbaa !5
  %97 = load i32, ptr %5, align 4, !tbaa !5
  %98 = sub i32 %97, %96
  store i32 %98, ptr %5, align 4, !tbaa !5
  %99 = load i32, ptr %4, align 4, !tbaa !5
  %100 = lshr i32 %99, 13
  %101 = load i32, ptr %5, align 4, !tbaa !5
  %102 = xor i32 %101, %100
  store i32 %102, ptr %5, align 4, !tbaa !5
  %103 = load i32, ptr %4, align 4, !tbaa !5
  %104 = load i32, ptr %6, align 4, !tbaa !5
  %105 = sub i32 %104, %103
  store i32 %105, ptr %6, align 4, !tbaa !5
  %106 = load i32, ptr %5, align 4, !tbaa !5
  %107 = load i32, ptr %6, align 4, !tbaa !5
  %108 = sub i32 %107, %106
  store i32 %108, ptr %6, align 4, !tbaa !5
  %109 = load i32, ptr %5, align 4, !tbaa !5
  %110 = shl i32 %109, 8
  %111 = load i32, ptr %6, align 4, !tbaa !5
  %112 = xor i32 %111, %110
  store i32 %112, ptr %6, align 4, !tbaa !5
  %113 = load i32, ptr %5, align 4, !tbaa !5
  %114 = load i32, ptr %4, align 4, !tbaa !5
  %115 = sub i32 %114, %113
  store i32 %115, ptr %4, align 4, !tbaa !5
  %116 = load i32, ptr %6, align 4, !tbaa !5
  %117 = load i32, ptr %4, align 4, !tbaa !5
  %118 = sub i32 %117, %116
  store i32 %118, ptr %4, align 4, !tbaa !5
  %119 = load i32, ptr %6, align 4, !tbaa !5
  %120 = lshr i32 %119, 13
  %121 = load i32, ptr %4, align 4, !tbaa !5
  %122 = xor i32 %121, %120
  store i32 %122, ptr %4, align 4, !tbaa !5
  %123 = load i32, ptr %6, align 4, !tbaa !5
  %124 = load i32, ptr %5, align 4, !tbaa !5
  %125 = sub i32 %124, %123
  store i32 %125, ptr %5, align 4, !tbaa !5
  %126 = load i32, ptr %4, align 4, !tbaa !5
  %127 = load i32, ptr %5, align 4, !tbaa !5
  %128 = sub i32 %127, %126
  store i32 %128, ptr %5, align 4, !tbaa !5
  %129 = load i32, ptr %4, align 4, !tbaa !5
  %130 = lshr i32 %129, 12
  %131 = load i32, ptr %5, align 4, !tbaa !5
  %132 = xor i32 %131, %130
  store i32 %132, ptr %5, align 4, !tbaa !5
  %133 = load i32, ptr %4, align 4, !tbaa !5
  %134 = load i32, ptr %6, align 4, !tbaa !5
  %135 = sub i32 %134, %133
  store i32 %135, ptr %6, align 4, !tbaa !5
  %136 = load i32, ptr %5, align 4, !tbaa !5
  %137 = load i32, ptr %6, align 4, !tbaa !5
  %138 = sub i32 %137, %136
  store i32 %138, ptr %6, align 4, !tbaa !5
  %139 = load i32, ptr %5, align 4, !tbaa !5
  %140 = shl i32 %139, 16
  %141 = load i32, ptr %6, align 4, !tbaa !5
  %142 = xor i32 %141, %140
  store i32 %142, ptr %6, align 4, !tbaa !5
  %143 = load i32, ptr %5, align 4, !tbaa !5
  %144 = load i32, ptr %4, align 4, !tbaa !5
  %145 = sub i32 %144, %143
  store i32 %145, ptr %4, align 4, !tbaa !5
  %146 = load i32, ptr %6, align 4, !tbaa !5
  %147 = load i32, ptr %4, align 4, !tbaa !5
  %148 = sub i32 %147, %146
  store i32 %148, ptr %4, align 4, !tbaa !5
  %149 = load i32, ptr %6, align 4, !tbaa !5
  %150 = lshr i32 %149, 5
  %151 = load i32, ptr %4, align 4, !tbaa !5
  %152 = xor i32 %151, %150
  store i32 %152, ptr %4, align 4, !tbaa !5
  %153 = load i32, ptr %6, align 4, !tbaa !5
  %154 = load i32, ptr %5, align 4, !tbaa !5
  %155 = sub i32 %154, %153
  store i32 %155, ptr %5, align 4, !tbaa !5
  %156 = load i32, ptr %4, align 4, !tbaa !5
  %157 = load i32, ptr %5, align 4, !tbaa !5
  %158 = sub i32 %157, %156
  store i32 %158, ptr %5, align 4, !tbaa !5
  %159 = load i32, ptr %4, align 4, !tbaa !5
  %160 = lshr i32 %159, 3
  %161 = load i32, ptr %5, align 4, !tbaa !5
  %162 = xor i32 %161, %160
  store i32 %162, ptr %5, align 4, !tbaa !5
  %163 = load i32, ptr %4, align 4, !tbaa !5
  %164 = load i32, ptr %6, align 4, !tbaa !5
  %165 = sub i32 %164, %163
  store i32 %165, ptr %6, align 4, !tbaa !5
  %166 = load i32, ptr %5, align 4, !tbaa !5
  %167 = load i32, ptr %6, align 4, !tbaa !5
  %168 = sub i32 %167, %166
  store i32 %168, ptr %6, align 4, !tbaa !5
  %169 = load i32, ptr %5, align 4, !tbaa !5
  %170 = shl i32 %169, 10
  %171 = load i32, ptr %6, align 4, !tbaa !5
  %172 = xor i32 %171, %170
  store i32 %172, ptr %6, align 4, !tbaa !5
  %173 = load i32, ptr %5, align 4, !tbaa !5
  %174 = load i32, ptr %4, align 4, !tbaa !5
  %175 = sub i32 %174, %173
  store i32 %175, ptr %4, align 4, !tbaa !5
  %176 = load i32, ptr %6, align 4, !tbaa !5
  %177 = load i32, ptr %4, align 4, !tbaa !5
  %178 = sub i32 %177, %176
  store i32 %178, ptr %4, align 4, !tbaa !5
  %179 = load i32, ptr %6, align 4, !tbaa !5
  %180 = lshr i32 %179, 15
  %181 = load i32, ptr %4, align 4, !tbaa !5
  %182 = xor i32 %181, %180
  store i32 %182, ptr %4, align 4, !tbaa !5
  br label %183

183:                                              ; preds = %92
  br label %184

184:                                              ; preds = %183
  %185 = load ptr, ptr %8, align 8, !tbaa !9
  %186 = getelementptr inbounds i8, ptr %185, i64 12
  store ptr %186, ptr %8, align 8, !tbaa !9
  %187 = load i32, ptr %7, align 4, !tbaa !5
  %188 = sub i32 %187, 12
  store i32 %188, ptr %7, align 4, !tbaa !5
  br label %16, !llvm.loop !12

189:                                              ; preds = %16
  %190 = load i32, ptr %4, align 4, !tbaa !5
  %191 = add i32 %190, 4
  store i32 %191, ptr %4, align 4, !tbaa !5
  %192 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %192, label %279 [
    i32 11, label %193
    i32 10, label %201
    i32 9, label %209
    i32 8, label %217
    i32 7, label %225
    i32 6, label %233
    i32 5, label %241
    i32 4, label %248
    i32 3, label %256
    i32 2, label %264
    i32 1, label %272
  ]

193:                                              ; preds = %189
  %194 = load ptr, ptr %8, align 8, !tbaa !9
  %195 = getelementptr inbounds i8, ptr %194, i64 10
  %196 = load i8, ptr %195, align 1, !tbaa !11
  %197 = zext i8 %196 to i32
  %198 = shl i32 %197, 24
  %199 = load i32, ptr %4, align 4, !tbaa !5
  %200 = add i32 %199, %198
  store i32 %200, ptr %4, align 4, !tbaa !5
  br label %201

201:                                              ; preds = %193, %189
  %202 = load ptr, ptr %8, align 8, !tbaa !9
  %203 = getelementptr inbounds i8, ptr %202, i64 9
  %204 = load i8, ptr %203, align 1, !tbaa !11
  %205 = zext i8 %204 to i32
  %206 = shl i32 %205, 16
  %207 = load i32, ptr %4, align 4, !tbaa !5
  %208 = add i32 %207, %206
  store i32 %208, ptr %4, align 4, !tbaa !5
  br label %209

209:                                              ; preds = %201, %189
  %210 = load ptr, ptr %8, align 8, !tbaa !9
  %211 = getelementptr inbounds i8, ptr %210, i64 8
  %212 = load i8, ptr %211, align 1, !tbaa !11
  %213 = zext i8 %212 to i32
  %214 = shl i32 %213, 8
  %215 = load i32, ptr %4, align 4, !tbaa !5
  %216 = add i32 %215, %214
  store i32 %216, ptr %4, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %209, %189
  %218 = load ptr, ptr %8, align 8, !tbaa !9
  %219 = getelementptr inbounds i8, ptr %218, i64 7
  %220 = load i8, ptr %219, align 1, !tbaa !11
  %221 = zext i8 %220 to i32
  %222 = shl i32 %221, 24
  %223 = load i32, ptr %6, align 4, !tbaa !5
  %224 = add i32 %223, %222
  store i32 %224, ptr %6, align 4, !tbaa !5
  br label %225

225:                                              ; preds = %217, %189
  %226 = load ptr, ptr %8, align 8, !tbaa !9
  %227 = getelementptr inbounds i8, ptr %226, i64 6
  %228 = load i8, ptr %227, align 1, !tbaa !11
  %229 = zext i8 %228 to i32
  %230 = shl i32 %229, 16
  %231 = load i32, ptr %6, align 4, !tbaa !5
  %232 = add i32 %231, %230
  store i32 %232, ptr %6, align 4, !tbaa !5
  br label %233

233:                                              ; preds = %225, %189
  %234 = load ptr, ptr %8, align 8, !tbaa !9
  %235 = getelementptr inbounds i8, ptr %234, i64 5
  %236 = load i8, ptr %235, align 1, !tbaa !11
  %237 = zext i8 %236 to i32
  %238 = shl i32 %237, 8
  %239 = load i32, ptr %6, align 4, !tbaa !5
  %240 = add i32 %239, %238
  store i32 %240, ptr %6, align 4, !tbaa !5
  br label %241

241:                                              ; preds = %233, %189
  %242 = load ptr, ptr %8, align 8, !tbaa !9
  %243 = getelementptr inbounds i8, ptr %242, i64 4
  %244 = load i8, ptr %243, align 1, !tbaa !11
  %245 = zext i8 %244 to i32
  %246 = load i32, ptr %6, align 4, !tbaa !5
  %247 = add i32 %246, %245
  store i32 %247, ptr %6, align 4, !tbaa !5
  br label %248

248:                                              ; preds = %241, %189
  %249 = load ptr, ptr %8, align 8, !tbaa !9
  %250 = getelementptr inbounds i8, ptr %249, i64 3
  %251 = load i8, ptr %250, align 1, !tbaa !11
  %252 = zext i8 %251 to i32
  %253 = shl i32 %252, 24
  %254 = load i32, ptr %5, align 4, !tbaa !5
  %255 = add i32 %254, %253
  store i32 %255, ptr %5, align 4, !tbaa !5
  br label %256

256:                                              ; preds = %248, %189
  %257 = load ptr, ptr %8, align 8, !tbaa !9
  %258 = getelementptr inbounds i8, ptr %257, i64 2
  %259 = load i8, ptr %258, align 1, !tbaa !11
  %260 = zext i8 %259 to i32
  %261 = shl i32 %260, 16
  %262 = load i32, ptr %5, align 4, !tbaa !5
  %263 = add i32 %262, %261
  store i32 %263, ptr %5, align 4, !tbaa !5
  br label %264

264:                                              ; preds = %256, %189
  %265 = load ptr, ptr %8, align 8, !tbaa !9
  %266 = getelementptr inbounds i8, ptr %265, i64 1
  %267 = load i8, ptr %266, align 1, !tbaa !11
  %268 = zext i8 %267 to i32
  %269 = shl i32 %268, 8
  %270 = load i32, ptr %5, align 4, !tbaa !5
  %271 = add i32 %270, %269
  store i32 %271, ptr %5, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %264, %189
  %273 = load ptr, ptr %8, align 8, !tbaa !9
  %274 = getelementptr inbounds i8, ptr %273, i64 0
  %275 = load i8, ptr %274, align 1, !tbaa !11
  %276 = zext i8 %275 to i32
  %277 = load i32, ptr %5, align 4, !tbaa !5
  %278 = add i32 %277, %276
  store i32 %278, ptr %5, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %272, %189
  br label %280

280:                                              ; preds = %279
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %6, align 4, !tbaa !5
  %283 = load i32, ptr %5, align 4, !tbaa !5
  %284 = sub i32 %283, %282
  store i32 %284, ptr %5, align 4, !tbaa !5
  %285 = load i32, ptr %4, align 4, !tbaa !5
  %286 = load i32, ptr %5, align 4, !tbaa !5
  %287 = sub i32 %286, %285
  store i32 %287, ptr %5, align 4, !tbaa !5
  %288 = load i32, ptr %4, align 4, !tbaa !5
  %289 = lshr i32 %288, 13
  %290 = load i32, ptr %5, align 4, !tbaa !5
  %291 = xor i32 %290, %289
  store i32 %291, ptr %5, align 4, !tbaa !5
  %292 = load i32, ptr %4, align 4, !tbaa !5
  %293 = load i32, ptr %6, align 4, !tbaa !5
  %294 = sub i32 %293, %292
  store i32 %294, ptr %6, align 4, !tbaa !5
  %295 = load i32, ptr %5, align 4, !tbaa !5
  %296 = load i32, ptr %6, align 4, !tbaa !5
  %297 = sub i32 %296, %295
  store i32 %297, ptr %6, align 4, !tbaa !5
  %298 = load i32, ptr %5, align 4, !tbaa !5
  %299 = shl i32 %298, 8
  %300 = load i32, ptr %6, align 4, !tbaa !5
  %301 = xor i32 %300, %299
  store i32 %301, ptr %6, align 4, !tbaa !5
  %302 = load i32, ptr %5, align 4, !tbaa !5
  %303 = load i32, ptr %4, align 4, !tbaa !5
  %304 = sub i32 %303, %302
  store i32 %304, ptr %4, align 4, !tbaa !5
  %305 = load i32, ptr %6, align 4, !tbaa !5
  %306 = load i32, ptr %4, align 4, !tbaa !5
  %307 = sub i32 %306, %305
  store i32 %307, ptr %4, align 4, !tbaa !5
  %308 = load i32, ptr %6, align 4, !tbaa !5
  %309 = lshr i32 %308, 13
  %310 = load i32, ptr %4, align 4, !tbaa !5
  %311 = xor i32 %310, %309
  store i32 %311, ptr %4, align 4, !tbaa !5
  %312 = load i32, ptr %6, align 4, !tbaa !5
  %313 = load i32, ptr %5, align 4, !tbaa !5
  %314 = sub i32 %313, %312
  store i32 %314, ptr %5, align 4, !tbaa !5
  %315 = load i32, ptr %4, align 4, !tbaa !5
  %316 = load i32, ptr %5, align 4, !tbaa !5
  %317 = sub i32 %316, %315
  store i32 %317, ptr %5, align 4, !tbaa !5
  %318 = load i32, ptr %4, align 4, !tbaa !5
  %319 = lshr i32 %318, 12
  %320 = load i32, ptr %5, align 4, !tbaa !5
  %321 = xor i32 %320, %319
  store i32 %321, ptr %5, align 4, !tbaa !5
  %322 = load i32, ptr %4, align 4, !tbaa !5
  %323 = load i32, ptr %6, align 4, !tbaa !5
  %324 = sub i32 %323, %322
  store i32 %324, ptr %6, align 4, !tbaa !5
  %325 = load i32, ptr %5, align 4, !tbaa !5
  %326 = load i32, ptr %6, align 4, !tbaa !5
  %327 = sub i32 %326, %325
  store i32 %327, ptr %6, align 4, !tbaa !5
  %328 = load i32, ptr %5, align 4, !tbaa !5
  %329 = shl i32 %328, 16
  %330 = load i32, ptr %6, align 4, !tbaa !5
  %331 = xor i32 %330, %329
  store i32 %331, ptr %6, align 4, !tbaa !5
  %332 = load i32, ptr %5, align 4, !tbaa !5
  %333 = load i32, ptr %4, align 4, !tbaa !5
  %334 = sub i32 %333, %332
  store i32 %334, ptr %4, align 4, !tbaa !5
  %335 = load i32, ptr %6, align 4, !tbaa !5
  %336 = load i32, ptr %4, align 4, !tbaa !5
  %337 = sub i32 %336, %335
  store i32 %337, ptr %4, align 4, !tbaa !5
  %338 = load i32, ptr %6, align 4, !tbaa !5
  %339 = lshr i32 %338, 5
  %340 = load i32, ptr %4, align 4, !tbaa !5
  %341 = xor i32 %340, %339
  store i32 %341, ptr %4, align 4, !tbaa !5
  %342 = load i32, ptr %6, align 4, !tbaa !5
  %343 = load i32, ptr %5, align 4, !tbaa !5
  %344 = sub i32 %343, %342
  store i32 %344, ptr %5, align 4, !tbaa !5
  %345 = load i32, ptr %4, align 4, !tbaa !5
  %346 = load i32, ptr %5, align 4, !tbaa !5
  %347 = sub i32 %346, %345
  store i32 %347, ptr %5, align 4, !tbaa !5
  %348 = load i32, ptr %4, align 4, !tbaa !5
  %349 = lshr i32 %348, 3
  %350 = load i32, ptr %5, align 4, !tbaa !5
  %351 = xor i32 %350, %349
  store i32 %351, ptr %5, align 4, !tbaa !5
  %352 = load i32, ptr %4, align 4, !tbaa !5
  %353 = load i32, ptr %6, align 4, !tbaa !5
  %354 = sub i32 %353, %352
  store i32 %354, ptr %6, align 4, !tbaa !5
  %355 = load i32, ptr %5, align 4, !tbaa !5
  %356 = load i32, ptr %6, align 4, !tbaa !5
  %357 = sub i32 %356, %355
  store i32 %357, ptr %6, align 4, !tbaa !5
  %358 = load i32, ptr %5, align 4, !tbaa !5
  %359 = shl i32 %358, 10
  %360 = load i32, ptr %6, align 4, !tbaa !5
  %361 = xor i32 %360, %359
  store i32 %361, ptr %6, align 4, !tbaa !5
  %362 = load i32, ptr %5, align 4, !tbaa !5
  %363 = load i32, ptr %4, align 4, !tbaa !5
  %364 = sub i32 %363, %362
  store i32 %364, ptr %4, align 4, !tbaa !5
  %365 = load i32, ptr %6, align 4, !tbaa !5
  %366 = load i32, ptr %4, align 4, !tbaa !5
  %367 = sub i32 %366, %365
  store i32 %367, ptr %4, align 4, !tbaa !5
  %368 = load i32, ptr %6, align 4, !tbaa !5
  %369 = lshr i32 %368, 15
  %370 = load i32, ptr %4, align 4, !tbaa !5
  %371 = xor i32 %370, %369
  store i32 %371, ptr %4, align 4, !tbaa !5
  br label %372

372:                                              ; preds = %281
  br label %373

373:                                              ; preds = %372
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  br label %374

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %374
  br label %376

376:                                              ; preds = %375
  br label %377

377:                                              ; preds = %376
  br label %378

378:                                              ; preds = %377
  store ptr null, ptr %3, align 8, !tbaa !9
  %379 = load ptr, ptr @users, align 8, !tbaa !9
  %380 = icmp ne ptr %379, null
  br i1 %380, label %381, label %485

381:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  br label %382

382:                                              ; preds = %381
  %383 = load i32, ptr %4, align 4, !tbaa !5
  %384 = load ptr, ptr @users, align 8, !tbaa !9
  %385 = getelementptr inbounds %struct.my_struct, ptr %384, i32 0, i32 2
  %386 = getelementptr inbounds %struct.UT_hash_handle, ptr %385, i32 0, i32 0
  %387 = load ptr, ptr %386, align 8, !tbaa !14
  %388 = getelementptr inbounds %struct.UT_hash_table, ptr %387, i32 0, i32 1
  %389 = load i32, ptr %388, align 8, !tbaa !17
  %390 = sub i32 %389, 1
  %391 = and i32 %383, %390
  store i32 %391, ptr %9, align 4, !tbaa !5
  br label %392

392:                                              ; preds = %382
  br label %393

393:                                              ; preds = %392
  br label %394

394:                                              ; preds = %393
  %395 = load ptr, ptr @users, align 8, !tbaa !9
  %396 = getelementptr inbounds %struct.my_struct, ptr %395, i32 0, i32 2
  %397 = getelementptr inbounds %struct.UT_hash_handle, ptr %396, i32 0, i32 0
  %398 = load ptr, ptr %397, align 8, !tbaa !14
  %399 = getelementptr inbounds %struct.UT_hash_table, ptr %398, i32 0, i32 0
  %400 = load ptr, ptr %399, align 8, !tbaa !20
  %401 = load i32, ptr %9, align 4, !tbaa !5
  %402 = zext i32 %401 to i64
  %403 = getelementptr inbounds %struct.UT_hash_bucket, ptr %400, i64 %402
  %404 = getelementptr inbounds %struct.UT_hash_bucket, ptr %403, i32 0, i32 0
  %405 = load ptr, ptr %404, align 8, !tbaa !21
  %406 = icmp ne ptr %405, null
  br i1 %406, label %407, label %430

407:                                              ; preds = %394
  br label %408

408:                                              ; preds = %407
  %409 = load ptr, ptr @users, align 8, !tbaa !9
  %410 = getelementptr inbounds %struct.my_struct, ptr %409, i32 0, i32 2
  %411 = getelementptr inbounds %struct.UT_hash_handle, ptr %410, i32 0, i32 0
  %412 = load ptr, ptr %411, align 8, !tbaa !14
  %413 = getelementptr inbounds %struct.UT_hash_table, ptr %412, i32 0, i32 0
  %414 = load ptr, ptr %413, align 8, !tbaa !20
  %415 = load i32, ptr %9, align 4, !tbaa !5
  %416 = zext i32 %415 to i64
  %417 = getelementptr inbounds %struct.UT_hash_bucket, ptr %414, i64 %416
  %418 = getelementptr inbounds %struct.UT_hash_bucket, ptr %417, i32 0, i32 0
  %419 = load ptr, ptr %418, align 8, !tbaa !21
  %420 = load ptr, ptr @users, align 8, !tbaa !9
  %421 = getelementptr inbounds %struct.my_struct, ptr %420, i32 0, i32 2
  %422 = getelementptr inbounds %struct.UT_hash_handle, ptr %421, i32 0, i32 0
  %423 = load ptr, ptr %422, align 8, !tbaa !14
  %424 = getelementptr inbounds %struct.UT_hash_table, ptr %423, i32 0, i32 5
  %425 = load i64, ptr %424, align 8, !tbaa !23
  %426 = sub i64 0, %425
  %427 = getelementptr inbounds i8, ptr %419, i64 %426
  store ptr %427, ptr %3, align 8, !tbaa !9
  br label %428

428:                                              ; preds = %408
  br label %429

429:                                              ; preds = %428
  br label %431

430:                                              ; preds = %394
  store ptr null, ptr %3, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %430, %429
  br label %432

432:                                              ; preds = %481, %431
  %433 = load ptr, ptr %3, align 8, !tbaa !9
  %434 = icmp ne ptr %433, null
  br i1 %434, label %435, label %482

435:                                              ; preds = %432
  %436 = load ptr, ptr %3, align 8, !tbaa !9
  %437 = getelementptr inbounds %struct.my_struct, ptr %436, i32 0, i32 2
  %438 = getelementptr inbounds %struct.UT_hash_handle, ptr %437, i32 0, i32 7
  %439 = load i32, ptr %438, align 4, !tbaa !24
  %440 = load i32, ptr %4, align 4, !tbaa !5
  %441 = icmp eq i32 %439, %440
  br i1 %441, label %442, label %458

442:                                              ; preds = %435
  %443 = load ptr, ptr %3, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.my_struct, ptr %443, i32 0, i32 2
  %445 = getelementptr inbounds %struct.UT_hash_handle, ptr %444, i32 0, i32 6
  %446 = load i32, ptr %445, align 8, !tbaa !25
  %447 = zext i32 %446 to i64
  %448 = icmp eq i64 %447, 4
  br i1 %448, label %449, label %458

449:                                              ; preds = %442
  %450 = load ptr, ptr %3, align 8, !tbaa !9
  %451 = getelementptr inbounds %struct.my_struct, ptr %450, i32 0, i32 2
  %452 = getelementptr inbounds %struct.UT_hash_handle, ptr %451, i32 0, i32 5
  %453 = load ptr, ptr %452, align 8, !tbaa !26
  %454 = call i32 @memcmp(ptr noundef %453, ptr noundef %2, i64 noundef 4) #4
  %455 = icmp eq i32 %454, 0
  br i1 %455, label %456, label %457

456:                                              ; preds = %449
  br label %482

457:                                              ; preds = %449
  br label %458

458:                                              ; preds = %457, %442, %435
  %459 = load ptr, ptr %3, align 8, !tbaa !9
  %460 = getelementptr inbounds %struct.my_struct, ptr %459, i32 0, i32 2
  %461 = getelementptr inbounds %struct.UT_hash_handle, ptr %460, i32 0, i32 4
  %462 = load ptr, ptr %461, align 8, !tbaa !27
  %463 = icmp ne ptr %462, null
  br i1 %463, label %464, label %480

464:                                              ; preds = %458
  br label %465

465:                                              ; preds = %464
  %466 = load ptr, ptr %3, align 8, !tbaa !9
  %467 = getelementptr inbounds %struct.my_struct, ptr %466, i32 0, i32 2
  %468 = getelementptr inbounds %struct.UT_hash_handle, ptr %467, i32 0, i32 4
  %469 = load ptr, ptr %468, align 8, !tbaa !27
  %470 = load ptr, ptr @users, align 8, !tbaa !9
  %471 = getelementptr inbounds %struct.my_struct, ptr %470, i32 0, i32 2
  %472 = getelementptr inbounds %struct.UT_hash_handle, ptr %471, i32 0, i32 0
  %473 = load ptr, ptr %472, align 8, !tbaa !14
  %474 = getelementptr inbounds %struct.UT_hash_table, ptr %473, i32 0, i32 5
  %475 = load i64, ptr %474, align 8, !tbaa !23
  %476 = sub i64 0, %475
  %477 = getelementptr inbounds i8, ptr %469, i64 %476
  store ptr %477, ptr %3, align 8, !tbaa !9
  br label %478

478:                                              ; preds = %465
  br label %479

479:                                              ; preds = %478
  br label %481

480:                                              ; preds = %458
  store ptr null, ptr %3, align 8, !tbaa !9
  br label %481

481:                                              ; preds = %480, %479
  br label %432, !llvm.loop !28

482:                                              ; preds = %456, %432
  br label %483

483:                                              ; preds = %482
  br label %484

484:                                              ; preds = %483
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  br label %485

485:                                              ; preds = %484, %378
  br label %486

486:                                              ; preds = %485
  br label %487

487:                                              ; preds = %486
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  br label %488

488:                                              ; preds = %487, %10
  br label %489

489:                                              ; preds = %488
  br label %490

490:                                              ; preds = %489
  %491 = load ptr, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #3
  ret ptr %491
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { nounwind }
attributes #4 = { 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 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !10, i64 32}
!15 = !{!"my_struct", !6, i64 0, !7, i64 4, !16, i64 32}
!16 = !{!"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}
!17 = !{!18, !6, i64 8}
!18 = !{!"UT_hash_table", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !10, i64 24, !19, i64 32, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56}
!19 = !{!"long", !7, i64 0}
!20 = !{!18, !10, i64 0}
!21 = !{!22, !10, i64 0}
!22 = !{!"UT_hash_bucket", !10, i64 0, !6, i64 8, !6, i64 12}
!23 = !{!18, !19, i64 32}
!24 = !{!15, !6, i64 84}
!25 = !{!15, !6, i64 80}
!26 = !{!15, !10, i64 72}
!27 = !{!15, !10, i64 64}
!28 = distinct !{!28, !13}


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

@users = external dso_local local_unnamed_addr global ptr, align 8

; Function Attrs: nofree nounwind memory(read, inaccessiblemem: none) uwtable
define dso_local ptr @find_user(i32 noundef %0) local_unnamed_addr #0 {
  %2 = alloca i32, align 4
  store i32 %0, ptr %2, align 4, !tbaa !5
  %3 = load ptr, ptr @users, align 8, !tbaa !9
  %.not = icmp eq ptr %3, null
  br i1 %.not, label %.loopexit, label %4

4:                                                ; preds = %1
  %5 = and i32 %0, -16777216
  %6 = and i32 %0, 16711680
  %7 = and i32 %0, 65280
  %8 = and i32 %0, 255
  %9 = add i32 %5, 17973517
  %10 = add i32 %9, %6
  %11 = add i32 %10, %7
  %12 = add i32 %11, %8
  %13 = xor i32 %12, 522093
  %14 = sub i32 -1622558010, %13
  %15 = shl i32 %13, 8
  %16 = xor i32 %14, %15
  %17 = add i32 %13, %16
  %18 = sub i32 -17973517, %17
  %19 = lshr i32 %16, 13
  %20 = xor i32 %18, %19
  %21 = add i32 %16, %20
  %22 = sub i32 %13, %21
  %23 = lshr i32 %20, 12
  %24 = xor i32 %22, %23
  %25 = add i32 %20, %24
  %26 = sub i32 %16, %25
  %27 = shl i32 %24, 16
  %28 = xor i32 %26, %27
  %29 = add i32 %24, %28
  %30 = sub i32 %20, %29
  %31 = lshr i32 %28, 5
  %32 = xor i32 %30, %31
  %33 = add i32 %28, %32
  %34 = sub i32 %24, %33
  %35 = lshr i32 %32, 3
  %36 = xor i32 %34, %35
  %37 = add i32 %32, %36
  %38 = sub i32 %28, %37
  %39 = shl i32 %36, 10
  %40 = xor i32 %38, %39
  %41 = add i32 %36, %40
  %42 = sub i32 %32, %41
  %43 = lshr i32 %40, 15
  %44 = xor i32 %42, %43
  %45 = getelementptr inbounds i8, ptr %3, i64 32
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = getelementptr inbounds i8, ptr %46, i64 8
  %48 = load i32, ptr %47, align 8, !tbaa !14
  %49 = add i32 %48, -1
  %50 = and i32 %44, %49
  %51 = load ptr, ptr %46, align 8, !tbaa !17
  %52 = zext i32 %50 to i64
  %53 = getelementptr inbounds %struct.UT_hash_bucket, ptr %51, i64 %52
  %54 = load ptr, ptr %53, align 8, !tbaa !18
  %.not185 = icmp eq ptr %54, null
  br i1 %.not185, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %4
  %55 = getelementptr inbounds i8, ptr %46, i64 32
  %56 = load i64, ptr %55, align 8, !tbaa !20
  %57 = sub i64 0, %56
  %58 = getelementptr inbounds i8, ptr %54, i64 %57
  %59 = getelementptr inbounds i8, ptr %46, i64 32
  br label %60

60:                                               ; preds = %75, %.lr.ph
  %.1203 = phi ptr [ %58, %.lr.ph ], [ %78, %75 ]
  %61 = getelementptr inbounds i8, ptr %.1203, i64 84
  %62 = load i32, ptr %61, align 4, !tbaa !21
  %63 = icmp eq i32 %62, %44
  br i1 %63, label %64, label %72

64:                                               ; preds = %60
  %65 = getelementptr inbounds i8, ptr %.1203, i64 80
  %66 = load i32, ptr %65, align 8, !tbaa !22
  %67 = icmp eq i32 %66, 4
  br i1 %67, label %68, label %72

68:                                               ; preds = %64
  %69 = getelementptr inbounds i8, ptr %.1203, i64 72
  %70 = load ptr, ptr %69, align 8, !tbaa !23
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(4) %70, ptr noundef nonnull dereferenceable(4) %2, i64 4)
  %71 = icmp eq i32 %bcmp, 0
  br i1 %71, label %.loopexit, label %72

72:                                               ; preds = %68, %64, %60
  %73 = getelementptr inbounds i8, ptr %.1203, i64 64
  %74 = load ptr, ptr %73, align 8, !tbaa !24
  %.not187 = icmp eq ptr %74, null
  br i1 %.not187, label %.loopexit, label %75

75:                                               ; preds = %72
  %76 = load i64, ptr %59, align 8, !tbaa !20
  %77 = sub i64 0, %76
  %78 = getelementptr inbounds i8, ptr %74, i64 %77
  br label %60, !llvm.loop !25

.loopexit:                                        ; preds = %72, %68, %4, %1
  %.4 = phi ptr [ null, %1 ], [ null, %4 ], [ null, %72 ], [ %.1203, %68 ]
  ret ptr %.4
}

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #1

attributes #0 = { nofree nounwind memory(read, inaccessiblemem: none) 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 willreturn memory(argmem: 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 32}
!12 = !{!"my_struct", !6, i64 0, !7, i64 4, !13, i64 32}
!13 = !{!"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}
!14 = !{!15, !6, i64 8}
!15 = !{!"UT_hash_table", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !10, i64 24, !16, i64 32, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56}
!16 = !{!"long", !7, i64 0}
!17 = !{!15, !10, i64 0}
!18 = !{!19, !10, i64 0}
!19 = !{!"UT_hash_bucket", !10, i64 0, !6, i64 8, !6, i64 12}
!20 = !{!15, !16, i64 32}
!21 = !{!12, !6, i64 84}
!22 = !{!12, !6, i64 80}
!23 = !{!12, !10, i64 72}
!24 = !{!12, !10, i64 64}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass