; LLVM IR from stan-dev/math :: lib/boost_1.84.0/libs/container/src (alloc_lib)

; 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.malloc_params = type { i64, i64, i64, i64, i64, i32 }
%struct.malloc_state = type { i32, i32, i64, i64, ptr, ptr, ptr, i64, i64, i64, [66 x ptr], [32 x ptr], i64, i64, i64, i32, i32, %struct.malloc_segment, ptr, i64 }
%struct.malloc_segment = type { ptr, i64, ptr, i32 }
%struct.malloc_chunk = type { i64, i64, ptr, ptr }

@mparams = external hidden global %struct.malloc_params, align 8
@_gm_ = external hidden global %struct.malloc_state, align 8

; Function Attrs: nounwind uwtable
define dso_local ptr @dlmalloc(i64 noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  store i64 %0, ptr %3, align 8, !tbaa !5
  %33 = load i64, ptr @mparams, align 8, !tbaa !9
  %34 = icmp ne i64 %33, 0
  br i1 %34, label %38, label %35

35:                                               ; preds = %1
  %36 = call i32 @init_mparams()
  %37 = icmp ne i32 %36, 0
  br label %38

38:                                               ; preds = %35, %1
  %39 = phi i1 [ true, %1 ], [ %37, %35 ]
  %40 = zext i1 %39 to i32
  %41 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 15), align 8, !tbaa !12
  %42 = and i32 %41, 2
  %43 = icmp ne i32 %42, 0
  br i1 %43, label %44, label %51

44:                                               ; preds = %38
  %45 = atomicrmw xchg ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 16), i32 1 seq_cst, align 4
  %46 = icmp ne i32 %45, 0
  br i1 %46, label %47, label %50

47:                                               ; preds = %44
  %48 = call i32 @spin_acquire_lock(ptr noundef getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 16))
  %49 = icmp ne i32 %48, 0
  br i1 %49, label %512, label %52

50:                                               ; preds = %44
  br i1 false, label %512, label %52

51:                                               ; preds = %38
  br i1 false, label %512, label %52

52:                                               ; preds = %51, %50, %47
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %53 = load i64, ptr %3, align 8, !tbaa !5
  %54 = icmp ule i64 %53, 232
  br i1 %54, label %55, label %404

55:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %56 = load i64, ptr %3, align 8, !tbaa !5
  %57 = icmp ult i64 %56, 23
  br i1 %57, label %58, label %59

58:                                               ; preds = %55
  br label %64

59:                                               ; preds = %55
  %60 = load i64, ptr %3, align 8, !tbaa !5
  %61 = add i64 %60, 8
  %62 = add i64 %61, 15
  %63 = and i64 %62, -16
  br label %64

64:                                               ; preds = %59, %58
  %65 = phi i64 [ 32, %58 ], [ %63, %59 ]
  store i64 %65, ptr %5, align 8, !tbaa !5
  %66 = load i64, ptr %5, align 8, !tbaa !5
  %67 = lshr i64 %66, 3
  %68 = trunc i64 %67 to i32
  store i32 %68, ptr %6, align 4, !tbaa !16
  %69 = load i32, ptr @_gm_, align 8, !tbaa !17
  %70 = load i32, ptr %6, align 4, !tbaa !16
  %71 = lshr i32 %69, %70
  store i32 %71, ptr %7, align 4, !tbaa !16
  %72 = load i32, ptr %7, align 4, !tbaa !16
  %73 = and i32 %72, 3
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %175

75:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %76 = load i32, ptr %7, align 4, !tbaa !16
  %77 = xor i32 %76, -1
  %78 = and i32 %77, 1
  %79 = load i32, ptr %6, align 4, !tbaa !16
  %80 = add i32 %79, %78
  store i32 %80, ptr %6, align 4, !tbaa !16
  %81 = load i32, ptr %6, align 4, !tbaa !16
  %82 = shl i32 %81, 1
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %83
  store ptr %84, ptr %8, align 8, !tbaa !18
  %85 = load ptr, ptr %8, align 8, !tbaa !18
  %86 = getelementptr inbounds %struct.malloc_chunk, ptr %85, i32 0, i32 2
  %87 = load ptr, ptr %86, align 8, !tbaa !19
  store ptr %87, ptr %9, align 8, !tbaa !18
  %88 = load ptr, ptr %9, align 8, !tbaa !18
  %89 = getelementptr inbounds %struct.malloc_chunk, ptr %88, i32 0, i32 1
  %90 = load i64, ptr %89, align 8, !tbaa !21
  %91 = and i64 %90, -8
  %92 = load i32, ptr %6, align 4, !tbaa !16
  %93 = shl i32 %92, 3
  %94 = zext i32 %93 to i64
  %95 = icmp eq i64 %91, %94
  br i1 %95, label %97, label %96

96:                                               ; preds = %75
  call void @abort() #6
  unreachable

97:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %98 = load ptr, ptr %9, align 8, !tbaa !18
  %99 = getelementptr inbounds %struct.malloc_chunk, ptr %98, i32 0, i32 2
  %100 = load ptr, ptr %99, align 8, !tbaa !19
  store ptr %100, ptr %10, align 8, !tbaa !18
  %101 = load ptr, ptr %9, align 8, !tbaa !18
  %102 = load ptr, ptr %8, align 8, !tbaa !18
  %103 = icmp ne ptr %101, %102
  br i1 %103, label %105, label %104

104:                                              ; preds = %97
  call void @abort() #6
  unreachable

105:                                              ; preds = %97
  %106 = load ptr, ptr %9, align 8, !tbaa !18
  %107 = load ptr, ptr %10, align 8, !tbaa !18
  %108 = icmp ne ptr %106, %107
  br i1 %108, label %110, label %109

109:                                              ; preds = %105
  call void @abort() #6
  unreachable

110:                                              ; preds = %105
  %111 = load ptr, ptr %9, align 8, !tbaa !18
  %112 = getelementptr inbounds %struct.malloc_chunk, ptr %111, i32 0, i32 1
  %113 = load i64, ptr %112, align 8, !tbaa !21
  %114 = and i64 %113, -8
  %115 = load i32, ptr %6, align 4, !tbaa !16
  %116 = shl i32 %115, 3
  %117 = zext i32 %116 to i64
  %118 = icmp eq i64 %114, %117
  br i1 %118, label %120, label %119

119:                                              ; preds = %110
  call void @abort() #6
  unreachable

120:                                              ; preds = %110
  %121 = load ptr, ptr %8, align 8, !tbaa !18
  %122 = load ptr, ptr %10, align 8, !tbaa !18
  %123 = icmp eq ptr %121, %122
  br i1 %123, label %124, label %130

124:                                              ; preds = %120
  %125 = load i32, ptr %6, align 4, !tbaa !16
  %126 = shl i32 1, %125
  %127 = xor i32 %126, -1
  %128 = load i32, ptr @_gm_, align 8, !tbaa !17
  %129 = and i32 %128, %127
  store i32 %129, ptr @_gm_, align 8, !tbaa !17
  br label %155

