; LLVM IR from erthink/libmdbx :: src (osal)

; 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.libmdbx_globals = type { %union.bin128, i32, i32, i8, i8, i8, i8, i32, %union.logger_union, %union.pthread_mutex_t, i64, ptr }
%union.bin128 = type { %struct.anon.6 }
%struct.anon.6 = type { i64, i64 }
%union.logger_union = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.osal_mmap = type { %union.anon, i32, i64, i64, i64 }
%union.anon = type { ptr }

@globals = external global %struct.libmdbx_globals, align 8
@.str.40 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [39 x i8], align 1
@__func__.osal_mresize = external hidden unnamed_addr constant [13 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [150 x i8], align 1

; Function Attrs: cold noreturn nounwind optsize uwtable
declare dso_local void @mdbx_assert_fail(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #0

declare void @debug_log(i32 noundef, ptr noundef, i32 noundef, ptr noundef, ...) #1

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

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

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #4

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @osal_ftruncate(i32 noundef, i64 noundef) #5

; Function Attrs: nounwind uwtable
declare hidden i32 @check_mmap_limit(i64 noundef) #5

; Function Attrs: nounwind
declare ptr @mmap64(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) #6

; Function Attrs: nounwind
declare i32 @madvise(ptr noundef, i64 noundef, i32 noundef) #6

; Function Attrs: nounwind
declare i32 @munmap(ptr noundef, i64 noundef) #6

; Function Attrs: nounwind uwtable
define dso_local i32 @osal_mresize(i32 noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3) #5 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store i32 %0, ptr %6, align 4, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !9
  store i64 %2, ptr %8, align 8, !tbaa !11
  store i64 %3, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %16 = load ptr, ptr %7, align 8, !tbaa !9
  %17 = getelementptr inbounds %struct.osal_mmap, ptr %16, i32 0, i32 1
  %18 = load i32, ptr %17, align 8, !tbaa !13
  %19 = load ptr, ptr %7, align 8, !tbaa !9
  %20 = getelementptr inbounds %struct.osal_mmap, ptr %19, i32 0, i32 4
  %21 = call i32 @osal_filesize(i32 noundef %18, ptr noundef %20)
  store i32 %21, ptr %10, align 4, !tbaa !5
  br label %22

22:                                               ; preds = %4
  %23 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !15
  %24 = zext i8 %23 to i32
  %25 = icmp sle i32 4, %24
  %26 = xor i1 %25, true
  %27 = xor i1 %26, true
  %28 = zext i1 %27 to i32
  %29 = sext i32 %28 to i64
  %30 = call i64 @llvm.expect.i64(i64 %29, i64 0)
  %31 = icmp ne i64 %30, 0
  br i1 %31, label %32, label %39

32:                                               ; preds = %22
  %33 = load i32, ptr %6, align 4, !tbaa !5
  %34 = load i64, ptr %8, align 8, !tbaa !11
  %35 = load i64, ptr %9, align 8, !tbaa !11
  %36 = load ptr, ptr %7, align 8, !tbaa !9
  %37 = getelementptr inbounds %struct.osal_mmap, ptr %36, i32 0, i32 4
  %38 = load i64, ptr %37, align 8, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.osal_mresize, i32 noundef 2207, ptr noundef @.str.48, i32 noundef %33, i64 noundef %34, i64 noundef %35, i64 noundef %38)
  br label %39

39:                                               ; preds = %32, %22
  br label %40

40:                                               ; preds = %39
  br label %41

41:                                               ; preds = %40
  br label %42

42:                                               ; preds = %41
  %43 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %44 = zext i8 %43 to i32
  %45 = and i32 %44, 1
  %46 = icmp ne i32 %45, 0
  %47 = xor i1 %46, true
  %48 = xor i1 %47, true
  %49 = zext i1 %48 to i32
  %50 = sext i32 %49 to i64
  %51 = call i64 @llvm.expect.i64(i64 %50, i64 1)
  %52 = icmp ne i64 %51, 0
  br i1 %52, label %53, label %69

53:                                               ; preds = %42
  br label %54

54:                                               ; preds = %53
  %55 = load i64, ptr %8, align 8, !tbaa !11
  %56 = load i64, ptr %9, align 8, !tbaa !11
  %57 = icmp ule i64 %55, %56
  %58 = xor i1 %57, true
  %59 = xor i1 %58, true
  %60 = xor i1 %59, true
  %61 = zext i1 %60 to i32
  %62 = sext i32 %61 to i64
  %63 = call i64 @llvm.expect.i64(i64 %62, i64 0)
  %64 = icmp ne i64 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %54
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.40, ptr noundef @__func__.osal_mresize, i32 noundef 2208) #8
  unreachable

66:                                               ; preds = %54
  br label %67

67:                                               ; preds = %66
  br label %68

68:                                               ; preds = %67
  br label %69

69:                                               ; preds = %68, %42
  br label %70

70:                                               ; preds = %69
  br label %71

71:                                               ; preds = %70
  %72 = load i32, ptr %10, align 4, !tbaa !5
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %78

74:                                               ; preds = %71
  %75 = load ptr, ptr %7, align 8, !tbaa !9
  %76 = getelementptr inbounds %struct.osal_mmap, ptr %75, i32 0, i32 4
  store i64 0, ptr %76, align 8, !tbaa !18
  %77 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %77, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1102

78:                                               ; preds = %71
  %79 = load i32, ptr %6, align 4, !tbaa !5
  %80 = and i32 %79, 131072
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %119

82:                                               ; preds = %78
  %83 = load i64, ptr %8, align 8, !tbaa !11
  %84 = load ptr, ptr %7, align 8, !tbaa !9
  %85 = getelementptr inbounds %struct.osal_mmap, ptr %84, i32 0, i32 4
  %86 = load i64, ptr %85, align 8, !tbaa !18
  %87 = icmp ugt i64 %83, %86
  br i1 %87, label %88, label %89

88:                                               ; preds = %82
  store i32 -30785, ptr %10, align 4, !tbaa !5
  br label %103

89:                                               ; preds = %82
  %90 = load i64, ptr %8, align 8, !tbaa !11
  %91 = load ptr, ptr %7, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.osal_mmap, ptr %91, i32 0, i32 4
  %93 = load i64, ptr %92, align 8, !tbaa !18
  %94 = icmp ult i64 %90, %93
  br i1 %94, label %95, label %102

95:                                               ; preds = %89
  %96 = load ptr, ptr %7, align 8, !tbaa !9
  %97 = getelementptr inbounds %struct.osal_mmap, ptr %96, i32 0, i32 4
  %98 = load i64, ptr %97, align 8, !tbaa !18
  %99 = load i64, ptr %9, align 8, !tbaa !11
  %100 = icmp ugt i64 %98, %99
  br i1 %100, label %101, label %102

101:                                              ; preds = %95
  store i32 1, ptr %10, align 4, !tbaa !5
  br label %102

102:                                              ; preds = %101, %95, %89
  br label %103

103:                                              ; preds = %102, %88
  %104 = load ptr, ptr %7, align 8, !tbaa !9
  %105 = getelementptr inbounds %struct.osal_mmap, ptr %104, i32 0, i32 4
  %106 = load i64, ptr %105, align 8, !tbaa !18
  %107 = load i64, ptr %9, align 8, !tbaa !11
  %108 = icmp ugt i64 %106, %107
  br i1 %108, label %109, label %111

109:                                              ; preds = %103
  %110 = load i64, ptr %9, align 8, !tbaa !11
  br label %115

111:                                              ; preds = %103
  %112 = load ptr, ptr %7, align 8, !tbaa !9
  %113 = getelementptr inbounds %struct.osal_mmap, ptr %112, i32 0, i32 4
  %114 = load i64, ptr %113, align 8, !tbaa !18
  br label %115

115:                                              ; preds = %111, %109
  %116 = phi i64 [ %110, %109 ], [ %114, %111 ]
  %117 = load ptr, ptr %7, align 8, !tbaa !9
  %118 = getelementptr inbounds %struct.osal_mmap, ptr %117, i32 0, i32 3
  store i64 %116, ptr %118, align 8, !tbaa !20
  br label %257

119:                                              ; preds = %78
  %120 = load i64, ptr %8, align 8, !tbaa !11
  %121 = load ptr, ptr %7, align 8, !tbaa !9
  %122 = getelementptr inbounds %struct.osal_mmap, ptr %121, i32 0, i32 4
  %123 = load i64, ptr %122, align 8, !tbaa !18
  %124 = icmp ugt i64 %120, %123
  br i1 %124, label %135, label %125

125:                                              ; preds = %119
  %126 = load i64, ptr %8, align 8, !tbaa !11
  %127 = load ptr, ptr %7, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.osal_mmap, ptr %127, i32 0, i32 4
  %129 = load i64, ptr %128, align 8, !tbaa !18
  %130 = icmp ult i64 %126, %129
  br i1 %130, label %131, label %165

131:                                              ; preds = %125
  %132 = load i32, ptr %6, align 4, !tbaa !5
  %133 = and i32 %132, 1073741824
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %165

135:                                              ; preds = %131, %119
  %136 = load ptr, ptr %7, align 8, !tbaa !9
  %137 = getelementptr inbounds %struct.osal_mmap, ptr %136, i32 0, i32 1
  %138 = load i32, ptr %137, align 8, !tbaa !13
  %139 = load i64, ptr %8, align 8, !tbaa !11
  %140 = call i32 @osal_ftruncate(i32 noundef %138, i64 noundef %139)
  store i32 %140, ptr %10, align 4, !tbaa !5
  br label %141

141:                                              ; preds = %135
  %142 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !15
  %143 = zext i8 %142 to i32
  %144 = icmp sle i32 4, %143
  %145 = xor i1 %144, true
  %146 = xor i1 %145, true
  %147 = zext i1 %146 to i32
  %148 = sext i32 %147 to i64
  %149 = call i64 @llvm.expect.i64(i64 %148, i64 0)
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %154

151:                                              ; preds = %141
  %152 = load i64, ptr %8, align 8, !tbaa !11
  %153 = load i32, ptr %10, align 4, !tbaa !5
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.osal_mresize, i32 noundef 2391, ptr noundef @.str.44, i64 noundef %152, i32 noundef %153)
  br label %154

154:                                              ; preds = %151, %141
  br label %155

155:                                              ; preds = %154
  br label %156

156:                                              ; preds = %155
  %157 = load i32, ptr %10, align 4, !tbaa !5
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %161

159:                                              ; preds = %156
  %160 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %160, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1102

161:                                              ; preds = %156
  %162 = load i64, ptr %8, align 8, !tbaa !11
  %163 = load ptr, ptr %7, align 8, !tbaa !9
  %164 = getelementptr inbounds %struct.osal_mmap, ptr %163, i32 0, i32 4
  store i64 %162, ptr %164, align 8, !tbaa !18
  br label %165

165:                                              ; preds = %161, %131, %125
  %166 = load ptr, ptr %7, align 8, !tbaa !9
  %167 = getelementptr inbounds %struct.osal_mmap, ptr %166, i32 0, i32 3
  %168 = load i64, ptr %167, align 8, !tbaa !20
  %169 = load i64, ptr %8, align 8, !tbaa !11
  %170 = icmp ugt i64 %168, %169
  br i1 %170, label %171, label %241

171:                                              ; preds = %165
  br label %172

172:                                              ; preds = %171
  br label %173

173:                                              ; preds = %172
  %174 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !15
  %175 = zext i8 %174 to i32
  %176 = icmp sle i32 6, %175
  %177 = xor i1 %176, true
  %178 = xor i1 %177, true
  %179 = zext i1 %178 to i32
  %180 = sext i32 %179 to i64
  %181 = call i64 @llvm.expect.i64(i64 %180, i64 0)
  %182 = icmp ne i64 %181, 0
  br i1 %182, label %183, label %210

