; LLVM IR from erthink/libmdbx :: src (page-get)

; 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 }
%struct.anon = 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.iovec = type { ptr, i64 }
%struct.clc = type { ptr, i64, i64 }
%struct.page_get_result = type { ptr, i32 }
%struct.page = type <{ i64, i16, i16, %union.anon, i32, [0 x i16] }>
%union.anon = type { i32 }
%struct.MDBX_cursor = type { i32, %union.anon.2, i8, i8, ptr, ptr, ptr, ptr, ptr, [32 x ptr], [32 x i16], ptr, ptr }
%union.anon.2 = type { i16 }
%struct.MDBX_txn = type { i32, i32, i64, i64, ptr, ptr, %struct.geo, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, %struct.MDBX_canary, ptr, %union.anon.6 }
%struct.geo = type { i16, i16, i32, i32, %union.anon.4, %union.anon.5 }
%union.anon.4 = type { i32 }
%union.anon.5 = type { i32 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.6 = type { %struct.anon.8 }
%struct.anon.8 = type { %struct.troika, ptr, %struct.anon.9, i8, i32, i32, i64, ptr, ptr, ptr, i64, %union.anon.10 }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.anon.9 = type { %struct.MDBX_rkl, i64, %struct.MDBX_rkl }
%struct.MDBX_rkl = type { i64, i64, i32, i32, ptr, [12 x i64] }
%union.anon.10 = type { %struct.anon.11 }
%struct.anon.11 = type { i64, ptr }
%struct.MDBX_env = type { %union.mdbx_atomic_uint32_t, i32, i32, %struct.osal_mmap, i32, i32, %struct.osal_mmap, ptr, i16, i16, i16, i16, i16, i16, %union.mdbx_atomic_uint32_t, i8, i8, i16, i32, i32, i32, i32, %struct.anon.13, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.14, %struct.anon.18, i8, ptr, ptr, ptr, %struct.anon.19, %union.pthread_mutex_t, i32, i32, ptr, %struct.osal_ioring, %union.pthread_mutex_t, [71 x %union.mdbx_atomic_uint64_t] }
%struct.osal_mmap = type { %union.anon.12, i32, i64, i64, i64 }
%union.anon.12 = type { ptr }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.anon.13 = type { ptr, ptr, ptr, ptr }
%struct.anon.14 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.15, %union.anon.16 }
%struct.anon.15 = type { i16, i16, i16, i16 }
%union.anon.16 = type { i32 }
%struct.anon.18 = type { i64, i64, i64, i64, i64 }
%struct.anon.19 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }
%struct.anon.3 = type { i8, i8 }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.anon.1 = type { i16, i16 }
%struct.clc2 = type { %struct.clc, %struct.clc }

@globals = external global %struct.libmdbx_globals, align 8
@.str.4 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [61 x i8], align 1
@__func__.page_check = external hidden unnamed_addr constant [11 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [42 x i8], align 1

; Function Attrs: cold nounwind optsize uwtable
declare dso_local i32 @bad_page(ptr noundef, ptr noundef, ...) #0

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

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i8 @page_type(ptr noundef) #3

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

; Function Attrs: cold nounwind optsize uwtable
declare dso_local void @poor_page(ptr noundef, ptr noundef, ...) #0

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @page_check(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca [510 x i8], align 16
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca %struct.iovec, align 8
  %20 = alloca %struct.iovec, align 8
  %21 = alloca %struct.clc, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca i64, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct.page_get_result, align 8
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i64, align 8
  %36 = alloca %struct.iovec, align 8
  %37 = alloca %struct.iovec, align 8
  %38 = alloca i32, align 4
  %39 = alloca i64, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i64, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 510, ptr %6) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #12
  store i32 0, ptr %7, align 4, !tbaa !9
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.page, ptr %46, i32 0, i32 4
  %48 = load i32, ptr %47, align 1, !tbaa !9
  %49 = icmp ult i32 %48, 3
  br i1 %49, label %55, label %50

50:                                               ; preds = %2
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.page, ptr %51, i32 0, i32 4
  %53 = load i32, ptr %52, align 1, !tbaa !9
  %54 = icmp ugt i32 %53, 2147483647
  br label %55

55:                                               ; preds = %50, %2
  %56 = phi i1 [ true, %2 ], [ %54, %50 ]
  %57 = xor i1 %56, true
  %58 = xor i1 %57, true
  %59 = zext i1 %58 to i32
  %60 = sext i32 %59 to i64
  %61 = call i64 @llvm.expect.i64(i64 %60, i64 0)
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %63, label %69

63:                                               ; preds = %55
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.page, ptr %65, i32 0, i32 4
  %67 = load i32, ptr %66, align 1, !tbaa !9
  %68 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %64, ptr noundef @.str.4, i32 noundef %67) #13
  store i32 %68, ptr %7, align 4, !tbaa !9
  br label %69

69:                                               ; preds = %63, %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #12
  %70 = load ptr, ptr %4, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.MDBX_cursor, ptr %70, i32 0, i32 5
  %72 = load ptr, ptr %71, align 8, !tbaa !11
  %73 = getelementptr inbounds %struct.MDBX_txn, ptr %72, i32 0, i32 9
  %74 = load ptr, ptr %73, align 8, !tbaa !13
  store ptr %74, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #12
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = ptrtoint ptr %75 to i64
  %77 = load ptr, ptr %8, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.MDBX_env, ptr %77, i32 0, i32 3
  %79 = getelementptr inbounds %struct.osal_mmap, ptr %78, i32 0, i32 0
  %80 = load ptr, ptr %79, align 8, !tbaa !19
  %81 = ptrtoint ptr %80 to i64
  %82 = sub nsw i64 %76, %81
  store i64 %82, ptr %9, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #12
  store i32 57304, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #12
  store i32 0, ptr %11, align 4, !tbaa !9
  %83 = load i64, ptr %9, align 8, !tbaa !20
  %84 = icmp slt i64 %83, 0
  br i1 %84, label %112, label %85

85:                                               ; preds = %69
  %86 = load i64, ptr %9, align 8, !tbaa !20
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.MDBX_cursor, ptr %88, i32 0, i32 5
  %90 = load ptr, ptr %89, align 8, !tbaa !11
  %91 = getelementptr inbounds %struct.MDBX_txn, ptr %90, i32 0, i32 6
  %92 = getelementptr inbounds %struct.geo, ptr %91, i32 0, i32 5
  %93 = load i32, ptr %92, align 8, !tbaa !19
  %94 = zext i32 %93 to i64
  %95 = call i64 @pgno2bytes(ptr noundef %87, i64 noundef %94) #14
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.page, ptr %96, i32 0, i32 2
  %98 = load i16, ptr %97, align 1, !tbaa !21
  %99 = zext i16 %98 to i32
  %100 = and i32 %99, 64
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %102, label %103

102:                                              ; preds = %85
  br label %107

103:                                              ; preds = %85
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.MDBX_env, ptr %104, i32 0, i32 2
  %106 = load i32, ptr %105, align 8, !tbaa !22
  br label %107

107:                                              ; preds = %103, %102
  %108 = phi i32 [ 21, %102 ], [ %106, %103 ]
  %109 = zext i32 %108 to i64
  %110 = sub i64 %95, %109
  %111 = icmp sgt i64 %86, %110
  br i1 %111, label %112, label %140

112:                                              ; preds = %107, %69
  %113 = load i32, ptr %10, align 4, !tbaa !9
  %114 = sub i32 %113, 64
  store i32 %114, ptr %10, align 4, !tbaa !9
  %115 = load ptr, ptr %8, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.MDBX_env, ptr %115, i32 0, i32 1
  %117 = load i32, ptr %116, align 4, !tbaa !32
  %118 = and i32 %117, 524288
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %133, label %120

120:                                              ; preds = %112
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.MDBX_cursor, ptr %121, i32 0, i32 5
  %123 = load ptr, ptr %122, align 8, !tbaa !11
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = call zeroext i1 @is_shadowed(ptr noundef %123, ptr noundef %124) #14
  br i1 %125, label %139, label %126

126:                                              ; preds = %120
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.page, ptr %127, i32 0, i32 2
  %129 = load i16, ptr %128, align 1, !tbaa !21
  %130 = zext i16 %129 to i32
  %131 = and i32 %130, 64
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %139, label %133

133:                                              ; preds = %126, %112
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  %136 = call ptr @__Wpedantic_format_voidptr(ptr noundef %135)
  %137 = load i64, ptr %9, align 8, !tbaa !20
  %138 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %134, ptr noundef @.str.5, ptr noundef %136, i64 noundef %137) #13
  store i32 %138, ptr %7, align 4, !tbaa !9
  br label %139

139:                                              ; preds = %133, %126, %120
  br label %151

140:                                              ; preds = %107
  %141 = load i64, ptr %9, align 8, !tbaa !20
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.MDBX_env, ptr %142, i32 0, i32 2
  %144 = load i32, ptr %143, align 8, !tbaa !22
  %145 = sub i32 %144, 1
  %146 = zext i32 %145 to i64
  %147 = and i64 %141, %146
  %148 = icmp ne i64 %147, 0
  br i1 %148, label %149, label %150

149:                                              ; preds = %140
  store i32 64, ptr %11, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %149, %140
  br label %151

151:                                              ; preds = %150, %139
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.page, ptr %152, i32 0, i32 2
  %154 = load i16, ptr %153, align 1, !tbaa !21
  %155 = zext i16 %154 to i32
  %156 = load i32, ptr %10, align 4, !tbaa !9
  %157 = and i32 %155, %156
  %158 = load i32, ptr %11, align 4, !tbaa !9
  %159 = icmp ne i32 %157, %158
  %160 = xor i1 %159, true
  %161 = xor i1 %160, true
  %162 = zext i1 %161 to i32
  %163 = sext i32 %162 to i64
  %164 = call i64 @llvm.expect.i64(i64 %163, i64 0)
  %165 = icmp ne i64 %164, 0
  br i1 %165, label %166, label %176

166:                                              ; preds = %151
  %167 = load ptr, ptr %5, align 8, !tbaa !5
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.page, ptr %168, i32 0, i32 2
  %170 = load i16, ptr %169, align 1, !tbaa !21
  %171 = zext i16 %170 to i32
  %172 = load i32, ptr %10, align 4, !tbaa !9
  %173 = and i32 %171, %172
  %174 = load i32, ptr %11, align 4, !tbaa !9
  %175 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %167, ptr noundef @.str.6, i32 noundef %173, i32 noundef %174) #13
  store i32 %175, ptr %7, align 4, !tbaa !9
  br label %176

176:                                              ; preds = %166, %151
  br label %177

177:                                              ; preds = %176
  %178 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !33
  %179 = zext i8 %178 to i32
  %180 = and i32 %179, 1
  %181 = icmp ne i32 %180, 0
  %182 = xor i1 %181, true
  %183 = xor i1 %182, true
  %184 = zext i1 %183 to i32
  %185 = sext i32 %184 to i64
  %186 = call i64 @llvm.expect.i64(i64 %185, i64 1)
  %187 = icmp ne i64 %186, 0
  br i1 %187, label %188, label %222

188:                                              ; preds = %177
  br label %189

189:                                              ; preds = %188
  %190 = load ptr, ptr %4, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.MDBX_cursor, ptr %190, i32 0, i32 2
  %192 = load i8, ptr %191, align 2, !tbaa !35
  %193 = zext i8 %192 to i32
  %194 = and i32 %193, 32
  %195 = icmp eq i32 %194, 0
  br i1 %195, label %204, label %196

196:                                              ; preds = %189
  %197 = load ptr, ptr %4, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.MDBX_cursor, ptr %197, i32 0, i32 1
  %199 = getelementptr inbounds %struct.anon.3, ptr %198, i32 0, i32 0
  %200 = load i8, ptr %199, align 4, !tbaa !19
  %201 = sext i8 %200 to i32
  %202 = and i32 %201, 1
  %203 = icmp ne i32 %202, 0
  br label %204

204:                                              ; preds = %196, %189
  %205 = phi i1 [ true, %189 ], [ %203, %196 ]
  %206 = xor i1 %205, true
  %207 = xor i1 %206, true
  %208 = xor i1 %207, true
  %209 = zext i1 %208 to i32
  %210 = sext i32 %209 to i64
  %211 = call i64 @llvm.expect.i64(i64 %210, i64 0)
  %212 = icmp ne i64 %211, 0
  br i1 %212, label %213, label %219

213:                                              ; preds = %204
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.MDBX_cursor, ptr %214, i32 0, i32 5
  %216 = load ptr, ptr %215, align 8, !tbaa !11
  %217 = getelementptr inbounds %struct.MDBX_txn, ptr %216, i32 0, i32 9
  %218 = load ptr, ptr %217, align 8, !tbaa !13
  call void @mdbx_assert_fail(ptr noundef %218, ptr noundef @.str.7, ptr noundef @__func__.page_check, i32 noundef 72) #15
  unreachable

219:                                              ; preds = %204
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220
  br label %222

222:                                              ; preds = %221, %177
  br label %223

223:                                              ; preds = %222
  br label %224

224:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #12
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  %226 = call zeroext i8 @page_type(ptr noundef %225) #14
  store i8 %226, ptr %12, align 1, !tbaa !19
  %227 = load i8, ptr %12, align 1, !tbaa !19
  %228 = zext i8 %227 to i32
  switch i32 %228, label %229 [
    i32 4, label %234
    i32 66, label %313
    i32 2, label %337
    i32 98, label %360
    i32 34, label %384
    i32 1, label %407
  ]

229:                                              ; preds = %224
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = load i8, ptr %12, align 1, !tbaa !19
  %232 = zext i8 %231 to i32
  %233 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %230, ptr noundef @.str.8, i32 noundef %232) #13
  store i32 %233, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1775

234:                                              ; preds = %224
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.MDBX_cursor, ptr %235, i32 0, i32 1
  %237 = getelementptr inbounds %struct.anon.3, ptr %236, i32 0, i32 0
  %238 = load i8, ptr %237, align 4, !tbaa !19
  %239 = sext i8 %238 to i32
  %240 = and i32 %239, 1
  %241 = icmp ne i32 %240, 0
  %242 = xor i1 %241, true
  %243 = xor i1 %242, true
  %244 = zext i1 %243 to i32
  %245 = sext i32 %244 to i64
  %246 = call i64 @llvm.expect.i64(i64 %245, i64 0)
  %247 = icmp ne i64 %246, 0
  br i1 %247, label %248, label %257

248:                                              ; preds = %234
  %249 = load ptr, ptr %5, align 8, !tbaa !5
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.MDBX_cursor, ptr %250, i32 0, i32 6
  %252 = load ptr, ptr %251, align 8, !tbaa !36
  %253 = getelementptr inbounds %struct.tree, ptr %252, i32 0, i32 0
  %254 = load i16, ptr %253, align 4, !tbaa !37
  %255 = zext i16 %254 to i32
  %256 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %249, ptr noundef @.str.9, ptr noundef @.str.10, ptr noundef @.str.11, i32 noundef %255) #13
  store i32 %256, ptr %7, align 4, !tbaa !9
  br label %257

257:                                              ; preds = %248, %234
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.page, ptr %258, i32 0, i32 3
  %260 = load i32, ptr %259, align 1, !tbaa !19
  store i32 %260, ptr %14, align 4, !tbaa !9
  %261 = load i32, ptr %14, align 4, !tbaa !9
  %262 = icmp ult i32 %261, 1
  br i1 %262, label %266, label %263

263:                                              ; preds = %257
  %264 = load i32, ptr %14, align 4, !tbaa !9
  %265 = icmp uge i32 %264, 1073741823
  br label %266

266:                                              ; preds = %263, %257
  %267 = phi i1 [ true, %257 ], [ %265, %263 ]
  %268 = xor i1 %267, true
  %269 = xor i1 %268, true
  %270 = zext i1 %269 to i32
  %271 = sext i32 %270 to i64
  %272 = call i64 @llvm.expect.i64(i64 %271, i64 0)
  %273 = icmp ne i64 %272, 0
  br i1 %273, label %274, label %278

274:                                              ; preds = %266
  %275 = load ptr, ptr %5, align 8, !tbaa !5
  %276 = load i32, ptr %14, align 4, !tbaa !9
  %277 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %275, ptr noundef @.str.12, i32 noundef %276) #13
  store i32 %277, ptr %7, align 4, !tbaa !9
  br label %278

278:                                              ; preds = %274, %266
  %279 = load ptr, ptr %5, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.page, ptr %279, i32 0, i32 4
  %281 = load i32, ptr %280, align 1, !tbaa !9
  %282 = load i32, ptr %14, align 4, !tbaa !9
  %283 = add i32 %281, %282
  %284 = load ptr, ptr %4, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.MDBX_cursor, ptr %284, i32 0, i32 5
  %286 = load ptr, ptr %285, align 8, !tbaa !11
  %287 = getelementptr inbounds %struct.MDBX_txn, ptr %286, i32 0, i32 6
  %288 = getelementptr inbounds %struct.geo, ptr %287, i32 0, i32 5
  %289 = load i32, ptr %288, align 8, !tbaa !19
  %290 = icmp ugt i32 %283, %289
  %291 = xor i1 %290, true
  %292 = xor i1 %291, true
  %293 = zext i1 %292 to i32
  %294 = sext i32 %293 to i64
  %295 = call i64 @llvm.expect.i64(i64 %294, i64 0)
  %296 = icmp ne i64 %295, 0
  br i1 %296, label %297, label %311

297:                                              ; preds = %278
  %298 = load ptr, ptr %5, align 8, !tbaa !5
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.page, ptr %299, i32 0, i32 4
  %301 = load i32, ptr %300, align 1, !tbaa !9
  %302 = load i32, ptr %14, align 4, !tbaa !9
  %303 = add i32 %301, %302
  %304 = load ptr, ptr %4, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.MDBX_cursor, ptr %304, i32 0, i32 5
  %306 = load ptr, ptr %305, align 8, !tbaa !11
  %307 = getelementptr inbounds %struct.MDBX_txn, ptr %306, i32 0, i32 6
  %308 = getelementptr inbounds %struct.geo, ptr %307, i32 0, i32 5
  %309 = load i32, ptr %308, align 8, !tbaa !19
  %310 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %298, ptr noundef @.str.13, i32 noundef %303, i32 noundef %309) #13
  store i32 %310, ptr %7, align 4, !tbaa !9
  br label %311

311:                                              ; preds = %297, %278
  %312 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %312, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1775

313:                                              ; preds = %224
  %314 = load ptr, ptr %4, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.MDBX_cursor, ptr %314, i32 0, i32 6
  %316 = load ptr, ptr %315, align 8, !tbaa !36
  %317 = getelementptr inbounds %struct.tree, ptr %316, i32 0, i32 1
  %318 = load i16, ptr %317, align 2, !tbaa !39
  %319 = zext i16 %318 to i32
  %320 = icmp ne i32 %319, 1
  %321 = xor i1 %320, true
  %322 = xor i1 %321, true
  %323 = zext i1 %322 to i32
  %324 = sext i32 %323 to i64
  %325 = call i64 @llvm.expect.i64(i64 %324, i64 0)
  %326 = icmp ne i64 %325, 0
  br i1 %326, label %327, label %336

327:                                              ; preds = %313
  %328 = load ptr, ptr %5, align 8, !tbaa !5
  %329 = load ptr, ptr %4, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.MDBX_cursor, ptr %329, i32 0, i32 6
  %331 = load ptr, ptr %330, align 8, !tbaa !36
  %332 = getelementptr inbounds %struct.tree, ptr %331, i32 0, i32 0
  %333 = load i16, ptr %332, align 4, !tbaa !37
  %334 = zext i16 %333 to i32
  %335 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %328, ptr noundef @.str.9, ptr noundef @.str.14, ptr noundef @.str.15, i32 noundef %334) #13
  store i32 %335, ptr %7, align 4, !tbaa !9
  br label %336

336:                                              ; preds = %327, %313
  br label %337

337:                                              ; preds = %336, %224
  %338 = load ptr, ptr %4, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.MDBX_cursor, ptr %338, i32 0, i32 2
  %340 = load i8, ptr %339, align 2, !tbaa !35
  %341 = zext i8 %340 to i32
  %342 = and i32 %341, 32
  %343 = icmp ne i32 %342, 0
  %344 = xor i1 %343, true
  %345 = xor i1 %344, true
  %346 = zext i1 %345 to i32
  %347 = sext i32 %346 to i64
  %348 = call i64 @llvm.expect.i64(i64 %347, i64 0)
  %349 = icmp ne i64 %348, 0
  br i1 %349, label %350, label %359

350:                                              ; preds = %337
  %351 = load ptr, ptr %5, align 8, !tbaa !5
  %352 = load ptr, ptr %4, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.MDBX_cursor, ptr %352, i32 0, i32 6
  %354 = load ptr, ptr %353, align 8, !tbaa !36
  %355 = getelementptr inbounds %struct.tree, ptr %354, i32 0, i32 0
  %356 = load i16, ptr %355, align 4, !tbaa !37
  %357 = zext i16 %356 to i32
  %358 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %351, ptr noundef @.str.16, i32 noundef %357) #13
  store i32 %358, ptr %7, align 4, !tbaa !9
  br label %359

359:                                              ; preds = %350, %337
  br label %407

360:                                              ; preds = %224
  %361 = load ptr, ptr %4, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.MDBX_cursor, ptr %361, i32 0, i32 6
  %363 = load ptr, ptr %362, align 8, !tbaa !36
  %364 = getelementptr inbounds %struct.tree, ptr %363, i32 0, i32 1
  %365 = load i16, ptr %364, align 2, !tbaa !39
  %366 = zext i16 %365 to i32
  %367 = icmp ne i32 %366, 1
  %368 = xor i1 %367, true
  %369 = xor i1 %368, true
  %370 = zext i1 %369 to i32
  %371 = sext i32 %370 to i64
  %372 = call i64 @llvm.expect.i64(i64 %371, i64 0)
  %373 = icmp ne i64 %372, 0
  br i1 %373, label %374, label %383