130:                                              ; preds = %120
  %131 = load ptr, ptr %10, align 8, !tbaa !18
  %132 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !22
  %133 = icmp uge ptr %131, %132
  br i1 %133, label %134, label %140

134:                                              ; preds = %130
  %135 = load ptr, ptr %10, align 8, !tbaa !18
  %136 = getelementptr inbounds %struct.malloc_chunk, ptr %135, i32 0, i32 3
  %137 = load ptr, ptr %136, align 8, !tbaa !23
  %138 = load ptr, ptr %9, align 8, !tbaa !18
  %139 = icmp eq ptr %137, %138
  br label %140

140:                                              ; preds = %134, %130
  %141 = phi i1 [ false, %130 ], [ %139, %134 ]
  %142 = zext i1 %141 to i32
  %143 = sext i32 %142 to i64
  %144 = call i64 @llvm.expect.i64(i64 %143, i64 1)
  %145 = icmp ne i64 %144, 0
  br i1 %145, label %146, label %153

146:                                              ; preds = %140
  %147 = load ptr, ptr %8, align 8, !tbaa !18
  %148 = load ptr, ptr %10, align 8, !tbaa !18
  %149 = getelementptr inbounds %struct.malloc_chunk, ptr %148, i32 0, i32 3
  store ptr %147, ptr %149, align 8, !tbaa !23
  %150 = load ptr, ptr %10, align 8, !tbaa !18
  %151 = load ptr, ptr %8, align 8, !tbaa !18
  %152 = getelementptr inbounds %struct.malloc_chunk, ptr %151, i32 0, i32 2
  store ptr %150, ptr %152, align 8, !tbaa !19
  br label %154

153:                                              ; preds = %140
  call void @abort() #6
  unreachable

154:                                              ; preds = %146
  br label %155

155:                                              ; preds = %154, %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  %156 = load i32, ptr %6, align 4, !tbaa !16
  %157 = shl i32 %156, 3
  %158 = zext i32 %157 to i64
  %159 = or i64 %158, 1
  %160 = or i64 %159, 2
  %161 = load ptr, ptr %9, align 8, !tbaa !18
  %162 = getelementptr inbounds %struct.malloc_chunk, ptr %161, i32 0, i32 1
  store i64 %160, ptr %162, align 8, !tbaa !21
  %163 = load ptr, ptr %9, align 8, !tbaa !18
  %164 = load i32, ptr %6, align 4, !tbaa !16
  %165 = shl i32 %164, 3
  %166 = zext i32 %165 to i64
  %167 = getelementptr inbounds i8, ptr %163, i64 %166
  %168 = getelementptr inbounds %struct.malloc_chunk, ptr %167, i32 0, i32 1
  %169 = load i64, ptr %168, align 8, !tbaa !21
  %170 = or i64 %169, 1
  store i64 %170, ptr %168, align 8, !tbaa !21
  %171 = load ptr, ptr %9, align 8, !tbaa !18
  %172 = getelementptr inbounds i8, ptr %171, i64 16
  store ptr %172, ptr %4, align 8, !tbaa !18
  %173 = load ptr, ptr %4, align 8, !tbaa !18
  %174 = load i64, ptr %5, align 8, !tbaa !5
  call void @do_check_malloced_chunk(ptr noundef @_gm_, ptr noundef %173, i64 noundef %174)
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  br label %401

175:                                              ; preds = %64
  %176 = load i64, ptr %5, align 8, !tbaa !5
  %177 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  %178 = icmp ugt i64 %176, %177
  br i1 %178, label %179, label %399

179:                                              ; preds = %175
  %180 = load i32, ptr %7, align 4, !tbaa !16
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %387

182:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %183 = load i32, ptr %7, align 4, !tbaa !16
  %184 = load i32, ptr %6, align 4, !tbaa !16
  %185 = shl i32 %183, %184
  %186 = load i32, ptr %6, align 4, !tbaa !16
  %187 = shl i32 1, %186
  %188 = shl i32 %187, 1
  %189 = load i32, ptr %6, align 4, !tbaa !16
  %190 = shl i32 1, %189
  %191 = shl i32 %190, 1
  %192 = sub i32 0, %191
  %193 = or i32 %188, %192
  %194 = and i32 %185, %193
  store i32 %194, ptr %17, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %195 = load i32, ptr %17, align 4, !tbaa !16
  %196 = load i32, ptr %17, align 4, !tbaa !16
  %197 = sub i32 0, %196
  %198 = and i32 %195, %197
  store i32 %198, ptr %18, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %199 = load i32, ptr %18, align 4, !tbaa !16
  %200 = call i32 @llvm.cttz.i32(i32 %199, i1 true)
  store i32 %200, ptr %19, align 4, !tbaa !16
  %201 = load i32, ptr %19, align 4, !tbaa !16
  store i32 %201, ptr %16, align 4, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  %202 = load i32, ptr %16, align 4, !tbaa !16
  %203 = shl i32 %202, 1
  %204 = zext i32 %203 to i64
  %205 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %204
  store ptr %205, ptr %12, align 8, !tbaa !18
  %206 = load ptr, ptr %12, align 8, !tbaa !18
  %207 = getelementptr inbounds %struct.malloc_chunk, ptr %206, i32 0, i32 2
  %208 = load ptr, ptr %207, align 8, !tbaa !19
  store ptr %208, ptr %13, align 8, !tbaa !18
  %209 = load ptr, ptr %13, align 8, !tbaa !18
  %210 = getelementptr inbounds %struct.malloc_chunk, ptr %209, i32 0, i32 1
  %211 = load i64, ptr %210, align 8, !tbaa !21
  %212 = and i64 %211, -8
  %213 = load i32, ptr %16, align 4, !tbaa !16
  %214 = shl i32 %213, 3
  %215 = zext i32 %214 to i64
  %216 = icmp eq i64 %212, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %182
  call void @abort() #6
  unreachable

218:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %219 = load ptr, ptr %13, align 8, !tbaa !18
  %220 = getelementptr inbounds %struct.malloc_chunk, ptr %219, i32 0, i32 2
  %221 = load ptr, ptr %220, align 8, !tbaa !19
  store ptr %221, ptr %20, align 8, !tbaa !18
  %222 = load ptr, ptr %13, align 8, !tbaa !18
  %223 = load ptr, ptr %12, align 8, !tbaa !18
  %224 = icmp ne ptr %222, %223
  br i1 %224, label %226, label %225

225:                                              ; preds = %218
  call void @abort() #6
  unreachable

226:                                              ; preds = %218
  %227 = load ptr, ptr %13, align 8, !tbaa !18
  %228 = load ptr, ptr %20, align 8, !tbaa !18
  %229 = icmp ne ptr %227, %228
  br i1 %229, label %231, label %230