183:                                              ; preds = %173
  %184 = load ptr, ptr %7, align 8, !tbaa !9
  %185 = getelementptr inbounds %struct.osal_mmap, ptr %184, i32 0, i32 0
  %186 = load ptr, ptr %185, align 8, !tbaa !21
  %187 = ptrtoint ptr %186 to i64
  %188 = load i64, ptr %8, align 8, !tbaa !11
  %189 = add nsw i64 %187, %188
  %190 = inttoptr i64 %189 to ptr
  %191 = load ptr, ptr %7, align 8, !tbaa !9
  %192 = getelementptr inbounds %struct.osal_mmap, ptr %191, i32 0, i32 3
  %193 = load i64, ptr %192, align 8, !tbaa !20
  %194 = load ptr, ptr %7, align 8, !tbaa !9
  %195 = getelementptr inbounds %struct.osal_mmap, ptr %194, i32 0, i32 2
  %196 = load i64, ptr %195, align 8, !tbaa !22
  %197 = icmp ult i64 %193, %196
  br i1 %197, label %198, label %202

198:                                              ; preds = %183
  %199 = load ptr, ptr %7, align 8, !tbaa !9
  %200 = getelementptr inbounds %struct.osal_mmap, ptr %199, i32 0, i32 3
  %201 = load i64, ptr %200, align 8, !tbaa !20
  br label %206

202:                                              ; preds = %183
  %203 = load ptr, ptr %7, align 8, !tbaa !9
  %204 = getelementptr inbounds %struct.osal_mmap, ptr %203, i32 0, i32 2
  %205 = load i64, ptr %204, align 8, !tbaa !22
  br label %206

206:                                              ; preds = %202, %198
  %207 = phi i64 [ %201, %198 ], [ %205, %202 ]
  %208 = load i64, ptr %8, align 8, !tbaa !11
  %209 = sub i64 %207, %208
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.osal_mresize, i32 noundef 2405, ptr noundef @.str.47, ptr noundef %190, i64 noundef %209, i32 noundef 2405)
  br label %210

210:                                              ; preds = %206, %173
  br label %211

211:                                              ; preds = %210
  br label %212

212:                                              ; preds = %211
  %213 = load ptr, ptr %7, align 8, !tbaa !9
  %214 = getelementptr inbounds %struct.osal_mmap, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !21
  %216 = ptrtoint ptr %215 to i64
  %217 = load i64, ptr %8, align 8, !tbaa !11
  %218 = add nsw i64 %216, %217
  %219 = inttoptr i64 %218 to ptr
  %220 = load ptr, ptr %7, align 8, !tbaa !9
  %221 = getelementptr inbounds %struct.osal_mmap, ptr %220, i32 0, i32 3
  %222 = load i64, ptr %221, align 8, !tbaa !20
  %223 = load ptr, ptr %7, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.osal_mmap, ptr %223, i32 0, i32 2
  %225 = load i64, ptr %224, align 8, !tbaa !22
  %226 = icmp ult i64 %222, %225
  br i1 %226, label %227, label %231

227:                                              ; preds = %212
  %228 = load ptr, ptr %7, align 8, !tbaa !9
  %229 = getelementptr inbounds %struct.osal_mmap, ptr %228, i32 0, i32 3
  %230 = load i64, ptr %229, align 8, !tbaa !20
  br label %235

231:                                              ; preds = %212
  %232 = load ptr, ptr %7, align 8, !tbaa !9
  %233 = getelementptr inbounds %struct.osal_mmap, ptr %232, i32 0, i32 2
  %234 = load i64, ptr %233, align 8, !tbaa !22
  br label %235

235:                                              ; preds = %231, %227
  %236 = phi i64 [ %230, %227 ], [ %234, %231 ]
  %237 = load i64, ptr %8, align 8, !tbaa !11
  %238 = sub i64 %236, %237
  br label %239

239:                                              ; preds = %235
  br label %240

240:                                              ; preds = %239
  br label %241

241:                                              ; preds = %240, %165
  %242 = load i64, ptr %8, align 8, !tbaa !11
  %243 = load ptr, ptr %7, align 8, !tbaa !9
  %244 = getelementptr inbounds %struct.osal_mmap, ptr %243, i32 0, i32 2
  %245 = load i64, ptr %244, align 8, !tbaa !22
  %246 = icmp ult i64 %242, %245
  br i1 %246, label %247, label %249

247:                                              ; preds = %241
  %248 = load i64, ptr %8, align 8, !tbaa !11
  br label %253

249:                                              ; preds = %241
  %250 = load ptr, ptr %7, align 8, !tbaa !9
  %251 = getelementptr inbounds %struct.osal_mmap, ptr %250, i32 0, i32 2
  %252 = load i64, ptr %251, align 8, !tbaa !22
  br label %253

253:                                              ; preds = %249, %247
  %254 = phi i64 [ %248, %247 ], [ %252, %249 ]
  %255 = load ptr, ptr %7, align 8, !tbaa !9
  %256 = getelementptr inbounds %struct.osal_mmap, ptr %255, i32 0, i32 3
  store i64 %254, ptr %256, align 8, !tbaa !20
  br label %257

257:                                              ; preds = %253, %115
  %258 = load i64, ptr %9, align 8, !tbaa !11
  %259 = load ptr, ptr %7, align 8, !tbaa !9
  %260 = getelementptr inbounds %struct.osal_mmap, ptr %259, i32 0, i32 2
  %261 = load i64, ptr %260, align 8, !tbaa !22
  %262 = icmp eq i64 %258, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %257
  %264 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %264, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1102

265:                                              ; preds = %257
  %266 = load i64, ptr %9, align 8, !tbaa !11
  %267 = load ptr, ptr %7, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.osal_mmap, ptr %267, i32 0, i32 2
  %269 = load i64, ptr %268, align 8, !tbaa !22
  %270 = icmp ult i64 %266, %269
  br i1 %270, label %271, label %330

271:                                              ; preds = %265
  %272 = load ptr, ptr %7, align 8, !tbaa !9
  %273 = getelementptr inbounds %struct.osal_mmap, ptr %272, i32 0, i32 0
  %274 = load ptr, ptr %273, align 8, !tbaa !21
  %275 = ptrtoint ptr %274 to i64
  %276 = load i64, ptr %9, align 8, !tbaa !11
  %277 = add nsw i64 %275, %276
  %278 = inttoptr i64 %277 to ptr
  %279 = load ptr, ptr %7, align 8, !tbaa !9
  %280 = getelementptr inbounds %struct.osal_mmap, ptr %279, i32 0, i32 2
  %281 = load i64, ptr %280, align 8, !tbaa !22
  %282 = load i64, ptr %9, align 8, !tbaa !11
  %283 = sub i64 %281, %282
  %284 = call i32 @munmap(ptr noundef %278, i64 noundef %283) #7
  %285 = icmp ne i32 %284, 0
  %286 = xor i1 %285, true
  %287 = xor i1 %286, true
  %288 = zext i1 %287 to i32
  %289 = sext i32 %288 to i64
  %290 = call i64 @llvm.expect.i64(i64 %289, i64 0)
  %291 = icmp ne i64 %290, 0
  br i1 %291, label %292, label %325

292:                                              ; preds = %271
  br label %293

293:                                              ; preds = %292
  %294 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %295 = zext i8 %294 to i32
  %296 = and i32 %295, 1
  %297 = icmp ne i32 %296, 0
  %298 = xor i1 %297, true
  %299 = xor i1 %298, true
  %300 = zext i1 %299 to i32
  %301 = sext i32 %300 to i64
  %302 = call i64 @llvm.expect.i64(i64 %301, i64 1)
  %303 = icmp ne i64 %302, 0
  br i1 %303, label %304, label %320

304:                                              ; preds = %293
  br label %305

305:                                              ; preds = %304
  %306 = call ptr @__errno_location() #9
  %307 = load i32, ptr %306, align 4, !tbaa !5
  %308 = icmp ne i32 %307, 0
  %309 = xor i1 %308, true
  %310 = xor i1 %309, true
  %311 = xor i1 %310, true
  %312 = zext i1 %311 to i32
  %313 = sext i32 %312 to i64
  %314 = call i64 @llvm.expect.i64(i64 %313, i64 0)
  %315 = icmp ne i64 %314, 0
  br i1 %315, label %316, label %317

316:                                              ; preds = %305
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.46, ptr noundef @__func__.osal_mresize, i32 noundef 2417) #8
  unreachable

317:                                              ; preds = %305
  br label %318

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318
  br label %320

320:                                              ; preds = %319, %293
  br label %321

321:                                              ; preds = %320
  br label %322

322:                                              ; preds = %321
  %323 = call ptr @__errno_location() #9
  %324 = load i32, ptr %323, align 4, !tbaa !5
  store i32 %324, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1102

325:                                              ; preds = %271
  %326 = load i64, ptr %9, align 8, !tbaa !11
  %327 = load ptr, ptr %7, align 8, !tbaa !9
  %328 = getelementptr inbounds %struct.osal_mmap, ptr %327, i32 0, i32 2
  store i64 %326, ptr %328, align 8, !tbaa !22
  %329 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %329, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1102

330:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %331 = load i64, ptr %9, align 8, !tbaa !11
  %332 = call i32 @check_mmap_limit(i64 noundef %331)
  store i32 %332, ptr %12, align 4, !tbaa !5
  %333 = load i32, ptr %12, align 4, !tbaa !5
  %334 = icmp ne i32 %333, 0
  %335 = xor i1 %334, true
  %336 = xor i1 %335, true
  %337 = zext i1 %336 to i32
  %338 = sext i32 %337 to i64
  %339 = call i64 @llvm.expect.i64(i64 %338, i64 0)
  %340 = icmp ne i64 %339, 0
  br i1 %340, label %341, label %343

341:                                              ; preds = %330
  %342 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %342, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1101

343:                                              ; preds = %330
  br label %344

344:                                              ; preds = %343
  %345 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %346 = zext i8 %345 to i32
  %347 = and i32 %346, 1
  %348 = icmp ne i32 %347, 0
  %349 = xor i1 %348, true
  %350 = xor i1 %349, true
  %351 = zext i1 %350 to i32
  %352 = sext i32 %351 to i64
  %353 = call i64 @llvm.expect.i64(i64 %352, i64 1)
  %354 = icmp ne i64 %353, 0
  br i1 %354, label %355, label %373

355:                                              ; preds = %344
  br label %356

356:                                              ; preds = %355
  %357 = load i64, ptr %9, align 8, !tbaa !11
  %358 = load ptr, ptr %7, align 8, !tbaa !9
  %359 = getelementptr inbounds %struct.osal_mmap, ptr %358, i32 0, i32 2
  %360 = load i64, ptr %359, align 8, !tbaa !22
  %361 = icmp ugt i64 %357, %360
  %362 = xor i1 %361, true
  %363 = xor i1 %362, true
  %364 = xor i1 %363, true
  %365 = zext i1 %364 to i32
  %366 = sext i32 %365 to i64
  %367 = call i64 @llvm.expect.i64(i64 %366, i64 0)
  %368 = icmp ne i64 %367, 0
  br i1 %368, label %369, label %370

369:                                              ; preds = %356
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.49, ptr noundef @__func__.osal_mresize, i32 noundef 2428) #8
  unreachable

370:                                              ; preds = %356
  br label %371

371:                                              ; preds = %370
  br label %372

372:                                              ; preds = %371
  br label %373

373:                                              ; preds = %372, %344
  br label %374

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  store ptr inttoptr (i64 -1 to ptr), ptr %13, align 8, !tbaa !9
  %376 = load ptr, ptr %7, align 8, !tbaa !9
  %377 = getelementptr inbounds %struct.osal_mmap, ptr %376, i32 0, i32 0
  %378 = load ptr, ptr %377, align 8, !tbaa !21
  %379 = load ptr, ptr %7, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct.osal_mmap, ptr %379, i32 0, i32 2
  %381 = load i64, ptr %380, align 8, !tbaa !22
  %382 = load i64, ptr %9, align 8, !tbaa !11
  %383 = load i32, ptr %6, align 4, !tbaa !5
  %384 = and i32 %383, 256
  %385 = icmp ne i32 %384, 0
  %386 = zext i1 %385 to i64
  %387 = select i1 %385, i32 1, i32 0
  %388 = call ptr (ptr, i64, i64, i32, ...) @mremap(ptr noundef %378, i64 noundef %381, i64 noundef %382, i32 noundef %387) #7
  store ptr %388, ptr %13, align 8, !tbaa !9
  %389 = load ptr, ptr %13, align 8, !tbaa !9
  %390 = icmp eq ptr %389, inttoptr (i64 -1 to ptr)
  br i1 %390, label %391, label %428