374:                                              ; preds = %360
  %375 = load ptr, ptr %5, align 8, !tbaa !5
  %376 = load ptr, ptr %4, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.MDBX_cursor, ptr %376, i32 0, i32 6
  %378 = load ptr, ptr %377, align 8, !tbaa !36
  %379 = getelementptr inbounds %struct.tree, ptr %378, i32 0, i32 0
  %380 = load i16, ptr %379, align 4, !tbaa !37
  %381 = zext i16 %380 to i32
  %382 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %375, ptr noundef @.str.9, ptr noundef @.str.17, ptr noundef @.str.15, i32 noundef %381) #13
  store i32 %382, ptr %7, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %374, %360
  br label %384

384:                                              ; preds = %383, %224
  %385 = load ptr, ptr %4, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.MDBX_cursor, ptr %385, i32 0, i32 2
  %387 = load i8, ptr %386, align 2, !tbaa !35
  %388 = zext i8 %387 to i32
  %389 = and i32 %388, 32
  %390 = icmp eq i32 %389, 0
  %391 = xor i1 %390, true
  %392 = xor i1 %391, true
  %393 = zext i1 %392 to i32
  %394 = sext i32 %393 to i64
  %395 = call i64 @llvm.expect.i64(i64 %394, i64 0)
  %396 = icmp ne i64 %395, 0
  br i1 %396, label %397, label %406

397:                                              ; preds = %384
  %398 = load ptr, ptr %5, align 8, !tbaa !5
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.MDBX_cursor, ptr %399, i32 0, i32 6
  %401 = load ptr, ptr %400, align 8, !tbaa !36
  %402 = getelementptr inbounds %struct.tree, ptr %401, i32 0, i32 0
  %403 = load i16, ptr %402, align 4, !tbaa !37
  %404 = zext i16 %403 to i32
  %405 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %398, ptr noundef @.str.18, i32 noundef %404) #13
  store i32 %405, ptr %7, align 4, !tbaa !9
  br label %406

406:                                              ; preds = %397, %384
  br label %407

407:                                              ; preds = %406, %359, %224
  %408 = load ptr, ptr %5, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.page, ptr %408, i32 0, i32 3
  %410 = getelementptr inbounds %struct.anon.1, ptr %409, i32 0, i32 1
  %411 = load i16, ptr %410, align 1, !tbaa !19
  %412 = zext i16 %411 to i32
  %413 = load ptr, ptr %5, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.page, ptr %413, i32 0, i32 3
  %415 = getelementptr inbounds %struct.anon.1, ptr %414, i32 0, i32 0
  %416 = load i16, ptr %415, align 1, !tbaa !19
  %417 = zext i16 %416 to i32
  %418 = icmp slt i32 %412, %417
  br i1 %418, label %438, label %419

419:                                              ; preds = %407
  %420 = load ptr, ptr %5, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.page, ptr %420, i32 0, i32 3
  %422 = getelementptr inbounds %struct.anon.1, ptr %421, i32 0, i32 0
  %423 = load i16, ptr %422, align 1, !tbaa !19
  %424 = zext i16 %423 to i32
  %425 = and i32 %424, 1
  %426 = icmp ne i32 %425, 0
  br i1 %426, label %438, label %427

427:                                              ; preds = %419
  %428 = load ptr, ptr %5, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.page, ptr %428, i32 0, i32 3
  %430 = getelementptr inbounds %struct.anon.1, ptr %429, i32 0, i32 1
  %431 = load i16, ptr %430, align 1, !tbaa !19
  %432 = zext i16 %431 to i32
  %433 = add i32 20, %432
  %434 = load ptr, ptr %8, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.MDBX_env, ptr %434, i32 0, i32 2
  %436 = load i32, ptr %435, align 8, !tbaa !22
  %437 = icmp ugt i32 %433, %436
  br label %438

438:                                              ; preds = %427, %419, %407
  %439 = phi i1 [ true, %419 ], [ true, %407 ], [ %437, %427 ]
  %440 = xor i1 %439, true
  %441 = xor i1 %440, true
  %442 = zext i1 %441 to i32
  %443 = sext i32 %442 to i64
  %444 = call i64 @llvm.expect.i64(i64 %443, i64 0)
  %445 = icmp ne i64 %444, 0
  br i1 %445, label %446, label %461

446:                                              ; preds = %438
  %447 = load ptr, ptr %5, align 8, !tbaa !5
  %448 = load ptr, ptr %5, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.page, ptr %448, i32 0, i32 3
  %450 = getelementptr inbounds %struct.anon.1, ptr %449, i32 0, i32 0
  %451 = load i16, ptr %450, align 1, !tbaa !19
  %452 = zext i16 %451 to i32
  %453 = load ptr, ptr %5, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.page, ptr %453, i32 0, i32 3
  %455 = getelementptr inbounds %struct.anon.1, ptr %454, i32 0, i32 1
  %456 = load i16, ptr %455, align 1, !tbaa !19
  %457 = zext i16 %456 to i32
  %458 = load ptr, ptr %8, align 8, !tbaa !5
  %459 = call i64 @page_space(ptr noundef %458) #14
  %460 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %447, ptr noundef @.str.19, i32 noundef %452, i32 noundef %457, i64 noundef %459) #13
  store i32 %460, ptr %7, align 4, !tbaa !9
  br label %461

461:                                              ; preds = %446, %438
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #12
  %462 = load ptr, ptr %5, align 8, !tbaa !5
  %463 = ptrtoint ptr %462 to i64
  %464 = load ptr, ptr %8, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.MDBX_env, ptr %464, i32 0, i32 2
  %466 = load i32, ptr %465, align 8, !tbaa !22
  %467 = zext i32 %466 to i64
  %468 = add nsw i64 %463, %467
  %469 = inttoptr i64 %468 to ptr
  store ptr %469, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #12
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = call i64 @page_numkeys(ptr noundef %470) #14
  store i64 %471, ptr %16, align 8, !tbaa !20
  %472 = load i64, ptr %16, align 8, !tbaa !20
  %473 = load ptr, ptr %5, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.page, ptr %473, i32 0, i32 2
  %475 = load i16, ptr %474, align 1, !tbaa !21
  %476 = zext i16 %475 to i32
  %477 = and i32 %476, 1
  %478 = trunc i32 %477 to i8
  %479 = zext i8 %478 to i64
  %480 = icmp ule i64 %472, %479
  %481 = xor i1 %480, true
  %482 = xor i1 %481, true
  %483 = zext i1 %482 to i32
  %484 = sext i32 %483 to i64
  %485 = call i64 @llvm.expect.i64(i64 %484, i64 0)
  %486 = icmp ne i64 %485, 0
  br i1 %486, label %487, label %535

487:                                              ; preds = %461
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.MDBX_cursor, ptr %488, i32 0, i32 1
  %490 = getelementptr inbounds %struct.anon.3, ptr %489, i32 0, i32 0
  %491 = load i8, ptr %490, align 4, !tbaa !19
  %492 = sext i8 %491 to i32
  %493 = and i32 %492, 1
  %494 = icmp ne i32 %493, 0
  br i1 %494, label %495, label %502

495:                                              ; preds = %487
  %496 = load ptr, ptr %4, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.MDBX_cursor, ptr %496, i32 0, i32 6
  %498 = load ptr, ptr %497, align 8, !tbaa !36
  %499 = getelementptr inbounds %struct.tree, ptr %498, i32 0, i32 8
  %500 = load i64, ptr %499, align 4, !tbaa !40
  %501 = icmp ne i64 %500, 0
  br i1 %501, label %502, label %534

502:                                              ; preds = %495, %487
  %503 = load ptr, ptr %4, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.MDBX_cursor, ptr %503, i32 0, i32 2
  %505 = load i8, ptr %504, align 2, !tbaa !35
  %506 = zext i8 %505 to i32
  %507 = and i32 %506, 8
  %508 = icmp ne i32 %507, 0
  br i1 %508, label %509, label %522

509:                                              ; preds = %502
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.MDBX_cursor, ptr %510, i32 0, i32 5
  %512 = load ptr, ptr %511, align 8, !tbaa !11
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  %514 = call zeroext i1 @is_modifable(ptr noundef %512, ptr noundef %513) #14
  br i1 %514, label %534, label %515

515:                                              ; preds = %509
  %516 = load ptr, ptr %5, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.page, ptr %516, i32 0, i32 2
  %518 = load i16, ptr %517, align 1, !tbaa !21
  %519 = zext i16 %518 to i32
  %520 = and i32 %519, 64
  %521 = icmp ne i32 %520, 0
  br i1 %521, label %534, label %522

522:                                              ; preds = %515, %502
  %523 = load ptr, ptr %5, align 8, !tbaa !5
  %524 = load ptr, ptr %5, align 8, !tbaa !5
  %525 = call zeroext i1 @is_branch(ptr noundef %524) #14
  %526 = zext i1 %525 to i64
  %527 = select i1 %525, ptr @.str.21, ptr @.str.22
  %528 = load i64, ptr %16, align 8, !tbaa !20
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = call zeroext i1 @is_branch(ptr noundef %529) #14
  %531 = zext i1 %530 to i32
  %532 = add nsw i32 1, %531
  %533 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %523, ptr noundef @.str.20, ptr noundef %527, i64 noundef %528, i32 noundef %532) #13
  store i32 %533, ptr %7, align 4, !tbaa !9
  br label %534

534:                                              ; preds = %522, %515, %509, %495
  br label %535

535:                                              ; preds = %534, %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #12
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.MDBX_env, ptr %536, i32 0, i32 2
  %538 = load i32, ptr %537, align 8, !tbaa !22
  %539 = zext i32 %538 to i64
  %540 = call i64 @keysize_max(i64 noundef %539, i32 noundef 0) #16
  store i64 %540, ptr %17, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #12
  %541 = load ptr, ptr %5, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.page, ptr %541, i32 0, i32 1
  %543 = load i16, ptr %542, align 1, !tbaa !21
  %544 = zext i16 %543 to i64
  store i64 %544, ptr %18, align 8, !tbaa !20
  %545 = load ptr, ptr %5, align 8, !tbaa !5
  %546 = call zeroext i1 @is_dupfix_leaf(ptr noundef %545) #14
  br i1 %546, label %547, label %631

547:                                              ; preds = %535
  %548 = load ptr, ptr %4, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.MDBX_cursor, ptr %548, i32 0, i32 1
  %550 = getelementptr inbounds %struct.anon.3, ptr %549, i32 0, i32 0
  %551 = load i8, ptr %550, align 4, !tbaa !19
  %552 = sext i8 %551 to i32
  %553 = and i32 %552, 1
  %554 = icmp eq i32 %553, 0
  br i1 %554, label %564, label %555

555:                                              ; preds = %547
  %556 = load ptr, ptr %4, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.MDBX_cursor, ptr %556, i32 0, i32 6
  %558 = load ptr, ptr %557, align 8, !tbaa !36
  %559 = getelementptr inbounds %struct.tree, ptr %558, i32 0, i32 0
  %560 = load i16, ptr %559, align 4, !tbaa !37
  %561 = zext i16 %560 to i32
  %562 = and i32 %561, 16
  %563 = icmp eq i32 %562, 0
  br label %564

564:                                              ; preds = %555, %547
  %565 = phi i1 [ true, %547 ], [ %563, %555 ]
  %566 = xor i1 %565, true
  %567 = xor i1 %566, true
  %568 = zext i1 %567 to i32
  %569 = sext i32 %568 to i64
  %570 = call i64 @llvm.expect.i64(i64 %569, i64 0)
  %571 = icmp ne i64 %570, 0
  br i1 %571, label %572, label %581

572:                                              ; preds = %564
  %573 = load ptr, ptr %5, align 8, !tbaa !5
  %574 = load ptr, ptr %4, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.MDBX_cursor, ptr %574, i32 0, i32 6
  %576 = load ptr, ptr %575, align 8, !tbaa !36
  %577 = getelementptr inbounds %struct.tree, ptr %576, i32 0, i32 0
  %578 = load i16, ptr %577, align 4, !tbaa !37
  %579 = zext i16 %578 to i32
  %580 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %573, ptr noundef @.str.23, i32 noundef %579) #13
  store i32 %580, ptr %7, align 4, !tbaa !9
  br label %630

581:                                              ; preds = %564
  %582 = load i64, ptr %18, align 8, !tbaa !20
  %583 = load ptr, ptr %4, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.MDBX_cursor, ptr %583, i32 0, i32 6
  %585 = load ptr, ptr %584, align 8, !tbaa !36
  %586 = getelementptr inbounds %struct.tree, ptr %585, i32 0, i32 2
  %587 = load i32, ptr %586, align 4, !tbaa !41
  %588 = zext i32 %587 to i64
  %589 = icmp ne i64 %582, %588
  %590 = xor i1 %589, true
  %591 = xor i1 %590, true
  %592 = zext i1 %591 to i32
  %593 = sext i32 %592 to i64
  %594 = call i64 @llvm.expect.i64(i64 %593, i64 0)
  %595 = icmp ne i64 %594, 0
  br i1 %595, label %596, label %600

596:                                              ; preds = %581
  %597 = load ptr, ptr %5, align 8, !tbaa !5
  %598 = load i64, ptr %18, align 8, !tbaa !20
  %599 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %597, ptr noundef @.str.24, i64 noundef %598) #13
  store i32 %599, ptr %7, align 4, !tbaa !9
  br label %629

600:                                              ; preds = %581
  %601 = load i64, ptr %18, align 8, !tbaa !20
  %602 = load i64, ptr %16, align 8, !tbaa !20
  %603 = and i64 %601, %602
  %604 = load ptr, ptr %5, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.page, ptr %604, i32 0, i32 3
  %606 = getelementptr inbounds %struct.anon.1, ptr %605, i32 0, i32 1
  %607 = load i16, ptr %606, align 1, !tbaa !19
  %608 = zext i16 %607 to i64
  %609 = xor i64 %603, %608
  %610 = and i64 %609, 1
  %611 = icmp ne i64 %610, 0
  %612 = xor i1 %611, true
  %613 = xor i1 %612, true
  %614 = zext i1 %613 to i32
  %615 = sext i32 %614 to i64
  %616 = call i64 @llvm.expect.i64(i64 %615, i64 0)
  %617 = icmp ne i64 %616, 0
  br i1 %617, label %618, label %628

618:                                              ; preds = %600
  %619 = load ptr, ptr %5, align 8, !tbaa !5
  %620 = load ptr, ptr %5, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.page, ptr %620, i32 0, i32 3
  %622 = getelementptr inbounds %struct.anon.1, ptr %621, i32 0, i32 1
  %623 = load i16, ptr %622, align 1, !tbaa !19
  %624 = zext i16 %623 to i32
  %625 = load i64, ptr %16, align 8, !tbaa !20
  %626 = load i64, ptr %18, align 8, !tbaa !20
  %627 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %619, ptr noundef @.str.25, i32 noundef %624, i64 noundef %625, i64 noundef %626) #13
  store i32 %627, ptr %7, align 4, !tbaa !9
  br label %628

628:                                              ; preds = %618, %600
  br label %629

629:                                              ; preds = %628, %596
  br label %630

630:                                              ; preds = %629, %572
  br label %678

631:                                              ; preds = %535
  %632 = load ptr, ptr %5, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.page, ptr %632, i32 0, i32 3
  %634 = getelementptr inbounds %struct.anon.1, ptr %633, i32 0, i32 1
  %635 = load i16, ptr %634, align 1, !tbaa !19
  %636 = zext i16 %635 to i32
  %637 = and i32 %636, 1
  %638 = icmp ne i32 %637, 0
  br i1 %638, label %658, label %639

639:                                              ; preds = %631
  %640 = load ptr, ptr %5, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.page, ptr %640, i32 0, i32 3
  %642 = getelementptr inbounds %struct.anon.1, ptr %641, i32 0, i32 1
  %643 = load i16, ptr %642, align 1, !tbaa !19
  %644 = zext i16 %643 to i32
  %645 = add i32 20, %644
  %646 = zext i32 %645 to i64
  %647 = load i64, ptr %16, align 8, !tbaa !20
  %648 = mul i64 %647, 8
  %649 = add i64 %646, %648
  %650 = load i64, ptr %16, align 8, !tbaa !20
  %651 = add i64 %649, %650
  %652 = sub i64 %651, 1
  %653 = load ptr, ptr %8, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.MDBX_env, ptr %653, i32 0, i32 2
  %655 = load i32, ptr %654, align 8, !tbaa !22
  %656 = zext i32 %655 to i64
  %657 = icmp ugt i64 %652, %656
  br label %658

658:                                              ; preds = %639, %631
  %659 = phi i1 [ true, %631 ], [ %657, %639 ]
  %660 = xor i1 %659, true
  %661 = xor i1 %660, true
  %662 = zext i1 %661 to i32
  %663 = sext i32 %662 to i64
  %664 = call i64 @llvm.expect.i64(i64 %663, i64 0)
  %665 = icmp ne i64 %664, 0
  br i1 %665, label %666, label %677

666:                                              ; preds = %658
  %667 = load ptr, ptr %5, align 8, !tbaa !5
  %668 = load ptr, ptr %5, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.page, ptr %668, i32 0, i32 3
  %670 = getelementptr inbounds %struct.anon.1, ptr %669, i32 0, i32 1
  %671 = load i16, ptr %670, align 1, !tbaa !19
  %672 = zext i16 %671 to i32
  %673 = load i64, ptr %16, align 8, !tbaa !20
  %674 = load ptr, ptr %8, align 8, !tbaa !5
  %675 = call i64 @page_space(ptr noundef %674) #14
  %676 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %667, ptr noundef @.str.26, i32 noundef %672, i64 noundef %673, i64 noundef %675) #13
  store i32 %676, ptr %7, align 4, !tbaa !9
  br label %677

677:                                              ; preds = %666, %658
  br label %678

678:                                              ; preds = %677, %630
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #12
  call void @llvm.memset.p0.i64(ptr align 8 %20, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #12
  %679 = load ptr, ptr %4, align 8, !tbaa !5
  call void @value_clc(ptr dead_on_unwind writable sret(%struct.clc) align 8 %21, ptr noundef %679) #17
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #12
  store i64 0, ptr %22, align 8, !tbaa !20
  br label %680

680:                                              ; preds = %1767, %678
  %681 = load i64, ptr %22, align 8, !tbaa !20
  %682 = load i64, ptr %16, align 8, !tbaa !20
  %683 = icmp ult i64 %681, %682
  br i1 %683, label %685, label %684

684:                                              ; preds = %680
  store i32 7, ptr %13, align 4
  br label %1770

685:                                              ; preds = %680
  %686 = load ptr, ptr %5, align 8, !tbaa !5
  %687 = call zeroext i1 @is_dupfix_leaf(ptr noundef %686) #14
  br i1 %687, label %688, label %834

688:                                              ; preds = %685
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #12
  %689 = load ptr, ptr %5, align 8, !tbaa !5
  %690 = load i64, ptr %22, align 8, !tbaa !20
  %691 = load ptr, ptr %4, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.MDBX_cursor, ptr %691, i32 0, i32 6
  %693 = load ptr, ptr %692, align 8, !tbaa !36
  %694 = getelementptr inbounds %struct.tree, ptr %693, i32 0, i32 2
  %695 = load i32, ptr %694, align 4, !tbaa !41
  %696 = zext i32 %695 to i64
  %697 = call ptr @page_dupfix_ptr(ptr noundef %689, i64 noundef %690, i64 noundef %696) #14
  store ptr %697, ptr %23, align 8, !tbaa !5
  %698 = load ptr, ptr %15, align 8, !tbaa !5
  %699 = load ptr, ptr %23, align 8, !tbaa !5
  %700 = load i64, ptr %18, align 8, !tbaa !20
  %701 = getelementptr inbounds i8, ptr %699, i64 %700
  %702 = icmp ult ptr %698, %701
  %703 = xor i1 %702, true
  %704 = xor i1 %703, true
  %705 = zext i1 %704 to i32
  %706 = sext i32 %705 to i64
  %707 = call i64 @llvm.expect.i64(i64 %706, i64 0)
  %708 = icmp ne i64 %707, 0
  br i1 %708, label %709, label %719

709:                                              ; preds = %688
  %710 = load ptr, ptr %5, align 8, !tbaa !5
  %711 = load ptr, ptr %23, align 8, !tbaa !5
  %712 = load i64, ptr %18, align 8, !tbaa !20
  %713 = getelementptr inbounds i8, ptr %711, i64 %712
  %714 = load ptr, ptr %15, align 8, !tbaa !5
  %715 = ptrtoint ptr %713 to i64
  %716 = ptrtoint ptr %714 to i64
  %717 = sub i64 %715, %716
  %718 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %710, ptr noundef @.str.27, i64 noundef %717) #13
  store i32 %718, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %831

719:                                              ; preds = %688
  %720 = load i64, ptr %18, align 8, !tbaa !20
  %721 = load ptr, ptr %4, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.MDBX_cursor, ptr %721, i32 0, i32 7
  %723 = load ptr, ptr %722, align 8, !tbaa !42
  %724 = getelementptr inbounds %struct.clc2, ptr %723, i32 0, i32 0
  %725 = getelementptr inbounds %struct.clc, ptr %724, i32 0, i32 1
  %726 = load i64, ptr %725, align 8, !tbaa !43
  %727 = icmp ne i64 %720, %726
  %728 = xor i1 %727, true
  %729 = xor i1 %728, true
  %730 = zext i1 %729 to i32
  %731 = sext i32 %730 to i64
  %732 = call i64 @llvm.expect.i64(i64 %731, i64 0)
  %733 = icmp ne i64 %732, 0
  br i1 %733, label %734, label %789

734:                                              ; preds = %719
  %735 = load i64, ptr %18, align 8, !tbaa !20
  %736 = load ptr, ptr %4, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.MDBX_cursor, ptr %736, i32 0, i32 7
  %738 = load ptr, ptr %737, align 8, !tbaa !42
  %739 = getelementptr inbounds %struct.clc2, ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds %struct.clc, ptr %739, i32 0, i32 1
  %741 = load i64, ptr %740, align 8, !tbaa !43
  %742 = icmp ult i64 %735, %741
  br i1 %742, label %752, label %743

743:                                              ; preds = %734
  %744 = load i64, ptr %18, align 8, !tbaa !20
  %745 = load ptr, ptr %4, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.MDBX_cursor, ptr %745, i32 0, i32 7
  %747 = load ptr, ptr %746, align 8, !tbaa !42
  %748 = getelementptr inbounds %struct.clc2, ptr %747, i32 0, i32 0
  %749 = getelementptr inbounds %struct.clc, ptr %748, i32 0, i32 2
  %750 = load i64, ptr %749, align 8, !tbaa !46
  %751 = icmp ugt i64 %744, %750
  br label %752

