; LLVM IR from erthink/libmdbx :: src (gc-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.8 }
%struct.anon.8 = 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.page_get_result = type { ptr, i32 }
%struct.monotime_cache = type { i64, i32 }
%struct.iovec = type { ptr, i64 }
%struct.meta_ptr = type { i64, %union.anon.21, i64 }
%union.anon.21 = type { ptr }
%struct.meta = type { [2 x i32], %union.anon.22, i16, i8, i8, %struct.geo, %union.anon.23, %struct.MDBX_canary, %union.anon.26, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon.22 = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon, %union.anon.0 }
%union.anon = type { i32 }
%union.anon.0 = type { i32 }
%union.anon.23 = type { %struct.anon.24 }
%struct.anon.24 = type { %struct.tree, %struct.tree }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.26 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.MDBX_cursor = type { i32, %union.anon.6, i8, i8, ptr, ptr, ptr, ptr, ptr, [32 x ptr], [32 x i16], ptr, ptr }
%union.anon.6 = 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.1 }
%union.anon.1 = type { %struct.anon.2 }
%struct.anon.2 = type { %struct.troika, ptr, %struct.anon.3, i8, i32, i32, i64, ptr, ptr, ptr, i64, %union.anon.4 }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.anon.3 = type { %struct.MDBX_rkl, i64, %struct.MDBX_rkl }
%struct.MDBX_rkl = type { i64, i64, i32, i32, ptr, [12 x i64] }
%union.anon.4 = type { %struct.anon.5 }
%struct.anon.5 = 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.11, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.12, %struct.anon.16, i8, ptr, ptr, ptr, %struct.anon.17, %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.10, i32, i64, i64, i64 }
%union.anon.10 = type { ptr }
%struct.anon.11 = type { ptr, ptr, ptr, ptr }
%struct.anon.12 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.13, %union.anon.14 }
%struct.anon.13 = type { i16, i16, i16, i16 }
%union.anon.14 = type { i32 }
%struct.anon.16 = type { i64, i64, i64, i64, i64 }
%struct.anon.17 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }
%struct.shared_lck = type { i64, i32, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, [2 x %union.mdbx_atomic_uint32_t], [16 x i8], %struct.pgops, [16 x i8], %union.pthread_mutex_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, i32, %struct.anon.20, %union.pthread_mutex_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, [16 x i8], [0 x %struct.reader_slot] }
%struct.pgops = type { %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %struct.anon.18 }
%struct.anon.18 = type { %struct.gc_prof_stat, %struct.gc_prof_stat, i32, i32, i32, i32, i32 }
%struct.gc_prof_stat = type { i64, i64, i32, i32, i32, i32, %struct.anon.19 }
%struct.anon.19 = type { i64, i64, i32 }
%struct.anon.20 = type { [4 x i32], [4 x i64] }
%struct.reader_slot = type { %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t }
%struct.anon.7 = type { i8, i8 }

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

; Function Attrs: hot nounwind uwtable
declare hidden i32 @repnl_get_sequence(ptr noundef, i64 noundef, i8 noundef zeroext) #0

; Function Attrs: nounwind uwtable
define dso_local { ptr, i32 } @gc_alloc_ex(ptr noundef %0, i64 noundef %1, i8 noundef zeroext %2) #1 {
  %4 = alloca %struct.page_get_result, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i8, align 1
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca %struct.monotime_cache, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca %struct.iovec, align 8
  %20 = alloca %struct.iovec, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca %struct.meta_ptr, align 8
  %26 = alloca %struct.meta_ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca %struct.meta_ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca %struct.meta, align 4
  %33 = alloca %struct.meta_ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca %struct.page_get_result, align 8
  %37 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i64 %1, ptr %6, align 8, !tbaa !9
  store i8 %2, ptr %7, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #12
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.MDBX_cursor, ptr %38, i32 0, i32 5
  %40 = load ptr, ptr %39, align 8, !tbaa !12
  store ptr %40, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #12
  %41 = load ptr, ptr %8, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.MDBX_txn, ptr %41, i32 0, i32 9
  %43 = load ptr, ptr %42, align 8, !tbaa !15
  store ptr %43, ptr %9, align 8, !tbaa !5
  br label %44

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

55:                                               ; preds = %44
  br label %56

56:                                               ; preds = %55
  %57 = load i64, ptr %6, align 8, !tbaa !9
  %58 = icmp ugt i64 %57, 0
  br i1 %58, label %64, label %59

59:                                               ; preds = %56
  %60 = load i8, ptr %7, align 1, !tbaa !11
  %61 = zext i8 %60 to i32
  %62 = and i32 %61, 2
  %63 = icmp ne i32 %62, 0
  br label %64

64:                                               ; preds = %59, %56
  %65 = phi i1 [ true, %56 ], [ %63, %59 ]
  %66 = xor i1 %65, true
  %67 = xor i1 %66, true
  %68 = xor i1 %67, true
  %69 = zext i1 %68 to i32
  %70 = sext i32 %69 to i64
  %71 = call i64 @llvm.expect.i64(i64 %70, i64 0)
  %72 = icmp ne i64 %71, 0
  br i1 %72, label %73, label %75

73:                                               ; preds = %64
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %74, ptr noundef @.str, ptr noundef @__func__.gc_alloc_ex, i32 noundef 851) #13
  unreachable

75:                                               ; preds = %64
  br label %76

76:                                               ; preds = %75
  br label %77

77:                                               ; preds = %76
  br label %78

78:                                               ; preds = %77, %44
  br label %79

79:                                               ; preds = %78
  br label %80

80:                                               ; preds = %79
  br label %81

81:                                               ; preds = %80
  %82 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %83 = zext i8 %82 to i32
  %84 = and i32 %83, 1
  %85 = icmp ne i32 %84, 0
  %86 = xor i1 %85, true
  %87 = xor i1 %86, true
  %88 = zext i1 %87 to i32
  %89 = sext i32 %88 to i64
  %90 = call i64 @llvm.expect.i64(i64 %89, i64 1)
  %91 = icmp ne i64 %90, 0
  br i1 %91, label %92, label %117

92:                                               ; preds = %81
  br label %93

93:                                               ; preds = %92
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.MDBX_txn, ptr %94, i32 0, i32 17
  %96 = getelementptr inbounds %struct.anon.2, ptr %95, i32 0, i32 1
  %97 = load ptr, ptr %96, align 8, !tbaa !11
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.MDBX_txn, ptr %98, i32 0, i32 6
  %100 = getelementptr inbounds %struct.geo, ptr %99, i32 0, i32 5
  %101 = load i32, ptr %100, align 8, !tbaa !11
  %102 = sub i32 %101, 1
  %103 = zext i32 %102 to i64
  %104 = call zeroext i1 @pnl_check_allocated(ptr noundef %97, i64 noundef %103)
  %105 = xor i1 %104, true
  %106 = xor i1 %105, true
  %107 = xor i1 %106, true
  %108 = zext i1 %107 to i32
  %109 = sext i32 %108 to i64
  %110 = call i64 @llvm.expect.i64(i64 %109, i64 0)
  %111 = icmp ne i64 %110, 0
  br i1 %111, label %112, label %114

112:                                              ; preds = %93
  %113 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %113, ptr noundef @.str.1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 852) #13
  unreachable

114:                                              ; preds = %93
  br label %115

115:                                              ; preds = %114
  br label %116

116:                                              ; preds = %115
  br label %117

117:                                              ; preds = %116, %81
  br label %118

118:                                              ; preds = %117
  br label %119

119:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #12
  %120 = load i64, ptr %6, align 8, !tbaa !9
  %121 = icmp ugt i64 %120, 1
  br i1 %121, label %122, label %130

122:                                              ; preds = %119
  %123 = load ptr, ptr %9, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.MDBX_env, ptr %123, i32 0, i32 34
  %125 = getelementptr inbounds %struct.anon.12, ptr %124, i32 0, i32 4
  %126 = load i64, ptr %125, align 8, !tbaa !23
  %127 = icmp ne i64 %126, 0
  br i1 %127, label %128, label %130

128:                                              ; preds = %122
  %129 = call i64 @osal_monotime()
  br label %131

130:                                              ; preds = %122, %119
  br label %131

131:                                              ; preds = %130, %128
  %132 = phi i64 [ %129, %128 ], [ 0, %130 ]
  store i64 %132, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #12
  %133 = getelementptr inbounds %struct.monotime_cache, ptr %12, i32 0, i32 1
  store i32 1, ptr %133, align 8, !tbaa !32
  %134 = load i64, ptr %11, align 8, !tbaa !9
  %135 = getelementptr inbounds %struct.monotime_cache, ptr %12, i32 0, i32 0
  store i64 %134, ptr %135, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  store i32 0, ptr %13, align 4, !tbaa !35
  %136 = load i64, ptr %6, align 8, !tbaa !9
  %137 = icmp ugt i64 %136, 1
  br i1 %137, label %138, label %224

138:                                              ; preds = %131
  %139 = load ptr, ptr %8, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.MDBX_txn, ptr %139, i32 0, i32 17
  %141 = getelementptr inbounds %struct.anon.2, ptr %140, i32 0, i32 1
  %142 = load ptr, ptr %141, align 8, !tbaa !11
  %143 = getelementptr inbounds i32, ptr %142, i64 0
  %144 = load i32, ptr %143, align 4, !tbaa !35
  %145 = zext i32 %144 to i64
  %146 = load i64, ptr %6, align 8, !tbaa !9
  %147 = icmp uge i64 %145, %146
  br i1 %147, label %148, label %223

148:                                              ; preds = %138
  br label %149

149:                                              ; preds = %148
  %150 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %151 = zext i8 %150 to i32
  %152 = and i32 %151, 1
  %153 = icmp ne i32 %152, 0
  %154 = xor i1 %153, true
  %155 = xor i1 %154, true
  %156 = zext i1 %155 to i32
  %157 = sext i32 %156 to i64
  %158 = call i64 @llvm.expect.i64(i64 %157, i64 1)
  %159 = icmp ne i64 %158, 0
  br i1 %159, label %160, label %206

160:                                              ; preds = %149
  br label %161

161:                                              ; preds = %160
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.MDBX_txn, ptr %162, i32 0, i32 17
  %164 = getelementptr inbounds %struct.anon.2, ptr %163, i32 0, i32 1
  %165 = load ptr, ptr %164, align 8, !tbaa !11
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.MDBX_txn, ptr %166, i32 0, i32 17
  %168 = getelementptr inbounds %struct.anon.2, ptr %167, i32 0, i32 1
  %169 = load ptr, ptr %168, align 8, !tbaa !11
  %170 = getelementptr inbounds i32, ptr %169, i64 0
  %171 = load i32, ptr %170, align 4, !tbaa !35
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds i32, ptr %165, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !35
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.MDBX_txn, ptr %175, i32 0, i32 6
  %177 = getelementptr inbounds %struct.geo, ptr %176, i32 0, i32 5
  %178 = load i32, ptr %177, align 8, !tbaa !11
  %179 = icmp ult i32 %174, %178
  br i1 %179, label %180, label %192

180:                                              ; preds = %161
  %181 = load ptr, ptr %8, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.MDBX_txn, ptr %181, i32 0, i32 17
  %183 = getelementptr inbounds %struct.anon.2, ptr %182, i32 0, i32 1
  %184 = load ptr, ptr %183, align 8, !tbaa !11
  %185 = getelementptr inbounds i32, ptr %184, i64 1
  %186 = load i32, ptr %185, align 4, !tbaa !35
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.MDBX_txn, ptr %187, i32 0, i32 6
  %189 = getelementptr inbounds %struct.geo, ptr %188, i32 0, i32 5
  %190 = load i32, ptr %189, align 8, !tbaa !11
  %191 = icmp ult i32 %186, %190
  br label %192

192:                                              ; preds = %180, %161
  %193 = phi i1 [ false, %161 ], [ %191, %180 ]
  %194 = xor i1 %193, true
  %195 = xor i1 %194, true
  %196 = xor i1 %195, true
  %197 = zext i1 %196 to i32
  %198 = sext i32 %197 to i64
  %199 = call i64 @llvm.expect.i64(i64 %198, i64 0)
  %200 = icmp ne i64 %199, 0
  br i1 %200, label %201, label %203

201:                                              ; preds = %192
  %202 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %202, ptr noundef @.str.2, ptr noundef @__func__.gc_alloc_ex, i32 noundef 869) #13
  unreachable

203:                                              ; preds = %192
  br label %204

204:                                              ; preds = %203
  br label %205

205:                                              ; preds = %204
  br label %206

206:                                              ; preds = %205, %149
  br label %207

207:                                              ; preds = %206
  br label %208

208:                                              ; preds = %207
  %209 = load ptr, ptr %8, align 8, !tbaa !5
  %210 = load i64, ptr %6, align 8, !tbaa !9
  %211 = load i8, ptr %7, align 1, !tbaa !11
  %212 = call i32 @repnl_get_sequence(ptr noundef %209, i64 noundef %210, i8 noundef zeroext %211) #14
  store i32 %212, ptr %13, align 4, !tbaa !35
  %213 = load i32, ptr %13, align 4, !tbaa !35
  %214 = icmp ne i32 %213, 0
  %215 = xor i1 %214, true
  %216 = xor i1 %215, true
  %217 = zext i1 %216 to i32
  %218 = sext i32 %217 to i64
  %219 = call i64 @llvm.expect.i64(i64 %218, i64 1)
  %220 = icmp ne i64 %219, 0
  br i1 %220, label %221, label %222

221:                                              ; preds = %208
  br label %2613

222:                                              ; preds = %208
  br label %223

223:                                              ; preds = %222, %138
  br label %271

224:                                              ; preds = %131
  br label %225

225:                                              ; preds = %224
  %226 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %227 = zext i8 %226 to i32
  %228 = and i32 %227, 1
  %229 = icmp ne i32 %228, 0
  %230 = xor i1 %229, true
  %231 = xor i1 %230, true
  %232 = zext i1 %231 to i32
  %233 = sext i32 %232 to i64
  %234 = call i64 @llvm.expect.i64(i64 %233, i64 1)
  %235 = icmp ne i64 %234, 0
  br i1 %235, label %236, label %268

236:                                              ; preds = %225
  br label %237

237:                                              ; preds = %236
  %238 = load i64, ptr %6, align 8, !tbaa !9
  %239 = icmp eq i64 %238, 0
  br i1 %239, label %254, label %240

240:                                              ; preds = %237
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.MDBX_txn, ptr %241, i32 0, i32 17
  %243 = getelementptr inbounds %struct.anon.2, ptr %242, i32 0, i32 1
  %244 = load ptr, ptr %243, align 8, !tbaa !11
  %245 = getelementptr inbounds i32, ptr %244, i64 0
  %246 = load i32, ptr %245, align 4, !tbaa !35
  %247 = zext i32 %246 to i64
  %248 = icmp eq i64 %247, 0
  br i1 %248, label %254, label %249

249:                                              ; preds = %240
  %250 = load i8, ptr %7, align 1, !tbaa !11
  %251 = zext i8 %250 to i32
  %252 = and i32 %251, 2
  %253 = icmp ne i32 %252, 0
  br label %254

254:                                              ; preds = %249, %240, %237
  %255 = phi i1 [ true, %240 ], [ true, %237 ], [ %253, %249 ]
  %256 = xor i1 %255, true
  %257 = xor i1 %256, true
  %258 = xor i1 %257, true
  %259 = zext i1 %258 to i32
  %260 = sext i32 %259 to i64
  %261 = call i64 @llvm.expect.i64(i64 %260, i64 0)
  %262 = icmp ne i64 %261, 0
  br i1 %262, label %263, label %265

263:                                              ; preds = %254
  %264 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %264, ptr noundef @.str.3, ptr noundef @__func__.gc_alloc_ex, i32 noundef 875) #13
  unreachable

265:                                              ; preds = %254
  br label %266

266:                                              ; preds = %265
  br label %267

267:                                              ; preds = %266
  br label %268

268:                                              ; preds = %267, %225
  br label %269

269:                                              ; preds = %268
  br label %270

270:                                              ; preds = %269
  br label %271

271:                                              ; preds = %270, %223
  %272 = load ptr, ptr %8, align 8, !tbaa !5
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = load i8, ptr %7, align 1, !tbaa !11
  %275 = call zeroext i1 @is_reclaimable(ptr noundef %272, ptr noundef %273, i8 noundef zeroext %274)
  %276 = xor i1 %275, true
  %277 = xor i1 %276, true
  %278 = xor i1 %277, true
  %279 = zext i1 %278 to i32
  %280 = sext i32 %279 to i64
  %281 = call i64 @llvm.expect.i64(i64 %280, i64 0)
  %282 = icmp ne i64 %281, 0
  br i1 %282, label %283, label %322

283:                                              ; preds = %271
  br label %284

284:                                              ; preds = %283
  %285 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %286 = zext i8 %285 to i32
  %287 = and i32 %286, 1
  %288 = icmp ne i32 %287, 0
  %289 = xor i1 %288, true
  %290 = xor i1 %289, true
  %291 = zext i1 %290 to i32
  %292 = sext i32 %291 to i64
  %293 = call i64 @llvm.expect.i64(i64 %292, i64 1)
  %294 = icmp ne i64 %293, 0
  br i1 %294, label %295, label %319

295:                                              ; preds = %284
  br label %296

296:                                              ; preds = %295
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.MDBX_txn, ptr %297, i32 0, i32 1
  %299 = load i32, ptr %298, align 4, !tbaa !36
  %300 = and i32 %299, 128
  %301 = icmp ne i32 %300, 0
  br i1 %301, label %305, label %302

302:                                              ; preds = %296
  %303 = load i64, ptr %6, align 8, !tbaa !9
  %304 = icmp ugt i64 %303, 1
  br label %305

305:                                              ; preds = %302, %296
  %306 = phi i1 [ true, %296 ], [ %304, %302 ]
  %307 = xor i1 %306, true
  %308 = xor i1 %307, true
  %309 = xor i1 %308, true
  %310 = zext i1 %309 to i32
  %311 = sext i32 %310 to i64
  %312 = call i64 @llvm.expect.i64(i64 %311, i64 0)
  %313 = icmp ne i64 %312, 0
  br i1 %313, label %314, label %316

314:                                              ; preds = %305
  %315 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %315, ptr noundef @.str.4, ptr noundef @__func__.gc_alloc_ex, i32 noundef 881) #13
  unreachable

316:                                              ; preds = %305
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318, %284
  br label %320

320:                                              ; preds = %319
  br label %321

321:                                              ; preds = %320
  br label %2325

322:                                              ; preds = %271
  br label %323

323:                                              ; preds = %322
  %324 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %325 = zext i8 %324 to i32
  %326 = and i32 %325, 1
  %327 = icmp ne i32 %326, 0
  %328 = xor i1 %327, true
  %329 = xor i1 %328, true
  %330 = zext i1 %329 to i32
  %331 = sext i32 %330 to i64
  %332 = call i64 @llvm.expect.i64(i64 %331, i64 1)
  %333 = icmp ne i64 %332, 0
  br i1 %333, label %334, label %352

334:                                              ; preds = %323
  br label %335

335:                                              ; preds = %334
  %336 = load i8, ptr %7, align 1, !tbaa !11
  %337 = zext i8 %336 to i32
  %338 = and i32 %337, 28
  %339 = icmp eq i32 %338, 0
  %340 = xor i1 %339, true
  %341 = xor i1 %340, true
  %342 = xor i1 %341, true
  %343 = zext i1 %342 to i32
  %344 = sext i32 %343 to i64
  %345 = call i64 @llvm.expect.i64(i64 %344, i64 0)
  %346 = icmp ne i64 %345, 0
  br i1 %346, label %347, label %349

347:                                              ; preds = %335
  %348 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %348, ptr noundef @.str.5, ptr noundef @__func__.gc_alloc_ex, i32 noundef 885) #13
  unreachable

349:                                              ; preds = %335
  br label %350

350:                                              ; preds = %349
  br label %351

351:                                              ; preds = %350
  br label %352

352:                                              ; preds = %351, %323
  br label %353

353:                                              ; preds = %352
  br label %354

354:                                              ; preds = %353
  %355 = load ptr, ptr %9, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.MDBX_env, ptr %355, i32 0, i32 1
  %357 = load i32, ptr %356, align 4, !tbaa !37
  %358 = and i32 %357, 67108864
  %359 = icmp ne i32 %358, 0
  %360 = zext i1 %359 to i64
  %361 = select i1 %359, i32 16, i32 0
  %362 = load i8, ptr %7, align 1, !tbaa !11
  %363 = zext i8 %362 to i32
  %364 = add nsw i32 %363, %361
  %365 = trunc i32 %364 to i8
  store i8 %365, ptr %7, align 1, !tbaa !11
  %366 = load i64, ptr %6, align 8, !tbaa !9
  %367 = icmp ugt i64 %366, 0
  br i1 %367, label %368, label %395

368:                                              ; preds = %354
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.MDBX_txn, ptr %369, i32 0, i32 10
  %371 = load ptr, ptr %370, align 8, !tbaa !38
  %372 = getelementptr inbounds %struct.tree, ptr %371, i64 0
  %373 = getelementptr inbounds %struct.tree, ptr %372, i32 0, i32 4
  %374 = load i32, ptr %373, align 4, !tbaa !39
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %395

376:                                              ; preds = %368
  %377 = load ptr, ptr %8, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.MDBX_txn, ptr %377, i32 0, i32 17
  %379 = getelementptr inbounds %struct.anon.2, ptr %378, i32 0, i32 1
  %380 = load ptr, ptr %379, align 8, !tbaa !11
  %381 = getelementptr inbounds i32, ptr %380, i64 0
  %382 = load i32, ptr %381, align 4, !tbaa !35
  %383 = zext i32 %382 to i64
  %384 = load ptr, ptr %9, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.MDBX_env, ptr %384, i32 0, i32 28
  %386 = load i32, ptr %385, align 8, !tbaa !41
  %387 = udiv i32 %386, 2
  %388 = zext i32 %387 to i64
  %389 = icmp ult i64 %383, %388
  br i1 %389, label %390, label %395

390:                                              ; preds = %376
  %391 = load i8, ptr %7, align 1, !tbaa !11
  %392 = zext i8 %391 to i32
  %393 = add nsw i32 %392, 4
  %394 = trunc i32 %393 to i8
  store i8 %394, ptr %7, align 1, !tbaa !11
  br label %395

395:                                              ; preds = %390, %376, %368, %354
  %396 = load ptr, ptr %8, align 8, !tbaa !5
  %397 = call ptr @txn_gc_cursor(ptr noundef %396)
  store ptr %397, ptr %14, align 8, !tbaa !5
  br label %398

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

409:                                              ; preds = %398
  br label %410

410:                                              ; preds = %409
  %411 = load ptr, ptr %5, align 8, !tbaa !5
  %412 = load ptr, ptr %14, align 8, !tbaa !5
  %413 = icmp ne ptr %411, %412
  br i1 %413, label %414, label %420

414:                                              ; preds = %410
  %415 = load ptr, ptr %14, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.MDBX_cursor, ptr %415, i32 0, i32 11
  %417 = load ptr, ptr %416, align 8, !tbaa !42
  %418 = load ptr, ptr %14, align 8, !tbaa !5
  %419 = icmp eq ptr %417, %418
  br label %420

420:                                              ; preds = %414, %410
  %421 = phi i1 [ false, %410 ], [ %419, %414 ]
  %422 = xor i1 %421, true
  %423 = xor i1 %422, true
  %424 = xor i1 %423, true
  %425 = zext i1 %424 to i32
  %426 = sext i32 %425 to i64
  %427 = call i64 @llvm.expect.i64(i64 %426, i64 0)
  %428 = icmp ne i64 %427, 0
  br i1 %428, label %429, label %431

429:                                              ; preds = %420
  %430 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %430, ptr noundef @.str.6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 894) #13
  unreachable

431:                                              ; preds = %420
  br label %432

432:                                              ; preds = %431
  br label %433

433:                                              ; preds = %432
  br label %434

434:                                              ; preds = %433, %398
  br label %435

435:                                              ; preds = %434
  br label %436

436:                                              ; preds = %435
  %437 = load ptr, ptr %8, align 8, !tbaa !5
  %438 = load ptr, ptr %14, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.MDBX_cursor, ptr %438, i32 0, i32 5
  store ptr %437, ptr %439, align 8, !tbaa !12
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.MDBX_txn, ptr %440, i32 0, i32 12
  %442 = load ptr, ptr %441, align 8, !tbaa !43
  %443 = load ptr, ptr %14, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.MDBX_cursor, ptr %443, i32 0, i32 4
  store ptr %442, ptr %444, align 8, !tbaa !44
  %445 = load ptr, ptr %14, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.MDBX_cursor, ptr %445, i32 0, i32 1
  store i16 -44, ptr %446, align 4, !tbaa !11
  %447 = load ptr, ptr %9, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.MDBX_env, ptr %447, i32 0, i32 36
  %449 = load i8, ptr %448, align 8, !tbaa !45, !range !46, !noundef !47
  %450 = trunc i8 %449 to i1
  br i1 %450, label %457, label %451

451:                                              ; preds = %436
  %452 = load ptr, ptr %9, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.MDBX_env, ptr %452, i32 0, i32 34
  %454 = getelementptr inbounds %struct.anon.12, ptr %453, i32 0, i32 11
  %455 = load i8, ptr %454, align 4, !tbaa !48, !range !46, !noundef !47
  %456 = trunc i8 %455 to i1
  br label %457

457:                                              ; preds = %451, %436
  %458 = phi i1 [ false, %436 ], [ %456, %451 ]
  %459 = load ptr, ptr %8, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.MDBX_txn, ptr %459, i32 0, i32 17
  %461 = getelementptr inbounds %struct.anon.2, ptr %460, i32 0, i32 3
  %462 = zext i1 %458 to i8
  store i8 %462, ptr %461, align 8, !tbaa !11
  %463 = load ptr, ptr %8, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.MDBX_txn, ptr %463, i32 0, i32 17
  %465 = getelementptr inbounds %struct.anon.2, ptr %464, i32 0, i32 3
  %466 = load i8, ptr %465, align 8, !tbaa !11, !range !46, !noundef !47
  %467 = trunc i8 %466 to i1
  br i1 %467, label %468, label %512

468:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #12
  %469 = load ptr, ptr %9, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.MDBX_env, ptr %469, i32 0, i32 7
  %471 = load ptr, ptr %470, align 8, !tbaa !49
  %472 = getelementptr inbounds %struct.shared_lck, ptr %471, i32 0, i32 17
  %473 = load i32, ptr %472, align 4, !tbaa !35
  %474 = and i32 %473, 1
  %475 = icmp ne i32 %474, 0
  %476 = zext i1 %475 to i8
  store i8 %476, ptr %15, align 1, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #12
  %477 = load ptr, ptr %9, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.MDBX_env, ptr %477, i32 0, i32 7
  %479 = load ptr, ptr %478, align 8, !tbaa !49
  %480 = getelementptr inbounds %struct.shared_lck, ptr %479, i32 0, i32 17
  %481 = load i32, ptr %480, align 4, !tbaa !35
  %482 = lshr i32 %481, 1
  store i32 %482, ptr %16, align 4, !tbaa !35
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.MDBX_txn, ptr %483, i32 0, i32 10
  %485 = load ptr, ptr %484, align 8, !tbaa !38
  %486 = getelementptr inbounds %struct.tree, ptr %485, i64 0
  %487 = getelementptr inbounds %struct.tree, ptr %486, i32 0, i32 4
  %488 = load i32, ptr %487, align 4, !tbaa !39
  %489 = icmp eq i32 %488, 0
  br i1 %489, label %490, label %496

490:                                              ; preds = %468
  %491 = load ptr, ptr %8, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.MDBX_txn, ptr %491, i32 0, i32 6
  %493 = getelementptr inbounds %struct.geo, ptr %492, i32 0, i32 4
  %494 = load i32, ptr %493, align 4, !tbaa !11
  %495 = icmp ult i32 %494, 1234
  br i1 %495, label %507, label %496

496:                                              ; preds = %490, %468
  %497 = load i8, ptr %15, align 1, !tbaa !50, !range !46, !noundef !47
  %498 = trunc i8 %497 to i1
  br i1 %498, label %499, label %511

499:                                              ; preds = %496
  %500 = load i32, ptr %13, align 4, !tbaa !35
  %501 = zext i32 %500 to i64
  %502 = load i64, ptr %6, align 8, !tbaa !9
  %503 = add i64 %501, %502
  %504 = load i32, ptr %16, align 4, !tbaa !35
  %505 = zext i32 %504 to i64
  %506 = icmp ult i64 %503, %505
  br i1 %506, label %507, label %511

507:                                              ; preds = %499, %490
  %508 = load ptr, ptr %8, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.MDBX_txn, ptr %508, i32 0, i32 17
  %510 = getelementptr inbounds %struct.anon.2, ptr %509, i32 0, i32 3
  store i8 0, ptr %510, align 8, !tbaa !11
  br label %511

511:                                              ; preds = %507, %499, %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #12
  br label %512

512:                                              ; preds = %511, %457
  br label %513

513:                                              ; preds = %2323, %2238, %512
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = call zeroext i1 @txn_gc_detent(ptr noundef %514)
  br label %516

516:                                              ; preds = %2257, %513
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.MDBX_txn, ptr %517, i32 0, i32 9
  %519 = load ptr, ptr %518, align 8, !tbaa !15
  %520 = getelementptr inbounds %struct.MDBX_env, ptr %519, i32 0, i32 40
  %521 = getelementptr inbounds %struct.anon.17, ptr %520, i32 0, i32 0
  %522 = load i64, ptr %521, align 8, !tbaa !51
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.MDBX_txn, ptr %523, i32 0, i32 7
  %525 = load i64, ptr %524, align 8, !tbaa !52
  %526 = icmp uge i64 %522, %525
  %527 = xor i1 %526, true
  %528 = xor i1 %527, true
  %529 = zext i1 %528 to i32
  %530 = sext i32 %529 to i64
  %531 = call i64 @llvm.expect.i64(i64 %530, i64 0)
  %532 = icmp ne i64 %531, 0
  br i1 %532, label %533, label %544

533:                                              ; preds = %516
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.MDBX_txn, ptr %534, i32 0, i32 9
  %536 = load ptr, ptr %535, align 8, !tbaa !15
  %537 = getelementptr inbounds %struct.MDBX_env, ptr %536, i32 0, i32 40
  %538 = getelementptr inbounds %struct.anon.17, ptr %537, i32 0, i32 0
  %539 = load i64, ptr %538, align 8, !tbaa !51
  %540 = load ptr, ptr %8, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.MDBX_txn, ptr %540, i32 0, i32 7
  %542 = load i64, ptr %541, align 8, !tbaa !52
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 0, ptr noundef @__func__.gc_alloc_ex, i32 noundef 920, ptr noundef @.str.7, i64 noundef %539, i64 noundef %542)
  %543 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30779, ptr %543, align 8, !tbaa !53
  br label %2824

544:                                              ; preds = %516
  store i64 0, ptr %17, align 8, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !35
  %545 = load i8, ptr %7, align 1, !tbaa !11
  %546 = zext i8 %545 to i32
  %547 = and i32 %546, 16
  %548 = icmp ne i32 %547, 0
  br i1 %548, label %549, label %556

549:                                              ; preds = %544
  %550 = load ptr, ptr %8, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.MDBX_txn, ptr %550, i32 0, i32 9
  %552 = load ptr, ptr %551, align 8, !tbaa !15
  %553 = getelementptr inbounds %struct.MDBX_env, ptr %552, i32 0, i32 40
  %554 = getelementptr inbounds %struct.anon.17, ptr %553, i32 0, i32 0
  %555 = load i64, ptr %554, align 8, !tbaa !51
  store i64 %555, ptr %17, align 8, !tbaa !9
  store i32 17, ptr %18, align 4, !tbaa !35
  br label %578

556:                                              ; preds = %544
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.MDBX_txn, ptr %557, i32 0, i32 17
  %559 = getelementptr inbounds %struct.anon.2, ptr %558, i32 0, i32 2
  %560 = getelementptr inbounds %struct.anon.3, ptr %559, i32 0, i32 0
  %561 = call i64 @rkl_highest(ptr noundef %560) #15
  store i64 %561, ptr %17, align 8, !tbaa !9
  %562 = load i64, ptr %17, align 8, !tbaa !9
  %563 = icmp ne i64 %562, 0
  br i1 %563, label %564, label %577

564:                                              ; preds = %556
  %565 = load i64, ptr %17, align 8, !tbaa !9
  %566 = add i64 %565, 1
  store i64 %566, ptr %17, align 8, !tbaa !9
  store i32 17, ptr %18, align 4, !tbaa !35
  %567 = load i64, ptr %17, align 8, !tbaa !9
  %568 = load ptr, ptr %8, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.MDBX_txn, ptr %568, i32 0, i32 9
  %570 = load ptr, ptr %569, align 8, !tbaa !15
  %571 = getelementptr inbounds %struct.MDBX_env, ptr %570, i32 0, i32 40
  %572 = getelementptr inbounds %struct.anon.17, ptr %571, i32 0, i32 0
  %573 = load i64, ptr %572, align 8, !tbaa !51
  %574 = icmp uge i64 %567, %573
  br i1 %574, label %575, label %576

575:                                              ; preds = %564
  br label %1879

576:                                              ; preds = %564
  br label %577

577:                                              ; preds = %576, %556
  br label %578

578:                                              ; preds = %577, %549
  br label %579

579:                                              ; preds = %1877, %1614, %685, %663, %614, %578
  %580 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 0
  store ptr %17, ptr %580, align 8, !tbaa !55
  %581 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 1
  store i64 8, ptr %581, align 8, !tbaa !57
  %582 = load ptr, ptr %14, align 8, !tbaa !5
  %583 = load i32, ptr %18, align 4, !tbaa !35
  %584 = call i32 @cursor_ops(ptr noundef %582, ptr noundef %19, ptr noundef null, i32 noundef %583)
  %585 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %584, ptr %585, align 8, !tbaa !53
  %586 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %587 = load i32, ptr %586, align 8, !tbaa !53
  %588 = icmp ne i32 %587, 0
  %589 = xor i1 %588, true
  %590 = xor i1 %589, true
  %591 = zext i1 %590 to i32
  %592 = sext i32 %591 to i64
  %593 = call i64 @llvm.expect.i64(i64 %592, i64 0)
  %594 = icmp ne i64 %593, 0
  br i1 %594, label %595, label %616

595:                                              ; preds = %579
  %596 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %597 = load i32, ptr %596, align 8, !tbaa !53
  %598 = icmp ne i32 %597, -30798
  %599 = xor i1 %598, true
  %600 = xor i1 %599, true
  %601 = zext i1 %600 to i32
  %602 = sext i32 %601 to i64
  %603 = call i64 @llvm.expect.i64(i64 %602, i64 0)
  %604 = icmp ne i64 %603, 0
  br i1 %604, label %605, label %606

605:                                              ; preds = %595
  br label %2824

606:                                              ; preds = %595
  %607 = load i8, ptr %7, align 1, !tbaa !11
  %608 = zext i8 %607 to i32
  %609 = and i32 %608, 16
  %610 = icmp ne i32 %609, 0
  br i1 %610, label %611, label %615

611:                                              ; preds = %606
  %612 = load i32, ptr %18, align 4, !tbaa !35
  %613 = icmp eq i32 %612, 17
  br i1 %613, label %614, label %615

614:                                              ; preds = %611
  store i32 12, ptr %18, align 4, !tbaa !35
  br label %579

615:                                              ; preds = %611, %606
  br label %1879

616:                                              ; preds = %579
  %617 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 1
  %618 = load i64, ptr %617, align 8, !tbaa !57
  %619 = icmp ne i64 %618, 8
  %620 = xor i1 %619, true
  %621 = xor i1 %620, true
  %622 = zext i1 %621 to i32
  %623 = sext i32 %622 to i64
  %624 = call i64 @llvm.expect.i64(i64 %623, i64 0)
  %625 = icmp ne i64 %624, 0
  br i1 %625, label %626, label %642

626:                                              ; preds = %616
  br label %627

627:                                              ; preds = %626
  %628 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %629 = zext i8 %628 to i32
  %630 = icmp sle i32 1, %629
  %631 = xor i1 %630, true
  %632 = xor i1 %631, true
  %633 = zext i1 %632 to i32
  %634 = sext i32 %633 to i64
  %635 = call i64 @llvm.expect.i64(i64 %634, i64 0)
  %636 = icmp ne i64 %635, 0
  br i1 %636, label %637, label %638