391:                                              ; preds = %375
  %392 = call ptr @__errno_location() #9
  %393 = load i32, ptr %392, align 4, !tbaa !5
  store i32 %393, ptr %12, align 4, !tbaa !5
  br label %394

394:                                              ; preds = %391
  %395 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %396 = zext i8 %395 to i32
  %397 = and i32 %396, 1
  %398 = icmp ne i32 %397, 0
  %399 = xor i1 %398, true
  %400 = xor i1 %399, true
  %401 = zext i1 %400 to i32
  %402 = sext i32 %401 to i64
  %403 = call i64 @llvm.expect.i64(i64 %402, i64 1)
  %404 = icmp ne i64 %403, 0
  br i1 %404, label %405, label %420

405:                                              ; preds = %394
  br label %406

406:                                              ; preds = %405
  %407 = load i32, ptr %12, align 4, !tbaa !5
  %408 = icmp ne i32 %407, 0
  %409 = xor i1 %408, true
  %410 = xor i1 %409, true
  %411 = xor i1 %410, true
  %412 = zext i1 %411 to i32
  %413 = sext i32 %412 to i64
  %414 = call i64 @llvm.expect.i64(i64 %413, i64 0)
  %415 = icmp ne i64 %414, 0
  br i1 %415, label %416, label %417

416:                                              ; preds = %406
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.50, ptr noundef @__func__.osal_mresize, i32 noundef 2439) #8
  unreachable

417:                                              ; preds = %406
  br label %418

418:                                              ; preds = %417
  br label %419

419:                                              ; preds = %418
  br label %420

420:                                              ; preds = %419, %394
  br label %421

421:                                              ; preds = %420
  br label %422

422:                                              ; preds = %421
  %423 = load i32, ptr %12, align 4, !tbaa !5
  switch i32 %423, label %424 [
    i32 0, label %426
    i32 11, label %426
    i32 12, label %426
    i32 14, label %427
  ]

424:                                              ; preds = %422
  %425 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %425, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1100

426:                                              ; preds = %422, %422, %422
  store i32 -30785, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1100

427:                                              ; preds = %422
  br label %428

428:                                              ; preds = %427, %375
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %429 = load i32, ptr %6, align 4, !tbaa !5
  %430 = and i32 %429, 1114112
  %431 = icmp eq i32 %430, 1114112
  %432 = zext i1 %431 to i64
  %433 = select i1 %431, i32 0, i32 0
  %434 = or i32 16385, %433
  store i32 %434, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  %435 = load i32, ptr %6, align 4, !tbaa !5
  %436 = and i32 %435, 524288
  %437 = icmp ne i32 %436, 0
  %438 = zext i1 %437 to i64
  %439 = select i1 %437, i32 3, i32 1
  store i32 %439, ptr %15, align 4, !tbaa !5
  %440 = load ptr, ptr %13, align 8, !tbaa !9
  %441 = icmp eq ptr %440, inttoptr (i64 -1 to ptr)
  br i1 %441, label %442, label %574

442:                                              ; preds = %428
  %443 = load ptr, ptr %7, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.osal_mmap, ptr %443, i32 0, i32 0
  %445 = load ptr, ptr %444, align 8, !tbaa !21
  %446 = ptrtoint ptr %445 to i64
  %447 = load ptr, ptr %7, align 8, !tbaa !9
  %448 = getelementptr inbounds %struct.osal_mmap, ptr %447, i32 0, i32 2
  %449 = load i64, ptr %448, align 8, !tbaa !22
  %450 = add nsw i64 %446, %449
  %451 = inttoptr i64 %450 to ptr
  %452 = load i64, ptr %9, align 8, !tbaa !11
  %453 = load ptr, ptr %7, align 8, !tbaa !9
  %454 = getelementptr inbounds %struct.osal_mmap, ptr %453, i32 0, i32 2
  %455 = load i64, ptr %454, align 8, !tbaa !22
  %456 = sub i64 %452, %455
  %457 = load i32, ptr %15, align 4, !tbaa !5
  %458 = load i32, ptr %14, align 4, !tbaa !5
  %459 = or i32 %458, 1048576
  %460 = load ptr, ptr %7, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct.osal_mmap, ptr %460, i32 0, i32 1
  %462 = load i32, ptr %461, align 8, !tbaa !13
  %463 = load ptr, ptr %7, align 8, !tbaa !9
  %464 = getelementptr inbounds %struct.osal_mmap, ptr %463, i32 0, i32 2
  %465 = load i64, ptr %464, align 8, !tbaa !22
  %466 = call ptr @mmap64(ptr noundef %451, i64 noundef %456, i32 noundef %457, i32 noundef %459, i32 noundef %462, i64 noundef %465) #7
  store ptr %466, ptr %13, align 8, !tbaa !9
  %467 = load ptr, ptr %13, align 8, !tbaa !9
  %468 = load ptr, ptr %7, align 8, !tbaa !9
  %469 = getelementptr inbounds %struct.osal_mmap, ptr %468, i32 0, i32 0
  %470 = load ptr, ptr %469, align 8, !tbaa !21
  %471 = ptrtoint ptr %470 to i64
  %472 = load ptr, ptr %7, align 8, !tbaa !9
  %473 = getelementptr inbounds %struct.osal_mmap, ptr %472, i32 0, i32 2
  %474 = load i64, ptr %473, align 8, !tbaa !22
  %475 = add nsw i64 %471, %474
  %476 = inttoptr i64 %475 to ptr
  %477 = icmp eq ptr %467, %476
  br i1 %477, label %478, label %482

478:                                              ; preds = %442
  %479 = load ptr, ptr %7, align 8, !tbaa !9
  %480 = getelementptr inbounds %struct.osal_mmap, ptr %479, i32 0, i32 0
  %481 = load ptr, ptr %480, align 8, !tbaa !21
  store ptr %481, ptr %13, align 8, !tbaa !9
  br label %573

482:                                              ; preds = %442
  %483 = load ptr, ptr %13, align 8, !tbaa !9
  %484 = icmp ne ptr %483, inttoptr (i64 -1 to ptr)
  br i1 %484, label %485, label %534

485:                                              ; preds = %482
  %486 = load ptr, ptr %13, align 8, !tbaa !9
  %487 = load i64, ptr %9, align 8, !tbaa !11
  %488 = load ptr, ptr %7, align 8, !tbaa !9
  %489 = getelementptr inbounds %struct.osal_mmap, ptr %488, i32 0, i32 2
  %490 = load i64, ptr %489, align 8, !tbaa !22
  %491 = sub i64 %487, %490
  %492 = call i32 @munmap(ptr noundef %486, i64 noundef %491) #7
  %493 = icmp ne i32 %492, 0
  %494 = xor i1 %493, true
  %495 = xor i1 %494, true
  %496 = zext i1 %495 to i32
  %497 = sext i32 %496 to i64
  %498 = call i64 @llvm.expect.i64(i64 %497, i64 0)
  %499 = icmp ne i64 %498, 0
  br i1 %499, label %500, label %533

500:                                              ; preds = %485
  br label %501

501:                                              ; preds = %500
  %502 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %503 = zext i8 %502 to i32
  %504 = and i32 %503, 1
  %505 = icmp ne i32 %504, 0
  %506 = xor i1 %505, true
  %507 = xor i1 %506, true
  %508 = zext i1 %507 to i32
  %509 = sext i32 %508 to i64
  %510 = call i64 @llvm.expect.i64(i64 %509, i64 1)
  %511 = icmp ne i64 %510, 0
  br i1 %511, label %512, label %528

512:                                              ; preds = %501
  br label %513

513:                                              ; preds = %512
  %514 = call ptr @__errno_location() #9
  %515 = load i32, ptr %514, align 4, !tbaa !5
  %516 = icmp ne i32 %515, 0
  %517 = xor i1 %516, true
  %518 = xor i1 %517, true
  %519 = xor i1 %518, true
  %520 = zext i1 %519 to i32
  %521 = sext i32 %520 to i64
  %522 = call i64 @llvm.expect.i64(i64 %521, i64 0)
  %523 = icmp ne i64 %522, 0
  br i1 %523, label %524, label %525

524:                                              ; preds = %513
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.46, ptr noundef @__func__.osal_mresize, i32 noundef 2467) #8
  unreachable

525:                                              ; preds = %513
  br label %526

526:                                              ; preds = %525
  br label %527

527:                                              ; preds = %526
  br label %528

528:                                              ; preds = %527, %501
  br label %529

529:                                              ; preds = %528
  br label %530

530:                                              ; preds = %529
  %531 = call ptr @__errno_location() #9
  %532 = load i32, ptr %531, align 4, !tbaa !5
  store i32 %532, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

533:                                              ; preds = %485
  store ptr inttoptr (i64 -1 to ptr), ptr %13, align 8, !tbaa !9
  br label %572

534:                                              ; preds = %482
  %535 = call ptr @__errno_location() #9
  %536 = load i32, ptr %535, align 4, !tbaa !5
  store i32 %536, ptr %12, align 4, !tbaa !5
  br label %537

537:                                              ; preds = %534
  %538 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %539 = zext i8 %538 to i32
  %540 = and i32 %539, 1
  %541 = icmp ne i32 %540, 0
  %542 = xor i1 %541, true
  %543 = xor i1 %542, true
  %544 = zext i1 %543 to i32
  %545 = sext i32 %544 to i64
  %546 = call i64 @llvm.expect.i64(i64 %545, i64 1)
  %547 = icmp ne i64 %546, 0
  br i1 %547, label %548, label %563

548:                                              ; preds = %537
  br label %549

549:                                              ; preds = %548
  %550 = load i32, ptr %12, align 4, !tbaa !5
  %551 = icmp ne i32 %550, 0
  %552 = xor i1 %551, true
  %553 = xor i1 %552, true
  %554 = xor i1 %553, true
  %555 = zext i1 %554 to i32
  %556 = sext i32 %555 to i64
  %557 = call i64 @llvm.expect.i64(i64 %556, i64 0)
  %558 = icmp ne i64 %557, 0
  br i1 %558, label %559, label %560

559:                                              ; preds = %549
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.50, ptr noundef @__func__.osal_mresize, i32 noundef 2473) #8
  unreachable

560:                                              ; preds = %549
  br label %561

561:                                              ; preds = %560
  br label %562

562:                                              ; preds = %561
  br label %563

563:                                              ; preds = %562, %537
  br label %564

564:                                              ; preds = %563
  br label %565

565:                                              ; preds = %564
  %566 = load i32, ptr %12, align 4, !tbaa !5
  switch i32 %566, label %567 [
    i32 0, label %569
    i32 11, label %569
    i32 12, label %569
    i32 17, label %570
    i32 22, label %570
  ]

567:                                              ; preds = %565
  %568 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %568, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

569:                                              ; preds = %565, %565, %565
  store i32 -30785, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

570:                                              ; preds = %565, %565
  br label %571

571:                                              ; preds = %570
  br label %572

572:                                              ; preds = %571, %533
  br label %573

573:                                              ; preds = %572, %478
  br label %574

574:                                              ; preds = %573, %428
  %575 = load ptr, ptr %13, align 8, !tbaa !9
  %576 = icmp eq ptr %575, inttoptr (i64 -1 to ptr)
  br i1 %576, label %577, label %849

577:                                              ; preds = %574
  %578 = load i32, ptr %6, align 4, !tbaa !5
  %579 = and i32 %578, 512
  %580 = icmp eq i32 %579, 0
  br i1 %580, label %581, label %582

581:                                              ; preds = %577
  store i32 -30785, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