752:                                              ; preds = %743, %734
  %753 = phi i1 [ true, %734 ], [ %751, %743 ]
  %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 %776

760:                                              ; preds = %752
  %761 = load ptr, ptr %5, align 8, !tbaa !5
  %762 = load i64, ptr %18, align 8, !tbaa !20
  %763 = load ptr, ptr %4, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.MDBX_cursor, ptr %763, i32 0, i32 7
  %765 = load ptr, ptr %764, align 8, !tbaa !42
  %766 = getelementptr inbounds %struct.clc2, ptr %765, i32 0, i32 0
  %767 = getelementptr inbounds %struct.clc, ptr %766, i32 0, i32 1
  %768 = load i64, ptr %767, align 8, !tbaa !43
  %769 = load ptr, ptr %4, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.MDBX_cursor, ptr %769, i32 0, i32 7
  %771 = load ptr, ptr %770, align 8, !tbaa !42
  %772 = getelementptr inbounds %struct.clc2, ptr %771, i32 0, i32 0
  %773 = getelementptr inbounds %struct.clc, ptr %772, i32 0, i32 2
  %774 = load i64, ptr %773, align 8, !tbaa !46
  %775 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %761, ptr noundef @.str.28, i64 noundef %762, i64 noundef %768, i64 noundef %774) #13
  store i32 %775, ptr %7, align 4, !tbaa !9
  br label %788

776:                                              ; preds = %752
  %777 = load i64, ptr %18, align 8, !tbaa !20
  %778 = load ptr, ptr %4, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.MDBX_cursor, ptr %778, i32 0, i32 7
  %780 = load ptr, ptr %779, align 8, !tbaa !42
  %781 = getelementptr inbounds %struct.clc2, ptr %780, i32 0, i32 0
  %782 = getelementptr inbounds %struct.clc, ptr %781, i32 0, i32 2
  store i64 %777, ptr %782, align 8, !tbaa !46
  %783 = load ptr, ptr %4, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.MDBX_cursor, ptr %783, i32 0, i32 7
  %785 = load ptr, ptr %784, align 8, !tbaa !42
  %786 = getelementptr inbounds %struct.clc2, ptr %785, i32 0, i32 0
  %787 = getelementptr inbounds %struct.clc, ptr %786, i32 0, i32 1
  store i64 %777, ptr %787, align 8, !tbaa !43
  br label %788

788:                                              ; preds = %776, %760
  br label %789

789:                                              ; preds = %788, %719
  %790 = load ptr, ptr %4, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.MDBX_cursor, ptr %790, i32 0, i32 2
  %792 = load i8, ptr %791, align 2, !tbaa !35
  %793 = zext i8 %792 to i32
  %794 = and i32 %793, 16
  %795 = icmp eq i32 %794, 0
  br i1 %795, label %796, label %830

796:                                              ; preds = %789
  %797 = load ptr, ptr %23, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 0
  store ptr %797, ptr %798, align 8, !tbaa !47
  %799 = load i64, ptr %18, align 8, !tbaa !20
  %800 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 1
  store i64 %799, ptr %800, align 8, !tbaa !49
  %801 = getelementptr inbounds %struct.iovec, ptr %20, i32 0, i32 0
  %802 = load ptr, ptr %801, align 8, !tbaa !47
  %803 = icmp ne ptr %802, null
  br i1 %803, label %804, label %829

804:                                              ; preds = %796
  %805 = load ptr, ptr %4, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.MDBX_cursor, ptr %805, i32 0, i32 7
  %807 = load ptr, ptr %806, align 8, !tbaa !42
  %808 = getelementptr inbounds %struct.clc2, ptr %807, i32 0, i32 0
  %809 = getelementptr inbounds %struct.clc, ptr %808, i32 0, i32 0
  %810 = load ptr, ptr %809, align 8, !tbaa !50
  %811 = call i32 %810(ptr noundef %20, ptr noundef %19)
  %812 = icmp sge i32 %811, 0
  %813 = xor i1 %812, true
  %814 = xor i1 %813, true
  %815 = zext i1 %814 to i32
  %816 = sext i32 %815 to i64
  %817 = call i64 @llvm.expect.i64(i64 %816, i64 0)
  %818 = icmp ne i64 %817, 0
  br i1 %818, label %819, label %829

819:                                              ; preds = %804
  %820 = load ptr, ptr %5, align 8, !tbaa !5
  %821 = load i64, ptr %22, align 8, !tbaa !20
  %822 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %823 = call ptr @mdbx_dump_val(ptr noundef %20, ptr noundef %822, i64 noundef 255)
  %824 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %825 = getelementptr inbounds i8, ptr %824, i64 254
  %826 = getelementptr inbounds i8, ptr %825, i64 1
  %827 = call ptr @mdbx_dump_val(ptr noundef %19, ptr noundef %826, i64 noundef 255)
  %828 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %820, ptr noundef @.str.29, i64 noundef %821, ptr noundef %823, ptr noundef %827) #13
  store i32 %828, ptr %7, align 4, !tbaa !9
  br label %829

829:                                              ; preds = %819, %804, %796
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !51
  br label %830

830:                                              ; preds = %829, %789
  store i32 0, ptr %13, align 4
  br label %831

831:                                              ; preds = %830, %709
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #12
  %832 = load i32, ptr %13, align 4
  switch i32 %832, label %1777 [
    i32 0, label %833
    i32 9, label %1767
  ]

833:                                              ; preds = %831
  br label %1766

834:                                              ; preds = %685
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #12
  %835 = load ptr, ptr %5, align 8, !tbaa !5
  %836 = load i64, ptr %22, align 8, !tbaa !20
  %837 = call ptr @page_node(ptr noundef %835, i64 noundef %836) #14
  store ptr %837, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  %838 = load ptr, ptr %24, align 8, !tbaa !5
  %839 = ptrtoint ptr %838 to i64
  %840 = add nsw i64 %839, 8
  %841 = inttoptr i64 %840 to ptr
  store ptr %841, ptr %25, align 8, !tbaa !5
  %842 = load ptr, ptr %25, align 8, !tbaa !5
  %843 = load ptr, ptr %15, align 8, !tbaa !5
  %844 = icmp ugt ptr %842, %843
  %845 = xor i1 %844, true
  %846 = xor i1 %845, true
  %847 = zext i1 %846 to i32
  %848 = sext i32 %847 to i64
  %849 = call i64 @llvm.expect.i64(i64 %848, i64 0)
  %850 = icmp ne i64 %849, 0
  br i1 %850, label %851, label %860

851:                                              ; preds = %834
  %852 = load ptr, ptr %5, align 8, !tbaa !5
  %853 = load i64, ptr %22, align 8, !tbaa !20
  %854 = load ptr, ptr %25, align 8, !tbaa !5
  %855 = load ptr, ptr %15, align 8, !tbaa !5
  %856 = ptrtoint ptr %854 to i64
  %857 = ptrtoint ptr %855 to i64
  %858 = sub i64 %856, %857
  %859 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %852, ptr noundef @.str.30, i64 noundef %853, i64 noundef %858) #13
  store i32 %859, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1763

860:                                              ; preds = %834
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #12
  %861 = load ptr, ptr %24, align 8, !tbaa !5
  %862 = call i64 @node_ks(ptr noundef %861) #14
  store i64 %862, ptr %26, align 8, !tbaa !20
  %863 = load i64, ptr %26, align 8, !tbaa !20
  %864 = load i64, ptr %17, align 8, !tbaa !20
  %865 = icmp ugt i64 %863, %864
  %866 = xor i1 %865, true
  %867 = xor i1 %866, true
  %868 = zext i1 %867 to i32
  %869 = sext i32 %868 to i64
  %870 = call i64 @llvm.expect.i64(i64 %869, i64 0)
  %871 = icmp ne i64 %870, 0
  br i1 %871, label %872, label %877

872:                                              ; preds = %860
  %873 = load ptr, ptr %5, align 8, !tbaa !5
  %874 = load i64, ptr %22, align 8, !tbaa !20
  %875 = load i64, ptr %26, align 8, !tbaa !20
  %876 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %873, ptr noundef @.str.31, i64 noundef %874, i64 noundef %875) #13
  store i32 %876, ptr %7, align 4, !tbaa !9
  br label %877

877:                                              ; preds = %872, %860
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #12
  %878 = load ptr, ptr %24, align 8, !tbaa !5
  %879 = call ptr @node_key(ptr noundef %878) #14
  store ptr %879, ptr %27, align 8, !tbaa !5
  %880 = load ptr, ptr %15, align 8, !tbaa !5
  %881 = load ptr, ptr %27, align 8, !tbaa !5
  %882 = load i64, ptr %26, align 8, !tbaa !20
  %883 = getelementptr inbounds i8, ptr %881, i64 %882
  %884 = icmp ult ptr %880, %883
  %885 = xor i1 %884, true
  %886 = xor i1 %885, true
  %887 = zext i1 %886 to i32
  %888 = sext i32 %887 to i64
  %889 = call i64 @llvm.expect.i64(i64 %888, i64 0)
  %890 = icmp ne i64 %889, 0
  br i1 %890, label %891, label %902

891:                                              ; preds = %877
  %892 = load ptr, ptr %5, align 8, !tbaa !5
  %893 = load i64, ptr %22, align 8, !tbaa !20
  %894 = load ptr, ptr %27, align 8, !tbaa !5
  %895 = load i64, ptr %26, align 8, !tbaa !20
  %896 = getelementptr inbounds i8, ptr %894, i64 %895
  %897 = load ptr, ptr %15, align 8, !tbaa !5
  %898 = ptrtoint ptr %896 to i64
  %899 = ptrtoint ptr %897 to i64
  %900 = sub i64 %898, %899
  %901 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %892, ptr noundef @.str.32, i64 noundef %893, i64 noundef %900) #13
  store i32 %901, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1762

902:                                              ; preds = %877
  %903 = load ptr, ptr %5, align 8, !tbaa !5
  %904 = call zeroext i1 @is_leaf(ptr noundef %903) #14
  br i1 %904, label %908, label %905

905:                                              ; preds = %902
  %906 = load i64, ptr %22, align 8, !tbaa !20
  %907 = icmp ugt i64 %906, 0
  br i1 %907, label %908, label %993

908:                                              ; preds = %905, %902
  %909 = load i64, ptr %26, align 8, !tbaa !20
  %910 = load ptr, ptr %4, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.MDBX_cursor, ptr %910, i32 0, i32 7
  %912 = load ptr, ptr %911, align 8, !tbaa !42
  %913 = getelementptr inbounds %struct.clc2, ptr %912, i32 0, i32 0
  %914 = getelementptr inbounds %struct.clc, ptr %913, i32 0, i32 1
  %915 = load i64, ptr %914, align 8, !tbaa !43
  %916 = icmp ult i64 %909, %915
  br i1 %916, label %926, label %917

917:                                              ; preds = %908
  %918 = load i64, ptr %26, align 8, !tbaa !20
  %919 = load ptr, ptr %4, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.MDBX_cursor, ptr %919, i32 0, i32 7
  %921 = load ptr, ptr %920, align 8, !tbaa !42
  %922 = getelementptr inbounds %struct.clc2, ptr %921, i32 0, i32 0
  %923 = getelementptr inbounds %struct.clc, ptr %922, i32 0, i32 2
  %924 = load i64, ptr %923, align 8, !tbaa !46
  %925 = icmp ugt i64 %918, %924
  br label %926

926:                                              ; preds = %917, %908
  %927 = phi i1 [ true, %908 ], [ %925, %917 ]
  %928 = xor i1 %927, true
  %929 = xor i1 %928, true
  %930 = zext i1 %929 to i32
  %931 = sext i32 %930 to i64
  %932 = call i64 @llvm.expect.i64(i64 %931, i64 0)
  %933 = icmp ne i64 %932, 0
  br i1 %933, label %934, label %951

934:                                              ; preds = %926
  %935 = load ptr, ptr %5, align 8, !tbaa !5
  %936 = load i64, ptr %22, align 8, !tbaa !20
  %937 = load i64, ptr %26, align 8, !tbaa !20
  %938 = load ptr, ptr %4, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.MDBX_cursor, ptr %938, i32 0, i32 7
  %940 = load ptr, ptr %939, align 8, !tbaa !42
  %941 = getelementptr inbounds %struct.clc2, ptr %940, i32 0, i32 0
  %942 = getelementptr inbounds %struct.clc, ptr %941, i32 0, i32 1
  %943 = load i64, ptr %942, align 8, !tbaa !43
  %944 = load ptr, ptr %4, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.MDBX_cursor, ptr %944, i32 0, i32 7
  %946 = load ptr, ptr %945, align 8, !tbaa !42
  %947 = getelementptr inbounds %struct.clc2, ptr %946, i32 0, i32 0
  %948 = getelementptr inbounds %struct.clc, ptr %947, i32 0, i32 2
  %949 = load i64, ptr %948, align 8, !tbaa !46
  %950 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %935, ptr noundef @.str.33, i64 noundef %936, i64 noundef %937, i64 noundef %943, i64 noundef %949) #13
  store i32 %950, ptr %7, align 4, !tbaa !9
  br label %951

951:                                              ; preds = %934, %926
  %952 = load ptr, ptr %4, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.MDBX_cursor, ptr %952, i32 0, i32 2
  %954 = load i8, ptr %953, align 2, !tbaa !35
  %955 = zext i8 %954 to i32
  %956 = and i32 %955, 16
  %957 = icmp eq i32 %956, 0
  br i1 %957, label %958, label %992

958:                                              ; preds = %951
  %959 = load ptr, ptr %27, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 0
  store ptr %959, ptr %960, align 8, !tbaa !47
  %961 = load i64, ptr %26, align 8, !tbaa !20
  %962 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 1
  store i64 %961, ptr %962, align 8, !tbaa !49
  %963 = getelementptr inbounds %struct.iovec, ptr %20, i32 0, i32 0
  %964 = load ptr, ptr %963, align 8, !tbaa !47
  %965 = icmp ne ptr %964, null
  br i1 %965, label %966, label %991

966:                                              ; preds = %958
  %967 = load ptr, ptr %4, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct.MDBX_cursor, ptr %967, i32 0, i32 7
  %969 = load ptr, ptr %968, align 8, !tbaa !42
  %970 = getelementptr inbounds %struct.clc2, ptr %969, i32 0, i32 0
  %971 = getelementptr inbounds %struct.clc, ptr %970, i32 0, i32 0
  %972 = load ptr, ptr %971, align 8, !tbaa !50
  %973 = call i32 %972(ptr noundef %20, ptr noundef %19)
  %974 = icmp sge i32 %973, 0
  %975 = xor i1 %974, true
  %976 = xor i1 %975, true
  %977 = zext i1 %976 to i32
  %978 = sext i32 %977 to i64
  %979 = call i64 @llvm.expect.i64(i64 %978, i64 0)
  %980 = icmp ne i64 %979, 0
  br i1 %980, label %981, label %991

981:                                              ; preds = %966
  %982 = load ptr, ptr %5, align 8, !tbaa !5
  %983 = load i64, ptr %22, align 8, !tbaa !20
  %984 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %985 = call ptr @mdbx_dump_val(ptr noundef %20, ptr noundef %984, i64 noundef 255)
  %986 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %987 = getelementptr inbounds i8, ptr %986, i64 254
  %988 = getelementptr inbounds i8, ptr %987, i64 1
  %989 = call ptr @mdbx_dump_val(ptr noundef %19, ptr noundef %988, i64 noundef 255)
  %990 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %982, ptr noundef @.str.34, i64 noundef %983, ptr noundef %985, ptr noundef %989) #13
  store i32 %990, ptr %7, align 4, !tbaa !9
  br label %991

991:                                              ; preds = %981, %966, %958
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 8 %19, i64 16, i1 false), !tbaa.struct !51
  br label %992

992:                                              ; preds = %991, %951
  br label %993

993:                                              ; preds = %992, %905
  %994 = load ptr, ptr %5, align 8, !tbaa !5
  %995 = call zeroext i1 @is_branch(ptr noundef %994) #14
  br i1 %995, label %996, label %1091

996:                                              ; preds = %993
  %997 = load ptr, ptr %4, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.MDBX_cursor, ptr %997, i32 0, i32 2
  %999 = load i8, ptr %998, align 2, !tbaa !35
  %1000 = zext i8 %999 to i32
  %1001 = and i32 %1000, 8
  %1002 = icmp eq i32 %1001, 0
  br i1 %1002, label %1003, label %1020

1003:                                             ; preds = %996
  %1004 = load i64, ptr %22, align 8, !tbaa !20
  %1005 = icmp eq i64 %1004, 0
  br i1 %1005, label %1006, label %1020

1006:                                             ; preds = %1003
  %1007 = load i64, ptr %26, align 8, !tbaa !20
  %1008 = icmp ne i64 %1007, 0
  %1009 = xor i1 %1008, true
  %1010 = xor i1 %1009, true
  %1011 = zext i1 %1010 to i32
  %1012 = sext i32 %1011 to i64
  %1013 = call i64 @llvm.expect.i64(i64 %1012, i64 0)
  %1014 = icmp ne i64 %1013, 0
  br i1 %1014, label %1015, label %1020

1015:                                             ; preds = %1006
  %1016 = load ptr, ptr %5, align 8, !tbaa !5
  %1017 = load i64, ptr %22, align 8, !tbaa !20
  %1018 = load i64, ptr %26, align 8, !tbaa !20
  %1019 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1016, ptr noundef @.str.35, i64 noundef %1017, i64 noundef %1018) #13
  store i32 %1019, ptr %7, align 4, !tbaa !9
  br label %1020

1020:                                             ; preds = %1015, %1006, %1003, %996
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #12
  %1021 = load ptr, ptr %24, align 8, !tbaa !5
  %1022 = call i32 @node_pgno(ptr noundef %1021) #14
  store i32 %1022, ptr %28, align 4, !tbaa !9
  %1023 = load i32, ptr %28, align 4, !tbaa !9
  %1024 = icmp ult i32 %1023, 3
  %1025 = xor i1 %1024, true
  %1026 = xor i1 %1025, true
  %1027 = zext i1 %1026 to i32
  %1028 = sext i32 %1027 to i64
  %1029 = call i64 @llvm.expect.i64(i64 %1028, i64 0)
  %1030 = icmp ne i64 %1029, 0
  br i1 %1030, label %1068, label %1031

1031:                                             ; preds = %1020
  %1032 = load i32, ptr %28, align 4, !tbaa !9
  %1033 = load ptr, ptr %4, align 8, !tbaa !5
  %1034 = getelementptr inbounds %struct.MDBX_cursor, ptr %1033, i32 0, i32 5
  %1035 = load ptr, ptr %1034, align 8, !tbaa !11
  %1036 = getelementptr inbounds %struct.MDBX_txn, ptr %1035, i32 0, i32 6
  %1037 = getelementptr inbounds %struct.geo, ptr %1036, i32 0, i32 5
  %1038 = load i32, ptr %1037, align 8, !tbaa !19
  %1039 = icmp uge i32 %1032, %1038
  %1040 = xor i1 %1039, true
  %1041 = xor i1 %1040, true
  %1042 = zext i1 %1041 to i32
  %1043 = sext i32 %1042 to i64
  %1044 = call i64 @llvm.expect.i64(i64 %1043, i64 0)
  %1045 = icmp ne i64 %1044, 0
  br i1 %1045, label %1046, label %1073

1046:                                             ; preds = %1031
  %1047 = load i32, ptr %28, align 4, !tbaa !9
  %1048 = load ptr, ptr %4, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.MDBX_cursor, ptr %1048, i32 0, i32 5
  %1050 = load ptr, ptr %1049, align 8, !tbaa !11
  %1051 = getelementptr inbounds %struct.MDBX_txn, ptr %1050, i32 0, i32 6
  %1052 = getelementptr inbounds %struct.geo, ptr %1051, i32 0, i32 4
  %1053 = load i32, ptr %1052, align 4, !tbaa !19
  %1054 = icmp uge i32 %1047, %1053
  %1055 = xor i1 %1054, true
  %1056 = xor i1 %1055, true
  %1057 = zext i1 %1056 to i32
  %1058 = sext i32 %1057 to i64
  %1059 = call i64 @llvm.expect.i64(i64 %1058, i64 0)
  %1060 = icmp ne i64 %1059, 0
  br i1 %1060, label %1068, label %1061

1061:                                             ; preds = %1046
  %1062 = load ptr, ptr %4, align 8, !tbaa !5
  %1063 = getelementptr inbounds %struct.MDBX_cursor, ptr %1062, i32 0, i32 2
  %1064 = load i8, ptr %1063, align 2, !tbaa !35
  %1065 = zext i8 %1064 to i32
  %1066 = and i32 %1065, 64
  %1067 = icmp ne i32 %1066, 0
  br i1 %1067, label %1073, label %1068

1068:                                             ; preds = %1061, %1046, %1020
  %1069 = load ptr, ptr %5, align 8, !tbaa !5
  %1070 = load i64, ptr %22, align 8, !tbaa !20
  %1071 = load i32, ptr %28, align 4, !tbaa !9
  %1072 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1069, ptr noundef @.str.36, i64 noundef %1070, i32 noundef %1071) #13
  store i32 %1072, ptr %7, align 4, !tbaa !9
  br label %1073

1073:                                             ; preds = %1068, %1061, %1031
  %1074 = load ptr, ptr %24, align 8, !tbaa !5
  %1075 = call zeroext i8 @node_flags(ptr noundef %1074) #14
  %1076 = icmp ne i8 %1075, 0
  %1077 = xor i1 %1076, true
  %1078 = xor i1 %1077, true
  %1079 = zext i1 %1078 to i32
  %1080 = sext i32 %1079 to i64
  %1081 = call i64 @llvm.expect.i64(i64 %1080, i64 0)
  %1082 = icmp ne i64 %1081, 0
  br i1 %1082, label %1083, label %1090

1083:                                             ; preds = %1073
  %1084 = load ptr, ptr %5, align 8, !tbaa !5
  %1085 = load i64, ptr %22, align 8, !tbaa !20
  %1086 = load ptr, ptr %24, align 8, !tbaa !5
  %1087 = call zeroext i8 @node_flags(ptr noundef %1086) #14
  %1088 = zext i8 %1087 to i32
  %1089 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1084, ptr noundef @.str.37, i64 noundef %1085, i32 noundef %1088) #13
  store i32 %1089, ptr %7, align 4, !tbaa !9
  br label %1090