230:                                              ; preds = %226
  call void @abort() #6
  unreachable

231:                                              ; preds = %226
  %232 = load ptr, ptr %13, align 8, !tbaa !18
  %233 = getelementptr inbounds %struct.malloc_chunk, ptr %232, i32 0, i32 1
  %234 = load i64, ptr %233, align 8, !tbaa !21
  %235 = and i64 %234, -8
  %236 = load i32, ptr %16, align 4, !tbaa !16
  %237 = shl i32 %236, 3
  %238 = zext i32 %237 to i64
  %239 = icmp eq i64 %235, %238
  br i1 %239, label %241, label %240

240:                                              ; preds = %231
  call void @abort() #6
  unreachable

241:                                              ; preds = %231
  %242 = load ptr, ptr %12, align 8, !tbaa !18
  %243 = load ptr, ptr %20, align 8, !tbaa !18
  %244 = icmp eq ptr %242, %243
  br i1 %244, label %245, label %251

245:                                              ; preds = %241
  %246 = load i32, ptr %16, align 4, !tbaa !16
  %247 = shl i32 1, %246
  %248 = xor i32 %247, -1
  %249 = load i32, ptr @_gm_, align 8, !tbaa !17
  %250 = and i32 %249, %248
  store i32 %250, ptr @_gm_, align 8, !tbaa !17
  br label %276

251:                                              ; preds = %241
  %252 = load ptr, ptr %20, align 8, !tbaa !18
  %253 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !22
  %254 = icmp uge ptr %252, %253
  br i1 %254, label %255, label %261

255:                                              ; preds = %251
  %256 = load ptr, ptr %20, align 8, !tbaa !18
  %257 = getelementptr inbounds %struct.malloc_chunk, ptr %256, i32 0, i32 3
  %258 = load ptr, ptr %257, align 8, !tbaa !23
  %259 = load ptr, ptr %13, align 8, !tbaa !18
  %260 = icmp eq ptr %258, %259
  br label %261

261:                                              ; preds = %255, %251
  %262 = phi i1 [ false, %251 ], [ %260, %255 ]
  %263 = zext i1 %262 to i32
  %264 = sext i32 %263 to i64
  %265 = call i64 @llvm.expect.i64(i64 %264, i64 1)
  %266 = icmp ne i64 %265, 0
  br i1 %266, label %267, label %274

267:                                              ; preds = %261
  %268 = load ptr, ptr %12, align 8, !tbaa !18
  %269 = load ptr, ptr %20, align 8, !tbaa !18
  %270 = getelementptr inbounds %struct.malloc_chunk, ptr %269, i32 0, i32 3
  store ptr %268, ptr %270, align 8, !tbaa !23
  %271 = load ptr, ptr %20, align 8, !tbaa !18
  %272 = load ptr, ptr %12, align 8, !tbaa !18
  %273 = getelementptr inbounds %struct.malloc_chunk, ptr %272, i32 0, i32 2
  store ptr %271, ptr %273, align 8, !tbaa !19
  br label %275

274:                                              ; preds = %261
  call void @abort() #6
  unreachable

275:                                              ; preds = %267
  br label %276

276:                                              ; preds = %275, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  %277 = load i32, ptr %16, align 4, !tbaa !16
  %278 = shl i32 %277, 3
  %279 = zext i32 %278 to i64
  %280 = load i64, ptr %5, align 8, !tbaa !5
  %281 = sub i64 %279, %280
  store i64 %281, ptr %15, align 8, !tbaa !5
  %282 = load i64, ptr %15, align 8, !tbaa !5
  %283 = icmp ult i64 %282, 32
  br i1 %283, label %284, label %300

284:                                              ; preds = %276
  %285 = load i32, ptr %16, align 4, !tbaa !16
  %286 = shl i32 %285, 3
  %287 = zext i32 %286 to i64
  %288 = or i64 %287, 1
  %289 = or i64 %288, 2
  %290 = load ptr, ptr %13, align 8, !tbaa !18
  %291 = getelementptr inbounds %struct.malloc_chunk, ptr %290, i32 0, i32 1
  store i64 %289, ptr %291, align 8, !tbaa !21
  %292 = load ptr, ptr %13, align 8, !tbaa !18
  %293 = load i32, ptr %16, align 4, !tbaa !16
  %294 = shl i32 %293, 3
  %295 = zext i32 %294 to i64
  %296 = getelementptr inbounds i8, ptr %292, i64 %295
  %297 = getelementptr inbounds %struct.malloc_chunk, ptr %296, i32 0, i32 1
  %298 = load i64, ptr %297, align 8, !tbaa !21
  %299 = or i64 %298, 1
  store i64 %299, ptr %297, align 8, !tbaa !21
  br label %382

300:                                              ; preds = %276
  %301 = load i64, ptr %5, align 8, !tbaa !5
  %302 = or i64 %301, 1
  %303 = or i64 %302, 2
  %304 = load ptr, ptr %13, align 8, !tbaa !18
  %305 = getelementptr inbounds %struct.malloc_chunk, ptr %304, i32 0, i32 1
  store i64 %303, ptr %305, align 8, !tbaa !21
  %306 = load ptr, ptr %13, align 8, !tbaa !18
  %307 = load i64, ptr %5, align 8, !tbaa !5
  %308 = getelementptr inbounds i8, ptr %306, i64 %307
  store ptr %308, ptr %14, align 8, !tbaa !18
  %309 = load i64, ptr %15, align 8, !tbaa !5
  %310 = or i64 %309, 1
  %311 = load ptr, ptr %14, align 8, !tbaa !18
  %312 = getelementptr inbounds %struct.malloc_chunk, ptr %311, i32 0, i32 1
  store i64 %310, ptr %312, align 8, !tbaa !21
  %313 = load i64, ptr %15, align 8, !tbaa !5
  %314 = load ptr, ptr %14, align 8, !tbaa !18
  %315 = load i64, ptr %15, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %314, i64 %315
  %317 = getelementptr inbounds %struct.malloc_chunk, ptr %316, i32 0, i32 0
  store i64 %313, ptr %317, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %318 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  store i64 %318, ptr %21, align 8, !tbaa !5
  %319 = load i64, ptr %21, align 8, !tbaa !5
  %320 = lshr i64 %319, 3
  %321 = icmp ult i64 %320, 32
  br i1 %321, label %323, label %322

322:                                              ; preds = %300
  call void @abort() #6
  unreachable

323:                                              ; preds = %300
  %324 = load i64, ptr %21, align 8, !tbaa !5
  %325 = icmp ne i64 %324, 0
  br i1 %325, label %326, label %379

326:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %327 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !26
  store ptr %327, ptr %22, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %328 = load i64, ptr %21, align 8, !tbaa !5
  %329 = lshr i64 %328, 3
  %330 = trunc i64 %329 to i32
  store i32 %330, ptr %23, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %331 = load i32, ptr %23, align 4, !tbaa !16
  %332 = shl i32 %331, 1
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %333
  store ptr %334, ptr %24, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %335 = load ptr, ptr %24, align 8, !tbaa !18
  store ptr %335, ptr %25, align 8, !tbaa !18
  %336 = load i64, ptr %21, align 8, !tbaa !5
  %337 = icmp uge i64 %336, 32
  br i1 %337, label %339, label %338

338:                                              ; preds = %326
  call void @abort() #6
  unreachable

339:                                              ; preds = %326
  %340 = load i32, ptr @_gm_, align 8, !tbaa !17
  %341 = load i32, ptr %23, align 4, !tbaa !16
  %342 = shl i32 1, %341
  %343 = and i32 %340, %342
  %344 = icmp ne i32 %343, 0
  br i1 %344, label %350, label %345

345:                                              ; preds = %339
  %346 = load i32, ptr %23, align 4, !tbaa !16
  %347 = shl i32 1, %346
  %348 = load i32, ptr @_gm_, align 8, !tbaa !17
  %349 = or i32 %348, %347
  store i32 %349, ptr @_gm_, align 8, !tbaa !17
  br label %366

350:                                              ; preds = %339
  %351 = load ptr, ptr %24, align 8, !tbaa !18
  %352 = getelementptr inbounds %struct.malloc_chunk, ptr %351, i32 0, i32 2
  %353 = load ptr, ptr %352, align 8, !tbaa !19
  %354 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !22
  %355 = icmp uge ptr %353, %354
  %356 = zext i1 %355 to i32
  %357 = sext i32 %356 to i64
  %358 = call i64 @llvm.expect.i64(i64 %357, i64 1)
  %359 = icmp ne i64 %358, 0
  br i1 %359, label %360, label %364

360:                                              ; preds = %350
  %361 = load ptr, ptr %24, align 8, !tbaa !18
  %362 = getelementptr inbounds %struct.malloc_chunk, ptr %361, i32 0, i32 2
  %363 = load ptr, ptr %362, align 8, !tbaa !19
  store ptr %363, ptr %25, align 8, !tbaa !18
  br label %365

364:                                              ; preds = %350
  call void @abort() #6
  unreachable

365:                                              ; preds = %360
  br label %366

366:                                              ; preds = %365, %345
  %367 = load ptr, ptr %22, align 8, !tbaa !18
  %368 = load ptr, ptr %24, align 8, !tbaa !18
  %369 = getelementptr inbounds %struct.malloc_chunk, ptr %368, i32 0, i32 2
  store ptr %367, ptr %369, align 8, !tbaa !19
  %370 = load ptr, ptr %22, align 8, !tbaa !18
  %371 = load ptr, ptr %25, align 8, !tbaa !18
  %372 = getelementptr inbounds %struct.malloc_chunk, ptr %371, i32 0, i32 3
  store ptr %370, ptr %372, align 8, !tbaa !23
  %373 = load ptr, ptr %25, align 8, !tbaa !18
  %374 = load ptr, ptr %22, align 8, !tbaa !18
  %375 = getelementptr inbounds %struct.malloc_chunk, ptr %374, i32 0, i32 2
  store ptr %373, ptr %375, align 8, !tbaa !19
  %376 = load ptr, ptr %24, align 8, !tbaa !18
  %377 = load ptr, ptr %22, align 8, !tbaa !18
  %378 = getelementptr inbounds %struct.malloc_chunk, ptr %377, i32 0, i32 3
  store ptr %376, ptr %378, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %379

379:                                              ; preds = %366, %323
  %380 = load i64, ptr %15, align 8, !tbaa !5
  store i64 %380, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  %381 = load ptr, ptr %14, align 8, !tbaa !18
  store ptr %381, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %382

382:                                              ; preds = %379, %284
  %383 = load ptr, ptr %13, align 8, !tbaa !18
  %384 = getelementptr inbounds i8, ptr %383, i64 16
  store ptr %384, ptr %4, align 8, !tbaa !18
  %385 = load ptr, ptr %4, align 8, !tbaa !18
  %386 = load i64, ptr %5, align 8, !tbaa !5
  call void @do_check_malloced_chunk(ptr noundef @_gm_, ptr noundef %385, i64 noundef %386)
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %401

387:                                              ; preds = %179
  %388 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 1), align 4, !tbaa !27
  %389 = icmp ne i32 %388, 0
  br i1 %389, label %390, label %397

390:                                              ; preds = %387
  %391 = load i64, ptr %5, align 8, !tbaa !5
  %392 = call ptr @tmalloc_small(ptr noundef @_gm_, i64 noundef %391)
  store ptr %392, ptr %4, align 8, !tbaa !18
  %393 = icmp ne ptr %392, null
  br i1 %393, label %394, label %397

394:                                              ; preds = %390
  %395 = load ptr, ptr %4, align 8, !tbaa !18
  %396 = load i64, ptr %5, align 8, !tbaa !5
  call void @do_check_malloced_chunk(ptr noundef @_gm_, ptr noundef %395, i64 noundef %396)
  store i32 2, ptr %11, align 4
  br label %401

397:                                              ; preds = %390, %387
  br label %398

398:                                              ; preds = %397
  br label %399

399:                                              ; preds = %398, %175
  br label %400

400:                                              ; preds = %399
  store i32 0, ptr %11, align 4
  br label %401

401:                                              ; preds = %400, %394, %382, %155
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  %402 = load i32, ptr %11, align 4
  switch i32 %402, label %511 [
    i32 0, label %403
    i32 2, label %504
  ]

403:                                              ; preds = %401
  br label %424

404:                                              ; preds = %52
  %405 = load i64, ptr %3, align 8, !tbaa !5
  %406 = icmp uge i64 %405, -128
  br i1 %406, label %407, label %408

407:                                              ; preds = %404
  store i64 -1, ptr %5, align 8, !tbaa !5
  br label %423

408:                                              ; preds = %404
  %409 = load i64, ptr %3, align 8, !tbaa !5
  %410 = add i64 %409, 8
  %411 = add i64 %410, 15
  %412 = and i64 %411, -16
  store i64 %412, ptr %5, align 8, !tbaa !5
  %413 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 1), align 4, !tbaa !27
  %414 = icmp ne i32 %413, 0
  br i1 %414, label %415, label %422

415:                                              ; preds = %408
  %416 = load i64, ptr %5, align 8, !tbaa !5
  %417 = call ptr @tmalloc_large(ptr noundef @_gm_, i64 noundef %416)
  store ptr %417, ptr %4, align 8, !tbaa !18
  %418 = icmp ne ptr %417, null
  br i1 %418, label %419, label %422

419:                                              ; preds = %415
  %420 = load ptr, ptr %4, align 8, !tbaa !18
  %421 = load i64, ptr %5, align 8, !tbaa !5
  call void @do_check_malloced_chunk(ptr noundef @_gm_, ptr noundef %420, i64 noundef %421)
  br label %504