637:                                              ; preds = %627
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 961, ptr noundef @.str.8, ptr noundef @.str.9, i32 noundef -30796, ptr noundef @.str.10)
  br label %638

638:                                              ; preds = %637, %627
  br label %639

639:                                              ; preds = %638
  br label %640

640:                                              ; preds = %639
  %641 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30796, ptr %641, align 8, !tbaa !53
  br label %2824

642:                                              ; preds = %616
  %643 = getelementptr inbounds %struct.iovec, ptr %19, i32 0, i32 0
  %644 = load ptr, ptr %643, align 8, !tbaa !55
  %645 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %644) #15
  store i64 %645, ptr %17, align 8, !tbaa !9
  %646 = load i8, ptr %7, align 1, !tbaa !11
  %647 = zext i8 %646 to i32
  %648 = and i32 %647, 16
  %649 = icmp ne i32 %648, 0
  br i1 %649, label %650, label %665

650:                                              ; preds = %642
  store i32 12, ptr %18, align 4, !tbaa !35
  %651 = load i64, ptr %17, align 8, !tbaa !9
  %652 = load ptr, ptr %8, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.MDBX_txn, ptr %652, i32 0, i32 9
  %654 = load ptr, ptr %653, align 8, !tbaa !15
  %655 = getelementptr inbounds %struct.MDBX_env, ptr %654, i32 0, i32 40
  %656 = getelementptr inbounds %struct.anon.17, ptr %655, i32 0, i32 0
  %657 = load i64, ptr %656, align 8, !tbaa !51
  %658 = icmp uge i64 %651, %657
  br i1 %658, label %663, label %659

659:                                              ; preds = %650
  %660 = load ptr, ptr %8, align 8, !tbaa !5
  %661 = load i64, ptr %17, align 8, !tbaa !9
  %662 = call zeroext i1 @gc_is_reclaimed(ptr noundef %660, i64 noundef %661)
  br i1 %662, label %663, label %664

663:                                              ; preds = %659, %650
  br label %579

664:                                              ; preds = %659
  br label %687

665:                                              ; preds = %642
  %666 = load i64, ptr %17, align 8, !tbaa !9
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.MDBX_txn, ptr %667, i32 0, i32 9
  %669 = load ptr, ptr %668, align 8, !tbaa !15
  %670 = getelementptr inbounds %struct.MDBX_env, ptr %669, i32 0, i32 40
  %671 = getelementptr inbounds %struct.anon.17, ptr %670, i32 0, i32 0
  %672 = load i64, ptr %671, align 8, !tbaa !51
  %673 = icmp uge i64 %666, %672
  %674 = xor i1 %673, true
  %675 = xor i1 %674, true
  %676 = zext i1 %675 to i32
  %677 = sext i32 %676 to i64
  %678 = call i64 @llvm.expect.i64(i64 %677, i64 0)
  %679 = icmp ne i64 %678, 0
  br i1 %679, label %680, label %681

680:                                              ; preds = %665
  br label %1879

681:                                              ; preds = %665
  store i32 8, ptr %18, align 4, !tbaa !35
  %682 = load ptr, ptr %8, align 8, !tbaa !5
  %683 = load i64, ptr %17, align 8, !tbaa !9
  %684 = call zeroext i1 @gc_is_reclaimed(ptr noundef %682, i64 noundef %683)
  br i1 %684, label %685, label %686

685:                                              ; preds = %681
  br label %579

686:                                              ; preds = %681
  br label %687

687:                                              ; preds = %686, %664
  %688 = load ptr, ptr %8, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.MDBX_txn, ptr %688, i32 0, i32 1
  %690 = load i32, ptr %689, align 4, !tbaa !36
  %691 = and i32 %690, -129
  store i32 %691, ptr %689, align 4, !tbaa !36
  %692 = load ptr, ptr %14, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.MDBX_cursor, ptr %692, i32 0, i32 9
  %694 = load ptr, ptr %14, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.MDBX_cursor, ptr %694, i32 0, i32 1
  %696 = getelementptr inbounds %struct.anon.7, ptr %695, i32 0, i32 1
  %697 = load i8, ptr %696, align 1, !tbaa !11
  %698 = sext i8 %697 to i64
  %699 = getelementptr inbounds [32 x ptr], ptr %693, i64 0, i64 %698
  %700 = load ptr, ptr %699, align 8, !tbaa !5
  store ptr %700, ptr %21, align 8, !tbaa !5
  %701 = load ptr, ptr %14, align 8, !tbaa !5
  %702 = load ptr, ptr %21, align 8, !tbaa !5
  %703 = load ptr, ptr %14, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.MDBX_cursor, ptr %703, i32 0, i32 10
  %705 = load ptr, ptr %14, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.MDBX_cursor, ptr %705, i32 0, i32 1
  %707 = getelementptr inbounds %struct.anon.7, ptr %706, i32 0, i32 1
  %708 = load i8, ptr %707, align 1, !tbaa !11
  %709 = sext i8 %708 to i64
  %710 = getelementptr inbounds [32 x i16], ptr %704, i64 0, i64 %709
  %711 = load i16, ptr %710, align 2, !tbaa !59
  %712 = zext i16 %711 to i64
  %713 = call ptr @page_node(ptr noundef %702, i64 noundef %712) #15
  %714 = load ptr, ptr %21, align 8, !tbaa !5
  %715 = call i32 @node_read(ptr noundef %701, ptr noundef %713, ptr noundef %20, ptr noundef %714)
  %716 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %715, ptr %716, align 8, !tbaa !53
  %717 = icmp ne i32 %715, 0
  %718 = xor i1 %717, true
  %719 = xor i1 %718, true
  %720 = zext i1 %719 to i32
  %721 = sext i32 %720 to i64
  %722 = call i64 @llvm.expect.i64(i64 %721, i64 0)
  %723 = icmp ne i64 %722, 0
  br i1 %723, label %724, label %725

724:                                              ; preds = %687
  br label %2824

725:                                              ; preds = %687
  %726 = getelementptr inbounds %struct.iovec, ptr %20, i32 0, i32 0
  %727 = load ptr, ptr %726, align 8, !tbaa !55
  store ptr %727, ptr %22, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.iovec, ptr %20, i32 0, i32 1
  %729 = load i64, ptr %728, align 8, !tbaa !57
  %730 = urem i64 %729, 4
  %731 = icmp ne i64 %730, 0
  br i1 %731, label %751, label %732

732:                                              ; preds = %725
  %733 = getelementptr inbounds %struct.iovec, ptr %20, i32 0, i32 1
  %734 = load i64, ptr %733, align 8, !tbaa !57
  %735 = load ptr, ptr %22, align 8, !tbaa !5
  %736 = getelementptr inbounds i32, ptr %735, i64 0
  %737 = load i32, ptr %736, align 4, !tbaa !35
  %738 = zext i32 %737 to i64
  %739 = add i64 %738, 1
  %740 = mul i64 %739, 4
  %741 = icmp ult i64 %734, %740
  br i1 %741, label %751, label %742

742:                                              ; preds = %732
  %743 = load ptr, ptr %22, align 8, !tbaa !5
  %744 = load ptr, ptr %8, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.MDBX_txn, ptr %744, i32 0, i32 6
  %746 = getelementptr inbounds %struct.geo, ptr %745, i32 0, i32 5
  %747 = load i32, ptr %746, align 8, !tbaa !11
  %748 = zext i32 %747 to i64
  %749 = call zeroext i1 @pnl_check(ptr noundef %743, i64 noundef %748)
  %750 = xor i1 %749, true
  br label %751

751:                                              ; preds = %742, %732, %725
  %752 = phi i1 [ true, %732 ], [ true, %725 ], [ %750, %742 ]
  %753 = xor i1 %752, true
  %754 = xor i1 %753, true
  %755 = zext i1 %754 to i32
  %756 = sext i32 %755 to i64
  %757 = call i64 @llvm.expect.i64(i64 %756, i64 0)
  %758 = icmp ne i64 %757, 0
  br i1 %758, label %759, label %775

759:                                              ; preds = %751
  br label %760

760:                                              ; preds = %759
  %761 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %762 = zext i8 %761 to i32
  %763 = icmp sle i32 1, %762
  %764 = xor i1 %763, true
  %765 = xor i1 %764, true
  %766 = zext i1 %765 to i32
  %767 = sext i32 %766 to i64
  %768 = call i64 @llvm.expect.i64(i64 %767, i64 0)
  %769 = icmp ne i64 %768, 0
  br i1 %769, label %770, label %771

770:                                              ; preds = %760
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 989, ptr noundef @.str.8, ptr noundef @.str.9, i32 noundef -30796, ptr noundef @.str.11)
  br label %771

771:                                              ; preds = %770, %760
  br label %772

772:                                              ; preds = %771
  br label %773

773:                                              ; preds = %772
  %774 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30796, ptr %774, align 8, !tbaa !53
  br label %2824

775:                                              ; preds = %751
  %776 = load ptr, ptr %22, align 8, !tbaa !5
  %777 = getelementptr inbounds i32, ptr %776, i64 0
  %778 = load i32, ptr %777, align 4, !tbaa !35
  %779 = zext i32 %778 to i64
  store i64 %779, ptr %23, align 8, !tbaa !9
  br label %780

780:                                              ; preds = %775
  %781 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %782 = zext i8 %781 to i32
  %783 = icmp sle i32 6, %782
  %784 = xor i1 %783, true
  %785 = xor i1 %784, true
  %786 = zext i1 %785 to i32
  %787 = sext i32 %786 to i64
  %788 = call i64 @llvm.expect.i64(i64 %787, i64 0)
  %789 = icmp ne i64 %788, 0
  br i1 %789, label %790, label %802

790:                                              ; preds = %780
  %791 = load i64, ptr %17, align 8, !tbaa !9
  %792 = load i64, ptr %23, align 8, !tbaa !9
  %793 = load i64, ptr %23, align 8, !tbaa !9
  %794 = load ptr, ptr %8, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.MDBX_txn, ptr %794, i32 0, i32 17
  %796 = getelementptr inbounds %struct.anon.2, ptr %795, i32 0, i32 1
  %797 = load ptr, ptr %796, align 8, !tbaa !11
  %798 = getelementptr inbounds i32, ptr %797, i64 0
  %799 = load i32, ptr %798, align 4, !tbaa !35
  %800 = zext i32 %799 to i64
  %801 = add i64 %793, %800
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 995, ptr noundef @.str.12, i64 noundef %791, i64 noundef %792, i64 noundef %801)
  br label %802

802:                                              ; preds = %790, %780
  br label %803

803:                                              ; preds = %802
  br label %804

804:                                              ; preds = %803
  %805 = load i64, ptr %6, align 8, !tbaa !9
  %806 = icmp ne i64 %805, 0
  %807 = xor i1 %806, true
  %808 = xor i1 %807, true
  %809 = xor i1 %808, true
  %810 = zext i1 %809 to i32
  %811 = sext i32 %810 to i64
  %812 = call i64 @llvm.expect.i64(i64 %811, i64 0)
  %813 = icmp ne i64 %812, 0
  br i1 %813, label %814, label %857

814:                                              ; preds = %804
  %815 = load i64, ptr %23, align 8, !tbaa !9
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.MDBX_env, ptr %816, i32 0, i32 28
  %818 = load i32, ptr %817, align 8, !tbaa !41
  %819 = udiv i32 %818, 4
  %820 = mul i32 %819, 3
  %821 = zext i32 %820 to i64
  %822 = icmp ugt i64 %815, %821
  br i1 %822, label %823, label %856

823:                                              ; preds = %814
  %824 = load ptr, ptr %8, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.MDBX_txn, ptr %824, i32 0, i32 17
  %826 = getelementptr inbounds %struct.anon.2, ptr %825, i32 0, i32 1
  %827 = load ptr, ptr %826, align 8, !tbaa !11
  %828 = getelementptr inbounds i32, ptr %827, i64 0
  %829 = load i32, ptr %828, align 4, !tbaa !35
  %830 = zext i32 %829 to i64
  %831 = load i64, ptr %23, align 8, !tbaa !9
  %832 = add i64 %830, %831
  %833 = load ptr, ptr %9, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.MDBX_env, ptr %833, i32 0, i32 28
  %835 = load i32, ptr %834, align 8, !tbaa !41
  %836 = zext i32 %835 to i64
  %837 = icmp ugt i64 %832, %836
  br i1 %837, label %838, label %856

838:                                              ; preds = %823
  br label %839

839:                                              ; preds = %838
  %840 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %841 = zext i8 %840 to i32
  %842 = icmp sle i32 5, %841
  %843 = xor i1 %842, true
  %844 = xor i1 %843, true
  %845 = zext i1 %844 to i32
  %846 = sext i32 %845 to i64
  %847 = call i64 @llvm.expect.i64(i64 %846, i64 0)
  %848 = icmp ne i64 %847, 0
  br i1 %848, label %849, label %852

849:                                              ; preds = %839
  %850 = load i64, ptr %17, align 8, !tbaa !9
  %851 = load i64, ptr %23, align 8, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1004, ptr noundef @.str.13, i64 noundef %850, i64 noundef %851)
  br label %852

852:                                              ; preds = %849, %839
  br label %853

853:                                              ; preds = %852
  br label %854

854:                                              ; preds = %853
  %855 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30798, ptr %855, align 8, !tbaa !53
  br label %3058

856:                                              ; preds = %823, %814
  br label %857

857:                                              ; preds = %856, %804
  %858 = load i64, ptr %23, align 8, !tbaa !9
  %859 = load ptr, ptr %8, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.MDBX_txn, ptr %859, i32 0, i32 17
  %861 = getelementptr inbounds %struct.anon.2, ptr %860, i32 0, i32 1
  %862 = load ptr, ptr %861, align 8, !tbaa !11
  %863 = getelementptr inbounds i32, ptr %862, i64 0
  %864 = load i32, ptr %863, align 4, !tbaa !35
  %865 = zext i32 %864 to i64
  %866 = add i64 %858, %865
  %867 = load ptr, ptr %9, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.MDBX_env, ptr %867, i32 0, i32 28
  %869 = load i32, ptr %868, align 8, !tbaa !41
  %870 = zext i32 %869 to i64
  %871 = icmp uge i64 %866, %870
  %872 = xor i1 %871, true
  %873 = xor i1 %872, true
  %874 = zext i1 %873 to i32
  %875 = sext i32 %874 to i64
  %876 = call i64 @llvm.expect.i64(i64 %875, i64 0)
  %877 = icmp ne i64 %876, 0
  br i1 %877, label %878, label %1161

878:                                              ; preds = %857
  %879 = load i8, ptr %7, align 1, !tbaa !11
  %880 = zext i8 %879 to i32
  %881 = and i32 %880, 8
  %882 = icmp ne i32 %881, 0
  br i1 %882, label %883, label %1040

883:                                              ; preds = %878
  br label %884

884:                                              ; preds = %883
  %885 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %886 = zext i8 %885 to i32
  %887 = and i32 %886, 1
  %888 = icmp ne i32 %887, 0
  %889 = xor i1 %888, true
  %890 = xor i1 %889, true
  %891 = zext i1 %890 to i32
  %892 = sext i32 %891 to i64
  %893 = call i64 @llvm.expect.i64(i64 %892, i64 1)
  %894 = icmp ne i64 %893, 0
  br i1 %894, label %895, label %918

895:                                              ; preds = %884
  br label %896

896:                                              ; preds = %895
  %897 = load i8, ptr %7, align 1, !tbaa !11
  %898 = zext i8 %897 to i32
  %899 = and i32 %898, 4
  %900 = icmp ne i32 %899, 0
  br i1 %900, label %901, label %904

901:                                              ; preds = %896
  %902 = load i64, ptr %6, align 8, !tbaa !9
  %903 = icmp ugt i64 %902, 0
  br label %904

904:                                              ; preds = %901, %896
  %905 = phi i1 [ false, %896 ], [ %903, %901 ]
  %906 = xor i1 %905, true
  %907 = xor i1 %906, true
  %908 = xor i1 %907, true
  %909 = zext i1 %908 to i32
  %910 = sext i32 %909 to i64
  %911 = call i64 @llvm.expect.i64(i64 %910, i64 0)
  %912 = icmp ne i64 %911, 0
  br i1 %912, label %913, label %915

913:                                              ; preds = %904
  %914 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %914, ptr noundef @.str.14, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1013) #13
  unreachable

915:                                              ; preds = %904
  br label %916

916:                                              ; preds = %915
  br label %917

917:                                              ; preds = %916
  br label %918

918:                                              ; preds = %917, %884
  br label %919

919:                                              ; preds = %918
  br label %920

920:                                              ; preds = %919
  br label %921

921:                                              ; preds = %920
  %922 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %923 = zext i8 %922 to i32
  %924 = icmp sle i32 6, %923
  %925 = xor i1 %924, true
  %926 = xor i1 %925, true
  %927 = zext i1 %926 to i32
  %928 = sext i32 %927 to i64
  %929 = call i64 @llvm.expect.i64(i64 %928, i64 0)
  %930 = icmp ne i64 %929, 0
  br i1 %930, label %931, label %932

931:                                              ; preds = %921
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1017, ptr noundef @.str.15, ptr noundef @.str.16, ptr noundef @.str.17)
  br label %932

932:                                              ; preds = %931, %921
  br label %933

933:                                              ; preds = %932
  br label %934

934:                                              ; preds = %933
  %935 = load ptr, ptr %8, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.MDBX_txn, ptr %935, i32 0, i32 17
  %937 = getelementptr inbounds %struct.anon.2, ptr %936, i32 0, i32 1
  %938 = load ptr, ptr %937, align 8, !tbaa !11
  %939 = getelementptr inbounds i32, ptr %938, i64 0
  %940 = load i32, ptr %939, align 4, !tbaa !35
  %941 = zext i32 %940 to i64
  %942 = load i64, ptr %6, align 8, !tbaa !9
  %943 = icmp uge i64 %941, %942
  br i1 %943, label %944, label %1039

944:                                              ; preds = %934
  br label %945

945:                                              ; preds = %944
  %946 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %947 = zext i8 %946 to i32
  %948 = and i32 %947, 1
  %949 = icmp ne i32 %948, 0
  %950 = xor i1 %949, true
  %951 = xor i1 %950, true
  %952 = zext i1 %951 to i32
  %953 = sext i32 %952 to i64
  %954 = call i64 @llvm.expect.i64(i64 %953, i64 1)
  %955 = icmp ne i64 %954, 0
  br i1 %955, label %956, label %1002

956:                                              ; preds = %945
  br label %957

957:                                              ; preds = %956
  %958 = load ptr, ptr %8, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.MDBX_txn, ptr %958, i32 0, i32 17
  %960 = getelementptr inbounds %struct.anon.2, ptr %959, i32 0, i32 1
  %961 = load ptr, ptr %960, align 8, !tbaa !11
  %962 = load ptr, ptr %8, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.MDBX_txn, ptr %962, i32 0, i32 17
  %964 = getelementptr inbounds %struct.anon.2, ptr %963, i32 0, i32 1
  %965 = load ptr, ptr %964, align 8, !tbaa !11
  %966 = getelementptr inbounds i32, ptr %965, i64 0
  %967 = load i32, ptr %966, align 4, !tbaa !35
  %968 = zext i32 %967 to i64
  %969 = getelementptr inbounds i32, ptr %961, i64 %968
  %970 = load i32, ptr %969, align 4, !tbaa !35
  %971 = load ptr, ptr %8, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.MDBX_txn, ptr %971, i32 0, i32 6
  %973 = getelementptr inbounds %struct.geo, ptr %972, i32 0, i32 5
  %974 = load i32, ptr %973, align 8, !tbaa !11
  %975 = icmp ult i32 %970, %974
  br i1 %975, label %976, label %988

976:                                              ; preds = %957
  %977 = load ptr, ptr %8, align 8, !tbaa !5
  %978 = getelementptr inbounds %struct.MDBX_txn, ptr %977, i32 0, i32 17
  %979 = getelementptr inbounds %struct.anon.2, ptr %978, i32 0, i32 1
  %980 = load ptr, ptr %979, align 8, !tbaa !11
  %981 = getelementptr inbounds i32, ptr %980, i64 1
  %982 = load i32, ptr %981, align 4, !tbaa !35
  %983 = load ptr, ptr %8, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.MDBX_txn, ptr %983, i32 0, i32 6
  %985 = getelementptr inbounds %struct.geo, ptr %984, i32 0, i32 5
  %986 = load i32, ptr %985, align 8, !tbaa !11
  %987 = icmp ult i32 %982, %986
  br label %988

988:                                              ; preds = %976, %957
  %989 = phi i1 [ false, %957 ], [ %987, %976 ]
  %990 = xor i1 %989, true
  %991 = xor i1 %990, true
  %992 = xor i1 %991, true
  %993 = zext i1 %992 to i32
  %994 = sext i32 %993 to i64
  %995 = call i64 @llvm.expect.i64(i64 %994, i64 0)
  %996 = icmp ne i64 %995, 0
  br i1 %996, label %997, label %999

997:                                              ; preds = %988
  %998 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %998, ptr noundef @.str.2, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1020) #13
  unreachable

999:                                              ; preds = %988
  br label %1000

1000:                                             ; preds = %999
  br label %1001

1001:                                             ; preds = %1000
  br label %1002

1002:                                             ; preds = %1001, %945
  br label %1003

1003:                                             ; preds = %1002
  br label %1004

1004:                                             ; preds = %1003
  %1005 = load i64, ptr %6, align 8, !tbaa !9
  %1006 = icmp eq i64 %1005, 1
  %1007 = xor i1 %1006, true
  %1008 = xor i1 %1007, true
  %1009 = zext i1 %1008 to i32
  %1010 = sext i32 %1009 to i64
  %1011 = call i64 @llvm.expect.i64(i64 %1010, i64 1)
  %1012 = icmp ne i64 %1011, 0
  br i1 %1012, label %1013, label %1024

1013:                                             ; preds = %1004
  %1014 = load i8, ptr %7, align 1, !tbaa !11
  %1015 = zext i8 %1014 to i32
  %1016 = and i32 %1015, 2
  %1017 = icmp ne i32 %1016, 0
  br i1 %1017, label %1018, label %1019

1018:                                             ; preds = %1013
  br label %1022

1019:                                             ; preds = %1013
  %1020 = load ptr, ptr %8, align 8, !tbaa !5
  %1021 = call i32 @repnl_get_single(ptr noundef %1020) #14
  br label %1022

1022:                                             ; preds = %1019, %1018
  %1023 = phi i32 [ -1, %1018 ], [ %1021, %1019 ]
  store i32 %1023, ptr %13, align 4, !tbaa !35
  br label %2613

1024:                                             ; preds = %1004
  %1025 = load ptr, ptr %8, align 8, !tbaa !5
  %1026 = load i64, ptr %6, align 8, !tbaa !9
  %1027 = load i8, ptr %7, align 1, !tbaa !11
  %1028 = call i32 @repnl_get_sequence(ptr noundef %1025, i64 noundef %1026, i8 noundef zeroext %1027) #14
  store i32 %1028, ptr %13, align 4, !tbaa !35
  %1029 = load i32, ptr %13, align 4, !tbaa !35
  %1030 = icmp ne i32 %1029, 0
  %1031 = xor i1 %1030, true
  %1032 = xor i1 %1031, true
  %1033 = zext i1 %1032 to i32
  %1034 = sext i32 %1033 to i64
  %1035 = call i64 @llvm.expect.i64(i64 %1034, i64 1)
  %1036 = icmp ne i64 %1035, 0
  br i1 %1036, label %1037, label %1038

1037:                                             ; preds = %1024
  br label %2613

1038:                                             ; preds = %1024
  br label %1039

1039:                                             ; preds = %1038, %934
  br label %1040

1040:                                             ; preds = %1039, %878
  %1041 = load i8, ptr %7, align 1, !tbaa !11
  %1042 = zext i8 %1041 to i32
  %1043 = and i32 %1042, -13
  %1044 = trunc i32 %1043 to i8
  store i8 %1044, ptr %7, align 1, !tbaa !11
  %1045 = load ptr, ptr %8, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.MDBX_txn, ptr %1045, i32 0, i32 17
  %1047 = getelementptr inbounds %struct.anon.2, ptr %1046, i32 0, i32 1
  %1048 = load ptr, ptr %1047, align 8, !tbaa !11
  %1049 = getelementptr inbounds i32, ptr %1048, i64 0
  %1050 = load i32, ptr %1049, align 4, !tbaa !35
  %1051 = zext i32 %1050 to i64
  %1052 = load ptr, ptr %9, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.MDBX_env, ptr %1052, i32 0, i32 34
  %1054 = getelementptr inbounds %struct.anon.12, ptr %1053, i32 0, i32 1
  %1055 = load i32, ptr %1054, align 4, !tbaa !60
  %1056 = zext i32 %1055 to i64
  %1057 = icmp uge i64 %1051, %1056
  %1058 = xor i1 %1057, true
  %1059 = xor i1 %1058, true
  %1060 = zext i1 %1059 to i32
  %1061 = sext i32 %1060 to i64
  %1062 = call i64 @llvm.expect.i64(i64 %1061, i64 0)
  %1063 = icmp ne i64 %1062, 0
  br i1 %1063, label %1064, label %1160

1064:                                             ; preds = %1040
  %1065 = load i64, ptr %6, align 8, !tbaa !9
  %1066 = icmp ne i64 %1065, 0
  br i1 %1066, label %1067, label %1095

1067:                                             ; preds = %1064
  %1068 = load ptr, ptr %8, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.MDBX_txn, ptr %1068, i32 0, i32 6
  %1070 = getelementptr inbounds %struct.geo, ptr %1069, i32 0, i32 3
  %1071 = load i32, ptr %1070, align 8, !tbaa !61
  %1072 = zext i32 %1071 to i64
  %1073 = load ptr, ptr %8, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.MDBX_txn, ptr %1073, i32 0, i32 6
  %1075 = getelementptr inbounds %struct.geo, ptr %1074, i32 0, i32 5
  %1076 = load i32, ptr %1075, align 8, !tbaa !11
  %1077 = zext i32 %1076 to i64
  %1078 = load i64, ptr %6, align 8, !tbaa !9
  %1079 = add i64 %1077, %1078
  %1080 = icmp uge i64 %1072, %1079
  br i1 %1080, label %1081, label %1095

1081:                                             ; preds = %1067
  %1082 = load i64, ptr %11, align 8, !tbaa !9
  %1083 = call i64 @monotime_since_cached(i64 noundef %1082, ptr noundef %12)
  %1084 = load ptr, ptr %8, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.MDBX_txn, ptr %1084, i32 0, i32 17
  %1086 = getelementptr inbounds %struct.anon.2, ptr %1085, i32 0, i32 2
  %1087 = getelementptr inbounds %struct.anon.3, ptr %1086, i32 0, i32 1
  %1088 = load i64, ptr %1087, align 8, !tbaa !11
  %1089 = add i64 %1083, %1088
  %1090 = load ptr, ptr %9, align 8, !tbaa !5
  %1091 = getelementptr inbounds %struct.MDBX_env, ptr %1090, i32 0, i32 34
  %1092 = getelementptr inbounds %struct.anon.12, ptr %1091, i32 0, i32 4
  %1093 = load i64, ptr %1092, align 8, !tbaa !23
  %1094 = icmp uge i64 %1089, %1093
  br i1 %1094, label %1106, label %1095

1095:                                             ; preds = %1081, %1067, %1064
  %1096 = load i64, ptr %23, align 8, !tbaa !9
  %1097 = load ptr, ptr %8, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.MDBX_txn, ptr %1097, i32 0, i32 17
  %1099 = getelementptr inbounds %struct.anon.2, ptr %1098, i32 0, i32 1
  %1100 = load ptr, ptr %1099, align 8, !tbaa !11
  %1101 = getelementptr inbounds i32, ptr %1100, i64 0
  %1102 = load i32, ptr %1101, align 4, !tbaa !35
  %1103 = zext i32 %1102 to i64
  %1104 = add i64 %1096, %1103
  %1105 = icmp uge i64 %1104, 2147483647
  br i1 %1105, label %1106, label %1160

1106:                                             ; preds = %1095, %1081
  br label %1107

1107:                                             ; preds = %1106
  %1108 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1109 = zext i8 %1108 to i32
  %1110 = icmp sle i32 3, %1109
  %1111 = xor i1 %1110, true
  %1112 = xor i1 %1111, true
  %1113 = zext i1 %1112 to i32
  %1114 = sext i32 %1113 to i64
  %1115 = call i64 @llvm.expect.i64(i64 %1114, i64 0)
  %1116 = icmp ne i64 %1115, 0
  br i1 %1116, label %1117, label %1157

1117:                                             ; preds = %1107
  %1118 = load i64, ptr %23, align 8, !tbaa !9
  %1119 = load ptr, ptr %8, align 8, !tbaa !5
  %1120 = getelementptr inbounds %struct.MDBX_txn, ptr %1119, i32 0, i32 17
  %1121 = getelementptr inbounds %struct.anon.2, ptr %1120, i32 0, i32 1
  %1122 = load ptr, ptr %1121, align 8, !tbaa !11
  %1123 = getelementptr inbounds i32, ptr %1122, i64 0
  %1124 = load i32, ptr %1123, align 4, !tbaa !35
  %1125 = zext i32 %1124 to i64
  %1126 = add i64 %1118, %1125
  %1127 = icmp ult i64 %1126, 2147483647
  %1128 = xor i1 %1127, true
  %1129 = xor i1 %1128, true
  %1130 = zext i1 %1129 to i32
  %1131 = sext i32 %1130 to i64
  %1132 = call i64 @llvm.expect.i64(i64 %1131, i64 1)
  %1133 = icmp ne i64 %1132, 0
  %1134 = zext i1 %1133 to i64
  %1135 = select i1 %1133, ptr @.str.19, ptr @.str.20
  %1136 = load ptr, ptr %8, align 8, !tbaa !5
  %1137 = getelementptr inbounds %struct.MDBX_txn, ptr %1136, i32 0, i32 17
  %1138 = getelementptr inbounds %struct.anon.2, ptr %1137, i32 0, i32 1
  %1139 = load ptr, ptr %1138, align 8, !tbaa !11
  %1140 = getelementptr inbounds i32, ptr %1139, i64 0
  %1141 = load i32, ptr %1140, align 4, !tbaa !35
  %1142 = zext i32 %1141 to i64
  %1143 = load i64, ptr %23, align 8, !tbaa !9
  %1144 = load i64, ptr %23, align 8, !tbaa !9
  %1145 = load ptr, ptr %8, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.MDBX_txn, ptr %1145, i32 0, i32 17
  %1147 = getelementptr inbounds %struct.anon.2, ptr %1146, i32 0, i32 1
  %1148 = load ptr, ptr %1147, align 8, !tbaa !11
  %1149 = getelementptr inbounds i32, ptr %1148, i64 0
  %1150 = load i32, ptr %1149, align 4, !tbaa !35
  %1151 = zext i32 %1150 to i64
  %1152 = add i64 %1144, %1151
  %1153 = load ptr, ptr %9, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.MDBX_env, ptr %1153, i32 0, i32 34
  %1155 = getelementptr inbounds %struct.anon.12, ptr %1154, i32 0, i32 1
  %1156 = load i32, ptr %1155, align 4, !tbaa !60
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1044, ptr noundef @.str.18, ptr noundef %1135, i64 noundef %1142, i64 noundef %1143, i64 noundef %1152, i32 noundef %1156)
  br label %1157

1157:                                             ; preds = %1117, %1107
  br label %1158

1158:                                             ; preds = %1157
  br label %1159

1159:                                             ; preds = %1158
  br label %1879

1160:                                             ; preds = %1095, %1040
  br label %1161

1161:                                             ; preds = %1160, %857
  %1162 = load ptr, ptr %8, align 8, !tbaa !5
  %1163 = getelementptr inbounds %struct.MDBX_txn, ptr %1162, i32 0, i32 17
  %1164 = getelementptr inbounds %struct.anon.2, ptr %1163, i32 0, i32 2
  %1165 = getelementptr inbounds %struct.anon.3, ptr %1164, i32 0, i32 0
  %1166 = load i64, ptr %17, align 8, !tbaa !9
  %1167 = call i32 @rkl_push(ptr noundef %1165, i64 noundef %1166, i1 noundef zeroext false)
  %1168 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %1167, ptr %1168, align 8, !tbaa !53
  br label %1169

1169:                                             ; preds = %1161
  %1170 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1171 = zext i8 %1170 to i32
  %1172 = icmp sle i32 6, %1171
  %1173 = xor i1 %1172, true
  %1174 = xor i1 %1173, true
  %1175 = zext i1 %1174 to i32
  %1176 = sext i32 %1175 to i64
  %1177 = call i64 @llvm.expect.i64(i64 %1176, i64 0)
  %1178 = icmp ne i64 %1177, 0
  br i1 %1178, label %1179, label %1184

1179:                                             ; preds = %1169
  %1180 = load i64, ptr %17, align 8, !tbaa !9
  %1181 = load i64, ptr %23, align 8, !tbaa !9
  %1182 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %1183 = load i32, ptr %1182, align 8, !tbaa !53
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1058, ptr noundef @.str.21, i64 noundef %1180, i64 noundef %1181, i32 noundef %1183)
  br label %1184

1184:                                             ; preds = %1179, %1169
  br label %1185

1185:                                             ; preds = %1184
  br label %1186

1186:                                             ; preds = %1185
  %1187 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %1188 = load i32, ptr %1187, align 8, !tbaa !53
  %1189 = icmp ne i32 %1188, 0
  %1190 = xor i1 %1189, true
  %1191 = xor i1 %1190, true
  %1192 = zext i1 %1191 to i32
  %1193 = sext i32 %1192 to i64
  %1194 = call i64 @llvm.expect.i64(i64 %1193, i64 0)
  %1195 = icmp ne i64 %1194, 0
  br i1 %1195, label %1196, label %1197

1196:                                             ; preds = %1186
  br label %2824

1197:                                             ; preds = %1186
  %1198 = load ptr, ptr %8, align 8, !tbaa !5
  %1199 = getelementptr inbounds %struct.MDBX_txn, ptr %1198, i32 0, i32 17
  %1200 = getelementptr inbounds %struct.anon.2, ptr %1199, i32 0, i32 1
  %1201 = load i64, ptr %23, align 8, !tbaa !9
  %1202 = call i32 @pnl_need(ptr noundef %1200, i64 noundef %1201)
  %1203 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %1202, ptr %1203, align 8, !tbaa !53
  %1204 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %1205 = load i32, ptr %1204, align 8, !tbaa !53
  %1206 = icmp ne i32 %1205, 0
  %1207 = xor i1 %1206, true
  %1208 = xor i1 %1207, true
  %1209 = zext i1 %1208 to i32
  %1210 = sext i32 %1209 to i64
  %1211 = call i64 @llvm.expect.i64(i64 %1210, i64 0)
  %1212 = icmp ne i64 %1211, 0
  br i1 %1212, label %1213, label %1214

1213:                                             ; preds = %1197
  br label %2824

1214:                                             ; preds = %1197
  %1215 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1216 = zext i8 %1215 to i32
  %1217 = icmp sle i32 7, %1216
  %1218 = xor i1 %1217, true
  %1219 = xor i1 %1218, true
  %1220 = zext i1 %1219 to i32
  %1221 = sext i32 %1220 to i64
  %1222 = call i64 @llvm.expect.i64(i64 %1221, i64 0)
  %1223 = icmp ne i64 %1222, 0
  br i1 %1223, label %1224, label %1293

1224:                                             ; preds = %1214
  br label %1225

1225:                                             ; preds = %1224
  %1226 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1227 = zext i8 %1226 to i32
  %1228 = icmp sle i32 7, %1227
  %1229 = xor i1 %1228, true
  %1230 = xor i1 %1229, true
  %1231 = zext i1 %1230 to i32
  %1232 = sext i32 %1231 to i64
  %1233 = call i64 @llvm.expect.i64(i64 %1232, i64 0)
  %1234 = icmp ne i64 %1233, 0
  br i1 %1234, label %1235, label %1244

1235:                                             ; preds = %1225
  %1236 = load i64, ptr %17, align 8, !tbaa !9
  %1237 = load ptr, ptr %8, align 8, !tbaa !5
  %1238 = getelementptr inbounds %struct.MDBX_txn, ptr %1237, i32 0, i32 10
  %1239 = load ptr, ptr %1238, align 8, !tbaa !38
  %1240 = getelementptr inbounds %struct.tree, ptr %1239, i64 0
  %1241 = getelementptr inbounds %struct.tree, ptr %1240, i32 0, i32 3
  %1242 = load i32, ptr %1241, align 4, !tbaa !62
  %1243 = load i64, ptr %23, align 8, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 7, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1068, ptr noundef @.str.22, i64 noundef %1236, i32 noundef %1242, i64 noundef %1243)
  br label %1244