1090:                                             ; preds = %1083, %1073
  store i32 9, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #12
  br label %1762

1091:                                             ; preds = %993
  %1092 = load ptr, ptr %24, align 8, !tbaa !5
  %1093 = call zeroext i8 @node_flags(ptr noundef %1092) #14
  %1094 = zext i8 %1093 to i32
  switch i32 %1094, label %1095 [
    i32 1, label %1102
    i32 0, label %1102
    i32 2, label %1102
    i32 6, label %1102
    i32 4, label %1102
  ]

1095:                                             ; preds = %1091
  %1096 = load ptr, ptr %5, align 8, !tbaa !5
  %1097 = load i64, ptr %22, align 8, !tbaa !20
  %1098 = load ptr, ptr %24, align 8, !tbaa !5
  %1099 = call zeroext i8 @node_flags(ptr noundef %1098) #14
  %1100 = zext i8 %1099 to i32
  %1101 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1096, ptr noundef @.str.38, i64 noundef %1097, i32 noundef %1100) #13
  store i32 %1101, ptr %7, align 4, !tbaa !9
  br label %1103

1102:                                             ; preds = %1091, %1091, %1091, %1091, %1091
  br label %1103

1103:                                             ; preds = %1102, %1095
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #12
  %1104 = load ptr, ptr %24, align 8, !tbaa !5
  %1105 = call i64 @node_ds(ptr noundef %1104) #14
  store i64 %1105, ptr %29, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #12
  %1106 = load ptr, ptr %24, align 8, !tbaa !5
  %1107 = call ptr @node_data(ptr noundef %1106) #14
  store ptr %1107, ptr %30, align 8, !tbaa !5
  %1108 = load ptr, ptr %24, align 8, !tbaa !5
  %1109 = call zeroext i8 @node_flags(ptr noundef %1108) #14
  %1110 = zext i8 %1109 to i32
  %1111 = and i32 %1110, 1
  %1112 = icmp ne i32 %1111, 0
  br i1 %1112, label %1113, label %1323

1113:                                             ; preds = %1103
  %1114 = load ptr, ptr %15, align 8, !tbaa !5
  %1115 = load ptr, ptr %30, align 8, !tbaa !5
  %1116 = getelementptr inbounds i8, ptr %1115, i64 4
  %1117 = icmp ult ptr %1114, %1116
  %1118 = xor i1 %1117, true
  %1119 = xor i1 %1118, true
  %1120 = zext i1 %1119 to i32
  %1121 = sext i32 %1120 to i64
  %1122 = call i64 @llvm.expect.i64(i64 %1121, i64 0)
  %1123 = icmp ne i64 %1122, 0
  br i1 %1123, label %1124, label %1137

1124:                                             ; preds = %1113
  %1125 = load ptr, ptr %5, align 8, !tbaa !5
  %1126 = load i64, ptr %22, align 8, !tbaa !20
  %1127 = load i64, ptr %16, align 8, !tbaa !20
  %1128 = load i64, ptr %29, align 8, !tbaa !20
  %1129 = load ptr, ptr %30, align 8, !tbaa !5
  %1130 = load i64, ptr %29, align 8, !tbaa !20
  %1131 = getelementptr inbounds i8, ptr %1129, i64 %1130
  %1132 = load ptr, ptr %15, align 8, !tbaa !5
  %1133 = ptrtoint ptr %1131 to i64
  %1134 = ptrtoint ptr %1132 to i64
  %1135 = sub i64 %1133, %1134
  %1136 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1125, ptr noundef @.str.39, ptr noundef @.str.40, i64 noundef %1126, i64 noundef %1127, i64 noundef %1128, i64 noundef %1135) #13
  store i32 %1136, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1761

1137:                                             ; preds = %1113
  %1138 = load i64, ptr %29, align 8, !tbaa !20
  %1139 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1140 = load i64, ptr %1139, align 8, !tbaa !52
  %1141 = icmp ule i64 %1138, %1140
  br i1 %1141, label %1147, label %1142

1142:                                             ; preds = %1137
  %1143 = load i64, ptr %29, align 8, !tbaa !20
  %1144 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1145 = load i64, ptr %1144, align 8, !tbaa !53
  %1146 = icmp ugt i64 %1143, %1145
  br label %1147

1147:                                             ; preds = %1142, %1137
  %1148 = phi i1 [ true, %1137 ], [ %1146, %1142 ]
  %1149 = xor i1 %1148, true
  %1150 = xor i1 %1149, true
  %1151 = zext i1 %1150 to i32
  %1152 = sext i32 %1151 to i64
  %1153 = call i64 @llvm.expect.i64(i64 %1152, i64 0)
  %1154 = icmp ne i64 %1153, 0
  br i1 %1154, label %1155, label %1163

1155:                                             ; preds = %1147
  %1156 = load ptr, ptr %5, align 8, !tbaa !5
  %1157 = load i64, ptr %29, align 8, !tbaa !20
  %1158 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1159 = load i64, ptr %1158, align 8, !tbaa !52
  %1160 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1161 = load i64, ptr %1160, align 8, !tbaa !53
  %1162 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1156, ptr noundef @.str.41, i64 noundef %1157, i64 noundef %1159, i64 noundef %1161) #13
  store i32 %1162, ptr %7, align 4, !tbaa !9
  br label %1163

1163:                                             ; preds = %1155, %1147
  %1164 = load ptr, ptr %24, align 8, !tbaa !5
  %1165 = call i64 @node_ks(ptr noundef %1164) #14
  %1166 = load i64, ptr %29, align 8, !tbaa !20
  %1167 = call i64 @node_size_len(i64 noundef %1165, i64 noundef %1166) #16
  %1168 = load ptr, ptr %4, align 8, !tbaa !5
  %1169 = getelementptr inbounds %struct.MDBX_cursor, ptr %1168, i32 0, i32 5
  %1170 = load ptr, ptr %1169, align 8, !tbaa !11
  %1171 = getelementptr inbounds %struct.MDBX_txn, ptr %1170, i32 0, i32 9
  %1172 = load ptr, ptr %1171, align 8, !tbaa !13
  %1173 = getelementptr inbounds %struct.MDBX_env, ptr %1172, i32 0, i32 8
  %1174 = load i16, ptr %1173, align 8, !tbaa !54
  %1175 = zext i16 %1174 to i64
  %1176 = icmp ule i64 %1167, %1175
  %1177 = xor i1 %1176, true
  %1178 = xor i1 %1177, true
  %1179 = zext i1 %1178 to i32
  %1180 = sext i32 %1179 to i64
  %1181 = call i64 @llvm.expect.i64(i64 %1180, i64 0)
  %1182 = icmp ne i64 %1181, 0
  br i1 %1182, label %1183, label %1197

1183:                                             ; preds = %1163
  %1184 = load ptr, ptr %4, align 8, !tbaa !5
  %1185 = getelementptr inbounds %struct.MDBX_cursor, ptr %1184, i32 0, i32 6
  %1186 = load ptr, ptr %1185, align 8, !tbaa !36
  %1187 = load ptr, ptr %4, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.MDBX_cursor, ptr %1187, i32 0, i32 5
  %1189 = load ptr, ptr %1188, align 8, !tbaa !11
  %1190 = getelementptr inbounds %struct.MDBX_txn, ptr %1189, i32 0, i32 10
  %1191 = load ptr, ptr %1190, align 8, !tbaa !55
  %1192 = getelementptr inbounds %struct.tree, ptr %1191, i64 0
  %1193 = icmp ne ptr %1186, %1192
  br i1 %1193, label %1194, label %1197

1194:                                             ; preds = %1183
  %1195 = load ptr, ptr %5, align 8, !tbaa !5
  %1196 = load i64, ptr %29, align 8, !tbaa !20
  call void (ptr, ptr, ...) @poor_page(ptr noundef %1195, ptr noundef @.str.42, i64 noundef %1196) #13
  br label %1197

1197:                                             ; preds = %1194, %1183, %1163
  %1198 = load ptr, ptr %4, align 8, !tbaa !5
  %1199 = getelementptr inbounds %struct.MDBX_cursor, ptr %1198, i32 0, i32 2
  %1200 = load i8, ptr %1199, align 2, !tbaa !35
  %1201 = zext i8 %1200 to i32
  %1202 = and i32 %1201, 64
  %1203 = icmp eq i32 %1202, 0
  br i1 %1203, label %1204, label %1322

1204:                                             ; preds = %1197
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #12
  %1205 = load ptr, ptr %4, align 8, !tbaa !5
  %1206 = load ptr, ptr %24, align 8, !tbaa !5
  %1207 = call i32 @node_largedata_pgno(ptr noundef %1206) #14
  %1208 = load ptr, ptr %5, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct.page, ptr %1208, i32 0, i32 0
  %1210 = load i64, ptr %1209, align 1, !tbaa !20
  %1211 = call { ptr, i32 } @page_get_large(ptr noundef %1205, i32 noundef %1207, i64 noundef %1210)
  %1212 = getelementptr inbounds { ptr, i32 }, ptr %31, i32 0, i32 0
  %1213 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1213, ptr %1212, align 8
  %1214 = getelementptr inbounds { ptr, i32 }, ptr %31, i32 0, i32 1
  %1215 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1215, ptr %1214, align 8
  %1216 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 1
  %1217 = load i32, ptr %1216, align 8, !tbaa !56
  %1218 = icmp ne i32 %1217, 0
  %1219 = xor i1 %1218, true
  %1220 = xor i1 %1219, true
  %1221 = zext i1 %1220 to i32
  %1222 = sext i32 %1221 to i64
  %1223 = call i64 @llvm.expect.i64(i64 %1222, i64 0)
  %1224 = icmp ne i64 %1223, 0
  br i1 %1224, label %1225, label %1228

1225:                                             ; preds = %1204
  %1226 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 1
  %1227 = load i32, ptr %1226, align 8, !tbaa !56
  store i32 %1227, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1319

1228:                                             ; preds = %1204
  br label %1229

1229:                                             ; preds = %1228
  %1230 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !33
  %1231 = zext i8 %1230 to i32
  %1232 = and i32 %1231, 1
  %1233 = icmp ne i32 %1232, 0
  %1234 = xor i1 %1233, true
  %1235 = xor i1 %1234, true
  %1236 = zext i1 %1235 to i32
  %1237 = sext i32 %1236 to i64
  %1238 = call i64 @llvm.expect.i64(i64 %1237, i64 1)
  %1239 = icmp ne i64 %1238, 0
  br i1 %1239, label %1240, label %1263

1240:                                             ; preds = %1229
  br label %1241

1241:                                             ; preds = %1240
  %1242 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1243 = load ptr, ptr %1242, align 8, !tbaa !58
  %1244 = call zeroext i8 @page_type(ptr noundef %1243) #14
  %1245 = zext i8 %1244 to i32
  %1246 = icmp eq i32 %1245, 4
  %1247 = xor i1 %1246, true
  %1248 = xor i1 %1247, true
  %1249 = xor i1 %1248, true
  %1250 = zext i1 %1249 to i32
  %1251 = sext i32 %1250 to i64
  %1252 = call i64 @llvm.expect.i64(i64 %1251, i64 0)
  %1253 = icmp ne i64 %1252, 0
  br i1 %1253, label %1254, label %1260

1254:                                             ; preds = %1241
  %1255 = load ptr, ptr %4, align 8, !tbaa !5
  %1256 = getelementptr inbounds %struct.MDBX_cursor, ptr %1255, i32 0, i32 5
  %1257 = load ptr, ptr %1256, align 8, !tbaa !11
  %1258 = getelementptr inbounds %struct.MDBX_txn, ptr %1257, i32 0, i32 9
  %1259 = load ptr, ptr %1258, align 8, !tbaa !13
  call void @mdbx_assert_fail(ptr noundef %1259, ptr noundef @.str.43, ptr noundef @__func__.page_check, i32 noundef 231) #15
  unreachable

1260:                                             ; preds = %1241
  br label %1261

1261:                                             ; preds = %1260
  br label %1262

1262:                                             ; preds = %1261
  br label %1263

1263:                                             ; preds = %1262, %1229
  br label %1264

1264:                                             ; preds = %1263
  br label %1265

1265:                                             ; preds = %1264
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #12
  %1266 = load ptr, ptr %8, align 8, !tbaa !5
  %1267 = load i64, ptr %29, align 8, !tbaa !20
  %1268 = call i32 @largechunk_npages(ptr noundef %1266, i64 noundef %1267) #14
  store i32 %1268, ptr %32, align 4, !tbaa !9
  %1269 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1270 = load ptr, ptr %1269, align 8, !tbaa !58
  %1271 = getelementptr inbounds %struct.page, ptr %1270, i32 0, i32 3
  %1272 = load i32, ptr %1271, align 1, !tbaa !19
  %1273 = load i32, ptr %32, align 4, !tbaa !9
  %1274 = icmp ne i32 %1272, %1273
  %1275 = xor i1 %1274, true
  %1276 = xor i1 %1275, true
  %1277 = zext i1 %1276 to i32
  %1278 = sext i32 %1277 to i64
  %1279 = call i64 @llvm.expect.i64(i64 %1278, i64 0)
  %1280 = icmp ne i64 %1279, 0
  br i1 %1280, label %1281, label %1318

1281:                                             ; preds = %1265
  %1282 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1283 = load ptr, ptr %1282, align 8, !tbaa !58
  %1284 = getelementptr inbounds %struct.page, ptr %1283, i32 0, i32 3
  %1285 = load i32, ptr %1284, align 1, !tbaa !19
  %1286 = load i32, ptr %32, align 4, !tbaa !9
  %1287 = icmp ult i32 %1285, %1286
  br i1 %1287, label %1288, label %1297

1288:                                             ; preds = %1281
  %1289 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1290 = load ptr, ptr %1289, align 8, !tbaa !58
  %1291 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1292 = load ptr, ptr %1291, align 8, !tbaa !58
  %1293 = getelementptr inbounds %struct.page, ptr %1292, i32 0, i32 3
  %1294 = load i32, ptr %1293, align 1, !tbaa !19
  %1295 = load i64, ptr %29, align 8, !tbaa !20
  %1296 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1290, ptr noundef @.str.44, i32 noundef %1294, i64 noundef %1295) #13
  store i32 %1296, ptr %7, align 4, !tbaa !9
  br label %1317

1297:                                             ; preds = %1281
  %1298 = load ptr, ptr %4, align 8, !tbaa !5
  %1299 = getelementptr inbounds %struct.MDBX_cursor, ptr %1298, i32 0, i32 6
  %1300 = load ptr, ptr %1299, align 8, !tbaa !36
  %1301 = load ptr, ptr %4, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.MDBX_cursor, ptr %1301, i32 0, i32 5
  %1303 = load ptr, ptr %1302, align 8, !tbaa !11
  %1304 = getelementptr inbounds %struct.MDBX_txn, ptr %1303, i32 0, i32 10
  %1305 = load ptr, ptr %1304, align 8, !tbaa !55
  %1306 = getelementptr inbounds %struct.tree, ptr %1305, i64 0
  %1307 = icmp ne ptr %1300, %1306
  br i1 %1307, label %1308, label %1316

1308:                                             ; preds = %1297
  %1309 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1310 = load ptr, ptr %1309, align 8, !tbaa !58
  %1311 = getelementptr inbounds %struct.page_get_result, ptr %31, i32 0, i32 0
  %1312 = load ptr, ptr %1311, align 8, !tbaa !58
  %1313 = getelementptr inbounds %struct.page, ptr %1312, i32 0, i32 3
  %1314 = load i32, ptr %1313, align 1, !tbaa !19
  %1315 = load i64, ptr %29, align 8, !tbaa !20
  call void (ptr, ptr, ...) @poor_page(ptr noundef %1310, ptr noundef @.str.45, i32 noundef %1314, i64 noundef %1315) #13
  br label %1316

1316:                                             ; preds = %1308, %1297
  br label %1317

1317:                                             ; preds = %1316, %1288
  br label %1318

1318:                                             ; preds = %1317, %1265
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #12
  store i32 0, ptr %13, align 4
  br label %1319

1319:                                             ; preds = %1318, %1225
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #12
  %1320 = load i32, ptr %13, align 4
  switch i32 %1320, label %1761 [
    i32 0, label %1321
  ]

1321:                                             ; preds = %1319
  br label %1322

1322:                                             ; preds = %1321, %1197
  store i32 9, ptr %13, align 4
  br label %1761

1323:                                             ; preds = %1103
  %1324 = load ptr, ptr %15, align 8, !tbaa !5
  %1325 = load ptr, ptr %30, align 8, !tbaa !5
  %1326 = load i64, ptr %29, align 8, !tbaa !20
  %1327 = getelementptr inbounds i8, ptr %1325, i64 %1326
  %1328 = icmp ult ptr %1324, %1327
  %1329 = xor i1 %1328, true
  %1330 = xor i1 %1329, true
  %1331 = zext i1 %1330 to i32
  %1332 = sext i32 %1331 to i64
  %1333 = call i64 @llvm.expect.i64(i64 %1332, i64 0)
  %1334 = icmp ne i64 %1333, 0
  br i1 %1334, label %1335, label %1348

1335:                                             ; preds = %1323
  %1336 = load ptr, ptr %5, align 8, !tbaa !5
  %1337 = load i64, ptr %22, align 8, !tbaa !20
  %1338 = load i64, ptr %16, align 8, !tbaa !20
  %1339 = load i64, ptr %29, align 8, !tbaa !20
  %1340 = load ptr, ptr %30, align 8, !tbaa !5
  %1341 = load i64, ptr %29, align 8, !tbaa !20
  %1342 = getelementptr inbounds i8, ptr %1340, i64 %1341
  %1343 = load ptr, ptr %15, align 8, !tbaa !5
  %1344 = ptrtoint ptr %1342 to i64
  %1345 = ptrtoint ptr %1343 to i64
  %1346 = sub i64 %1344, %1345
  %1347 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1336, ptr noundef @.str.39, ptr noundef @.str.46, i64 noundef %1337, i64 noundef %1338, i64 noundef %1339, i64 noundef %1346) #13
  store i32 %1347, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1761

1348:                                             ; preds = %1323
  %1349 = load ptr, ptr %24, align 8, !tbaa !5
  %1350 = call zeroext i8 @node_flags(ptr noundef %1349) #14
  %1351 = zext i8 %1350 to i32
  switch i32 %1351, label %1352 [
    i32 0, label %1353
    i32 2, label %1380
    i32 6, label %1394
    i32 4, label %1408
  ]

1352:                                             ; preds = %1348
  store i32 9, ptr %13, align 4
  br label %1761

1353:                                             ; preds = %1348
  %1354 = load i64, ptr %29, align 8, !tbaa !20
  %1355 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1356 = load i64, ptr %1355, align 8, !tbaa !52
  %1357 = icmp ult i64 %1354, %1356
  br i1 %1357, label %1363, label %1358

1358:                                             ; preds = %1353
  %1359 = load i64, ptr %29, align 8, !tbaa !20
  %1360 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1361 = load i64, ptr %1360, align 8, !tbaa !53
  %1362 = icmp ugt i64 %1359, %1361
  br label %1363

1363:                                             ; preds = %1358, %1353
  %1364 = phi i1 [ true, %1353 ], [ %1362, %1358 ]
  %1365 = xor i1 %1364, true
  %1366 = xor i1 %1365, true
  %1367 = zext i1 %1366 to i32
  %1368 = sext i32 %1367 to i64
  %1369 = call i64 @llvm.expect.i64(i64 %1368, i64 0)
  %1370 = icmp ne i64 %1369, 0
  br i1 %1370, label %1371, label %1379

1371:                                             ; preds = %1363
  %1372 = load ptr, ptr %5, align 8, !tbaa !5
  %1373 = load i64, ptr %29, align 8, !tbaa !20
  %1374 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1375 = load i64, ptr %1374, align 8, !tbaa !52
  %1376 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1377 = load i64, ptr %1376, align 8, !tbaa !53
  %1378 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1372, ptr noundef @.str.47, i64 noundef %1373, i64 noundef %1375, i64 noundef %1377) #13
  store i32 %1378, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1761

1379:                                             ; preds = %1363
  br label %1760

1380:                                             ; preds = %1348
  %1381 = load i64, ptr %29, align 8, !tbaa !20
  %1382 = icmp ne i64 %1381, 48
  %1383 = xor i1 %1382, true
  %1384 = xor i1 %1383, true
  %1385 = zext i1 %1384 to i32
  %1386 = sext i32 %1385 to i64
  %1387 = call i64 @llvm.expect.i64(i64 %1386, i64 0)
  %1388 = icmp ne i64 %1387, 0
  br i1 %1388, label %1389, label %1393

1389:                                             ; preds = %1380
  %1390 = load ptr, ptr %5, align 8, !tbaa !5
  %1391 = load i64, ptr %29, align 8, !tbaa !20
  %1392 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1390, ptr noundef @.str.48, i64 noundef %1391) #13
  store i32 %1392, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1761

1393:                                             ; preds = %1380
  br label %1760

1394:                                             ; preds = %1348
  %1395 = load i64, ptr %29, align 8, !tbaa !20
  %1396 = icmp ne i64 %1395, 48
  %1397 = xor i1 %1396, true
  %1398 = xor i1 %1397, true
  %1399 = zext i1 %1398 to i32
  %1400 = sext i32 %1399 to i64
  %1401 = call i64 @llvm.expect.i64(i64 %1400, i64 0)
  %1402 = icmp ne i64 %1401, 0
  br i1 %1402, label %1403, label %1407

1403:                                             ; preds = %1394
  %1404 = load ptr, ptr %5, align 8, !tbaa !5
  %1405 = load i64, ptr %29, align 8, !tbaa !20
  %1406 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1404, ptr noundef @.str.49, i64 noundef %1405, i64 noundef 48) #13
  store i32 %1406, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1761

1407:                                             ; preds = %1394
  br label %1760

1408:                                             ; preds = %1348
  %1409 = load i64, ptr %29, align 8, !tbaa !20
  %1410 = icmp ule i64 %1409, 20
  %1411 = xor i1 %1410, true
  %1412 = xor i1 %1411, true
  %1413 = zext i1 %1412 to i32
  %1414 = sext i32 %1413 to i64
  %1415 = call i64 @llvm.expect.i64(i64 %1414, i64 0)
  %1416 = icmp ne i64 %1415, 0
  br i1 %1416, label %1417, label %1421