422:                                              ; preds = %415, %408
  br label %423

423:                                              ; preds = %422, %407
  br label %424

424:                                              ; preds = %423, %403
  %425 = load i64, ptr %5, align 8, !tbaa !5
  %426 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  %427 = icmp ule i64 %425, %426
  br i1 %427, label %428, label %473

428:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %429 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  %430 = load i64, ptr %5, align 8, !tbaa !5
  %431 = sub i64 %429, %430
  store i64 %431, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %432 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !26
  store ptr %432, ptr %27, align 8, !tbaa !18
  %433 = load i64, ptr %26, align 8, !tbaa !5
  %434 = icmp uge i64 %433, 32
  br i1 %434, label %435, label %454

435:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %436 = load ptr, ptr %27, align 8, !tbaa !18
  %437 = load i64, ptr %5, align 8, !tbaa !5
  %438 = getelementptr inbounds i8, ptr %436, i64 %437
  store ptr %438, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !26
  store ptr %438, ptr %28, align 8, !tbaa !18
  %439 = load i64, ptr %26, align 8, !tbaa !5
  store i64 %439, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  %440 = load i64, ptr %26, align 8, !tbaa !5
  %441 = or i64 %440, 1
  %442 = load ptr, ptr %28, align 8, !tbaa !18
  %443 = getelementptr inbounds %struct.malloc_chunk, ptr %442, i32 0, i32 1
  store i64 %441, ptr %443, align 8, !tbaa !21
  %444 = load i64, ptr %26, align 8, !tbaa !5
  %445 = load ptr, ptr %28, align 8, !tbaa !18
  %446 = load i64, ptr %26, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %445, i64 %446
  %448 = getelementptr inbounds %struct.malloc_chunk, ptr %447, i32 0, i32 0
  store i64 %444, ptr %448, align 8, !tbaa !25
  %449 = load i64, ptr %5, align 8, !tbaa !5
  %450 = or i64 %449, 1
  %451 = or i64 %450, 2
  %452 = load ptr, ptr %27, align 8, !tbaa !18
  %453 = getelementptr inbounds %struct.malloc_chunk, ptr %452, i32 0, i32 1
  store i64 %451, ptr %453, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %467

454:                                              ; preds = %428
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %455 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  store i64 %455, ptr %29, align 8, !tbaa !5
  store i64 0, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !24
  store ptr null, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !26
  %456 = load i64, ptr %29, align 8, !tbaa !5
  %457 = or i64 %456, 1
  %458 = or i64 %457, 2
  %459 = load ptr, ptr %27, align 8, !tbaa !18
  %460 = getelementptr inbounds %struct.malloc_chunk, ptr %459, i32 0, i32 1
  store i64 %458, ptr %460, align 8, !tbaa !21
  %461 = load ptr, ptr %27, align 8, !tbaa !18
  %462 = load i64, ptr %29, align 8, !tbaa !5
  %463 = getelementptr inbounds i8, ptr %461, i64 %462
  %464 = getelementptr inbounds %struct.malloc_chunk, ptr %463, i32 0, i32 1
  %465 = load i64, ptr %464, align 8, !tbaa !21
  %466 = or i64 %465, 1
  store i64 %466, ptr %464, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %467

467:                                              ; preds = %454, %435
  %468 = load ptr, ptr %27, align 8, !tbaa !18
  %469 = getelementptr inbounds i8, ptr %468, i64 16
  store ptr %469, ptr %4, align 8, !tbaa !18
  %470 = load ptr, ptr %4, align 8, !tbaa !18
  %471 = load i64, ptr %5, align 8, !tbaa !5
  call void @do_check_malloced_chunk(ptr noundef @_gm_, ptr noundef %470, i64 noundef %471)
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %472 = load i32, ptr %11, align 4
  switch i32 %472, label %511 [
    i32 2, label %504
  ]

473:                                              ; preds = %424
  %474 = load i64, ptr %5, align 8, !tbaa !5
  %475 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !28
  %476 = icmp ult i64 %474, %475
  br i1 %476, label %477, label %500

477:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %478 = load i64, ptr %5, align 8, !tbaa !5
  %479 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !28
  %480 = sub i64 %479, %478
  store i64 %480, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !28
  store i64 %480, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %481 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !29
  store ptr %481, ptr %31, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %482 = load ptr, ptr %31, align 8, !tbaa !18
  %483 = load i64, ptr %5, align 8, !tbaa !5
  %484 = getelementptr inbounds i8, ptr %482, i64 %483
  store ptr %484, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !29
  store ptr %484, ptr %32, align 8, !tbaa !18
  %485 = load i64, ptr %30, align 8, !tbaa !5
  %486 = or i64 %485, 1
  %487 = load ptr, ptr %32, align 8, !tbaa !18
  %488 = getelementptr inbounds %struct.malloc_chunk, ptr %487, i32 0, i32 1
  store i64 %486, ptr %488, align 8, !tbaa !21
  %489 = load i64, ptr %5, align 8, !tbaa !5
  %490 = or i64 %489, 1
  %491 = or i64 %490, 2
  %492 = load ptr, ptr %31, align 8, !tbaa !18
  %493 = getelementptr inbounds %struct.malloc_chunk, ptr %492, i32 0, i32 1
  store i64 %491, ptr %493, align 8, !tbaa !21
  %494 = load ptr, ptr %31, align 8, !tbaa !18
  %495 = getelementptr inbounds i8, ptr %494, i64 16
  store ptr %495, ptr %4, align 8, !tbaa !18
  %496 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !29
  call void @do_check_top_chunk(ptr noundef @_gm_, ptr noundef %496)
  %497 = load ptr, ptr %4, align 8, !tbaa !18
  %498 = load i64, ptr %5, align 8, !tbaa !5
  call void @do_check_malloced_chunk(ptr noundef @_gm_, ptr noundef %497, i64 noundef %498)
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  %499 = load i32, ptr %11, align 4
  switch i32 %499, label %511 [
    i32 2, label %504
  ]

500:                                              ; preds = %473
  br label %501

501:                                              ; preds = %500
  %502 = load i64, ptr %5, align 8, !tbaa !5
  %503 = call ptr @sys_alloc(ptr noundef @_gm_, i64 noundef %502)
  store ptr %503, ptr %4, align 8, !tbaa !18
  br label %504

504:                                              ; preds = %501, %477, %467, %419, %401
  %505 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 15), align 8, !tbaa !12
  %506 = and i32 %505, 2
  %507 = icmp ne i32 %506, 0
  br i1 %507, label %508, label %509

508:                                              ; preds = %504
  store atomic i32 0, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 16) release, align 4
  br label %509

509:                                              ; preds = %508, %504
  %510 = load ptr, ptr %4, align 8, !tbaa !18
  store ptr %510, ptr %2, align 8
  store i32 1, ptr %11, align 4
  br label %511