582:                                              ; preds = %577
  %583 = load ptr, ptr %7, align 8, !tbaa !9
  %584 = getelementptr inbounds %struct.osal_mmap, ptr %583, i32 0, i32 0
  %585 = load ptr, ptr %584, align 8, !tbaa !21
  %586 = load ptr, ptr %7, align 8, !tbaa !9
  %587 = getelementptr inbounds %struct.osal_mmap, ptr %586, i32 0, i32 2
  %588 = load i64, ptr %587, align 8, !tbaa !22
  %589 = call i32 @munmap(ptr noundef %585, i64 noundef %588) #7
  %590 = icmp ne i32 %589, 0
  %591 = xor i1 %590, true
  %592 = xor i1 %591, true
  %593 = zext i1 %592 to i32
  %594 = sext i32 %593 to i64
  %595 = call i64 @llvm.expect.i64(i64 %594, i64 0)
  %596 = icmp ne i64 %595, 0
  br i1 %596, label %597, label %630

597:                                              ; preds = %582
  br label %598

598:                                              ; preds = %597
  %599 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %600 = zext i8 %599 to i32
  %601 = and i32 %600, 1
  %602 = icmp ne i32 %601, 0
  %603 = xor i1 %602, true
  %604 = xor i1 %603, true
  %605 = zext i1 %604 to i32
  %606 = sext i32 %605 to i64
  %607 = call i64 @llvm.expect.i64(i64 %606, i64 1)
  %608 = icmp ne i64 %607, 0
  br i1 %608, label %609, label %625

609:                                              ; preds = %598
  br label %610

610:                                              ; preds = %609
  %611 = call ptr @__errno_location() #9
  %612 = load i32, ptr %611, align 4, !tbaa !5
  %613 = icmp ne i32 %612, 0
  %614 = xor i1 %613, true
  %615 = xor i1 %614, true
  %616 = xor i1 %615, true
  %617 = zext i1 %616 to i32
  %618 = sext i32 %617 to i64
  %619 = call i64 @llvm.expect.i64(i64 %618, i64 0)
  %620 = icmp ne i64 %619, 0
  br i1 %620, label %621, label %622

621:                                              ; preds = %610
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.46, ptr noundef @__func__.osal_mresize, i32 noundef 2497) #8
  unreachable

622:                                              ; preds = %610
  br label %623

623:                                              ; preds = %622
  br label %624

624:                                              ; preds = %623
  br label %625

625:                                              ; preds = %624, %598
  br label %626

626:                                              ; preds = %625
  br label %627

627:                                              ; preds = %626
  %628 = call ptr @__errno_location() #9
  %629 = load i32, ptr %628, align 4, !tbaa !5
  store i32 %629, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

630:                                              ; preds = %582
  %631 = load ptr, ptr %7, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.osal_mmap, ptr %631, i32 0, i32 0
  %633 = load ptr, ptr %632, align 8, !tbaa !21
  %634 = load i64, ptr %9, align 8, !tbaa !11
  %635 = load i32, ptr %15, align 4, !tbaa !5
  %636 = load i32, ptr %6, align 4, !tbaa !5
  %637 = and i32 %636, 256
  %638 = icmp ne i32 %637, 0
  br i1 %638, label %639, label %641

639:                                              ; preds = %630
  %640 = load i32, ptr %14, align 4, !tbaa !5
  br label %644

641:                                              ; preds = %630
  %642 = load i32, ptr %14, align 4, !tbaa !5
  %643 = or i32 %642, 1048576
  br label %644

644:                                              ; preds = %641, %639
  %645 = phi i32 [ %640, %639 ], [ %643, %641 ]
  %646 = load ptr, ptr %7, align 8, !tbaa !9
  %647 = getelementptr inbounds %struct.osal_mmap, ptr %646, i32 0, i32 1
  %648 = load i32, ptr %647, align 8, !tbaa !13
  %649 = call ptr @mmap64(ptr noundef %633, i64 noundef %634, i32 noundef %635, i32 noundef %645, i32 noundef %648, i64 noundef 0) #7
  store ptr %649, ptr %13, align 8, !tbaa !9
  %650 = load ptr, ptr %13, align 8, !tbaa !9
  %651 = icmp eq ptr %650, inttoptr (i64 -1 to ptr)
  %652 = xor i1 %651, true
  %653 = xor i1 %652, true
  %654 = zext i1 %653 to i32
  %655 = sext i32 %654 to i64
  %656 = call i64 @llvm.expect.i64(i64 %655, i64 0)
  %657 = icmp ne i64 %656, 0
  br i1 %657, label %658, label %678

658:                                              ; preds = %644
  %659 = load i32, ptr %6, align 4, !tbaa !5
  %660 = and i32 %659, 256
  %661 = icmp ne i32 %660, 0
  br i1 %661, label %678, label %662

662:                                              ; preds = %658
  %663 = call ptr @__errno_location() #9
  %664 = load i32, ptr %663, align 4, !tbaa !5
  %665 = icmp eq i32 %664, 22
  br i1 %665, label %666, label %678

666:                                              ; preds = %662
  %667 = load ptr, ptr %7, align 8, !tbaa !9
  %668 = getelementptr inbounds %struct.osal_mmap, ptr %667, i32 0, i32 0
  %669 = load ptr, ptr %668, align 8, !tbaa !21
  %670 = load i64, ptr %9, align 8, !tbaa !11
  %671 = load i32, ptr %15, align 4, !tbaa !5
  %672 = load i32, ptr %14, align 4, !tbaa !5
  %673 = or i32 %672, 16
  %674 = load ptr, ptr %7, align 8, !tbaa !9
  %675 = getelementptr inbounds %struct.osal_mmap, ptr %674, i32 0, i32 1
  %676 = load i32, ptr %675, align 8, !tbaa !13
  %677 = call ptr @mmap64(ptr noundef %669, i64 noundef %670, i32 noundef %671, i32 noundef %673, i32 noundef %676, i64 noundef 0) #7
  store ptr %677, ptr %13, align 8, !tbaa !9
  br label %678

678:                                              ; preds = %666, %662, %658, %644
  %679 = load ptr, ptr %13, align 8, !tbaa !9
  %680 = icmp eq ptr %679, inttoptr (i64 -1 to ptr)
  %681 = xor i1 %680, true
  %682 = xor i1 %681, true
  %683 = zext i1 %682 to i32
  %684 = sext i32 %683 to i64
  %685 = call i64 @llvm.expect.i64(i64 %684, i64 0)
  %686 = icmp ne i64 %685, 0
  br i1 %686, label %687, label %848

687:                                              ; preds = %678
  %688 = load ptr, ptr %7, align 8, !tbaa !9
  %689 = getelementptr inbounds %struct.osal_mmap, ptr %688, i32 0, i32 0
  %690 = load ptr, ptr %689, align 8, !tbaa !21
  %691 = load ptr, ptr %7, align 8, !tbaa !9
  %692 = getelementptr inbounds %struct.osal_mmap, ptr %691, i32 0, i32 2
  %693 = load i64, ptr %692, align 8, !tbaa !22
  %694 = load i32, ptr %15, align 4, !tbaa !5
  %695 = load i32, ptr %6, align 4, !tbaa !5
  %696 = and i32 %695, 256
  %697 = icmp ne i32 %696, 0
  br i1 %697, label %698, label %700

698:                                              ; preds = %687
  %699 = load i32, ptr %14, align 4, !tbaa !5
  br label %703

700:                                              ; preds = %687
  %701 = load i32, ptr %14, align 4, !tbaa !5
  %702 = or i32 %701, 1048576
  br label %703

703:                                              ; preds = %700, %698
  %704 = phi i32 [ %699, %698 ], [ %702, %700 ]
  %705 = load ptr, ptr %7, align 8, !tbaa !9
  %706 = getelementptr inbounds %struct.osal_mmap, ptr %705, i32 0, i32 1
  %707 = load i32, ptr %706, align 8, !tbaa !13
  %708 = call ptr @mmap64(ptr noundef %690, i64 noundef %693, i32 noundef %694, i32 noundef %704, i32 noundef %707, i64 noundef 0) #7
  store ptr %708, ptr %13, align 8, !tbaa !9
  %709 = load ptr, ptr %13, align 8, !tbaa !9
  %710 = icmp eq ptr %709, inttoptr (i64 -1 to ptr)
  %711 = xor i1 %710, true
  %712 = xor i1 %711, true
  %713 = zext i1 %712 to i32
  %714 = sext i32 %713 to i64
  %715 = call i64 @llvm.expect.i64(i64 %714, i64 0)
  %716 = icmp ne i64 %715, 0
  br i1 %716, label %717, label %739

717:                                              ; preds = %703
  %718 = load i32, ptr %6, align 4, !tbaa !5
  %719 = and i32 %718, 256
  %720 = icmp ne i32 %719, 0
  br i1 %720, label %739, label %721

721:                                              ; preds = %717
  %722 = call ptr @__errno_location() #9
  %723 = load i32, ptr %722, align 4, !tbaa !5
  %724 = icmp eq i32 %723, 22
  br i1 %724, label %725, label %739

725:                                              ; preds = %721
  %726 = load ptr, ptr %7, align 8, !tbaa !9
  %727 = getelementptr inbounds %struct.osal_mmap, ptr %726, i32 0, i32 0
  %728 = load ptr, ptr %727, align 8, !tbaa !21
  %729 = load ptr, ptr %7, align 8, !tbaa !9
  %730 = getelementptr inbounds %struct.osal_mmap, ptr %729, i32 0, i32 2
  %731 = load i64, ptr %730, align 8, !tbaa !22
  %732 = load i32, ptr %15, align 4, !tbaa !5
  %733 = load i32, ptr %14, align 4, !tbaa !5
  %734 = or i32 %733, 16
  %735 = load ptr, ptr %7, align 8, !tbaa !9
  %736 = getelementptr inbounds %struct.osal_mmap, ptr %735, i32 0, i32 1
  %737 = load i32, ptr %736, align 8, !tbaa !13
  %738 = call ptr @mmap64(ptr noundef %728, i64 noundef %731, i32 noundef %732, i32 noundef %734, i32 noundef %737, i64 noundef 0) #7
  store ptr %738, ptr %13, align 8, !tbaa !9
  br label %739

739:                                              ; preds = %725, %721, %717, %703
  %740 = load ptr, ptr %13, align 8, !tbaa !9
  %741 = icmp eq ptr %740, inttoptr (i64 -1 to ptr)
  %742 = xor i1 %741, true
  %743 = xor i1 %742, true
  %744 = zext i1 %743 to i32
  %745 = sext i32 %744 to i64
  %746 = call i64 @llvm.expect.i64(i64 %745, i64 0)
  %747 = icmp ne i64 %746, 0
  br i1 %747, label %748, label %844

748:                                              ; preds = %739
  br label %749

749:                                              ; preds = %748
  br label %750

750:                                              ; preds = %749
  %751 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !15
  %752 = zext i8 %751 to i32
  %753 = icmp sle i32 6, %752
  %754 = xor i1 %753, true
  %755 = xor i1 %754, true
  %756 = zext i1 %755 to i32
  %757 = sext i32 %756 to i64
  %758 = call i64 @llvm.expect.i64(i64 %757, i64 0)
  %759 = icmp ne i64 %758, 0
  br i1 %759, label %760, label %781

760:                                              ; preds = %750
  %761 = load ptr, ptr %7, align 8, !tbaa !9
  %762 = getelementptr inbounds %struct.osal_mmap, ptr %761, i32 0, i32 0
  %763 = load ptr, ptr %762, align 8, !tbaa !21
  %764 = load ptr, ptr %7, align 8, !tbaa !9
  %765 = getelementptr inbounds %struct.osal_mmap, ptr %764, i32 0, i32 3
  %766 = load i64, ptr %765, align 8, !tbaa !20
  %767 = load ptr, ptr %7, align 8, !tbaa !9
  %768 = getelementptr inbounds %struct.osal_mmap, ptr %767, i32 0, i32 2
  %769 = load i64, ptr %768, align 8, !tbaa !22
  %770 = icmp ult i64 %766, %769
  br i1 %770, label %771, label %775