1417:                                             ; preds = %1408
  %1418 = load ptr, ptr %5, align 8, !tbaa !5
  %1419 = load i64, ptr %29, align 8, !tbaa !20
  %1420 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1418, ptr noundef @.str.50, i64 noundef %1419) #13
  store i32 %1420, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1761

1421:                                             ; preds = %1408
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #12
  %1422 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %1422, ptr %33, align 8, !tbaa !5
  %1423 = load ptr, ptr %33, align 8, !tbaa !5
  %1424 = getelementptr inbounds %struct.page, ptr %1423, i32 0, i32 2
  %1425 = load i16, ptr %1424, align 1, !tbaa !21
  %1426 = zext i16 %1425 to i32
  %1427 = and i32 %1426, -17
  switch i32 %1427, label %1429 [
    i32 66, label %1428
    i32 98, label %1428
  ]

1428:                                             ; preds = %1421, %1421
  br label %1436

1429:                                             ; preds = %1421
  %1430 = load ptr, ptr %5, align 8, !tbaa !5
  %1431 = load ptr, ptr %33, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.page, ptr %1431, i32 0, i32 2
  %1433 = load i16, ptr %1432, align 1, !tbaa !21
  %1434 = zext i16 %1433 to i32
  %1435 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1430, ptr noundef @.str.51, i32 noundef %1434) #13
  store i32 %1435, ptr %7, align 4, !tbaa !9
  store i32 9, ptr %13, align 4
  br label %1756

1436:                                             ; preds = %1428
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #12
  %1437 = load ptr, ptr %30, align 8, !tbaa !5
  %1438 = load i64, ptr %29, align 8, !tbaa !20
  %1439 = getelementptr inbounds i8, ptr %1437, i64 %1438
  store ptr %1439, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #12
  %1440 = load ptr, ptr %33, align 8, !tbaa !5
  %1441 = call i64 @page_numkeys(ptr noundef %1440) #14
  store i64 %1441, ptr %35, align 8, !tbaa !20
  %1442 = load i64, ptr %35, align 8, !tbaa !20
  %1443 = icmp eq i64 %1442, 0
  %1444 = xor i1 %1443, true
  %1445 = xor i1 %1444, true
  %1446 = zext i1 %1445 to i32
  %1447 = sext i32 %1446 to i64
  %1448 = call i64 @llvm.expect.i64(i64 %1447, i64 0)
  %1449 = icmp ne i64 %1448, 0
  br i1 %1449, label %1450, label %1471

1450:                                             ; preds = %1436
  %1451 = load ptr, ptr %4, align 8, !tbaa !5
  %1452 = getelementptr inbounds %struct.MDBX_cursor, ptr %1451, i32 0, i32 2
  %1453 = load i8, ptr %1452, align 2, !tbaa !35
  %1454 = zext i8 %1453 to i32
  %1455 = and i32 %1454, 8
  %1456 = icmp ne i32 %1455, 0
  br i1 %1456, label %1471, label %1457

1457:                                             ; preds = %1450
  %1458 = load ptr, ptr %4, align 8, !tbaa !5
  %1459 = getelementptr inbounds %struct.MDBX_cursor, ptr %1458, i32 0, i32 6
  %1460 = load ptr, ptr %1459, align 8, !tbaa !36
  %1461 = getelementptr inbounds %struct.tree, ptr %1460, i32 0, i32 8
  %1462 = load i64, ptr %1461, align 4, !tbaa !40
  %1463 = icmp ne i64 %1462, 0
  br i1 %1463, label %1464, label %1471

1464:                                             ; preds = %1457
  %1465 = load ptr, ptr %5, align 8, !tbaa !5
  %1466 = load ptr, ptr %33, align 8, !tbaa !5
  %1467 = call zeroext i1 @is_dupfix_leaf(ptr noundef %1466) #14
  %1468 = zext i1 %1467 to i64
  %1469 = select i1 %1467, ptr @.str.17, ptr @.str.14
  %1470 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1465, ptr noundef @.str.52, ptr noundef %1469) #13
  store i32 %1470, ptr %7, align 4, !tbaa !9
  br label %1471

1471:                                             ; preds = %1464, %1457, %1450, %1436
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #12
  call void @llvm.memset.p0.i64(ptr align 8 %37, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %1472

1472:                                             ; preds = %1752, %1471
  %1473 = load i32, ptr %38, align 4, !tbaa !9
  %1474 = sext i32 %1473 to i64
  %1475 = load i64, ptr %35, align 8, !tbaa !20
  %1476 = icmp slt i64 %1474, %1475
  br i1 %1476, label %1478, label %1477

1477:                                             ; preds = %1472
  store i32 17, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  br label %1755

1478:                                             ; preds = %1472
  %1479 = load ptr, ptr %33, align 8, !tbaa !5
  %1480 = call zeroext i1 @is_dupfix_leaf(ptr noundef %1479) #14
  br i1 %1480, label %1481, label %1600

1481:                                             ; preds = %1478
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #12
  %1482 = load ptr, ptr %33, align 8, !tbaa !5
  %1483 = getelementptr inbounds %struct.page, ptr %1482, i32 0, i32 1
  %1484 = load i16, ptr %1483, align 1, !tbaa !21
  %1485 = zext i16 %1484 to i64
  store i64 %1485, ptr %39, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #12
  %1486 = load ptr, ptr %33, align 8, !tbaa !5
  %1487 = load i32, ptr %38, align 4, !tbaa !9
  %1488 = sext i32 %1487 to i64
  %1489 = load ptr, ptr %4, align 8, !tbaa !5
  %1490 = getelementptr inbounds %struct.MDBX_cursor, ptr %1489, i32 0, i32 6
  %1491 = load ptr, ptr %1490, align 8, !tbaa !36
  %1492 = getelementptr inbounds %struct.tree, ptr %1491, i32 0, i32 2
  %1493 = load i32, ptr %1492, align 4, !tbaa !41
  %1494 = zext i32 %1493 to i64
  %1495 = call ptr @page_dupfix_ptr(ptr noundef %1486, i64 noundef %1488, i64 noundef %1494) #14
  store ptr %1495, ptr %40, align 8, !tbaa !5
  %1496 = load ptr, ptr %34, align 8, !tbaa !5
  %1497 = load ptr, ptr %40, align 8, !tbaa !5
  %1498 = load i64, ptr %39, align 8, !tbaa !20
  %1499 = getelementptr inbounds i8, ptr %1497, i64 %1498
  %1500 = icmp ult ptr %1496, %1499
  %1501 = xor i1 %1500, true
  %1502 = xor i1 %1501, true
  %1503 = zext i1 %1502 to i32
  %1504 = sext i32 %1503 to i64
  %1505 = call i64 @llvm.expect.i64(i64 %1504, i64 0)
  %1506 = icmp ne i64 %1505, 0
  br i1 %1506, label %1507, label %1517

1507:                                             ; preds = %1481
  %1508 = load ptr, ptr %5, align 8, !tbaa !5
  %1509 = load ptr, ptr %40, align 8, !tbaa !5
  %1510 = load i64, ptr %39, align 8, !tbaa !20
  %1511 = getelementptr inbounds i8, ptr %1509, i64 %1510
  %1512 = load ptr, ptr %34, align 8, !tbaa !5
  %1513 = ptrtoint ptr %1511 to i64
  %1514 = ptrtoint ptr %1512 to i64
  %1515 = sub i64 %1513, %1514
  %1516 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1508, ptr noundef @.str.53, i64 noundef %1515) #13
  store i32 %1516, ptr %7, align 4, !tbaa !9
  store i32 19, ptr %13, align 4
  br label %1597

1517:                                             ; preds = %1481
  %1518 = load i64, ptr %39, align 8, !tbaa !20
  %1519 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1520 = load i64, ptr %1519, align 8, !tbaa !52
  %1521 = icmp ne i64 %1518, %1520
  %1522 = xor i1 %1521, true
  %1523 = xor i1 %1522, true
  %1524 = zext i1 %1523 to i32
  %1525 = sext i32 %1524 to i64
  %1526 = call i64 @llvm.expect.i64(i64 %1525, i64 0)
  %1527 = icmp ne i64 %1526, 0
  br i1 %1527, label %1528, label %1559

1528:                                             ; preds = %1517
  %1529 = load i64, ptr %39, align 8, !tbaa !20
  %1530 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1531 = load i64, ptr %1530, align 8, !tbaa !52
  %1532 = icmp ult i64 %1529, %1531
  br i1 %1532, label %1538, label %1533

1533:                                             ; preds = %1528
  %1534 = load i64, ptr %39, align 8, !tbaa !20
  %1535 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1536 = load i64, ptr %1535, align 8, !tbaa !53
  %1537 = icmp ugt i64 %1534, %1536
  br label %1538

1538:                                             ; preds = %1533, %1528
  %1539 = phi i1 [ true, %1528 ], [ %1537, %1533 ]
  %1540 = xor i1 %1539, true
  %1541 = xor i1 %1540, true
  %1542 = zext i1 %1541 to i32
  %1543 = sext i32 %1542 to i64
  %1544 = call i64 @llvm.expect.i64(i64 %1543, i64 0)
  %1545 = icmp ne i64 %1544, 0
  br i1 %1545, label %1546, label %1554

1546:                                             ; preds = %1538
  %1547 = load ptr, ptr %5, align 8, !tbaa !5
  %1548 = load i64, ptr %39, align 8, !tbaa !20
  %1549 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1550 = load i64, ptr %1549, align 8, !tbaa !52
  %1551 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1552 = load i64, ptr %1551, align 8, !tbaa !53
  %1553 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1547, ptr noundef @.str.54, i64 noundef %1548, i64 noundef %1550, i64 noundef %1552) #13
  store i32 %1553, ptr %7, align 4, !tbaa !9
  br label %1558

1554:                                             ; preds = %1538
  %1555 = load i64, ptr %39, align 8, !tbaa !20
  %1556 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  store i64 %1555, ptr %1556, align 8, !tbaa !53
  %1557 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  store i64 %1555, ptr %1557, align 8, !tbaa !52
  br label %1558

1558:                                             ; preds = %1554, %1546
  br label %1559

1559:                                             ; preds = %1558, %1517
  %1560 = load ptr, ptr %4, align 8, !tbaa !5
  %1561 = getelementptr inbounds %struct.MDBX_cursor, ptr %1560, i32 0, i32 2
  %1562 = load i8, ptr %1561, align 2, !tbaa !35
  %1563 = zext i8 %1562 to i32
  %1564 = and i32 %1563, 16
  %1565 = icmp eq i32 %1564, 0
  br i1 %1565, label %1566, label %1596

1566:                                             ; preds = %1559
  %1567 = load ptr, ptr %40, align 8, !tbaa !5
  %1568 = getelementptr inbounds %struct.iovec, ptr %36, i32 0, i32 0
  store ptr %1567, ptr %1568, align 8, !tbaa !47
  %1569 = load i64, ptr %39, align 8, !tbaa !20
  %1570 = getelementptr inbounds %struct.iovec, ptr %36, i32 0, i32 1
  store i64 %1569, ptr %1570, align 8, !tbaa !49
  %1571 = getelementptr inbounds %struct.iovec, ptr %37, i32 0, i32 0
  %1572 = load ptr, ptr %1571, align 8, !tbaa !47
  %1573 = icmp ne ptr %1572, null
  br i1 %1573, label %1574, label %1595

1574:                                             ; preds = %1566
  %1575 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 0
  %1576 = load ptr, ptr %1575, align 8, !tbaa !59
  %1577 = call i32 %1576(ptr noundef %37, ptr noundef %36)
  %1578 = icmp sge i32 %1577, 0
  %1579 = xor i1 %1578, true
  %1580 = xor i1 %1579, true
  %1581 = zext i1 %1580 to i32
  %1582 = sext i32 %1581 to i64
  %1583 = call i64 @llvm.expect.i64(i64 %1582, i64 0)
  %1584 = icmp ne i64 %1583, 0
  br i1 %1584, label %1585, label %1595

1585:                                             ; preds = %1574
  %1586 = load ptr, ptr %5, align 8, !tbaa !5
  %1587 = load i32, ptr %38, align 4, !tbaa !9
  %1588 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %1589 = call ptr @mdbx_dump_val(ptr noundef %37, ptr noundef %1588, i64 noundef 255)
  %1590 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %1591 = getelementptr inbounds i8, ptr %1590, i64 254
  %1592 = getelementptr inbounds i8, ptr %1591, i64 1
  %1593 = call ptr @mdbx_dump_val(ptr noundef %36, ptr noundef %1592, i64 noundef 255)
  %1594 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1586, ptr noundef @.str.55, i32 noundef %1587, ptr noundef %1589, ptr noundef %1593) #13
  store i32 %1594, ptr %7, align 4, !tbaa !9
  br label %1595

1595:                                             ; preds = %1585, %1574, %1566
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %36, i64 16, i1 false), !tbaa.struct !51
  br label %1596

1596:                                             ; preds = %1595, %1559
  store i32 0, ptr %13, align 4
  br label %1597

1597:                                             ; preds = %1596, %1507
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #12
  %1598 = load i32, ptr %13, align 4
  switch i32 %1598, label %1777 [
    i32 0, label %1599
    i32 19, label %1752
  ]

1599:                                             ; preds = %1597
  br label %1751

1600:                                             ; preds = %1478
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #12
  %1601 = load ptr, ptr %33, align 8, !tbaa !5
  %1602 = load i32, ptr %38, align 4, !tbaa !9
  %1603 = sext i32 %1602 to i64
  %1604 = call ptr @page_node(ptr noundef %1601, i64 noundef %1603) #14
  store ptr %1604, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #12
  %1605 = load ptr, ptr %41, align 8, !tbaa !5
  %1606 = ptrtoint ptr %1605 to i64
  %1607 = add nsw i64 %1606, 8
  %1608 = inttoptr i64 %1607 to ptr
  store ptr %1608, ptr %42, align 8, !tbaa !5
  %1609 = load ptr, ptr %42, align 8, !tbaa !5
  %1610 = load ptr, ptr %34, align 8, !tbaa !5
  %1611 = icmp ugt ptr %1609, %1610
  %1612 = xor i1 %1611, true
  %1613 = xor i1 %1612, true
  %1614 = zext i1 %1613 to i32
  %1615 = sext i32 %1614 to i64
  %1616 = call i64 @llvm.expect.i64(i64 %1615, i64 0)
  %1617 = icmp ne i64 %1616, 0
  br i1 %1617, label %1618, label %1626

1618:                                             ; preds = %1600
  %1619 = load ptr, ptr %5, align 8, !tbaa !5
  %1620 = load ptr, ptr %34, align 8, !tbaa !5
  %1621 = load ptr, ptr %42, align 8, !tbaa !5
  %1622 = ptrtoint ptr %1620 to i64
  %1623 = ptrtoint ptr %1621 to i64
  %1624 = sub i64 %1622, %1623
  %1625 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1619, ptr noundef @.str.56, i64 noundef %1624) #13
  store i32 %1625, ptr %7, align 4, !tbaa !9
  store i32 19, ptr %13, align 4
  br label %1748

1626:                                             ; preds = %1600
  %1627 = load ptr, ptr %41, align 8, !tbaa !5
  %1628 = call zeroext i8 @node_flags(ptr noundef %1627) #14
  %1629 = zext i8 %1628 to i32
  %1630 = icmp ne i32 %1629, 0
  %1631 = xor i1 %1630, true
  %1632 = xor i1 %1631, true
  %1633 = zext i1 %1632 to i32
  %1634 = sext i32 %1633 to i64
  %1635 = call i64 @llvm.expect.i64(i64 %1634, i64 0)
  %1636 = icmp ne i64 %1635, 0
  br i1 %1636, label %1637, label %1643

1637:                                             ; preds = %1626
  %1638 = load ptr, ptr %5, align 8, !tbaa !5
  %1639 = load ptr, ptr %41, align 8, !tbaa !5
  %1640 = call zeroext i8 @node_flags(ptr noundef %1639) #14
  %1641 = zext i8 %1640 to i32
  %1642 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1638, ptr noundef @.str.57, i32 noundef %1641) #13
  store i32 %1642, ptr %7, align 4, !tbaa !9
  br label %1643

1643:                                             ; preds = %1637, %1626
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #12
  %1644 = load ptr, ptr %41, align 8, !tbaa !5
  %1645 = call i64 @node_ks(ptr noundef %1644) #14
  store i64 %1645, ptr %43, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #12
  %1646 = load ptr, ptr %41, align 8, !tbaa !5
  %1647 = call ptr @node_key(ptr noundef %1646) #14
  store ptr %1647, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #12
  %1648 = load ptr, ptr %41, align 8, !tbaa !5
  %1649 = call i64 @node_ds(ptr noundef %1648) #14
  store i64 %1649, ptr %45, align 8, !tbaa !20
  %1650 = load i64, ptr %43, align 8, !tbaa !20
  %1651 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1652 = load i64, ptr %1651, align 8, !tbaa !52
  %1653 = icmp ult i64 %1650, %1652
  br i1 %1653, label %1659, label %1654

1654:                                             ; preds = %1643
  %1655 = load i64, ptr %43, align 8, !tbaa !20
  %1656 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1657 = load i64, ptr %1656, align 8, !tbaa !53
  %1658 = icmp ugt i64 %1655, %1657
  br label %1659

1659:                                             ; preds = %1654, %1643
  %1660 = phi i1 [ true, %1643 ], [ %1658, %1654 ]
  %1661 = xor i1 %1660, true
  %1662 = xor i1 %1661, true
  %1663 = zext i1 %1662 to i32
  %1664 = sext i32 %1663 to i64
  %1665 = call i64 @llvm.expect.i64(i64 %1664, i64 0)
  %1666 = icmp ne i64 %1665, 0
  br i1 %1666, label %1667, label %1675

1667:                                             ; preds = %1659
  %1668 = load ptr, ptr %5, align 8, !tbaa !5
  %1669 = load i64, ptr %43, align 8, !tbaa !20
  %1670 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 1
  %1671 = load i64, ptr %1670, align 8, !tbaa !52
  %1672 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 2
  %1673 = load i64, ptr %1672, align 8, !tbaa !53
  %1674 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1668, ptr noundef @.str.58, i64 noundef %1669, i64 noundef %1671, i64 noundef %1673) #13
  store i32 %1674, ptr %7, align 4, !tbaa !9
  br label %1675

1675:                                             ; preds = %1667, %1659
  %1676 = load ptr, ptr %4, align 8, !tbaa !5
  %1677 = getelementptr inbounds %struct.MDBX_cursor, ptr %1676, i32 0, i32 2
  %1678 = load i8, ptr %1677, align 2, !tbaa !35
  %1679 = zext i8 %1678 to i32
  %1680 = and i32 %1679, 16
  %1681 = icmp eq i32 %1680, 0
  br i1 %1681, label %1682, label %1712

1682:                                             ; preds = %1675
  %1683 = load ptr, ptr %44, align 8, !tbaa !5
  %1684 = getelementptr inbounds %struct.iovec, ptr %36, i32 0, i32 0
  store ptr %1683, ptr %1684, align 8, !tbaa !47
  %1685 = load i64, ptr %43, align 8, !tbaa !20
  %1686 = getelementptr inbounds %struct.iovec, ptr %36, i32 0, i32 1
  store i64 %1685, ptr %1686, align 8, !tbaa !49
  %1687 = getelementptr inbounds %struct.iovec, ptr %37, i32 0, i32 0
  %1688 = load ptr, ptr %1687, align 8, !tbaa !47
  %1689 = icmp ne ptr %1688, null
  br i1 %1689, label %1690, label %1711

1690:                                             ; preds = %1682
  %1691 = getelementptr inbounds %struct.clc, ptr %21, i32 0, i32 0
  %1692 = load ptr, ptr %1691, align 8, !tbaa !59
  %1693 = call i32 %1692(ptr noundef %37, ptr noundef %36)
  %1694 = icmp sge i32 %1693, 0
  %1695 = xor i1 %1694, true
  %1696 = xor i1 %1695, true
  %1697 = zext i1 %1696 to i32
  %1698 = sext i32 %1697 to i64
  %1699 = call i64 @llvm.expect.i64(i64 %1698, i64 0)
  %1700 = icmp ne i64 %1699, 0
  br i1 %1700, label %1701, label %1711

1701:                                             ; preds = %1690
  %1702 = load ptr, ptr %5, align 8, !tbaa !5
  %1703 = load i32, ptr %38, align 4, !tbaa !9
  %1704 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %1705 = call ptr @mdbx_dump_val(ptr noundef %37, ptr noundef %1704, i64 noundef 255)
  %1706 = getelementptr inbounds [510 x i8], ptr %6, i64 0, i64 0
  %1707 = getelementptr inbounds i8, ptr %1706, i64 254
  %1708 = getelementptr inbounds i8, ptr %1707, i64 1
  %1709 = call ptr @mdbx_dump_val(ptr noundef %36, ptr noundef %1708, i64 noundef 255)
  %1710 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1702, ptr noundef @.str.59, i32 noundef %1703, ptr noundef %1705, ptr noundef %1709) #13
  store i32 %1710, ptr %7, align 4, !tbaa !9
  br label %1711

1711:                                             ; preds = %1701, %1690, %1682
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %36, i64 16, i1 false), !tbaa.struct !51
  br label %1712

1712:                                             ; preds = %1711, %1675
  %1713 = load i64, ptr %45, align 8, !tbaa !20
  %1714 = icmp ne i64 %1713, 0
  %1715 = xor i1 %1714, true
  %1716 = xor i1 %1715, true
  %1717 = zext i1 %1716 to i32
  %1718 = sext i32 %1717 to i64
  %1719 = call i64 @llvm.expect.i64(i64 %1718, i64 0)
  %1720 = icmp ne i64 %1719, 0
  br i1 %1720, label %1721, label %1725

1721:                                             ; preds = %1712
  %1722 = load ptr, ptr %5, align 8, !tbaa !5
  %1723 = load i64, ptr %45, align 8, !tbaa !20
  %1724 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1722, ptr noundef @.str.60, i64 noundef %1723) #13
  store i32 %1724, ptr %7, align 4, !tbaa !9
  br label %1725

1725:                                             ; preds = %1721, %1712
  %1726 = load ptr, ptr %34, align 8, !tbaa !5
  %1727 = load ptr, ptr %44, align 8, !tbaa !5
  %1728 = load i64, ptr %43, align 8, !tbaa !20
  %1729 = getelementptr inbounds i8, ptr %1727, i64 %1728
  %1730 = icmp ult ptr %1726, %1729
  %1731 = xor i1 %1730, true
  %1732 = xor i1 %1731, true
  %1733 = zext i1 %1732 to i32
  %1734 = sext i32 %1733 to i64
  %1735 = call i64 @llvm.expect.i64(i64 %1734, i64 0)
  %1736 = icmp ne i64 %1735, 0
  br i1 %1736, label %1737, label %1747

1737:                                             ; preds = %1725
  %1738 = load ptr, ptr %5, align 8, !tbaa !5
  %1739 = load ptr, ptr %44, align 8, !tbaa !5
  %1740 = load i64, ptr %43, align 8, !tbaa !20
  %1741 = getelementptr inbounds i8, ptr %1739, i64 %1740
  %1742 = load ptr, ptr %34, align 8, !tbaa !5
  %1743 = ptrtoint ptr %1741 to i64
  %1744 = ptrtoint ptr %1742 to i64
  %1745 = sub i64 %1743, %1744
  %1746 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1738, ptr noundef @.str.61, i64 noundef %1745) #13
  store i32 %1746, ptr %7, align 4, !tbaa !9
  br label %1747

1747:                                             ; preds = %1737, %1725
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #12
  store i32 0, ptr %13, align 4
  br label %1748

1748:                                             ; preds = %1747, %1618
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #12
  %1749 = load i32, ptr %13, align 4
  switch i32 %1749, label %1777 [
    i32 0, label %1750
    i32 19, label %1752
  ]

1750:                                             ; preds = %1748
  br label %1751

1751:                                             ; preds = %1750, %1599
  br label %1752

1752:                                             ; preds = %1751, %1748, %1597
  %1753 = load i32, ptr %38, align 4, !tbaa !9
  %1754 = add nsw i32 %1753, 1
  store i32 %1754, ptr %38, align 4, !tbaa !9
  br label %1472, !llvm.loop !60

1755:                                             ; preds = %1477
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #12
  store i32 0, ptr %13, align 4
  br label %1756

1756:                                             ; preds = %1755, %1429
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  %1757 = load i32, ptr %13, align 4
  switch i32 %1757, label %1761 [
    i32 0, label %1758
  ]

1758:                                             ; preds = %1756
  br label %1759

1759:                                             ; preds = %1758
  br label %1760

1760:                                             ; preds = %1759, %1407, %1393, %1379
  store i32 0, ptr %13, align 4
  br label %1761

1761:                                             ; preds = %1760, %1756, %1417, %1403, %1389, %1371, %1352, %1335, %1322, %1319, %1124
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  br label %1762

1762:                                             ; preds = %1761, %1090, %891
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  br label %1763

1763:                                             ; preds = %1762, %851
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #12
  %1764 = load i32, ptr %13, align 4
  switch i32 %1764, label %1770 [
    i32 0, label %1765
    i32 9, label %1767
  ]

1765:                                             ; preds = %1763
  br label %1766

1766:                                             ; preds = %1765, %833
  br label %1767

1767:                                             ; preds = %1766, %1763, %831
  %1768 = load i64, ptr %22, align 8, !tbaa !20
  %1769 = add i64 %1768, 1
  store i64 %1769, ptr %22, align 8, !tbaa !20
  br label %680, !llvm.loop !62

1770:                                             ; preds = %1763, %684
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #12
  %1771 = load i32, ptr %13, align 4
  switch i32 %1771, label %1774 [
    i32 7, label %1772
  ]

1772:                                             ; preds = %1770
  %1773 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %1773, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1774

1774:                                             ; preds = %1772, %1770
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  br label %1775

1775:                                             ; preds = %1774, %311, %229
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #12
  call void @llvm.lifetime.end.p0(i64 510, ptr %6) #12
  %1776 = load i32, ptr %3, align 4
  ret i32 %1776

1777:                                             ; preds = %1748, %1597, %831
  unreachable
}

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i64 @pgno2bytes(ptr noundef, i64 noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_shadowed(ptr noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @__Wpedantic_format_voidptr(ptr noundef) #4

; Function Attrs: noreturn
declare void @mdbx_assert_fail(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i64 @page_space(ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i64 @page_numkeys(ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_modifable(ptr noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_branch(ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(none) uwtable
declare hidden i64 @keysize_max(i64 noundef, i32 noundef) #6

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_dupfix_leaf(ptr noundef) #3

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

; Function Attrs: nounwind willreturn memory(argmem: readwrite) uwtable
declare hidden void @value_clc(ptr dead_on_unwind noalias writable sret(%struct.clc) align 8, ptr noundef) #8

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden ptr @page_dupfix_ptr(ptr noundef, i64 noundef, i64 noundef) #3

declare ptr @mdbx_dump_val(ptr noundef, ptr noundef, i64 noundef) #9

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #10

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden ptr @page_node(ptr noundef, i64 noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i64 @node_ks(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden ptr @node_key(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_leaf(ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i32 @node_pgno(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden zeroext i8 @node_flags(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i64 @node_ds(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden ptr @node_data(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(none) uwtable
declare hidden i64 @node_size_len(i64 noundef, i64 noundef) #6

; Function Attrs: nounwind uwtable
declare dso_local { ptr, i32 } @page_get_large(ptr noundef, i32 noundef, i64 noundef) #11

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i32 @node_largedata_pgno(ptr noalias noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden i32 @largechunk_npages(ptr noundef, i64 noundef) #3

attributes #0 = { cold 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 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint nounwind willreturn memory(read) 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 = { inlinehint 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 #5 = { noreturn "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 = { inlinehint nounwind willreturn memory(none) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind willreturn memory(argmem: readwrite) 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 #9 = { "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 #10 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #11 = { 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 #12 = { nounwind }
attributes #13 = { cold }
attributes #14 = { nounwind willreturn memory(read) }
attributes #15 = { noreturn }
attributes #16 = { nounwind willreturn memory(none) }
attributes #17 = { nounwind willreturn memory(argmem: readwrite) }

!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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 16}
!12 = !{!"MDBX_cursor", !10, i64 0, !7, i64 4, !7, i64 6, !7, i64 7, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !7, i64 48, !7, i64 304, !6, i64 368, !6, i64 376}
!13 = !{!14, !6, i64 80}
!14 = !{!"MDBX_txn", !10, i64 0, !10, i64 4, !15, i64 8, !15, i64 16, !6, i64 24, !6, i64 32, !16, i64 40, !15, i64 64, !15, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !18, i64 128, !6, i64 160, !7, i64 168}
!15 = !{!"long", !7, i64 0}
!16 = !{!"geo", !17, i64 0, !17, i64 2, !10, i64 4, !10, i64 8, !7, i64 12, !7, i64 16}
!17 = !{!"short", !7, i64 0}
!18 = !{!"MDBX_canary", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!19 = !{!7, !7, i64 0}
!20 = !{!15, !15, i64 0}
!21 = !{!17, !17, i64 0}
!22 = !{!23, !10, i64 8}
!23 = !{!"MDBX_env", !7, i64 0, !10, i64 4, !10, i64 8, !24, i64 16, !10, i64 56, !10, i64 60, !24, i64 64, !6, i64 104, !17, i64 112, !17, i64 114, !17, i64 116, !17, i64 118, !17, i64 120, !17, i64 122, !7, i64 124, !7, i64 128, !7, i64 129, !17, i64 130, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !25, i64 152, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !10, i64 224, !10, i64 228, !10, i64 232, !6, i64 240, !6, i64 248, !15, i64 256, !26, i64 264, !29, i64 320, !27, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !30, i64 392, !7, i64 400, !10, i64 440, !10, i64 444, !6, i64 448, !31, i64 456, !7, i64 496, !7, i64 536}
!24 = !{!"osal_mmap", !7, i64 0, !10, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!25 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!26 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !15, i64 16, !7, i64 24, !7, i64 25, !7, i64 26, !7, i64 27, !10, i64 28, !10, i64 32, !27, i64 36, !27, i64 37, !27, i64 38, !28, i64 40, !7, i64 48}
!27 = !{!"_Bool", !7, i64 0}
!28 = !{!"", !17, i64 0, !17, i64 2, !17, i64 4, !17, i64 6}
!29 = !{!"", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!30 = !{!"", !15, i64 0}
!31 = !{!"osal_ioring", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!32 = !{!23, !10, i64 4}
!33 = !{!34, !7, i64 25}
!34 = !{!"libmdbx_globals", !7, i64 0, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !27, i64 27, !10, i64 28, !7, i64 32, !7, i64 40, !15, i64 80, !6, i64 88}
!35 = !{!12, !7, i64 6}
!36 = !{!12, !6, i64 24}
!37 = !{!38, !17, i64 0}
!38 = !{!"tree", !17, i64 0, !17, i64 2, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !15, i64 24, !15, i64 32, !15, i64 40}
!39 = !{!38, !17, i64 2}
!40 = !{!38, !15, i64 32}
!41 = !{!38, !10, i64 4}
!42 = !{!12, !6, i64 32}
!43 = !{!44, !15, i64 8}
!44 = !{!"clc2", !45, i64 0, !45, i64 24}
!45 = !{!"clc", !6, i64 0, !15, i64 8, !15, i64 16}
!46 = !{!44, !15, i64 16}
!47 = !{!48, !6, i64 0}
!48 = !{!"iovec", !6, i64 0, !15, i64 8}
!49 = !{!48, !15, i64 8}
!50 = !{!44, !6, i64 0}
!51 = !{i64 0, i64 8, !5, i64 8, i64 8, !20}
!52 = !{!45, !15, i64 8}
!53 = !{!45, !15, i64 16}
!54 = !{!23, !17, i64 112}
!55 = !{!14, !6, i64 88}
!56 = !{!57, !10, i64 8}
!57 = !{!"page_get_result", !6, i64 0, !10, i64 8}
!58 = !{!57, !6, i64 0}
!59 = !{!45, !6, i64 0}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}
!62 = distinct !{!62, !61}


; 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 }
%struct.anon = 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.iovec = type { ptr, i64 }
%struct.clc = type { ptr, i64, i64 }

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@.str.4 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [61 x i8], align 1
@__func__.page_check = external hidden unnamed_addr constant [11 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [42 x i8], align 1

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

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i8 @page_type(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @page_check(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca [510 x i8], align 16
  %4 = alloca %struct.iovec, align 8
  %5 = alloca %struct.iovec, align 8
  %6 = alloca %struct.clc, align 8
  %7 = alloca %struct.iovec, align 8
  %8 = alloca %struct.iovec, align 8
  call void @llvm.lifetime.start.p0(i64 510, ptr nonnull %3) #11
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load i32, ptr %9, align 1, !tbaa !5
  %spec.select = icmp slt i32 %10, 3
  br i1 %spec.select, label %11, label %13, !prof !9

11:                                               ; preds = %2
  %12 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.4, i32 noundef %10) #12
  br label %13

13:                                               ; preds = %11, %2
  %.0364 = phi i32 [ %12, %11 ], [ 0, %2 ]
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  %15 = load ptr, ptr %14, align 8, !tbaa !10
  %16 = getelementptr inbounds i8, ptr %15, i64 80
  %17 = load ptr, ptr %16, align 8, !tbaa !13
  %18 = ptrtoint ptr %1 to i64
  %19 = getelementptr inbounds i8, ptr %17, i64 16
  %20 = load ptr, ptr %19, align 8, !tbaa !19
  %21 = ptrtoint ptr %20 to i64
  %22 = sub nsw i64 %18, %21
  %23 = icmp slt i64 %22, 0
  br i1 %23, label %40, label %24

24:                                               ; preds = %13
  %25 = getelementptr inbounds i8, ptr %15, i64 56
  %26 = load i32, ptr %25, align 8, !tbaa !19
  %27 = zext i32 %26 to i64
  %28 = tail call i64 @pgno2bytes(ptr noundef nonnull %17, i64 noundef %27) #13
  %29 = getelementptr inbounds i8, ptr %1, i64 10
  %30 = load i16, ptr %29, align 1, !tbaa !20
  %31 = and i16 %30, 64
  %.not = icmp eq i16 %31, 0
  br i1 %.not, label %32, label %35

32:                                               ; preds = %24
  %33 = getelementptr inbounds i8, ptr %17, i64 8
  %34 = load i32, ptr %33, align 8, !tbaa !21
  br label %35

35:                                               ; preds = %24, %32
  %36 = phi i32 [ %34, %32 ], [ 21, %24 ]
  %37 = zext i32 %36 to i64
  %38 = sub i64 %28, %37
  %39 = icmp sgt i64 %22, %38
  br i1 %39, label %40, label %53

40:                                               ; preds = %35, %13
  %41 = getelementptr inbounds i8, ptr %17, i64 4
  %42 = load i32, ptr %41, align 4, !tbaa !31
  %43 = and i32 %42, 524288
  %.not421 = icmp eq i32 %43, 0
  br i1 %.not421, label %44, label %50

44:                                               ; preds = %40
  %45 = tail call zeroext i1 @is_shadowed(ptr noundef nonnull %15, ptr noundef nonnull %1) #13
  br i1 %45, label %59, label %46

46:                                               ; preds = %44
  %47 = getelementptr inbounds i8, ptr %1, i64 10
  %48 = load i16, ptr %47, align 1, !tbaa !20
  %49 = and i16 %48, 64
  %.not422 = icmp eq i16 %49, 0
  br i1 %.not422, label %50, label %59

50:                                               ; preds = %46, %40
  %51 = tail call ptr @__Wpedantic_format_voidptr(ptr noundef nonnull %1)
  %52 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.5, ptr noundef %51, i64 noundef %22) #12
  br label %59

53:                                               ; preds = %35
  %54 = getelementptr inbounds i8, ptr %17, i64 8
  %55 = load i32, ptr %54, align 8, !tbaa !21
  %56 = add i32 %55, -1
  %57 = zext i32 %56 to i64
  %58 = and i64 %22, %57
  %.not420 = icmp eq i64 %58, 0
  %spec.select464 = select i1 %.not420, i32 0, i32 64
  br label %59

59:                                               ; preds = %53, %44, %46, %50
  %.0375 = phi i32 [ 0, %50 ], [ 0, %44 ], [ 0, %46 ], [ %spec.select464, %53 ]
  %.0374 = phi i32 [ 57240, %50 ], [ 57240, %44 ], [ 57240, %46 ], [ 57304, %53 ]
  %.1365 = phi i32 [ %52, %50 ], [ %.0364, %44 ], [ %.0364, %46 ], [ %.0364, %53 ]
  %60 = getelementptr inbounds i8, ptr %1, i64 10
  %61 = load i16, ptr %60, align 1, !tbaa !20
  %62 = zext i16 %61 to i32
  %63 = and i32 %.0374, %62
  %.not423 = icmp eq i32 %63, %.0375
  br i1 %.not423, label %66, label %64, !prof !32

64:                                               ; preds = %59
  %65 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.6, i32 noundef %63, i32 noundef %.0375) #12
  br label %66

66:                                               ; preds = %59, %64
  %.2366 = phi i32 [ %65, %64 ], [ %.1365, %59 ]
  %67 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !33
  %68 = and i8 %67, 1
  %.not424 = icmp eq i8 %68, 0
  br i1 %.not424, label %.critedge, label %69, !prof !9

69:                                               ; preds = %66
  %70 = getelementptr inbounds i8, ptr %0, i64 6
  %71 = load i8, ptr %70, align 2, !tbaa !35
  %72 = and i8 %71, 32
  %73 = icmp eq i8 %72, 0
  br i1 %73, label %.critedge, label %74

74:                                               ; preds = %69
  %75 = getelementptr inbounds i8, ptr %0, i64 4
  %76 = load i8, ptr %75, align 4, !tbaa !19
  %77 = and i8 %76, 1
  %.not497 = icmp eq i8 %77, 0
  br i1 %.not497, label %78, label %.critedge, !prof !9

78:                                               ; preds = %74
  %79 = load ptr, ptr %14, align 8, !tbaa !10
  %80 = getelementptr inbounds i8, ptr %79, i64 80
  %81 = load ptr, ptr %80, align 8, !tbaa !13
  tail call void @mdbx_assert_fail(ptr noundef %81, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.page_check, i32 noundef 72) #14
  unreachable

.critedge:                                        ; preds = %69, %74, %66
  %82 = tail call zeroext i8 @page_type(ptr noundef nonnull %1) #13
  switch i8 %82, label %83 [
    i8 4, label %86
    i8 66, label %112
    i8 2, label %121
    i8 98, label %125
    i8 34, label %134
    i8 1, label %144
  ]

83:                                               ; preds = %.critedge
  %84 = zext i8 %82 to i32
  %85 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.8, i32 noundef %84) #12
  br label %581

86:                                               ; preds = %.critedge
  %87 = getelementptr inbounds i8, ptr %0, i64 4
  %88 = load i8, ptr %87, align 4, !tbaa !19
  %89 = and i8 %88, 1
  %.not463 = icmp eq i8 %89, 0
  br i1 %.not463, label %96, label %90, !prof !32

90:                                               ; preds = %86
  %91 = getelementptr inbounds i8, ptr %0, i64 24
  %92 = load ptr, ptr %91, align 8, !tbaa !36
  %93 = load i16, ptr %92, align 4, !tbaa !37
  %94 = zext i16 %93 to i32
  %95 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.11, i32 noundef %94) #12
  br label %96

96:                                               ; preds = %90, %86
  %.3367 = phi i32 [ %95, %90 ], [ %.2366, %86 ]
  %97 = getelementptr inbounds i8, ptr %1, i64 12
  %98 = load i32, ptr %97, align 1, !tbaa !19
  %99 = add i32 %98, -1073741823
  %100 = icmp ult i32 %99, -1073741822
  br i1 %100, label %101, label %103, !prof !9

101:                                              ; preds = %96
  %102 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.12, i32 noundef %98) #12
  br label %103

103:                                              ; preds = %101, %96
  %.4368 = phi i32 [ %102, %101 ], [ %.3367, %96 ]
  %104 = load i32, ptr %9, align 1, !tbaa !5
  %105 = add i32 %104, %98
  %106 = load ptr, ptr %14, align 8, !tbaa !10
  %107 = getelementptr inbounds i8, ptr %106, i64 56
  %108 = load i32, ptr %107, align 8, !tbaa !19
  %109 = icmp ugt i32 %105, %108
  br i1 %109, label %110, label %581, !prof !9

110:                                              ; preds = %103
  %111 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.13, i32 noundef %105, i32 noundef %108) #12
  br label %581

112:                                              ; preds = %.critedge
  %113 = getelementptr inbounds i8, ptr %0, i64 24
  %114 = load ptr, ptr %113, align 8, !tbaa !36
  %115 = getelementptr inbounds i8, ptr %114, i64 2
  %116 = load i16, ptr %115, align 2, !tbaa !39
  %.not426 = icmp eq i16 %116, 1
  br i1 %.not426, label %121, label %117, !prof !32

117:                                              ; preds = %112
  %118 = load i16, ptr %114, align 4, !tbaa !37
  %119 = zext i16 %118 to i32
  %120 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, i32 noundef %119) #12
  br label %121

121:                                              ; preds = %112, %117, %.critedge
  %.6370 = phi i32 [ %.2366, %.critedge ], [ %120, %117 ], [ %.2366, %112 ]
  %122 = getelementptr inbounds i8, ptr %0, i64 6
  %123 = load i8, ptr %122, align 2, !tbaa !35
  %124 = and i8 %123, 32
  %.not427 = icmp eq i8 %124, 0
  br i1 %.not427, label %144, label %.sink.split, !prof !32

125:                                              ; preds = %.critedge
  %126 = getelementptr inbounds i8, ptr %0, i64 24
  %127 = load ptr, ptr %126, align 8, !tbaa !36
  %128 = getelementptr inbounds i8, ptr %127, i64 2
  %129 = load i16, ptr %128, align 2, !tbaa !39
  %.not425 = icmp eq i16 %129, 1
  br i1 %.not425, label %134, label %130, !prof !32

130:                                              ; preds = %125
  %131 = load i16, ptr %127, align 4, !tbaa !37
  %132 = zext i16 %131 to i32
  %133 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.15, i32 noundef %132) #12
  br label %134

134:                                              ; preds = %125, %130, %.critedge
  %.7371 = phi i32 [ %.2366, %.critedge ], [ %133, %130 ], [ %.2366, %125 ]
  %135 = getelementptr inbounds i8, ptr %0, i64 6
  %136 = load i8, ptr %135, align 2, !tbaa !35
  %137 = and i8 %136, 32
  %138 = icmp eq i8 %137, 0
  br i1 %138, label %.sink.split, label %144, !prof !9

.sink.split:                                      ; preds = %134, %121
  %.str.18.sink = phi ptr [ @.str.16, %121 ], [ @.str.18, %134 ]
  %139 = getelementptr inbounds i8, ptr %0, i64 24
  %140 = load ptr, ptr %139, align 8, !tbaa !36
  %141 = load i16, ptr %140, align 4, !tbaa !37
  %142 = zext i16 %141 to i32
  %143 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull %.str.18.sink, i32 noundef %142) #12
  br label %144

144:                                              ; preds = %.sink.split, %134, %121, %.critedge
  %.8372 = phi i32 [ %.2366, %.critedge ], [ %.7371, %134 ], [ %.6370, %121 ], [ %143, %.sink.split ]
  %145 = getelementptr inbounds i8, ptr %1, i64 12
  %146 = getelementptr inbounds i8, ptr %1, i64 14
  %147 = load i16, ptr %146, align 1, !tbaa !19
  %148 = zext i16 %147 to i32
  %149 = load i16, ptr %145, align 1, !tbaa !19
  %150 = icmp uge i16 %147, %149
  %151 = and i16 %149, 1
  %.not428 = icmp eq i16 %151, 0
  %or.cond465 = and i1 %150, %.not428
  br i1 %or.cond465, label %152, label %.critedge467, !prof !40

152:                                              ; preds = %144
  %153 = add nuw nsw i32 %148, 20
  %154 = getelementptr inbounds i8, ptr %17, i64 8
  %155 = load i32, ptr %154, align 8, !tbaa !21
  %156 = icmp ugt i32 %153, %155
  br i1 %156, label %.critedge467, label %160, !prof !9

.critedge467:                                     ; preds = %144, %152
  %157 = zext i16 %149 to i32
  %158 = tail call i64 @page_space(ptr noundef nonnull %17) #13
  %159 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.19, i32 noundef %157, i32 noundef %148, i64 noundef %158) #12
  %.phi.trans.insert = getelementptr inbounds i8, ptr %17, i64 8
  %.pre = load i32, ptr %.phi.trans.insert, align 8, !tbaa !21
  br label %160

160:                                              ; preds = %.critedge467, %152
  %161 = phi i32 [ %.pre, %.critedge467 ], [ %155, %152 ]
  %.9373 = phi i32 [ %159, %.critedge467 ], [ %.8372, %152 ]
  %162 = getelementptr inbounds i8, ptr %17, i64 8
  %163 = zext i32 %161 to i64
  %164 = add nsw i64 %163, %18
  %165 = inttoptr i64 %164 to ptr
  %166 = tail call i64 @page_numkeys(ptr noundef nonnull %1) #13
  %167 = load i16, ptr %60, align 1, !tbaa !20
  %168 = and i16 %167, 1
  %169 = zext nneg i16 %168 to i64
  %.not429 = icmp ugt i64 %166, %169
  br i1 %.not429, label %192, label %170, !prof !32

170:                                              ; preds = %160
  %171 = getelementptr inbounds i8, ptr %0, i64 4
  %172 = load i8, ptr %171, align 4, !tbaa !19
  %173 = and i8 %172, 1
  %.not430 = icmp eq i8 %173, 0
  br i1 %.not430, label %179, label %174

174:                                              ; preds = %170
  %175 = getelementptr inbounds i8, ptr %0, i64 24
  %176 = load ptr, ptr %175, align 8, !tbaa !36
  %177 = getelementptr inbounds i8, ptr %176, i64 32
  %178 = load i64, ptr %177, align 4, !tbaa !41
  %.not431 = icmp eq i64 %178, 0
  br i1 %.not431, label %192, label %179

179:                                              ; preds = %174, %170
  %180 = getelementptr inbounds i8, ptr %0, i64 6
  %181 = load i8, ptr %180, align 2, !tbaa !35
  %182 = and i8 %181, 8
  %.not432 = icmp eq i8 %182, 0
  br i1 %.not432, label %187, label %183

183:                                              ; preds = %179
  %184 = load ptr, ptr %14, align 8, !tbaa !10
  %185 = tail call zeroext i1 @is_modifable(ptr noundef %184, ptr noundef nonnull %1) #13
  %186 = and i16 %167, 64
  %.not433 = icmp ne i16 %186, 0
  %or.cond496.not = or i1 %.not433, %185
  br i1 %or.cond496.not, label %192, label %187

187:                                              ; preds = %183, %179
  %188 = tail call zeroext i1 @is_branch(ptr noundef nonnull %1) #13
  %189 = select i1 %188, ptr @.str.21, ptr @.str.22
  %190 = select i1 %188, i32 2, i32 1
  %191 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.20, ptr noundef nonnull %189, i64 noundef %166, i32 noundef %190) #12
  br label %192

192:                                              ; preds = %174, %183, %187, %160
  %.10 = phi i32 [ %.9373, %183 ], [ %191, %187 ], [ %.9373, %174 ], [ %.9373, %160 ]
  %193 = load i32, ptr %162, align 8, !tbaa !21
  %194 = zext i32 %193 to i64
  %195 = tail call i64 @keysize_max(i64 noundef %194, i32 noundef 0) #15
  %196 = getelementptr inbounds i8, ptr %1, i64 8
  %197 = load i16, ptr %196, align 1, !tbaa !20
  %198 = zext i16 %197 to i64
  %199 = tail call zeroext i1 @is_dupfix_leaf(ptr noundef nonnull %1) #13
  br i1 %199, label %200, label %224

200:                                              ; preds = %192
  %201 = getelementptr inbounds i8, ptr %0, i64 4
  %202 = load i8, ptr %201, align 4, !tbaa !19
  %203 = and i8 %202, 1
  %204 = icmp eq i8 %203, 0
  %.phi.trans.insert517 = getelementptr inbounds i8, ptr %0, i64 24
  %.pre518 = load ptr, ptr %.phi.trans.insert517, align 8, !tbaa !36
  %.pre519 = load i16, ptr %.pre518, align 4, !tbaa !37
  %205 = and i16 %.pre519, 16
  %206 = icmp eq i16 %205, 0
  %or.cond528 = select i1 %204, i1 true, i1 %206
  br i1 %or.cond528, label %.critedge469, label %209, !prof !42

.critedge469:                                     ; preds = %200
  %207 = zext i16 %.pre519 to i32
  %208 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.23, i32 noundef %207) #12
  br label %238

209:                                              ; preds = %200
  %210 = getelementptr inbounds i8, ptr %.pre518, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !43
  %212 = zext i16 %197 to i32
  %.not435 = icmp eq i32 %211, %212
  br i1 %.not435, label %215, label %213, !prof !32

213:                                              ; preds = %209
  %214 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.24, i64 noundef %198) #12
  br label %238

215:                                              ; preds = %209
  %216 = and i64 %166, %198
  %217 = load i16, ptr %146, align 1, !tbaa !19
  %218 = zext i16 %217 to i64
  %219 = xor i64 %216, %218
  %220 = and i64 %219, 1
  %.not436 = icmp eq i64 %220, 0
  br i1 %.not436, label %238, label %221, !prof !32

221:                                              ; preds = %215
  %222 = zext i16 %217 to i32
  %223 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.25, i32 noundef %222, i64 noundef %166, i64 noundef %198) #12
  br label %238

224:                                              ; preds = %192
  %225 = load i16, ptr %146, align 1, !tbaa !19
  %226 = zext i16 %225 to i32
  %227 = and i32 %226, 1
  %.not434 = icmp eq i32 %227, 0
  br i1 %.not434, label %228, label %.critedge471, !prof !32

228:                                              ; preds = %224
  %229 = add nuw nsw i32 %226, 20
  %230 = zext nneg i32 %229 to i64
  %231 = shl i64 %166, 3
  %232 = add i64 %166, -1
  %233 = add i64 %232, %231
  %234 = add i64 %233, %230
  %235 = icmp ugt i64 %234, %194
  br i1 %235, label %.critedge471, label %238, !prof !9

.critedge471:                                     ; preds = %224, %228
  %236 = tail call i64 @page_space(ptr noundef nonnull %17) #13
  %237 = tail call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %1, ptr noundef nonnull @.str.26, i32 noundef %226, i64 noundef %166, i64 noundef %236) #12
  br label %238

238:                                              ; preds = %228, %.critedge471, %.critedge469, %215, %221, %213
  %.11 = phi i32 [ %208, %.critedge469 ], [ %214, %213 ], [ %223, %221 ], [ %.10, %215 ], [ %237, %.critedge471 ], [ %.10, %228 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %5, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #11
  call void @value_clc(ptr dead_on_unwind nonnull writable sret(%struct.clc) align 8 %6, ptr noundef nonnull %0) #16
  %.not460505.not = icmp eq i64 %166, 0
  br i1 %.not460505.not, label %._crit_edge511, label %.lr.ph510

.lr.ph510:                                        ; preds = %238
  %239 = getelementptr inbounds i8, ptr %0, i64 32
  %240 = getelementptr inbounds i8, ptr %0, i64 6
  %241 = getelementptr inbounds i8, ptr %4, i64 8
  %242 = getelementptr inbounds i8, ptr %3, i64 255
  %243 = getelementptr inbounds i8, ptr %6, i64 8
  %244 = getelementptr inbounds i8, ptr %6, i64 16
  %245 = getelementptr inbounds i8, ptr %0, i64 24
  %246 = getelementptr inbounds i8, ptr %7, i64 8
  br label %247

247:                                              ; preds = %.lr.ph510, %.thread485
  %.12508 = phi i32 [ %.11, %.lr.ph510 ], [ %.48, %.thread485 ]
  %.0382506 = phi i64 [ 0, %.lr.ph510 ], [ %580, %.thread485 ]
  %248 = call zeroext i1 @is_dupfix_leaf(ptr noundef %1) #13
  br i1 %248, label %249, label %286

249:                                              ; preds = %247
  %250 = load ptr, ptr %245, align 8, !tbaa !36
  %251 = getelementptr inbounds i8, ptr %250, i64 4
  %252 = load i32, ptr %251, align 4, !tbaa !43
  %253 = zext i32 %252 to i64
  %254 = call ptr @page_dupfix_ptr(ptr noundef %1, i64 noundef %.0382506, i64 noundef %253) #13
  %255 = getelementptr inbounds i8, ptr %254, i64 %198
  %256 = icmp ugt ptr %255, %165
  br i1 %256, label %257, label %261, !prof !9

257:                                              ; preds = %249
  %258 = ptrtoint ptr %255 to i64
  %259 = sub i64 %258, %164
  %260 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.27, i64 noundef %259) #12
  br label %.thread485

261:                                              ; preds = %249
  %262 = load ptr, ptr %239, align 8, !tbaa !44
  %263 = getelementptr inbounds i8, ptr %262, i64 8
  %264 = load i64, ptr %263, align 8, !tbaa !45
  %.not461 = icmp eq i64 %264, %198
  br i1 %.not461, label %270, label %265, !prof !32

265:                                              ; preds = %261
  %266 = icmp ugt i64 %264, %198
  %.phi.trans.insert522 = getelementptr inbounds i8, ptr %262, i64 16
  %.pre523 = load i64, ptr %.phi.trans.insert522, align 8, !tbaa !48
  %267 = icmp ult i64 %.pre523, %198
  %or.cond529 = select i1 %266, i1 true, i1 %267
  br i1 %or.cond529, label %.critedge473, label %269, !prof !42

.critedge473:                                     ; preds = %265
  %268 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.28, i64 noundef %198, i64 noundef %264, i64 noundef %.pre523) #12
  br label %270

269:                                              ; preds = %265
  store i64 %198, ptr %.phi.trans.insert522, align 8, !tbaa !48
  store i64 %198, ptr %263, align 8, !tbaa !45
  br label %270

270:                                              ; preds = %.critedge473, %269, %261
  %.13 = phi i32 [ %268, %.critedge473 ], [ %.12508, %269 ], [ %.12508, %261 ]
  %271 = load i8, ptr %240, align 2, !tbaa !35
  %272 = and i8 %271, 16
  %273 = icmp eq i8 %272, 0
  br i1 %273, label %274, label %.thread485

274:                                              ; preds = %270
  store ptr %254, ptr %4, align 8, !tbaa !49
  store i64 %198, ptr %241, align 8, !tbaa !51
  %275 = load ptr, ptr %5, align 8, !tbaa !49
  %.not462 = icmp eq ptr %275, null
  br i1 %.not462, label %285, label %276

276:                                              ; preds = %274
  %277 = load ptr, ptr %239, align 8, !tbaa !44
  %278 = load ptr, ptr %277, align 8, !tbaa !52
  %279 = call i32 %278(ptr noundef nonnull %5, ptr noundef nonnull %4) #11
  %280 = icmp sgt i32 %279, -1
  br i1 %280, label %281, label %285, !prof !9

281:                                              ; preds = %276
  %282 = call ptr @mdbx_dump_val(ptr noundef nonnull %5, ptr noundef nonnull %3, i64 noundef 255) #11
  %283 = call ptr @mdbx_dump_val(ptr noundef nonnull %4, ptr noundef nonnull %242, i64 noundef 255) #11
  %284 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.29, i64 noundef %.0382506, ptr noundef %282, ptr noundef %283) #12
  br label %285

285:                                              ; preds = %281, %276, %274
  %.14 = phi i32 [ %284, %281 ], [ %.13, %276 ], [ %.13, %274 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %4, i64 16, i1 false), !tbaa.struct !53
  br label %.thread485

286:                                              ; preds = %247
  %287 = call ptr @page_node(ptr noundef %1, i64 noundef %.0382506) #13
  %288 = ptrtoint ptr %287 to i64
  %289 = add nsw i64 %288, 8
  %290 = inttoptr i64 %289 to ptr
  %291 = icmp ugt ptr %290, %165
  br i1 %291, label %292, label %295, !prof !9

292:                                              ; preds = %286
  %293 = sub i64 %289, %164
  %294 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.30, i64 noundef %.0382506, i64 noundef %293) #12
  br label %.thread485