511:                                              ; preds = %509, %477, %467, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  br label %513

512:                                              ; preds = %51, %50, %47
  store ptr null, ptr %2, align 8
  br label %513

513:                                              ; preds = %512, %511
  %514 = load ptr, ptr %2, align 8
  ret ptr %514
}

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

; Function Attrs: nounwind uwtable
declare hidden i32 @spin_acquire_lock(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: noreturn nounwind
declare void @abort() #2

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

; 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 hidden void @do_check_malloced_chunk(ptr noundef, ptr noundef, i64 noundef) #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.cttz.i32(i32, i1 immarg) #4

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"malloc_params", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !11, i64 40}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 880}
!13 = !{!"malloc_state", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !7, i64 72, !7, i64 600, !6, i64 856, !6, i64 864, !6, i64 872, !11, i64 880, !11, i64 884, !15, i64 888, !14, i64 920, !6, i64 928}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"malloc_segment", !14, i64 0, !6, i64 8, !14, i64 16, !11, i64 24}
!16 = !{!11, !11, i64 0}
!17 = !{!13, !11, i64 0}
!18 = !{!14, !14, i64 0}
!19 = !{!20, !14, i64 16}
!20 = !{!"malloc_chunk", !6, i64 0, !6, i64 8, !14, i64 16, !14, i64 24}
!21 = !{!20, !6, i64 8}
!22 = !{!13, !14, i64 24}
!23 = !{!20, !14, i64 24}
!24 = !{!13, !6, i64 8}
!25 = !{!20, !6, i64 0}
!26 = !{!13, !14, i64 32}
!27 = !{!13, !11, i64 4}
!28 = !{!13, !6, i64 16}
!29 = !{!13, !14, i64 40}


; 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.malloc_params = type { i64, i64, i64, i64, i64, i32 }
%struct.malloc_state = type { i32, i32, i64, i64, ptr, ptr, ptr, i64, i64, i64, [66 x ptr], [32 x ptr], i64, i64, i64, i32, i32, %struct.malloc_segment, ptr, i64 }
%struct.malloc_segment = type { ptr, i64, ptr, i32 }

@mparams = external hidden local_unnamed_addr global %struct.malloc_params, align 8
@_gm_ = external hidden global %struct.malloc_state, align 8

; Function Attrs: nounwind uwtable
define dso_local ptr @dlmalloc(i64 noundef %0) local_unnamed_addr #0 {
  %2 = load i64, ptr @mparams, align 8, !tbaa !5
  %.not = icmp eq i64 %2, 0
  br i1 %.not, label %3, label %5

3:                                                ; preds = %1
  %4 = tail call i32 @init_mparams()
  br label %5

5:                                                ; preds = %3, %1
  %6 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 880), align 8, !tbaa !11
  %7 = and i32 %6, 2
  %.not178 = icmp eq i32 %7, 0
  br i1 %.not178, label %12, label %8

8:                                                ; preds = %5
  %9 = atomicrmw xchg ptr getelementptr inbounds (i8, ptr @_gm_, i64 884), i32 1 seq_cst, align 4
  %.not179 = icmp eq i32 %9, 0
  br i1 %.not179, label %12, label %10

10:                                               ; preds = %8
  %11 = tail call i32 @spin_acquire_lock(ptr noundef nonnull getelementptr inbounds (i8, ptr @_gm_, i64 884))
  %.not180 = icmp eq i32 %11, 0
  br i1 %.not180, label %12, label %201

12:                                               ; preds = %5, %8, %10
  %13 = icmp ult i64 %0, 233
  br i1 %13, label %14, label %153

14:                                               ; preds = %12
  %15 = icmp ult i64 %0, 23
  %16 = add nuw nsw i64 %0, 23
  %17 = and i64 %16, 496
  %18 = select i1 %15, i64 32, i64 %17
  %19 = lshr exact i64 %18, 3
  %20 = trunc nuw nsw i64 %19 to i32
  %21 = load i32, ptr @_gm_, align 8, !tbaa !15
  %22 = lshr i32 %21, %20
  %23 = and i32 %22, 3
  %.not183 = icmp eq i32 %23, 0
  br i1 %.not183, label %65, label %24

24:                                               ; preds = %14
  %25 = and i32 %22, 1
  %26 = or disjoint i32 %25, %20
  %27 = xor i32 %26, 1
  %28 = shl nuw nsw i32 %27, 1
  %29 = zext nneg i32 %28 to i64
  %30 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %29
  %31 = getelementptr inbounds i8, ptr %30, i64 16
  %32 = load ptr, ptr %31, align 8, !tbaa !16
  %33 = getelementptr inbounds i8, ptr %32, i64 8
  %34 = load i64, ptr %33, align 8, !tbaa !18
  %35 = and i64 %34, -8
  %36 = shl nuw nsw i32 %27, 3
  %37 = zext nneg i32 %36 to i64
  %38 = icmp eq i64 %35, %37
  br i1 %38, label %40, label %39

39:                                               ; preds = %24
  tail call void @abort() #3
  unreachable

40:                                               ; preds = %24
  %41 = getelementptr inbounds i8, ptr %32, i64 16
  %42 = load ptr, ptr %41, align 8, !tbaa !16
  %.not193 = icmp eq ptr %32, %30
  br i1 %.not193, label %43, label %44

43:                                               ; preds = %40
  tail call void @abort() #3
  unreachable

44:                                               ; preds = %40
  %.not194 = icmp eq ptr %32, %42
  br i1 %.not194, label %45, label %46

45:                                               ; preds = %44
  tail call void @abort() #3
  unreachable

46:                                               ; preds = %44
  %47 = icmp eq ptr %30, %42
  br i1 %47, label %48, label %52

48:                                               ; preds = %46
  %49 = shl nuw i32 1, %27
  %50 = xor i32 %49, -1
  %51 = and i32 %21, %50
  store i32 %51, ptr @_gm_, align 8, !tbaa !15
  br label %59

52:                                               ; preds = %46
  %53 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !19
  %.not195 = icmp ult ptr %42, %53
  br i1 %.not195, label %.critedge, label %54, !prof !20

54:                                               ; preds = %52
  %55 = getelementptr inbounds i8, ptr %42, i64 24
  %56 = load ptr, ptr %55, align 8, !tbaa !21
  %57 = icmp eq ptr %56, %32
  br i1 %57, label %58, label %.critedge, !prof !22

58:                                               ; preds = %54
  store ptr %30, ptr %55, align 8, !tbaa !21
  store ptr %42, ptr %31, align 8, !tbaa !16
  br label %59

.critedge:                                        ; preds = %52, %54
  tail call void @abort() #3
  unreachable

