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

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

@_gm_ = external hidden global %struct.malloc_state, align 8
@.str = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [100 x i8], align 1
@__PRETTY_FUNCTION__.malloc = external hidden unnamed_addr constant [21 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nounwind allocsize(0) uwtable
define dso_local noalias ptr @malloc(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
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %33 = load i64, ptr %3, align 8, !tbaa !5
  %34 = icmp ule i64 %33, 232
  br i1 %34, label %35, label %388

35:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  %36 = load i64, ptr %3, align 8, !tbaa !5
  %37 = icmp ult i64 %36, 23
  br i1 %37, label %38, label %39

38:                                               ; preds = %35
  br label %44

39:                                               ; preds = %35
  %40 = load i64, ptr %3, align 8, !tbaa !5
  %41 = add i64 %40, 8
  %42 = add i64 %41, 15
  %43 = and i64 %42, -16
  br label %44

44:                                               ; preds = %39, %38
  %45 = phi i64 [ 32, %38 ], [ %43, %39 ]
  store i64 %45, ptr %5, align 8, !tbaa !5
  %46 = load i64, ptr %5, align 8, !tbaa !5
  %47 = lshr i64 %46, 3
  %48 = trunc i64 %47 to i32
  store i32 %48, ptr %6, align 4, !tbaa !9
  %49 = load i32, ptr @_gm_, align 8, !tbaa !11
  %50 = load i32, ptr %6, align 4, !tbaa !9
  %51 = lshr i32 %49, %50
  store i32 %51, ptr %7, align 4, !tbaa !9
  %52 = load i32, ptr %7, align 4, !tbaa !9
  %53 = and i32 %52, 3
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %55, label %157

55:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %56 = load i32, ptr %7, align 4, !tbaa !9
  %57 = xor i32 %56, -1
  %58 = and i32 %57, 1
  %59 = load i32, ptr %6, align 4, !tbaa !9
  %60 = add i32 %59, %58
  store i32 %60, ptr %6, align 4, !tbaa !9
  %61 = load i32, ptr %6, align 4, !tbaa !9
  %62 = shl i32 %61, 1
  %63 = zext i32 %62 to i64
  %64 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %63
  store ptr %64, ptr %8, align 8, !tbaa !15
  %65 = load ptr, ptr %8, align 8, !tbaa !15
  %66 = getelementptr inbounds %struct.malloc_chunk, ptr %65, i32 0, i32 2
  %67 = load ptr, ptr %66, align 8, !tbaa !16
  store ptr %67, ptr %9, align 8, !tbaa !15
  %68 = load ptr, ptr %9, align 8, !tbaa !15
  %69 = getelementptr inbounds %struct.malloc_chunk, ptr %68, i32 0, i32 1
  %70 = load i64, ptr %69, align 8, !tbaa !18
  %71 = and i64 %70, -8
  %72 = load i32, ptr %6, align 4, !tbaa !9
  %73 = shl i32 %72, 3
  %74 = zext i32 %73 to i64
  %75 = icmp eq i64 %71, %74
  br i1 %75, label %76, label %77

76:                                               ; preds = %55
  br label %78

77:                                               ; preds = %55
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 4582, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

78:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %79 = load ptr, ptr %9, align 8, !tbaa !15
  %80 = getelementptr inbounds %struct.malloc_chunk, ptr %79, i32 0, i32 2
  %81 = load ptr, ptr %80, align 8, !tbaa !16
  store ptr %81, ptr %10, align 8, !tbaa !15
  %82 = load ptr, ptr %9, align 8, !tbaa !15
  %83 = load ptr, ptr %8, align 8, !tbaa !15
  %84 = icmp ne ptr %82, %83
  br i1 %84, label %85, label %86

85:                                               ; preds = %78
  br label %87

86:                                               ; preds = %78
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 4583, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

87:                                               ; preds = %85
  %88 = load ptr, ptr %9, align 8, !tbaa !15
  %89 = load ptr, ptr %10, align 8, !tbaa !15
  %90 = icmp ne ptr %88, %89
  br i1 %90, label %91, label %92

91:                                               ; preds = %87
  br label %93

92:                                               ; preds = %87
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 4583, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

93:                                               ; preds = %91
  %94 = load ptr, ptr %9, align 8, !tbaa !15
  %95 = getelementptr inbounds %struct.malloc_chunk, ptr %94, i32 0, i32 1
  %96 = load i64, ptr %95, align 8, !tbaa !18
  %97 = and i64 %96, -8
  %98 = load i32, ptr %6, align 4, !tbaa !9
  %99 = shl i32 %98, 3
  %100 = zext i32 %99 to i64
  %101 = icmp eq i64 %97, %100
  br i1 %101, label %102, label %103

102:                                              ; preds = %93
  br label %104

103:                                              ; preds = %93
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 4583, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

104:                                              ; preds = %102
  %105 = load ptr, ptr %8, align 8, !tbaa !15
  %106 = load ptr, ptr %10, align 8, !tbaa !15
  %107 = icmp eq ptr %105, %106
  br i1 %107, label %108, label %114

108:                                              ; preds = %104
  %109 = load i32, ptr %6, align 4, !tbaa !9
  %110 = shl i32 1, %109
  %111 = xor i32 %110, -1
  %112 = load i32, ptr @_gm_, align 8, !tbaa !11
  %113 = and i32 %112, %111
  store i32 %113, ptr @_gm_, align 8, !tbaa !11
  br label %139

114:                                              ; preds = %104
  %115 = load ptr, ptr %10, align 8, !tbaa !15
  %116 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !19
  %117 = icmp uge ptr %115, %116
  br i1 %117, label %118, label %124

118:                                              ; preds = %114
  %119 = load ptr, ptr %10, align 8, !tbaa !15
  %120 = getelementptr inbounds %struct.malloc_chunk, ptr %119, i32 0, i32 3
  %121 = load ptr, ptr %120, align 8, !tbaa !20
  %122 = load ptr, ptr %9, align 8, !tbaa !15
  %123 = icmp eq ptr %121, %122
  br label %124

124:                                              ; preds = %118, %114
  %125 = phi i1 [ false, %114 ], [ %123, %118 ]
  %126 = zext i1 %125 to i32
  %127 = sext i32 %126 to i64
  %128 = call i64 @llvm.expect.i64(i64 %127, i64 1)
  %129 = icmp ne i64 %128, 0
  br i1 %129, label %130, label %137

130:                                              ; preds = %124
  %131 = load ptr, ptr %8, align 8, !tbaa !15
  %132 = load ptr, ptr %10, align 8, !tbaa !15
  %133 = getelementptr inbounds %struct.malloc_chunk, ptr %132, i32 0, i32 3
  store ptr %131, ptr %133, align 8, !tbaa !20
  %134 = load ptr, ptr %10, align 8, !tbaa !15
  %135 = load ptr, ptr %8, align 8, !tbaa !15
  %136 = getelementptr inbounds %struct.malloc_chunk, ptr %135, i32 0, i32 2
  store ptr %134, ptr %136, align 8, !tbaa !16
  br label %138

137:                                              ; preds = %124
  call void @abort() #7
  unreachable

138:                                              ; preds = %130
  br label %139

139:                                              ; preds = %138, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  %140 = load i32, ptr %6, align 4, !tbaa !9
  %141 = shl i32 %140, 3
  %142 = zext i32 %141 to i64
  %143 = or i64 %142, 1
  %144 = or i64 %143, 2
  %145 = load ptr, ptr %9, align 8, !tbaa !15
  %146 = getelementptr inbounds %struct.malloc_chunk, ptr %145, i32 0, i32 1
  store i64 %144, ptr %146, align 8, !tbaa !18
  %147 = load ptr, ptr %9, align 8, !tbaa !15
  %148 = load i32, ptr %6, align 4, !tbaa !9
  %149 = shl i32 %148, 3
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds i8, ptr %147, i64 %150
  %152 = getelementptr inbounds %struct.malloc_chunk, ptr %151, i32 0, i32 1
  %153 = load i64, ptr %152, align 8, !tbaa !18
  %154 = or i64 %153, 1
  store i64 %154, ptr %152, align 8, !tbaa !18
  %155 = load ptr, ptr %9, align 8, !tbaa !15
  %156 = getelementptr inbounds i8, ptr %155, i64 16
  store ptr %156, ptr %4, align 8, !tbaa !15
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  br label %385

157:                                              ; preds = %44
  %158 = load i64, ptr %5, align 8, !tbaa !5
  %159 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %160 = icmp ugt i64 %158, %159
  br i1 %160, label %161, label %383

161:                                              ; preds = %157
  %162 = load i32, ptr %7, align 4, !tbaa !9
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %373

164:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %165 = load i32, ptr %7, align 4, !tbaa !9
  %166 = load i32, ptr %6, align 4, !tbaa !9
  %167 = shl i32 %165, %166
  %168 = load i32, ptr %6, align 4, !tbaa !9
  %169 = shl i32 1, %168
  %170 = shl i32 %169, 1
  %171 = load i32, ptr %6, align 4, !tbaa !9
  %172 = shl i32 1, %171
  %173 = shl i32 %172, 1
  %174 = sub i32 0, %173
  %175 = or i32 %170, %174
  %176 = and i32 %167, %175
  store i32 %176, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %177 = load i32, ptr %17, align 4, !tbaa !9
  %178 = load i32, ptr %17, align 4, !tbaa !9
  %179 = sub i32 0, %178
  %180 = and i32 %177, %179
  store i32 %180, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %181 = load i32, ptr %18, align 4, !tbaa !9
  %182 = call i32 @llvm.cttz.i32(i32 %181, i1 true)
  store i32 %182, ptr %19, align 4, !tbaa !9
  %183 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %183, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  %184 = load i32, ptr %16, align 4, !tbaa !9
  %185 = shl i32 %184, 1
  %186 = zext i32 %185 to i64
  %187 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %186
  store ptr %187, ptr %12, align 8, !tbaa !15
  %188 = load ptr, ptr %12, align 8, !tbaa !15
  %189 = getelementptr inbounds %struct.malloc_chunk, ptr %188, i32 0, i32 2
  %190 = load ptr, ptr %189, align 8, !tbaa !16
  store ptr %190, ptr %13, align 8, !tbaa !15
  %191 = load ptr, ptr %13, align 8, !tbaa !15
  %192 = getelementptr inbounds %struct.malloc_chunk, ptr %191, i32 0, i32 1
  %193 = load i64, ptr %192, align 8, !tbaa !18
  %194 = and i64 %193, -8
  %195 = load i32, ptr %16, align 4, !tbaa !9
  %196 = shl i32 %195, 3
  %197 = zext i32 %196 to i64
  %198 = icmp eq i64 %194, %197
  br i1 %198, label %199, label %200

199:                                              ; preds = %164
  br label %201

200:                                              ; preds = %164
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 4600, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

201:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %202 = load ptr, ptr %13, align 8, !tbaa !15
  %203 = getelementptr inbounds %struct.malloc_chunk, ptr %202, i32 0, i32 2
  %204 = load ptr, ptr %203, align 8, !tbaa !16
  store ptr %204, ptr %20, align 8, !tbaa !15
  %205 = load ptr, ptr %13, align 8, !tbaa !15
  %206 = load ptr, ptr %12, align 8, !tbaa !15
  %207 = icmp ne ptr %205, %206
  br i1 %207, label %208, label %209

208:                                              ; preds = %201
  br label %210

209:                                              ; preds = %201
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 4601, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

210:                                              ; preds = %208
  %211 = load ptr, ptr %13, align 8, !tbaa !15
  %212 = load ptr, ptr %20, align 8, !tbaa !15
  %213 = icmp ne ptr %211, %212
  br i1 %213, label %214, label %215

214:                                              ; preds = %210
  br label %216

215:                                              ; preds = %210
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 4601, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

216:                                              ; preds = %214
  %217 = load ptr, ptr %13, align 8, !tbaa !15
  %218 = getelementptr inbounds %struct.malloc_chunk, ptr %217, i32 0, i32 1
  %219 = load i64, ptr %218, align 8, !tbaa !18
  %220 = and i64 %219, -8
  %221 = load i32, ptr %16, align 4, !tbaa !9
  %222 = shl i32 %221, 3
  %223 = zext i32 %222 to i64
  %224 = icmp eq i64 %220, %223
  br i1 %224, label %225, label %226

225:                                              ; preds = %216
  br label %227

226:                                              ; preds = %216
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 4601, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

227:                                              ; preds = %225
  %228 = load ptr, ptr %12, align 8, !tbaa !15
  %229 = load ptr, ptr %20, align 8, !tbaa !15
  %230 = icmp eq ptr %228, %229
  br i1 %230, label %231, label %237

231:                                              ; preds = %227
  %232 = load i32, ptr %16, align 4, !tbaa !9
  %233 = shl i32 1, %232
  %234 = xor i32 %233, -1
  %235 = load i32, ptr @_gm_, align 8, !tbaa !11
  %236 = and i32 %235, %234
  store i32 %236, ptr @_gm_, align 8, !tbaa !11
  br label %262

237:                                              ; preds = %227
  %238 = load ptr, ptr %20, align 8, !tbaa !15
  %239 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !19
  %240 = icmp uge ptr %238, %239
  br i1 %240, label %241, label %247

241:                                              ; preds = %237
  %242 = load ptr, ptr %20, align 8, !tbaa !15
  %243 = getelementptr inbounds %struct.malloc_chunk, ptr %242, i32 0, i32 3
  %244 = load ptr, ptr %243, align 8, !tbaa !20
  %245 = load ptr, ptr %13, align 8, !tbaa !15
  %246 = icmp eq ptr %244, %245
  br label %247

247:                                              ; preds = %241, %237
  %248 = phi i1 [ false, %237 ], [ %246, %241 ]
  %249 = zext i1 %248 to i32
  %250 = sext i32 %249 to i64
  %251 = call i64 @llvm.expect.i64(i64 %250, i64 1)
  %252 = icmp ne i64 %251, 0
  br i1 %252, label %253, label %260

253:                                              ; preds = %247
  %254 = load ptr, ptr %12, align 8, !tbaa !15
  %255 = load ptr, ptr %20, align 8, !tbaa !15
  %256 = getelementptr inbounds %struct.malloc_chunk, ptr %255, i32 0, i32 3
  store ptr %254, ptr %256, align 8, !tbaa !20
  %257 = load ptr, ptr %20, align 8, !tbaa !15
  %258 = load ptr, ptr %12, align 8, !tbaa !15
  %259 = getelementptr inbounds %struct.malloc_chunk, ptr %258, i32 0, i32 2
  store ptr %257, ptr %259, align 8, !tbaa !16
  br label %261

260:                                              ; preds = %247
  call void @abort() #7
  unreachable

261:                                              ; preds = %253
  br label %262

262:                                              ; preds = %261, %231
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  %263 = load i32, ptr %16, align 4, !tbaa !9
  %264 = shl i32 %263, 3
  %265 = zext i32 %264 to i64
  %266 = load i64, ptr %5, align 8, !tbaa !5
  %267 = sub i64 %265, %266
  store i64 %267, ptr %15, align 8, !tbaa !5
  %268 = load i64, ptr %15, align 8, !tbaa !5
  %269 = icmp ult i64 %268, 32
  br i1 %269, label %270, label %286

270:                                              ; preds = %262
  %271 = load i32, ptr %16, align 4, !tbaa !9
  %272 = shl i32 %271, 3
  %273 = zext i32 %272 to i64
  %274 = or i64 %273, 1
  %275 = or i64 %274, 2
  %276 = load ptr, ptr %13, align 8, !tbaa !15
  %277 = getelementptr inbounds %struct.malloc_chunk, ptr %276, i32 0, i32 1
  store i64 %275, ptr %277, align 8, !tbaa !18
  %278 = load ptr, ptr %13, align 8, !tbaa !15
  %279 = load i32, ptr %16, align 4, !tbaa !9
  %280 = shl i32 %279, 3
  %281 = zext i32 %280 to i64
  %282 = getelementptr inbounds i8, ptr %278, i64 %281
  %283 = getelementptr inbounds %struct.malloc_chunk, ptr %282, i32 0, i32 1
  %284 = load i64, ptr %283, align 8, !tbaa !18
  %285 = or i64 %284, 1
  store i64 %285, ptr %283, align 8, !tbaa !18
  br label %370

286:                                              ; preds = %262
  %287 = load i64, ptr %5, align 8, !tbaa !5
  %288 = or i64 %287, 1
  %289 = or i64 %288, 2
  %290 = load ptr, ptr %13, align 8, !tbaa !15
  %291 = getelementptr inbounds %struct.malloc_chunk, ptr %290, i32 0, i32 1
  store i64 %289, ptr %291, align 8, !tbaa !18
  %292 = load ptr, ptr %13, align 8, !tbaa !15
  %293 = load i64, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds i8, ptr %292, i64 %293
  store ptr %294, ptr %14, align 8, !tbaa !15
  %295 = load i64, ptr %15, align 8, !tbaa !5
  %296 = or i64 %295, 1
  %297 = load ptr, ptr %14, align 8, !tbaa !15
  %298 = getelementptr inbounds %struct.malloc_chunk, ptr %297, i32 0, i32 1
  store i64 %296, ptr %298, align 8, !tbaa !18
  %299 = load i64, ptr %15, align 8, !tbaa !5
  %300 = load ptr, ptr %14, align 8, !tbaa !15
  %301 = load i64, ptr %15, align 8, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %300, i64 %301
  %303 = getelementptr inbounds %struct.malloc_chunk, ptr %302, i32 0, i32 0
  store i64 %299, ptr %303, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %304 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  store i64 %304, ptr %21, align 8, !tbaa !5
  %305 = load i64, ptr %21, align 8, !tbaa !5
  %306 = lshr i64 %305, 3
  %307 = icmp ult i64 %306, 32
  br i1 %307, label %308, label %309

308:                                              ; preds = %286
  br label %310

309:                                              ; preds = %286
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 4610, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

310:                                              ; preds = %308
  %311 = load i64, ptr %21, align 8, !tbaa !5
  %312 = icmp ne i64 %311, 0
  br i1 %312, label %313, label %367

313:                                              ; preds = %310
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %314 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  store ptr %314, ptr %22, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %315 = load i64, ptr %21, align 8, !tbaa !5
  %316 = lshr i64 %315, 3
  %317 = trunc i64 %316 to i32
  store i32 %317, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %318 = load i32, ptr %23, align 4, !tbaa !9
  %319 = shl i32 %318, 1
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %320
  store ptr %321, ptr %24, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %322 = load ptr, ptr %24, align 8, !tbaa !15
  store ptr %322, ptr %25, align 8, !tbaa !15
  %323 = load i64, ptr %21, align 8, !tbaa !5
  %324 = icmp uge i64 %323, 32
  br i1 %324, label %325, label %326

325:                                              ; preds = %313
  br label %327

326:                                              ; preds = %313
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 4610, ptr noundef @__PRETTY_FUNCTION__.malloc) #7
  unreachable

327:                                              ; preds = %325
  %328 = load i32, ptr @_gm_, align 8, !tbaa !11
  %329 = load i32, ptr %23, align 4, !tbaa !9
  %330 = shl i32 1, %329
  %331 = and i32 %328, %330
  %332 = icmp ne i32 %331, 0
  br i1 %332, label %338, label %333

333:                                              ; preds = %327
  %334 = load i32, ptr %23, align 4, !tbaa !9
  %335 = shl i32 1, %334
  %336 = load i32, ptr @_gm_, align 8, !tbaa !11
  %337 = or i32 %336, %335
  store i32 %337, ptr @_gm_, align 8, !tbaa !11
  br label %354

338:                                              ; preds = %327
  %339 = load ptr, ptr %24, align 8, !tbaa !15
  %340 = getelementptr inbounds %struct.malloc_chunk, ptr %339, i32 0, i32 2
  %341 = load ptr, ptr %340, align 8, !tbaa !16
  %342 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !19
  %343 = icmp uge ptr %341, %342
  %344 = zext i1 %343 to i32
  %345 = sext i32 %344 to i64
  %346 = call i64 @llvm.expect.i64(i64 %345, i64 1)
  %347 = icmp ne i64 %346, 0
  br i1 %347, label %348, label %352

348:                                              ; preds = %338
  %349 = load ptr, ptr %24, align 8, !tbaa !15
  %350 = getelementptr inbounds %struct.malloc_chunk, ptr %349, i32 0, i32 2
  %351 = load ptr, ptr %350, align 8, !tbaa !16
  store ptr %351, ptr %25, align 8, !tbaa !15
  br label %353

352:                                              ; preds = %338
  call void @abort() #7
  unreachable

353:                                              ; preds = %348
  br label %354

354:                                              ; preds = %353, %333
  %355 = load ptr, ptr %22, align 8, !tbaa !15
  %356 = load ptr, ptr %24, align 8, !tbaa !15
  %357 = getelementptr inbounds %struct.malloc_chunk, ptr %356, i32 0, i32 2
  store ptr %355, ptr %357, align 8, !tbaa !16
  %358 = load ptr, ptr %22, align 8, !tbaa !15
  %359 = load ptr, ptr %25, align 8, !tbaa !15
  %360 = getelementptr inbounds %struct.malloc_chunk, ptr %359, i32 0, i32 3
  store ptr %358, ptr %360, align 8, !tbaa !20
  %361 = load ptr, ptr %25, align 8, !tbaa !15
  %362 = load ptr, ptr %22, align 8, !tbaa !15
  %363 = getelementptr inbounds %struct.malloc_chunk, ptr %362, i32 0, i32 2
  store ptr %361, ptr %363, align 8, !tbaa !16
  %364 = load ptr, ptr %24, align 8, !tbaa !15
  %365 = load ptr, ptr %22, align 8, !tbaa !15
  %366 = getelementptr inbounds %struct.malloc_chunk, ptr %365, i32 0, i32 3
  store ptr %364, ptr %366, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %367

367:                                              ; preds = %354, %310
  %368 = load i64, ptr %15, align 8, !tbaa !5
  store i64 %368, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %369 = load ptr, ptr %14, align 8, !tbaa !15
  store ptr %369, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %370

370:                                              ; preds = %367, %270
  %371 = load ptr, ptr %13, align 8, !tbaa !15
  %372 = getelementptr inbounds i8, ptr %371, i64 16
  store ptr %372, ptr %4, align 8, !tbaa !15
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %385

373:                                              ; preds = %161
  %374 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 1), align 4, !tbaa !24
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %381

376:                                              ; preds = %373
  %377 = load i64, ptr %5, align 8, !tbaa !5
  %378 = call ptr @tmalloc_small(ptr noundef @_gm_, i64 noundef %377)
  store ptr %378, ptr %4, align 8, !tbaa !15
  %379 = icmp ne ptr %378, null
  br i1 %379, label %380, label %381

380:                                              ; preds = %376
  store i32 2, ptr %11, align 4
  br label %385

381:                                              ; preds = %376, %373
  br label %382

382:                                              ; preds = %381
  br label %383

383:                                              ; preds = %382, %157
  br label %384

384:                                              ; preds = %383
  store i32 0, ptr %11, align 4
  br label %385

385:                                              ; preds = %384, %380, %370, %139
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  %386 = load i32, ptr %11, align 4
  switch i32 %386, label %483 [
    i32 0, label %387
    i32 2, label %481
  ]

387:                                              ; preds = %385
  br label %406

388:                                              ; preds = %1
  %389 = load i64, ptr %3, align 8, !tbaa !5
  %390 = icmp uge i64 %389, -128
  br i1 %390, label %391, label %392

391:                                              ; preds = %388
  store i64 -1, ptr %5, align 8, !tbaa !5
  br label %405

392:                                              ; preds = %388
  %393 = load i64, ptr %3, align 8, !tbaa !5
  %394 = add i64 %393, 8
  %395 = add i64 %394, 15
  %396 = and i64 %395, -16
  store i64 %396, ptr %5, align 8, !tbaa !5
  %397 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 1), align 4, !tbaa !24
  %398 = icmp ne i32 %397, 0
  br i1 %398, label %399, label %404