1244:                                             ; preds = %1235, %1225
  br label %1245

1245:                                             ; preds = %1244
  br label %1246

1246:                                             ; preds = %1245
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #12
  %1247 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %1247, ptr %24, align 8, !tbaa !9
  br label %1248

1248:                                             ; preds = %1271, %1246
  %1249 = load i64, ptr %24, align 8, !tbaa !9
  %1250 = icmp ne i64 %1249, 0
  br i1 %1250, label %1252, label %1251

1251:                                             ; preds = %1248
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #12
  br label %1274

1252:                                             ; preds = %1248
  br label %1253

1253:                                             ; preds = %1252
  %1254 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1255 = zext i8 %1254 to i32
  %1256 = icmp sle i32 7, %1255
  %1257 = xor i1 %1256, true
  %1258 = xor i1 %1257, true
  %1259 = zext i1 %1258 to i32
  %1260 = sext i32 %1259 to i64
  %1261 = call i64 @llvm.expect.i64(i64 %1260, i64 0)
  %1262 = icmp ne i64 %1261, 0
  br i1 %1262, label %1263, label %1268

1263:                                             ; preds = %1253
  %1264 = load ptr, ptr %22, align 8, !tbaa !5
  %1265 = load i64, ptr %24, align 8, !tbaa !9
  %1266 = getelementptr inbounds i32, ptr %1264, i64 %1265
  %1267 = load i32, ptr %1266, align 4, !tbaa !35
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 7, ptr noundef null, i32 noundef 0, ptr noundef @.str.23, i32 noundef %1267)
  br label %1268

1268:                                             ; preds = %1263, %1253
  br label %1269

1269:                                             ; preds = %1268
  br label %1270

1270:                                             ; preds = %1269
  br label %1271

1271:                                             ; preds = %1270
  %1272 = load i64, ptr %24, align 8, !tbaa !9
  %1273 = add i64 %1272, -1
  store i64 %1273, ptr %24, align 8, !tbaa !9
  br label %1248, !llvm.loop !63

1274:                                             ; preds = %1251
  br label %1275

1275:                                             ; preds = %1274
  %1276 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1277 = zext i8 %1276 to i32
  %1278 = icmp sle i32 7, %1277
  %1279 = xor i1 %1278, true
  %1280 = xor i1 %1279, true
  %1281 = zext i1 %1280 to i32
  %1282 = sext i32 %1281 to i64
  %1283 = call i64 @llvm.expect.i64(i64 %1282, i64 0)
  %1284 = icmp ne i64 %1283, 0
  br i1 %1284, label %1285, label %1290

1285:                                             ; preds = %1275
  %1286 = load ptr, ptr %8, align 8, !tbaa !5
  %1287 = getelementptr inbounds %struct.MDBX_txn, ptr %1286, i32 0, i32 6
  %1288 = getelementptr inbounds %struct.geo, ptr %1287, i32 0, i32 5
  %1289 = load i32, ptr %1288, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 7, ptr noundef null, i32 noundef 0, ptr noundef @.str.24, i32 noundef %1289)
  br label %1290

1290:                                             ; preds = %1285, %1275
  br label %1291

1291:                                             ; preds = %1290
  br label %1292

1292:                                             ; preds = %1291
  br label %1293

1293:                                             ; preds = %1292, %1214
  %1294 = load ptr, ptr %8, align 8, !tbaa !5
  %1295 = getelementptr inbounds %struct.MDBX_txn, ptr %1294, i32 0, i32 17
  %1296 = getelementptr inbounds %struct.anon.2, ptr %1295, i32 0, i32 1
  %1297 = load ptr, ptr %1296, align 8, !tbaa !11
  %1298 = load ptr, ptr %22, align 8, !tbaa !5
  %1299 = call i64 @pnl_merge(ptr noundef %1297, ptr noundef %1298)
  %1300 = load i8, ptr %7, align 1, !tbaa !11
  %1301 = zext i8 %1300 to i32
  %1302 = or i32 %1301, 8
  %1303 = trunc i32 %1302 to i8
  store i8 %1303, ptr %7, align 1, !tbaa !11
  %1304 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1305 = zext i8 %1304 to i32
  %1306 = and i32 %1305, 2
  %1307 = icmp ne i32 %1306, 0
  %1308 = xor i1 %1307, true
  %1309 = xor i1 %1308, true
  %1310 = zext i1 %1309 to i32
  %1311 = sext i32 %1310 to i64
  %1312 = call i64 @llvm.expect.i64(i64 %1311, i64 0)
  %1313 = icmp ne i64 %1312, 0
  br i1 %1313, label %1314, label %1349

1314:                                             ; preds = %1293
  %1315 = load ptr, ptr %8, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.MDBX_txn, ptr %1315, i32 0, i32 17
  %1317 = getelementptr inbounds %struct.anon.2, ptr %1316, i32 0, i32 1
  %1318 = load ptr, ptr %1317, align 8, !tbaa !11
  %1319 = load ptr, ptr %8, align 8, !tbaa !5
  %1320 = getelementptr inbounds %struct.MDBX_txn, ptr %1319, i32 0, i32 6
  %1321 = getelementptr inbounds %struct.geo, ptr %1320, i32 0, i32 5
  %1322 = load i32, ptr %1321, align 8, !tbaa !11
  %1323 = zext i32 %1322 to i64
  %1324 = call zeroext i1 @pnl_check(ptr noundef %1318, i64 noundef %1323)
  %1325 = xor i1 %1324, true
  %1326 = xor i1 %1325, true
  %1327 = xor i1 %1326, true
  %1328 = zext i1 %1327 to i32
  %1329 = sext i32 %1328 to i64
  %1330 = call i64 @llvm.expect.i64(i64 %1329, i64 0)
  %1331 = icmp ne i64 %1330, 0
  br i1 %1331, label %1332, label %1348

1332:                                             ; preds = %1314
  br label %1333

1333:                                             ; preds = %1332
  %1334 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1335 = zext i8 %1334 to i32
  %1336 = icmp sle i32 1, %1335
  %1337 = xor i1 %1336, true
  %1338 = xor i1 %1337, true
  %1339 = zext i1 %1338 to i32
  %1340 = sext i32 %1339 to i64
  %1341 = call i64 @llvm.expect.i64(i64 %1340, i64 0)
  %1342 = icmp ne i64 %1341, 0
  br i1 %1342, label %1343, label %1344

1343:                                             ; preds = %1333
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1087, ptr noundef @.str.8, ptr noundef @.str.9, i32 noundef -30796, ptr noundef @.str.25)
  br label %1344

1344:                                             ; preds = %1343, %1333
  br label %1345

1345:                                             ; preds = %1344
  br label %1346

1346:                                             ; preds = %1345
  %1347 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30796, ptr %1347, align 8, !tbaa !53
  br label %2824

1348:                                             ; preds = %1314
  br label %1388

1349:                                             ; preds = %1293
  br label %1350

1350:                                             ; preds = %1349
  %1351 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1352 = zext i8 %1351 to i32
  %1353 = and i32 %1352, 1
  %1354 = icmp ne i32 %1353, 0
  %1355 = xor i1 %1354, true
  %1356 = xor i1 %1355, true
  %1357 = zext i1 %1356 to i32
  %1358 = sext i32 %1357 to i64
  %1359 = call i64 @llvm.expect.i64(i64 %1358, i64 1)
  %1360 = icmp ne i64 %1359, 0
  br i1 %1360, label %1361, label %1385

1361:                                             ; preds = %1350
  br label %1362

1362:                                             ; preds = %1361
  %1363 = load ptr, ptr %8, align 8, !tbaa !5
  %1364 = getelementptr inbounds %struct.MDBX_txn, ptr %1363, i32 0, i32 17
  %1365 = getelementptr inbounds %struct.anon.2, ptr %1364, i32 0, i32 1
  %1366 = load ptr, ptr %1365, align 8, !tbaa !11
  %1367 = load ptr, ptr %8, align 8, !tbaa !5
  %1368 = getelementptr inbounds %struct.MDBX_txn, ptr %1367, i32 0, i32 6
  %1369 = getelementptr inbounds %struct.geo, ptr %1368, i32 0, i32 5
  %1370 = load i32, ptr %1369, align 8, !tbaa !11
  %1371 = zext i32 %1370 to i64
  %1372 = call zeroext i1 @pnl_check_allocated(ptr noundef %1366, i64 noundef %1371)
  %1373 = xor i1 %1372, true
  %1374 = xor i1 %1373, true
  %1375 = xor i1 %1374, true
  %1376 = zext i1 %1375 to i32
  %1377 = sext i32 %1376 to i64
  %1378 = call i64 @llvm.expect.i64(i64 %1377, i64 0)
  %1379 = icmp ne i64 %1378, 0
  br i1 %1379, label %1380, label %1382

1380:                                             ; preds = %1362
  %1381 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1381, ptr noundef @.str.26, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1092) #13
  unreachable

1382:                                             ; preds = %1362
  br label %1383

1383:                                             ; preds = %1382
  br label %1384

1384:                                             ; preds = %1383
  br label %1385

1385:                                             ; preds = %1384, %1350
  br label %1386

1386:                                             ; preds = %1385
  br label %1387

1387:                                             ; preds = %1386
  br label %1388

1388:                                             ; preds = %1387, %1348
  br label %1389

1389:                                             ; preds = %1388
  %1390 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1391 = zext i8 %1390 to i32
  %1392 = and i32 %1391, 1
  %1393 = icmp ne i32 %1392, 0
  %1394 = xor i1 %1393, true
  %1395 = xor i1 %1394, true
  %1396 = zext i1 %1395 to i32
  %1397 = sext i32 %1396 to i64
  %1398 = call i64 @llvm.expect.i64(i64 %1397, i64 1)
  %1399 = icmp ne i64 %1398, 0
  br i1 %1399, label %1400, label %1416

1400:                                             ; preds = %1389
  br label %1401

1401:                                             ; preds = %1400
  %1402 = load ptr, ptr %8, align 8, !tbaa !5
  %1403 = call zeroext i1 @dpl_check(ptr noundef %1402)
  %1404 = xor i1 %1403, true
  %1405 = xor i1 %1404, true
  %1406 = xor i1 %1405, true
  %1407 = zext i1 %1406 to i32
  %1408 = sext i32 %1407 to i64
  %1409 = call i64 @llvm.expect.i64(i64 %1408, i64 0)
  %1410 = icmp ne i64 %1409, 0
  br i1 %1410, label %1411, label %1413

1411:                                             ; preds = %1401
  %1412 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1412, ptr noundef @.str.27, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1094) #13
  unreachable

1413:                                             ; preds = %1401
  br label %1414

1414:                                             ; preds = %1413
  br label %1415

1415:                                             ; preds = %1414
  br label %1416

1416:                                             ; preds = %1415, %1389
  br label %1417

1417:                                             ; preds = %1416
  br label %1418

1418:                                             ; preds = %1417
  br label %1419

1419:                                             ; preds = %1418
  %1420 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1421 = zext i8 %1420 to i32
  %1422 = and i32 %1421, 1
  %1423 = icmp ne i32 %1422, 0
  %1424 = xor i1 %1423, true
  %1425 = xor i1 %1424, true
  %1426 = zext i1 %1425 to i32
  %1427 = sext i32 %1426 to i64
  %1428 = call i64 @llvm.expect.i64(i64 %1427, i64 1)
  %1429 = icmp ne i64 %1428, 0
  br i1 %1429, label %1430, label %1466

1430:                                             ; preds = %1419
  br label %1431

1431:                                             ; preds = %1430
  %1432 = load ptr, ptr %8, align 8, !tbaa !5
  %1433 = getelementptr inbounds %struct.MDBX_txn, ptr %1432, i32 0, i32 17
  %1434 = getelementptr inbounds %struct.anon.2, ptr %1433, i32 0, i32 1
  %1435 = load ptr, ptr %1434, align 8, !tbaa !11
  %1436 = getelementptr inbounds i32, ptr %1435, i64 0
  %1437 = load i32, ptr %1436, align 4, !tbaa !35
  %1438 = zext i32 %1437 to i64
  %1439 = icmp eq i64 %1438, 0
  br i1 %1439, label %1452, label %1440

1440:                                             ; preds = %1431
  %1441 = load ptr, ptr %8, align 8, !tbaa !5
  %1442 = getelementptr inbounds %struct.MDBX_txn, ptr %1441, i32 0, i32 17
  %1443 = getelementptr inbounds %struct.anon.2, ptr %1442, i32 0, i32 1
  %1444 = load ptr, ptr %1443, align 8, !tbaa !11
  %1445 = getelementptr inbounds i32, ptr %1444, i64 1
  %1446 = load i32, ptr %1445, align 4, !tbaa !35
  %1447 = load ptr, ptr %8, align 8, !tbaa !5
  %1448 = getelementptr inbounds %struct.MDBX_txn, ptr %1447, i32 0, i32 6
  %1449 = getelementptr inbounds %struct.geo, ptr %1448, i32 0, i32 5
  %1450 = load i32, ptr %1449, align 8, !tbaa !11
  %1451 = icmp ult i32 %1446, %1450
  br label %1452

1452:                                             ; preds = %1440, %1431
  %1453 = phi i1 [ true, %1431 ], [ %1451, %1440 ]
  %1454 = xor i1 %1453, true
  %1455 = xor i1 %1454, true
  %1456 = xor i1 %1455, true
  %1457 = zext i1 %1456 to i32
  %1458 = sext i32 %1457 to i64
  %1459 = call i64 @llvm.expect.i64(i64 %1458, i64 0)
  %1460 = icmp ne i64 %1459, 0
  br i1 %1460, label %1461, label %1463

1461:                                             ; preds = %1452
  %1462 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1462, ptr noundef @.str.28, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1096) #13
  unreachable

1463:                                             ; preds = %1452
  br label %1464

1464:                                             ; preds = %1463
  br label %1465

1465:                                             ; preds = %1464
  br label %1466

1466:                                             ; preds = %1465, %1419
  br label %1467

1467:                                             ; preds = %1466
  br label %1468

1468:                                             ; preds = %1467
  %1469 = load ptr, ptr %8, align 8, !tbaa !5
  %1470 = getelementptr inbounds %struct.MDBX_txn, ptr %1469, i32 0, i32 17
  %1471 = getelementptr inbounds %struct.anon.2, ptr %1470, i32 0, i32 1
  %1472 = load ptr, ptr %1471, align 8, !tbaa !11
  %1473 = getelementptr inbounds i32, ptr %1472, i64 0
  %1474 = load i32, ptr %1473, align 4, !tbaa !35
  %1475 = zext i32 %1474 to i64
  %1476 = icmp ne i64 %1475, 0
  br i1 %1476, label %1477, label %1499

1477:                                             ; preds = %1468
  %1478 = load ptr, ptr %8, align 8, !tbaa !5
  %1479 = getelementptr inbounds %struct.MDBX_txn, ptr %1478, i32 0, i32 17
  %1480 = getelementptr inbounds %struct.anon.2, ptr %1479, i32 0, i32 1
  %1481 = load ptr, ptr %1480, align 8, !tbaa !11
  %1482 = getelementptr inbounds i32, ptr %1481, i64 1
  %1483 = load i32, ptr %1482, align 4, !tbaa !35
  %1484 = load ptr, ptr %8, align 8, !tbaa !5
  %1485 = getelementptr inbounds %struct.MDBX_txn, ptr %1484, i32 0, i32 6
  %1486 = getelementptr inbounds %struct.geo, ptr %1485, i32 0, i32 5
  %1487 = load i32, ptr %1486, align 8, !tbaa !11
  %1488 = sub i32 %1487, 1
  %1489 = icmp eq i32 %1483, %1488
  %1490 = xor i1 %1489, true
  %1491 = xor i1 %1490, true
  %1492 = zext i1 %1491 to i32
  %1493 = sext i32 %1492 to i64
  %1494 = call i64 @llvm.expect.i64(i64 %1493, i64 0)
  %1495 = icmp ne i64 %1494, 0
  br i1 %1495, label %1496, label %1499

1496:                                             ; preds = %1477
  %1497 = load ptr, ptr %8, align 8, !tbaa !5
  %1498 = call zeroext i1 @txn_refund(ptr noundef %1497)
  br label %1499

1499:                                             ; preds = %1496, %1477, %1468
  br label %1500

1500:                                             ; preds = %1499
  %1501 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1502 = zext i8 %1501 to i32
  %1503 = and i32 %1502, 1
  %1504 = icmp ne i32 %1503, 0
  %1505 = xor i1 %1504, true
  %1506 = xor i1 %1505, true
  %1507 = zext i1 %1506 to i32
  %1508 = sext i32 %1507 to i64
  %1509 = call i64 @llvm.expect.i64(i64 %1508, i64 1)
  %1510 = icmp ne i64 %1509, 0
  br i1 %1510, label %1511, label %1536

1511:                                             ; preds = %1500
  br label %1512

1512:                                             ; preds = %1511
  %1513 = load ptr, ptr %8, align 8, !tbaa !5
  %1514 = getelementptr inbounds %struct.MDBX_txn, ptr %1513, i32 0, i32 17
  %1515 = getelementptr inbounds %struct.anon.2, ptr %1514, i32 0, i32 1
  %1516 = load ptr, ptr %1515, align 8, !tbaa !11
  %1517 = load ptr, ptr %8, align 8, !tbaa !5
  %1518 = getelementptr inbounds %struct.MDBX_txn, ptr %1517, i32 0, i32 6
  %1519 = getelementptr inbounds %struct.geo, ptr %1518, i32 0, i32 5
  %1520 = load i32, ptr %1519, align 8, !tbaa !11
  %1521 = sub i32 %1520, 1
  %1522 = zext i32 %1521 to i64
  %1523 = call zeroext i1 @pnl_check_allocated(ptr noundef %1516, i64 noundef %1522)
  %1524 = xor i1 %1523, true
  %1525 = xor i1 %1524, true
  %1526 = xor i1 %1525, true
  %1527 = zext i1 %1526 to i32
  %1528 = sext i32 %1527 to i64
  %1529 = call i64 @llvm.expect.i64(i64 %1528, i64 0)
  %1530 = icmp ne i64 %1529, 0
  br i1 %1530, label %1531, label %1533

1531:                                             ; preds = %1512
  %1532 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1532, ptr noundef @.str.1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1102) #13
  unreachable

1533:                                             ; preds = %1512
  br label %1534

1534:                                             ; preds = %1533
  br label %1535

1535:                                             ; preds = %1534
  br label %1536

1536:                                             ; preds = %1535, %1500
  br label %1537

1537:                                             ; preds = %1536
  br label %1538

1538:                                             ; preds = %1537
  br label %1539

1539:                                             ; preds = %1538
  %1540 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1541 = zext i8 %1540 to i32
  %1542 = and i32 %1541, 1
  %1543 = icmp ne i32 %1542, 0
  %1544 = xor i1 %1543, true
  %1545 = xor i1 %1544, true
  %1546 = zext i1 %1545 to i32
  %1547 = sext i32 %1546 to i64
  %1548 = call i64 @llvm.expect.i64(i64 %1547, i64 1)
  %1549 = icmp ne i64 %1548, 0
  br i1 %1549, label %1550, label %1571

1550:                                             ; preds = %1539
  br label %1551

1551:                                             ; preds = %1550
  %1552 = load i32, ptr %18, align 4, !tbaa !35
  %1553 = icmp eq i32 %1552, 12
  br i1 %1553, label %1557, label %1554

1554:                                             ; preds = %1551
  %1555 = load i32, ptr %18, align 4, !tbaa !35
  %1556 = icmp eq i32 %1555, 8
  br label %1557

1557:                                             ; preds = %1554, %1551
  %1558 = phi i1 [ true, %1551 ], [ %1556, %1554 ]
  %1559 = xor i1 %1558, true
  %1560 = xor i1 %1559, true
  %1561 = xor i1 %1560, true
  %1562 = zext i1 %1561 to i32
  %1563 = sext i32 %1562 to i64
  %1564 = call i64 @llvm.expect.i64(i64 %1563, i64 0)
  %1565 = icmp ne i64 %1564, 0
  br i1 %1565, label %1566, label %1568

1566:                                             ; preds = %1557
  %1567 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1567, ptr noundef @.str.29, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1106) #13
  unreachable

1568:                                             ; preds = %1557
  br label %1569

1569:                                             ; preds = %1568
  br label %1570

1570:                                             ; preds = %1569
  br label %1571

1571:                                             ; preds = %1570, %1539
  br label %1572

1572:                                             ; preds = %1571
  br label %1573

1573:                                             ; preds = %1572
  %1574 = load i8, ptr %7, align 1, !tbaa !11
  %1575 = zext i8 %1574 to i32
  %1576 = and i32 %1575, 4
  %1577 = icmp ne i32 %1576, 0
  br i1 %1577, label %1578, label %1620

1578:                                             ; preds = %1573
  %1579 = load ptr, ptr %8, align 8, !tbaa !5
  %1580 = getelementptr inbounds %struct.MDBX_txn, ptr %1579, i32 0, i32 17
  %1581 = getelementptr inbounds %struct.anon.2, ptr %1580, i32 0, i32 1
  %1582 = load ptr, ptr %1581, align 8, !tbaa !11
  %1583 = getelementptr inbounds i32, ptr %1582, i64 0
  %1584 = load i32, ptr %1583, align 4, !tbaa !35
  %1585 = zext i32 %1584 to i64
  %1586 = load ptr, ptr %9, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct.MDBX_env, ptr %1586, i32 0, i32 28
  %1588 = load i32, ptr %1587, align 8, !tbaa !41
  %1589 = udiv i32 %1588, 2
  %1590 = zext i32 %1589 to i64
  %1591 = icmp ult i64 %1585, %1590
  br i1 %1591, label %1592, label %1615

1592:                                             ; preds = %1578
  br label %1593

1593:                                             ; preds = %1592
  %1594 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1595 = zext i8 %1594 to i32
  %1596 = icmp sle i32 6, %1595
  %1597 = xor i1 %1596, true
  %1598 = xor i1 %1597, true
  %1599 = zext i1 %1598 to i32
  %1600 = sext i32 %1599 to i64
  %1601 = call i64 @llvm.expect.i64(i64 %1600, i64 0)
  %1602 = icmp ne i64 %1601, 0
  br i1 %1602, label %1603, label %1612

1603:                                             ; preds = %1593
  %1604 = load i64, ptr %17, align 8, !tbaa !9
  %1605 = load ptr, ptr %8, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.MDBX_txn, ptr %1605, i32 0, i32 17
  %1607 = getelementptr inbounds %struct.anon.2, ptr %1606, i32 0, i32 1
  %1608 = load ptr, ptr %1607, align 8, !tbaa !11
  %1609 = getelementptr inbounds i32, ptr %1608, i64 0
  %1610 = load i32, ptr %1609, align 4, !tbaa !35
  %1611 = zext i32 %1610 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1109, ptr noundef @.str.30, ptr noundef @.str.31, i64 noundef %1604, i64 noundef %1611)
  br label %1612

1612:                                             ; preds = %1603, %1593
  br label %1613

1613:                                             ; preds = %1612
  br label %1614

1614:                                             ; preds = %1613
  br label %579

1615:                                             ; preds = %1578
  %1616 = load i8, ptr %7, align 1, !tbaa !11
  %1617 = zext i8 %1616 to i32
  %1618 = sub nsw i32 %1617, 4
  %1619 = trunc i32 %1618 to i8
  store i8 %1619, ptr %7, align 1, !tbaa !11
  br label %1620

1620:                                             ; preds = %1615, %1573
  br label %1621

1621:                                             ; preds = %1910, %1620
  %1622 = load i8, ptr %7, align 1, !tbaa !11
  %1623 = zext i8 %1622 to i32
  %1624 = and i32 %1623, 2
  %1625 = icmp ne i32 %1624, 0
  br i1 %1625, label %1626, label %1653

1626:                                             ; preds = %1621
  %1627 = load i64, ptr %6, align 8, !tbaa !9
  %1628 = icmp ult i64 %1627, 2
  br i1 %1628, label %1629, label %1653

1629:                                             ; preds = %1626
  br label %1630

1630:                                             ; preds = %1629
  %1631 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1632 = zext i8 %1631 to i32
  %1633 = icmp sle i32 6, %1632
  %1634 = xor i1 %1633, true
  %1635 = xor i1 %1634, true
  %1636 = zext i1 %1635 to i32
  %1637 = sext i32 %1636 to i64
  %1638 = call i64 @llvm.expect.i64(i64 %1637, i64 0)
  %1639 = icmp ne i64 %1638, 0
  br i1 %1639, label %1640, label %1649

1640:                                             ; preds = %1630
  %1641 = load i64, ptr %17, align 8, !tbaa !9
  %1642 = load ptr, ptr %8, align 8, !tbaa !5
  %1643 = getelementptr inbounds %struct.MDBX_txn, ptr %1642, i32 0, i32 17
  %1644 = getelementptr inbounds %struct.anon.2, ptr %1643, i32 0, i32 1
  %1645 = load ptr, ptr %1644, align 8, !tbaa !11
  %1646 = getelementptr inbounds i32, ptr %1645, i64 0
  %1647 = load i32, ptr %1646, align 4, !tbaa !35
  %1648 = zext i32 %1647 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1118, ptr noundef @.str.30, ptr noundef @.str.32, i64 noundef %1641, i64 noundef %1648)
  br label %1649

1649:                                             ; preds = %1640, %1630
  br label %1650

1650:                                             ; preds = %1649
  br label %1651

1651:                                             ; preds = %1650
  %1652 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 0, ptr %1652, align 8, !tbaa !53
  br label %3058

1653:                                             ; preds = %1626, %1621
  br label %1654

1654:                                             ; preds = %1653
  %1655 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1656 = zext i8 %1655 to i32
  %1657 = and i32 %1656, 1
  %1658 = icmp ne i32 %1657, 0
  %1659 = xor i1 %1658, true
  %1660 = xor i1 %1659, true
  %1661 = zext i1 %1660 to i32
  %1662 = sext i32 %1661 to i64
  %1663 = call i64 @llvm.expect.i64(i64 %1662, i64 1)
  %1664 = icmp ne i64 %1663, 0
  br i1 %1664, label %1665, label %1683

1665:                                             ; preds = %1654
  br label %1666

1666:                                             ; preds = %1665
  %1667 = load i8, ptr %7, align 1, !tbaa !11
  %1668 = zext i8 %1667 to i32
  %1669 = and i32 %1668, 8
  %1670 = icmp ne i32 %1669, 0
  %1671 = xor i1 %1670, true
  %1672 = xor i1 %1671, true
  %1673 = xor i1 %1672, true
  %1674 = zext i1 %1673 to i32
  %1675 = sext i32 %1674 to i64
  %1676 = call i64 @llvm.expect.i64(i64 %1675, i64 0)
  %1677 = icmp ne i64 %1676, 0
  br i1 %1677, label %1678, label %1680

1678:                                             ; preds = %1666
  %1679 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1679, ptr noundef @.str.33, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1123) #13
  unreachable

1680:                                             ; preds = %1666
  br label %1681

1681:                                             ; preds = %1680
  br label %1682

1682:                                             ; preds = %1681
  br label %1683

1683:                                             ; preds = %1682, %1654
  br label %1684

1684:                                             ; preds = %1683
  br label %1685

1685:                                             ; preds = %1684
  br label %1686

1686:                                             ; preds = %1685
  %1687 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1688 = zext i8 %1687 to i32
  %1689 = and i32 %1688, 1
  %1690 = icmp ne i32 %1689, 0
  %1691 = xor i1 %1690, true
  %1692 = xor i1 %1691, true
  %1693 = zext i1 %1692 to i32
  %1694 = sext i32 %1693 to i64
  %1695 = call i64 @llvm.expect.i64(i64 %1694, i64 1)
  %1696 = icmp ne i64 %1695, 0
  br i1 %1696, label %1697, label %1713

1697:                                             ; preds = %1686
  br label %1698

1698:                                             ; preds = %1697
  %1699 = load i64, ptr %6, align 8, !tbaa !9
  %1700 = icmp ugt i64 %1699, 0
  %1701 = xor i1 %1700, true
  %1702 = xor i1 %1701, true
  %1703 = xor i1 %1702, true
  %1704 = zext i1 %1703 to i32
  %1705 = sext i32 %1704 to i64
  %1706 = call i64 @llvm.expect.i64(i64 %1705, i64 0)
  %1707 = icmp ne i64 %1706, 0
  br i1 %1707, label %1708, label %1710

1708:                                             ; preds = %1698
  %1709 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1709, ptr noundef @.str.34, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1124) #13
  unreachable

1710:                                             ; preds = %1698
  br label %1711

1711:                                             ; preds = %1710
  br label %1712

1712:                                             ; preds = %1711
  br label %1713

1713:                                             ; preds = %1712, %1686
  br label %1714

1714:                                             ; preds = %1713
  br label %1715

1715:                                             ; preds = %1714
  %1716 = load ptr, ptr %8, align 8, !tbaa !5
  %1717 = getelementptr inbounds %struct.MDBX_txn, ptr %1716, i32 0, i32 17
  %1718 = getelementptr inbounds %struct.anon.2, ptr %1717, i32 0, i32 1
  %1719 = load ptr, ptr %1718, align 8, !tbaa !11
  %1720 = getelementptr inbounds i32, ptr %1719, i64 0
  %1721 = load i32, ptr %1720, align 4, !tbaa !35
  %1722 = zext i32 %1721 to i64
  %1723 = load i64, ptr %6, align 8, !tbaa !9
  %1724 = icmp uge i64 %1722, %1723
  br i1 %1724, label %1725, label %1845

1725:                                             ; preds = %1715
  br label %1726

1726:                                             ; preds = %1725
  %1727 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1728 = zext i8 %1727 to i32
  %1729 = and i32 %1728, 1
  %1730 = icmp ne i32 %1729, 0
  %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 1)
  %1736 = icmp ne i64 %1735, 0
  br i1 %1736, label %1737, label %1783

1737:                                             ; preds = %1726
  br label %1738

1738:                                             ; preds = %1737
  %1739 = load ptr, ptr %8, align 8, !tbaa !5
  %1740 = getelementptr inbounds %struct.MDBX_txn, ptr %1739, i32 0, i32 17
  %1741 = getelementptr inbounds %struct.anon.2, ptr %1740, i32 0, i32 1
  %1742 = load ptr, ptr %1741, align 8, !tbaa !11
  %1743 = load ptr, ptr %8, align 8, !tbaa !5
  %1744 = getelementptr inbounds %struct.MDBX_txn, ptr %1743, i32 0, i32 17
  %1745 = getelementptr inbounds %struct.anon.2, ptr %1744, i32 0, i32 1
  %1746 = load ptr, ptr %1745, align 8, !tbaa !11
  %1747 = getelementptr inbounds i32, ptr %1746, i64 0
  %1748 = load i32, ptr %1747, align 4, !tbaa !35
  %1749 = zext i32 %1748 to i64
  %1750 = getelementptr inbounds i32, ptr %1742, i64 %1749
  %1751 = load i32, ptr %1750, align 4, !tbaa !35
  %1752 = load ptr, ptr %8, align 8, !tbaa !5
  %1753 = getelementptr inbounds %struct.MDBX_txn, ptr %1752, i32 0, i32 6
  %1754 = getelementptr inbounds %struct.geo, ptr %1753, i32 0, i32 5
  %1755 = load i32, ptr %1754, align 8, !tbaa !11
  %1756 = icmp ult i32 %1751, %1755
  br i1 %1756, label %1757, label %1769

1757:                                             ; preds = %1738
  %1758 = load ptr, ptr %8, align 8, !tbaa !5
  %1759 = getelementptr inbounds %struct.MDBX_txn, ptr %1758, i32 0, i32 17
  %1760 = getelementptr inbounds %struct.anon.2, ptr %1759, i32 0, i32 1
  %1761 = load ptr, ptr %1760, align 8, !tbaa !11
  %1762 = getelementptr inbounds i32, ptr %1761, i64 1
  %1763 = load i32, ptr %1762, align 4, !tbaa !35
  %1764 = load ptr, ptr %8, align 8, !tbaa !5
  %1765 = getelementptr inbounds %struct.MDBX_txn, ptr %1764, i32 0, i32 6
  %1766 = getelementptr inbounds %struct.geo, ptr %1765, i32 0, i32 5
  %1767 = load i32, ptr %1766, align 8, !tbaa !11
  %1768 = icmp ult i32 %1763, %1767
  br label %1769

1769:                                             ; preds = %1757, %1738
  %1770 = phi i1 [ false, %1738 ], [ %1768, %1757 ]
  %1771 = xor i1 %1770, true
  %1772 = xor i1 %1771, true
  %1773 = xor i1 %1772, true
  %1774 = zext i1 %1773 to i32
  %1775 = sext i32 %1774 to i64
  %1776 = call i64 @llvm.expect.i64(i64 %1775, i64 0)
  %1777 = icmp ne i64 %1776, 0
  br i1 %1777, label %1778, label %1780

1778:                                             ; preds = %1769
  %1779 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1779, ptr noundef @.str.2, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1127) #13
  unreachable

1780:                                             ; preds = %1769
  br label %1781

1781:                                             ; preds = %1780
  br label %1782

1782:                                             ; preds = %1781
  br label %1783

1783:                                             ; preds = %1782, %1726
  br label %1784

1784:                                             ; preds = %1783
  br label %1785

1785:                                             ; preds = %1784
  %1786 = load i64, ptr %6, align 8, !tbaa !9
  %1787 = icmp eq i64 %1786, 1
  %1788 = xor i1 %1787, true
  %1789 = xor i1 %1788, true
  %1790 = zext i1 %1789 to i32
  %1791 = sext i32 %1790 to i64
  %1792 = call i64 @llvm.expect.i64(i64 %1791, i64 1)
  %1793 = icmp ne i64 %1792, 0
  br i1 %1793, label %1794, label %1830

1794:                                             ; preds = %1785
  br label %1795

1795:                                             ; preds = %1794
  %1796 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %1797 = zext i8 %1796 to i32
  %1798 = and i32 %1797, 1
  %1799 = icmp ne i32 %1798, 0
  %1800 = xor i1 %1799, true
  %1801 = xor i1 %1800, true
  %1802 = zext i1 %1801 to i32
  %1803 = sext i32 %1802 to i64
  %1804 = call i64 @llvm.expect.i64(i64 %1803, i64 1)
  %1805 = icmp ne i64 %1804, 0
  br i1 %1805, label %1806, label %1825

1806:                                             ; preds = %1795
  br label %1807

1807:                                             ; preds = %1806
  %1808 = load i8, ptr %7, align 1, !tbaa !11
  %1809 = zext i8 %1808 to i32
  %1810 = and i32 %1809, 2
  %1811 = icmp ne i32 %1810, 0
  %1812 = xor i1 %1811, true
  %1813 = xor i1 %1812, true
  %1814 = xor i1 %1813, true
  %1815 = xor i1 %1814, true
  %1816 = zext i1 %1815 to i32
  %1817 = sext i32 %1816 to i64
  %1818 = call i64 @llvm.expect.i64(i64 %1817, i64 0)
  %1819 = icmp ne i64 %1818, 0
  br i1 %1819, label %1820, label %1822

1820:                                             ; preds = %1807
  %1821 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1821, ptr noundef @.str.35, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1129) #13
  unreachable

1822:                                             ; preds = %1807
  br label %1823

1823:                                             ; preds = %1822
  br label %1824

1824:                                             ; preds = %1823
  br label %1825

1825:                                             ; preds = %1824, %1795
  br label %1826

1826:                                             ; preds = %1825
  br label %1827

1827:                                             ; preds = %1826
  %1828 = load ptr, ptr %8, align 8, !tbaa !5
  %1829 = call i32 @repnl_get_single(ptr noundef %1828) #14
  store i32 %1829, ptr %13, align 4, !tbaa !35
  br label %2613

1830:                                             ; preds = %1785
  %1831 = load ptr, ptr %8, align 8, !tbaa !5
  %1832 = load i64, ptr %6, align 8, !tbaa !9
  %1833 = load i8, ptr %7, align 1, !tbaa !11
  %1834 = call i32 @repnl_get_sequence(ptr noundef %1831, i64 noundef %1832, i8 noundef zeroext %1833) #14
  store i32 %1834, ptr %13, align 4, !tbaa !35
  %1835 = load i32, ptr %13, align 4, !tbaa !35
  %1836 = icmp ne i32 %1835, 0
  %1837 = xor i1 %1836, true
  %1838 = xor i1 %1837, true
  %1839 = zext i1 %1838 to i32
  %1840 = sext i32 %1839 to i64
  %1841 = call i64 @llvm.expect.i64(i64 %1840, i64 1)
  %1842 = icmp ne i64 %1841, 0
  br i1 %1842, label %1843, label %1844

1843:                                             ; preds = %1830
  br label %2613

1844:                                             ; preds = %1830
  br label %1845

1845:                                             ; preds = %1844, %1715
  %1846 = load i8, ptr %7, align 1, !tbaa !11
  %1847 = zext i8 %1846 to i32
  %1848 = sub nsw i32 %1847, 8
  %1849 = trunc i32 %1848 to i8
  store i8 %1849, ptr %7, align 1, !tbaa !11
  %1850 = load ptr, ptr %8, align 8, !tbaa !5
  %1851 = getelementptr inbounds %struct.MDBX_txn, ptr %1850, i32 0, i32 1
  %1852 = load i32, ptr %1851, align 4, !tbaa !36
  %1853 = and i32 %1852, 128
  %1854 = icmp eq i32 %1853, 0
  br i1 %1854, label %1855, label %1878

1855:                                             ; preds = %1845
  br label %1856

1856:                                             ; preds = %1855
  %1857 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1858 = zext i8 %1857 to i32
  %1859 = icmp sle i32 6, %1858
  %1860 = xor i1 %1859, true
  %1861 = xor i1 %1860, true
  %1862 = zext i1 %1861 to i32
  %1863 = sext i32 %1862 to i64
  %1864 = call i64 @llvm.expect.i64(i64 %1863, i64 0)
  %1865 = icmp ne i64 %1864, 0
  br i1 %1865, label %1866, label %1875

1866:                                             ; preds = %1856
  %1867 = load i64, ptr %17, align 8, !tbaa !9
  %1868 = load ptr, ptr %8, align 8, !tbaa !5
  %1869 = getelementptr inbounds %struct.MDBX_txn, ptr %1868, i32 0, i32 17
  %1870 = getelementptr inbounds %struct.anon.2, ptr %1869, i32 0, i32 1
  %1871 = load ptr, ptr %1870, align 8, !tbaa !11
  %1872 = getelementptr inbounds i32, ptr %1871, i64 0
  %1873 = load i32, ptr %1872, align 4, !tbaa !35
  %1874 = zext i32 %1873 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1139, ptr noundef @.str.30, ptr noundef @.str.36, i64 noundef %1867, i64 noundef %1874)
  br label %1875

1875:                                             ; preds = %1866, %1856
  br label %1876

1876:                                             ; preds = %1875
  br label %1877

1877:                                             ; preds = %1876
  br label %579

1878:                                             ; preds = %1845
  br label %1879

1879:                                             ; preds = %1878, %1159, %680, %615, %575
  br label %1880

1880:                                             ; preds = %1879
  %1881 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1882 = zext i8 %1881 to i32
  %1883 = icmp sle i32 6, %1882
  %1884 = xor i1 %1883, true
  %1885 = xor i1 %1884, true
  %1886 = zext i1 %1885 to i32
  %1887 = sext i32 %1886 to i64
  %1888 = call i64 @llvm.expect.i64(i64 %1887, i64 0)
  %1889 = icmp ne i64 %1888, 0
  br i1 %1889, label %1890, label %1899

1890:                                             ; preds = %1880
  %1891 = load i64, ptr %17, align 8, !tbaa !9
  %1892 = load ptr, ptr %8, align 8, !tbaa !5
  %1893 = getelementptr inbounds %struct.MDBX_txn, ptr %1892, i32 0, i32 17
  %1894 = getelementptr inbounds %struct.anon.2, ptr %1893, i32 0, i32 1
  %1895 = load ptr, ptr %1894, align 8, !tbaa !11
  %1896 = getelementptr inbounds i32, ptr %1895, i64 0
  %1897 = load i32, ptr %1896, align 4, !tbaa !35
  %1898 = zext i32 %1897 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1144, ptr noundef @.str.30, ptr noundef @.str.37, i64 noundef %1891, i64 noundef %1898)
  br label %1899

1899:                                             ; preds = %1890, %1880
  br label %1900

1900:                                             ; preds = %1899
  br label %1901

1901:                                             ; preds = %1900
  %1902 = load ptr, ptr %8, align 8, !tbaa !5
  %1903 = getelementptr inbounds %struct.MDBX_txn, ptr %1902, i32 0, i32 1
  %1904 = load i32, ptr %1903, align 4, !tbaa !36
  %1905 = or i32 %1904, 128
  store i32 %1905, ptr %1903, align 4, !tbaa !36
  %1906 = load i8, ptr %7, align 1, !tbaa !11
  %1907 = zext i8 %1906 to i32
  %1908 = and i32 %1907, 8
  %1909 = icmp ne i32 %1908, 0
  br i1 %1909, label %1910, label %1911

1910:                                             ; preds = %1901
  br label %1621

1911:                                             ; preds = %1901
  %1912 = load ptr, ptr %8, align 8, !tbaa !5
  %1913 = getelementptr inbounds %struct.MDBX_txn, ptr %1912, i32 0, i32 6
  %1914 = getelementptr inbounds %struct.geo, ptr %1913, i32 0, i32 5
  %1915 = load i32, ptr %1914, align 8, !tbaa !11
  %1916 = zext i32 %1915 to i64
  %1917 = load i64, ptr %6, align 8, !tbaa !9
  %1918 = add i64 %1916, %1917
  store i64 %1918, ptr %10, align 8, !tbaa !9
  %1919 = load ptr, ptr %9, align 8, !tbaa !5
  %1920 = load ptr, ptr %8, align 8, !tbaa !5
  %1921 = getelementptr inbounds %struct.MDBX_txn, ptr %1920, i32 0, i32 17
  %1922 = getelementptr inbounds %struct.anon.2, ptr %1921, i32 0, i32 0
  call void @meta_recent(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %25, ptr noundef %1919, ptr noundef %1922)
  %1923 = load ptr, ptr %9, align 8, !tbaa !5
  %1924 = load ptr, ptr %8, align 8, !tbaa !5
  %1925 = getelementptr inbounds %struct.MDBX_txn, ptr %1924, i32 0, i32 17
  %1926 = getelementptr inbounds %struct.anon.2, ptr %1925, i32 0, i32 0
  call void @meta_prefer_steady(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %26, ptr noundef %1923, ptr noundef %1926)
  %1927 = getelementptr inbounds %struct.meta_ptr, ptr %25, i32 0, i32 1
  %1928 = load ptr, ptr %1927, align 8, !tbaa !11
  %1929 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 1
  %1930 = load ptr, ptr %1929, align 8, !tbaa !11
  %1931 = icmp ne ptr %1928, %1930
  br i1 %1931, label %1932, label %2241

1932:                                             ; preds = %1911
  %1933 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 2
  %1934 = load i64, ptr %1933, align 8, !tbaa !65
  %1935 = icmp ne i64 %1934, 0
  br i1 %1935, label %1936, label %2241

1936:                                             ; preds = %1932
  %1937 = load ptr, ptr %8, align 8, !tbaa !5
  %1938 = getelementptr inbounds %struct.MDBX_txn, ptr %1937, i32 0, i32 9
  %1939 = load ptr, ptr %1938, align 8, !tbaa !15
  %1940 = getelementptr inbounds %struct.MDBX_env, ptr %1939, i32 0, i32 40
  %1941 = getelementptr inbounds %struct.anon.17, ptr %1940, i32 0, i32 0
  %1942 = load i64, ptr %1941, align 8, !tbaa !51
  %1943 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 0
  %1944 = load i64, ptr %1943, align 8, !tbaa !67
  %1945 = icmp eq i64 %1942, %1944
  br i1 %1945, label %1946, label %2241

1946:                                             ; preds = %1936
  br label %1947

1947:                                             ; preds = %1946
  %1948 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %1949 = zext i8 %1948 to i32
  %1950 = icmp sle i32 5, %1949
  %1951 = xor i1 %1950, true
  %1952 = xor i1 %1951, true
  %1953 = zext i1 %1952 to i32
  %1954 = sext i32 %1953 to i64
  %1955 = call i64 @llvm.expect.i64(i64 %1954, i64 0)
  %1956 = icmp ne i64 %1955, 0
  br i1 %1956, label %1957, label %1968

1957:                                             ; preds = %1947
  %1958 = getelementptr inbounds %struct.meta_ptr, ptr %25, i32 0, i32 0
  %1959 = load i64, ptr %1958, align 8, !tbaa !67
  %1960 = getelementptr inbounds %struct.meta_ptr, ptr %25, i32 0, i32 1
  %1961 = load ptr, ptr %1960, align 8, !tbaa !11
  %1962 = call ptr @durable_caption(ptr noundef %1961)
  %1963 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 0
  %1964 = load i64, ptr %1963, align 8, !tbaa !67
  %1965 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 1
  %1966 = load ptr, ptr %1965, align 8, !tbaa !11
  %1967 = call ptr @durable_caption(ptr noundef %1966)
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1166, ptr noundef @.str.38, i64 noundef %1959, ptr noundef %1962, i64 noundef %1964, ptr noundef %1967)
  br label %1968

1968:                                             ; preds = %1957, %1947
  br label %1969

1969:                                             ; preds = %1968
  br label %1970

1970:                                             ; preds = %1969
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #12
  %1971 = load ptr, ptr %9, align 8, !tbaa !5
  %1972 = getelementptr inbounds %struct.MDBX_env, ptr %1971, i32 0, i32 7
  %1973 = load ptr, ptr %1972, align 8, !tbaa !49
  %1974 = getelementptr inbounds %struct.shared_lck, ptr %1973, i32 0, i32 3
  %1975 = call i32 @atomic_load32(ptr noundef %1974, i32 noundef 0)
  store i32 %1975, ptr %27, align 4, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #12
  %1976 = load ptr, ptr %9, align 8, !tbaa !5
  %1977 = getelementptr inbounds %struct.MDBX_env, ptr %1976, i32 0, i32 7
  %1978 = load ptr, ptr %1977, align 8, !tbaa !49
  %1979 = getelementptr inbounds %struct.shared_lck, ptr %1978, i32 0, i32 5
  %1980 = call i64 @atomic_load64(ptr noundef %1979, i32 noundef 0)
  store i64 %1980, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #12
  %1981 = load ptr, ptr %9, align 8, !tbaa !5
  %1982 = getelementptr inbounds %struct.MDBX_env, ptr %1981, i32 0, i32 1
  %1983 = load i32, ptr %1982, align 4, !tbaa !37
  %1984 = and i32 %1983, 1114112
  %1985 = icmp eq i32 %1984, 1114112
  br i1 %1985, label %1986, label %2075

1986:                                             ; preds = %1970
  %1987 = load i32, ptr %27, align 4, !tbaa !35
  %1988 = zext i32 %1987 to i64
  %1989 = load i64, ptr %28, align 8, !tbaa !9
  %1990 = or i64 %1988, %1989
  %1991 = icmp eq i64 %1990, 0
  br i1 %1991, label %2001, label %1992

1992:                                             ; preds = %1986
  %1993 = load i64, ptr %10, align 8, !tbaa !9
  %1994 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 1
  %1995 = load ptr, ptr %1994, align 8, !tbaa !11
  %1996 = getelementptr inbounds %struct.meta, ptr %1995, i32 0, i32 5
  %1997 = getelementptr inbounds %struct.geo, ptr %1996, i32 0, i32 4
  %1998 = load i32, ptr %1997, align 4, !tbaa !11
  %1999 = zext i32 %1998 to i64
  %2000 = icmp uge i64 %1993, %1999
  br i1 %2000, label %2001, label %2075

2001:                                             ; preds = %1992, %1986
  %2002 = load ptr, ptr %9, align 8, !tbaa !5
  %2003 = load ptr, ptr %8, align 8, !tbaa !5
  %2004 = getelementptr inbounds %struct.MDBX_txn, ptr %2003, i32 0, i32 9
  %2005 = load ptr, ptr %2004, align 8, !tbaa !15
  %2006 = getelementptr inbounds %struct.MDBX_env, ptr %2005, i32 0, i32 40
  %2007 = getelementptr inbounds %struct.anon.17, ptr %2006, i32 0, i32 0
  %2008 = load i64, ptr %2007, align 8, !tbaa !51
  %2009 = call i32 @meta_wipe_steady(ptr noundef %2002, i64 noundef %2008)
  %2010 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %2009, ptr %2010, align 8, !tbaa !53
  br label %2011

2011:                                             ; preds = %2001
  %2012 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %2013 = zext i8 %2012 to i32
  %2014 = icmp sle i32 5, %2013
  %2015 = xor i1 %2014, true
  %2016 = xor i1 %2015, true
  %2017 = zext i1 %2016 to i32
  %2018 = sext i32 %2017 to i64
  %2019 = call i64 @llvm.expect.i64(i64 %2018, i64 0)
  %2020 = icmp ne i64 %2019, 0
  br i1 %2020, label %2021, label %2024

2021:                                             ; preds = %2011
  %2022 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2023 = load i32, ptr %2022, align 8, !tbaa !53
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1186, ptr noundef @.str.39, i32 noundef %2023)
  br label %2024

2024:                                             ; preds = %2021, %2011
  br label %2025

2025:                                             ; preds = %2024
  br label %2026

2026:                                             ; preds = %2025
  %2027 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2028 = load i32, ptr %2027, align 8, !tbaa !53
  %2029 = icmp ne i32 %2028, 0
  %2030 = xor i1 %2029, true
  %2031 = xor i1 %2030, true
  %2032 = zext i1 %2031 to i32
  %2033 = sext i32 %2032 to i64
  %2034 = call i64 @llvm.expect.i64(i64 %2033, i64 0)
  %2035 = icmp ne i64 %2034, 0
  br i1 %2035, label %2036, label %2037

2036:                                             ; preds = %2026
  store i32 34, ptr %31, align 4
  br label %2238

2037:                                             ; preds = %2026
  br label %2038

2038:                                             ; preds = %2037
  %2039 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2040 = zext i8 %2039 to i32
  %2041 = and i32 %2040, 1
  %2042 = icmp ne i32 %2041, 0
  %2043 = xor i1 %2042, true
  %2044 = xor i1 %2043, true
  %2045 = zext i1 %2044 to i32
  %2046 = sext i32 %2045 to i64
  %2047 = call i64 @llvm.expect.i64(i64 %2046, i64 1)
  %2048 = icmp ne i64 %2047, 0
  br i1 %2048, label %2049, label %2072

2049:                                             ; preds = %2038
  br label %2050

2050:                                             ; preds = %2049
  %2051 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 1
  %2052 = load ptr, ptr %2051, align 8, !tbaa !11
  %2053 = load ptr, ptr %9, align 8, !tbaa !5
  %2054 = load ptr, ptr %8, align 8, !tbaa !5
  %2055 = getelementptr inbounds %struct.MDBX_txn, ptr %2054, i32 0, i32 17
  %2056 = getelementptr inbounds %struct.anon.2, ptr %2055, i32 0, i32 0
  call void @meta_prefer_steady(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %30, ptr noundef %2053, ptr noundef %2056)
  %2057 = getelementptr inbounds %struct.meta_ptr, ptr %30, i32 0, i32 1
  %2058 = load ptr, ptr %2057, align 8, !tbaa !11
  %2059 = icmp ne ptr %2052, %2058
  %2060 = xor i1 %2059, true
  %2061 = xor i1 %2060, true
  %2062 = xor i1 %2061, true
  %2063 = zext i1 %2062 to i32
  %2064 = sext i32 %2063 to i64
  %2065 = call i64 @llvm.expect.i64(i64 %2064, i64 0)
  %2066 = icmp ne i64 %2065, 0
  br i1 %2066, label %2067, label %2069

2067:                                             ; preds = %2050
  %2068 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2068, ptr noundef @.str.40, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1189) #13
  unreachable

2069:                                             ; preds = %2050
  br label %2070

2070:                                             ; preds = %2069
  br label %2071

2071:                                             ; preds = %2070
  br label %2072

2072:                                             ; preds = %2071, %2038
  br label %2073

2073:                                             ; preds = %2072
  br label %2074

2074:                                             ; preds = %2073
  store i32 32, ptr %31, align 4
  br label %2238

2075:                                             ; preds = %1992, %1970
  %2076 = load i32, ptr %27, align 4, !tbaa !35
  %2077 = icmp ne i32 %2076, 0
  br i1 %2077, label %2078, label %2087

2078:                                             ; preds = %2075
  %2079 = load ptr, ptr %9, align 8, !tbaa !5
  %2080 = getelementptr inbounds %struct.MDBX_env, ptr %2079, i32 0, i32 7
  %2081 = load ptr, ptr %2080, align 8, !tbaa !49
  %2082 = getelementptr inbounds %struct.shared_lck, ptr %2081, i32 0, i32 14
  %2083 = call i64 @atomic_load64(ptr noundef %2082, i32 noundef 0)
  %2084 = load i32, ptr %27, align 4, !tbaa !35
  %2085 = zext i32 %2084 to i64
  %2086 = icmp uge i64 %2083, %2085
  br i1 %2086, label %2128, label %2087

2087:                                             ; preds = %2078, %2075
  %2088 = load i64, ptr %28, align 8, !tbaa !9
  %2089 = icmp ne i64 %2088, 0
  br i1 %2089, label %2090, label %2103

2090:                                             ; preds = %2087
  %2091 = load ptr, ptr %9, align 8, !tbaa !5
  %2092 = getelementptr inbounds %struct.MDBX_env, ptr %2091, i32 0, i32 7
  %2093 = load ptr, ptr %2092, align 8, !tbaa !49
  %2094 = getelementptr inbounds %struct.shared_lck, ptr %2093, i32 0, i32 13
  %2095 = call i64 @atomic_load64(ptr noundef %2094, i32 noundef 0)
  store i64 %2095, ptr %29, align 8, !tbaa !9
  %2096 = icmp ne i64 %2095, 0
  br i1 %2096, label %2097, label %2103

2097:                                             ; preds = %2090
  %2098 = call i64 @osal_monotime()
  %2099 = load i64, ptr %29, align 8, !tbaa !9
  %2100 = sub i64 %2098, %2099
  %2101 = load i64, ptr %28, align 8, !tbaa !9
  %2102 = icmp uge i64 %2100, %2101
  br i1 %2102, label %2128, label %2103

2103:                                             ; preds = %2097, %2090, %2087
  %2104 = load i64, ptr %10, align 8, !tbaa !9
  %2105 = load ptr, ptr %8, align 8, !tbaa !5
  %2106 = getelementptr inbounds %struct.MDBX_txn, ptr %2105, i32 0, i32 6
  %2107 = getelementptr inbounds %struct.geo, ptr %2106, i32 0, i32 3
  %2108 = load i32, ptr %2107, align 8, !tbaa !61
  %2109 = zext i32 %2108 to i64
  %2110 = icmp uge i64 %2104, %2109
  br i1 %2110, label %2128, label %2111

2111:                                             ; preds = %2103
  %2112 = load i64, ptr %6, align 8, !tbaa !9
  %2113 = icmp eq i64 %2112, 0
  br i1 %2113, label %2122, label %2114

2114:                                             ; preds = %2111
  %2115 = load i64, ptr %10, align 8, !tbaa !9
  %2116 = load ptr, ptr %8, align 8, !tbaa !5
  %2117 = getelementptr inbounds %struct.MDBX_txn, ptr %2116, i32 0, i32 6
  %2118 = getelementptr inbounds %struct.geo, ptr %2117, i32 0, i32 4
  %2119 = load i32, ptr %2118, align 4, !tbaa !11
  %2120 = zext i32 %2119 to i64
  %2121 = icmp uge i64 %2115, %2120
  br i1 %2121, label %2122, label %2237

2122:                                             ; preds = %2114, %2111
  %2123 = load i32, ptr %27, align 4, !tbaa !35
  %2124 = zext i32 %2123 to i64
  %2125 = load i64, ptr %28, align 8, !tbaa !9
  %2126 = or i64 %2124, %2125
  %2127 = icmp eq i64 %2126, 0
  br i1 %2127, label %2128, label %2237

2128:                                             ; preds = %2122, %2103, %2097, %2078
  call void @llvm.lifetime.start.p0(i64 224, ptr %32) #12
  %2129 = getelementptr inbounds %struct.meta_ptr, ptr %25, i32 0, i32 1
  %2130 = load ptr, ptr %2129, align 8, !tbaa !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %2130, i64 224, i1 false), !tbaa.struct !68
  %2131 = load ptr, ptr %9, align 8, !tbaa !5
  %2132 = load ptr, ptr %9, align 8, !tbaa !5
  %2133 = getelementptr inbounds %struct.MDBX_env, ptr %2132, i32 0, i32 1
  %2134 = load i32, ptr %2133, align 4, !tbaa !37
  %2135 = and i32 %2134, 524288
  %2136 = load ptr, ptr %8, align 8, !tbaa !5
  %2137 = getelementptr inbounds %struct.MDBX_txn, ptr %2136, i32 0, i32 17
  %2138 = getelementptr inbounds %struct.anon.2, ptr %2137, i32 0, i32 0
  %2139 = call i32 @dxb_sync_locked(ptr noundef %2131, i32 noundef %2135, ptr noundef %32, ptr noundef %2138)
  %2140 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %2139, ptr %2140, align 8, !tbaa !53
  br label %2141

2141:                                             ; preds = %2128
  %2142 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %2143 = zext i8 %2142 to i32
  %2144 = icmp sle i32 5, %2143
  %2145 = xor i1 %2144, true
  %2146 = xor i1 %2145, true
  %2147 = zext i1 %2146 to i32
  %2148 = sext i32 %2147 to i64
  %2149 = call i64 @llvm.expect.i64(i64 %2148, i64 0)
  %2150 = icmp ne i64 %2149, 0
  br i1 %2150, label %2151, label %2154

2151:                                             ; preds = %2141
  %2152 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2153 = load i32, ptr %2152, align 8, !tbaa !53
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1203, ptr noundef @.str.41, i32 noundef %2153)
  br label %2154

2154:                                             ; preds = %2151, %2141
  br label %2155

2155:                                             ; preds = %2154
  br label %2156

2156:                                             ; preds = %2155
  br label %2157

2157:                                             ; preds = %2156
  %2158 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2159 = zext i8 %2158 to i32
  %2160 = and i32 %2159, 1
  %2161 = icmp ne i32 %2160, 0
  %2162 = xor i1 %2161, true
  %2163 = xor i1 %2162, true
  %2164 = zext i1 %2163 to i32
  %2165 = sext i32 %2164 to i64
  %2166 = call i64 @llvm.expect.i64(i64 %2165, i64 1)
  %2167 = icmp ne i64 %2166, 0
  br i1 %2167, label %2168, label %2185

2168:                                             ; preds = %2157
  br label %2169

2169:                                             ; preds = %2168
  %2170 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2171 = load i32, ptr %2170, align 8, !tbaa !53
  %2172 = icmp ne i32 %2171, -1
  %2173 = xor i1 %2172, true
  %2174 = xor i1 %2173, true
  %2175 = xor i1 %2174, true
  %2176 = zext i1 %2175 to i32
  %2177 = sext i32 %2176 to i64
  %2178 = call i64 @llvm.expect.i64(i64 %2177, i64 0)
  %2179 = icmp ne i64 %2178, 0
  br i1 %2179, label %2180, label %2182

2180:                                             ; preds = %2169
  %2181 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2181, ptr noundef @.str.42, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1204) #13
  unreachable

2182:                                             ; preds = %2169
  br label %2183

2183:                                             ; preds = %2182
  br label %2184

2184:                                             ; preds = %2183
  br label %2185

2185:                                             ; preds = %2184, %2157
  br label %2186

2186:                                             ; preds = %2185
  br label %2187

2187:                                             ; preds = %2186
  %2188 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2189 = load i32, ptr %2188, align 8, !tbaa !53
  %2190 = icmp ne i32 %2189, 0
  %2191 = xor i1 %2190, true
  %2192 = xor i1 %2191, true
  %2193 = zext i1 %2192 to i32
  %2194 = sext i32 %2193 to i64
  %2195 = call i64 @llvm.expect.i64(i64 %2194, i64 0)
  %2196 = icmp ne i64 %2195, 0
  br i1 %2196, label %2197, label %2198

2197:                                             ; preds = %2187
  store i32 34, ptr %31, align 4
  br label %2236

2198:                                             ; preds = %2187
  br label %2199

2199:                                             ; preds = %2198
  %2200 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2201 = zext i8 %2200 to i32
  %2202 = and i32 %2201, 1
  %2203 = icmp ne i32 %2202, 0
  %2204 = xor i1 %2203, true
  %2205 = xor i1 %2204, true
  %2206 = zext i1 %2205 to i32
  %2207 = sext i32 %2206 to i64
  %2208 = call i64 @llvm.expect.i64(i64 %2207, i64 1)
  %2209 = icmp ne i64 %2208, 0
  br i1 %2209, label %2210, label %2233

2210:                                             ; preds = %2199
  br label %2211

2211:                                             ; preds = %2210
  %2212 = getelementptr inbounds %struct.meta_ptr, ptr %26, i32 0, i32 1
  %2213 = load ptr, ptr %2212, align 8, !tbaa !11
  %2214 = load ptr, ptr %9, align 8, !tbaa !5
  %2215 = load ptr, ptr %8, align 8, !tbaa !5
  %2216 = getelementptr inbounds %struct.MDBX_txn, ptr %2215, i32 0, i32 17
  %2217 = getelementptr inbounds %struct.anon.2, ptr %2216, i32 0, i32 0
  call void @meta_prefer_steady(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %33, ptr noundef %2214, ptr noundef %2217)
  %2218 = getelementptr inbounds %struct.meta_ptr, ptr %33, i32 0, i32 1
  %2219 = load ptr, ptr %2218, align 8, !tbaa !11
  %2220 = icmp ne ptr %2213, %2219
  %2221 = xor i1 %2220, true
  %2222 = xor i1 %2221, true
  %2223 = xor i1 %2222, true
  %2224 = zext i1 %2223 to i32
  %2225 = sext i32 %2224 to i64
  %2226 = call i64 @llvm.expect.i64(i64 %2225, i64 0)
  %2227 = icmp ne i64 %2226, 0
  br i1 %2227, label %2228, label %2230

2228:                                             ; preds = %2211
  %2229 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2229, ptr noundef @.str.40, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1207) #13
  unreachable

2230:                                             ; preds = %2211
  br label %2231

2231:                                             ; preds = %2230
  br label %2232

2232:                                             ; preds = %2231
  br label %2233

2233:                                             ; preds = %2232, %2199
  br label %2234

2234:                                             ; preds = %2233
  br label %2235

2235:                                             ; preds = %2234
  store i32 32, ptr %31, align 4
  br label %2236

2236:                                             ; preds = %2235, %2197
  call void @llvm.lifetime.end.p0(i64 224, ptr %32) #12
  br label %2238

2237:                                             ; preds = %2122, %2114
  store i32 0, ptr %31, align 4
  br label %2238

2238:                                             ; preds = %2237, %2236, %2074, %2036
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #12
  %2239 = load i32, ptr %31, align 4
  switch i32 %2239, label %3082 [
    i32 0, label %2240
    i32 32, label %513
    i32 34, label %2824
  ]

2240:                                             ; preds = %2238
  br label %2241

2241:                                             ; preds = %2240, %1936, %1932, %1911
  %2242 = load ptr, ptr %9, align 8, !tbaa !5
  %2243 = getelementptr inbounds %struct.MDBX_env, ptr %2242, i32 0, i32 7
  %2244 = load ptr, ptr %2243, align 8, !tbaa !49
  %2245 = getelementptr inbounds %struct.shared_lck, ptr %2244, i32 0, i32 21
  %2246 = call i32 @atomic_load32(ptr noundef %2245, i32 noundef 1)
  %2247 = icmp eq i32 1, %2246
  %2248 = xor i1 %2247, true
  %2249 = xor i1 %2248, true
  %2250 = zext i1 %2249 to i32
  %2251 = sext i32 %2250 to i64
  %2252 = call i64 @llvm.expect.i64(i64 %2251, i64 0)
  %2253 = icmp ne i64 %2252, 0
  br i1 %2253, label %2254, label %2258

2254:                                             ; preds = %2241
  %2255 = load ptr, ptr %8, align 8, !tbaa !5
  %2256 = call zeroext i1 @txn_gc_detent(ptr noundef %2255)
  br i1 %2256, label %2257, label %2258

2257:                                             ; preds = %2254
  br label %516

2258:                                             ; preds = %2254, %2241
  %2259 = load i8, ptr %7, align 1, !tbaa !11
  %2260 = zext i8 %2259 to i32
  %2261 = and i32 %2260, 2
  %2262 = icmp ne i32 %2261, 0
  br i1 %2262, label %2302, label %2263

2263:                                             ; preds = %2258
  %2264 = load i64, ptr %10, align 8, !tbaa !9
  %2265 = load ptr, ptr %8, align 8, !tbaa !5
  %2266 = getelementptr inbounds %struct.MDBX_txn, ptr %2265, i32 0, i32 6
  %2267 = getelementptr inbounds %struct.geo, ptr %2266, i32 0, i32 4
  %2268 = load i32, ptr %2267, align 4, !tbaa !11
  %2269 = zext i32 %2268 to i64
  %2270 = icmp ule i64 %2264, %2269
  br i1 %2270, label %2271, label %2302

2271:                                             ; preds = %2263
  br label %2272

2272:                                             ; preds = %2271
  %2273 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2274 = zext i8 %2273 to i32
  %2275 = and i32 %2274, 1
  %2276 = icmp ne i32 %2275, 0
  %2277 = xor i1 %2276, true
  %2278 = xor i1 %2277, true
  %2279 = zext i1 %2278 to i32
  %2280 = sext i32 %2279 to i64
  %2281 = call i64 @llvm.expect.i64(i64 %2280, i64 1)
  %2282 = icmp ne i64 %2281, 0
  br i1 %2282, label %2283, label %2299

2283:                                             ; preds = %2272
  br label %2284

2284:                                             ; preds = %2283
  %2285 = load i32, ptr %13, align 4, !tbaa !35
  %2286 = icmp eq i32 %2285, 0
  %2287 = xor i1 %2286, true
  %2288 = xor i1 %2287, true
  %2289 = xor i1 %2288, true
  %2290 = zext i1 %2289 to i32
  %2291 = sext i32 %2290 to i64
  %2292 = call i64 @llvm.expect.i64(i64 %2291, i64 0)
  %2293 = icmp ne i64 %2292, 0
  br i1 %2293, label %2294, label %2296

2294:                                             ; preds = %2284
  %2295 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2295, ptr noundef @.str.43, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1218) #13
  unreachable

2296:                                             ; preds = %2284
  br label %2297

2297:                                             ; preds = %2296
  br label %2298

2298:                                             ; preds = %2297
  br label %2299

2299:                                             ; preds = %2298, %2272
  br label %2300

2300:                                             ; preds = %2299
  br label %2301

2301:                                             ; preds = %2300
  br label %2613

2302:                                             ; preds = %2263, %2258
  %2303 = load ptr, ptr %8, align 8, !tbaa !5
  %2304 = getelementptr inbounds %struct.MDBX_txn, ptr %2303, i32 0, i32 7
  %2305 = load i64, ptr %2304, align 8, !tbaa !52
  %2306 = load ptr, ptr %8, align 8, !tbaa !5
  %2307 = getelementptr inbounds %struct.MDBX_txn, ptr %2306, i32 0, i32 9
  %2308 = load ptr, ptr %2307, align 8, !tbaa !15
  %2309 = getelementptr inbounds %struct.MDBX_env, ptr %2308, i32 0, i32 40
  %2310 = getelementptr inbounds %struct.anon.17, ptr %2309, i32 0, i32 0
  %2311 = load i64, ptr %2310, align 8, !tbaa !51
  %2312 = sub i64 %2305, %2311
  %2313 = icmp ugt i64 %2312, 1
  br i1 %2313, label %2314, label %2324

2314:                                             ; preds = %2302
  %2315 = load ptr, ptr %9, align 8, !tbaa !5
  %2316 = load ptr, ptr %8, align 8, !tbaa !5
  %2317 = getelementptr inbounds %struct.MDBX_txn, ptr %2316, i32 0, i32 9
  %2318 = load ptr, ptr %2317, align 8, !tbaa !15
  %2319 = getelementptr inbounds %struct.MDBX_env, ptr %2318, i32 0, i32 40
  %2320 = getelementptr inbounds %struct.anon.17, ptr %2319, i32 0, i32 0
  %2321 = load i64, ptr %2320, align 8, !tbaa !51
  %2322 = call zeroext i1 @mvcc_kick_laggards(ptr noundef %2315, i64 noundef %2321)
  br i1 %2322, label %2323, label %2324

2323:                                             ; preds = %2314
  br label %513

2324:                                             ; preds = %2314, %2302
  br label %2325

2325:                                             ; preds = %2324, %321
  br label %2326

2326:                                             ; preds = %2325
  %2327 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2328 = zext i8 %2327 to i32
  %2329 = and i32 %2328, 1
  %2330 = icmp ne i32 %2329, 0
  %2331 = xor i1 %2330, true
  %2332 = xor i1 %2331, true
  %2333 = zext i1 %2332 to i32
  %2334 = sext i32 %2333 to i64
  %2335 = call i64 @llvm.expect.i64(i64 %2334, i64 1)
  %2336 = icmp ne i64 %2335, 0
  br i1 %2336, label %2337, label %2353

2337:                                             ; preds = %2326
  br label %2338

2338:                                             ; preds = %2337
  %2339 = load i32, ptr %13, align 4, !tbaa !35
  %2340 = icmp eq i32 %2339, 0
  %2341 = xor i1 %2340, true
  %2342 = xor i1 %2341, true
  %2343 = xor i1 %2342, true
  %2344 = zext i1 %2343 to i32
  %2345 = sext i32 %2344 to i64
  %2346 = call i64 @llvm.expect.i64(i64 %2345, i64 0)
  %2347 = icmp ne i64 %2346, 0
  br i1 %2347, label %2348, label %2350

2348:                                             ; preds = %2338
  %2349 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2349, ptr noundef @.str.43, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1228) #13
  unreachable

2350:                                             ; preds = %2338
  br label %2351

2351:                                             ; preds = %2350
  br label %2352

2352:                                             ; preds = %2351
  br label %2353

2353:                                             ; preds = %2352, %2326
  br label %2354

2354:                                             ; preds = %2353
  br label %2355

2355:                                             ; preds = %2354
  %2356 = load i8, ptr %7, align 1, !tbaa !11
  %2357 = zext i8 %2356 to i32
  %2358 = and i32 %2357, 2
  %2359 = icmp ne i32 %2358, 0
  br i1 %2359, label %2360, label %2362

2360:                                             ; preds = %2355
  %2361 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30798, ptr %2361, align 8, !tbaa !53
  br label %2824

2362:                                             ; preds = %2355
  %2363 = load ptr, ptr %8, align 8, !tbaa !5
  %2364 = getelementptr inbounds %struct.MDBX_txn, ptr %2363, i32 0, i32 6
  %2365 = getelementptr inbounds %struct.geo, ptr %2364, i32 0, i32 5
  %2366 = load i32, ptr %2365, align 8, !tbaa !11
  %2367 = zext i32 %2366 to i64
  %2368 = load i64, ptr %6, align 8, !tbaa !9
  %2369 = add i64 %2367, %2368
  store i64 %2369, ptr %10, align 8, !tbaa !9
  %2370 = load i64, ptr %10, align 8, !tbaa !9
  %2371 = load ptr, ptr %8, align 8, !tbaa !5
  %2372 = getelementptr inbounds %struct.MDBX_txn, ptr %2371, i32 0, i32 6
  %2373 = getelementptr inbounds %struct.geo, ptr %2372, i32 0, i32 4
  %2374 = load i32, ptr %2373, align 4, !tbaa !11
  %2375 = zext i32 %2374 to i64
  %2376 = icmp ule i64 %2370, %2375
  br i1 %2376, label %2377, label %2378

2377:                                             ; preds = %2362
  br label %2613

2378:                                             ; preds = %2362
  %2379 = load i64, ptr %10, align 8, !tbaa !9
  %2380 = load ptr, ptr %8, align 8, !tbaa !5
  %2381 = getelementptr inbounds %struct.MDBX_txn, ptr %2380, i32 0, i32 6
  %2382 = getelementptr inbounds %struct.geo, ptr %2381, i32 0, i32 3
  %2383 = load i32, ptr %2382, align 8, !tbaa !61
  %2384 = zext i32 %2383 to i64
  %2385 = icmp ugt i64 %2379, %2384
  br i1 %2385, label %2392, label %2386

2386:                                             ; preds = %2378
  %2387 = load ptr, ptr %8, align 8, !tbaa !5
  %2388 = getelementptr inbounds %struct.MDBX_txn, ptr %2387, i32 0, i32 6
  %2389 = getelementptr inbounds %struct.geo, ptr %2388, i32 0, i32 0
  %2390 = load i16, ptr %2389, align 8, !tbaa !69
  %2391 = icmp ne i16 %2390, 0
  br i1 %2391, label %2413, label %2392

2392:                                             ; preds = %2386, %2378
  br label %2393

2393:                                             ; preds = %2392
  %2394 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %2395 = zext i8 %2394 to i32
  %2396 = icmp sle i32 3, %2395
  %2397 = xor i1 %2396, true
  %2398 = xor i1 %2397, true
  %2399 = zext i1 %2398 to i32
  %2400 = sext i32 %2399 to i64
  %2401 = call i64 @llvm.expect.i64(i64 %2400, i64 0)
  %2402 = icmp ne i64 %2401, 0
  br i1 %2402, label %2403, label %2409

2403:                                             ; preds = %2393
  %2404 = load i64, ptr %10, align 8, !tbaa !9
  %2405 = load ptr, ptr %8, align 8, !tbaa !5
  %2406 = getelementptr inbounds %struct.MDBX_txn, ptr %2405, i32 0, i32 6
  %2407 = getelementptr inbounds %struct.geo, ptr %2406, i32 0, i32 3
  %2408 = load i32, ptr %2407, align 8, !tbaa !61
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1247, ptr noundef @.str.44, i64 noundef %2404, i32 noundef %2408)
  br label %2409

2409:                                             ; preds = %2403, %2393
  br label %2410

2410:                                             ; preds = %2409
  br label %2411

2411:                                             ; preds = %2410
  %2412 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 -30792, ptr %2412, align 8, !tbaa !53
  br label %2824

2413:                                             ; preds = %2386
  br label %2414

2414:                                             ; preds = %2413
  %2415 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2416 = zext i8 %2415 to i32
  %2417 = and i32 %2416, 1
  %2418 = icmp ne i32 %2417, 0
  %2419 = xor i1 %2418, true
  %2420 = xor i1 %2419, true
  %2421 = zext i1 %2420 to i32
  %2422 = sext i32 %2421 to i64
  %2423 = call i64 @llvm.expect.i64(i64 %2422, i64 1)
  %2424 = icmp ne i64 %2423, 0
  br i1 %2424, label %2425, label %2446

2425:                                             ; preds = %2414
  br label %2426

2426:                                             ; preds = %2425
  %2427 = load i64, ptr %10, align 8, !tbaa !9
  %2428 = load ptr, ptr %8, align 8, !tbaa !5
  %2429 = getelementptr inbounds %struct.MDBX_txn, ptr %2428, i32 0, i32 6
  %2430 = getelementptr inbounds %struct.geo, ptr %2429, i32 0, i32 4
  %2431 = load i32, ptr %2430, align 4, !tbaa !11
  %2432 = zext i32 %2431 to i64
  %2433 = icmp ugt i64 %2427, %2432
  %2434 = xor i1 %2433, true
  %2435 = xor i1 %2434, true
  %2436 = xor i1 %2435, true
  %2437 = zext i1 %2436 to i32
  %2438 = sext i32 %2437 to i64
  %2439 = call i64 @llvm.expect.i64(i64 %2438, i64 0)
  %2440 = icmp ne i64 %2439, 0
  br i1 %2440, label %2441, label %2443

2441:                                             ; preds = %2426
  %2442 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2442, ptr noundef @.str.45, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1252) #13
  unreachable

2443:                                             ; preds = %2426
  br label %2444

2444:                                             ; preds = %2443
  br label %2445

2445:                                             ; preds = %2444
  br label %2446

2446:                                             ; preds = %2445, %2414
  br label %2447

2447:                                             ; preds = %2446
  br label %2448

2448:                                             ; preds = %2447
  %2449 = load ptr, ptr %8, align 8, !tbaa !5
  %2450 = getelementptr inbounds %struct.MDBX_txn, ptr %2449, i32 0, i32 6
  %2451 = getelementptr inbounds %struct.geo, ptr %2450, i32 0, i32 0
  %2452 = load i16, ptr %2451, align 8, !tbaa !69
  %2453 = call i32 @pv2pages(i16 noundef zeroext %2452) #16
  %2454 = zext i32 %2453 to i64
  store i64 %2454, ptr %34, align 8, !tbaa !9
  %2455 = load ptr, ptr %9, align 8, !tbaa !5
  %2456 = load i64, ptr %10, align 8, !tbaa !9
  %2457 = load i64, ptr %34, align 8, !tbaa !9
  %2458 = add i64 %2456, %2457
  %2459 = load i64, ptr %10, align 8, !tbaa !9
  %2460 = load i64, ptr %34, align 8, !tbaa !9
  %2461 = urem i64 %2459, %2460
  %2462 = sub i64 %2458, %2461
  %2463 = trunc i64 %2462 to i32
  %2464 = zext i32 %2463 to i64
  %2465 = call i32 @pgno_align2os_pgno(ptr noundef %2455, i64 noundef %2464) #15
  %2466 = zext i32 %2465 to i64
  store i64 %2466, ptr %35, align 8, !tbaa !9
  %2467 = load i64, ptr %35, align 8, !tbaa !9
  %2468 = load ptr, ptr %8, align 8, !tbaa !5
  %2469 = getelementptr inbounds %struct.MDBX_txn, ptr %2468, i32 0, i32 6
  %2470 = getelementptr inbounds %struct.geo, ptr %2469, i32 0, i32 3
  %2471 = load i32, ptr %2470, align 8, !tbaa !61
  %2472 = zext i32 %2471 to i64
  %2473 = icmp ugt i64 %2467, %2472
  br i1 %2473, label %2474, label %2480

2474:                                             ; preds = %2448
  %2475 = load ptr, ptr %8, align 8, !tbaa !5
  %2476 = getelementptr inbounds %struct.MDBX_txn, ptr %2475, i32 0, i32 6
  %2477 = getelementptr inbounds %struct.geo, ptr %2476, i32 0, i32 3
  %2478 = load i32, ptr %2477, align 8, !tbaa !61
  %2479 = zext i32 %2478 to i64
  store i64 %2479, ptr %35, align 8, !tbaa !9
  br label %2480

2480:                                             ; preds = %2474, %2448
  br label %2481

2481:                                             ; preds = %2480
  %2482 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2483 = zext i8 %2482 to i32
  %2484 = and i32 %2483, 1
  %2485 = icmp ne i32 %2484, 0
  %2486 = xor i1 %2485, true
  %2487 = xor i1 %2486, true
  %2488 = zext i1 %2487 to i32
  %2489 = sext i32 %2488 to i64
  %2490 = call i64 @llvm.expect.i64(i64 %2489, i64 1)
  %2491 = icmp ne i64 %2490, 0
  br i1 %2491, label %2492, label %2509

2492:                                             ; preds = %2481
  br label %2493

2493:                                             ; preds = %2492
  %2494 = load i64, ptr %35, align 8, !tbaa !9
  %2495 = load i64, ptr %10, align 8, !tbaa !9
  %2496 = icmp uge i64 %2494, %2495
  %2497 = xor i1 %2496, true
  %2498 = xor i1 %2497, true
  %2499 = xor i1 %2498, true
  %2500 = zext i1 %2499 to i32
  %2501 = sext i32 %2500 to i64
  %2502 = call i64 @llvm.expect.i64(i64 %2501, i64 0)
  %2503 = icmp ne i64 %2502, 0
  br i1 %2503, label %2504, label %2506

2504:                                             ; preds = %2493
  %2505 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2505, ptr noundef @.str.46, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1258) #13
  unreachable

2506:                                             ; preds = %2493
  br label %2507

2507:                                             ; preds = %2506
  br label %2508

2508:                                             ; preds = %2507
  br label %2509

2509:                                             ; preds = %2508, %2481
  br label %2510

2510:                                             ; preds = %2509
  br label %2511

2511:                                             ; preds = %2510
  br label %2512

2512:                                             ; preds = %2511
  %2513 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %2514 = zext i8 %2513 to i32
  %2515 = icmp sle i32 4, %2514
  %2516 = xor i1 %2515, true
  %2517 = xor i1 %2516, true
  %2518 = zext i1 %2517 to i32
  %2519 = sext i32 %2518 to i64
  %2520 = call i64 @llvm.expect.i64(i64 %2519, i64 0)
  %2521 = icmp ne i64 %2520, 0
  br i1 %2521, label %2522, label %2531

2522:                                             ; preds = %2512
  %2523 = load i64, ptr %35, align 8, !tbaa !9
  %2524 = load i64, ptr %35, align 8, !tbaa !9
  %2525 = load ptr, ptr %8, align 8, !tbaa !5
  %2526 = getelementptr inbounds %struct.MDBX_txn, ptr %2525, i32 0, i32 6
  %2527 = getelementptr inbounds %struct.geo, ptr %2526, i32 0, i32 4
  %2528 = load i32, ptr %2527, align 4, !tbaa !11
  %2529 = zext i32 %2528 to i64
  %2530 = sub i64 %2524, %2529
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1260, ptr noundef @.str.47, i64 noundef %2523, i64 noundef %2530)
  br label %2531

2531:                                             ; preds = %2522, %2512
  br label %2532

2532:                                             ; preds = %2531
  br label %2533

2533:                                             ; preds = %2532
  %2534 = load ptr, ptr %9, align 8, !tbaa !5
  %2535 = load ptr, ptr %8, align 8, !tbaa !5
  %2536 = getelementptr inbounds %struct.MDBX_txn, ptr %2535, i32 0, i32 6
  %2537 = getelementptr inbounds %struct.geo, ptr %2536, i32 0, i32 5
  %2538 = load i32, ptr %2537, align 8, !tbaa !11
  %2539 = load i64, ptr %35, align 8, !tbaa !9
  %2540 = trunc i64 %2539 to i32
  %2541 = load ptr, ptr %8, align 8, !tbaa !5
  %2542 = getelementptr inbounds %struct.MDBX_txn, ptr %2541, i32 0, i32 6
  %2543 = getelementptr inbounds %struct.geo, ptr %2542, i32 0, i32 3
  %2544 = load i32, ptr %2543, align 8, !tbaa !61
  %2545 = call i32 @dxb_resize(ptr noundef %2534, i32 noundef %2538, i32 noundef %2540, i32 noundef %2544, i32 noundef 0)
  %2546 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 %2545, ptr %2546, align 8, !tbaa !53
  %2547 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2548 = load i32, ptr %2547, align 8, !tbaa !53
  %2549 = icmp ne i32 %2548, 0
  br i1 %2549, label %2550, label %2575

2550:                                             ; preds = %2533
  br label %2551

2551:                                             ; preds = %2550
  %2552 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %2553 = zext i8 %2552 to i32
  %2554 = icmp sle i32 1, %2553
  %2555 = xor i1 %2554, true
  %2556 = xor i1 %2555, true
  %2557 = zext i1 %2556 to i32
  %2558 = sext i32 %2557 to i64
  %2559 = call i64 @llvm.expect.i64(i64 %2558, i64 0)
  %2560 = icmp ne i64 %2559, 0
  br i1 %2560, label %2561, label %2572

2561:                                             ; preds = %2551
  %2562 = load i64, ptr %35, align 8, !tbaa !9
  %2563 = load i64, ptr %35, align 8, !tbaa !9
  %2564 = load ptr, ptr %8, align 8, !tbaa !5
  %2565 = getelementptr inbounds %struct.MDBX_txn, ptr %2564, i32 0, i32 6
  %2566 = getelementptr inbounds %struct.geo, ptr %2565, i32 0, i32 4
  %2567 = load i32, ptr %2566, align 4, !tbaa !11
  %2568 = zext i32 %2567 to i64
  %2569 = sub i64 %2563, %2568
  %2570 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2571 = load i32, ptr %2570, align 8, !tbaa !53
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1263, ptr noundef @.str.48, i64 noundef %2562, i64 noundef %2569, i32 noundef %2571)
  br label %2572

2572:                                             ; preds = %2561, %2551
  br label %2573

2573:                                             ; preds = %2572
  br label %2574

2574:                                             ; preds = %2573
  br label %2824

2575:                                             ; preds = %2533
  %2576 = load i64, ptr %35, align 8, !tbaa !9
  %2577 = trunc i64 %2576 to i32
  %2578 = load ptr, ptr %9, align 8, !tbaa !5
  %2579 = getelementptr inbounds %struct.MDBX_env, ptr %2578, i32 0, i32 39
  %2580 = load ptr, ptr %2579, align 8, !tbaa !70
  %2581 = getelementptr inbounds %struct.MDBX_txn, ptr %2580, i32 0, i32 6
  %2582 = getelementptr inbounds %struct.geo, ptr %2581, i32 0, i32 4
  store i32 %2577, ptr %2582, align 4, !tbaa !11
  br label %2583

2583:                                             ; preds = %2575
  %2584 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2585 = zext i8 %2584 to i32
  %2586 = and i32 %2585, 1
  %2587 = icmp ne i32 %2586, 0
  %2588 = xor i1 %2587, true
  %2589 = xor i1 %2588, true
  %2590 = zext i1 %2589 to i32
  %2591 = sext i32 %2590 to i64
  %2592 = call i64 @llvm.expect.i64(i64 %2591, i64 1)
  %2593 = icmp ne i64 %2592, 0
  br i1 %2593, label %2594, label %2610

2594:                                             ; preds = %2583
  br label %2595

2595:                                             ; preds = %2594
  %2596 = load i32, ptr %13, align 4, !tbaa !35
  %2597 = icmp eq i32 %2596, 0
  %2598 = xor i1 %2597, true
  %2599 = xor i1 %2598, true
  %2600 = xor i1 %2599, true
  %2601 = zext i1 %2600 to i32
  %2602 = sext i32 %2601 to i64
  %2603 = call i64 @llvm.expect.i64(i64 %2602, i64 0)
  %2604 = icmp ne i64 %2603, 0
  br i1 %2604, label %2605, label %2607

2605:                                             ; preds = %2595
  %2606 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2606, ptr noundef @.str.43, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1267) #13
  unreachable

2607:                                             ; preds = %2595
  br label %2608

2608:                                             ; preds = %2607
  br label %2609

2609:                                             ; preds = %2608
  br label %2610

2610:                                             ; preds = %2609, %2583
  br label %2611

2611:                                             ; preds = %2610
  br label %2612

2612:                                             ; preds = %2611
  br label %2613

2613:                                             ; preds = %2612, %2377, %2301, %1843, %1827, %1037, %1022, %221
  %2614 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  store i32 0, ptr %2614, align 8, !tbaa !53
  %2615 = load i8, ptr %7, align 1, !tbaa !11
  %2616 = zext i8 %2615 to i32
  %2617 = and i32 %2616, 2
  %2618 = icmp eq i32 %2617, 0
  %2619 = xor i1 %2618, true
  %2620 = xor i1 %2619, true
  %2621 = zext i1 %2620 to i32
  %2622 = sext i32 %2621 to i64
  %2623 = call i64 @llvm.expect.i64(i64 %2622, i64 1)
  %2624 = icmp ne i64 %2623, 0
  br i1 %2624, label %2625, label %3057

2625:                                             ; preds = %2613
  %2626 = load i32, ptr %13, align 4, !tbaa !35
  %2627 = icmp ne i32 %2626, 0
  br i1 %2627, label %2628, label %2711

2628:                                             ; preds = %2625
  br label %2629

2629:                                             ; preds = %2628
  %2630 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2631 = zext i8 %2630 to i32
  %2632 = and i32 %2631, 1
  %2633 = icmp ne i32 %2632, 0
  %2634 = xor i1 %2633, true
  %2635 = xor i1 %2634, true
  %2636 = zext i1 %2635 to i32
  %2637 = sext i32 %2636 to i64
  %2638 = call i64 @llvm.expect.i64(i64 %2637, i64 1)
  %2639 = icmp ne i64 %2638, 0
  br i1 %2639, label %2640, label %2669

2640:                                             ; preds = %2629
  br label %2641

2641:                                             ; preds = %2640
  %2642 = load i32, ptr %13, align 4, !tbaa !35
  %2643 = zext i32 %2642 to i64
  %2644 = load i64, ptr %6, align 8, !tbaa !9
  %2645 = add i64 %2643, %2644
  %2646 = load ptr, ptr %8, align 8, !tbaa !5
  %2647 = getelementptr inbounds %struct.MDBX_txn, ptr %2646, i32 0, i32 6
  %2648 = getelementptr inbounds %struct.geo, ptr %2647, i32 0, i32 5
  %2649 = load i32, ptr %2648, align 8, !tbaa !11
  %2650 = zext i32 %2649 to i64
  %2651 = icmp ule i64 %2645, %2650
  br i1 %2651, label %2652, label %2655

2652:                                             ; preds = %2641
  %2653 = load i32, ptr %13, align 4, !tbaa !35
  %2654 = icmp uge i32 %2653, 3
  br label %2655

2655:                                             ; preds = %2652, %2641
  %2656 = phi i1 [ false, %2641 ], [ %2654, %2652 ]
  %2657 = xor i1 %2656, true
  %2658 = xor i1 %2657, true
  %2659 = xor i1 %2658, true
  %2660 = zext i1 %2659 to i32
  %2661 = sext i32 %2660 to i64
  %2662 = call i64 @llvm.expect.i64(i64 %2661, i64 0)
  %2663 = icmp ne i64 %2662, 0
  br i1 %2663, label %2664, label %2666

2664:                                             ; preds = %2655
  %2665 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2665, ptr noundef @.str.49, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1275) #13
  unreachable

2666:                                             ; preds = %2655
  br label %2667

2667:                                             ; preds = %2666
  br label %2668

2668:                                             ; preds = %2667
  br label %2669

2669:                                             ; preds = %2668, %2629
  br label %2670

2670:                                             ; preds = %2669
  br label %2671

2671:                                             ; preds = %2670
  br label %2672

2672:                                             ; preds = %2671
  %2673 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2674 = zext i8 %2673 to i32
  %2675 = and i32 %2674, 1
  %2676 = icmp ne i32 %2675, 0
  %2677 = xor i1 %2676, true
  %2678 = xor i1 %2677, true
  %2679 = zext i1 %2678 to i32
  %2680 = sext i32 %2679 to i64
  %2681 = call i64 @llvm.expect.i64(i64 %2680, i64 1)
  %2682 = icmp ne i64 %2681, 0
  br i1 %2682, label %2683, label %2708

2683:                                             ; preds = %2672
  br label %2684

2684:                                             ; preds = %2683
  %2685 = load ptr, ptr %8, align 8, !tbaa !5
  %2686 = getelementptr inbounds %struct.MDBX_txn, ptr %2685, i32 0, i32 17
  %2687 = getelementptr inbounds %struct.anon.2, ptr %2686, i32 0, i32 1
  %2688 = load ptr, ptr %2687, align 8, !tbaa !11
  %2689 = load ptr, ptr %8, align 8, !tbaa !5
  %2690 = getelementptr inbounds %struct.MDBX_txn, ptr %2689, i32 0, i32 6
  %2691 = getelementptr inbounds %struct.geo, ptr %2690, i32 0, i32 5
  %2692 = load i32, ptr %2691, align 8, !tbaa !11
  %2693 = sub i32 %2692, 1
  %2694 = zext i32 %2693 to i64
  %2695 = call zeroext i1 @pnl_check_allocated(ptr noundef %2688, i64 noundef %2694)
  %2696 = xor i1 %2695, true
  %2697 = xor i1 %2696, true
  %2698 = xor i1 %2697, true
  %2699 = zext i1 %2698 to i32
  %2700 = sext i32 %2699 to i64
  %2701 = call i64 @llvm.expect.i64(i64 %2700, i64 0)
  %2702 = icmp ne i64 %2701, 0
  br i1 %2702, label %2703, label %2705

2703:                                             ; preds = %2684
  %2704 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2704, ptr noundef @.str.1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1276) #13
  unreachable

2705:                                             ; preds = %2684
  br label %2706

2706:                                             ; preds = %2705
  br label %2707

2707:                                             ; preds = %2706
  br label %2708

2708:                                             ; preds = %2707, %2672
  br label %2709

2709:                                             ; preds = %2708
  br label %2710

2710:                                             ; preds = %2709
  br label %2803

2711:                                             ; preds = %2625
  %2712 = load ptr, ptr %8, align 8, !tbaa !5
  %2713 = getelementptr inbounds %struct.MDBX_txn, ptr %2712, i32 0, i32 6
  %2714 = getelementptr inbounds %struct.geo, ptr %2713, i32 0, i32 5
  %2715 = load i32, ptr %2714, align 8, !tbaa !11
  store i32 %2715, ptr %13, align 4, !tbaa !35
  %2716 = load i64, ptr %6, align 8, !tbaa !9
  %2717 = trunc i64 %2716 to i32
  %2718 = load ptr, ptr %8, align 8, !tbaa !5
  %2719 = getelementptr inbounds %struct.MDBX_txn, ptr %2718, i32 0, i32 6
  %2720 = getelementptr inbounds %struct.geo, ptr %2719, i32 0, i32 5
  %2721 = load i32, ptr %2720, align 8, !tbaa !11
  %2722 = add i32 %2721, %2717
  store i32 %2722, ptr %2720, align 8, !tbaa !11
  br label %2723

2723:                                             ; preds = %2711
  %2724 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2725 = zext i8 %2724 to i32
  %2726 = and i32 %2725, 1
  %2727 = icmp ne i32 %2726, 0
  %2728 = xor i1 %2727, true
  %2729 = xor i1 %2728, true
  %2730 = zext i1 %2729 to i32
  %2731 = sext i32 %2730 to i64
  %2732 = call i64 @llvm.expect.i64(i64 %2731, i64 1)
  %2733 = icmp ne i64 %2732, 0
  br i1 %2733, label %2734, label %2757

2734:                                             ; preds = %2723
  br label %2735

2735:                                             ; preds = %2734
  %2736 = load ptr, ptr %8, align 8, !tbaa !5
  %2737 = getelementptr inbounds %struct.MDBX_txn, ptr %2736, i32 0, i32 6
  %2738 = getelementptr inbounds %struct.geo, ptr %2737, i32 0, i32 5
  %2739 = load i32, ptr %2738, align 8, !tbaa !11
  %2740 = load ptr, ptr %8, align 8, !tbaa !5
  %2741 = getelementptr inbounds %struct.MDBX_txn, ptr %2740, i32 0, i32 6
  %2742 = getelementptr inbounds %struct.geo, ptr %2741, i32 0, i32 4
  %2743 = load i32, ptr %2742, align 4, !tbaa !11
  %2744 = icmp ule i32 %2739, %2743
  %2745 = xor i1 %2744, true
  %2746 = xor i1 %2745, true
  %2747 = xor i1 %2746, true
  %2748 = zext i1 %2747 to i32
  %2749 = sext i32 %2748 to i64
  %2750 = call i64 @llvm.expect.i64(i64 %2749, i64 0)
  %2751 = icmp ne i64 %2750, 0
  br i1 %2751, label %2752, label %2754

2752:                                             ; preds = %2735
  %2753 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2753, ptr noundef @.str.50, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1280) #13
  unreachable

2754:                                             ; preds = %2735
  br label %2755

2755:                                             ; preds = %2754
  br label %2756

2756:                                             ; preds = %2755
  br label %2757

2757:                                             ; preds = %2756, %2723
  br label %2758

2758:                                             ; preds = %2757
  br label %2759

2759:                                             ; preds = %2758
  br label %2760

2760:                                             ; preds = %2759
  %2761 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2762 = zext i8 %2761 to i32
  %2763 = and i32 %2762, 1
  %2764 = icmp ne i32 %2763, 0
  %2765 = xor i1 %2764, true
  %2766 = xor i1 %2765, true
  %2767 = zext i1 %2766 to i32
  %2768 = sext i32 %2767 to i64
  %2769 = call i64 @llvm.expect.i64(i64 %2768, i64 1)
  %2770 = icmp ne i64 %2769, 0
  br i1 %2770, label %2771, label %2800

2771:                                             ; preds = %2760
  br label %2772

2772:                                             ; preds = %2771
  %2773 = load i32, ptr %13, align 4, !tbaa !35
  %2774 = icmp uge i32 %2773, 3
  br i1 %2774, label %2775, label %2786

2775:                                             ; preds = %2772
  %2776 = load i32, ptr %13, align 4, !tbaa !35
  %2777 = zext i32 %2776 to i64
  %2778 = load i64, ptr %6, align 8, !tbaa !9
  %2779 = add i64 %2777, %2778
  %2780 = load ptr, ptr %8, align 8, !tbaa !5
  %2781 = getelementptr inbounds %struct.MDBX_txn, ptr %2780, i32 0, i32 6
  %2782 = getelementptr inbounds %struct.geo, ptr %2781, i32 0, i32 5
  %2783 = load i32, ptr %2782, align 8, !tbaa !11
  %2784 = zext i32 %2783 to i64
  %2785 = icmp ule i64 %2779, %2784
  br label %2786

2786:                                             ; preds = %2775, %2772
  %2787 = phi i1 [ false, %2772 ], [ %2785, %2775 ]
  %2788 = xor i1 %2787, true
  %2789 = xor i1 %2788, true
  %2790 = xor i1 %2789, true
  %2791 = zext i1 %2790 to i32
  %2792 = sext i32 %2791 to i64
  %2793 = call i64 @llvm.expect.i64(i64 %2792, i64 0)
  %2794 = icmp ne i64 %2793, 0
  br i1 %2794, label %2795, label %2797

2795:                                             ; preds = %2786
  %2796 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2796, ptr noundef @.str.51, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1281) #13
  unreachable

2797:                                             ; preds = %2786
  br label %2798

2798:                                             ; preds = %2797
  br label %2799

2799:                                             ; preds = %2798
  br label %2800

2800:                                             ; preds = %2799, %2760
  br label %2801

2801:                                             ; preds = %2800
  br label %2802

2802:                                             ; preds = %2801
  br label %2803

2803:                                             ; preds = %2802, %2710
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #12
  %2804 = load ptr, ptr %9, align 8, !tbaa !5
  %2805 = load ptr, ptr %8, align 8, !tbaa !5
  %2806 = load ptr, ptr %5, align 8, !tbaa !5
  %2807 = load i32, ptr %13, align 4, !tbaa !35
  %2808 = load i64, ptr %6, align 8, !tbaa !9
  %2809 = call { ptr, i32 } @page_alloc_finalize(ptr noundef %2804, ptr noundef %2805, ptr noundef %2806, i32 noundef %2807, i64 noundef %2808)
  %2810 = getelementptr inbounds { ptr, i32 }, ptr %36, i32 0, i32 0
  %2811 = extractvalue { ptr, i32 } %2809, 0
  store ptr %2811, ptr %2810, align 8
  %2812 = getelementptr inbounds { ptr, i32 }, ptr %36, i32 0, i32 1
  %2813 = extractvalue { ptr, i32 } %2809, 1
  store i32 %2813, ptr %2812, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %4, ptr align 8 %36, i64 16, i1 false), !tbaa.struct !71
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #12
  %2814 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2815 = load i32, ptr %2814, align 8, !tbaa !53
  %2816 = icmp ne i32 %2815, 0
  %2817 = xor i1 %2816, true
  %2818 = xor i1 %2817, true
  %2819 = zext i1 %2818 to i32
  %2820 = sext i32 %2819 to i64
  %2821 = call i64 @llvm.expect.i64(i64 %2820, i64 0)
  %2822 = icmp ne i64 %2821, 0
  br i1 %2822, label %2823, label %3044

2823:                                             ; preds = %2803
  br label %2824

2824:                                             ; preds = %2823, %2574, %2411, %2360, %2238, %1346, %1213, %1196, %773, %724, %640, %605, %533
  br label %2825

2825:                                             ; preds = %2824
  %2826 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2827 = zext i8 %2826 to i32
  %2828 = and i32 %2827, 1
  %2829 = icmp ne i32 %2828, 0
  %2830 = xor i1 %2829, true
  %2831 = xor i1 %2830, true
  %2832 = zext i1 %2831 to i32
  %2833 = sext i32 %2832 to i64
  %2834 = call i64 @llvm.expect.i64(i64 %2833, i64 1)
  %2835 = icmp ne i64 %2834, 0
  br i1 %2835, label %2836, label %2853

2836:                                             ; preds = %2825
  br label %2837

2837:                                             ; preds = %2836
  %2838 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2839 = load i32, ptr %2838, align 8, !tbaa !53
  %2840 = icmp ne i32 %2839, 0
  %2841 = xor i1 %2840, true
  %2842 = xor i1 %2841, true
  %2843 = xor i1 %2842, true
  %2844 = zext i1 %2843 to i32
  %2845 = sext i32 %2844 to i64
  %2846 = call i64 @llvm.expect.i64(i64 %2845, i64 0)
  %2847 = icmp ne i64 %2846, 0
  br i1 %2847, label %2848, label %2850

2848:                                             ; preds = %2837
  %2849 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2849, ptr noundef @.str.52, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1287) #13
  unreachable

2850:                                             ; preds = %2837
  br label %2851

2851:                                             ; preds = %2850
  br label %2852

2852:                                             ; preds = %2851
  br label %2853

2853:                                             ; preds = %2852, %2825
  br label %2854

2854:                                             ; preds = %2853
  br label %2855

2855:                                             ; preds = %2854
  br label %2856

2856:                                             ; preds = %2855
  %2857 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !20
  %2858 = zext i8 %2857 to i32
  %2859 = and i32 %2858, 1
  %2860 = icmp ne i32 %2859, 0
  %2861 = xor i1 %2860, true
  %2862 = xor i1 %2861, true
  %2863 = zext i1 %2862 to i32
  %2864 = sext i32 %2863 to i64
  %2865 = call i64 @llvm.expect.i64(i64 %2864, i64 1)
  %2866 = icmp ne i64 %2865, 0
  br i1 %2866, label %2867, label %2892

2867:                                             ; preds = %2856
  br label %2868

2868:                                             ; preds = %2867
  %2869 = load ptr, ptr %8, align 8, !tbaa !5
  %2870 = getelementptr inbounds %struct.MDBX_txn, ptr %2869, i32 0, i32 17
  %2871 = getelementptr inbounds %struct.anon.2, ptr %2870, i32 0, i32 1
  %2872 = load ptr, ptr %2871, align 8, !tbaa !11
  %2873 = load ptr, ptr %8, align 8, !tbaa !5
  %2874 = getelementptr inbounds %struct.MDBX_txn, ptr %2873, i32 0, i32 6
  %2875 = getelementptr inbounds %struct.geo, ptr %2874, i32 0, i32 5
  %2876 = load i32, ptr %2875, align 8, !tbaa !11
  %2877 = sub i32 %2876, 1
  %2878 = zext i32 %2877 to i64
  %2879 = call zeroext i1 @pnl_check_allocated(ptr noundef %2872, i64 noundef %2878)
  %2880 = xor i1 %2879, true
  %2881 = xor i1 %2880, true
  %2882 = xor i1 %2881, true
  %2883 = zext i1 %2882 to i32
  %2884 = sext i32 %2883 to i64
  %2885 = call i64 @llvm.expect.i64(i64 %2884, i64 0)
  %2886 = icmp ne i64 %2885, 0
  br i1 %2886, label %2887, label %2889

2887:                                             ; preds = %2868
  %2888 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2888, ptr noundef @.str.1, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1288) #13
  unreachable

2889:                                             ; preds = %2868
  br label %2890

2890:                                             ; preds = %2889
  br label %2891

2891:                                             ; preds = %2890
  br label %2892

2892:                                             ; preds = %2891, %2856
  br label %2893

2893:                                             ; preds = %2892
  br label %2894

2894:                                             ; preds = %2893
  %2895 = load i8, ptr %7, align 1, !tbaa !11
  %2896 = zext i8 %2895 to i32
  %2897 = and i32 %2896, 1
  %2898 = icmp ne i32 %2897, 0
  br i1 %2898, label %2899, label %2900

2899:                                             ; preds = %2894
  store i32 5, ptr %37, align 4, !tbaa !35
  br label %2912

2900:                                             ; preds = %2894
  %2901 = load i8, ptr %7, align 1, !tbaa !11
  %2902 = zext i8 %2901 to i32
  %2903 = and i32 %2902, 2
  %2904 = icmp ne i32 %2903, 0
  br i1 %2904, label %2905, label %2906

2905:                                             ; preds = %2900
  store i32 3, ptr %37, align 4, !tbaa !35
  br label %2911

2906:                                             ; preds = %2900
  %2907 = load ptr, ptr %8, align 8, !tbaa !5
  %2908 = getelementptr inbounds %struct.MDBX_txn, ptr %2907, i32 0, i32 1
  %2909 = load i32, ptr %2908, align 4, !tbaa !36
  %2910 = or i32 %2909, 2
  store i32 %2910, ptr %2908, align 4, !tbaa !36
  store i32 1, ptr %37, align 4, !tbaa !35
  br label %2911

2911:                                             ; preds = %2906, %2905
  br label %2912

2912:                                             ; preds = %2911, %2899
  %2913 = load i32, ptr %37, align 4, !tbaa !35
  %2914 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %2915 = zext i8 %2914 to i32
  %2916 = icmp sle i32 %2913, %2915
  %2917 = xor i1 %2916, true
  %2918 = xor i1 %2917, true
  %2919 = zext i1 %2918 to i32
  %2920 = sext i32 %2919 to i64
  %2921 = call i64 @llvm.expect.i64(i64 %2920, i64 0)
  %2922 = icmp ne i64 %2921, 0
  br i1 %2922, label %2923, label %3042

2923:                                             ; preds = %2912
  %2924 = load i64, ptr %6, align 8, !tbaa !9
  %2925 = icmp ne i64 %2924, 0
  br i1 %2925, label %2926, label %2987

2926:                                             ; preds = %2923
  %2927 = load i32, ptr %37, align 4, !tbaa !35
  %2928 = load i8, ptr %7, align 1, !tbaa !11
  %2929 = zext i8 %2928 to i32
  %2930 = and i32 %2929, 2
  %2931 = icmp ne i32 %2930, 0
  %2932 = zext i1 %2931 to i64
  %2933 = select i1 %2931, ptr @.str.54, ptr @.str.55
  %2934 = load i64, ptr %6, align 8, !tbaa !9
  %2935 = load i8, ptr %7, align 1, !tbaa !11
  %2936 = zext i8 %2935 to i32
  %2937 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2938 = load i32, ptr %2937, align 8, !tbaa !53
  %2939 = load ptr, ptr %8, align 8, !tbaa !5
  %2940 = getelementptr inbounds %struct.MDBX_txn, ptr %2939, i32 0, i32 1
  %2941 = load i32, ptr %2940, align 4, !tbaa !36
  %2942 = load ptr, ptr %8, align 8, !tbaa !5
  %2943 = getelementptr inbounds %struct.MDBX_txn, ptr %2942, i32 0, i32 17
  %2944 = getelementptr inbounds %struct.anon.2, ptr %2943, i32 0, i32 1
  %2945 = load ptr, ptr %2944, align 8, !tbaa !11
  %2946 = getelementptr inbounds i32, ptr %2945, i64 0
  %2947 = load i32, ptr %2946, align 4, !tbaa !35
  %2948 = zext i32 %2947 to i64
  %2949 = load ptr, ptr %8, align 8, !tbaa !5
  %2950 = getelementptr inbounds %struct.MDBX_txn, ptr %2949, i32 0, i32 17
  %2951 = getelementptr inbounds %struct.anon.2, ptr %2950, i32 0, i32 10
  %2952 = load i64, ptr %2951, align 8, !tbaa !11
  %2953 = load ptr, ptr %8, align 8, !tbaa !5
  %2954 = getelementptr inbounds %struct.MDBX_txn, ptr %2953, i32 0, i32 10
  %2955 = load ptr, ptr %2954, align 8, !tbaa !38
  %2956 = getelementptr inbounds %struct.tree, ptr %2955, i64 0
  %2957 = getelementptr inbounds %struct.tree, ptr %2956, i32 0, i32 1
  %2958 = load i16, ptr %2957, align 2, !tbaa !72
  %2959 = zext i16 %2958 to i32
  %2960 = load ptr, ptr %8, align 8, !tbaa !5
  %2961 = getelementptr inbounds %struct.MDBX_txn, ptr %2960, i32 0, i32 10
  %2962 = load ptr, ptr %2961, align 8, !tbaa !38
  %2963 = getelementptr inbounds %struct.tree, ptr %2962, i64 0
  %2964 = getelementptr inbounds %struct.tree, ptr %2963, i32 0, i32 4
  %2965 = load i32, ptr %2964, align 4, !tbaa !39
  %2966 = zext i32 %2965 to i64
  %2967 = load ptr, ptr %8, align 8, !tbaa !5
  %2968 = getelementptr inbounds %struct.MDBX_txn, ptr %2967, i32 0, i32 10
  %2969 = load ptr, ptr %2968, align 8, !tbaa !38
  %2970 = getelementptr inbounds %struct.tree, ptr %2969, i64 0
  %2971 = getelementptr inbounds %struct.tree, ptr %2970, i32 0, i32 5
  %2972 = load i32, ptr %2971, align 4, !tbaa !73
  %2973 = zext i32 %2972 to i64
  %2974 = load ptr, ptr %8, align 8, !tbaa !5
  %2975 = getelementptr inbounds %struct.MDBX_txn, ptr %2974, i32 0, i32 10
  %2976 = load ptr, ptr %2975, align 8, !tbaa !38
  %2977 = getelementptr inbounds %struct.tree, ptr %2976, i64 0
  %2978 = getelementptr inbounds %struct.tree, ptr %2977, i32 0, i32 6
  %2979 = load i32, ptr %2978, align 4, !tbaa !74
  %2980 = zext i32 %2979 to i64
  %2981 = load ptr, ptr %8, align 8, !tbaa !5
  %2982 = getelementptr inbounds %struct.MDBX_txn, ptr %2981, i32 0, i32 10
  %2983 = load ptr, ptr %2982, align 8, !tbaa !38
  %2984 = getelementptr inbounds %struct.tree, ptr %2983, i64 0
  %2985 = getelementptr inbounds %struct.tree, ptr %2984, i32 0, i32 8
  %2986 = load i64, ptr %2985, align 4, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef %2927, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1300, ptr noundef @.str.53, ptr noundef %2933, i64 noundef %2934, i32 noundef %2936, i32 noundef %2938, i32 noundef %2941, i64 noundef %2948, i64 noundef %2952, i32 noundef %2959, i64 noundef %2966, i64 noundef %2973, i64 noundef %2980, i64 noundef %2986)
  br label %3041

2987:                                             ; preds = %2923
  %2988 = load i32, ptr %37, align 4, !tbaa !35
  %2989 = load i8, ptr %7, align 1, !tbaa !11
  %2990 = zext i8 %2989 to i32
  %2991 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %2992 = load i32, ptr %2991, align 8, !tbaa !53
  %2993 = load ptr, ptr %8, align 8, !tbaa !5
  %2994 = getelementptr inbounds %struct.MDBX_txn, ptr %2993, i32 0, i32 1
  %2995 = load i32, ptr %2994, align 4, !tbaa !36
  %2996 = load ptr, ptr %8, align 8, !tbaa !5
  %2997 = getelementptr inbounds %struct.MDBX_txn, ptr %2996, i32 0, i32 17
  %2998 = getelementptr inbounds %struct.anon.2, ptr %2997, i32 0, i32 1
  %2999 = load ptr, ptr %2998, align 8, !tbaa !11
  %3000 = getelementptr inbounds i32, ptr %2999, i64 0
  %3001 = load i32, ptr %3000, align 4, !tbaa !35
  %3002 = zext i32 %3001 to i64
  %3003 = load ptr, ptr %8, align 8, !tbaa !5
  %3004 = getelementptr inbounds %struct.MDBX_txn, ptr %3003, i32 0, i32 17
  %3005 = getelementptr inbounds %struct.anon.2, ptr %3004, i32 0, i32 10
  %3006 = load i64, ptr %3005, align 8, !tbaa !11
  %3007 = load ptr, ptr %8, align 8, !tbaa !5
  %3008 = getelementptr inbounds %struct.MDBX_txn, ptr %3007, i32 0, i32 10
  %3009 = load ptr, ptr %3008, align 8, !tbaa !38
  %3010 = getelementptr inbounds %struct.tree, ptr %3009, i64 0
  %3011 = getelementptr inbounds %struct.tree, ptr %3010, i32 0, i32 1
  %3012 = load i16, ptr %3011, align 2, !tbaa !72
  %3013 = zext i16 %3012 to i32
  %3014 = load ptr, ptr %8, align 8, !tbaa !5
  %3015 = getelementptr inbounds %struct.MDBX_txn, ptr %3014, i32 0, i32 10
  %3016 = load ptr, ptr %3015, align 8, !tbaa !38
  %3017 = getelementptr inbounds %struct.tree, ptr %3016, i64 0
  %3018 = getelementptr inbounds %struct.tree, ptr %3017, i32 0, i32 4
  %3019 = load i32, ptr %3018, align 4, !tbaa !39
  %3020 = zext i32 %3019 to i64
  %3021 = load ptr, ptr %8, align 8, !tbaa !5
  %3022 = getelementptr inbounds %struct.MDBX_txn, ptr %3021, i32 0, i32 10
  %3023 = load ptr, ptr %3022, align 8, !tbaa !38
  %3024 = getelementptr inbounds %struct.tree, ptr %3023, i64 0
  %3025 = getelementptr inbounds %struct.tree, ptr %3024, i32 0, i32 5
  %3026 = load i32, ptr %3025, align 4, !tbaa !73
  %3027 = zext i32 %3026 to i64
  %3028 = load ptr, ptr %8, align 8, !tbaa !5
  %3029 = getelementptr inbounds %struct.MDBX_txn, ptr %3028, i32 0, i32 10
  %3030 = load ptr, ptr %3029, align 8, !tbaa !38
  %3031 = getelementptr inbounds %struct.tree, ptr %3030, i64 0
  %3032 = getelementptr inbounds %struct.tree, ptr %3031, i32 0, i32 6
  %3033 = load i32, ptr %3032, align 4, !tbaa !74
  %3034 = zext i32 %3033 to i64
  %3035 = load ptr, ptr %8, align 8, !tbaa !5
  %3036 = getelementptr inbounds %struct.MDBX_txn, ptr %3035, i32 0, i32 10
  %3037 = load ptr, ptr %3036, align 8, !tbaa !38
  %3038 = getelementptr inbounds %struct.tree, ptr %3037, i64 0
  %3039 = getelementptr inbounds %struct.tree, ptr %3038, i32 0, i32 8
  %3040 = load i64, ptr %3039, align 4, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef %2988, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1309, ptr noundef @.str.56, i32 noundef %2990, i32 noundef %2992, i32 noundef %2995, i64 noundef %3002, i64 noundef %3006, i32 noundef %3013, i64 noundef %3020, i64 noundef %3027, i64 noundef %3034, i64 noundef %3040)
  br label %3041

3041:                                             ; preds = %2987, %2926
  br label %3042

3042:                                             ; preds = %3041, %2912
  %3043 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 0
  store ptr null, ptr %3043, align 8, !tbaa !76
  br label %3044

3044:                                             ; preds = %3042, %2803
  %3045 = load i64, ptr %6, align 8, !tbaa !9
  %3046 = icmp ugt i64 %3045, 1
  br i1 %3046, label %3047, label %3056

3047:                                             ; preds = %3044
  %3048 = load i64, ptr %11, align 8, !tbaa !9
  %3049 = call i64 @monotime_since_cached(i64 noundef %3048, ptr noundef %12)
  %3050 = load ptr, ptr %8, align 8, !tbaa !5
  %3051 = getelementptr inbounds %struct.MDBX_txn, ptr %3050, i32 0, i32 17
  %3052 = getelementptr inbounds %struct.anon.2, ptr %3051, i32 0, i32 2
  %3053 = getelementptr inbounds %struct.anon.3, ptr %3052, i32 0, i32 1
  %3054 = load i64, ptr %3053, align 8, !tbaa !11
  %3055 = add i64 %3054, %3049
  store i64 %3055, ptr %3053, align 8, !tbaa !11
  br label %3056

3056:                                             ; preds = %3047, %3044
  br label %3081

3057:                                             ; preds = %2613
  br label %3058

3058:                                             ; preds = %3057, %1651, %854
  br label %3059

3059:                                             ; preds = %3058
  %3060 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !58
  %3061 = zext i8 %3060 to i32
  %3062 = icmp sle i32 5, %3061
  %3063 = xor i1 %3062, true
  %3064 = xor i1 %3063, true
  %3065 = zext i1 %3064 to i32
  %3066 = sext i32 %3065 to i64
  %3067 = call i64 @llvm.expect.i64(i64 %3066, i64 0)
  %3068 = icmp ne i64 %3067, 0
  br i1 %3068, label %3069, label %3077

3069:                                             ; preds = %3059
  %3070 = load i64, ptr %6, align 8, !tbaa !9
  %3071 = load i64, ptr %6, align 8, !tbaa !9
  %3072 = icmp ne i64 %3071, 0
  %3073 = zext i1 %3072 to i64
  %3074 = select i1 %3072, ptr @.str.58, ptr @.str.59
  %3075 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 1
  %3076 = load i32, ptr %3075, align 8, !tbaa !53
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.gc_alloc_ex, i32 noundef 1324, ptr noundef @.str.57, i64 noundef %3070, ptr noundef %3074, i32 noundef %3076)
  br label %3077

3077:                                             ; preds = %3069, %3059
  br label %3078

3078:                                             ; preds = %3077
  br label %3079

3079:                                             ; preds = %3078
  %3080 = getelementptr inbounds %struct.page_get_result, ptr %4, i32 0, i32 0
  store ptr null, ptr %3080, align 8, !tbaa !76
  br label %3081

3081:                                             ; preds = %3079, %3056
  store i32 1, ptr %31, align 4
  br label %3082

3082:                                             ; preds = %3081, %2238
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 8, 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
  %3083 = load { ptr, i32 }, ptr %4, align 8
  ret { ptr, i32 } %3083
}

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @pnl_check_allocated(ptr noundef, i64 noundef) #5

declare i64 @osal_monotime() #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @is_reclaimable(ptr noundef, ptr noundef, i8 noundef zeroext) #5

declare ptr @txn_gc_cursor(ptr noundef) #6

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

declare zeroext i1 @txn_gc_detent(ptr noundef) #6

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @rkl_highest(ptr noundef) #7

declare i32 @cursor_ops(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #6

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @gc_is_reclaimed(ptr noundef, i64 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @node_read(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

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

declare zeroext i1 @pnl_check(ptr noundef, i64 noundef) #6

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

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

declare i32 @rkl_push(ptr noundef, i64 noundef, i1 noundef zeroext) #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @pnl_need(ptr noalias noundef, i64 noundef) #5

declare i64 @pnl_merge(ptr noundef, ptr noundef) #6

declare zeroext i1 @dpl_check(ptr noundef) #6

declare zeroext i1 @txn_refund(ptr noundef) #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @meta_recent(ptr dead_on_unwind noalias writable sret(%struct.meta_ptr) align 8, ptr noundef, ptr noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @meta_prefer_steady(ptr dead_on_unwind noalias writable sret(%struct.meta_ptr) align 8, ptr noundef, ptr noundef) #5

declare ptr @durable_caption(ptr noundef) #6

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @atomic_load32(ptr noundef, i32 noundef) #9

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @atomic_load64(ptr noundef, i32 noundef) #9

declare i32 @meta_wipe_steady(ptr noundef, i64 noundef) #6

; 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

declare i32 @dxb_sync_locked(ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare zeroext i1 @mvcc_kick_laggards(ptr noundef, i64 noundef) #6

; Function Attrs: nounwind willreturn memory(none)
declare i32 @pv2pages(i16 noundef zeroext) #11

; Function Attrs: nounwind willreturn memory(read)
declare i32 @pgno_align2os_pgno(ptr noundef, i64 noundef) #7

declare i32 @dxb_resize(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden { ptr, i32 } @page_alloc_finalize(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i64 noundef) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !6, i64 16}
!13 = !{!"MDBX_cursor", !14, 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}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !6, i64 80}
!16 = !{!"MDBX_txn", !14, i64 0, !14, i64 4, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !17, i64 40, !10, i64 64, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !19, i64 128, !6, i64 160, !7, i64 168}
!17 = !{!"geo", !18, i64 0, !18, i64 2, !14, i64 4, !14, i64 8, !7, i64 12, !7, i64 16}
!18 = !{!"short", !7, i64 0}
!19 = !{!"MDBX_canary", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!20 = !{!21, !7, i64 25}
!21 = !{!"libmdbx_globals", !7, i64 0, !14, i64 16, !14, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !22, i64 27, !14, i64 28, !7, i64 32, !7, i64 40, !10, i64 80, !6, i64 88}
!22 = !{!"_Bool", !7, i64 0}
!23 = !{!24, !10, i64 280}
!24 = !{!"MDBX_env", !7, i64 0, !14, i64 4, !14, i64 8, !25, i64 16, !14, i64 56, !14, i64 60, !25, i64 64, !6, i64 104, !18, i64 112, !18, i64 114, !18, i64 116, !18, i64 118, !18, i64 120, !18, i64 122, !7, i64 124, !7, i64 128, !7, i64 129, !18, i64 130, !14, i64 132, !14, i64 136, !14, i64 140, !14, i64 144, !26, i64 152, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !14, i64 224, !14, i64 228, !14, i64 232, !6, i64 240, !6, i64 248, !10, i64 256, !27, i64 264, !29, i64 320, !22, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !30, i64 392, !7, i64 400, !14, i64 440, !14, i64 444, !6, i64 448, !31, i64 456, !7, i64 496, !7, i64 536}
!25 = !{!"osal_mmap", !7, i64 0, !14, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!26 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!27 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !10, i64 16, !7, i64 24, !7, i64 25, !7, i64 26, !7, i64 27, !14, i64 28, !14, i64 32, !22, i64 36, !22, i64 37, !22, i64 38, !28, i64 40, !7, i64 48}
!28 = !{!"", !18, i64 0, !18, i64 2, !18, i64 4, !18, i64 6}
!29 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!30 = !{!"", !10, i64 0}
!31 = !{!"osal_ioring", !14, i64 0, !14, i64 4, !14, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!32 = !{!33, !14, i64 8}
!33 = !{!"monotime_cache", !10, i64 0, !14, i64 8}
!34 = !{!33, !10, i64 0}
!35 = !{!14, !14, i64 0}
!36 = !{!16, !14, i64 4}
!37 = !{!24, !14, i64 4}
!38 = !{!16, !6, i64 88}
!39 = !{!40, !14, i64 12}
!40 = !{!"tree", !18, i64 0, !18, i64 2, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !10, i64 24, !10, i64 32, !10, i64 40}
!41 = !{!24, !14, i64 224}
!42 = !{!13, !6, i64 368}
!43 = !{!16, !6, i64 104}
!44 = !{!13, !6, i64 8}
!45 = !{!24, !22, i64 360}
!46 = !{i8 0, i8 2}
!47 = !{}
!48 = !{!24, !22, i64 300}
!49 = !{!24, !6, i64 104}
!50 = !{!22, !22, i64 0}
!51 = !{!24, !10, i64 392}
!52 = !{!16, !10, i64 64}
!53 = !{!54, !14, i64 8}
!54 = !{!"page_get_result", !6, i64 0, !14, i64 8}
!55 = !{!56, !6, i64 0}
!56 = !{!"iovec", !6, i64 0, !10, i64 8}
!57 = !{!56, !10, i64 8}
!58 = !{!21, !7, i64 26}
!59 = !{!18, !18, i64 0}
!60 = !{!24, !14, i64 268}
!61 = !{!16, !14, i64 48}
!62 = !{!40, !14, i64 8}
!63 = distinct !{!63, !64}
!64 = !{!"llvm.loop.mustprogress"}
!65 = !{!66, !10, i64 16}
!66 = !{!"meta_ptr", !10, i64 0, !7, i64 8, !10, i64 16}
!67 = !{!66, !10, i64 0}
!68 = !{i64 0, i64 8, !11, i64 8, i64 8, !11, i64 16, i64 2, !59, i64 18, i64 1, !11, i64 19, i64 1, !11, i64 20, i64 2, !59, i64 22, i64 2, !59, i64 24, i64 4, !35, i64 28, i64 4, !35, i64 32, i64 4, !11, i64 36, i64 4, !11, i64 40, i64 96, !11, i64 136, i64 8, !9, i64 144, i64 8, !9, i64 152, i64 8, !9, i64 160, i64 8, !9, i64 168, i64 8, !11, i64 176, i64 8, !11, i64 184, i64 8, !11, i64 192, i64 16, !11, i64 208, i64 16, !11}
!69 = !{!16, !18, i64 40}
!70 = !{!24, !6, i64 384}
!71 = !{i64 0, i64 8, !5, i64 8, i64 4, !35}
!72 = !{!40, !18, i64 2}
!73 = !{!40, !14, i64 16}
!74 = !{!40, !14, i64 20}
!75 = !{!40, !10, i64 32}
!76 = !{!54, !6, i64 0}


; 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.8 }
%struct.anon.8 = 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.monotime_cache = type { i64, i32 }
%struct.iovec = type { ptr, i64 }
%struct.meta_ptr = type { i64, %union.anon.21, i64 }
%union.anon.21 = type { ptr }
%struct.meta = type { [2 x i32], %union.anon.22, i16, i8, i8, %struct.geo, %union.anon.23, %struct.MDBX_canary, %union.anon.26, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon.22 = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon, %union.anon.0 }
%union.anon = type { i32 }
%union.anon.0 = type { i32 }
%union.anon.23 = type { %struct.anon.24 }
%struct.anon.24 = type { %struct.tree, %struct.tree }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.26 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }

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

; Function Attrs: hot nounwind uwtable
declare hidden i32 @repnl_get_sequence(ptr noundef, i64 noundef, i8 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local { ptr, i32 } @gc_alloc_ex(ptr noundef %0, i64 noundef %1, i8 noundef zeroext %2) local_unnamed_addr #1 {
  %4 = alloca %struct.monotime_cache, align 8
  %5 = alloca i64, align 8
  %6 = alloca %struct.iovec, align 8
  %7 = alloca %struct.iovec, align 8
  %8 = alloca %struct.meta_ptr, align 8
  %9 = alloca %struct.meta_ptr, align 8
  %10 = alloca %struct.meta_ptr, align 8
  %11 = alloca %struct.meta, align 4
  %12 = alloca %struct.meta_ptr, align 8
  %13 = getelementptr inbounds i8, ptr %0, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %14, i64 80
  %16 = load ptr, ptr %15, align 8, !tbaa !11
  %17 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %18 = and i8 %17, 1
  %.not = icmp eq i8 %18, 0
  br i1 %.not, label %.thread, label %19, !prof !20

19:                                               ; preds = %3
  %20 = icmp eq i64 %1, 0
  %21 = and i8 %2, 2
  %22 = icmp eq i8 %21, 0
  %.not466 = and i1 %20, %22
  br i1 %.not466, label %23, label %24, !prof !20

23:                                               ; preds = %19
  tail call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 851) #12
  unreachable

24:                                               ; preds = %19
  %25 = getelementptr inbounds i8, ptr %14, i64 200
  %26 = load ptr, ptr %25, align 8, !tbaa !21
  %27 = getelementptr inbounds i8, ptr %14, i64 56
  %28 = load i32, ptr %27, align 8, !tbaa !21
  %29 = add i32 %28, -1
  %30 = zext i32 %29 to i64
  %31 = tail call zeroext i1 @pnl_check_allocated(ptr noundef %26, i64 noundef %30)
  br i1 %31, label %.thread, label %32, !prof !22

32:                                               ; preds = %24
  tail call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 852) #12
  unreachable

.thread:                                          ; preds = %3, %24
  %33 = icmp ult i64 %1, 2
  br i1 %33, label %60, label %34

34:                                               ; preds = %.thread
  %35 = getelementptr inbounds i8, ptr %16, i64 280
  %36 = load i64, ptr %35, align 8, !tbaa !23
  %.not468 = icmp eq i64 %36, 0
  br i1 %.not468, label %39, label %37

37:                                               ; preds = %34
  %38 = tail call i64 @osal_monotime() #13
  br label %39

39:                                               ; preds = %34, %37
  %.ph = phi i64 [ 0, %34 ], [ %38, %37 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #13
  %40 = getelementptr inbounds i8, ptr %4, i64 8
  store i32 1, ptr %40, align 8, !tbaa !32
  store i64 %.ph, ptr %4, align 8, !tbaa !34
  %41 = getelementptr inbounds i8, ptr %14, i64 200
  %42 = load ptr, ptr %41, align 8, !tbaa !21
  %43 = load i32, ptr %42, align 4, !tbaa !35
  %44 = zext i32 %43 to i64
  %.not470 = icmp ult i64 %44, %1
  br i1 %.not470, label %.critedge582, label %45

45:                                               ; preds = %39
  %46 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %47 = and i8 %46, 1
  %.not471 = icmp eq i8 %47, 0
  br i1 %.not471, label %58, label %48, !prof !20

48:                                               ; preds = %45
  %49 = getelementptr inbounds i32, ptr %42, i64 %44
  %50 = load i32, ptr %49, align 4, !tbaa !35
  %51 = getelementptr inbounds i8, ptr %14, i64 56
  %52 = load i32, ptr %51, align 8, !tbaa !21
  %53 = icmp ult i32 %50, %52
  br i1 %53, label %54, label %.critedge, !prof !22

54:                                               ; preds = %48
  %55 = getelementptr inbounds i8, ptr %42, i64 4
  %56 = load i32, ptr %55, align 4, !tbaa !35
  %57 = icmp ult i32 %56, %52
  br i1 %57, label %58, label %.critedge, !prof !22

.critedge:                                        ; preds = %48, %54
  tail call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 869) #12
  unreachable

58:                                               ; preds = %54, %45
  %59 = tail call i32 @repnl_get_sequence(ptr noundef nonnull %14, i64 noundef %1, i8 noundef zeroext %2) #14
  %.not472 = icmp eq i32 %59, 0
  br i1 %.not472, label %.critedge582, label %.loopexit671, !prof !20

60:                                               ; preds = %.thread
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #13
  %61 = getelementptr inbounds i8, ptr %4, i64 8
  store i32 1, ptr %61, align 8, !tbaa !32
  store i64 0, ptr %4, align 8, !tbaa !34
  %62 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %63 = and i8 %62, 1
  %.not469 = icmp eq i8 %63, 0
  %64 = icmp eq i64 %1, 0
  %or.cond611 = or i1 %64, %.not469
  br i1 %or.cond611, label %.critedge582, label %65, !prof !36

65:                                               ; preds = %60
  %66 = getelementptr inbounds i8, ptr %14, i64 200
  %67 = load ptr, ptr %66, align 8, !tbaa !21
  %68 = load i32, ptr %67, align 4, !tbaa !35
  %69 = icmp eq i32 %68, 0
  %70 = and i8 %2, 2
  %71 = icmp ne i8 %70, 0
  %or.cond614 = or i1 %71, %69
  br i1 %or.cond614, label %.critedge582, label %72, !prof !37

72:                                               ; preds = %65
  tail call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.3, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 875) #12
  unreachable

.critedge582:                                     ; preds = %65, %60, %39, %58
  %73 = phi i64 [ 0, %65 ], [ 0, %60 ], [ %.ph, %39 ], [ %.ph, %58 ]
  %74 = tail call zeroext i1 @is_reclaimable(ptr noundef nonnull %14, ptr noundef nonnull %0, i8 noundef zeroext %2)
  %75 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %76 = and i8 %75, 1
  %.not473 = icmp eq i8 %76, 0
  br i1 %74, label %84, label %77, !prof !22

77:                                               ; preds = %.critedge582
  br i1 %.not473, label %.loopexit677, label %78, !prof !20

78:                                               ; preds = %77
  %79 = getelementptr inbounds i8, ptr %14, i64 4
  %80 = load i32, ptr %79, align 4, !tbaa !38
  %81 = and i32 %80, 128
  %82 = icmp eq i32 %81, 0
  %.not550 = and i1 %33, %82
  br i1 %.not550, label %83, label %.loopexit677, !prof !20

83:                                               ; preds = %78
  tail call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.4, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 881) #12
  unreachable

84:                                               ; preds = %.critedge582
  %85 = and i8 %2, 28
  %.not474 = icmp eq i8 %85, 0
  %or.cond583 = or i1 %.not474, %.not473
  br i1 %or.cond583, label %87, label %86, !prof !39

86:                                               ; preds = %84
  tail call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.5, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 885) #12
  unreachable

87:                                               ; preds = %84
  %88 = getelementptr inbounds i8, ptr %16, i64 4
  %89 = load i32, ptr %88, align 4, !tbaa !40
  %90 = lshr i32 %89, 22
  %91 = trunc i32 %90 to i8
  %92 = and i8 %91, 16
  %93 = add i8 %92, %2
  %94 = icmp eq i64 %1, 0
  br i1 %94, label %109, label %95

95:                                               ; preds = %87
  %96 = getelementptr inbounds i8, ptr %14, i64 88
  %97 = load ptr, ptr %96, align 8, !tbaa !41
  %98 = getelementptr inbounds i8, ptr %97, i64 12
  %99 = load i32, ptr %98, align 4, !tbaa !42
  %.not476 = icmp eq i32 %99, 0
  br i1 %.not476, label %109, label %100

100:                                              ; preds = %95
  %101 = getelementptr inbounds i8, ptr %14, i64 200
  %102 = load ptr, ptr %101, align 8, !tbaa !21
  %103 = load i32, ptr %102, align 4, !tbaa !35
  %104 = getelementptr inbounds i8, ptr %16, i64 224
  %105 = load i32, ptr %104, align 8, !tbaa !44
  %106 = lshr i32 %105, 1
  %107 = icmp ult i32 %103, %106
  %108 = add i8 %93, 4
  %spec.select = select i1 %107, i8 %108, i8 %93
  br label %109

109:                                              ; preds = %100, %95, %87
  %.0396 = phi i8 [ %93, %95 ], [ %93, %87 ], [ %spec.select, %100 ]
  %110 = tail call ptr @txn_gc_cursor(ptr noundef nonnull %14) #13
  %111 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %112 = and i8 %111, 1
  %.not477 = icmp eq i8 %112, 0
  br i1 %.not477, label %118, label %113, !prof !20

113:                                              ; preds = %109
  %.not478 = icmp eq ptr %110, %0
  br i1 %.not478, label %.critedge585, label %114, !prof !20

114:                                              ; preds = %113
  %115 = getelementptr inbounds i8, ptr %110, i64 368
  %116 = load ptr, ptr %115, align 8, !tbaa !45
  %117 = icmp eq ptr %116, %110
  br i1 %117, label %118, label %.critedge585, !prof !22

.critedge585:                                     ; preds = %113, %114
  tail call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 894) #12
  unreachable

118:                                              ; preds = %114, %109
  %119 = getelementptr inbounds i8, ptr %110, i64 16
  store ptr %14, ptr %119, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %14, i64 104
  %121 = load ptr, ptr %120, align 8, !tbaa !46
  %122 = getelementptr inbounds i8, ptr %110, i64 8
  store ptr %121, ptr %122, align 8, !tbaa !47
  %123 = getelementptr inbounds i8, ptr %110, i64 4
  store i16 -44, ptr %123, align 4, !tbaa !21
  %124 = getelementptr inbounds i8, ptr %16, i64 360
  %125 = load i8, ptr %124, align 8, !tbaa !48, !range !49, !noundef !50
  %126 = trunc nuw i8 %125 to i1
  br i1 %126, label %.thread619, label %128

.thread619:                                       ; preds = %118
  %127 = getelementptr inbounds i8, ptr %14, i64 472
  br label %.sink.split

128:                                              ; preds = %118
  %129 = getelementptr inbounds i8, ptr %16, i64 300
  %130 = load i8, ptr %129, align 4, !tbaa !51, !range !49, !noundef !50
  %131 = trunc nuw i8 %130 to i1
  %132 = getelementptr inbounds i8, ptr %14, i64 472
  store i8 %130, ptr %132, align 8, !tbaa !21
  br i1 %131, label %133, label %152

133:                                              ; preds = %128
  %134 = getelementptr inbounds i8, ptr %16, i64 104
  %135 = load ptr, ptr %134, align 8, !tbaa !52
  %136 = getelementptr inbounds i8, ptr %135, i64 396
  %137 = load i32, ptr %136, align 4, !tbaa !35
  %138 = and i32 %137, 1
  %.not479 = icmp ne i32 %138, 0
  %139 = lshr i32 %137, 1
  %140 = getelementptr inbounds i8, ptr %14, i64 88
  %141 = load ptr, ptr %140, align 8, !tbaa !41
  %142 = getelementptr inbounds i8, ptr %141, i64 12
  %143 = load i32, ptr %142, align 4, !tbaa !42
  %144 = icmp eq i32 %143, 0
  br i1 %144, label %145, label %151

145:                                              ; preds = %133
  %146 = getelementptr inbounds i8, ptr %14, i64 52
  %147 = load i32, ptr %146, align 4, !tbaa !21
  %148 = icmp ult i32 %147, 1234
  %149 = zext nneg i32 %139 to i64
  %150 = icmp ugt i64 %149, %1
  %or.cond587 = select i1 %.not479, i1 %150, i1 false
  %or.cond617 = select i1 %148, i1 true, i1 %or.cond587
  br i1 %or.cond617, label %.sink.split, label %152

151:                                              ; preds = %133
  %.old615 = zext nneg i32 %139 to i64
  %.old616 = icmp ugt i64 %.old615, %1
  %or.cond587.old = select i1 %.not479, i1 %.old616, i1 false
  br i1 %or.cond587.old, label %.sink.split, label %152

.sink.split:                                      ; preds = %145, %151, %.thread619
  %.sink = phi ptr [ %127, %.thread619 ], [ %132, %151 ], [ %132, %145 ]
  store i8 0, ptr %.sink, align 8, !tbaa !21
  br label %152

152:                                              ; preds = %.sink.split, %145, %151, %128
  %153 = getelementptr inbounds i8, ptr %14, i64 168
  %154 = getelementptr inbounds i8, ptr %14, i64 64
  %155 = getelementptr inbounds i8, ptr %14, i64 208
  %156 = getelementptr inbounds i8, ptr %6, i64 8
  %157 = getelementptr inbounds i8, ptr %14, i64 4
  %158 = getelementptr inbounds i8, ptr %110, i64 48
  %159 = getelementptr inbounds i8, ptr %110, i64 5
  %160 = getelementptr inbounds i8, ptr %110, i64 304
  %161 = getelementptr inbounds i8, ptr %7, i64 8
  %162 = getelementptr inbounds i8, ptr %14, i64 56
  %163 = getelementptr inbounds i8, ptr %14, i64 200
  %164 = getelementptr inbounds i8, ptr %16, i64 224
  %165 = icmp eq i64 %1, 1
  %166 = getelementptr inbounds i8, ptr %16, i64 268
  %167 = getelementptr inbounds i8, ptr %14, i64 48
  %168 = getelementptr inbounds i8, ptr %14, i64 336
  %169 = getelementptr inbounds i8, ptr %16, i64 280
  %170 = getelementptr inbounds i8, ptr %14, i64 88
  %.not595 = xor i1 %94, true
  %171 = getelementptr inbounds i8, ptr %8, i64 8
  %172 = getelementptr inbounds i8, ptr %9, i64 8
  %173 = getelementptr inbounds i8, ptr %9, i64 16
  %174 = getelementptr inbounds i8, ptr %16, i64 104
  %175 = getelementptr inbounds i8, ptr %14, i64 52
  %176 = getelementptr inbounds i8, ptr %12, i64 8
  %177 = getelementptr inbounds i8, ptr %10, i64 8
  br label %.backedge680

.backedge680:                                     ; preds = %.backedge680.backedge, %152
  %.1 = phi i8 [ %.0396, %152 ], [ %.6625, %.backedge680.backedge ]
  %178 = call zeroext i1 @txn_gc_detent(ptr noundef nonnull %14) #13
  br label %179

179:                                              ; preds = %629, %.backedge680
  %.2 = phi i8 [ %.1, %.backedge680 ], [ %.6625, %629 ]
  %180 = load ptr, ptr %15, align 8, !tbaa !11
  %181 = getelementptr inbounds i8, ptr %180, i64 392
  %182 = load i64, ptr %181, align 8, !tbaa !53
  %183 = load i64, ptr %154, align 8, !tbaa !54
  %.not480 = icmp ult i64 %182, %183
  br i1 %.not480, label %185, label %184, !prof !22

184:                                              ; preds = %179
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 0, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 920, ptr noundef nonnull @.str.7, i64 noundef %182, i64 noundef %183) #13
  br label %.thread650

185:                                              ; preds = %179
  store i64 0, ptr %5, align 8, !tbaa !55
  %186 = and i8 %.2, 16
  %.not481 = icmp eq i8 %186, 0
  br i1 %.not481, label %188, label %187

187:                                              ; preds = %185
  store i64 %182, ptr %5, align 8, !tbaa !55
  br label %.preheader

188:                                              ; preds = %185
  %189 = call i64 @rkl_highest(ptr noundef nonnull %155) #15
  store i64 %189, ptr %5, align 8, !tbaa !55
  %.not482 = icmp eq i64 %189, 0
  br i1 %.not482, label %.preheader, label %190

190:                                              ; preds = %188
  %191 = add i64 %189, 1
  store i64 %191, ptr %5, align 8, !tbaa !55
  %.not483 = icmp ult i64 %191, %182
  br i1 %.not483, label %.preheader, label %.loopexit670

.preheader:                                       ; preds = %505, %508, %187, %190, %188
  %.1411.ph = phi i32 [ 17, %187 ], [ 17, %190 ], [ 0, %188 ], [ %.3413, %508 ], [ %.3413, %505 ]
  %.3.ph = phi i8 [ %.2, %187 ], [ %.2, %190 ], [ %.2, %188 ], [ %501, %508 ], [ %501, %505 ]
  %.3.ph.fr = freeze i8 %.3.ph
  br label %.outer

.outer:                                           ; preds = %.outer.backedge, %.preheader
  %.1411.ph673 = phi i32 [ %.1411.ph, %.preheader ], [ %.us-phi910, %.outer.backedge ]
  %.3.ph674 = phi i8 [ %.3.ph.fr, %.preheader ], [ %397, %.outer.backedge ]
  %192 = and i8 %.3.ph674, 16
  %193 = icmp ne i8 %192, 0
  %194 = zext i8 %.3.ph674 to i32
  %195 = and i32 %194, 16
  %.not486.not = icmp eq i32 %195, 0
  br i1 %.not486.not, label %.outer.split.us, label %.outer.split.preheader

.outer.split.preheader:                           ; preds = %.outer
  store ptr %5, ptr %6, align 8, !tbaa !56
  store i64 8, ptr %156, align 8, !tbaa !58
  %196 = call i32 @cursor_ops(ptr noundef %110, ptr noundef nonnull %6, ptr noundef null, i32 noundef %.1411.ph673) #13
  switch i32 %196, label %.loopexit [
    i32 0, label %199
    i32 -30798, label %197
  ], !prof !59

197:                                              ; preds = %.outer.split.preheader
  %198 = icmp eq i32 %.1411.ph673, 17
  %or.cond.peel = and i1 %198, %193
  br i1 %or.cond.peel, label %.outer.split.preheader1732, label %.loopexit670

.outer.split.preheader1732:                       ; preds = %207, %201, %197
  br label %.outer.split

199:                                              ; preds = %.outer.split.preheader
  %200 = load i64, ptr %156, align 8, !tbaa !58
  %.not485.peel = icmp eq i64 %200, 8
  br i1 %.not485.peel, label %201, label %.split.us, !prof !60

201:                                              ; preds = %199
  %202 = load ptr, ptr %6, align 8, !tbaa !56
  %203 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %202) #15
  store i64 %203, ptr %5, align 8, !tbaa !55
  %204 = load ptr, ptr %15, align 8, !tbaa !11
  %205 = getelementptr inbounds i8, ptr %204, i64 392
  %206 = load i64, ptr %205, align 8, !tbaa !53
  %.not488.peel = icmp ult i64 %203, %206
  br i1 %.not488.peel, label %207, label %.outer.split.preheader1732

207:                                              ; preds = %201
  %208 = call zeroext i1 @gc_is_reclaimed(ptr noundef nonnull %14, i64 noundef %203)
  br i1 %208, label %.outer.split.preheader1732, label %.split908.us

.outer.split.us:                                  ; preds = %.outer, %.outer.split.us.backedge
  %.1411.us = phi i32 [ %.1411.us.be, %.outer.split.us.backedge ], [ %.1411.ph673, %.outer ]
  store ptr %5, ptr %6, align 8, !tbaa !56
  store i64 8, ptr %156, align 8, !tbaa !58
  %209 = call i32 @cursor_ops(ptr noundef %110, ptr noundef nonnull %6, ptr noundef null, i32 noundef %.1411.us) #13
  switch i32 %209, label %.loopexit [
    i32 0, label %212
    i32 -30798, label %210
  ], !prof !59

210:                                              ; preds = %.outer.split.us
  %211 = icmp eq i32 %.1411.us, 17
  %or.cond.us = and i1 %211, %193
  br i1 %or.cond.us, label %.outer.split.us.backedge, label %.loopexit670

212:                                              ; preds = %.outer.split.us
  %213 = load i64, ptr %156, align 8, !tbaa !58
  %.not485.us = icmp eq i64 %213, 8
  br i1 %.not485.us, label %214, label %.split.us, !prof !22

214:                                              ; preds = %212
  %215 = load ptr, ptr %6, align 8, !tbaa !56
  %216 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %215) #15
  store i64 %216, ptr %5, align 8, !tbaa !55
  %217 = load ptr, ptr %15, align 8, !tbaa !11
  %218 = getelementptr inbounds i8, ptr %217, i64 392
  %219 = load i64, ptr %218, align 8, !tbaa !53
  %.not487.us = icmp ult i64 %216, %219
  br i1 %.not487.us, label %220, label %.loopexit670, !prof !22

220:                                              ; preds = %214
  %221 = call zeroext i1 @gc_is_reclaimed(ptr noundef nonnull %14, i64 noundef %216)
  br i1 %221, label %.outer.split.us.backedge, label %.split908.us

.outer.split.us.backedge:                         ; preds = %220, %210
  %.1411.us.be = phi i32 [ 8, %220 ], [ 12, %210 ]
  br label %.outer.split.us

.outer.split:                                     ; preds = %.outer.split.backedge, %.outer.split.preheader1732
  store ptr %5, ptr %6, align 8, !tbaa !56
  store i64 8, ptr %156, align 8, !tbaa !58
  %222 = call i32 @cursor_ops(ptr noundef %110, ptr noundef nonnull %6, ptr noundef null, i32 noundef 12) #13
  switch i32 %222, label %.loopexit [
    i32 0, label %223
    i32 -30798, label %.loopexit670
  ], !prof !59

223:                                              ; preds = %.outer.split
  %224 = load i64, ptr %156, align 8, !tbaa !58
  %.not485 = icmp eq i64 %224, 8
  br i1 %.not485, label %227, label %.split.us, !prof !61

.split.us:                                        ; preds = %199, %223, %212
  %225 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %.not518 = icmp eq i8 %225, 0
  br i1 %.not518, label %.thread650, label %226, !prof !22

226:                                              ; preds = %.split.us
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 961, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, i32 noundef -30796, ptr noundef nonnull @.str.10) #13
  br label %.thread650

227:                                              ; preds = %223
  %228 = load ptr, ptr %6, align 8, !tbaa !56
  %229 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %228) #15
  store i64 %229, ptr %5, align 8, !tbaa !55
  %230 = load ptr, ptr %15, align 8, !tbaa !11
  %231 = getelementptr inbounds i8, ptr %230, i64 392
  %232 = load i64, ptr %231, align 8, !tbaa !53
  %.not488 = icmp ult i64 %229, %232
  br i1 %.not488, label %233, label %.outer.split.backedge

.outer.split.backedge:                            ; preds = %227, %233
  br label %.outer.split, !llvm.loop !63

233:                                              ; preds = %227
  %234 = call zeroext i1 @gc_is_reclaimed(ptr noundef nonnull %14, i64 noundef %229)
  br i1 %234, label %.outer.split.backedge, label %.split908.us

.split908.us:                                     ; preds = %233, %220, %207
  %.us-phi910 = phi i32 [ 12, %207 ], [ 8, %220 ], [ 12, %233 ]
  %235 = load i32, ptr %157, align 4, !tbaa !38
  %236 = and i32 %235, -129
  store i32 %236, ptr %157, align 4, !tbaa !38
  %237 = load i8, ptr %159, align 1, !tbaa !21
  %238 = sext i8 %237 to i64
  %239 = getelementptr inbounds [32 x ptr], ptr %158, i64 0, i64 %238
  %240 = load ptr, ptr %239, align 8, !tbaa !65
  %241 = getelementptr inbounds [32 x i16], ptr %160, i64 0, i64 %238
  %242 = load i16, ptr %241, align 2, !tbaa !66
  %243 = zext i16 %242 to i64
  %244 = call ptr @page_node(ptr noundef %240, i64 noundef %243) #15
  %245 = call i32 @node_read(ptr noundef %110, ptr noundef %244, ptr noundef nonnull %7, ptr noundef %240)
  %.not489 = icmp eq i32 %245, 0
  br i1 %.not489, label %246, label %.thread650, !prof !22

246:                                              ; preds = %.split908.us
  %247 = load ptr, ptr %7, align 8, !tbaa !56
  %248 = load i64, ptr %161, align 8, !tbaa !58
  %249 = and i64 %248, 3
  %.not490 = icmp eq i64 %249, 0
  br i1 %.not490, label %250, label %.critedge589, !prof !22

250:                                              ; preds = %246
  %251 = load i32, ptr %247, align 4, !tbaa !35
  %252 = zext i32 %251 to i64
  %253 = shl nuw nsw i64 %252, 2
  %254 = add nuw nsw i64 %253, 4
  %255 = icmp ult i64 %248, %254
  br i1 %255, label %.critedge589, label %256, !prof !20

256:                                              ; preds = %250
  %257 = load i32, ptr %162, align 8, !tbaa !21
  %258 = zext i32 %257 to i64
  %259 = call zeroext i1 @pnl_check(ptr noundef nonnull %247, i64 noundef %258) #13
  br i1 %259, label %262, label %.critedge589, !prof !22

.critedge589:                                     ; preds = %250, %246, %256
  %260 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %.not517 = icmp eq i8 %260, 0
  br i1 %.not517, label %.thread650, label %261, !prof !22

261:                                              ; preds = %.critedge589
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 989, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, i32 noundef -30796, ptr noundef nonnull @.str.11) #13
  br label %.thread650

262:                                              ; preds = %256
  %263 = load i32, ptr %247, align 4, !tbaa !35
  %264 = zext i32 %263 to i64
  %265 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %266 = icmp ugt i8 %265, 5
  br i1 %266, label %267, label %273, !prof !20

267:                                              ; preds = %262
  %268 = load i64, ptr %5, align 8, !tbaa !55
  %269 = load ptr, ptr %163, align 8, !tbaa !21
  %270 = load i32, ptr %269, align 4, !tbaa !35
  %271 = zext i32 %270 to i64
  %272 = add nuw nsw i64 %271, %264
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 995, ptr noundef nonnull @.str.12, i64 noundef %268, i64 noundef %264, i64 noundef %272) #13
  br label %273

273:                                              ; preds = %267, %262
  br i1 %94, label %274, label %._crit_edge1156, !prof !20

._crit_edge1156:                                  ; preds = %273
  %.pre = load ptr, ptr %163, align 8, !tbaa !21
  %.pre1158 = load i32, ptr %164, align 8, !tbaa !44
  br label %290

274:                                              ; preds = %273
  %275 = load i32, ptr %164, align 8, !tbaa !44
  %276 = lshr i32 %275, 2
  %277 = mul nuw i32 %276, 3
  %278 = icmp ugt i32 %263, %277
  %.pre1157 = load ptr, ptr %163, align 8, !tbaa !21
  br i1 %278, label %279, label %290

279:                                              ; preds = %274
  %280 = load i32, ptr %.pre1157, align 4, !tbaa !35
  %281 = zext i32 %280 to i64
  %282 = add nuw nsw i64 %281, %264
  %283 = zext i32 %275 to i64
  %284 = icmp ugt i64 %282, %283
  br i1 %284, label %285, label %290

285:                                              ; preds = %279
  %286 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %287 = icmp ugt i8 %286, 4
  br i1 %287, label %288, label %.thread663, !prof !20

288:                                              ; preds = %285
  %289 = load i64, ptr %5, align 8, !tbaa !55
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1004, ptr noundef nonnull @.str.13, i64 noundef %289, i64 noundef %264) #13
  br label %thread-pre-split661

290:                                              ; preds = %._crit_edge1156, %274, %279
  %291 = phi i32 [ %.pre1158, %._crit_edge1156 ], [ %275, %274 ], [ %275, %279 ]
  %292 = phi ptr [ %.pre, %._crit_edge1156 ], [ %.pre1157, %274 ], [ %.pre1157, %279 ]
  %293 = load i32, ptr %292, align 4, !tbaa !35
  %294 = zext i32 %293 to i64
  %295 = add nuw nsw i64 %294, %264
  %296 = zext i32 %291 to i64
  %.not492 = icmp ult i64 %295, %296
  br i1 %.not492, label %364, label %297, !prof !22

297:                                              ; preds = %290
  %298 = and i32 %194, 8
  %.not493 = icmp eq i32 %298, 0
  br i1 %.not493, label %332, label %299

299:                                              ; preds = %297
  %300 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %301 = and i8 %300, 1
  %.not494 = icmp eq i8 %301, 0
  br i1 %.not494, label %306, label %302, !prof !20

302:                                              ; preds = %299
  %303 = and i32 %194, 4
  %304 = icmp eq i32 %303, 0
  %.not497 = or i1 %94, %304
  br i1 %.not497, label %305, label %306, !prof !20

305:                                              ; preds = %302
  call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.14, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1013) #12
  unreachable

306:                                              ; preds = %299, %302
  %307 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %308 = icmp ugt i8 %307, 5
  br i1 %308, label %309, label %310, !prof !20

309:                                              ; preds = %306
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1017, ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.17) #13
  %.pre1159 = load ptr, ptr %163, align 8, !tbaa !21
  %.pre1160 = load i32, ptr %.pre1159, align 4, !tbaa !35
  %.pre1179 = zext i32 %.pre1160 to i64
  br label %310

310:                                              ; preds = %309, %306
  %.pre-phi = phi i64 [ %.pre1179, %309 ], [ %294, %306 ]
  %311 = phi i32 [ %.pre1160, %309 ], [ %293, %306 ]
  %312 = phi ptr [ %.pre1159, %309 ], [ %292, %306 ]
  %.not498 = icmp ult i64 %.pre-phi, %1
  br i1 %.not498, label %332, label %313

313:                                              ; preds = %310
  %314 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %315 = and i8 %314, 1
  %.not499 = icmp eq i8 %315, 0
  br i1 %.not499, label %325, label %316, !prof !20

316:                                              ; preds = %313
  %317 = getelementptr inbounds i32, ptr %312, i64 %.pre-phi
  %318 = load i32, ptr %317, align 4, !tbaa !35
  %319 = load i32, ptr %162, align 8, !tbaa !21
  %320 = icmp ult i32 %318, %319
  br i1 %320, label %321, label %.critedge591, !prof !22

321:                                              ; preds = %316
  %322 = getelementptr inbounds i8, ptr %312, i64 4
  %323 = load i32, ptr %322, align 4, !tbaa !35
  %324 = icmp ult i32 %323, %319
  br i1 %324, label %325, label %.critedge591, !prof !22

.critedge591:                                     ; preds = %316, %321
  call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1020) #12
  unreachable

325:                                              ; preds = %321, %313
  br i1 %165, label %326, label %330, !prof !22

326:                                              ; preds = %325
  %327 = and i32 %194, 2
  %.not516 = icmp eq i32 %327, 0
  br i1 %.not516, label %328, label %.thread634

328:                                              ; preds = %326
  %329 = call i32 @repnl_get_single(ptr noundef nonnull %14) #14
  br label %.loopexit671

330:                                              ; preds = %325
  %331 = call i32 @repnl_get_sequence(ptr noundef nonnull %14, i64 noundef %1, i8 noundef zeroext %.3.ph674) #14
  %.not500 = icmp eq i32 %331, 0
  br i1 %.not500, label %._crit_edge1161, label %.loopexit671, !prof !20

._crit_edge1161:                                  ; preds = %330
  %.pre1162 = load ptr, ptr %163, align 8, !tbaa !21
  %.pre1163 = load i32, ptr %.pre1162, align 4, !tbaa !35
  br label %332

332:                                              ; preds = %._crit_edge1161, %310, %297
  %333 = phi i32 [ %.pre1163, %._crit_edge1161 ], [ %311, %310 ], [ %293, %297 ]
  %334 = and i8 %.3.ph674, -13
  %335 = load i32, ptr %166, align 4, !tbaa !67
  %.not501 = icmp ult i32 %333, %335
  br i1 %.not501, label %364, label %336, !prof !22

336:                                              ; preds = %332
  br i1 %94, label %348, label %337

337:                                              ; preds = %336
  %338 = load i32, ptr %167, align 8, !tbaa !68
  %339 = zext i32 %338 to i64
  %340 = load i32, ptr %162, align 8, !tbaa !21
  %341 = zext i32 %340 to i64
  %342 = add i64 %341, %1
  %.not502 = icmp ugt i64 %342, %339
  br i1 %.not502, label %348, label %343

343:                                              ; preds = %337
  %344 = call i64 @monotime_since_cached(i64 noundef %73, ptr noundef nonnull %4)
  %345 = load i64, ptr %168, align 8, !tbaa !21
  %346 = add i64 %345, %344
  %347 = load i64, ptr %169, align 8, !tbaa !23
  %.not503 = icmp ult i64 %346, %347
  br i1 %.not503, label %._crit_edge1164, label %353

._crit_edge1164:                                  ; preds = %343
  %.pre1165 = load ptr, ptr %163, align 8, !tbaa !21
  %.pre1166 = load i32, ptr %.pre1165, align 4, !tbaa !35
  br label %348

348:                                              ; preds = %._crit_edge1164, %337, %336
  %349 = phi i32 [ %.pre1166, %._crit_edge1164 ], [ %333, %337 ], [ %333, %336 ]
  %350 = zext i32 %349 to i64
  %351 = add nuw nsw i64 %350, %264
  %352 = icmp ugt i64 %351, 2147483646
  br i1 %352, label %353, label %364

353:                                              ; preds = %343, %348
  %354 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %355 = icmp ugt i8 %354, 2
  br i1 %355, label %356, label %.thread620, !prof !20

356:                                              ; preds = %353
  %357 = load ptr, ptr %163, align 8, !tbaa !21
  %358 = load i32, ptr %357, align 4, !tbaa !35
  %359 = zext i32 %358 to i64
  %360 = add nuw nsw i64 %359, %264
  %361 = icmp ult i64 %360, 2147483647
  %362 = select i1 %361, ptr @.str.19, ptr @.str.20, !prof !22
  %363 = load i32, ptr %166, align 4, !tbaa !67
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1044, ptr noundef nonnull @.str.18, ptr noundef nonnull %362, i64 noundef %359, i64 noundef %264, i64 noundef %360, i32 noundef %363) #13
  br label %.loopexit670

364:                                              ; preds = %332, %348, %290
  %.4 = phi i8 [ %334, %348 ], [ %334, %332 ], [ %.3.ph674, %290 ]
  %365 = load i64, ptr %5, align 8, !tbaa !55
  %366 = call i32 @rkl_push(ptr noundef nonnull %155, i64 noundef %365, i1 noundef zeroext false) #13
  %367 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %368 = icmp ugt i8 %367, 5
  br i1 %368, label %369, label %371, !prof !20

369:                                              ; preds = %364
  %370 = load i64, ptr %5, align 8, !tbaa !55
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1058, ptr noundef nonnull @.str.21, i64 noundef %370, i64 noundef %264, i32 noundef %366) #13
  br label %371

371:                                              ; preds = %369, %364
  %.not504 = icmp eq i32 %366, 0
  br i1 %.not504, label %372, label %.thread650, !prof !22

372:                                              ; preds = %371
  %373 = call i32 @pnl_need(ptr noundef nonnull %163, i64 noundef %264)
  %.not505 = icmp eq i32 %373, 0
  br i1 %.not505, label %374, label %.thread650, !prof !22

374:                                              ; preds = %372
  %375 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %376 = icmp ugt i8 %375, 6
  br i1 %376, label %377, label %._crit_edge.thread, !prof !20

377:                                              ; preds = %374
  %378 = load i64, ptr %5, align 8, !tbaa !55
  %379 = load ptr, ptr %170, align 8, !tbaa !41
  %380 = getelementptr inbounds i8, ptr %379, i64 8
  %381 = load i32, ptr %380, align 4, !tbaa !69
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 7, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1068, ptr noundef nonnull @.str.22, i64 noundef %378, i32 noundef %381, i64 noundef %264) #13
  %.not506934 = icmp eq i32 %263, 0
  %.pre1169 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  br i1 %.not506934, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %377
  %382 = icmp ugt i8 %.pre1169, 6
  br i1 %382, label %.lr.ph.split, label %._crit_edge.thread

._crit_edge:                                      ; preds = %390, %377
  %383 = phi i8 [ %.pre1169, %377 ], [ %391, %390 ]
  %384 = icmp ugt i8 %383, 6
  br i1 %384, label %393, label %._crit_edge.thread, !prof !70

.lr.ph.split:                                     ; preds = %.lr.ph, %390
  %385 = phi i8 [ %391, %390 ], [ %.pre1169, %.lr.ph ]
  %.0415935 = phi i64 [ %392, %390 ], [ %264, %.lr.ph ]
  %386 = icmp ugt i8 %385, 6
  br i1 %386, label %387, label %390, !prof !20

387:                                              ; preds = %.lr.ph.split
  %388 = getelementptr inbounds i32, ptr %247, i64 %.0415935
  %389 = load i32, ptr %388, align 4, !tbaa !35
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 7, ptr noundef null, i32 noundef 0, ptr noundef nonnull @.str.23, i32 noundef %389) #13
  %.pre1167 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  br label %390

390:                                              ; preds = %.lr.ph.split, %387
  %391 = phi i8 [ %385, %.lr.ph.split ], [ %.pre1167, %387 ]
  %392 = add nsw i64 %.0415935, -1
  %.not506 = icmp eq i64 %392, 0
  br i1 %.not506, label %._crit_edge, label %.lr.ph.split, !llvm.loop !71

393:                                              ; preds = %._crit_edge
  %394 = load i32, ptr %162, align 8, !tbaa !21
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 7, ptr noundef null, i32 noundef 0, ptr noundef nonnull @.str.24, i32 noundef %394) #13
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.lr.ph, %._crit_edge, %393, %374
  %395 = load ptr, ptr %163, align 8, !tbaa !21
  %396 = call i64 @pnl_merge(ptr noundef %395, ptr noundef nonnull %247) #13
  %397 = or i8 %.4, 8
  %398 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %399 = zext i8 %398 to i32
  %400 = and i32 %399, 2
  %.not507 = icmp eq i32 %400, 0
  br i1 %.not507, label %409, label %401, !prof !22

401:                                              ; preds = %._crit_edge.thread
  %402 = load ptr, ptr %163, align 8, !tbaa !21
  %403 = load i32, ptr %162, align 8, !tbaa !21
  %404 = zext i32 %403 to i64
  %405 = call zeroext i1 @pnl_check(ptr noundef %402, i64 noundef %404) #13
  br i1 %405, label %417, label %406, !prof !22

406:                                              ; preds = %401
  %407 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %.not515 = icmp eq i8 %407, 0
  br i1 %.not515, label %.thread650, label %408, !prof !22

408:                                              ; preds = %406
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1087, ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, i32 noundef -30796, ptr noundef nonnull @.str.25) #13
  br label %.thread650

409:                                              ; preds = %._crit_edge.thread
  %410 = and i32 %399, 1
  %.not508 = icmp eq i32 %410, 0
  br i1 %.not508, label %417, label %411, !prof !20

411:                                              ; preds = %409
  %412 = load ptr, ptr %163, align 8, !tbaa !21
  %413 = load i32, ptr %162, align 8, !tbaa !21
  %414 = zext i32 %413 to i64
  %415 = call zeroext i1 @pnl_check_allocated(ptr noundef %412, i64 noundef %414)
  br i1 %415, label %417, label %416, !prof !22

416:                                              ; preds = %411
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.26, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1092) #12
  unreachable

417:                                              ; preds = %401, %411, %409
  %418 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %419 = and i8 %418, 1
  %.not509 = icmp eq i8 %419, 0
  br i1 %.not509, label %.thread1188, label %420, !prof !20

.thread1188:                                      ; preds = %417
  %.pre11721191 = load ptr, ptr %163, align 8, !tbaa !21
  %.pre11731192 = load i32, ptr %.pre11721191, align 4, !tbaa !35
  br label %.critedge593

420:                                              ; preds = %417
  %421 = call zeroext i1 @dpl_check(ptr noundef nonnull %14) #13
  br i1 %421, label %423, label %422, !prof !22

422:                                              ; preds = %420
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.27, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1094) #12
  unreachable

423:                                              ; preds = %420
  %.pre1171 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %.pre1180 = and i8 %.pre1171, 1
  %.not510 = icmp eq i8 %.pre1180, 0
  %.pre1172 = load ptr, ptr %163, align 8, !tbaa !21
  %.pre1173 = load i32, ptr %.pre1172, align 4, !tbaa !35
  br i1 %.not510, label %.critedge593, label %424, !prof !74

424:                                              ; preds = %423
  %425 = icmp eq i32 %.pre1173, 0
  br i1 %425, label %.thread1210, label %426

426:                                              ; preds = %424
  %427 = getelementptr inbounds i8, ptr %.pre1172, i64 4
  %428 = load i32, ptr %427, align 4, !tbaa !35
  %429 = load i32, ptr %162, align 8, !tbaa !21
  %430 = icmp ult i32 %428, %429
  br i1 %430, label %.critedge593.thread1200, label %431, !prof !22

431:                                              ; preds = %426
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.28, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1096) #12
  unreachable

.critedge593:                                     ; preds = %.thread1188, %423
  %.pre11731195 = phi i32 [ %.pre11731192, %.thread1188 ], [ %.pre1173, %423 ]
  %.pre11721194 = phi ptr [ %.pre11721191, %.thread1188 ], [ %.pre1172, %423 ]
  %.not511 = icmp eq i32 %.pre11731195, 0
  br i1 %.not511, label %.thread1207, label %.critedge593.thread1200

.critedge593.thread1200:                          ; preds = %426, %.critedge593
  %.pre-phi118111931206 = phi i8 [ 0, %.critedge593 ], [ 1, %426 ]
  %.pre117211941205 = phi ptr [ %.pre11721194, %.critedge593 ], [ %.pre1172, %426 ]
  %432 = getelementptr inbounds i8, ptr %.pre117211941205, i64 4
  %433 = load i32, ptr %432, align 4, !tbaa !35
  %434 = load i32, ptr %162, align 8, !tbaa !21
  %435 = add i32 %434, -1
  %436 = icmp eq i32 %433, %435
  br i1 %436, label %437, label %439, !prof !20

437:                                              ; preds = %.critedge593.thread1200
  %438 = call zeroext i1 @txn_refund(ptr noundef nonnull %14) #13
  %.pre1174 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %.pre1182 = and i8 %.pre1174, 1
  br label %439

439:                                              ; preds = %.critedge593.thread1200, %437
  %.pre-phi1183 = phi i8 [ %.pre-phi118111931206, %.critedge593.thread1200 ], [ %.pre1182, %437 ]
  %.not512 = icmp eq i8 %.pre-phi1183, 0
  br i1 %.not512, label %.thread1207, label %.thread1210, !prof !75

.thread1210:                                      ; preds = %424, %439
  %440 = load ptr, ptr %163, align 8, !tbaa !21
  %441 = load i32, ptr %162, align 8, !tbaa !21
  %442 = add i32 %441, -1
  %443 = zext i32 %442 to i64
  %444 = call zeroext i1 @pnl_check_allocated(ptr noundef %440, i64 noundef %443)
  br i1 %444, label %.thread1207, label %445, !prof !22

445:                                              ; preds = %.thread1210
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1102) #12
  unreachable

.thread1207:                                      ; preds = %.critedge593, %439, %.thread1210
  %446 = and i8 %.4, 4
  %.not514 = icmp eq i8 %446, 0
  br i1 %.not514, label %.loopexit672, label %447

447:                                              ; preds = %.thread1207
  %448 = load ptr, ptr %163, align 8, !tbaa !21
  %449 = load i32, ptr %448, align 4, !tbaa !35
  %450 = zext i32 %449 to i64
  %451 = load i32, ptr %164, align 8, !tbaa !44
  %452 = lshr i32 %451, 1
  %453 = icmp ult i32 %449, %452
  br i1 %453, label %454, label %459

454:                                              ; preds = %447
  %455 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %456 = icmp ugt i8 %455, 5
  br i1 %456, label %457, label %.outer.backedge, !prof !20

457:                                              ; preds = %454
  %458 = load i64, ptr %5, align 8, !tbaa !55
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1109, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i64 noundef %458, i64 noundef %450) #13
  br label %.outer.backedge

.outer.backedge:                                  ; preds = %457, %454
  br label %.outer

459:                                              ; preds = %447
  %460 = add nsw i8 %397, -4
  br label %.loopexit672

.loopexit672:                                     ; preds = %.thread1207, %.thread620, %459
  %.3413 = phi i32 [ %.4414624, %.thread620 ], [ %.us-phi910, %459 ], [ %.us-phi910, %.thread1207 ]
  %.5 = phi i8 [ %.6625, %.thread620 ], [ %460, %459 ], [ %397, %.thread1207 ]
  %461 = zext i8 %.5 to i32
  %462 = and i32 %461, 2
  %463 = icmp ne i32 %462, 0
  %or.cond3 = and i1 %33, %463
  br i1 %or.cond3, label %464, label %472

464:                                              ; preds = %.loopexit672
  %465 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %466 = icmp ugt i8 %465, 5
  br i1 %466, label %467, label %824, !prof !20

467:                                              ; preds = %464
  %468 = load i64, ptr %5, align 8, !tbaa !55
  %469 = load ptr, ptr %163, align 8, !tbaa !21
  %470 = load i32, ptr %469, align 4, !tbaa !35
  %471 = zext i32 %470 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1118, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.32, i64 noundef %468, i64 noundef %471) #13
  br label %thread-pre-split661

472:                                              ; preds = %.loopexit672
  %473 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %474 = and i8 %473, 1
  %.not540 = icmp ne i8 %474, 0
  %475 = and i32 %461, 8
  %.not541 = icmp eq i32 %475, 0
  %or.cond594 = and i1 %.not541, %.not540
  br i1 %or.cond594, label %476, label %477, !prof !76

476:                                              ; preds = %472
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.33, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1123) #12
  unreachable

477:                                              ; preds = %472
  %.not542 = icmp eq i8 %474, 0
  %brmerge = or i1 %.not542, %.not595
  br i1 %brmerge, label %479, label %478, !prof !39

478:                                              ; preds = %477
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.34, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1124) #12
  unreachable

479:                                              ; preds = %477
  %480 = load ptr, ptr %163, align 8, !tbaa !21
  %481 = load i32, ptr %480, align 4, !tbaa !35
  %482 = zext i32 %481 to i64
  %.not543 = icmp ult i64 %482, %1
  br i1 %.not543, label %500, label %483

483:                                              ; preds = %479
  br i1 %.not542, label %493, label %484, !prof !20

484:                                              ; preds = %483
  %485 = getelementptr inbounds i32, ptr %480, i64 %482
  %486 = load i32, ptr %485, align 4, !tbaa !35
  %487 = load i32, ptr %162, align 8, !tbaa !21
  %488 = icmp ult i32 %486, %487
  br i1 %488, label %489, label %.critedge597, !prof !22

489:                                              ; preds = %484
  %490 = getelementptr inbounds i8, ptr %480, i64 4
  %491 = load i32, ptr %490, align 4, !tbaa !35
  %492 = icmp ult i32 %491, %487
  br i1 %492, label %493, label %.critedge597, !prof !22

.critedge597:                                     ; preds = %484, %489
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1127) #12
  unreachable

493:                                              ; preds = %489, %483
  br i1 %165, label %494, label %498, !prof !22

494:                                              ; preds = %493
  %.not598 = xor i1 %463, true
  %brmerge599 = or i1 %.not542, %.not598
  br i1 %brmerge599, label %496, label %495, !prof !39

495:                                              ; preds = %494
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.35, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1129) #12
  unreachable

496:                                              ; preds = %494
  %497 = call i32 @repnl_get_single(ptr noundef nonnull %14) #14
  br label %.loopexit671

498:                                              ; preds = %493
  %499 = call i32 @repnl_get_sequence(ptr noundef nonnull %14, i64 noundef %1, i8 noundef zeroext %.5) #14
  %.not545 = icmp eq i32 %499, 0
  br i1 %.not545, label %500, label %.loopexit671, !prof !20

500:                                              ; preds = %498, %479
  %501 = add i8 %.5, -8
  %502 = load i32, ptr %157, align 4, !tbaa !38
  %503 = and i32 %502, 128
  %504 = icmp eq i32 %503, 0
  br i1 %504, label %505, label %.loopexit670

505:                                              ; preds = %500
  %506 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %507 = icmp ugt i8 %506, 5
  br i1 %507, label %508, label %.preheader, !prof !20

508:                                              ; preds = %505
  %509 = load i64, ptr %5, align 8, !tbaa !55
  %510 = load ptr, ptr %163, align 8, !tbaa !21
  %511 = load i32, ptr %510, align 4, !tbaa !35
  %512 = zext i32 %511 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1139, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.36, i64 noundef %509, i64 noundef %512) #13
  br label %.preheader

.loopexit670:                                     ; preds = %197, %.outer.split, %214, %210, %356, %500, %190
  %.4414.ph = phi i32 [ %.us-phi910, %356 ], [ 17, %190 ], [ %.3413, %500 ], [ %.1411.us, %210 ], [ %.1411.us, %214 ], [ 12, %.outer.split ], [ %.1411.ph673, %197 ]
  %.6.ph = phi i8 [ %334, %356 ], [ %.2, %190 ], [ %501, %500 ], [ %.3.ph674, %210 ], [ %.3.ph674, %214 ], [ %.3.ph674, %.outer.split ], [ %.3.ph674, %197 ]
  %.pr = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %513 = icmp ugt i8 %.pr, 5
  br i1 %513, label %514, label %.thread620, !prof !77

514:                                              ; preds = %.loopexit670
  %515 = load i64, ptr %5, align 8, !tbaa !55
  %516 = load ptr, ptr %163, align 8, !tbaa !21
  %517 = load i32, ptr %516, align 4, !tbaa !35
  %518 = zext i32 %517 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1144, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.37, i64 noundef %515, i64 noundef %518) #13
  br label %.thread620

.thread620:                                       ; preds = %353, %514, %.loopexit670
  %.6625 = phi i8 [ %.6.ph, %514 ], [ %.6.ph, %.loopexit670 ], [ %334, %353 ]
  %.4414624 = phi i32 [ %.4414.ph, %514 ], [ %.4414.ph, %.loopexit670 ], [ %.us-phi910, %353 ]
  %519 = load i32, ptr %157, align 4, !tbaa !38
  %520 = or i32 %519, 128
  store i32 %520, ptr %157, align 4, !tbaa !38
  %521 = zext i8 %.6625 to i32
  %522 = and i32 %521, 8
  %.not520 = icmp eq i32 %522, 0
  br i1 %.not520, label %523, label %.loopexit672

523:                                              ; preds = %.thread620
  %524 = load i32, ptr %162, align 8, !tbaa !21
  %525 = zext i32 %524 to i64
  %526 = add i64 %525, %1
  call void @meta_recent(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %8, ptr noundef %16, ptr noundef nonnull %153)
  call void @meta_prefer_steady(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %9, ptr noundef %16, ptr noundef nonnull %153)
  %527 = load ptr, ptr %171, align 8, !tbaa !21
  %528 = load ptr, ptr %172, align 8, !tbaa !21
  %529 = icmp ne ptr %527, %528
  %530 = load i64, ptr %173, align 8
  %531 = icmp ne i64 %530, 0
  %or.cond6 = select i1 %529, i1 %531, i1 false
  br i1 %or.cond6, label %532, label %.thread628

532:                                              ; preds = %523
  %533 = load ptr, ptr %15, align 8, !tbaa !11
  %534 = getelementptr inbounds i8, ptr %533, i64 392
  %535 = load i64, ptr %534, align 8, !tbaa !53
  %536 = load i64, ptr %9, align 8, !tbaa !78
  %537 = icmp eq i64 %535, %536
  br i1 %537, label %538, label %.thread628

538:                                              ; preds = %532
  %539 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %540 = icmp ugt i8 %539, 4
  br i1 %540, label %541, label %547, !prof !20

541:                                              ; preds = %538
  %542 = load i64, ptr %8, align 8, !tbaa !78
  %543 = call ptr @durable_caption(ptr noundef %527) #13
  %544 = load i64, ptr %9, align 8, !tbaa !78
  %545 = load ptr, ptr %172, align 8, !tbaa !21
  %546 = call ptr @durable_caption(ptr noundef %545) #13
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1166, ptr noundef nonnull @.str.38, i64 noundef %542, ptr noundef %543, i64 noundef %544, ptr noundef %546) #13
  br label %547

547:                                              ; preds = %541, %538
  %548 = load ptr, ptr %174, align 8, !tbaa !52
  %549 = getelementptr inbounds i8, ptr %548, i64 16
  %550 = call i32 @atomic_load32(ptr noundef nonnull %549, i32 noundef 0)
  %551 = load ptr, ptr %174, align 8, !tbaa !52
  %552 = getelementptr inbounds i8, ptr %551, i64 24
  %553 = call i64 @atomic_load64(ptr noundef nonnull %552, i32 noundef 0)
  %554 = load i32, ptr %88, align 4, !tbaa !40
  %555 = and i32 %554, 1114112
  %556 = icmp eq i32 %555, 1114112
  br i1 %556, label %557, label %582

557:                                              ; preds = %547
  %558 = zext i32 %550 to i64
  %559 = or i64 %553, %558
  %560 = icmp eq i64 %559, 0
  br i1 %560, label %566, label %561

561:                                              ; preds = %557
  %562 = load ptr, ptr %172, align 8, !tbaa !21
  %563 = getelementptr inbounds i8, ptr %562, i64 32
  %564 = load i32, ptr %563, align 4, !tbaa !21
  %565 = zext i32 %564 to i64
  %.not521 = icmp ult i64 %526, %565
  br i1 %.not521, label %582, label %566

566:                                              ; preds = %561, %557
  %567 = load ptr, ptr %15, align 8, !tbaa !11
  %568 = getelementptr inbounds i8, ptr %567, i64 392
  %569 = load i64, ptr %568, align 8, !tbaa !53
  %570 = call i32 @meta_wipe_steady(ptr noundef nonnull %16, i64 noundef %569) #13
  %571 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %572 = icmp ugt i8 %571, 4
  br i1 %572, label %573, label %574, !prof !20

573:                                              ; preds = %566
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1186, ptr noundef nonnull @.str.39, i32 noundef %570) #13
  br label %574

574:                                              ; preds = %573, %566
  %.not534 = icmp eq i32 %570, 0
  br i1 %.not534, label %575, label %.thread650, !prof !22

575:                                              ; preds = %574
  %576 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %577 = and i8 %576, 1
  %.not535 = icmp eq i8 %577, 0
  br i1 %.not535, label %.backedge680.backedge, label %578, !prof !20

.backedge680.backedge:                            ; preds = %575, %578, %.thread1217, %643
  br label %.backedge680

578:                                              ; preds = %575
  %579 = load ptr, ptr %172, align 8, !tbaa !21
  call void @meta_prefer_steady(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %10, ptr noundef nonnull %16, ptr noundef nonnull %153)
  %580 = load ptr, ptr %177, align 8, !tbaa !21
  %.not536 = icmp eq ptr %579, %580
  br i1 %.not536, label %581, label %.backedge680.backedge, !prof !20

581:                                              ; preds = %578
  call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.40, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1189) #12
  unreachable

582:                                              ; preds = %561, %547
  %.not522 = icmp eq i32 %550, 0
  br i1 %.not522, label %588, label %583

583:                                              ; preds = %582
  %584 = load ptr, ptr %174, align 8, !tbaa !52
  %585 = getelementptr inbounds i8, ptr %584, i64 376
  %586 = call i64 @atomic_load64(ptr noundef nonnull %585, i32 noundef 0)
  %587 = zext i32 %550 to i64
  %.not523 = icmp ult i64 %586, %587
  br i1 %.not523, label %588, label %607

588:                                              ; preds = %583, %582
  %.not524 = icmp eq i64 %553, 0
  br i1 %.not524, label %596, label %589

589:                                              ; preds = %588
  %590 = load ptr, ptr %174, align 8, !tbaa !52
  %591 = getelementptr inbounds i8, ptr %590, i64 368
  %592 = call i64 @atomic_load64(ptr noundef nonnull %591, i32 noundef 0)
  %.not525 = icmp eq i64 %592, 0
  br i1 %.not525, label %596, label %593

593:                                              ; preds = %589
  %594 = call i64 @osal_monotime() #13
  %595 = sub i64 %594, %592
  %.not526 = icmp ult i64 %595, %553
  br i1 %.not526, label %596, label %607

596:                                              ; preds = %593, %589, %588
  %597 = load i32, ptr %167, align 8, !tbaa !68
  %598 = zext i32 %597 to i64
  %.not527 = icmp ult i64 %526, %598
  br i1 %.not527, label %599, label %607

599:                                              ; preds = %596
  br i1 %94, label %606, label %600

600:                                              ; preds = %599
  %601 = load i32, ptr %175, align 4, !tbaa !21
  %602 = zext i32 %601 to i64
  %.not528 = icmp uge i64 %526, %602
  %603 = zext i32 %550 to i64
  %604 = or i64 %553, %603
  %605 = icmp eq i64 %604, 0
  %or.cond602 = select i1 %.not528, i1 %605, i1 false
  br i1 %or.cond602, label %607, label %.thread628

606:                                              ; preds = %599
  %.old = zext i32 %550 to i64
  %.old600 = or i64 %553, %.old
  %.old601 = icmp eq i64 %.old600, 0
  br i1 %.old601, label %607, label %.thread628

607:                                              ; preds = %600, %606, %596, %593, %583
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %11) #13
  %608 = load ptr, ptr %171, align 8, !tbaa !21
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(224) %11, ptr noundef nonnull align 4 dereferenceable(224) %608, i64 224, i1 false), !tbaa.struct !80
  %609 = load i32, ptr %88, align 4, !tbaa !40
  %610 = and i32 %609, 524288
  %611 = call i32 @dxb_sync_locked(ptr noundef nonnull %16, i32 noundef %610, ptr noundef nonnull %11, ptr noundef nonnull %153) #13
  %612 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %613 = icmp ugt i8 %612, 4
  br i1 %613, label %614, label %615, !prof !20

614:                                              ; preds = %607
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1203, ptr noundef nonnull @.str.41, i32 noundef %611) #13
  br label %615

615:                                              ; preds = %607, %614
  %616 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %617 = and i8 %616, 1
  %.not529 = icmp ne i8 %617, 0
  %.not530 = icmp eq i32 %611, -1
  %or.cond603 = select i1 %.not529, i1 %.not530, i1 false
  br i1 %or.cond603, label %618, label %619, !prof !76

618:                                              ; preds = %615
  call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.42, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1204) #12
  unreachable

619:                                              ; preds = %615
  %.not531 = icmp eq i32 %611, 0
  br i1 %.not531, label %620, label %.loopexit.thread, !prof !22

620:                                              ; preds = %619
  %.not532 = icmp eq i8 %617, 0
  br i1 %.not532, label %.thread1217, label %621, !prof !20

621:                                              ; preds = %620
  %622 = load ptr, ptr %172, align 8, !tbaa !21
  call void @meta_prefer_steady(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %12, ptr noundef nonnull %16, ptr noundef nonnull %153)
  %623 = load ptr, ptr %176, align 8, !tbaa !21
  %.not533 = icmp eq ptr %622, %623
  br i1 %.not533, label %624, label %.thread1217, !prof !20

624:                                              ; preds = %621
  call void @mdbx_assert_fail(ptr noundef nonnull %16, ptr noundef nonnull @.str.40, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1207) #12
  unreachable

.thread1217:                                      ; preds = %621, %620
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %11) #13
  br label %.backedge680.backedge

.thread628:                                       ; preds = %600, %606, %532, %523
  %625 = load ptr, ptr %174, align 8, !tbaa !52
  %626 = getelementptr inbounds i8, ptr %625, i64 492
  %627 = call i32 @atomic_load32(ptr noundef nonnull %626, i32 noundef 1)
  %628 = icmp eq i32 %627, 1
  br i1 %628, label %629, label %631, !prof !20

629:                                              ; preds = %.thread628
  %630 = call zeroext i1 @txn_gc_detent(ptr noundef nonnull %14) #13
  br i1 %630, label %179, label %631

631:                                              ; preds = %629, %.thread628
  %632 = and i32 %521, 2
  %.not537 = icmp eq i32 %632, 0
  br i1 %.not537, label %633, label %636

633:                                              ; preds = %631
  %634 = load i32, ptr %175, align 4, !tbaa !21
  %635 = zext i32 %634 to i64
  %.not538 = icmp ugt i64 %526, %635
  br i1 %.not538, label %636, label %.loopexit671

636:                                              ; preds = %633, %631
  %637 = load i64, ptr %154, align 8, !tbaa !54
  %638 = load ptr, ptr %15, align 8, !tbaa !11
  %639 = getelementptr inbounds i8, ptr %638, i64 392
  %640 = load i64, ptr %639, align 8, !tbaa !53
  %641 = sub i64 %637, %640
  %642 = icmp ugt i64 %641, 1
  br i1 %642, label %643, label %.loopexit677.loopexit

643:                                              ; preds = %636
  %644 = call zeroext i1 @mvcc_kick_laggards(ptr noundef nonnull %16, i64 noundef %640) #13
  br i1 %644, label %.backedge680.backedge, label %.loopexit677.loopexit

.loopexit677.loopexit:                            ; preds = %636, %643
  %.pre1175 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %.pre1184 = and i8 %.pre1175, 1
  br label %.loopexit677

.loopexit677:                                     ; preds = %.loopexit677.loopexit, %78, %77
  %.pre-phi1185 = phi i8 [ %.pre1184, %.loopexit677.loopexit ], [ 1, %78 ], [ 0, %77 ]
  %.7 = phi i8 [ %.6625, %.loopexit677.loopexit ], [ %2, %78 ], [ %2, %77 ]
  %645 = and i8 %.7, 2
  %.not552 = icmp eq i8 %645, 0
  br i1 %.not552, label %646, label %.thread650

646:                                              ; preds = %.loopexit677
  %647 = getelementptr inbounds i8, ptr %14, i64 40
  %648 = getelementptr inbounds i8, ptr %14, i64 56
  %649 = load i32, ptr %648, align 8, !tbaa !21
  %650 = zext i32 %649 to i64
  %651 = add i64 %650, %1
  %652 = getelementptr inbounds i8, ptr %14, i64 52
  %653 = load i32, ptr %652, align 4, !tbaa !21
  %654 = zext i32 %653 to i64
  %.not553 = icmp ugt i64 %651, %654
  br i1 %.not553, label %655, label %.loopexit671

655:                                              ; preds = %646
  %656 = getelementptr inbounds i8, ptr %14, i64 48
  %657 = load i32, ptr %656, align 8, !tbaa !68
  %658 = zext i32 %657 to i64
  %659 = icmp ugt i64 %651, %658
  br i1 %659, label %662, label %660

660:                                              ; preds = %655
  %661 = load i16, ptr %647, align 8, !tbaa !81
  %.not554 = icmp eq i16 %661, 0
  br i1 %.not554, label %662, label %666

662:                                              ; preds = %655, %660
  %663 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %664 = icmp ugt i8 %663, 2
  br i1 %664, label %665, label %.thread650, !prof !20

665:                                              ; preds = %662
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1247, ptr noundef nonnull @.str.44, i64 noundef %651, i32 noundef %657) #13
  br label %.thread650

666:                                              ; preds = %660
  %667 = call i32 @pv2pages(i16 noundef zeroext %661) #16
  %.lhs.trunc = trunc i64 %651 to i32
  %668 = urem i32 %.lhs.trunc, %667
  %.tr = add i32 %667, %.lhs.trunc
  %.narrow = sub i32 %.tr, %668
  %669 = zext i32 %.narrow to i64
  %670 = call i32 @pgno_align2os_pgno(ptr noundef %16, i64 noundef %669) #15
  %spec.select605 = call i32 @llvm.umin.i32(i32 %670, i32 %657)
  %.0397 = zext i32 %spec.select605 to i64
  %.not557 = icmp ne i8 %.pre-phi1185, 0
  %.not558 = icmp ugt i64 %651, %.0397
  %or.cond606 = select i1 %.not557, i1 %.not558, i1 false
  br i1 %or.cond606, label %671, label %672, !prof !76

671:                                              ; preds = %666
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1258) #12
  unreachable

672:                                              ; preds = %666
  %673 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %674 = icmp ugt i8 %673, 3
  br i1 %674, label %675, label %677, !prof !20

675:                                              ; preds = %672
  %676 = sub nsw i64 %.0397, %654
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1260, ptr noundef nonnull @.str.47, i64 noundef %.0397, i64 noundef %676) #13
  %.pre1176 = load i32, ptr %648, align 8, !tbaa !21
  %.pre1177 = load i32, ptr %656, align 8, !tbaa !68
  br label %677

677:                                              ; preds = %675, %672
  %678 = phi i32 [ %.pre1177, %675 ], [ %657, %672 ]
  %679 = phi i32 [ %.pre1176, %675 ], [ %649, %672 ]
  %680 = call i32 @dxb_resize(ptr noundef %16, i32 noundef %679, i32 noundef %spec.select605, i32 noundef %678, i32 noundef 0) #13
  %.not559 = icmp eq i32 %680, 0
  br i1 %.not559, label %687, label %681

681:                                              ; preds = %677
  %682 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %.not561 = icmp eq i8 %682, 0
  br i1 %.not561, label %.thread650, label %683, !prof !22

683:                                              ; preds = %681
  %684 = load i32, ptr %652, align 4, !tbaa !21
  %685 = zext i32 %684 to i64
  %686 = sub nsw i64 %.0397, %685
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1263, ptr noundef nonnull @.str.48, i64 noundef %.0397, i64 noundef %686, i32 noundef %680) #13
  br label %.thread650

687:                                              ; preds = %677
  %688 = getelementptr inbounds i8, ptr %16, i64 384
  %689 = load ptr, ptr %688, align 8, !tbaa !82
  %690 = getelementptr inbounds i8, ptr %689, i64 52
  store i32 %spec.select605, ptr %690, align 4, !tbaa !21
  br label %.loopexit671

.loopexit671:                                     ; preds = %633, %498, %330, %687, %328, %646, %58, %496
  %691 = phi i64 [ %.ph, %58 ], [ %73, %646 ], [ %73, %496 ], [ %73, %328 ], [ %73, %687 ], [ %73, %330 ], [ %73, %498 ], [ %73, %633 ]
  %.10 = phi i32 [ %59, %58 ], [ 0, %646 ], [ %497, %496 ], [ %329, %328 ], [ 0, %687 ], [ %331, %330 ], [ %499, %498 ], [ 0, %633 ]
  %.8 = phi i8 [ %2, %58 ], [ %.7, %646 ], [ %.5, %496 ], [ %.3.ph674, %328 ], [ %.7, %687 ], [ %.3.ph674, %330 ], [ %.5, %498 ], [ %.6625, %633 ]
  %692 = and i8 %.8, 2
  %693 = icmp eq i8 %692, 0
  br i1 %693, label %696, label %thread-pre-split661, !prof !22

.thread634:                                       ; preds = %326
  %694 = and i8 %.3.ph674, 2
  %695 = icmp eq i8 %694, 0
  br i1 %695, label %.thread639, label %thread-pre-split661, !prof !22

696:                                              ; preds = %.loopexit671
  %.not563 = icmp eq i32 %.10, 0
  %.pre1178 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  br i1 %.not563, label %714, label %..thread639_crit_edge

..thread639_crit_edge:                            ; preds = %696
  %.pre1186 = and i8 %.pre1178, 1
  br label %.thread639

.thread639:                                       ; preds = %..thread639_crit_edge, %.thread634
  %.pre-phi1187 = phi i8 [ %.pre1186, %..thread639_crit_edge ], [ %315, %.thread634 ]
  %697 = phi i64 [ %691, %..thread639_crit_edge ], [ %73, %.thread634 ]
  %.10637645 = phi i32 [ %.10, %..thread639_crit_edge ], [ -1, %.thread634 ]
  %.8638644 = phi i8 [ %.8, %..thread639_crit_edge ], [ %.3.ph674, %.thread634 ]
  %.not567 = icmp eq i8 %.pre-phi1187, 0
  br i1 %.not567, label %.thread646, label %698, !prof !20

698:                                              ; preds = %.thread639
  %699 = zext i32 %.10637645 to i64
  %700 = add i64 %699, %1
  %701 = getelementptr inbounds i8, ptr %14, i64 56
  %702 = load i32, ptr %701, align 8, !tbaa !21
  %703 = zext i32 %702 to i64
  %704 = icmp ugt i64 %700, %703
  %705 = icmp ult i32 %.10637645, 3
  %.not570 = select i1 %704, i1 true, i1 %705
  br i1 %.not570, label %706, label %707, !prof !20

706:                                              ; preds = %698
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.49, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1275) #12
  unreachable

707:                                              ; preds = %698
  %708 = getelementptr inbounds i8, ptr %14, i64 200
  %709 = load ptr, ptr %708, align 8, !tbaa !21
  %710 = add i32 %702, -1
  %711 = zext i32 %710 to i64
  %712 = call zeroext i1 @pnl_check_allocated(ptr noundef %709, i64 noundef %711)
  br i1 %712, label %.thread646, label %713, !prof !22

713:                                              ; preds = %707
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1276) #12
  unreachable

714:                                              ; preds = %696
  %715 = getelementptr inbounds i8, ptr %14, i64 56
  %716 = load i32, ptr %715, align 8, !tbaa !21
  %717 = trunc i64 %1 to i32
  %718 = add i32 %716, %717
  store i32 %718, ptr %715, align 8, !tbaa !21
  %719 = and i8 %.pre1178, 1
  %.not564 = icmp eq i8 %719, 0
  br i1 %.not564, label %.thread646, label %720, !prof !20

720:                                              ; preds = %714
  %721 = getelementptr inbounds i8, ptr %14, i64 52
  %722 = load i32, ptr %721, align 4, !tbaa !21
  %.not565 = icmp ugt i32 %718, %722
  br i1 %.not565, label %723, label %724, !prof !20

723:                                              ; preds = %720
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.50, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1280) #12
  unreachable

724:                                              ; preds = %720
  %725 = icmp ult i32 %716, 3
  %726 = zext i32 %716 to i64
  %727 = add i64 %726, %1
  %728 = zext i32 %718 to i64
  %729 = icmp ugt i64 %727, %728
  %or.cond669 = select i1 %725, i1 true, i1 %729
  br i1 %or.cond669, label %.critedge608, label %.thread646, !prof !83

.critedge608:                                     ; preds = %724
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.51, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1281) #12
  unreachable

.thread646:                                       ; preds = %724, %714, %.thread639, %707
  %730 = phi i64 [ %697, %707 ], [ %697, %.thread639 ], [ %691, %714 ], [ %691, %724 ]
  %.8638643 = phi i8 [ %.8638644, %707 ], [ %.8638644, %.thread639 ], [ %.8, %714 ], [ %.8, %724 ]
  %.11 = phi i32 [ %.10637645, %707 ], [ %.10637645, %.thread639 ], [ %716, %714 ], [ %716, %724 ]
  %731 = call { ptr, i32 } @page_alloc_finalize(ptr noundef %16, ptr noundef nonnull %14, ptr noundef %0, i32 noundef %.11, i64 noundef %1)
  %732 = extractvalue { ptr, i32 } %731, 0
  %733 = extractvalue { ptr, i32 } %731, 1
  %.not572 = icmp eq i32 %733, 0
  br i1 %.not572, label %817, label %.thread650, !prof !22

.thread650:                                       ; preds = %574, %.split908.us, %371, %372, %.thread646, %683, %681, %184, %226, %.split.us, %261, %.critedge589, %408, %406, %.loopexit677, %665, %662
  %.ph649 = phi i64 [ %73, %662 ], [ %73, %665 ], [ %73, %.loopexit677 ], [ %73, %406 ], [ %73, %408 ], [ %73, %.critedge589 ], [ %73, %261 ], [ %73, %.split.us ], [ %73, %226 ], [ %73, %184 ], [ %73, %681 ], [ %73, %683 ], [ %730, %.thread646 ], [ %73, %372 ], [ %73, %371 ], [ %73, %.split908.us ], [ %73, %574 ]
  %.9.ph = phi i8 [ %.7, %662 ], [ %.7, %665 ], [ %.7, %.loopexit677 ], [ %397, %406 ], [ %397, %408 ], [ %.3.ph674, %.critedge589 ], [ %.3.ph674, %261 ], [ %.3.ph674, %.split.us ], [ %.3.ph674, %226 ], [ %.2, %184 ], [ %.7, %681 ], [ %.7, %683 ], [ %.8638643, %.thread646 ], [ %.3.ph674, %.split908.us ], [ %.4, %371 ], [ %.4, %372 ], [ %.6625, %574 ]
  %.sroa.4378.6.ph = phi i32 [ -30792, %662 ], [ -30792, %665 ], [ -30798, %.loopexit677 ], [ -30796, %406 ], [ -30796, %408 ], [ -30796, %.critedge589 ], [ -30796, %261 ], [ -30796, %.split.us ], [ -30796, %226 ], [ -30779, %184 ], [ %680, %681 ], [ %680, %683 ], [ %733, %.thread646 ], [ %245, %.split908.us ], [ %366, %371 ], [ %373, %372 ], [ %570, %574 ]
  %734 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %735 = and i8 %734, 1
  br label %741

.loopexit.thread:                                 ; preds = %619
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %11) #13
  %736 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %737 = and i8 %736, 1
  br label %741

.loopexit:                                        ; preds = %.outer.split.preheader, %.outer.split, %.outer.split.us
  %.sroa.4378.6 = phi i32 [ %209, %.outer.split.us ], [ %222, %.outer.split ], [ %196, %.outer.split.preheader ]
  %738 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !17
  %739 = and i8 %738, 1
  %.not573 = icmp ne i8 %739, 0
  %.not574 = icmp eq i32 %.sroa.4378.6, 0
  %or.cond609 = and i1 %.not573, %.not574
  br i1 %or.cond609, label %740, label %741, !prof !84

740:                                              ; preds = %.loopexit
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.52, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1287) #12
  unreachable

741:                                              ; preds = %.loopexit.thread, %.thread650, %.loopexit
  %742 = phi i8 [ %735, %.thread650 ], [ %739, %.loopexit ], [ %737, %.loopexit.thread ]
  %.sroa.4378.6657 = phi i32 [ %.sroa.4378.6.ph, %.thread650 ], [ %.sroa.4378.6, %.loopexit ], [ %611, %.loopexit.thread ]
  %.9656 = phi i8 [ %.9.ph, %.thread650 ], [ %.3.ph674, %.loopexit ], [ %.6625, %.loopexit.thread ]
  %743 = phi i64 [ %.ph649, %.thread650 ], [ %73, %.loopexit ], [ %73, %.loopexit.thread ]
  %.not575 = icmp eq i8 %742, 0
  br i1 %.not575, label %753, label %744, !prof !20

744:                                              ; preds = %741
  %745 = getelementptr inbounds i8, ptr %14, i64 200
  %746 = load ptr, ptr %745, align 8, !tbaa !21
  %747 = getelementptr inbounds i8, ptr %14, i64 56
  %748 = load i32, ptr %747, align 8, !tbaa !21
  %749 = add i32 %748, -1
  %750 = zext i32 %749 to i64
  %751 = call zeroext i1 @pnl_check_allocated(ptr noundef %746, i64 noundef %750)
  br i1 %751, label %753, label %752, !prof !22

752:                                              ; preds = %744
  call void @mdbx_assert_fail(ptr noundef %16, ptr noundef nonnull @.str.1, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1288) #12
  unreachable

753:                                              ; preds = %744, %741
  %754 = zext i8 %.9656 to i32
  %755 = and i32 %754, 1
  %.not576 = icmp eq i32 %755, 0
  br i1 %.not576, label %756, label %762

756:                                              ; preds = %753
  %757 = and i32 %754, 2
  %.not577 = icmp eq i32 %757, 0
  br i1 %.not577, label %758, label %762

758:                                              ; preds = %756
  %759 = getelementptr inbounds i8, ptr %14, i64 4
  %760 = load i32, ptr %759, align 4, !tbaa !38
  %761 = or i32 %760, 2
  store i32 %761, ptr %759, align 4, !tbaa !38
  br label %762

762:                                              ; preds = %756, %753, %758
  %.0 = phi i32 [ 1, %758 ], [ 5, %753 ], [ 3, %756 ]
  %763 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  %764 = zext i8 %763 to i32
  %.not578 = icmp ugt i32 %.0, %764
  br i1 %.not578, label %817, label %765, !prof !22

765:                                              ; preds = %762
  %.not579 = icmp eq i64 %1, 0
  br i1 %.not579, label %.thread658, label %766

766:                                              ; preds = %765
  %767 = and i32 %754, 2
  %.not580 = icmp eq i32 %767, 0
  %768 = select i1 %.not580, ptr @.str.55, ptr @.str.54
  %769 = getelementptr inbounds i8, ptr %14, i64 4
  %770 = load i32, ptr %769, align 4, !tbaa !38
  %771 = getelementptr inbounds i8, ptr %14, i64 200
  %772 = load ptr, ptr %771, align 8, !tbaa !21
  %773 = load i32, ptr %772, align 4, !tbaa !35
  %774 = zext i32 %773 to i64
  %775 = getelementptr inbounds i8, ptr %14, i64 520
  %776 = load i64, ptr %775, align 8, !tbaa !21
  %777 = getelementptr inbounds i8, ptr %14, i64 88
  %778 = load ptr, ptr %777, align 8, !tbaa !41
  %779 = getelementptr inbounds i8, ptr %778, i64 2
  %780 = load i16, ptr %779, align 2, !tbaa !85
  %781 = zext i16 %780 to i32
  %782 = getelementptr inbounds i8, ptr %778, i64 12
  %783 = load i32, ptr %782, align 4, !tbaa !42
  %784 = zext i32 %783 to i64
  %785 = getelementptr inbounds i8, ptr %778, i64 16
  %786 = load i32, ptr %785, align 4, !tbaa !86
  %787 = zext i32 %786 to i64
  %788 = getelementptr inbounds i8, ptr %778, i64 20
  %789 = load i32, ptr %788, align 4, !tbaa !87
  %790 = zext i32 %789 to i64
  %791 = getelementptr inbounds i8, ptr %778, i64 32
  %792 = load i64, ptr %791, align 4, !tbaa !88
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef %.0, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1300, ptr noundef nonnull @.str.53, ptr noundef nonnull %768, i64 noundef %1, i32 noundef %754, i32 noundef %.sroa.4378.6657, i32 noundef %770, i64 noundef %774, i64 noundef %776, i32 noundef %781, i64 noundef %784, i64 noundef %787, i64 noundef %790, i64 noundef %792) #13
  br label %817

.thread658:                                       ; preds = %765
  %793 = getelementptr inbounds i8, ptr %14, i64 4
  %794 = load i32, ptr %793, align 4, !tbaa !38
  %795 = getelementptr inbounds i8, ptr %14, i64 200
  %796 = load ptr, ptr %795, align 8, !tbaa !21
  %797 = load i32, ptr %796, align 4, !tbaa !35
  %798 = zext i32 %797 to i64
  %799 = getelementptr inbounds i8, ptr %14, i64 520
  %800 = load i64, ptr %799, align 8, !tbaa !21
  %801 = getelementptr inbounds i8, ptr %14, i64 88
  %802 = load ptr, ptr %801, align 8, !tbaa !41
  %803 = getelementptr inbounds i8, ptr %802, i64 2
  %804 = load i16, ptr %803, align 2, !tbaa !85
  %805 = zext i16 %804 to i32
  %806 = getelementptr inbounds i8, ptr %802, i64 12
  %807 = load i32, ptr %806, align 4, !tbaa !42
  %808 = zext i32 %807 to i64
  %809 = getelementptr inbounds i8, ptr %802, i64 16
  %810 = load i32, ptr %809, align 4, !tbaa !86
  %811 = zext i32 %810 to i64
  %812 = getelementptr inbounds i8, ptr %802, i64 20
  %813 = load i32, ptr %812, align 4, !tbaa !87
  %814 = zext i32 %813 to i64
  %815 = getelementptr inbounds i8, ptr %802, i64 32
  %816 = load i64, ptr %815, align 4, !tbaa !88
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef %.0, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1309, ptr noundef nonnull @.str.56, i32 noundef %754, i32 noundef %.sroa.4378.6657, i32 noundef %794, i64 noundef %798, i64 noundef %800, i32 noundef %805, i64 noundef %808, i64 noundef %811, i64 noundef %814, i64 noundef %816) #13
  br label %.thread663

817:                                              ; preds = %762, %766, %.thread646
  %818 = phi i64 [ %730, %.thread646 ], [ %743, %766 ], [ %743, %762 ]
  %.sroa.0377.0 = phi ptr [ %732, %.thread646 ], [ null, %766 ], [ null, %762 ]
  %.sroa.4378.7 = phi i32 [ 0, %.thread646 ], [ %.sroa.4378.6657, %766 ], [ %.sroa.4378.6657, %762 ]
  br i1 %33, label %.thread663, label %819

819:                                              ; preds = %817
  %820 = call i64 @monotime_since_cached(i64 noundef %818, ptr noundef nonnull %4)
  %821 = getelementptr inbounds i8, ptr %14, i64 336
  %822 = load i64, ptr %821, align 8, !tbaa !21
  %823 = add i64 %822, %820
  store i64 %823, ptr %821, align 8, !tbaa !21
  br label %.thread663

thread-pre-split661:                              ; preds = %.loopexit671, %288, %467, %.thread634
  %.sroa.4378.8.ph = phi i32 [ 0, %.thread634 ], [ 0, %467 ], [ -30798, %288 ], [ 0, %.loopexit671 ]
  %.pr662 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !62
  br label %824

824:                                              ; preds = %thread-pre-split661, %464
  %825 = phi i8 [ %.pr662, %thread-pre-split661 ], [ %465, %464 ]
  %.sroa.4378.8 = phi i32 [ %.sroa.4378.8.ph, %thread-pre-split661 ], [ 0, %464 ]
  %826 = icmp ugt i8 %825, 4
  br i1 %826, label %827, label %.thread663, !prof !89

827:                                              ; preds = %824
  %.not562 = icmp eq i64 %1, 0
  %828 = select i1 %.not562, ptr @.str.59, ptr @.str.58
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.gc_alloc_ex, i32 noundef 1324, ptr noundef nonnull @.str.57, i64 noundef %1, ptr noundef nonnull %828, i32 noundef %.sroa.4378.8) #13
  br label %.thread663

.thread663:                                       ; preds = %285, %.thread658, %819, %817, %827, %824
  %.sroa.0377.2 = phi ptr [ %.sroa.0377.0, %819 ], [ %.sroa.0377.0, %817 ], [ null, %827 ], [ null, %824 ], [ null, %.thread658 ], [ null, %285 ]
  %.sroa.4378.10 = phi i32 [ %.sroa.4378.7, %819 ], [ %.sroa.4378.7, %817 ], [ %.sroa.4378.8, %827 ], [ %.sroa.4378.8, %824 ], [ %.sroa.4378.6657, %.thread658 ], [ -30798, %285 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #13
  %.fca.0.insert = insertvalue { ptr, i32 } poison, ptr %.sroa.0377.2, 0
  %.fca.1.insert = insertvalue { ptr, i32 } %.fca.0.insert, i32 %.sroa.4378.10, 1
  ret { ptr, i32 } %.fca.1.insert
}

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @pnl_check_allocated(ptr noundef, i64 noundef) local_unnamed_addr #4

declare i64 @osal_monotime() local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @is_reclaimable(ptr noundef, ptr noundef, i8 noundef zeroext) local_unnamed_addr #4

declare ptr @txn_gc_cursor(ptr noundef) local_unnamed_addr #5

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

declare zeroext i1 @txn_gc_detent(ptr noundef) local_unnamed_addr #5

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i64 @rkl_highest(ptr noundef) local_unnamed_addr #6

declare i32 @cursor_ops(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @gc_is_reclaimed(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @node_read(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

declare zeroext i1 @pnl_check(ptr noundef, i64 noundef) local_unnamed_addr #5

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @monotime_since_cached(i64 noundef, ptr noundef) local_unnamed_addr #4

declare i32 @rkl_push(ptr noundef, i64 noundef, i1 noundef zeroext) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @pnl_need(ptr noalias noundef, i64 noundef) local_unnamed_addr #4

declare i64 @pnl_merge(ptr noundef, ptr noundef) local_unnamed_addr #5

declare zeroext i1 @dpl_check(ptr noundef) local_unnamed_addr #5

declare zeroext i1 @txn_refund(ptr noundef) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @meta_recent(ptr dead_on_unwind noalias writable sret(%struct.meta_ptr) align 8, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @meta_prefer_steady(ptr dead_on_unwind noalias writable sret(%struct.meta_ptr) align 8, ptr noundef, ptr noundef) local_unnamed_addr #4

declare ptr @durable_caption(ptr noundef) local_unnamed_addr #5

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @atomic_load32(ptr noundef, i32 noundef) local_unnamed_addr #8

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @atomic_load64(ptr noundef, i32 noundef) local_unnamed_addr #8

declare i32 @meta_wipe_steady(ptr noundef, i64 noundef) local_unnamed_addr #5

; 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

declare i32 @dxb_sync_locked(ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare zeroext i1 @mvcc_kick_laggards(ptr noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare i32 @pv2pages(i16 noundef zeroext) local_unnamed_addr #10

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @pgno_align2os_pgno(ptr noundef, i64 noundef) local_unnamed_addr #6

declare i32 @dxb_resize(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden { ptr, i32 } @page_alloc_finalize(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #4

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 16}
!6 = !{!"MDBX_cursor", !7, i64 0, !8, i64 4, !8, i64 6, !8, i64 7, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !8, i64 48, !8, i64 304, !10, i64 368, !10, i64 376}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!12, !10, i64 80}
!12 = !{!"MDBX_txn", !7, i64 0, !7, i64 4, !13, i64 8, !13, i64 16, !10, i64 24, !10, i64 32, !14, i64 40, !13, i64 64, !13, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !16, i64 128, !10, i64 160, !8, i64 168}
!13 = !{!"long", !8, i64 0}
!14 = !{!"geo", !15, i64 0, !15, i64 2, !7, i64 4, !7, i64 8, !8, i64 12, !8, i64 16}
!15 = !{!"short", !8, i64 0}
!16 = !{!"MDBX_canary", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!17 = !{!18, !8, i64 25}
!18 = !{!"libmdbx_globals", !8, i64 0, !7, i64 16, !7, i64 20, !8, i64 24, !8, i64 25, !8, i64 26, !19, i64 27, !7, i64 28, !8, i64 32, !8, i64 40, !13, i64 80, !10, i64 88}
!19 = !{!"_Bool", !8, i64 0}
!20 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!21 = !{!8, !8, i64 0}
!22 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!23 = !{!24, !13, i64 280}
!24 = !{!"MDBX_env", !8, i64 0, !7, i64 4, !7, i64 8, !25, i64 16, !7, i64 56, !7, i64 60, !25, i64 64, !10, i64 104, !15, i64 112, !15, i64 114, !15, i64 116, !15, i64 118, !15, i64 120, !15, i64 122, !8, i64 124, !8, i64 128, !8, i64 129, !15, i64 130, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !26, i64 152, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216, !7, i64 224, !7, i64 228, !7, i64 232, !10, i64 240, !10, i64 248, !13, i64 256, !27, i64 264, !29, i64 320, !19, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !30, i64 392, !8, i64 400, !7, i64 440, !7, i64 444, !10, i64 448, !31, i64 456, !8, i64 496, !8, i64 536}
!25 = !{!"osal_mmap", !8, i64 0, !7, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!26 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!27 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !13, i64 16, !8, i64 24, !8, i64 25, !8, i64 26, !8, i64 27, !7, i64 28, !7, i64 32, !19, i64 36, !19, i64 37, !19, i64 38, !28, i64 40, !8, i64 48}
!28 = !{!"", !15, i64 0, !15, i64 2, !15, i64 4, !15, i64 6}
!29 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!30 = !{!"", !13, i64 0}
!31 = !{!"osal_ioring", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!32 = !{!33, !7, i64 8}
!33 = !{!"monotime_cache", !13, i64 0, !7, i64 8}
!34 = !{!33, !13, i64 0}
!35 = !{!7, !7, i64 0}
!36 = !{!"branch_weights", i32 2002, i32 2000}
!37 = !{!"branch_weights", i32 4001, i32 1}
!38 = !{!12, !7, i64 4}
!39 = !{!"branch_weights", i32 4002001, i32 2000}
!40 = !{!24, !7, i64 4}
!41 = !{!12, !10, i64 88}
!42 = !{!43, !7, i64 12}
!43 = !{!"tree", !15, i64 0, !15, i64 2, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !13, i64 24, !13, i64 32, !13, i64 40}
!44 = !{!24, !7, i64 224}
!45 = !{!6, !10, i64 368}
!46 = !{!12, !10, i64 104}
!47 = !{!6, !10, i64 8}
!48 = !{!24, !19, i64 360}
!49 = !{i8 0, i8 2}
!50 = !{}
!51 = !{!24, !19, i64 300}
!52 = !{!24, !10, i64 104}
!53 = !{!24, !13, i64 392}
!54 = !{!12, !13, i64 64}
!55 = !{!13, !13, i64 0}
!56 = !{!57, !10, i64 0}
!57 = !{!"iovec", !10, i64 0, !13, i64 8}
!58 = !{!57, !13, i64 8}
!59 = !{!"branch_weights", i32 1, i32 4002000, i32 2000}
!60 = !{!"branch_weights", i32 2000, i32 1}
!61 = !{!"branch_weights", i32 1999, i32 1}
!62 = !{!18, !8, i64 26}
!63 = distinct !{!63, !64}
!64 = !{!"llvm.loop.peeled.count", i32 1}
!65 = !{!10, !10, i64 0}
!66 = !{!15, !15, i64 0}
!67 = !{!24, !7, i64 268}
!68 = !{!12, !7, i64 48}
!69 = !{!43, !7, i64 8}
!70 = !{!"branch_weights", !"expected", i32 1561024, i32 2145922624}
!71 = distinct !{!71, !72, !73}
!72 = !{!"llvm.loop.mustprogress"}
!73 = !{!"llvm.loop.unswitch.partial.disable"}
!74 = !{!"branch_weights", !"expected", i32 0, i32 -2147483648}
!75 = !{!"branch_weights", !"expected", i32 1475381, i32 2146008267}
!76 = !{!"branch_weights", i32 2000, i32 4002001}
!77 = !{!"branch_weights", !"expected", i32 1073205, i32 2146410443}
!78 = !{!79, !13, i64 0}
!79 = !{!"meta_ptr", !13, i64 0, !8, i64 8, !13, i64 16}
!80 = !{i64 0, i64 8, !21, i64 8, i64 8, !21, i64 16, i64 2, !66, i64 18, i64 1, !21, i64 19, i64 1, !21, i64 20, i64 2, !66, i64 22, i64 2, !66, i64 24, i64 4, !35, i64 28, i64 4, !35, i64 32, i64 4, !21, i64 36, i64 4, !21, i64 40, i64 96, !21, i64 136, i64 8, !55, i64 144, i64 8, !55, i64 152, i64 8, !55, i64 160, i64 8, !55, i64 168, i64 8, !21, i64 176, i64 8, !21, i64 184, i64 8, !21, i64 192, i64 16, !21, i64 208, i64 16, !21}
!81 = !{!12, !15, i64 40}
!82 = !{!24, !10, i64 384}
!83 = !{!"branch_weights", i32 4001, i32 4000000}
!84 = !{!"branch_weights", i32 32328866, i32 2115154782}
!85 = !{!43, !15, i64 2}
!86 = !{!43, !7, i64 16}
!87 = !{!43, !7, i64 20}
!88 = !{!43, !13, i64 32}
!89 = !{!"branch_weights", !"expected", i32 1077083, i32 2146406565}


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