59:                                               ; preds = %58, %48
  %60 = or disjoint i64 %35, 3
  store i64 %60, ptr %33, align 8, !tbaa !18
  %61 = getelementptr inbounds i8, ptr %32, i64 %35
  %62 = getelementptr inbounds i8, ptr %61, i64 8
  %63 = load i64, ptr %62, align 8, !tbaa !18
  %64 = or i64 %63, 1
  store i64 %64, ptr %62, align 8, !tbaa !18
  tail call void @do_check_malloced_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %41, i64 noundef %18)
  br label %197

65:                                               ; preds = %14
  %66 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !23
  %67 = icmp ugt i64 %18, %66
  br i1 %67, label %68, label %.thread

68:                                               ; preds = %65
  %.not184 = icmp eq i32 %22, 0
  br i1 %.not184, label %148, label %69

69:                                               ; preds = %68
  %70 = shl i32 %22, %20
  %71 = shl nuw i32 2, %20
  %72 = sub i32 0, %71
  %73 = or i32 %71, %72
  %74 = and i32 %70, %73
  %75 = tail call range(i32 2, 33) i32 @llvm.cttz.i32(i32 %74, i1 true)
  %76 = shl nuw nsw i32 %75, 1
  %77 = zext nneg i32 %76 to i64
  %78 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %77
  %79 = getelementptr inbounds i8, ptr %78, i64 16
  %80 = load ptr, ptr %79, align 8, !tbaa !16
  %81 = getelementptr inbounds i8, ptr %80, i64 8
  %82 = load i64, ptr %81, align 8, !tbaa !18
  %83 = and i64 %82, -8
  %84 = shl nuw nsw i32 %75, 3
  %85 = zext nneg i32 %84 to i64
  %86 = icmp eq i64 %83, %85
  br i1 %86, label %88, label %87

87:                                               ; preds = %69
  tail call void @abort() #3
  unreachable

88:                                               ; preds = %69
  %89 = getelementptr inbounds i8, ptr %80, i64 16
  %90 = load ptr, ptr %89, align 8, !tbaa !16
  %.not187 = icmp eq ptr %80, %78
  br i1 %.not187, label %91, label %92

91:                                               ; preds = %88
  tail call void @abort() #3
  unreachable

92:                                               ; preds = %88
  %.not188 = icmp eq ptr %80, %90
  br i1 %.not188, label %93, label %94

93:                                               ; preds = %92
  tail call void @abort() #3
  unreachable

94:                                               ; preds = %92
  %95 = icmp eq ptr %78, %90
  br i1 %95, label %96, label %100

96:                                               ; preds = %94
  %97 = shl nuw i32 1, %75
  %98 = xor i32 %97, -1
  %99 = and i32 %21, %98
  store i32 %99, ptr @_gm_, align 8, !tbaa !15
  br label %107

100:                                              ; preds = %94
  %101 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !19
  %.not189 = icmp ult ptr %90, %101
  br i1 %.not189, label %.critedge199, label %102, !prof !20

102:                                              ; preds = %100
  %103 = getelementptr inbounds i8, ptr %90, i64 24
  %104 = load ptr, ptr %103, align 8, !tbaa !21
  %105 = icmp eq ptr %104, %80
  br i1 %105, label %106, label %.critedge199, !prof !22

106:                                              ; preds = %102
  store ptr %78, ptr %103, align 8, !tbaa !21
  store ptr %90, ptr %79, align 8, !tbaa !16
  br label %107

.critedge199:                                     ; preds = %100, %102
  tail call void @abort() #3
  unreachable

107:                                              ; preds = %106, %96
  %108 = phi i32 [ %21, %106 ], [ %99, %96 ]
  %109 = sub nsw i64 %83, %18
  %110 = icmp ult i64 %109, 32
  br i1 %110, label %111, label %117

111:                                              ; preds = %107
  %112 = or disjoint i64 %83, 3
  store i64 %112, ptr %81, align 8, !tbaa !18
  %113 = getelementptr inbounds i8, ptr %80, i64 %83
  %114 = getelementptr inbounds i8, ptr %113, i64 8
  %115 = load i64, ptr %114, align 8, !tbaa !18
  %116 = or i64 %115, 1
  store i64 %116, ptr %114, align 8, !tbaa !18
  br label %147

117:                                              ; preds = %107
  %118 = or disjoint i64 %18, 3
  store i64 %118, ptr %81, align 8, !tbaa !18
  %119 = getelementptr inbounds i8, ptr %80, i64 %18
  %120 = or disjoint i64 %109, 1
  %121 = getelementptr inbounds i8, ptr %119, i64 8
  store i64 %120, ptr %121, align 8, !tbaa !18
  %122 = getelementptr inbounds i8, ptr %80, i64 %83
  store i64 %109, ptr %122, align 8, !tbaa !24
  %123 = lshr i64 %66, 3
  %.not190 = icmp eq i64 %66, 0
  br i1 %.not190, label %146, label %124

124:                                              ; preds = %117
  %125 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !25
  %126 = shl nuw nsw i64 %123, 1
  %127 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %126
  %128 = icmp ugt i64 %66, 31
  br i1 %128, label %130, label %129

129:                                              ; preds = %124
  tail call void @abort() #3
  unreachable

130:                                              ; preds = %124
  %131 = trunc nuw nsw i64 %123 to i32
  %132 = shl nuw nsw i32 1, %131
  %133 = and i32 %108, %132
  %.not191 = icmp eq i32 %133, 0
  br i1 %.not191, label %134, label %136

134:                                              ; preds = %130
  %135 = or i32 %108, %132
  store i32 %135, ptr @_gm_, align 8, !tbaa !15
  br label %141

136:                                              ; preds = %130
  %137 = getelementptr inbounds i8, ptr %127, i64 16
  %138 = load ptr, ptr %137, align 8, !tbaa !16
  %139 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !19
  %.not192 = icmp ult ptr %138, %139
  br i1 %.not192, label %140, label %141, !prof !20

140:                                              ; preds = %136
  tail call void @abort() #3
  unreachable

141:                                              ; preds = %136, %134
  %.0155 = phi ptr [ %127, %134 ], [ %138, %136 ]
  %142 = getelementptr inbounds i8, ptr %127, i64 16
  store ptr %125, ptr %142, align 8, !tbaa !16
  %143 = getelementptr inbounds i8, ptr %.0155, i64 24
  store ptr %125, ptr %143, align 8, !tbaa !21
  %144 = getelementptr inbounds i8, ptr %125, i64 16
  store ptr %.0155, ptr %144, align 8, !tbaa !16
  %145 = getelementptr inbounds i8, ptr %125, i64 24
  store ptr %127, ptr %145, align 8, !tbaa !21
  br label %146

146:                                              ; preds = %141, %117
  store i64 %109, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !23
  store ptr %119, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !25
  br label %147

147:                                              ; preds = %146, %111
  tail call void @do_check_malloced_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %89, i64 noundef %18)
  br label %197