399:                                              ; preds = %392
  %400 = load i64, ptr %5, align 8, !tbaa !5
  %401 = call ptr @tmalloc_large(ptr noundef @_gm_, i64 noundef %400)
  store ptr %401, ptr %4, align 8, !tbaa !15
  %402 = icmp ne ptr %401, null
  br i1 %402, label %403, label %404

403:                                              ; preds = %399
  br label %481

404:                                              ; preds = %399, %392
  br label %405

405:                                              ; preds = %404, %391
  br label %406

406:                                              ; preds = %405, %387
  %407 = load i64, ptr %5, align 8, !tbaa !5
  %408 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %409 = icmp ule i64 %407, %408
  br i1 %409, label %410, label %453

410:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %411 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %412 = load i64, ptr %5, align 8, !tbaa !5
  %413 = sub i64 %411, %412
  store i64 %413, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %414 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  store ptr %414, ptr %27, align 8, !tbaa !15
  %415 = load i64, ptr %26, align 8, !tbaa !5
  %416 = icmp uge i64 %415, 32
  br i1 %416, label %417, label %436

417:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %418 = load ptr, ptr %27, align 8, !tbaa !15
  %419 = load i64, ptr %5, align 8, !tbaa !5
  %420 = getelementptr inbounds i8, ptr %418, i64 %419
  store ptr %420, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  store ptr %420, ptr %28, align 8, !tbaa !15
  %421 = load i64, ptr %26, align 8, !tbaa !5
  store i64 %421, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %422 = load i64, ptr %26, align 8, !tbaa !5
  %423 = or i64 %422, 1
  %424 = load ptr, ptr %28, align 8, !tbaa !15
  %425 = getelementptr inbounds %struct.malloc_chunk, ptr %424, i32 0, i32 1
  store i64 %423, ptr %425, align 8, !tbaa !18
  %426 = load i64, ptr %26, align 8, !tbaa !5
  %427 = load ptr, ptr %28, align 8, !tbaa !15
  %428 = load i64, ptr %26, align 8, !tbaa !5
  %429 = getelementptr inbounds i8, ptr %427, i64 %428
  %430 = getelementptr inbounds %struct.malloc_chunk, ptr %429, i32 0, i32 0
  store i64 %426, ptr %430, align 8, !tbaa !22
  %431 = load i64, ptr %5, align 8, !tbaa !5
  %432 = or i64 %431, 1
  %433 = or i64 %432, 2
  %434 = load ptr, ptr %27, align 8, !tbaa !15
  %435 = getelementptr inbounds %struct.malloc_chunk, ptr %434, i32 0, i32 1
  store i64 %433, ptr %435, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %449

436:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %437 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  store i64 %437, ptr %29, align 8, !tbaa !5
  store i64 0, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  store ptr null, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  %438 = load i64, ptr %29, align 8, !tbaa !5
  %439 = or i64 %438, 1
  %440 = or i64 %439, 2
  %441 = load ptr, ptr %27, align 8, !tbaa !15
  %442 = getelementptr inbounds %struct.malloc_chunk, ptr %441, i32 0, i32 1
  store i64 %440, ptr %442, align 8, !tbaa !18
  %443 = load ptr, ptr %27, align 8, !tbaa !15
  %444 = load i64, ptr %29, align 8, !tbaa !5
  %445 = getelementptr inbounds i8, ptr %443, i64 %444
  %446 = getelementptr inbounds %struct.malloc_chunk, ptr %445, i32 0, i32 1
  %447 = load i64, ptr %446, align 8, !tbaa !18
  %448 = or i64 %447, 1
  store i64 %448, ptr %446, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %449

449:                                              ; preds = %436, %417
  %450 = load ptr, ptr %27, align 8, !tbaa !15
  %451 = getelementptr inbounds i8, ptr %450, i64 16
  store ptr %451, ptr %4, align 8, !tbaa !15
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  %452 = load i32, ptr %11, align 4
  switch i32 %452, label %483 [
    i32 2, label %481
  ]

453:                                              ; preds = %406
  %454 = load i64, ptr %5, align 8, !tbaa !5
  %455 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !25
  %456 = icmp ult i64 %454, %455
  br i1 %456, label %457, label %477

457:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %458 = load i64, ptr %5, align 8, !tbaa !5
  %459 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !25
  %460 = sub i64 %459, %458
  store i64 %460, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !25
  store i64 %460, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %461 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !26
  store ptr %461, ptr %31, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %462 = load ptr, ptr %31, align 8, !tbaa !15
  %463 = load i64, ptr %5, align 8, !tbaa !5
  %464 = getelementptr inbounds i8, ptr %462, i64 %463
  store ptr %464, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !26
  store ptr %464, ptr %32, align 8, !tbaa !15
  %465 = load i64, ptr %30, align 8, !tbaa !5
  %466 = or i64 %465, 1
  %467 = load ptr, ptr %32, align 8, !tbaa !15
  %468 = getelementptr inbounds %struct.malloc_chunk, ptr %467, i32 0, i32 1
  store i64 %466, ptr %468, align 8, !tbaa !18
  %469 = load i64, ptr %5, align 8, !tbaa !5
  %470 = or i64 %469, 1
  %471 = or i64 %470, 2
  %472 = load ptr, ptr %31, align 8, !tbaa !15
  %473 = getelementptr inbounds %struct.malloc_chunk, ptr %472, i32 0, i32 1
  store i64 %471, ptr %473, align 8, !tbaa !18
  %474 = load ptr, ptr %31, align 8, !tbaa !15
  %475 = getelementptr inbounds i8, ptr %474, i64 16
  store ptr %475, ptr %4, align 8, !tbaa !15
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  %476 = load i32, ptr %11, align 4
  switch i32 %476, label %483 [
    i32 2, label %481
  ]

477:                                              ; preds = %453
  br label %478

478:                                              ; preds = %477
  %479 = load i64, ptr %5, align 8, !tbaa !5
  %480 = call ptr @sys_alloc(ptr noundef @_gm_, i64 noundef %479)
  store ptr %480, ptr %4, align 8, !tbaa !15
  br label %481

481:                                              ; preds = %478, %457, %449, %403, %385
  %482 = load ptr, ptr %4, align 8, !tbaa !15
  store ptr %482, ptr %2, align 8
  store i32 1, ptr %11, align 4
  br label %483

483:                                              ; preds = %481, %457, %449, %385
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  %484 = load ptr, ptr %2, align 8
  ret ptr %484
}

; 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 @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #2

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

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

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

; 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) #5

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

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

attributes #0 = { nounwind allocsize(0) 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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"malloc_state", !10, i64 0, !10, i64 4, !6, i64 8, !6, i64 16, !13, i64 24, !13, i64 32, !13, 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, !10, i64 880, !14, i64 888, !13, i64 920, !6, i64 928}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"malloc_segment", !13, i64 0, !6, i64 8, !13, i64 16, !10, i64 24}
!15 = !{!13, !13, i64 0}
!16 = !{!17, !13, i64 16}
!17 = !{!"malloc_chunk", !6, i64 0, !6, i64 8, !13, i64 16, !13, i64 24}
!18 = !{!17, !6, i64 8}
!19 = !{!12, !13, i64 24}
!20 = !{!17, !13, i64 24}
!21 = !{!12, !6, i64 8}
!22 = !{!17, !6, i64 0}
!23 = !{!12, !13, i64 32}
!24 = !{!12, !10, i64 4}
!25 = !{!12, !6, i64 16}
!26 = !{!12, !13, 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_state = type { i32, i32, i64, i64, ptr, ptr, ptr, i64, i64, i64, [66 x ptr], [32 x ptr], i64, i64, i64, i32, %struct.malloc_segment, ptr, i64 }
%struct.malloc_segment = type { ptr, i64, ptr, i32 }

@_gm_ = external hidden global %struct.malloc_state, align 8
@.str = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [100 x i8], align 1
@__PRETTY_FUNCTION__.malloc = external hidden unnamed_addr constant [21 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nounwind allocsize(0) uwtable
define dso_local noalias ptr @malloc(i64 noundef %0) local_unnamed_addr #0 {
  %2 = icmp ult i64 %0, 233
  br i1 %2, label %3, label %140

3:                                                ; preds = %1
  %4 = icmp ult i64 %0, 23
  %5 = add nuw nsw i64 %0, 23
  %6 = and i64 %5, 496
  %7 = select i1 %4, i64 32, i64 %6
  %8 = lshr exact i64 %7, 3
  %9 = trunc nuw nsw i64 %8 to i32
  %10 = load i32, ptr @_gm_, align 8, !tbaa !5
  %11 = lshr i32 %10, %9
  %12 = and i32 %11, 3
  %.not166 = icmp eq i32 %12, 0
  br i1 %.not166, label %54, label %13

13:                                               ; preds = %3
  %14 = and i32 %11, 1
  %15 = or disjoint i32 %14, %9
  %16 = xor i32 %15, 1
  %17 = shl nuw nsw i32 %16, 1
  %18 = zext nneg i32 %17 to i64
  %19 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %18
  %20 = getelementptr inbounds i8, ptr %19, i64 16
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = getelementptr inbounds i8, ptr %21, i64 8
  %23 = load i64, ptr %22, align 8, !tbaa !15
  %24 = and i64 %23, -8
  %25 = shl nuw nsw i32 %16, 3
  %26 = zext nneg i32 %25 to i64
  %27 = icmp eq i64 %24, %26
  br i1 %27, label %29, label %28

28:                                               ; preds = %13
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 4582, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

29:                                               ; preds = %13
  %30 = getelementptr inbounds i8, ptr %21, i64 16
  %31 = load ptr, ptr %30, align 8, !tbaa !13
  %.not176 = icmp eq ptr %21, %19
  br i1 %.not176, label %32, label %33

32:                                               ; preds = %29
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 4583, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

33:                                               ; preds = %29
  %.not177 = icmp eq ptr %21, %31
  br i1 %.not177, label %34, label %35

34:                                               ; preds = %33
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 4583, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

35:                                               ; preds = %33
  %36 = icmp eq ptr %19, %31
  br i1 %36, label %37, label %41

37:                                               ; preds = %35
  %38 = shl nuw i32 1, %16
  %39 = xor i32 %38, -1
  %40 = and i32 %10, %39
  store i32 %40, ptr @_gm_, align 8, !tbaa !5
  br label %48

41:                                               ; preds = %35
  %42 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !16
  %.not178 = icmp ult ptr %31, %42
  br i1 %.not178, label %.critedge, label %43, !prof !17

43:                                               ; preds = %41
  %44 = getelementptr inbounds i8, ptr %31, i64 24
  %45 = load ptr, ptr %44, align 8, !tbaa !18
  %46 = icmp eq ptr %45, %21
  br i1 %46, label %47, label %.critedge, !prof !19

47:                                               ; preds = %43
  store ptr %19, ptr %44, align 8, !tbaa !18
  store ptr %31, ptr %20, align 8, !tbaa !13
  br label %48

.critedge:                                        ; preds = %41, %43
  tail call void @abort() #4
  unreachable

48:                                               ; preds = %47, %37
  %49 = or disjoint i64 %24, 3
  store i64 %49, ptr %22, align 8, !tbaa !15
  %50 = getelementptr inbounds i8, ptr %21, i64 %24
  %51 = getelementptr inbounds i8, ptr %50, i64 8
  %52 = load i64, ptr %51, align 8, !tbaa !15
  %53 = or i64 %52, 1
  store i64 %53, ptr %51, align 8, !tbaa !15
  br label %.thread

54:                                               ; preds = %3
  %55 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !20
  %56 = icmp ugt i64 %7, %55
  br i1 %56, label %57, label %148

57:                                               ; preds = %54
  %.not167 = icmp eq i32 %11, 0
  br i1 %.not167, label %136, label %58

58:                                               ; preds = %57
  %59 = shl i32 %11, %9
  %60 = shl nuw i32 2, %9
  %61 = sub i32 0, %60
  %62 = or i32 %60, %61
  %63 = and i32 %59, %62
  %64 = tail call range(i32 2, 33) i32 @llvm.cttz.i32(i32 %63, i1 true)
  %65 = shl nuw nsw i32 %64, 1
  %66 = zext nneg i32 %65 to i64
  %67 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %66
  %68 = getelementptr inbounds i8, ptr %67, i64 16
  %69 = load ptr, ptr %68, align 8, !tbaa !13
  %70 = getelementptr inbounds i8, ptr %69, i64 8
  %71 = load i64, ptr %70, align 8, !tbaa !15
  %72 = and i64 %71, -8
  %73 = shl nuw nsw i32 %64, 3
  %74 = zext nneg i32 %73 to i64
  %75 = icmp eq i64 %72, %74
  br i1 %75, label %77, label %76

76:                                               ; preds = %58
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 4600, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

77:                                               ; preds = %58
  %78 = getelementptr inbounds i8, ptr %69, i64 16
  %79 = load ptr, ptr %78, align 8, !tbaa !13
  %.not170 = icmp eq ptr %69, %67
  br i1 %.not170, label %80, label %81

80:                                               ; preds = %77
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 4601, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

81:                                               ; preds = %77
  %.not171 = icmp eq ptr %69, %79
  br i1 %.not171, label %82, label %83

82:                                               ; preds = %81
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 4601, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

83:                                               ; preds = %81
  %84 = icmp eq ptr %67, %79
  br i1 %84, label %85, label %89

85:                                               ; preds = %83
  %86 = shl nuw i32 1, %64
  %87 = xor i32 %86, -1
  %88 = and i32 %10, %87
  store i32 %88, ptr @_gm_, align 8, !tbaa !5
  br label %96

89:                                               ; preds = %83
  %90 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !16
  %.not172 = icmp ult ptr %79, %90
  br i1 %.not172, label %.critedge181, label %91, !prof !17

91:                                               ; preds = %89
  %92 = getelementptr inbounds i8, ptr %79, i64 24
  %93 = load ptr, ptr %92, align 8, !tbaa !18
  %94 = icmp eq ptr %93, %69
  br i1 %94, label %95, label %.critedge181, !prof !19

95:                                               ; preds = %91
  store ptr %67, ptr %92, align 8, !tbaa !18
  store ptr %79, ptr %68, align 8, !tbaa !13
  br label %96

.critedge181:                                     ; preds = %89, %91
  tail call void @abort() #4
  unreachable

96:                                               ; preds = %95, %85
  %97 = phi i32 [ %10, %95 ], [ %88, %85 ]
  %98 = sub nsw i64 %72, %7
  %99 = icmp ult i64 %98, 32
  br i1 %99, label %100, label %106

100:                                              ; preds = %96
  %101 = or disjoint i64 %72, 3
  store i64 %101, ptr %70, align 8, !tbaa !15
  %102 = getelementptr inbounds i8, ptr %69, i64 %72
  %103 = getelementptr inbounds i8, ptr %102, i64 8
  %104 = load i64, ptr %103, align 8, !tbaa !15
  %105 = or i64 %104, 1
  store i64 %105, ptr %103, align 8, !tbaa !15
  br label %.thread

106:                                              ; preds = %96
  %107 = or disjoint i64 %7, 3
  store i64 %107, ptr %70, align 8, !tbaa !15
  %108 = getelementptr inbounds i8, ptr %69, i64 %7
  %109 = or disjoint i64 %98, 1
  %110 = getelementptr inbounds i8, ptr %108, i64 8
  store i64 %109, ptr %110, align 8, !tbaa !15
  %111 = getelementptr inbounds i8, ptr %69, i64 %72
  store i64 %98, ptr %111, align 8, !tbaa !21
  %112 = lshr i64 %55, 3
  %.not173 = icmp eq i64 %55, 0
  br i1 %.not173, label %135, label %113

113:                                              ; preds = %106
  %114 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !22
  %115 = shl nuw nsw i64 %112, 1
  %116 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %115
  %117 = icmp ugt i64 %55, 31
  br i1 %117, label %119, label %118

118:                                              ; preds = %113
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 4610, ptr noundef nonnull @__PRETTY_FUNCTION__.malloc) #4
  unreachable

119:                                              ; preds = %113
  %120 = trunc nuw nsw i64 %112 to i32
  %121 = shl nuw nsw i32 1, %120
  %122 = and i32 %97, %121
  %.not174 = icmp eq i32 %122, 0
  br i1 %.not174, label %123, label %125

123:                                              ; preds = %119
  %124 = or i32 %97, %121
  store i32 %124, ptr @_gm_, align 8, !tbaa !5
  br label %130

125:                                              ; preds = %119
  %126 = getelementptr inbounds i8, ptr %116, i64 16
  %127 = load ptr, ptr %126, align 8, !tbaa !13
  %128 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !16
  %.not175 = icmp ult ptr %127, %128
  br i1 %.not175, label %129, label %130, !prof !17

129:                                              ; preds = %125
  tail call void @abort() #4
  unreachable

130:                                              ; preds = %125, %123
  %.0142 = phi ptr [ %116, %123 ], [ %127, %125 ]
  %131 = getelementptr inbounds i8, ptr %116, i64 16
  store ptr %114, ptr %131, align 8, !tbaa !13
  %132 = getelementptr inbounds i8, ptr %.0142, i64 24
  store ptr %114, ptr %132, align 8, !tbaa !18
  %133 = getelementptr inbounds i8, ptr %114, i64 16
  store ptr %.0142, ptr %133, align 8, !tbaa !13
  %134 = getelementptr inbounds i8, ptr %114, i64 24
  store ptr %116, ptr %134, align 8, !tbaa !18
  br label %135

135:                                              ; preds = %130, %106
  store i64 %98, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !20
  store ptr %108, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !22
  br label %.thread

136:                                              ; preds = %57
  %137 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 4), align 4, !tbaa !23
  %.not168 = icmp eq i32 %137, 0
  br i1 %.not168, label %148, label %138

138:                                              ; preds = %136
  %139 = tail call ptr @tmalloc_small(ptr noundef nonnull @_gm_, i64 noundef %7)
  %.not169 = icmp eq ptr %139, null
  br i1 %.not169, label %148, label %.thread

140:                                              ; preds = %1
  %141 = icmp ugt i64 %0, -129
  br i1 %141, label %148, label %142

142:                                              ; preds = %140
  %143 = add nuw i64 %0, 23
  %144 = and i64 %143, -16
  %145 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 4), align 4, !tbaa !23
  %.not = icmp eq i32 %145, 0
  br i1 %.not, label %148, label %146

146:                                              ; preds = %142
  %147 = tail call ptr @tmalloc_large(ptr noundef nonnull @_gm_, i64 noundef %144)
  %.not165 = icmp eq ptr %147, null
  br i1 %.not165, label %148, label %.thread

148:                                              ; preds = %54, %136, %138, %140, %146, %142
  %.0140 = phi i64 [ %144, %146 ], [ %144, %142 ], [ -1, %140 ], [ %7, %138 ], [ %7, %136 ], [ %7, %54 ]
  %149 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !20
  %.not179 = icmp ugt i64 %.0140, %149
  br i1 %.not179, label %170, label %150

150:                                              ; preds = %148
  %151 = sub i64 %149, %.0140
  %152 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !22
  %153 = icmp ugt i64 %151, 31
  br i1 %153, label %154, label %161

154:                                              ; preds = %150
  %155 = getelementptr inbounds i8, ptr %152, i64 %.0140
  %156 = or i64 %151, 1
  %157 = getelementptr inbounds i8, ptr %155, i64 8
  store i64 %156, ptr %157, align 8, !tbaa !15
  %158 = getelementptr inbounds i8, ptr %152, i64 %149
  store i64 %151, ptr %158, align 8, !tbaa !21
  %159 = or i64 %.0140, 3
  %160 = getelementptr inbounds i8, ptr %152, i64 8
  store i64 %159, ptr %160, align 8, !tbaa !15
  br label %168

161:                                              ; preds = %150
  %162 = or i64 %149, 3
  %163 = getelementptr inbounds i8, ptr %152, i64 8
  store i64 %162, ptr %163, align 8, !tbaa !15
  %164 = getelementptr inbounds i8, ptr %152, i64 %149
  %165 = getelementptr inbounds i8, ptr %164, i64 8
  %166 = load i64, ptr %165, align 8, !tbaa !15
  %167 = or i64 %166, 1
  store i64 %167, ptr %165, align 8, !tbaa !15
  br label %168

168:                                              ; preds = %161, %154
  %.sink186 = phi ptr [ %155, %154 ], [ null, %161 ]
  %.sink = phi i64 [ %151, %154 ], [ 0, %161 ]
  store ptr %.sink186, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8
  store i64 %.sink, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8
  %169 = getelementptr inbounds i8, ptr %152, i64 16
  br label %.thread

170:                                              ; preds = %148
  %171 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 16), align 8, !tbaa !24
  %172 = icmp ult i64 %.0140, %171
  br i1 %172, label %173, label %182

173:                                              ; preds = %170
  %174 = sub i64 %171, %.0140
  store i64 %174, ptr getelementptr inbounds (i8, ptr @_gm_, i64 16), align 8, !tbaa !24
  %175 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 40), align 8, !tbaa !25
  %176 = getelementptr inbounds i8, ptr %175, i64 %.0140
  store ptr %176, ptr getelementptr inbounds (i8, ptr @_gm_, i64 40), align 8, !tbaa !25
  %177 = or i64 %174, 1
  %178 = getelementptr inbounds i8, ptr %176, i64 8
  store i64 %177, ptr %178, align 8, !tbaa !15
  %179 = or i64 %.0140, 3
  %180 = getelementptr inbounds i8, ptr %175, i64 8
  store i64 %179, ptr %180, align 8, !tbaa !15
  %181 = getelementptr inbounds i8, ptr %175, i64 16
  br label %.thread

182:                                              ; preds = %170
  %183 = tail call ptr @sys_alloc(ptr noundef nonnull @_gm_, i64 noundef %.0140)
  br label %.thread

.thread:                                          ; preds = %138, %100, %135, %48, %182, %146, %168, %173
  %.2 = phi ptr [ %169, %168 ], [ %181, %173 ], [ %183, %182 ], [ %147, %146 ], [ %139, %138 ], [ %78, %100 ], [ %78, %135 ], [ %30, %48 ]
  ret ptr %.2
}

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

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

; 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 #3

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

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

attributes #0 = { nounwind allocsize(0) 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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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_state", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !8, i64 72, !8, i64 600, !10, i64 856, !10, i64 864, !10, i64 872, !7, i64 880, !12, i64 888, !11, i64 920, !10, i64 928}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"malloc_segment", !11, i64 0, !10, i64 8, !11, i64 16, !7, i64 24}
!13 = !{!14, !11, i64 16}
!14 = !{!"malloc_chunk", !10, i64 0, !10, i64 8, !11, i64 16, !11, i64 24}
!15 = !{!14, !10, i64 8}
!16 = !{!6, !11, i64 24}
!17 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!18 = !{!14, !11, i64 24}
!19 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!20 = !{!6, !10, i64 8}
!21 = !{!14, !10, i64 0}
!22 = !{!6, !11, i64 32}
!23 = !{!6, !7, i64 4}
!24 = !{!6, !10, i64 16}
!25 = !{!6, !11, i64 40}


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