771:                                              ; preds = %760
  %772 = load ptr, ptr %7, align 8, !tbaa !9
  %773 = getelementptr inbounds %struct.osal_mmap, ptr %772, i32 0, i32 3
  %774 = load i64, ptr %773, align 8, !tbaa !20
  br label %779

775:                                              ; preds = %760
  %776 = load ptr, ptr %7, align 8, !tbaa !9
  %777 = getelementptr inbounds %struct.osal_mmap, ptr %776, i32 0, i32 2
  %778 = load i64, ptr %777, align 8, !tbaa !22
  br label %779

779:                                              ; preds = %775, %771
  %780 = phi i64 [ %774, %771 ], [ %778, %775 ]
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.osal_mresize, i32 noundef 2529, ptr noundef @.str.47, ptr noundef %763, i64 noundef %780, i32 noundef 2529)
  br label %781

781:                                              ; preds = %779, %750
  br label %782

782:                                              ; preds = %781
  br label %783

783:                                              ; preds = %782
  %784 = load ptr, ptr %7, align 8, !tbaa !9
  %785 = getelementptr inbounds %struct.osal_mmap, ptr %784, i32 0, i32 0
  %786 = load ptr, ptr %785, align 8, !tbaa !21
  %787 = load ptr, ptr %7, align 8, !tbaa !9
  %788 = getelementptr inbounds %struct.osal_mmap, ptr %787, i32 0, i32 3
  %789 = load i64, ptr %788, align 8, !tbaa !20
  %790 = load ptr, ptr %7, align 8, !tbaa !9
  %791 = getelementptr inbounds %struct.osal_mmap, ptr %790, i32 0, i32 2
  %792 = load i64, ptr %791, align 8, !tbaa !22
  %793 = icmp ult i64 %789, %792
  br i1 %793, label %794, label %798

794:                                              ; preds = %783
  %795 = load ptr, ptr %7, align 8, !tbaa !9
  %796 = getelementptr inbounds %struct.osal_mmap, ptr %795, i32 0, i32 3
  %797 = load i64, ptr %796, align 8, !tbaa !20
  br label %802

798:                                              ; preds = %783
  %799 = load ptr, ptr %7, align 8, !tbaa !9
  %800 = getelementptr inbounds %struct.osal_mmap, ptr %799, i32 0, i32 2
  %801 = load i64, ptr %800, align 8, !tbaa !22
  br label %802

802:                                              ; preds = %798, %794
  %803 = phi i64 [ %797, %794 ], [ %801, %798 ]
  br label %804

804:                                              ; preds = %802
  br label %805

805:                                              ; preds = %804
  %806 = load ptr, ptr %7, align 8, !tbaa !9
  %807 = getelementptr inbounds %struct.osal_mmap, ptr %806, i32 0, i32 2
  store i64 0, ptr %807, align 8, !tbaa !22
  %808 = load ptr, ptr %7, align 8, !tbaa !9
  %809 = getelementptr inbounds %struct.osal_mmap, ptr %808, i32 0, i32 3
  store i64 0, ptr %809, align 8, !tbaa !20
  %810 = load ptr, ptr %7, align 8, !tbaa !9
  %811 = getelementptr inbounds %struct.osal_mmap, ptr %810, i32 0, i32 0
  store ptr null, ptr %811, align 8, !tbaa !21
  br label %812

812:                                              ; preds = %805
  %813 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %814 = zext i8 %813 to i32
  %815 = and i32 %814, 1
  %816 = icmp ne i32 %815, 0
  %817 = xor i1 %816, true
  %818 = xor i1 %817, true
  %819 = zext i1 %818 to i32
  %820 = sext i32 %819 to i64
  %821 = call i64 @llvm.expect.i64(i64 %820, i64 1)
  %822 = icmp ne i64 %821, 0
  br i1 %822, label %823, label %839

823:                                              ; preds = %812
  br label %824

824:                                              ; preds = %823
  %825 = call ptr @__errno_location() #9
  %826 = load i32, ptr %825, align 4, !tbaa !5
  %827 = icmp ne i32 %826, 0
  %828 = xor i1 %827, true
  %829 = xor i1 %828, true
  %830 = xor i1 %829, true
  %831 = zext i1 %830 to i32
  %832 = sext i32 %831 to i64
  %833 = call i64 @llvm.expect.i64(i64 %832, i64 0)
  %834 = icmp ne i64 %833, 0
  br i1 %834, label %835, label %836

835:                                              ; preds = %824
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.46, ptr noundef @__func__.osal_mresize, i32 noundef 2533) #8
  unreachable

836:                                              ; preds = %824
  br label %837

837:                                              ; preds = %836
  br label %838

838:                                              ; preds = %837
  br label %839

839:                                              ; preds = %838, %812
  br label %840

840:                                              ; preds = %839
  br label %841

841:                                              ; preds = %840
  %842 = call ptr @__errno_location() #9
  %843 = load i32, ptr %842, align 4, !tbaa !5
  store i32 %843, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

844:                                              ; preds = %739
  store i32 -30785, ptr %10, align 4, !tbaa !5
  %845 = load ptr, ptr %7, align 8, !tbaa !9
  %846 = getelementptr inbounds %struct.osal_mmap, ptr %845, i32 0, i32 2
  %847 = load i64, ptr %846, align 8, !tbaa !22
  store i64 %847, ptr %9, align 8, !tbaa !11
  br label %848

848:                                              ; preds = %844, %678
  br label %849

849:                                              ; preds = %848, %574
  br label %850

850:                                              ; preds = %849
  %851 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %852 = zext i8 %851 to i32
  %853 = and i32 %852, 1
  %854 = icmp ne i32 %853, 0
  %855 = xor i1 %854, true
  %856 = xor i1 %855, true
  %857 = zext i1 %856 to i32
  %858 = sext i32 %857 to i64
  %859 = call i64 @llvm.expect.i64(i64 %858, i64 1)
  %860 = icmp ne i64 %859, 0
  br i1 %860, label %861, label %881

861:                                              ; preds = %850
  br label %862

862:                                              ; preds = %861
  %863 = load ptr, ptr %13, align 8, !tbaa !9
  %864 = icmp ne ptr %863, null
  br i1 %864, label %865, label %868

865:                                              ; preds = %862
  %866 = load ptr, ptr %13, align 8, !tbaa !9
  %867 = icmp ne ptr %866, inttoptr (i64 -1 to ptr)
  br label %868

868:                                              ; preds = %865, %862
  %869 = phi i1 [ false, %862 ], [ %867, %865 ]
  %870 = xor i1 %869, true
  %871 = xor i1 %870, true
  %872 = xor i1 %871, true
  %873 = zext i1 %872 to i32
  %874 = sext i32 %873 to i64
  %875 = call i64 @llvm.expect.i64(i64 %874, i64 0)
  %876 = icmp ne i64 %875, 0
  br i1 %876, label %877, label %878

877:                                              ; preds = %868
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.51, ptr noundef @__func__.osal_mresize, i32 noundef 2541) #8
  unreachable

878:                                              ; preds = %868
  br label %879

879:                                              ; preds = %878
  br label %880

880:                                              ; preds = %879
  br label %881

881:                                              ; preds = %880, %850
  br label %882

882:                                              ; preds = %881
  br label %883

883:                                              ; preds = %882
  %884 = load ptr, ptr %7, align 8, !tbaa !9
  %885 = getelementptr inbounds %struct.osal_mmap, ptr %884, i32 0, i32 0
  %886 = load ptr, ptr %885, align 8, !tbaa !21
  %887 = load ptr, ptr %13, align 8, !tbaa !9
  %888 = icmp ne ptr %886, %887
  br i1 %888, label %889, label %975

889:                                              ; preds = %883
  br label %890

890:                                              ; preds = %889
  br label %891

891:                                              ; preds = %890
  %892 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !15
  %893 = zext i8 %892 to i32
  %894 = icmp sle i32 6, %893
  %895 = xor i1 %894, true
  %896 = xor i1 %895, true
  %897 = zext i1 %896 to i32
  %898 = sext i32 %897 to i64
  %899 = call i64 @llvm.expect.i64(i64 %898, i64 0)
  %900 = icmp ne i64 %899, 0
  br i1 %900, label %901, label %922

901:                                              ; preds = %891
  %902 = load ptr, ptr %7, align 8, !tbaa !9
  %903 = getelementptr inbounds %struct.osal_mmap, ptr %902, i32 0, i32 0
  %904 = load ptr, ptr %903, align 8, !tbaa !21
  %905 = load ptr, ptr %7, align 8, !tbaa !9
  %906 = getelementptr inbounds %struct.osal_mmap, ptr %905, i32 0, i32 3
  %907 = load i64, ptr %906, align 8, !tbaa !20
  %908 = load ptr, ptr %7, align 8, !tbaa !9
  %909 = getelementptr inbounds %struct.osal_mmap, ptr %908, i32 0, i32 2
  %910 = load i64, ptr %909, align 8, !tbaa !22
  %911 = icmp ult i64 %907, %910
  br i1 %911, label %912, label %916

912:                                              ; preds = %901
  %913 = load ptr, ptr %7, align 8, !tbaa !9
  %914 = getelementptr inbounds %struct.osal_mmap, ptr %913, i32 0, i32 3
  %915 = load i64, ptr %914, align 8, !tbaa !20
  br label %920

916:                                              ; preds = %901
  %917 = load ptr, ptr %7, align 8, !tbaa !9
  %918 = getelementptr inbounds %struct.osal_mmap, ptr %917, i32 0, i32 2
  %919 = load i64, ptr %918, align 8, !tbaa !22
  br label %920

920:                                              ; preds = %916, %912
  %921 = phi i64 [ %915, %912 ], [ %919, %916 ]
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.osal_mresize, i32 noundef 2549, ptr noundef @.str.47, ptr noundef %904, i64 noundef %921, i32 noundef 2549)
  br label %922

922:                                              ; preds = %920, %891
  br label %923

923:                                              ; preds = %922
  br label %924

924:                                              ; preds = %923
  %925 = load ptr, ptr %7, align 8, !tbaa !9
  %926 = getelementptr inbounds %struct.osal_mmap, ptr %925, i32 0, i32 0
  %927 = load ptr, ptr %926, align 8, !tbaa !21
  %928 = load ptr, ptr %7, align 8, !tbaa !9
  %929 = getelementptr inbounds %struct.osal_mmap, ptr %928, i32 0, i32 3
  %930 = load i64, ptr %929, align 8, !tbaa !20
  %931 = load ptr, ptr %7, align 8, !tbaa !9
  %932 = getelementptr inbounds %struct.osal_mmap, ptr %931, i32 0, i32 2
  %933 = load i64, ptr %932, align 8, !tbaa !22
  %934 = icmp ult i64 %930, %933
  br i1 %934, label %935, label %939

935:                                              ; preds = %924
  %936 = load ptr, ptr %7, align 8, !tbaa !9
  %937 = getelementptr inbounds %struct.osal_mmap, ptr %936, i32 0, i32 3
  %938 = load i64, ptr %937, align 8, !tbaa !20
  br label %943

939:                                              ; preds = %924
  %940 = load ptr, ptr %7, align 8, !tbaa !9
  %941 = getelementptr inbounds %struct.osal_mmap, ptr %940, i32 0, i32 2
  %942 = load i64, ptr %941, align 8, !tbaa !22
  br label %943

943:                                              ; preds = %939, %935
  %944 = phi i64 [ %938, %935 ], [ %942, %939 ]
  br label %945

945:                                              ; preds = %943
  br label %946

946:                                              ; preds = %945
  br label %947

947:                                              ; preds = %946
  br label %948

948:                                              ; preds = %947
  %949 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !15
  %950 = zext i8 %949 to i32
  %951 = icmp sle i32 6, %950
  %952 = xor i1 %951, true
  %953 = xor i1 %952, true
  %954 = zext i1 %953 to i32
  %955 = sext i32 %954 to i64
  %956 = call i64 @llvm.expect.i64(i64 %955, i64 0)
  %957 = icmp ne i64 %956, 0
  br i1 %957, label %958, label %963

958:                                              ; preds = %948
  %959 = load ptr, ptr %13, align 8, !tbaa !9
  %960 = load ptr, ptr %7, align 8, !tbaa !9
  %961 = getelementptr inbounds %struct.osal_mmap, ptr %960, i32 0, i32 3
  %962 = load i64, ptr %961, align 8, !tbaa !20
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.osal_mresize, i32 noundef 2552, ptr noundef @.str.47, ptr noundef %959, i64 noundef %962, i32 noundef 2552)
  br label %963

963:                                              ; preds = %958, %948
  br label %964

964:                                              ; preds = %963
  br label %965

965:                                              ; preds = %964
  %966 = load ptr, ptr %13, align 8, !tbaa !9
  %967 = load ptr, ptr %7, align 8, !tbaa !9
  %968 = getelementptr inbounds %struct.osal_mmap, ptr %967, i32 0, i32 3
  %969 = load i64, ptr %968, align 8, !tbaa !20
  br label %970

970:                                              ; preds = %965
  br label %971

971:                                              ; preds = %970
  %972 = load ptr, ptr %13, align 8, !tbaa !9
  %973 = load ptr, ptr %7, align 8, !tbaa !9
  %974 = getelementptr inbounds %struct.osal_mmap, ptr %973, i32 0, i32 0
  store ptr %972, ptr %974, align 8, !tbaa !21
  br label %975

975:                                              ; preds = %971, %883
  %976 = load i64, ptr %9, align 8, !tbaa !11
  %977 = load ptr, ptr %7, align 8, !tbaa !9
  %978 = getelementptr inbounds %struct.osal_mmap, ptr %977, i32 0, i32 2
  store i64 %976, ptr %978, align 8, !tbaa !22
  %979 = load i64, ptr %8, align 8, !tbaa !11
  %980 = load ptr, ptr %7, align 8, !tbaa !9
  %981 = getelementptr inbounds %struct.osal_mmap, ptr %980, i32 0, i32 3
  store i64 %979, ptr %981, align 8, !tbaa !20
  %982 = load ptr, ptr %7, align 8, !tbaa !9
  %983 = getelementptr inbounds %struct.osal_mmap, ptr %982, i32 0, i32 0
  %984 = load ptr, ptr %983, align 8, !tbaa !21
  %985 = load ptr, ptr %7, align 8, !tbaa !9
  %986 = getelementptr inbounds %struct.osal_mmap, ptr %985, i32 0, i32 2
  %987 = load i64, ptr %986, align 8, !tbaa !22
  %988 = call i32 @madvise(ptr noundef %984, i64 noundef %987, i32 noundef 10) #7
  %989 = icmp ne i32 %988, 0
  %990 = xor i1 %989, true
  %991 = xor i1 %990, true
  %992 = zext i1 %991 to i32
  %993 = sext i32 %992 to i64
  %994 = call i64 @llvm.expect.i64(i64 %993, i64 0)
  %995 = icmp ne i64 %994, 0
  br i1 %995, label %996, label %1029

996:                                              ; preds = %975
  br label %997

997:                                              ; preds = %996
  %998 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %999 = zext i8 %998 to i32
  %1000 = and i32 %999, 1
  %1001 = icmp ne i32 %1000, 0
  %1002 = xor i1 %1001, true
  %1003 = xor i1 %1002, true
  %1004 = zext i1 %1003 to i32
  %1005 = sext i32 %1004 to i64
  %1006 = call i64 @llvm.expect.i64(i64 %1005, i64 1)
  %1007 = icmp ne i64 %1006, 0
  br i1 %1007, label %1008, label %1024

1008:                                             ; preds = %997
  br label %1009

1009:                                             ; preds = %1008
  %1010 = call ptr @__errno_location() #9
  %1011 = load i32, ptr %1010, align 4, !tbaa !5
  %1012 = icmp ne i32 %1011, 0
  %1013 = xor i1 %1012, true
  %1014 = xor i1 %1013, true
  %1015 = xor i1 %1014, true
  %1016 = zext i1 %1015 to i32
  %1017 = sext i32 %1016 to i64
  %1018 = call i64 @llvm.expect.i64(i64 %1017, i64 0)
  %1019 = icmp ne i64 %1018, 0
  br i1 %1019, label %1020, label %1021

1020:                                             ; preds = %1009
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.46, ptr noundef @__func__.osal_mresize, i32 noundef 2560) #8
  unreachable

1021:                                             ; preds = %1009
  br label %1022

1022:                                             ; preds = %1021
  br label %1023

1023:                                             ; preds = %1022
  br label %1024

1024:                                             ; preds = %1023, %997
  br label %1025

1025:                                             ; preds = %1024
  br label %1026

1026:                                             ; preds = %1025
  %1027 = call ptr @__errno_location() #9
  %1028 = load i32, ptr %1027, align 4, !tbaa !5
  store i32 %1028, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

1029:                                             ; preds = %975
  %1030 = load ptr, ptr %7, align 8, !tbaa !9
  %1031 = getelementptr inbounds %struct.osal_mmap, ptr %1030, i32 0, i32 0
  %1032 = load ptr, ptr %1031, align 8, !tbaa !21
  %1033 = load ptr, ptr %7, align 8, !tbaa !9
  %1034 = getelementptr inbounds %struct.osal_mmap, ptr %1033, i32 0, i32 2
  %1035 = load i64, ptr %1034, align 8, !tbaa !22
  %1036 = call i32 @madvise(ptr noundef %1032, i64 noundef %1035, i32 noundef 15) #7
  br label %1037

1037:                                             ; preds = %1029
  %1038 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !19
  %1039 = zext i8 %1038 to i32
  %1040 = and i32 %1039, 1
  %1041 = icmp ne i32 %1040, 0
  %1042 = xor i1 %1041, true
  %1043 = xor i1 %1042, true
  %1044 = zext i1 %1043 to i32
  %1045 = sext i32 %1044 to i64
  %1046 = call i64 @llvm.expect.i64(i64 %1045, i64 1)
  %1047 = icmp ne i64 %1046, 0
  br i1 %1047, label %1048, label %1095

1048:                                             ; preds = %1037
  br label %1049

1049:                                             ; preds = %1048
  %1050 = load i32, ptr %10, align 4, !tbaa !5
  %1051 = icmp ne i32 %1050, 0
  br i1 %1051, label %1082, label %1052

1052:                                             ; preds = %1049
  %1053 = load ptr, ptr %7, align 8, !tbaa !9
  %1054 = getelementptr inbounds %struct.osal_mmap, ptr %1053, i32 0, i32 0
  %1055 = load ptr, ptr %1054, align 8, !tbaa !21
  %1056 = icmp ne ptr %1055, null
  br i1 %1056, label %1057, label %1080

1057:                                             ; preds = %1052
  %1058 = load ptr, ptr %7, align 8, !tbaa !9
  %1059 = getelementptr inbounds %struct.osal_mmap, ptr %1058, i32 0, i32 0
  %1060 = load ptr, ptr %1059, align 8, !tbaa !21
  %1061 = icmp ne ptr %1060, inttoptr (i64 -1 to ptr)
  br i1 %1061, label %1062, label %1080

1062:                                             ; preds = %1057
  %1063 = load ptr, ptr %7, align 8, !tbaa !9
  %1064 = getelementptr inbounds %struct.osal_mmap, ptr %1063, i32 0, i32 3
  %1065 = load i64, ptr %1064, align 8, !tbaa !20
  %1066 = load i64, ptr %8, align 8, !tbaa !11
  %1067 = icmp eq i64 %1065, %1066
  br i1 %1067, label %1068, label %1080

1068:                                             ; preds = %1062
  %1069 = load ptr, ptr %7, align 8, !tbaa !9
  %1070 = getelementptr inbounds %struct.osal_mmap, ptr %1069, i32 0, i32 2
  %1071 = load i64, ptr %1070, align 8, !tbaa !22
  %1072 = load i64, ptr %9, align 8, !tbaa !11
  %1073 = icmp eq i64 %1071, %1072
  br i1 %1073, label %1074, label %1080

1074:                                             ; preds = %1068
  %1075 = load ptr, ptr %7, align 8, !tbaa !9
  %1076 = getelementptr inbounds %struct.osal_mmap, ptr %1075, i32 0, i32 4
  %1077 = load i64, ptr %1076, align 8, !tbaa !18
  %1078 = load i64, ptr %8, align 8, !tbaa !11
  %1079 = icmp uge i64 %1077, %1078
  br label %1080

1080:                                             ; preds = %1074, %1068, %1062, %1057, %1052
  %1081 = phi i1 [ false, %1068 ], [ false, %1062 ], [ false, %1057 ], [ false, %1052 ], [ %1079, %1074 ]
  br label %1082

1082:                                             ; preds = %1080, %1049
  %1083 = phi i1 [ true, %1049 ], [ %1081, %1080 ]
  %1084 = xor i1 %1083, true
  %1085 = xor i1 %1084, true
  %1086 = xor i1 %1085, true
  %1087 = zext i1 %1086 to i32
  %1088 = sext i32 %1087 to i64
  %1089 = call i64 @llvm.expect.i64(i64 %1088, i64 0)
  %1090 = icmp ne i64 %1089, 0
  br i1 %1090, label %1091, label %1092

1091:                                             ; preds = %1082
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.52, ptr noundef @__func__.osal_mresize, i32 noundef 2573) #8
  unreachable

1092:                                             ; preds = %1082
  br label %1093

1093:                                             ; preds = %1092
  br label %1094

1094:                                             ; preds = %1093
  br label %1095

1095:                                             ; preds = %1094, %1037
  br label %1096

1096:                                             ; preds = %1095
  br label %1097

1097:                                             ; preds = %1096
  %1098 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %1098, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %1099

1099:                                             ; preds = %1097, %1026, %841, %627, %581, %569, %567, %530
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  br label %1100

1100:                                             ; preds = %1099, %426, %424
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %1101

1101:                                             ; preds = %1100, %341
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  br label %1102

1102:                                             ; preds = %1101, %325, %322, %263, %159, %74
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  %1103 = load i32, ptr %5, align 4
  ret i32 %1103
}

; Function Attrs: nounwind
declare ptr @mremap(ptr noundef, i64 noundef, i64 noundef, i32 noundef, ...) #6

attributes #0 = { cold noreturn nounwind optsize 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 = { "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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #4 = { nounwind willreturn memory(none) "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 #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 "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 #7 = { nounwind }
attributes #8 = { cold noreturn }
attributes #9 = { nounwind willreturn memory(none) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !6, i64 8}
!14 = !{!"osal_mmap", !7, i64 0, !6, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!15 = !{!16, !7, i64 26}
!16 = !{!"libmdbx_globals", !7, i64 0, !6, i64 16, !6, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !17, i64 27, !6, i64 28, !7, i64 32, !7, i64 40, !12, i64 80, !10, i64 88}
!17 = !{!"_Bool", !7, i64 0}
!18 = !{!14, !12, i64 32}
!19 = !{!16, !7, i64 25}
!20 = !{!14, !12, i64 24}
!21 = !{!7, !7, i64 0}
!22 = !{!14, !12, i64 16}


; 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.libmdbx_globals = type { %union.bin128, i32, i32, i8, i8, i8, i8, i32, %union.logger_union, %union.pthread_mutex_t, i64, ptr }
%union.bin128 = type { %struct.anon.6 }
%struct.anon.6 = type { i64, i64 }
%union.logger_union = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@.str.40 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [39 x i8], align 1
@__func__.osal_mresize = external hidden unnamed_addr constant [13 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [150 x i8], align 1

; Function Attrs: cold noreturn nounwind optsize uwtable
declare dso_local void @mdbx_assert_fail(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @debug_log(i32 noundef, ptr noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @osal_ftruncate(i32 noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @check_mmap_limit(i64 noundef) local_unnamed_addr #3

; Function Attrs: nounwind
declare ptr @mmap64(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind
declare i32 @madvise(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: nounwind
declare i32 @munmap(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local i32 @osal_mresize(i32 noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3) local_unnamed_addr #3 {
  %5 = getelementptr inbounds i8, ptr %1, i64 8
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 32
  %8 = tail call i32 @osal_filesize(i32 noundef %6, ptr noundef nonnull %7)
  %9 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !11
  %10 = icmp ugt i8 %9, 3
  br i1 %10, label %11, label %13, !prof !15

11:                                               ; preds = %4
  %12 = load i64, ptr %7, align 8, !tbaa !16
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2207, ptr noundef nonnull @.str.48, i32 noundef %0, i64 noundef %2, i64 noundef %3, i64 noundef %12) #7
  br label %13

13:                                               ; preds = %4, %11
  %14 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %15 = and i8 %14, 1
  %.not = icmp ne i8 %15, 0
  %.not231 = icmp ugt i64 %2, %3
  %or.cond = and i1 %.not231, %.not
  br i1 %or.cond, label %16, label %17, !prof !18

16:                                               ; preds = %13
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.40, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2208) #8
  unreachable

17:                                               ; preds = %13
  %.not232 = icmp eq i32 %8, 0
  br i1 %.not232, label %19, label %18

18:                                               ; preds = %17
  store i64 0, ptr %7, align 8, !tbaa !16
  br label %.critedge

19:                                               ; preds = %17
  %20 = and i32 %0, 131072
  %.not233 = icmp eq i32 %20, 0
  %21 = load i64, ptr %7, align 8, !tbaa !16
  %22 = icmp ult i64 %21, %2
  br i1 %.not233, label %27, label %23

23:                                               ; preds = %19
  %24 = icmp ugt i64 %21, %2
  %25 = icmp ugt i64 %21, %3
  %or.cond267 = and i1 %24, %25
  %spec.select = zext i1 %or.cond267 to i32
  %.0195 = select i1 %22, i32 -30785, i32 %spec.select
  %. = tail call i64 @llvm.umin.i64(i64 %21, i64 %3)
  %26 = getelementptr inbounds i8, ptr %1, i64 24
  store i64 %., ptr %26, align 8, !tbaa !19
  %.phi.trans.insert = getelementptr inbounds i8, ptr %1, i64 16
  %.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !20
  br label %56

27:                                               ; preds = %19
  br i1 %22, label %31, label %28

28:                                               ; preds = %27
  %29 = icmp ule i64 %21, %2
  %30 = and i32 %0, 1073741824
  %.not234 = icmp eq i32 %30, 0
  %or.cond268 = or i1 %.not234, %29
  br i1 %or.cond268, label %39, label %31

31:                                               ; preds = %28, %27
  %32 = load i32, ptr %5, align 8, !tbaa !5
  %33 = tail call i32 @osal_ftruncate(i32 noundef %32, i64 noundef %2)
  %34 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !11
  %35 = icmp ugt i8 %34, 3
  br i1 %35, label %36, label %37, !prof !15

36:                                               ; preds = %31
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2391, ptr noundef nonnull @.str.44, i64 noundef %2, i32 noundef %33) #7
  br label %37

37:                                               ; preds = %36, %31
  %.not235 = icmp eq i32 %33, 0
  br i1 %.not235, label %38, label %.critedge

38:                                               ; preds = %37
  store i64 %2, ptr %7, align 8, !tbaa !16
  br label %39

39:                                               ; preds = %38, %28
  %40 = getelementptr inbounds i8, ptr %1, i64 24
  %41 = load i64, ptr %40, align 8, !tbaa !19
  %42 = icmp ugt i64 %41, %2
  %43 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2
  %44 = icmp ugt i8 %43, 5
  %or.cond279 = select i1 %42, i1 %44, i1 false
  br i1 %or.cond279, label %45, label %53, !prof !21

45:                                               ; preds = %39
  %46 = load ptr, ptr %1, align 8, !tbaa !22
  %47 = ptrtoint ptr %46 to i64
  %48 = add nsw i64 %47, %2
  %49 = inttoptr i64 %48 to ptr
  %50 = getelementptr inbounds i8, ptr %1, i64 16
  %51 = load i64, ptr %50, align 8, !tbaa !20
  %.269 = tail call i64 @llvm.umin.i64(i64 %41, i64 %51)
  %52 = sub i64 %.269, %2
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2405, ptr noundef nonnull @.str.47, ptr noundef %49, i64 noundef %52, i32 noundef 2405) #7
  br label %53

53:                                               ; preds = %45, %39
  %54 = getelementptr inbounds i8, ptr %1, i64 16
  %55 = load i64, ptr %54, align 8, !tbaa !20
  %.270 = tail call i64 @llvm.umin.i64(i64 %55, i64 %2)
  store i64 %.270, ptr %40, align 8, !tbaa !19
  br label %56

56:                                               ; preds = %53, %23
  %57 = phi i64 [ %.pre, %23 ], [ %55, %53 ]
  %.2197 = phi i32 [ %.0195, %23 ], [ 0, %53 ]
  %58 = getelementptr inbounds i8, ptr %1, i64 16
  %59 = icmp eq i64 %57, %3
  br i1 %59, label %.critedge, label %60

60:                                               ; preds = %56
  %61 = icmp ugt i64 %57, %3
  br i1 %61, label %62, label %77

62:                                               ; preds = %60
  %63 = load ptr, ptr %1, align 8, !tbaa !22
  %64 = ptrtoint ptr %63 to i64
  %65 = add nsw i64 %64, %3
  %66 = inttoptr i64 %65 to ptr
  %67 = sub i64 %57, %3
  %68 = tail call i32 @munmap(ptr noundef %66, i64 noundef %67) #7
  %.not264 = icmp eq i32 %68, 0
  br i1 %.not264, label %76, label %69, !prof !23

69:                                               ; preds = %62
  %70 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %71 = and i8 %70, 1
  %.not265 = icmp eq i8 %71, 0
  %.pre302 = tail call ptr @__errno_location() #9
  br i1 %.not265, label %._crit_edge301, label %72, !prof !15

72:                                               ; preds = %69
  %73 = load i32, ptr %.pre302, align 4, !tbaa !24
  %.not266 = icmp eq i32 %73, 0
  br i1 %.not266, label %74, label %._crit_edge301, !prof !15

74:                                               ; preds = %72
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2417) #8
  unreachable

._crit_edge301:                                   ; preds = %69, %72
  %75 = load i32, ptr %.pre302, align 4, !tbaa !24
  br label %.critedge

76:                                               ; preds = %62
  store i64 %3, ptr %58, align 8, !tbaa !20
  br label %.critedge

77:                                               ; preds = %60
  %78 = tail call i32 @check_mmap_limit(i64 noundef %3)
  %.not236 = icmp eq i32 %78, 0
  br i1 %.not236, label %79, label %.critedge, !prof !23

79:                                               ; preds = %77
  %80 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %81 = and i8 %80, 1
  %.not237 = icmp eq i8 %81, 0
  %.pre297 = load i64, ptr %58, align 8, !tbaa !20
  %.not238 = icmp ult i64 %.pre297, %3
  %or.cond305 = select i1 %.not237, i1 true, i1 %.not238
  br i1 %or.cond305, label %83, label %82, !prof !25

82:                                               ; preds = %79
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.49, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2428) #8
  unreachable

83:                                               ; preds = %79
  %84 = load ptr, ptr %1, align 8, !tbaa !22
  %85 = and i32 %0, 256
  %.not239.not = icmp eq i32 %85, 0
  %.lobit = lshr exact i32 %85, 8
  %86 = tail call ptr (ptr, i64, i64, i32, ...) @mremap(ptr noundef %84, i64 noundef %.pre297, i64 noundef %3, i32 noundef %.lobit) #7
  %87 = icmp eq ptr %86, inttoptr (i64 -1 to ptr)
  br i1 %87, label %88, label %.thread284

88:                                               ; preds = %83
  %89 = tail call ptr @__errno_location() #9
  %90 = load i32, ptr %89, align 4, !tbaa !24
  %91 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %92 = and i8 %91, 1
  %.not240 = icmp ne i8 %92, 0
  %.not241 = icmp eq i32 %90, 0
  %or.cond271 = select i1 %.not240, i1 %.not241, i1 false
  br i1 %or.cond271, label %93, label %94, !prof !18

93:                                               ; preds = %88
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.50, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2439) #8
  unreachable

94:                                               ; preds = %88
  switch i32 %90, label %.critedge [
    i32 0, label %95
    i32 11, label %95
    i32 12, label %95
    i32 14, label %96
  ]

95:                                               ; preds = %94, %94, %94
  br label %.critedge

96:                                               ; preds = %94
  %97 = and i32 %0, 524288
  %.not242281 = icmp eq i32 %97, 0
  %98 = select i1 %.not242281, i32 1, i32 3
  %99 = load ptr, ptr %1, align 8, !tbaa !22
  %100 = ptrtoint ptr %99 to i64
  %101 = load i64, ptr %58, align 8, !tbaa !20
  %102 = add nsw i64 %101, %100
  %103 = inttoptr i64 %102 to ptr
  %104 = sub i64 %3, %101
  %105 = load i32, ptr %5, align 8, !tbaa !5
  %106 = tail call ptr @mmap64(ptr noundef %103, i64 noundef %104, i32 noundef %98, i32 noundef 1064961, i32 noundef %105, i64 noundef %101) #7
  %107 = load ptr, ptr %1, align 8, !tbaa !22
  %108 = ptrtoint ptr %107 to i64
  %109 = load i64, ptr %58, align 8, !tbaa !20
  %110 = add nsw i64 %109, %108
  %111 = inttoptr i64 %110 to ptr
  %112 = icmp eq ptr %106, %111
  br i1 %112, label %128, label %113

113:                                              ; preds = %96
  %.not243 = icmp eq ptr %106, inttoptr (i64 -1 to ptr)
  br i1 %.not243, label %121, label %114

114:                                              ; preds = %113
  %115 = sub i64 %3, %109
  %116 = tail call i32 @munmap(ptr noundef %106, i64 noundef %115) #7
  %.not246 = icmp eq i32 %116, 0
  br i1 %.not246, label %.thread282, label %117, !prof !23

117:                                              ; preds = %114
  %118 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %119 = and i8 %118, 1
  %.not247 = icmp ne i8 %119, 0
  %.pre298 = load i32, ptr %89, align 4, !tbaa !24
  %.not248 = icmp eq i32 %.pre298, 0
  %or.cond306 = select i1 %.not247, i1 %.not248, i1 false
  br i1 %or.cond306, label %120, label %.critedge, !prof !18

120:                                              ; preds = %117
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2467) #8
  unreachable

121:                                              ; preds = %113
  %122 = load i32, ptr %89, align 4, !tbaa !24
  %123 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %124 = and i8 %123, 1
  %.not244 = icmp ne i8 %124, 0
  %.not245 = icmp eq i32 %122, 0
  %or.cond272 = select i1 %.not244, i1 %.not245, i1 false
  br i1 %or.cond272, label %125, label %126, !prof !18

125:                                              ; preds = %121
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.50, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2473) #8
  unreachable

126:                                              ; preds = %121
  switch i32 %122, label %.critedge [
    i32 0, label %127
    i32 11, label %127
    i32 12, label %127
    i32 17, label %.thread282
    i32 22, label %.thread282
  ]

127:                                              ; preds = %126, %126, %126
  br label %.critedge

128:                                              ; preds = %96
  %129 = icmp eq ptr %107, inttoptr (i64 -1 to ptr)
  br i1 %129, label %.thread282, label %.thread284

.thread282:                                       ; preds = %114, %126, %126, %128
  %130 = and i32 %0, 512
  %131 = icmp eq i32 %130, 0
  br i1 %131, label %.critedge, label %132

132:                                              ; preds = %.thread282
  %133 = load ptr, ptr %1, align 8, !tbaa !22
  %134 = load i64, ptr %58, align 8, !tbaa !20
  %135 = tail call i32 @munmap(ptr noundef %133, i64 noundef %134) #7
  %.not249 = icmp eq i32 %135, 0
  br i1 %.not249, label %140, label %136, !prof !23

136:                                              ; preds = %132
  %137 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %138 = and i8 %137, 1
  %.not262 = icmp ne i8 %138, 0
  %.pre299 = load i32, ptr %89, align 4, !tbaa !24
  %.not263 = icmp eq i32 %.pre299, 0
  %or.cond307 = select i1 %.not262, i1 %.not263, i1 false
  br i1 %or.cond307, label %139, label %.critedge, !prof !18

139:                                              ; preds = %136
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2497) #8
  unreachable

140:                                              ; preds = %132
  %141 = load ptr, ptr %1, align 8, !tbaa !22
  %142 = select i1 %.not239.not, i32 1064961, i32 16385
  %143 = load i32, ptr %5, align 8, !tbaa !5
  %144 = tail call ptr @mmap64(ptr noundef %141, i64 noundef %3, i32 noundef %98, i32 noundef %142, i32 noundef %143, i64 noundef 0) #7
  %145 = icmp eq ptr %144, inttoptr (i64 -1 to ptr)
  br i1 %145, label %146, label %.thread284, !prof !15

146:                                              ; preds = %140
  br i1 %.not239.not, label %147, label %.thread

147:                                              ; preds = %146
  %148 = load i32, ptr %89, align 4, !tbaa !24
  %149 = icmp eq i32 %148, 22
  br i1 %149, label %150, label %.thread

150:                                              ; preds = %147
  %151 = load ptr, ptr %1, align 8, !tbaa !22
  %152 = load i32, ptr %5, align 8, !tbaa !5
  %153 = tail call ptr @mmap64(ptr noundef %151, i64 noundef %3, i32 noundef %98, i32 noundef 16401, i32 noundef %152, i64 noundef 0) #7
  %154 = icmp eq ptr %153, inttoptr (i64 -1 to ptr)
  br i1 %154, label %.thread, label %.thread284, !prof !26

.thread:                                          ; preds = %147, %146, %150
  %155 = load ptr, ptr %1, align 8, !tbaa !22
  %156 = load i64, ptr %58, align 8, !tbaa !20
  %157 = load i32, ptr %5, align 8, !tbaa !5
  %158 = tail call ptr @mmap64(ptr noundef %155, i64 noundef %156, i32 noundef %98, i32 noundef %142, i32 noundef %157, i64 noundef 0) #7
  %159 = icmp eq ptr %158, inttoptr (i64 -1 to ptr)
  br i1 %159, label %160, label %.thread293, !prof !15

160:                                              ; preds = %.thread
  br i1 %.not239.not, label %161, label %.thread291

161:                                              ; preds = %160
  %162 = load i32, ptr %89, align 4, !tbaa !24
  %163 = icmp eq i32 %162, 22
  br i1 %163, label %164, label %.thread291

164:                                              ; preds = %161
  %165 = load ptr, ptr %1, align 8, !tbaa !22
  %166 = load i64, ptr %58, align 8, !tbaa !20
  %167 = load i32, ptr %5, align 8, !tbaa !5
  %168 = tail call ptr @mmap64(ptr noundef %165, i64 noundef %166, i32 noundef %98, i32 noundef 16401, i32 noundef %167, i64 noundef 0) #7
  %169 = icmp eq ptr %168, inttoptr (i64 -1 to ptr)
  br i1 %169, label %.thread291, label %.thread293, !prof !27

.thread291:                                       ; preds = %161, %160, %164
  %170 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !11
  %171 = icmp ugt i8 %170, 5
  br i1 %171, label %172, label %177, !prof !15

172:                                              ; preds = %.thread291
  %173 = load ptr, ptr %1, align 8, !tbaa !22
  %174 = getelementptr inbounds i8, ptr %1, i64 24
  %175 = load i64, ptr %174, align 8, !tbaa !19
  %176 = load i64, ptr %58, align 8, !tbaa !20
  %.273 = tail call i64 @llvm.umin.i64(i64 %175, i64 %176)
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2529, ptr noundef nonnull @.str.47, ptr noundef %173, i64 noundef %.273, i32 noundef 2529) #7
  br label %177

177:                                              ; preds = %172, %.thread291
  store ptr null, ptr %1, align 8, !tbaa !22
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %58, i8 0, i64 16, i1 false)
  %178 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %179 = and i8 %178, 1
  %.not260 = icmp ne i8 %179, 0
  %.pre300 = load i32, ptr %89, align 4, !tbaa !24
  %.not261 = icmp eq i32 %.pre300, 0
  %or.cond308 = select i1 %.not260, i1 %.not261, i1 false
  br i1 %or.cond308, label %180, label %.critedge, !prof !18

180:                                              ; preds = %177
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2533) #8
  unreachable

.thread293:                                       ; preds = %.thread, %164
  %.2193295 = phi ptr [ %168, %164 ], [ %158, %.thread ]
  %181 = load i64, ptr %58, align 8, !tbaa !20
  br label %.thread284

.thread284:                                       ; preds = %140, %83, %128, %.thread293, %150
  %.3198 = phi i32 [ -30785, %.thread293 ], [ %.2197, %150 ], [ %.2197, %128 ], [ %.2197, %83 ], [ %.2197, %140 ]
  %.3194 = phi ptr [ %.2193295, %.thread293 ], [ %153, %150 ], [ %107, %128 ], [ %86, %83 ], [ %144, %140 ]
  %.0190 = phi i64 [ %181, %.thread293 ], [ %3, %150 ], [ %3, %128 ], [ %3, %83 ], [ %3, %140 ]
  %182 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %183 = and i8 %182, 1
  %.not250 = icmp ne i8 %183, 0
  %.not251 = icmp eq ptr %.3194, null
  %or.cond274 = and i1 %.not251, %.not250
  br i1 %or.cond274, label %184, label %185, !prof !18

184:                                              ; preds = %.thread284
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.51, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2541) #8
  unreachable

185:                                              ; preds = %.thread284
  %186 = load ptr, ptr %1, align 8, !tbaa !22
  %.not252 = icmp eq ptr %186, %.3194
  br i1 %.not252, label %197, label %187

187:                                              ; preds = %185
  %188 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !11
  %189 = icmp ugt i8 %188, 5
  br i1 %189, label %190, label %.thread296, !prof !15

190:                                              ; preds = %187
  %191 = getelementptr inbounds i8, ptr %1, i64 24
  %192 = load i64, ptr %191, align 8, !tbaa !19
  %193 = load i64, ptr %58, align 8, !tbaa !20
  %.275 = tail call i64 @llvm.umin.i64(i64 %192, i64 %193)
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2549, ptr noundef nonnull @.str.47, ptr noundef %186, i64 noundef %.275, i32 noundef 2549) #7
  %.pr = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !11
  %194 = icmp ugt i8 %.pr, 5
  br i1 %194, label %195, label %.thread296, !prof !28

195:                                              ; preds = %190
  %196 = load i64, ptr %191, align 8, !tbaa !19
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2552, ptr noundef nonnull @.str.47, ptr noundef %.3194, i64 noundef %196, i32 noundef 2552) #7
  br label %.thread296

.thread296:                                       ; preds = %187, %195, %190
  store ptr %.3194, ptr %1, align 8, !tbaa !22
  br label %197

197:                                              ; preds = %.thread296, %185
  %198 = phi ptr [ %.3194, %.thread296 ], [ %186, %185 ]
  store i64 %.0190, ptr %58, align 8, !tbaa !20
  %199 = getelementptr inbounds i8, ptr %1, i64 24
  store i64 %2, ptr %199, align 8, !tbaa !19
  %200 = tail call i32 @madvise(ptr noundef %198, i64 noundef %.0190, i32 noundef 10) #7
  %.not253 = icmp eq i32 %200, 0
  br i1 %.not253, label %208, label %201, !prof !23

201:                                              ; preds = %197
  %202 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %203 = and i8 %202, 1
  %.not258 = icmp eq i8 %203, 0
  %.pre303 = tail call ptr @__errno_location() #9
  br i1 %.not258, label %._crit_edge, label %204, !prof !15

204:                                              ; preds = %201
  %205 = load i32, ptr %.pre303, align 4, !tbaa !24
  %.not259 = icmp eq i32 %205, 0
  br i1 %.not259, label %206, label %._crit_edge, !prof !15

206:                                              ; preds = %204
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2560) #8
  unreachable

._crit_edge:                                      ; preds = %201, %204
  %207 = load i32, ptr %.pre303, align 4, !tbaa !24
  br label %.critedge

208:                                              ; preds = %197
  %209 = load ptr, ptr %1, align 8, !tbaa !22
  %210 = load i64, ptr %58, align 8, !tbaa !20
  %211 = tail call i32 @madvise(ptr noundef %209, i64 noundef %210, i32 noundef 15) #7
  %212 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %213 = and i8 %212, 1
  %.not254 = icmp ne i8 %213, 0
  %.not255 = icmp eq i32 %.3198, 0
  %or.cond280 = and i1 %.not255, %.not254
  br i1 %or.cond280, label %214, label %.critedge, !prof !29

214:                                              ; preds = %208
  %215 = load ptr, ptr %1, align 8, !tbaa !22
  %magicptr = ptrtoint ptr %215 to i64
  switch i64 %magicptr, label %216 [
    i64 0, label %.critedge277
    i64 -1, label %.critedge277
  ]

216:                                              ; preds = %214
  %217 = load i64, ptr %199, align 8, !tbaa !19
  %218 = icmp eq i64 %217, %2
  br i1 %218, label %219, label %.critedge277

219:                                              ; preds = %216
  %220 = load i64, ptr %58, align 8, !tbaa !20
  %221 = icmp eq i64 %220, %.0190
  br i1 %221, label %222, label %.critedge277

222:                                              ; preds = %219
  %223 = load i64, ptr %7, align 8, !tbaa !16
  %224 = icmp ult i64 %223, %2
  br i1 %224, label %.critedge277, label %.critedge, !prof !15

.critedge277:                                     ; preds = %219, %216, %214, %214, %222
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.52, ptr noundef nonnull @__func__.osal_mresize, i32 noundef 2573) #8
  unreachable

.critedge:                                        ; preds = %177, %136, %117, %77, %127, %._crit_edge, %126, %.thread282, %222, %208, %94, %95, %56, %37, %76, %._crit_edge301, %18
  %.3 = phi i32 [ %8, %18 ], [ %75, %._crit_edge301 ], [ %.2197, %76 ], [ %33, %37 ], [ %.2197, %56 ], [ %78, %77 ], [ -30785, %95 ], [ %90, %94 ], [ %207, %._crit_edge ], [ -30785, %127 ], [ %122, %126 ], [ -30785, %.thread282 ], [ 0, %222 ], [ %.3198, %208 ], [ %.pre298, %117 ], [ %.pre299, %136 ], [ %.pre300, %177 ]
  ret i32 %.3
}

; Function Attrs: nounwind
declare ptr @mremap(ptr noundef, i64 noundef, i64 noundef, i32 noundef, ...) local_unnamed_addr #4

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

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

!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, !9, i64 8}
!6 = !{!"osal_mmap", !7, i64 0, !9, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !7, i64 26}
!12 = !{!"libmdbx_globals", !7, i64 0, !9, i64 16, !9, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !13, i64 27, !9, i64 28, !7, i64 32, !7, i64 40, !10, i64 80, !14, i64 88}
!13 = !{!"_Bool", !7, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!16 = !{!6, !10, i64 32}
!17 = !{!12, !7, i64 25}
!18 = !{!"branch_weights", i32 2000, i32 4002001}
!19 = !{!6, !10, i64 24}
!20 = !{!6, !10, i64 16}
!21 = !{!"branch_weights", i32 1, i32 4001}
!22 = !{!7, !7, i64 0}
!23 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!24 = !{!9, !9, i64 0}
!25 = !{!"branch_weights", i32 4002001, i32 2000}
!26 = !{!"branch_weights", !"expected", i32 2147476843, i32 6805}
!27 = !{!"branch_weights", !"expected", i32 2147476644, i32 7004}
!28 = !{!"branch_weights", !"expected", i32 -2147483648, i32 0}
!29 = !{!"branch_weights", i32 2000, i32 2002}


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