148:                                              ; preds = %68
  %149 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 4), align 4, !tbaa !26
  %.not185 = icmp eq i32 %149, 0
  br i1 %.not185, label %.thread, label %150

150:                                              ; preds = %148
  %151 = tail call ptr @tmalloc_small(ptr noundef nonnull @_gm_, i64 noundef %18)
  %.not186 = icmp eq ptr %151, null
  br i1 %.not186, label %.thread, label %152

152:                                              ; preds = %150
  tail call void @do_check_malloced_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %151, i64 noundef %18)
  br label %197

153:                                              ; preds = %12
  %154 = icmp ugt i64 %0, -129
  br i1 %154, label %.thread, label %155

155:                                              ; preds = %153
  %156 = add nuw i64 %0, 23
  %157 = and i64 %156, -16
  %158 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 4), align 4, !tbaa !26
  %.not181 = icmp eq i32 %158, 0
  br i1 %.not181, label %.thread, label %159

159:                                              ; preds = %155
  %160 = tail call ptr @tmalloc_large(ptr noundef nonnull @_gm_, i64 noundef %157)
  %.not182 = icmp eq ptr %160, null
  br i1 %.not182, label %.thread, label %161

161:                                              ; preds = %159
  tail call void @do_check_malloced_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %160, i64 noundef %157)
  br label %197

.thread:                                          ; preds = %150, %148, %65, %153, %159, %155
  %.0153 = phi i64 [ %157, %159 ], [ %157, %155 ], [ -1, %153 ], [ %18, %65 ], [ %18, %148 ], [ %18, %150 ]
  %162 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !23
  %.not196 = icmp ugt i64 %.0153, %162
  br i1 %.not196, label %183, label %163

163:                                              ; preds = %.thread
  %164 = sub i64 %162, %.0153
  %165 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !25
  %166 = icmp ugt i64 %164, 31
  br i1 %166, label %167, label %174

167:                                              ; preds = %163
  %168 = getelementptr inbounds i8, ptr %165, i64 %.0153
  %169 = or i64 %164, 1
  %170 = getelementptr inbounds i8, ptr %168, i64 8
  store i64 %169, ptr %170, align 8, !tbaa !18
  %171 = getelementptr inbounds i8, ptr %165, i64 %162
  store i64 %164, ptr %171, align 8, !tbaa !24
  %172 = or i64 %.0153, 3
  %173 = getelementptr inbounds i8, ptr %165, i64 8
  store i64 %172, ptr %173, align 8, !tbaa !18
  br label %181

174:                                              ; preds = %163
  %175 = or i64 %162, 3
  %176 = getelementptr inbounds i8, ptr %165, i64 8
  store i64 %175, ptr %176, align 8, !tbaa !18
  %177 = getelementptr inbounds i8, ptr %165, i64 %162
  %178 = getelementptr inbounds i8, ptr %177, i64 8
  %179 = load i64, ptr %178, align 8, !tbaa !18
  %180 = or i64 %179, 1
  store i64 %180, ptr %178, align 8, !tbaa !18
  br label %181

181:                                              ; preds = %174, %167
  %.sink204 = phi ptr [ %168, %167 ], [ null, %174 ]
  %.sink = phi i64 [ %164, %167 ], [ 0, %174 ]
  store ptr %.sink204, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8
  store i64 %.sink, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8
  %182 = getelementptr inbounds i8, ptr %165, i64 16
  tail call void @do_check_malloced_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %182, i64 noundef %.0153)
  br label %197

183:                                              ; preds = %.thread
  %184 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 16), align 8, !tbaa !27
  %185 = icmp ult i64 %.0153, %184
  br i1 %185, label %186, label %195

186:                                              ; preds = %183
  %187 = sub i64 %184, %.0153
  store i64 %187, ptr getelementptr inbounds (i8, ptr @_gm_, i64 16), align 8, !tbaa !27
  %188 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 40), align 8, !tbaa !28
  %189 = getelementptr inbounds i8, ptr %188, i64 %.0153
  store ptr %189, ptr getelementptr inbounds (i8, ptr @_gm_, i64 40), align 8, !tbaa !28
  %190 = or i64 %187, 1
  %191 = getelementptr inbounds i8, ptr %189, i64 8
  store i64 %190, ptr %191, align 8, !tbaa !18
  %192 = or i64 %.0153, 3
  %193 = getelementptr inbounds i8, ptr %188, i64 8
  store i64 %192, ptr %193, align 8, !tbaa !18
  %194 = getelementptr inbounds i8, ptr %188, i64 16
  tail call void @do_check_top_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %189)
  tail call void @do_check_malloced_chunk(ptr noundef nonnull @_gm_, ptr noundef nonnull %194, i64 noundef %.0153)
  br label %197

195:                                              ; preds = %183
  %196 = tail call ptr @sys_alloc(ptr noundef nonnull @_gm_, i64 noundef %.0153)
  br label %197

197:                                              ; preds = %59, %147, %152, %186, %181, %195, %161
  %.2 = phi ptr [ %182, %181 ], [ %194, %186 ], [ %196, %195 ], [ %160, %161 ], [ %41, %59 ], [ %89, %147 ], [ %151, %152 ]
  %198 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 880), align 8, !tbaa !11
  %199 = and i32 %198, 2
  %.not197 = icmp eq i32 %199, 0
  br i1 %.not197, label %201, label %200

200:                                              ; preds = %197
  store atomic i32 0, ptr getelementptr inbounds (i8, ptr @_gm_, i64 884) release, align 4
  br label %201

201:                                              ; preds = %10, %200, %197
  %.1 = phi ptr [ %.2, %197 ], [ %.2, %200 ], [ null, %10 ]
  ret ptr %.1
}

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

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

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

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.cttz.i32(i32, i1 immarg) #2

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"malloc_params", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !10, i64 40}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!12, !10, i64 880}
!12 = !{!"malloc_state", !10, i64 0, !10, i64 4, !7, i64 8, !7, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !8, i64 72, !8, i64 600, !7, i64 856, !7, i64 864, !7, i64 872, !10, i64 880, !10, i64 884, !14, i64 888, !13, i64 920, !7, i64 928}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"malloc_segment", !13, i64 0, !7, i64 8, !13, i64 16, !10, i64 24}
!15 = !{!12, !10, i64 0}
!16 = !{!17, !13, i64 16}
!17 = !{!"malloc_chunk", !7, i64 0, !7, i64 8, !13, i64 16, !13, i64 24}
!18 = !{!17, !7, i64 8}
!19 = !{!12, !13, i64 24}
!20 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!21 = !{!17, !13, i64 24}
!22 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!23 = !{!12, !7, i64 8}
!24 = !{!17, !7, i64 0}
!25 = !{!12, !13, i64 32}
!26 = !{!12, !10, i64 4}
!27 = !{!12, !7, i64 16}
!28 = !{!12, !13, i64 40}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LowerExpectIntrinsicPass,MergedLoadStoreMotionPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass