; LLVM IR from preshing/CompareIntegerMaps :: dlmalloc (malloc)

; 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

; 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %33 = load i64, ptr %3, align 8, !tbaa !5
  %34 = icmp ule i64 %33, 232
  br i1 %34, label %35, label %309

35:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %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 %123

55:                                               ; preds = %44
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %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
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %68 = load ptr, ptr %9, align 8, !tbaa !15
  %69 = getelementptr inbounds %struct.malloc_chunk, ptr %68, i32 0, i32 2
  %70 = load ptr, ptr %69, align 8, !tbaa !16
  store ptr %70, ptr %10, align 8, !tbaa !15
  %71 = load ptr, ptr %8, align 8, !tbaa !15
  %72 = load ptr, ptr %10, align 8, !tbaa !15
  %73 = icmp eq ptr %71, %72
  br i1 %73, label %74, label %80

74:                                               ; preds = %55
  %75 = load i32, ptr %6, align 4, !tbaa !9
  %76 = shl i32 1, %75
  %77 = xor i32 %76, -1
  %78 = load i32, ptr @_gm_, align 8, !tbaa !11
  %79 = and i32 %78, %77
  store i32 %79, ptr @_gm_, align 8, !tbaa !11
  br label %105

80:                                               ; preds = %55
  %81 = load ptr, ptr %10, align 8, !tbaa !15
  %82 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !18
  %83 = icmp uge ptr %81, %82
  br i1 %83, label %84, label %90

84:                                               ; preds = %80
  %85 = load ptr, ptr %10, align 8, !tbaa !15
  %86 = getelementptr inbounds %struct.malloc_chunk, ptr %85, i32 0, i32 3
  %87 = load ptr, ptr %86, align 8, !tbaa !19
  %88 = load ptr, ptr %9, align 8, !tbaa !15
  %89 = icmp eq ptr %87, %88
  br label %90

90:                                               ; preds = %84, %80
  %91 = phi i1 [ false, %80 ], [ %89, %84 ]
  %92 = zext i1 %91 to i32
  %93 = sext i32 %92 to i64
  %94 = call i64 @llvm.expect.i64(i64 %93, i64 1)
  %95 = icmp ne i64 %94, 0
  br i1 %95, label %96, label %103

96:                                               ; preds = %90
  %97 = load ptr, ptr %8, align 8, !tbaa !15
  %98 = load ptr, ptr %10, align 8, !tbaa !15
  %99 = getelementptr inbounds %struct.malloc_chunk, ptr %98, i32 0, i32 3
  store ptr %97, ptr %99, align 8, !tbaa !19
  %100 = load ptr, ptr %10, align 8, !tbaa !15
  %101 = load ptr, ptr %8, align 8, !tbaa !15
  %102 = getelementptr inbounds %struct.malloc_chunk, ptr %101, i32 0, i32 2
  store ptr %100, ptr %102, align 8, !tbaa !16
  br label %104

103:                                              ; preds = %90
  call void @abort() #6
  unreachable

104:                                              ; preds = %96
  br label %105

105:                                              ; preds = %104, %74
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  %106 = load i32, ptr %6, align 4, !tbaa !9
  %107 = shl i32 %106, 3
  %108 = zext i32 %107 to i64
  %109 = or i64 %108, 1
  %110 = or i64 %109, 2
  %111 = load ptr, ptr %9, align 8, !tbaa !15
  %112 = getelementptr inbounds %struct.malloc_chunk, ptr %111, i32 0, i32 1
  store i64 %110, ptr %112, align 8, !tbaa !20
  %113 = load ptr, ptr %9, align 8, !tbaa !15
  %114 = load i32, ptr %6, align 4, !tbaa !9
  %115 = shl i32 %114, 3
  %116 = zext i32 %115 to i64
  %117 = getelementptr inbounds i8, ptr %113, i64 %116
  %118 = getelementptr inbounds %struct.malloc_chunk, ptr %117, i32 0, i32 1
  %119 = load i64, ptr %118, align 8, !tbaa !20
  %120 = or i64 %119, 1
  store i64 %120, ptr %118, align 8, !tbaa !20
  %121 = load ptr, ptr %9, align 8, !tbaa !15
  %122 = getelementptr inbounds i8, ptr %121, i64 16
  store ptr %122, ptr %4, align 8, !tbaa !15
  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 %306

123:                                              ; preds = %44
  %124 = load i64, ptr %5, align 8, !tbaa !5
  %125 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %126 = icmp ugt i64 %124, %125
  br i1 %126, label %127, label %304

127:                                              ; preds = %123
  %128 = load i32, ptr %7, align 4, !tbaa !9
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %294

130:                                              ; preds = %127
  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
  %131 = load i32, ptr %7, align 4, !tbaa !9
  %132 = load i32, ptr %6, align 4, !tbaa !9
  %133 = shl i32 %131, %132
  %134 = load i32, ptr %6, align 4, !tbaa !9
  %135 = shl i32 1, %134
  %136 = shl i32 %135, 1
  %137 = load i32, ptr %6, align 4, !tbaa !9
  %138 = shl i32 1, %137
  %139 = shl i32 %138, 1
  %140 = sub i32 0, %139
  %141 = or i32 %136, %140
  %142 = and i32 %133, %141
  store i32 %142, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %143 = load i32, ptr %17, align 4, !tbaa !9
  %144 = load i32, ptr %17, align 4, !tbaa !9
  %145 = sub i32 0, %144
  %146 = and i32 %143, %145
  store i32 %146, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %147 = load i32, ptr %18, align 4, !tbaa !9
  %148 = call i32 @llvm.cttz.i32(i32 %147, i1 true)
  store i32 %148, ptr %19, align 4, !tbaa !9
  %149 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %149, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  %150 = load i32, ptr %16, align 4, !tbaa !9
  %151 = shl i32 %150, 1
  %152 = zext i32 %151 to i64
  %153 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %152
  store ptr %153, ptr %12, align 8, !tbaa !15
  %154 = load ptr, ptr %12, align 8, !tbaa !15
  %155 = getelementptr inbounds %struct.malloc_chunk, ptr %154, i32 0, i32 2
  %156 = load ptr, ptr %155, align 8, !tbaa !16
  store ptr %156, ptr %13, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %157 = load ptr, ptr %13, align 8, !tbaa !15
  %158 = getelementptr inbounds %struct.malloc_chunk, ptr %157, i32 0, i32 2
  %159 = load ptr, ptr %158, align 8, !tbaa !16
  store ptr %159, ptr %20, align 8, !tbaa !15
  %160 = load ptr, ptr %12, align 8, !tbaa !15
  %161 = load ptr, ptr %20, align 8, !tbaa !15
  %162 = icmp eq ptr %160, %161
  br i1 %162, label %163, label %169

163:                                              ; preds = %130
  %164 = load i32, ptr %16, align 4, !tbaa !9
  %165 = shl i32 1, %164
  %166 = xor i32 %165, -1
  %167 = load i32, ptr @_gm_, align 8, !tbaa !11
  %168 = and i32 %167, %166
  store i32 %168, ptr @_gm_, align 8, !tbaa !11
  br label %194

169:                                              ; preds = %130
  %170 = load ptr, ptr %20, align 8, !tbaa !15
  %171 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !18
  %172 = icmp uge ptr %170, %171
  br i1 %172, label %173, label %179

173:                                              ; preds = %169
  %174 = load ptr, ptr %20, align 8, !tbaa !15
  %175 = getelementptr inbounds %struct.malloc_chunk, ptr %174, i32 0, i32 3
  %176 = load ptr, ptr %175, align 8, !tbaa !19
  %177 = load ptr, ptr %13, align 8, !tbaa !15
  %178 = icmp eq ptr %176, %177
  br label %179

179:                                              ; preds = %173, %169
  %180 = phi i1 [ false, %169 ], [ %178, %173 ]
  %181 = zext i1 %180 to i32
  %182 = sext i32 %181 to i64
  %183 = call i64 @llvm.expect.i64(i64 %182, i64 1)
  %184 = icmp ne i64 %183, 0
  br i1 %184, label %185, label %192

185:                                              ; preds = %179
  %186 = load ptr, ptr %12, align 8, !tbaa !15
  %187 = load ptr, ptr %20, align 8, !tbaa !15
  %188 = getelementptr inbounds %struct.malloc_chunk, ptr %187, i32 0, i32 3
  store ptr %186, ptr %188, align 8, !tbaa !19
  %189 = load ptr, ptr %20, align 8, !tbaa !15
  %190 = load ptr, ptr %12, align 8, !tbaa !15
  %191 = getelementptr inbounds %struct.malloc_chunk, ptr %190, i32 0, i32 2
  store ptr %189, ptr %191, align 8, !tbaa !16
  br label %193

192:                                              ; preds = %179
  call void @abort() #6
  unreachable

193:                                              ; preds = %185
  br label %194

194:                                              ; preds = %193, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  %195 = load i32, ptr %16, align 4, !tbaa !9
  %196 = shl i32 %195, 3
  %197 = zext i32 %196 to i64
  %198 = load i64, ptr %5, align 8, !tbaa !5
  %199 = sub i64 %197, %198
  store i64 %199, ptr %15, align 8, !tbaa !5
  %200 = load i64, ptr %15, align 8, !tbaa !5
  %201 = icmp ult i64 %200, 32
  br i1 %201, label %202, label %218

202:                                              ; preds = %194
  %203 = load i32, ptr %16, align 4, !tbaa !9
  %204 = shl i32 %203, 3
  %205 = zext i32 %204 to i64
  %206 = or i64 %205, 1
  %207 = or i64 %206, 2
  %208 = load ptr, ptr %13, align 8, !tbaa !15
  %209 = getelementptr inbounds %struct.malloc_chunk, ptr %208, i32 0, i32 1
  store i64 %207, ptr %209, align 8, !tbaa !20
  %210 = load ptr, ptr %13, align 8, !tbaa !15
  %211 = load i32, ptr %16, align 4, !tbaa !9
  %212 = shl i32 %211, 3
  %213 = zext i32 %212 to i64
  %214 = getelementptr inbounds i8, ptr %210, i64 %213
  %215 = getelementptr inbounds %struct.malloc_chunk, ptr %214, i32 0, i32 1
  %216 = load i64, ptr %215, align 8, !tbaa !20
  %217 = or i64 %216, 1
  store i64 %217, ptr %215, align 8, !tbaa !20
  br label %291

218:                                              ; preds = %194
  %219 = load i64, ptr %5, align 8, !tbaa !5
  %220 = or i64 %219, 1
  %221 = or i64 %220, 2
  %222 = load ptr, ptr %13, align 8, !tbaa !15
  %223 = getelementptr inbounds %struct.malloc_chunk, ptr %222, i32 0, i32 1
  store i64 %221, ptr %223, align 8, !tbaa !20
  %224 = load ptr, ptr %13, align 8, !tbaa !15
  %225 = load i64, ptr %5, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %224, i64 %225
  store ptr %226, ptr %14, align 8, !tbaa !15
  %227 = load i64, ptr %15, align 8, !tbaa !5
  %228 = or i64 %227, 1
  %229 = load ptr, ptr %14, align 8, !tbaa !15
  %230 = getelementptr inbounds %struct.malloc_chunk, ptr %229, i32 0, i32 1
  store i64 %228, ptr %230, align 8, !tbaa !20
  %231 = load i64, ptr %15, align 8, !tbaa !5
  %232 = load ptr, ptr %14, align 8, !tbaa !15
  %233 = load i64, ptr %15, align 8, !tbaa !5
  %234 = getelementptr inbounds i8, ptr %232, i64 %233
  %235 = getelementptr inbounds %struct.malloc_chunk, ptr %234, i32 0, i32 0
  store i64 %231, ptr %235, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %236 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  store i64 %236, ptr %21, align 8, !tbaa !5
  %237 = load i64, ptr %21, align 8, !tbaa !5
  %238 = icmp ne i64 %237, 0
  br i1 %238, label %239, label %288

239:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %240 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  store ptr %240, ptr %22, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %241 = load i64, ptr %21, align 8, !tbaa !5
  %242 = lshr i64 %241, 3
  %243 = trunc i64 %242 to i32
  store i32 %243, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %244 = load i32, ptr %23, align 4, !tbaa !9
  %245 = shl i32 %244, 1
  %246 = zext i32 %245 to i64
  %247 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 10), i64 0, i64 %246
  store ptr %247, ptr %24, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %248 = load ptr, ptr %24, align 8, !tbaa !15
  store ptr %248, ptr %25, align 8, !tbaa !15
  %249 = load i32, ptr @_gm_, align 8, !tbaa !11
  %250 = load i32, ptr %23, align 4, !tbaa !9
  %251 = shl i32 1, %250
  %252 = and i32 %249, %251
  %253 = icmp ne i32 %252, 0
  br i1 %253, label %259, label %254

254:                                              ; preds = %239
  %255 = load i32, ptr %23, align 4, !tbaa !9
  %256 = shl i32 1, %255
  %257 = load i32, ptr @_gm_, align 8, !tbaa !11
  %258 = or i32 %257, %256
  store i32 %258, ptr @_gm_, align 8, !tbaa !11
  br label %275

259:                                              ; preds = %239
  %260 = load ptr, ptr %24, align 8, !tbaa !15
  %261 = getelementptr inbounds %struct.malloc_chunk, ptr %260, i32 0, i32 2
  %262 = load ptr, ptr %261, align 8, !tbaa !16
  %263 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 4), align 8, !tbaa !18
  %264 = icmp uge ptr %262, %263
  %265 = zext i1 %264 to i32
  %266 = sext i32 %265 to i64
  %267 = call i64 @llvm.expect.i64(i64 %266, i64 1)
  %268 = icmp ne i64 %267, 0
  br i1 %268, label %269, label %273

269:                                              ; preds = %259
  %270 = load ptr, ptr %24, align 8, !tbaa !15
  %271 = getelementptr inbounds %struct.malloc_chunk, ptr %270, i32 0, i32 2
  %272 = load ptr, ptr %271, align 8, !tbaa !16
  store ptr %272, ptr %25, align 8, !tbaa !15
  br label %274

273:                                              ; preds = %259
  call void @abort() #6
  unreachable

274:                                              ; preds = %269
  br label %275

275:                                              ; preds = %274, %254
  %276 = load ptr, ptr %22, align 8, !tbaa !15
  %277 = load ptr, ptr %24, align 8, !tbaa !15
  %278 = getelementptr inbounds %struct.malloc_chunk, ptr %277, i32 0, i32 2
  store ptr %276, ptr %278, align 8, !tbaa !16
  %279 = load ptr, ptr %22, align 8, !tbaa !15
  %280 = load ptr, ptr %25, align 8, !tbaa !15
  %281 = getelementptr inbounds %struct.malloc_chunk, ptr %280, i32 0, i32 3
  store ptr %279, ptr %281, align 8, !tbaa !19
  %282 = load ptr, ptr %25, align 8, !tbaa !15
  %283 = load ptr, ptr %22, align 8, !tbaa !15
  %284 = getelementptr inbounds %struct.malloc_chunk, ptr %283, i32 0, i32 2
  store ptr %282, ptr %284, align 8, !tbaa !16
  %285 = load ptr, ptr %24, align 8, !tbaa !15
  %286 = load ptr, ptr %22, align 8, !tbaa !15
  %287 = getelementptr inbounds %struct.malloc_chunk, ptr %286, i32 0, i32 3
  store ptr %285, ptr %287, align 8, !tbaa !19
  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 %288

288:                                              ; preds = %275, %218
  %289 = load i64, ptr %15, align 8, !tbaa !5
  store i64 %289, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %290 = load ptr, ptr %14, align 8, !tbaa !15
  store ptr %290, 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) #5
  br label %291

291:                                              ; preds = %288, %202
  %292 = load ptr, ptr %13, align 8, !tbaa !15
  %293 = getelementptr inbounds i8, ptr %292, i64 16
  store ptr %293, ptr %4, align 8, !tbaa !15
  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 %306

294:                                              ; preds = %127
  %295 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 1), align 4, !tbaa !24
  %296 = icmp ne i32 %295, 0
  br i1 %296, label %297, label %302

297:                                              ; preds = %294
  %298 = load i64, ptr %5, align 8, !tbaa !5
  %299 = call ptr @tmalloc_small(ptr noundef @_gm_, i64 noundef %298)
  store ptr %299, ptr %4, align 8, !tbaa !15
  %300 = icmp ne ptr %299, null
  br i1 %300, label %301, label %302

301:                                              ; preds = %297
  store i32 2, ptr %11, align 4
  br label %306

302:                                              ; preds = %297, %294
  br label %303

303:                                              ; preds = %302
  br label %304

304:                                              ; preds = %303, %123
  br label %305

305:                                              ; preds = %304
  store i32 0, ptr %11, align 4
  br label %306

306:                                              ; preds = %305, %301, %291, %105
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  %307 = load i32, ptr %11, align 4
  switch i32 %307, label %404 [
    i32 0, label %308
    i32 2, label %402
  ]

308:                                              ; preds = %306
  br label %327

309:                                              ; preds = %1
  %310 = load i64, ptr %3, align 8, !tbaa !5
  %311 = icmp uge i64 %310, -128
  br i1 %311, label %312, label %313

312:                                              ; preds = %309
  store i64 -1, ptr %5, align 8, !tbaa !5
  br label %326

313:                                              ; preds = %309
  %314 = load i64, ptr %3, align 8, !tbaa !5
  %315 = add i64 %314, 8
  %316 = add i64 %315, 15
  %317 = and i64 %316, -16
  store i64 %317, ptr %5, align 8, !tbaa !5
  %318 = load i32, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 1), align 4, !tbaa !24
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %325

320:                                              ; preds = %313
  %321 = load i64, ptr %5, align 8, !tbaa !5
  %322 = call ptr @tmalloc_large(ptr noundef @_gm_, i64 noundef %321)
  store ptr %322, ptr %4, align 8, !tbaa !15
  %323 = icmp ne ptr %322, null
  br i1 %323, label %324, label %325

324:                                              ; preds = %320
  br label %402

325:                                              ; preds = %320, %313
  br label %326

326:                                              ; preds = %325, %312
  br label %327

327:                                              ; preds = %326, %308
  %328 = load i64, ptr %5, align 8, !tbaa !5
  %329 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %330 = icmp ule i64 %328, %329
  br i1 %330, label %331, label %374

331:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %332 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %333 = load i64, ptr %5, align 8, !tbaa !5
  %334 = sub i64 %332, %333
  store i64 %334, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %335 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  store ptr %335, ptr %27, align 8, !tbaa !15
  %336 = load i64, ptr %26, align 8, !tbaa !5
  %337 = icmp uge i64 %336, 32
  br i1 %337, label %338, label %357

338:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %339 = load ptr, ptr %27, align 8, !tbaa !15
  %340 = load i64, ptr %5, align 8, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %339, i64 %340
  store ptr %341, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 5), align 8, !tbaa !23
  store ptr %341, ptr %28, align 8, !tbaa !15
  %342 = load i64, ptr %26, align 8, !tbaa !5
  store i64 %342, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  %343 = load i64, ptr %26, align 8, !tbaa !5
  %344 = or i64 %343, 1
  %345 = load ptr, ptr %28, align 8, !tbaa !15
  %346 = getelementptr inbounds %struct.malloc_chunk, ptr %345, i32 0, i32 1
  store i64 %344, ptr %346, align 8, !tbaa !20
  %347 = load i64, ptr %26, align 8, !tbaa !5
  %348 = load ptr, ptr %28, align 8, !tbaa !15
  %349 = load i64, ptr %26, align 8, !tbaa !5
  %350 = getelementptr inbounds i8, ptr %348, i64 %349
  %351 = getelementptr inbounds %struct.malloc_chunk, ptr %350, i32 0, i32 0
  store i64 %347, ptr %351, align 8, !tbaa !22
  %352 = load i64, ptr %5, align 8, !tbaa !5
  %353 = or i64 %352, 1
  %354 = or i64 %353, 2
  %355 = load ptr, ptr %27, align 8, !tbaa !15
  %356 = getelementptr inbounds %struct.malloc_chunk, ptr %355, i32 0, i32 1
  store i64 %354, ptr %356, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %370

357:                                              ; preds = %331
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %358 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 2), align 8, !tbaa !21
  store i64 %358, 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
  %359 = load i64, ptr %29, align 8, !tbaa !5
  %360 = or i64 %359, 1
  %361 = or i64 %360, 2
  %362 = load ptr, ptr %27, align 8, !tbaa !15
  %363 = getelementptr inbounds %struct.malloc_chunk, ptr %362, i32 0, i32 1
  store i64 %361, ptr %363, align 8, !tbaa !20
  %364 = load ptr, ptr %27, align 8, !tbaa !15
  %365 = load i64, ptr %29, align 8, !tbaa !5
  %366 = getelementptr inbounds i8, ptr %364, i64 %365
  %367 = getelementptr inbounds %struct.malloc_chunk, ptr %366, i32 0, i32 1
  %368 = load i64, ptr %367, align 8, !tbaa !20
  %369 = or i64 %368, 1
  store i64 %369, ptr %367, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %370

370:                                              ; preds = %357, %338
  %371 = load ptr, ptr %27, 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 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %373 = load i32, ptr %11, align 4
  switch i32 %373, label %404 [
    i32 2, label %402
  ]

374:                                              ; preds = %327
  %375 = load i64, ptr %5, align 8, !tbaa !5
  %376 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !25
  %377 = icmp ult i64 %375, %376
  br i1 %377, label %378, label %398

378:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %379 = load i64, ptr %5, align 8, !tbaa !5
  %380 = load i64, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !25
  %381 = sub i64 %380, %379
  store i64 %381, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 3), align 8, !tbaa !25
  store i64 %381, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %382 = load ptr, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !26
  store ptr %382, ptr %31, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %383 = load ptr, ptr %31, align 8, !tbaa !15
  %384 = load i64, ptr %5, align 8, !tbaa !5
  %385 = getelementptr inbounds i8, ptr %383, i64 %384
  store ptr %385, ptr getelementptr inbounds (%struct.malloc_state, ptr @_gm_, i32 0, i32 6), align 8, !tbaa !26
  store ptr %385, ptr %32, align 8, !tbaa !15
  %386 = load i64, ptr %30, align 8, !tbaa !5
  %387 = or i64 %386, 1
  %388 = load ptr, ptr %32, align 8, !tbaa !15
  %389 = getelementptr inbounds %struct.malloc_chunk, ptr %388, i32 0, i32 1
  store i64 %387, ptr %389, align 8, !tbaa !20
  %390 = load i64, ptr %5, align 8, !tbaa !5
  %391 = or i64 %390, 1
  %392 = or i64 %391, 2
  %393 = load ptr, ptr %31, align 8, !tbaa !15
  %394 = getelementptr inbounds %struct.malloc_chunk, ptr %393, i32 0, i32 1
  store i64 %392, ptr %394, align 8, !tbaa !20
  %395 = load ptr, ptr %31, align 8, !tbaa !15
  %396 = getelementptr inbounds i8, ptr %395, i64 16
  store ptr %396, ptr %4, align 8, !tbaa !15
  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
  %397 = load i32, ptr %11, align 4
  switch i32 %397, label %404 [
    i32 2, label %402
  ]

398:                                              ; preds = %374
  br label %399

399:                                              ; preds = %398
  %400 = load i64, ptr %5, align 8, !tbaa !5
  %401 = call ptr @sys_alloc(ptr noundef @_gm_, i64 noundef %400)
  store ptr %401, ptr %4, align 8, !tbaa !15
  br label %402

402:                                              ; preds = %399, %378, %370, %324, %306
  %403 = load ptr, ptr %4, align 8, !tbaa !15
  store ptr %403, ptr %2, align 8
  store i32 1, ptr %11, align 4
  br label %404

404:                                              ; preds = %402, %378, %370, %306
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  %405 = load ptr, ptr %2, align 8
  ret ptr %405
}

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden ptr @tmalloc_large(ptr noundef, i64 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 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #3 = { 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 #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, !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 = !{!12, !13, i64 24}
!19 = !{!17, !13, i64 24}
!20 = !{!17, !6, i64 8}
!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

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

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
  %.not143 = icmp eq i32 %12, 0
  br i1 %.not143, label %45, 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 16
  %23 = load ptr, ptr %22, align 8, !tbaa !13
  %24 = icmp eq ptr %19, %23
  br i1 %24, label %25, label %29

25:                                               ; preds = %13
  %26 = shl nuw i32 1, %16
  %27 = xor i32 %26, -1
  %28 = and i32 %10, %27
  store i32 %28, ptr @_gm_, align 8, !tbaa !5
  br label %36

29:                                               ; preds = %13
  %30 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !15
  %.not151 = icmp ult ptr %23, %30
  br i1 %.not151, label %.critedge, label %31, !prof !16

31:                                               ; preds = %29
  %32 = getelementptr inbounds i8, ptr %23, i64 24
  %33 = load ptr, ptr %32, align 8, !tbaa !17
  %34 = icmp eq ptr %33, %21
  br i1 %34, label %35, label %.critedge, !prof !18

35:                                               ; preds = %31
  store ptr %19, ptr %32, align 8, !tbaa !17
  store ptr %23, ptr %20, align 8, !tbaa !13
  br label %36

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

36:                                               ; preds = %35, %25
  %37 = shl nuw nsw i32 %16, 3
  %38 = zext nneg i32 %37 to i64
  %39 = or disjoint i64 %38, 3
  %40 = getelementptr inbounds i8, ptr %21, i64 8
  store i64 %39, ptr %40, align 8, !tbaa !19
  %41 = getelementptr inbounds i8, ptr %21, i64 %38
  %42 = getelementptr inbounds i8, ptr %41, i64 8
  %43 = load i64, ptr %42, align 8, !tbaa !19
  %44 = or i64 %43, 1
  store i64 %44, ptr %42, align 8, !tbaa !19
  br label %.thread

45:                                               ; preds = %3
  %46 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !20
  %47 = icmp ugt i64 %7, %46
  br i1 %47, label %48, label %128

48:                                               ; preds = %45
  %.not144 = icmp eq i32 %11, 0
  br i1 %.not144, label %116, label %49

49:                                               ; preds = %48
  %50 = shl i32 %11, %9
  %51 = shl nuw i32 2, %9
  %52 = sub i32 0, %51
  %53 = or i32 %51, %52
  %54 = and i32 %50, %53
  %55 = tail call range(i32 2, 33) i32 @llvm.cttz.i32(i32 %54, i1 true)
  %56 = shl nuw nsw i32 %55, 1
  %57 = zext nneg i32 %56 to i64
  %58 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %57
  %59 = getelementptr inbounds i8, ptr %58, i64 16
  %60 = load ptr, ptr %59, align 8, !tbaa !13
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  %62 = load ptr, ptr %61, align 8, !tbaa !13
  %63 = icmp eq ptr %58, %62
  br i1 %63, label %64, label %68

64:                                               ; preds = %49
  %65 = shl nuw i32 1, %55
  %66 = xor i32 %65, -1
  %67 = and i32 %10, %66
  store i32 %67, ptr @_gm_, align 8, !tbaa !5
  br label %75

68:                                               ; preds = %49
  %69 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !15
  %.not147 = icmp ult ptr %62, %69
  br i1 %.not147, label %.critedge154, label %70, !prof !16

70:                                               ; preds = %68
  %71 = getelementptr inbounds i8, ptr %62, i64 24
  %72 = load ptr, ptr %71, align 8, !tbaa !17
  %73 = icmp eq ptr %72, %60
  br i1 %73, label %74, label %.critedge154, !prof !18

74:                                               ; preds = %70
  store ptr %58, ptr %71, align 8, !tbaa !17
  store ptr %62, ptr %59, align 8, !tbaa !13
  br label %75

.critedge154:                                     ; preds = %68, %70
  tail call void @abort() #3
  unreachable

75:                                               ; preds = %74, %64
  %76 = phi i32 [ %10, %74 ], [ %67, %64 ]
  %77 = shl nuw nsw i32 %55, 3
  %78 = zext nneg i32 %77 to i64
  %79 = sub nsw i64 %78, %7
  %80 = icmp ult i64 %79, 32
  %81 = getelementptr inbounds i8, ptr %60, i64 8
  br i1 %80, label %82, label %88

82:                                               ; preds = %75
  %83 = or disjoint i64 %78, 3
  store i64 %83, ptr %81, align 8, !tbaa !19
  %84 = getelementptr inbounds i8, ptr %60, i64 %78
  %85 = getelementptr inbounds i8, ptr %84, i64 8
  %86 = load i64, ptr %85, align 8, !tbaa !19
  %87 = or i64 %86, 1
  store i64 %87, ptr %85, align 8, !tbaa !19
  br label %.thread

88:                                               ; preds = %75
  %89 = or disjoint i64 %7, 3
  store i64 %89, ptr %81, align 8, !tbaa !19
  %90 = getelementptr inbounds i8, ptr %60, i64 %7
  %91 = or disjoint i64 %79, 1
  %92 = getelementptr inbounds i8, ptr %90, i64 8
  store i64 %91, ptr %92, align 8, !tbaa !19
  %93 = getelementptr inbounds i8, ptr %60, i64 %78
  store i64 %79, ptr %93, align 8, !tbaa !21
  %.not148 = icmp eq i64 %46, 0
  br i1 %.not148, label %115, label %94

94:                                               ; preds = %88
  %95 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !22
  %96 = lshr i64 %46, 3
  %97 = trunc i64 %96 to i32
  %98 = shl nuw nsw i64 %96, 1
  %99 = and i64 %98, 4294967294
  %100 = getelementptr inbounds [66 x ptr], ptr getelementptr inbounds (i8, ptr @_gm_, i64 72), i64 0, i64 %99
  %101 = shl nuw nsw i32 1, %97
  %102 = and i32 %76, %101
  %.not149 = icmp eq i32 %102, 0
  br i1 %.not149, label %103, label %105

103:                                              ; preds = %94
  %104 = or i32 %76, %101
  store i32 %104, ptr @_gm_, align 8, !tbaa !5
  br label %110

105:                                              ; preds = %94
  %106 = getelementptr inbounds i8, ptr %100, i64 16
  %107 = load ptr, ptr %106, align 8, !tbaa !13
  %108 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 24), align 8, !tbaa !15
  %.not150 = icmp ult ptr %107, %108
  br i1 %.not150, label %109, label %110, !prof !16

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

110:                                              ; preds = %105, %103
  %.0124 = phi ptr [ %100, %103 ], [ %107, %105 ]
  %111 = getelementptr inbounds i8, ptr %100, i64 16
  store ptr %95, ptr %111, align 8, !tbaa !13
  %112 = getelementptr inbounds i8, ptr %.0124, i64 24
  store ptr %95, ptr %112, align 8, !tbaa !17
  %113 = getelementptr inbounds i8, ptr %95, i64 16
  store ptr %.0124, ptr %113, align 8, !tbaa !13
  %114 = getelementptr inbounds i8, ptr %95, i64 24
  store ptr %100, ptr %114, align 8, !tbaa !17
  br label %115

115:                                              ; preds = %110, %88
  store i64 %79, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !20
  store ptr %90, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !22
  br label %.thread

116:                                              ; preds = %48
  %117 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 4), align 4, !tbaa !23
  %.not145 = icmp eq i32 %117, 0
  br i1 %.not145, label %128, label %118

118:                                              ; preds = %116
  %119 = tail call ptr @tmalloc_small(ptr noundef nonnull @_gm_, i64 noundef %7)
  %.not146 = icmp eq ptr %119, null
  br i1 %.not146, label %128, label %.thread

120:                                              ; preds = %1
  %121 = icmp ugt i64 %0, -129
  br i1 %121, label %128, label %122

122:                                              ; preds = %120
  %123 = add nuw i64 %0, 23
  %124 = and i64 %123, -16
  %125 = load i32, ptr getelementptr inbounds (i8, ptr @_gm_, i64 4), align 4, !tbaa !23
  %.not = icmp eq i32 %125, 0
  br i1 %.not, label %128, label %126

126:                                              ; preds = %122
  %127 = tail call ptr @tmalloc_large(ptr noundef nonnull @_gm_, i64 noundef %124)
  %.not142 = icmp eq ptr %127, null
  br i1 %.not142, label %128, label %.thread

128:                                              ; preds = %45, %116, %118, %120, %126, %122
  %.0122 = phi i64 [ %124, %126 ], [ %124, %122 ], [ -1, %120 ], [ %7, %118 ], [ %7, %116 ], [ %7, %45 ]
  %129 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8, !tbaa !20
  %.not152 = icmp ugt i64 %.0122, %129
  br i1 %.not152, label %150, label %130

130:                                              ; preds = %128
  %131 = sub i64 %129, %.0122
  %132 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8, !tbaa !22
  %133 = icmp ugt i64 %131, 31
  br i1 %133, label %134, label %141

134:                                              ; preds = %130
  %135 = getelementptr inbounds i8, ptr %132, i64 %.0122
  %136 = or i64 %131, 1
  %137 = getelementptr inbounds i8, ptr %135, i64 8
  store i64 %136, ptr %137, align 8, !tbaa !19
  %138 = getelementptr inbounds i8, ptr %132, i64 %129
  store i64 %131, ptr %138, align 8, !tbaa !21
  %139 = or i64 %.0122, 3
  %140 = getelementptr inbounds i8, ptr %132, i64 8
  store i64 %139, ptr %140, align 8, !tbaa !19
  br label %148

141:                                              ; preds = %130
  %142 = or i64 %129, 3
  %143 = getelementptr inbounds i8, ptr %132, i64 8
  store i64 %142, ptr %143, align 8, !tbaa !19
  %144 = getelementptr inbounds i8, ptr %132, i64 %129
  %145 = getelementptr inbounds i8, ptr %144, i64 8
  %146 = load i64, ptr %145, align 8, !tbaa !19
  %147 = or i64 %146, 1
  store i64 %147, ptr %145, align 8, !tbaa !19
  br label %148

148:                                              ; preds = %141, %134
  %.sink159 = phi ptr [ %135, %134 ], [ null, %141 ]
  %.sink = phi i64 [ %131, %134 ], [ 0, %141 ]
  store ptr %.sink159, ptr getelementptr inbounds (i8, ptr @_gm_, i64 32), align 8
  store i64 %.sink, ptr getelementptr inbounds (i8, ptr @_gm_, i64 8), align 8
  %149 = getelementptr inbounds i8, ptr %132, i64 16
  br label %.thread

150:                                              ; preds = %128
  %151 = load i64, ptr getelementptr inbounds (i8, ptr @_gm_, i64 16), align 8, !tbaa !24
  %152 = icmp ult i64 %.0122, %151
  br i1 %152, label %153, label %162

153:                                              ; preds = %150
  %154 = sub i64 %151, %.0122
  store i64 %154, ptr getelementptr inbounds (i8, ptr @_gm_, i64 16), align 8, !tbaa !24
  %155 = load ptr, ptr getelementptr inbounds (i8, ptr @_gm_, i64 40), align 8, !tbaa !25
  %156 = getelementptr inbounds i8, ptr %155, i64 %.0122
  store ptr %156, ptr getelementptr inbounds (i8, ptr @_gm_, i64 40), align 8, !tbaa !25
  %157 = or i64 %154, 1
  %158 = getelementptr inbounds i8, ptr %156, i64 8
  store i64 %157, ptr %158, align 8, !tbaa !19
  %159 = or i64 %.0122, 3
  %160 = getelementptr inbounds i8, ptr %155, i64 8
  store i64 %159, ptr %160, align 8, !tbaa !19
  %161 = getelementptr inbounds i8, ptr %155, i64 16
  br label %.thread

162:                                              ; preds = %150
  %163 = tail call ptr @sys_alloc(ptr noundef nonnull @_gm_, i64 noundef %.0122)
  br label %.thread

.thread:                                          ; preds = %118, %82, %115, %36, %162, %126, %148, %153
  %.2 = phi ptr [ %149, %148 ], [ %161, %153 ], [ %163, %162 ], [ %127, %126 ], [ %119, %118 ], [ %61, %82 ], [ %61, %115 ], [ %22, %36 ]
  ret ptr %.2
}

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

; Function Attrs: nounwind uwtable
declare hidden ptr @tmalloc_large(ptr noundef, i64 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_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 = !{!6, !11, i64 24}
!16 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!17 = !{!14, !11, i64 24}
!18 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!19 = !{!14, !10, i64 8}
!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