295:                                              ; preds = %286
  %296 = call i64 @node_ks(ptr noundef %287) #13
  %297 = icmp ugt i64 %296, %195
  br i1 %297, label %298, label %300, !prof !9

298:                                              ; preds = %295
  %299 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.31, i64 noundef %.0382506, i64 noundef %296) #12
  br label %300

300:                                              ; preds = %298, %295
  %.17 = phi i32 [ %299, %298 ], [ %.12508, %295 ]
  %301 = call ptr @node_key(ptr noundef %287) #13
  %302 = getelementptr inbounds i8, ptr %301, i64 %296
  %303 = icmp ugt ptr %302, %165
  br i1 %303, label %304, label %308, !prof !9

304:                                              ; preds = %300
  %305 = ptrtoint ptr %302 to i64
  %306 = sub i64 %305, %164
  %307 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.32, i64 noundef %.0382506, i64 noundef %306) #12
  br label %.thread485

308:                                              ; preds = %300
  %309 = call zeroext i1 @is_leaf(ptr noundef %1) #13
  %310 = icmp ne i64 %.0382506, 0
  %or.cond = or i1 %310, %309
  br i1 %or.cond, label %311, label %334

311:                                              ; preds = %308
  %312 = load ptr, ptr %239, align 8, !tbaa !44
  %313 = getelementptr inbounds i8, ptr %312, i64 8
  %314 = load i64, ptr %313, align 8, !tbaa !45
  %315 = icmp ult i64 %296, %314
  %.phi.trans.insert520 = getelementptr inbounds i8, ptr %312, i64 16
  %.pre521 = load i64, ptr %.phi.trans.insert520, align 8, !tbaa !48
  %316 = icmp ugt i64 %296, %.pre521
  %or.cond530 = select i1 %315, i1 true, i1 %316
  br i1 %or.cond530, label %.critedge475, label %318, !prof !42

.critedge475:                                     ; preds = %311
  %317 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.33, i64 noundef %.0382506, i64 noundef %296, i64 noundef %314, i64 noundef %.pre521) #12
  br label %318

318:                                              ; preds = %311, %.critedge475
  %.18 = phi i32 [ %317, %.critedge475 ], [ %.17, %311 ]
  %319 = load i8, ptr %240, align 2, !tbaa !35
  %320 = and i8 %319, 16
  %321 = icmp eq i8 %320, 0
  br i1 %321, label %322, label %334

322:                                              ; preds = %318
  store ptr %301, ptr %4, align 8, !tbaa !49
  store i64 %296, ptr %241, align 8, !tbaa !51
  %323 = load ptr, ptr %5, align 8, !tbaa !49
  %.not437 = icmp eq ptr %323, null
  br i1 %.not437, label %333, label %324

324:                                              ; preds = %322
  %325 = load ptr, ptr %239, align 8, !tbaa !44
  %326 = load ptr, ptr %325, align 8, !tbaa !52
  %327 = call i32 %326(ptr noundef nonnull %5, ptr noundef nonnull %4) #11
  %328 = icmp sgt i32 %327, -1
  br i1 %328, label %329, label %333, !prof !9

329:                                              ; preds = %324
  %330 = call ptr @mdbx_dump_val(ptr noundef nonnull %5, ptr noundef nonnull %3, i64 noundef 255) #11
  %331 = call ptr @mdbx_dump_val(ptr noundef nonnull %4, ptr noundef nonnull %242, i64 noundef 255) #11
  %332 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.34, i64 noundef %.0382506, ptr noundef %330, ptr noundef %331) #12
  br label %333

333:                                              ; preds = %329, %324, %322
  %.19 = phi i32 [ %332, %329 ], [ %.18, %324 ], [ %.18, %322 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %4, i64 16, i1 false), !tbaa.struct !53
  br label %334

334:                                              ; preds = %318, %333, %308
  %.20 = phi i32 [ %.19, %333 ], [ %.18, %318 ], [ %.17, %308 ]
  %335 = call zeroext i1 @is_branch(ptr noundef %1) #13
  br i1 %335, label %336, label %363

336:                                              ; preds = %334
  %337 = load i8, ptr %240, align 2, !tbaa !35
  %338 = and i8 %337, 8
  %339 = icmp ne i8 %338, 0
  %.not455 = icmp eq i64 %296, 0
  %340 = or i1 %339, %.not455
  %or.cond476 = or i1 %340, %310
  br i1 %or.cond476, label %343, label %341, !prof !56

341:                                              ; preds = %336
  %342 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.35, i64 noundef 0, i64 noundef %296) #12
  br label %343

343:                                              ; preds = %341, %336
  %.21 = phi i32 [ %342, %341 ], [ %.20, %336 ]
  %344 = call i32 @node_pgno(ptr noundef %287) #13
  %345 = icmp ult i32 %344, 3
  br i1 %345, label %356, label %346, !prof !9

346:                                              ; preds = %343
  %347 = load ptr, ptr %14, align 8, !tbaa !10
  %348 = getelementptr inbounds i8, ptr %347, i64 56
  %349 = load i32, ptr %348, align 8, !tbaa !19
  %.not456 = icmp ult i32 %344, %349
  br i1 %.not456, label %358, label %350, !prof !32

350:                                              ; preds = %346
  %351 = getelementptr inbounds i8, ptr %347, i64 52
  %352 = load i32, ptr %351, align 4, !tbaa !19
  %.not457 = icmp ult i32 %344, %352
  br i1 %.not457, label %353, label %356, !prof !32

353:                                              ; preds = %350
  %354 = load i8, ptr %240, align 2, !tbaa !35
  %355 = and i8 %354, 64
  %.not458 = icmp eq i8 %355, 0
  br i1 %.not458, label %356, label %358

356:                                              ; preds = %353, %350, %343
  %357 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.36, i64 noundef %.0382506, i32 noundef %344) #12
  br label %358

358:                                              ; preds = %356, %353, %346
  %.22 = phi i32 [ %357, %356 ], [ %.21, %353 ], [ %.21, %346 ]
  %359 = call zeroext i8 @node_flags(ptr noundef %287) #13
  %.not459 = icmp eq i8 %359, 0
  br i1 %.not459, label %.thread485, label %360, !prof !32

360:                                              ; preds = %358
  %361 = zext i8 %359 to i32
  %362 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.37, i64 noundef %.0382506, i32 noundef %361) #12
  br label %.thread485

363:                                              ; preds = %334
  %364 = call zeroext i8 @node_flags(ptr noundef %287) #13
  switch i8 %364, label %365 [
    i8 1, label %368
    i8 0, label %368
    i8 2, label %368
    i8 6, label %368
    i8 4, label %368
  ]

365:                                              ; preds = %363
  %366 = zext i8 %364 to i32
  %367 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.38, i64 noundef %.0382506, i32 noundef %366) #12
  br label %368

368:                                              ; preds = %363, %363, %363, %363, %363, %365
  %.24 = phi i32 [ %367, %365 ], [ %.20, %363 ], [ %.20, %363 ], [ %.20, %363 ], [ %.20, %363 ], [ %.20, %363 ]
  %369 = call i64 @node_ds(ptr noundef %287) #13
  %370 = call ptr @node_data(ptr noundef %287) #13
  %371 = call zeroext i8 @node_flags(ptr noundef %287) #13
  %372 = and i8 %371, 1
  %.not438 = icmp eq i8 %372, 0
  br i1 %.not438, label %436, label %373

373:                                              ; preds = %368
  %374 = getelementptr inbounds i8, ptr %370, i64 4
  %375 = icmp ugt ptr %374, %165
  br i1 %375, label %376, label %381, !prof !9

376:                                              ; preds = %373
  %377 = getelementptr inbounds i8, ptr %370, i64 %369
  %378 = ptrtoint ptr %377 to i64
  %379 = sub i64 %378, %164
  %380 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.39, ptr noundef nonnull @.str.40, i64 noundef %.0382506, i64 noundef %166, i64 noundef %369, i64 noundef %379) #12
  br label %.thread485

381:                                              ; preds = %373
  %382 = load i64, ptr %243, align 8, !tbaa !57
  %383 = icmp ule i64 %369, %382
  %384 = load i64, ptr %244, align 8
  %385 = icmp ugt i64 %369, %384
  %386 = select i1 %383, i1 true, i1 %385, !prof !9
  br i1 %386, label %387, label %389, !prof !9

387:                                              ; preds = %381
  %388 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.41, i64 noundef %369, i64 noundef %382, i64 noundef %384) #12
  br label %389

389:                                              ; preds = %387, %381
  %.25 = phi i32 [ %388, %387 ], [ %.24, %381 ]
  %390 = call i64 @node_ks(ptr noundef %287) #13
  %391 = call i64 @node_size_len(i64 noundef %390, i64 noundef %369) #15
  %392 = load ptr, ptr %14, align 8, !tbaa !10
  %393 = getelementptr inbounds i8, ptr %392, i64 80
  %394 = load ptr, ptr %393, align 8, !tbaa !13
  %395 = getelementptr inbounds i8, ptr %394, i64 112
  %396 = load i16, ptr %395, align 8, !tbaa !58
  %397 = zext i16 %396 to i64
  %.not448 = icmp ugt i64 %391, %397
  br i1 %.not448, label %403, label %398, !prof !32

398:                                              ; preds = %389
  %399 = load ptr, ptr %245, align 8, !tbaa !36
  %400 = getelementptr inbounds i8, ptr %392, i64 88
  %401 = load ptr, ptr %400, align 8, !tbaa !59
  %.not449 = icmp eq ptr %399, %401
  br i1 %.not449, label %403, label %402

402:                                              ; preds = %398
  call void (ptr, ptr, ...) @poor_page(ptr noundef %1, ptr noundef nonnull @.str.42, i64 noundef %369) #12
  br label %403

403:                                              ; preds = %402, %398, %389
  %404 = load i8, ptr %240, align 2, !tbaa !35
  %405 = and i8 %404, 64
  %406 = icmp eq i8 %405, 0
  br i1 %406, label %407, label %.thread485

407:                                              ; preds = %403
  %408 = call i32 @node_largedata_pgno(ptr noundef %287) #13
  %409 = load i64, ptr %1, align 1, !tbaa !55
  %410 = call { ptr, i32 } @page_get_large(ptr noundef nonnull %0, i32 noundef %408, i64 noundef %409)
  %411 = extractvalue { ptr, i32 } %410, 0
  %412 = extractvalue { ptr, i32 } %410, 1
  %.not450 = icmp eq i32 %412, 0
  br i1 %.not450, label %413, label %._crit_edge511, !prof !32

413:                                              ; preds = %407
  %414 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !33
  %415 = and i8 %414, 1
  %.not451 = icmp eq i8 %415, 0
  br i1 %.not451, label %422, label %416, !prof !9

416:                                              ; preds = %413
  %417 = call zeroext i8 @page_type(ptr noundef %411) #13
  %.not452 = icmp eq i8 %417, 4
  br i1 %.not452, label %422, label %418, !prof !32

418:                                              ; preds = %416
  %419 = load ptr, ptr %14, align 8, !tbaa !10
  %420 = getelementptr inbounds i8, ptr %419, i64 80
  %421 = load ptr, ptr %420, align 8, !tbaa !13
  call void @mdbx_assert_fail(ptr noundef %421, ptr noundef nonnull @.str.43, ptr noundef nonnull @__func__.page_check, i32 noundef 231) #14
  unreachable

422:                                              ; preds = %416, %413
  %423 = call i32 @largechunk_npages(ptr noundef %17, i64 noundef %369) #13
  %424 = getelementptr inbounds i8, ptr %411, i64 12
  %425 = load i32, ptr %424, align 1, !tbaa !19
  %.not453 = icmp eq i32 %425, %423
  br i1 %.not453, label %.thread485, label %426, !prof !32

426:                                              ; preds = %422
  %427 = icmp ult i32 %425, %423
  br i1 %427, label %428, label %430

428:                                              ; preds = %426
  %429 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef nonnull %411, ptr noundef nonnull @.str.44, i32 noundef %425, i64 noundef %369) #12
  br label %.thread485

430:                                              ; preds = %426
  %431 = load ptr, ptr %245, align 8, !tbaa !36
  %432 = load ptr, ptr %14, align 8, !tbaa !10
  %433 = getelementptr inbounds i8, ptr %432, i64 88
  %434 = load ptr, ptr %433, align 8, !tbaa !59
  %.not454 = icmp eq ptr %431, %434
  br i1 %.not454, label %.thread485, label %435

435:                                              ; preds = %430
  call void (ptr, ptr, ...) @poor_page(ptr noundef nonnull %411, ptr noundef nonnull @.str.45, i32 noundef %425, i64 noundef %369) #12
  br label %.thread485

436:                                              ; preds = %368
  %437 = getelementptr inbounds i8, ptr %370, i64 %369
  %438 = icmp ugt ptr %437, %165
  br i1 %438, label %439, label %443, !prof !9

439:                                              ; preds = %436
  %440 = ptrtoint ptr %437 to i64
  %441 = sub i64 %440, %164
  %442 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.39, ptr noundef nonnull @.str.46, i64 noundef %.0382506, i64 noundef %166, i64 noundef %369, i64 noundef %441) #12
  br label %.thread485

443:                                              ; preds = %436
  switch i8 %371, label %.thread485 [
    i8 0, label %444
    i8 2, label %452
    i8 6, label %455
    i8 4, label %458
  ]

444:                                              ; preds = %443
  %445 = load i64, ptr %243, align 8, !tbaa !57
  %446 = icmp ult i64 %369, %445
  %447 = load i64, ptr %244, align 8
  %448 = icmp ugt i64 %369, %447
  %449 = select i1 %446, i1 true, i1 %448, !prof !9
  br i1 %449, label %450, label %.thread485, !prof !9

450:                                              ; preds = %444
  %451 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.47, i64 noundef %369, i64 noundef %445, i64 noundef %447) #12
  br label %.thread485

452:                                              ; preds = %443
  %.not447 = icmp eq i64 %369, 48
  br i1 %.not447, label %.thread485, label %453, !prof !32

453:                                              ; preds = %452
  %454 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.48, i64 noundef %369) #12
  br label %.thread485

455:                                              ; preds = %443
  %.not446 = icmp eq i64 %369, 48
  br i1 %.not446, label %.thread485, label %456, !prof !32

456:                                              ; preds = %455
  %457 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.49, i64 noundef %369, i64 noundef 48) #12
  br label %.thread485

458:                                              ; preds = %443
  %459 = icmp ult i64 %369, 21
  br i1 %459, label %460, label %462, !prof !9

460:                                              ; preds = %458
  %461 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.50, i64 noundef %369) #12
  br label %.thread485

462:                                              ; preds = %458
  %463 = getelementptr inbounds i8, ptr %370, i64 10
  %464 = load i16, ptr %463, align 1, !tbaa !20
  %trunc = and i16 %464, -17
  switch i16 %trunc, label %577 [
    i16 66, label %465
    i16 98, label %465
  ]

465:                                              ; preds = %462, %462
  %466 = call i64 @page_numkeys(ptr noundef nonnull %370) #13
  %467 = icmp eq i64 %466, 0
  br i1 %467, label %468, label %479, !prof !9

468:                                              ; preds = %465
  %469 = load i8, ptr %240, align 2, !tbaa !35
  %470 = and i8 %469, 8
  %.not439 = icmp eq i8 %470, 0
  br i1 %.not439, label %471, label %.thread

471:                                              ; preds = %468
  %472 = load ptr, ptr %245, align 8, !tbaa !36
  %473 = getelementptr inbounds i8, ptr %472, i64 32
  %474 = load i64, ptr %473, align 4, !tbaa !41
  %.not440 = icmp eq i64 %474, 0
  br i1 %.not440, label %.thread, label %475

475:                                              ; preds = %471
  %476 = call zeroext i1 @is_dupfix_leaf(ptr noundef nonnull %370) #13
  %477 = select i1 %476, ptr @.str.17, ptr @.str.14
  %478 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.52, ptr noundef nonnull %477) #12
  br label %.thread

.thread:                                          ; preds = %475, %471, %468
  %.29.ph = phi i32 [ %.24, %471 ], [ %478, %475 ], [ %.24, %468 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #11
  br label %._crit_edge

479:                                              ; preds = %465
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, i8 0, i64 16, i1 false)
  %480 = icmp sgt i64 %466, 0
  br i1 %480, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %479
  %481 = ptrtoint ptr %437 to i64
  %482 = getelementptr inbounds i8, ptr %370, i64 8
  br label %483

483:                                              ; preds = %.lr.ph, %576
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %576 ]
  %.30504 = phi i32 [ %.24, %.lr.ph ], [ %.42, %576 ]
  %484 = call zeroext i1 @is_dupfix_leaf(ptr noundef %370) #13
  br i1 %484, label %485, label %525

485:                                              ; preds = %483
  %486 = load i16, ptr %482, align 1, !tbaa !20
  %487 = zext i16 %486 to i64
  %488 = load ptr, ptr %245, align 8, !tbaa !36
  %489 = getelementptr inbounds i8, ptr %488, i64 4
  %490 = load i32, ptr %489, align 4, !tbaa !43
  %491 = zext i32 %490 to i64
  %492 = call ptr @page_dupfix_ptr(ptr noundef %370, i64 noundef %indvars.iv, i64 noundef %491) #13
  %493 = getelementptr inbounds i8, ptr %492, i64 %487
  %494 = icmp ult ptr %437, %493
  br i1 %494, label %495, label %499, !prof !9

495:                                              ; preds = %485
  %496 = ptrtoint ptr %493 to i64
  %497 = sub i64 %496, %481
  %498 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.53, i64 noundef %497) #12
  br label %576

499:                                              ; preds = %485
  %500 = load i64, ptr %243, align 8, !tbaa !57
  %.not444 = icmp eq i64 %500, %487
  br i1 %.not444, label %509, label %501, !prof !32

501:                                              ; preds = %499
  %502 = icmp ugt i64 %500, %487
  %503 = load i64, ptr %244, align 8
  %504 = icmp ult i64 %503, %487
  %505 = select i1 %502, i1 true, i1 %504, !prof !9
  br i1 %505, label %506, label %508, !prof !9

506:                                              ; preds = %501
  %507 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.54, i64 noundef %487, i64 noundef %500, i64 noundef %503) #12
  br label %509

508:                                              ; preds = %501
  store i64 %487, ptr %244, align 8, !tbaa !60
  store i64 %487, ptr %243, align 8, !tbaa !57
  br label %509

509:                                              ; preds = %506, %508, %499
  %.31 = phi i32 [ %507, %506 ], [ %.30504, %508 ], [ %.30504, %499 ]
  %510 = load i8, ptr %240, align 2, !tbaa !35
  %511 = and i8 %510, 16
  %512 = icmp eq i8 %511, 0
  br i1 %512, label %513, label %576

513:                                              ; preds = %509
  store ptr %492, ptr %7, align 8, !tbaa !49
  store i64 %487, ptr %246, align 8, !tbaa !51
  %514 = load ptr, ptr %8, align 8, !tbaa !49
  %.not445 = icmp eq ptr %514, null
  br i1 %.not445, label %524, label %515

515:                                              ; preds = %513
  %516 = load ptr, ptr %6, align 8, !tbaa !61
  %517 = call i32 %516(ptr noundef nonnull %8, ptr noundef nonnull %7) #11
  %518 = icmp sgt i32 %517, -1
  br i1 %518, label %519, label %524, !prof !9

519:                                              ; preds = %515
  %520 = call ptr @mdbx_dump_val(ptr noundef nonnull %8, ptr noundef nonnull %3, i64 noundef 255) #11
  %521 = call ptr @mdbx_dump_val(ptr noundef nonnull %7, ptr noundef nonnull %242, i64 noundef 255) #11
  %522 = trunc nuw nsw i64 %indvars.iv to i32
  %523 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.55, i32 noundef %522, ptr noundef %520, ptr noundef %521) #12
  br label %524

524:                                              ; preds = %519, %515, %513
  %.32 = phi i32 [ %523, %519 ], [ %.31, %515 ], [ %.31, %513 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %7, i64 16, i1 false), !tbaa.struct !53
  br label %576

525:                                              ; preds = %483
  %526 = call ptr @page_node(ptr noundef %370, i64 noundef %indvars.iv) #13
  %527 = ptrtoint ptr %526 to i64
  %528 = add nsw i64 %527, 8
  %529 = inttoptr i64 %528 to ptr
  %530 = icmp ult ptr %437, %529
  br i1 %530, label %531, label %534, !prof !9

531:                                              ; preds = %525
  %532 = sub i64 %481, %528
  %533 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.56, i64 noundef %532) #12
  br label %576

534:                                              ; preds = %525
  %535 = call zeroext i8 @node_flags(ptr noundef %526) #13
  %.not441 = icmp eq i8 %535, 0
  br i1 %.not441, label %539, label %536, !prof !32

536:                                              ; preds = %534
  %537 = zext i8 %535 to i32
  %538 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.57, i32 noundef %537) #12
  br label %539

539:                                              ; preds = %536, %534
  %.35 = phi i32 [ %538, %536 ], [ %.30504, %534 ]
  %540 = call i64 @node_ks(ptr noundef %526) #13
  %541 = call ptr @node_key(ptr noundef %526) #13
  %542 = call i64 @node_ds(ptr noundef %526) #13
  %543 = load i64, ptr %243, align 8, !tbaa !57
  %544 = icmp ult i64 %540, %543
  %545 = load i64, ptr %244, align 8
  %546 = icmp ugt i64 %540, %545
  %547 = select i1 %544, i1 true, i1 %546, !prof !9
  br i1 %547, label %548, label %550, !prof !9

548:                                              ; preds = %539
  %549 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.58, i64 noundef %540, i64 noundef %543, i64 noundef %545) #12
  br label %550

550:                                              ; preds = %548, %539
  %.36 = phi i32 [ %549, %548 ], [ %.35, %539 ]
  %551 = load i8, ptr %240, align 2, !tbaa !35
  %552 = and i8 %551, 16
  %553 = icmp eq i8 %552, 0
  br i1 %553, label %554, label %566

554:                                              ; preds = %550
  store ptr %541, ptr %7, align 8, !tbaa !49
  store i64 %540, ptr %246, align 8, !tbaa !51
  %555 = load ptr, ptr %8, align 8, !tbaa !49
  %.not442 = icmp eq ptr %555, null
  br i1 %.not442, label %565, label %556

556:                                              ; preds = %554
  %557 = load ptr, ptr %6, align 8, !tbaa !61
  %558 = call i32 %557(ptr noundef nonnull %8, ptr noundef nonnull %7) #11
  %559 = icmp sgt i32 %558, -1
  br i1 %559, label %560, label %565, !prof !9

560:                                              ; preds = %556
  %561 = call ptr @mdbx_dump_val(ptr noundef nonnull %8, ptr noundef nonnull %3, i64 noundef 255) #11
  %562 = call ptr @mdbx_dump_val(ptr noundef nonnull %7, ptr noundef nonnull %242, i64 noundef 255) #11
  %563 = trunc nuw nsw i64 %indvars.iv to i32
  %564 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.59, i32 noundef %563, ptr noundef %561, ptr noundef %562) #12
  br label %565

565:                                              ; preds = %560, %556, %554
  %.37 = phi i32 [ %564, %560 ], [ %.36, %556 ], [ %.36, %554 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %7, i64 16, i1 false), !tbaa.struct !53
  br label %566

566:                                              ; preds = %565, %550
  %.38 = phi i32 [ %.37, %565 ], [ %.36, %550 ]
  %.not443 = icmp eq i64 %542, 0
  br i1 %.not443, label %569, label %567, !prof !32

567:                                              ; preds = %566
  %568 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.60, i64 noundef %542) #12
  br label %569

569:                                              ; preds = %567, %566
  %.39 = phi i32 [ %568, %567 ], [ %.38, %566 ]
  %570 = getelementptr inbounds i8, ptr %541, i64 %540
  %571 = icmp ult ptr %437, %570
  br i1 %571, label %572, label %576, !prof !9

572:                                              ; preds = %569
  %573 = ptrtoint ptr %570 to i64
  %574 = sub i64 %573, %481
  %575 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.61, i64 noundef %574) #12
  br label %576

576:                                              ; preds = %531, %572, %569, %495, %524, %509
  %.42 = phi i32 [ %498, %495 ], [ %.32, %524 ], [ %.31, %509 ], [ %533, %531 ], [ %575, %572 ], [ %.39, %569 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %466
  br i1 %exitcond.not, label %._crit_edge, label %483, !llvm.loop !62

577:                                              ; preds = %462
  %578 = zext i16 %464 to i32
  %579 = call i32 (ptr, ptr, ...) @bad_page(ptr noundef %1, ptr noundef nonnull @.str.51, i32 noundef %578) #12
  br label %.thread485

._crit_edge:                                      ; preds = %576, %.thread, %479
  %.30.lcssa = phi i32 [ %.24, %479 ], [ %.29.ph, %.thread ], [ %.42, %576 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #11
  br label %.thread485

.thread485:                                       ; preds = %428, %435, %430, %422, %577, %._crit_edge, %444, %452, %455, %443, %403, %450, %453, %456, %460, %439, %376, %358, %360, %304, %292, %257, %285, %270
  %.48 = phi i32 [ %260, %257 ], [ %.14, %285 ], [ %.13, %270 ], [ %579, %577 ], [ %.30.lcssa, %._crit_edge ], [ %.24, %444 ], [ %.24, %452 ], [ %.24, %455 ], [ %.24, %443 ], [ %.25, %403 ], [ %451, %450 ], [ %454, %453 ], [ %457, %456 ], [ %461, %460 ], [ %442, %439 ], [ %380, %376 ], [ %.22, %358 ], [ %362, %360 ], [ %307, %304 ], [ %294, %292 ], [ %.25, %422 ], [ %.25, %430 ], [ %.25, %435 ], [ %429, %428 ]
  %580 = add nuw i64 %.0382506, 1
  %exitcond516.not = icmp eq i64 %580, %166
  br i1 %exitcond516.not, label %._crit_edge511, label %247, !llvm.loop !64

._crit_edge511:                                   ; preds = %.thread485, %407, %238
  %spec.select477 = phi i32 [ %.11, %238 ], [ %412, %407 ], [ %.48, %.thread485 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #11
  br label %581

581:                                              ; preds = %103, %110, %._crit_edge511, %83
  %.9 = phi i32 [ %85, %83 ], [ %spec.select477, %._crit_edge511 ], [ %111, %110 ], [ %.4368, %103 ]
  call void @llvm.lifetime.end.p0(i64 510, ptr nonnull %3) #11
  ret i32 %.9
}

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i64 @pgno2bytes(ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_shadowed(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @__Wpedantic_format_voidptr(ptr noundef) local_unnamed_addr #3

; Function Attrs: noreturn
declare void @mdbx_assert_fail(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i64 @page_space(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i64 @page_numkeys(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_modifable(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_branch(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nosync nounwind willreturn memory(none) uwtable
declare hidden i64 @keysize_max(i64 noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_dupfix_leaf(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nounwind willreturn memory(argmem: readwrite) uwtable
declare hidden void @value_clc(ptr dead_on_unwind noalias writable sret(%struct.clc) align 8, ptr noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden ptr @page_dupfix_ptr(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare ptr @mdbx_dump_val(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #9

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden ptr @page_node(ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i64 @node_ks(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden ptr @node_key(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i1 @is_leaf(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i32 @node_pgno(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden zeroext i8 @node_flags(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i64 @node_ds(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden ptr @node_data(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nosync nounwind willreturn memory(none) uwtable
declare hidden i64 @node_size_len(i64 noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local { ptr, i32 } @page_get_large(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #10

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i32 @node_largedata_pgno(ptr noalias noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare hidden i32 @largechunk_npages(ptr noundef, i64 noundef) local_unnamed_addr #2

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

!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 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!10 = !{!11, !12, i64 16}
!11 = !{!"MDBX_cursor", !6, i64 0, !7, i64 4, !7, i64 6, !7, i64 7, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !7, i64 48, !7, i64 304, !12, i64 368, !12, i64 376}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !12, i64 80}
!14 = !{!"MDBX_txn", !6, i64 0, !6, i64 4, !15, i64 8, !15, i64 16, !12, i64 24, !12, i64 32, !16, i64 40, !15, i64 64, !15, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !18, i64 128, !12, i64 160, !7, i64 168}
!15 = !{!"long", !7, i64 0}
!16 = !{!"geo", !17, i64 0, !17, i64 2, !6, i64 4, !6, i64 8, !7, i64 12, !7, i64 16}
!17 = !{!"short", !7, i64 0}
!18 = !{!"MDBX_canary", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!19 = !{!7, !7, i64 0}
!20 = !{!17, !17, i64 0}
!21 = !{!22, !6, i64 8}
!22 = !{!"MDBX_env", !7, i64 0, !6, i64 4, !6, i64 8, !23, i64 16, !6, i64 56, !6, i64 60, !23, i64 64, !12, i64 104, !17, i64 112, !17, i64 114, !17, i64 116, !17, i64 118, !17, i64 120, !17, i64 122, !7, i64 124, !7, i64 128, !7, i64 129, !17, i64 130, !6, i64 132, !6, i64 136, !6, i64 140, !6, i64 144, !24, i64 152, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !6, i64 224, !6, i64 228, !6, i64 232, !12, i64 240, !12, i64 248, !15, i64 256, !25, i64 264, !28, i64 320, !26, i64 360, !12, i64 368, !12, i64 376, !12, i64 384, !29, i64 392, !7, i64 400, !6, i64 440, !6, i64 444, !12, i64 448, !30, i64 456, !7, i64 496, !7, i64 536}
!23 = !{!"osal_mmap", !7, i64 0, !6, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!24 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!25 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !15, i64 16, !7, i64 24, !7, i64 25, !7, i64 26, !7, i64 27, !6, i64 28, !6, i64 32, !26, i64 36, !26, i64 37, !26, i64 38, !27, i64 40, !7, i64 48}
!26 = !{!"_Bool", !7, i64 0}
!27 = !{!"", !17, i64 0, !17, i64 2, !17, i64 4, !17, i64 6}
!28 = !{!"", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!29 = !{!"", !15, i64 0}
!30 = !{!"osal_ioring", !6, i64 0, !6, i64 4, !6, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!31 = !{!22, !6, i64 4}
!32 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!33 = !{!34, !7, i64 25}
!34 = !{!"libmdbx_globals", !7, i64 0, !6, i64 16, !6, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !26, i64 27, !6, i64 28, !7, i64 32, !7, i64 40, !15, i64 80, !12, i64 88}
!35 = !{!11, !7, i64 6}
!36 = !{!11, !12, i64 24}
!37 = !{!38, !17, i64 0}
!38 = !{!"tree", !17, i64 0, !17, i64 2, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !15, i64 24, !15, i64 32, !15, i64 40}
!39 = !{!38, !17, i64 2}
!40 = !{!"branch_weights", i32 4000000, i32 4001}
!41 = !{!38, !15, i64 32}
!42 = !{!"branch_weights", i32 4001, i32 4000000}
!43 = !{!38, !6, i64 4}
!44 = !{!11, !12, i64 32}
!45 = !{!46, !15, i64 8}
!46 = !{!"clc2", !47, i64 0, !47, i64 24}
!47 = !{!"clc", !12, i64 0, !15, i64 8, !15, i64 16}
!48 = !{!46, !15, i64 16}
!49 = !{!50, !12, i64 0}
!50 = !{!"iovec", !12, i64 0, !15, i64 8}
!51 = !{!50, !15, i64 8}
!52 = !{!46, !12, i64 0}
!53 = !{i64 0, i64 8, !54, i64 8, i64 8, !55}
!54 = !{!12, !12, i64 0}
!55 = !{!15, !15, i64 0}
!56 = !{!"branch_weights", i32 4001, i32 1}
!57 = !{!47, !15, i64 8}
!58 = !{!22, !17, i64 112}
!59 = !{!14, !12, i64 88}
!60 = !{!47, !15, i64 16}
!61 = !{!47, !12, i64 0}
!62 = distinct !{!62, !63}
!63 = !{!"llvm.loop.mustprogress"}
!64 = distinct !{!64, !63}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LowerExpectIntrinsicPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass