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

; 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.5 }
%struct.anon.5 = 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.meta = type { [2 x i32], %union.anon, i16, i8, i8, %struct.geo, %union.anon.2, %struct.MDBX_canary, %union.anon.4, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon.0, %union.anon.1 }
%union.anon.0 = type { i32 }
%union.anon.1 = type { i32 }
%union.anon.2 = type { %struct.anon }
%struct.anon = 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.4 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.meta_ptr = type { i64, %union.anon.24, i64 }
%union.anon.24 = type { 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.8, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.9, %struct.anon.13, i8, ptr, ptr, ptr, %struct.anon.14, %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.7, i32, i64, i64, i64 }
%union.anon.7 = type { ptr }
%struct.anon.8 = type { ptr, ptr, ptr, ptr }
%struct.anon.9 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.10, %union.anon.11 }
%struct.anon.10 = type { i16, i16, i16, i16 }
%union.anon.11 = type { i32 }
%struct.anon.13 = type { i64, i64, i64, i64, i64 }
%struct.anon.14 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }
%struct.kvx = type { %struct.clc2, %struct.iovec }
%struct.clc2 = type { %struct.clc, %struct.clc }
%struct.clc = type { ptr, i64, i64 }
%struct.iovec = type { ptr, i64 }
%struct.anon.3 = type { i16, i16, i32 }
%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.17, %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.15 }
%struct.anon.15 = 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.16 }
%struct.anon.16 = type { i64, i64, i32 }
%struct.anon.17 = 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 }

@globals = external global %struct.libmdbx_globals, align 8
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [27 x i8], align 1
@__func__.dxb_setup = external hidden unnamed_addr constant [10 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [105 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [31 x i8], align 1

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

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

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

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

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden ptr @page_meta(ptr noundef) #4

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

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @pgno_align2os_bytes(ptr noundef, i64 noundef) #8

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

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

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

declare i32 @mdbx_is_readahead_reasonable(i64 noundef, i64 noundef) #3

; Function Attrs: cold nounwind optsize uwtable
declare dso_local i32 @dxb_set_readahead(ptr noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext) #0

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @dxb_setup(ptr noundef %0, i32 noundef %1, i32 noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %struct.meta, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i8, align 1
  %18 = alloca i64, align 8
  %19 = alloca %struct.troika, align 8
  %20 = alloca %struct.meta, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %struct.meta_ptr, align 8
  %24 = alloca %struct.meta_ptr, align 8
  %25 = alloca %struct.meta, align 4
  %26 = alloca i32, align 4
  %27 = alloca i8, align 1
  %28 = alloca %struct.troika, align 8
  %29 = alloca %struct.meta_ptr, align 8
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca i64, align 8
  %34 = alloca %struct.troika, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 224, ptr %8) #14
  br label %35

35:                                               ; preds = %3
  %36 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %37 = zext i8 %36 to i32
  %38 = and i32 %37, 1
  %39 = icmp ne i32 %38, 0
  %40 = xor i1 %39, true
  %41 = xor i1 %40, true
  %42 = zext i1 %41 to i32
  %43 = sext i32 %42 to i64
  %44 = call i64 @llvm.expect.i64(i64 %43, i64 1)
  %45 = icmp ne i64 %44, 0
  br i1 %45, label %46, label %66

46:                                               ; preds = %35
  br label %47

47:                                               ; preds = %46
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.MDBX_env, ptr %48, i32 0, i32 1
  %50 = load i32, ptr %49, align 4, !tbaa !15
  %51 = and i32 %50, 536870912
  %52 = icmp ne i32 %51, 0
  %53 = xor i1 %52, true
  %54 = xor i1 %53, true
  %55 = xor i1 %54, true
  %56 = xor i1 %55, true
  %57 = zext i1 %56 to i32
  %58 = sext i32 %57 to i64
  %59 = call i64 @llvm.expect.i64(i64 %58, i64 0)
  %60 = icmp ne i64 %59, 0
  br i1 %60, label %61, label %63

61:                                               ; preds = %47
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %62, ptr noundef @.str.36, ptr noundef @__func__.dxb_setup, i32 noundef 507) #15
  unreachable

63:                                               ; preds = %47
  br label %64

64:                                               ; preds = %63
  br label %65

65:                                               ; preds = %64
  br label %66

66:                                               ; preds = %65, %35
  br label %67

67:                                               ; preds = %66
  br label %68

68:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #14
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #14
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = load i32, ptr %6, align 4, !tbaa !9
  %71 = load i32, ptr %7, align 4, !tbaa !9
  %72 = call i32 @dxb_read_header(ptr noundef %69, ptr noundef %8, i32 noundef %70, i32 noundef %71) #16
  store i32 %72, ptr %10, align 4, !tbaa !9
  %73 = load i32, ptr %10, align 4, !tbaa !9
  %74 = icmp ne i32 %73, 0
  %75 = xor i1 %74, true
  %76 = xor i1 %75, true
  %77 = zext i1 %76 to i32
  %78 = sext i32 %77 to i64
  %79 = call i64 @llvm.expect.i64(i64 %78, i64 0)
  %80 = icmp ne i64 %79, 0
  br i1 %80, label %81, label %219

81:                                               ; preds = %68
  %82 = load i32, ptr %6, align 4, !tbaa !9
  %83 = icmp ne i32 %82, -1
  br i1 %83, label %99, label %84

84:                                               ; preds = %81
  %85 = load i32, ptr %10, align 4, !tbaa !9
  %86 = icmp ne i32 %85, 61
  br i1 %86, label %99, label %87

87:                                               ; preds = %84
  %88 = load ptr, ptr %5, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.MDBX_env, ptr %88, i32 0, i32 1
  %90 = load i32, ptr %89, align 4, !tbaa !15
  %91 = and i32 %90, 131072
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %99, label %93

93:                                               ; preds = %87
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.MDBX_env, ptr %94, i32 0, i32 16
  %96 = load i8, ptr %95, align 1, !tbaa !25
  %97 = sext i8 %96 to i32
  %98 = icmp sge i32 %97, 0
  br i1 %98, label %99, label %101

99:                                               ; preds = %93, %87, %84, %81
  %100 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %100, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

101:                                              ; preds = %93
  br label %102

102:                                              ; preds = %101
  %103 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %104 = zext i8 %103 to i32
  %105 = icmp sle i32 5, %104
  %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 %113

112:                                              ; preds = %102
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.dxb_setup, i32 noundef 515, ptr noundef @.str.6, ptr noundef @.str.37)
  br label %113

113:                                              ; preds = %112, %102
  br label %114

114:                                              ; preds = %113
  br label %115

115:                                              ; preds = %114
  store i32 -1, ptr %9, align 4, !tbaa !9
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.MDBX_env, ptr %116, i32 0, i32 35
  %118 = getelementptr inbounds %struct.anon.13, ptr %117, i32 0, i32 2
  %119 = load i64, ptr %118, align 8, !tbaa !27
  %120 = icmp ne i64 %119, 0
  br i1 %120, label %135, label %121

121:                                              ; preds = %115
  %122 = load ptr, ptr %5, align 8, !tbaa !5
  %123 = call i32 @mdbx_env_set_geometry(ptr noundef %122, i64 noundef 0, i64 noundef -1, i64 noundef -1, i64 noundef -1, i64 noundef -1, i64 noundef -1)
  store i32 %123, ptr %10, align 4, !tbaa !9
  %124 = load i32, ptr %10, align 4, !tbaa !9
  %125 = icmp ne i32 %124, 0
  %126 = xor i1 %125, true
  %127 = xor i1 %126, true
  %128 = zext i1 %127 to i32
  %129 = sext i32 %128 to i64
  %130 = call i64 @llvm.expect.i64(i64 %129, i64 0)
  %131 = icmp ne i64 %130, 0
  br i1 %131, label %132, label %134

132:                                              ; preds = %121
  %133 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %133, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

134:                                              ; preds = %121
  br label %135

135:                                              ; preds = %134, %115
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = call i32 @env_page_auxbuffer(ptr noundef %136)
  store i32 %137, ptr %10, align 4, !tbaa !9
  %138 = load i32, ptr %10, align 4, !tbaa !9
  %139 = icmp ne i32 %138, 0
  %140 = xor i1 %139, true
  %141 = xor i1 %140, true
  %142 = zext i1 %141 to i32
  %143 = sext i32 %142 to i64
  %144 = call i64 @llvm.expect.i64(i64 %143, i64 0)
  %145 = icmp ne i64 %144, 0
  br i1 %145, label %146, label %148

146:                                              ; preds = %135
  %147 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %147, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

148:                                              ; preds = %135
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = load ptr, ptr %5, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.MDBX_env, ptr %150, i32 0, i32 23
  %152 = load ptr, ptr %151, align 8, !tbaa !28
  %153 = call ptr @meta_init_triplet(ptr noundef %149, ptr noundef %152)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 4 %153, i64 224, i1 false), !tbaa.struct !29
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.MDBX_env, ptr %154, i32 0, i32 3
  %156 = getelementptr inbounds %struct.osal_mmap, ptr %155, i32 0, i32 1
  %157 = load i32, ptr %156, align 8, !tbaa !33
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.MDBX_env, ptr %158, i32 0, i32 23
  %160 = load ptr, ptr %159, align 8, !tbaa !28
  %161 = load ptr, ptr %5, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.MDBX_env, ptr %161, i32 0, i32 2
  %163 = load i32, ptr %162, align 8, !tbaa !34
  %164 = zext i32 %163 to i64
  %165 = mul i64 %164, 3
  %166 = call i32 @osal_pwrite(i32 noundef %157, ptr noundef %160, i64 noundef %165, i64 noundef 0)
  store i32 %166, ptr %10, align 4, !tbaa !9
  %167 = load i32, ptr %10, align 4, !tbaa !9
  %168 = icmp ne i32 %167, 0
  %169 = xor i1 %168, true
  %170 = xor i1 %169, true
  %171 = zext i1 %170 to i32
  %172 = sext i32 %171 to i64
  %173 = call i64 @llvm.expect.i64(i64 %172, i64 0)
  %174 = icmp ne i64 %173, 0
  br i1 %174, label %175, label %177

175:                                              ; preds = %148
  %176 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %176, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

177:                                              ; preds = %148
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.MDBX_env, ptr %178, i32 0, i32 3
  %180 = getelementptr inbounds %struct.osal_mmap, ptr %179, i32 0, i32 1
  %181 = load i32, ptr %180, align 8, !tbaa !33
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.MDBX_env, ptr %182, i32 0, i32 35
  %184 = getelementptr inbounds %struct.anon.13, ptr %183, i32 0, i32 2
  %185 = load i64, ptr %184, align 8, !tbaa !27
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.MDBX_env, ptr %186, i32 0, i32 3
  %188 = getelementptr inbounds %struct.osal_mmap, ptr %187, i32 0, i32 3
  store i64 %185, ptr %188, align 8, !tbaa !35
  %189 = load ptr, ptr %5, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.MDBX_env, ptr %189, i32 0, i32 3
  %191 = getelementptr inbounds %struct.osal_mmap, ptr %190, i32 0, i32 4
  store i64 %185, ptr %191, align 8, !tbaa !36
  %192 = call i32 @osal_ftruncate(i32 noundef %181, i64 noundef %185)
  store i32 %192, ptr %10, align 4, !tbaa !9
  %193 = load i32, ptr %10, align 4, !tbaa !9
  %194 = icmp ne i32 %193, 0
  %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 = %177
  %202 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %202, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

203:                                              ; preds = %177
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = load i32, ptr %6, align 4, !tbaa !9
  %206 = load i32, ptr %7, align 4, !tbaa !9
  %207 = call i32 @dxb_read_header(ptr noundef %204, ptr noundef %8, i32 noundef %205, i32 noundef %206) #16
  store i32 %207, ptr %10, align 4, !tbaa !9
  %208 = load i32, ptr %10, align 4, !tbaa !9
  %209 = icmp ne i32 %208, 0
  %210 = xor i1 %209, true
  %211 = xor i1 %210, true
  %212 = zext i1 %211 to i32
  %213 = sext i32 %212 to i64
  %214 = call i64 @llvm.expect.i64(i64 %213, i64 0)
  %215 = icmp ne i64 %214, 0
  br i1 %215, label %216, label %218

216:                                              ; preds = %203
  %217 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %217, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

218:                                              ; preds = %203
  br label %219

219:                                              ; preds = %218, %68
  br label %220

220:                                              ; preds = %219
  %221 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %222 = zext i8 %221 to i32
  %223 = icmp sle i32 4, %222
  %224 = xor i1 %223, true
  %225 = xor i1 %224, true
  %226 = zext i1 %225 to i32
  %227 = sext i32 %226 to i64
  %228 = call i64 @llvm.expect.i64(i64 %227, i64 0)
  %229 = icmp ne i64 %228, 0
  br i1 %229, label %230, label %263

230:                                              ; preds = %220
  %231 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %232 = getelementptr inbounds %struct.anon, ptr %231, i32 0, i32 1
  %233 = getelementptr inbounds %struct.tree, ptr %232, i32 0, i32 3
  %234 = load i32, ptr %233, align 4, !tbaa !30
  %235 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %236 = getelementptr inbounds %struct.anon, ptr %235, i32 0, i32 0
  %237 = getelementptr inbounds %struct.tree, ptr %236, i32 0, i32 3
  %238 = load i32, ptr %237, align 4, !tbaa !30
  %239 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %240 = getelementptr inbounds %struct.geo, ptr %239, i32 0, i32 2
  %241 = load i32, ptr %240, align 4, !tbaa !37
  %242 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %243 = getelementptr inbounds %struct.geo, ptr %242, i32 0, i32 5
  %244 = load i32, ptr %243, align 4, !tbaa !30
  %245 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %246 = getelementptr inbounds %struct.geo, ptr %245, i32 0, i32 4
  %247 = load i32, ptr %246, align 4, !tbaa !30
  %248 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %249 = getelementptr inbounds %struct.geo, ptr %248, i32 0, i32 3
  %250 = load i32, ptr %249, align 4, !tbaa !41
  %251 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %252 = getelementptr inbounds %struct.geo, ptr %251, i32 0, i32 0
  %253 = load i16, ptr %252, align 4, !tbaa !42
  %254 = call i32 @pv2pages(i16 noundef zeroext %253) #17
  %255 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %256 = getelementptr inbounds %struct.geo, ptr %255, i32 0, i32 1
  %257 = load i16, ptr %256, align 2, !tbaa !43
  %258 = call i32 @pv2pages(i16 noundef zeroext %257) #17
  %259 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 1
  %260 = getelementptr inbounds [2 x %union.mdbx_atomic_uint32_t], ptr %259, i64 0, i64 0
  %261 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %260) #18
  %262 = call ptr @durable_caption(ptr noundef %8)
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_setup, i32 noundef 549, ptr noundef @.str.38, i32 noundef %234, i32 noundef %238, i32 noundef %241, i32 noundef %244, i32 noundef %247, i32 noundef %250, i32 noundef %254, i32 noundef %258, i64 noundef %261, ptr noundef %262)
  br label %263

263:                                              ; preds = %230, %220
  br label %264

264:                                              ; preds = %263
  br label %265

265:                                              ; preds = %264
  %266 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %267 = getelementptr inbounds %struct.anon, ptr %266, i32 0, i32 0
  %268 = getelementptr inbounds %struct.tree, ptr %267, i32 0, i32 0
  %269 = load i16, ptr %268, align 4, !tbaa !30
  %270 = zext i16 %269 to i32
  %271 = and i32 %270, 126
  %272 = icmp ne i32 %271, 8
  %273 = xor i1 %272, true
  %274 = xor i1 %273, true
  %275 = zext i1 %274 to i32
  %276 = sext i32 %275 to i64
  %277 = call i64 @llvm.expect.i64(i64 %276, i64 0)
  %278 = icmp ne i64 %277, 0
  br i1 %278, label %279, label %299

279:                                              ; preds = %265
  br label %280

280:                                              ; preds = %279
  %281 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %282 = zext i8 %281 to i32
  %283 = icmp sle i32 1, %282
  %284 = xor i1 %283, true
  %285 = xor i1 %284, true
  %286 = zext i1 %285 to i32
  %287 = sext i32 %286 to i64
  %288 = call i64 @llvm.expect.i64(i64 %287, i64 0)
  %289 = icmp ne i64 %288, 0
  br i1 %289, label %290, label %296

290:                                              ; preds = %280
  %291 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %292 = getelementptr inbounds %struct.anon, ptr %291, i32 0, i32 0
  %293 = getelementptr inbounds %struct.tree, ptr %292, i32 0, i32 0
  %294 = load i16, ptr %293, align 4, !tbaa !30
  %295 = zext i16 %294 to i32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 552, ptr noundef @.str.39, i32 noundef %295, ptr noundef @.str.40)
  br label %296

296:                                              ; preds = %290, %280
  br label %297

297:                                              ; preds = %296
  br label %298

298:                                              ; preds = %297
  store i32 -30784, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

299:                                              ; preds = %265
  %300 = load ptr, ptr %5, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.MDBX_env, ptr %300, i32 0, i32 26
  %302 = load ptr, ptr %301, align 8, !tbaa !44
  %303 = getelementptr inbounds i8, ptr %302, i64 0
  store i8 -120, ptr %303, align 1, !tbaa !30
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.MDBX_env, ptr %304, i32 0, i32 25
  %306 = load ptr, ptr %305, align 8, !tbaa !45
  %307 = getelementptr inbounds %struct.kvx, ptr %306, i64 0
  %308 = getelementptr inbounds %struct.kvx, ptr %307, i32 0, i32 0
  %309 = getelementptr inbounds %struct.clc2, ptr %308, i32 0, i32 0
  %310 = getelementptr inbounds %struct.clc, ptr %309, i32 0, i32 0
  store ptr @cmp_int_align4, ptr %310, align 8, !tbaa !46
  %311 = load ptr, ptr %5, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.MDBX_env, ptr %311, i32 0, i32 25
  %313 = load ptr, ptr %312, align 8, !tbaa !45
  %314 = getelementptr inbounds %struct.kvx, ptr %313, i64 0
  %315 = getelementptr inbounds %struct.kvx, ptr %314, i32 0, i32 0
  %316 = getelementptr inbounds %struct.clc2, ptr %315, i32 0, i32 0
  %317 = getelementptr inbounds %struct.clc, ptr %316, i32 0, i32 1
  store i64 8, ptr %317, align 8, !tbaa !51
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.MDBX_env, ptr %318, i32 0, i32 25
  %320 = load ptr, ptr %319, align 8, !tbaa !45
  %321 = getelementptr inbounds %struct.kvx, ptr %320, i64 0
  %322 = getelementptr inbounds %struct.kvx, ptr %321, i32 0, i32 0
  %323 = getelementptr inbounds %struct.clc2, ptr %322, i32 0, i32 0
  %324 = getelementptr inbounds %struct.clc, ptr %323, i32 0, i32 2
  store i64 8, ptr %324, align 8, !tbaa !52
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.MDBX_env, ptr %325, i32 0, i32 25
  %327 = load ptr, ptr %326, align 8, !tbaa !45
  %328 = getelementptr inbounds %struct.kvx, ptr %327, i64 0
  %329 = getelementptr inbounds %struct.kvx, ptr %328, i32 0, i32 0
  %330 = getelementptr inbounds %struct.clc2, ptr %329, i32 0, i32 1
  %331 = getelementptr inbounds %struct.clc, ptr %330, i32 0, i32 0
  store ptr @cmp_lenfast, ptr %331, align 8, !tbaa !53
  %332 = load ptr, ptr %5, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.MDBX_env, ptr %332, i32 0, i32 25
  %334 = load ptr, ptr %333, align 8, !tbaa !45
  %335 = getelementptr inbounds %struct.kvx, ptr %334, i64 0
  %336 = getelementptr inbounds %struct.kvx, ptr %335, i32 0, i32 0
  %337 = getelementptr inbounds %struct.clc2, ptr %336, i32 0, i32 1
  %338 = getelementptr inbounds %struct.clc, ptr %337, i32 0, i32 1
  store i64 4, ptr %338, align 8, !tbaa !54
  %339 = load ptr, ptr %5, align 8, !tbaa !5
  %340 = call i32 @mdbx_env_get_maxvalsize_ex(ptr noundef %339, i32 noundef 8) #18
  %341 = sext i32 %340 to i64
  %342 = load ptr, ptr %5, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.MDBX_env, ptr %342, i32 0, i32 25
  %344 = load ptr, ptr %343, align 8, !tbaa !45
  %345 = getelementptr inbounds %struct.kvx, ptr %344, i64 0
  %346 = getelementptr inbounds %struct.kvx, ptr %345, i32 0, i32 0
  %347 = getelementptr inbounds %struct.clc2, ptr %346, i32 0, i32 1
  %348 = getelementptr inbounds %struct.clc, ptr %347, i32 0, i32 2
  store i64 %341, ptr %348, align 8, !tbaa !55
  %349 = load ptr, ptr %5, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.MDBX_env, ptr %349, i32 0, i32 2
  %351 = load i32, ptr %350, align 8, !tbaa !34
  %352 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %353 = getelementptr inbounds %struct.anon.3, ptr %352, i32 0, i32 2
  %354 = load i32, ptr %353, align 4, !tbaa !30
  %355 = icmp ne i32 %351, %354
  br i1 %355, label %356, label %363

356:                                              ; preds = %299
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %359 = getelementptr inbounds %struct.anon.3, ptr %358, i32 0, i32 2
  %360 = load i32, ptr %359, align 4, !tbaa !30
  %361 = zext i32 %360 to i64
  %362 = call i32 @env_setup_pagesize(ptr noundef %357, i64 noundef %361)
  br label %363

363:                                              ; preds = %356, %299
  %364 = load ptr, ptr %5, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.MDBX_env, ptr %364, i32 0, i32 1
  %366 = load i32, ptr %365, align 4, !tbaa !15
  %367 = and i32 %366, 131072
  %368 = icmp eq i32 %367, 0
  br i1 %368, label %369, label %383

369:                                              ; preds = %363
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  %371 = call i32 @env_page_auxbuffer(ptr noundef %370)
  store i32 %371, ptr %10, align 4, !tbaa !9
  %372 = load i32, ptr %10, align 4, !tbaa !9
  %373 = icmp ne i32 %372, 0
  %374 = xor i1 %373, true
  %375 = xor i1 %374, true
  %376 = zext i1 %375 to i32
  %377 = sext i32 %376 to i64
  %378 = call i64 @llvm.expect.i64(i64 %377, i64 0)
  %379 = icmp ne i64 %378, 0
  br i1 %379, label %380, label %382

380:                                              ; preds = %369
  %381 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %381, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2563

382:                                              ; preds = %369
  br label %383

383:                                              ; preds = %382, %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #14
  store i64 0, ptr %12, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #14
  %384 = load ptr, ptr %5, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %386 = getelementptr inbounds %struct.geo, ptr %385, i32 0, i32 5
  %387 = load i32, ptr %386, align 4, !tbaa !30
  %388 = zext i32 %387 to i64
  %389 = call i64 @pgno2bytes(ptr noundef %384, i64 noundef %388) #18
  store i64 %389, ptr %13, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #14
  %390 = load i64, ptr %13, align 8, !tbaa !32
  %391 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !56
  %392 = zext i32 %391 to i64
  %393 = call i64 @ceil_powerof2(i64 noundef %390, i64 noundef %392) #17
  store i64 %393, ptr %14, align 8, !tbaa !32
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.MDBX_env, ptr %394, i32 0, i32 1
  %396 = load i32, ptr %395, align 4, !tbaa !15
  %397 = and i32 %396, 131072
  %398 = icmp ne i32 %397, 0
  br i1 %398, label %408, label %399

399:                                              ; preds = %383
  %400 = load i32, ptr %6, align 4, !tbaa !9
  %401 = icmp ne i32 %400, -1
  br i1 %401, label %408, label %402

402:                                              ; preds = %399
  %403 = load ptr, ptr %5, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.MDBX_env, ptr %403, i32 0, i32 16
  %405 = load i8, ptr %404, align 1, !tbaa !25
  %406 = sext i8 %405 to i32
  %407 = icmp sge i32 %406, 0
  br i1 %407, label %408, label %486

408:                                              ; preds = %402, %399, %383
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #14
  %409 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %410 = getelementptr inbounds %struct.anon.3, ptr %409, i32 0, i32 2
  %411 = load i32, ptr %410, align 4, !tbaa !30
  %412 = zext i32 %411 to i64
  store i64 %412, ptr %15, align 8, !tbaa !32
  %413 = load ptr, ptr %5, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %415 = getelementptr inbounds %struct.geo, ptr %414, i32 0, i32 2
  %416 = load i32, ptr %415, align 4, !tbaa !37
  %417 = zext i32 %416 to i64
  %418 = load i64, ptr %15, align 8, !tbaa !32
  %419 = mul i64 %417, %418
  %420 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %421 = getelementptr inbounds %struct.geo, ptr %420, i32 0, i32 4
  %422 = load i32, ptr %421, align 4, !tbaa !30
  %423 = zext i32 %422 to i64
  %424 = load i64, ptr %15, align 8, !tbaa !32
  %425 = mul i64 %423, %424
  %426 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %427 = getelementptr inbounds %struct.geo, ptr %426, i32 0, i32 3
  %428 = load i32, ptr %427, align 4, !tbaa !41
  %429 = zext i32 %428 to i64
  %430 = load i64, ptr %15, align 8, !tbaa !32
  %431 = mul i64 %429, %430
  %432 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %433 = getelementptr inbounds %struct.geo, ptr %432, i32 0, i32 0
  %434 = load i16, ptr %433, align 4, !tbaa !42
  %435 = call i32 @pv2pages(i16 noundef zeroext %434) #17
  %436 = zext i32 %435 to i64
  %437 = load i64, ptr %15, align 8, !tbaa !32
  %438 = mul i64 %436, %437
  %439 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %440 = getelementptr inbounds %struct.geo, ptr %439, i32 0, i32 1
  %441 = load i16, ptr %440, align 2, !tbaa !43
  %442 = call i32 @pv2pages(i16 noundef zeroext %441) #17
  %443 = zext i32 %442 to i64
  %444 = load i64, ptr %15, align 8, !tbaa !32
  %445 = mul i64 %443, %444
  %446 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %447 = getelementptr inbounds %struct.anon.3, ptr %446, i32 0, i32 2
  %448 = load i32, ptr %447, align 4, !tbaa !30
  %449 = zext i32 %448 to i64
  %450 = call i32 @mdbx_env_set_geometry(ptr noundef %413, i64 noundef %419, i64 noundef %425, i64 noundef %431, i64 noundef %438, i64 noundef %445, i64 noundef %449)
  store i32 %450, ptr %10, align 4, !tbaa !9
  %451 = load i32, ptr %10, align 4, !tbaa !9
  %452 = icmp ne i32 %451, 0
  %453 = xor i1 %452, true
  %454 = xor i1 %453, true
  %455 = zext i1 %454 to i32
  %456 = sext i32 %455 to i64
  %457 = call i64 @llvm.expect.i64(i64 %456, i64 0)
  %458 = icmp ne i64 %457, 0
  br i1 %458, label %459, label %482

459:                                              ; preds = %408
  br label %460

460:                                              ; preds = %459
  %461 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %462 = zext i8 %461 to i32
  %463 = icmp sle i32 1, %462
  %464 = xor i1 %463, true
  %465 = xor i1 %464, true
  %466 = zext i1 %465 to i32
  %467 = sext i32 %466 to i64
  %468 = call i64 @llvm.expect.i64(i64 %467, i64 0)
  %469 = icmp ne i64 %468, 0
  br i1 %469, label %470, label %472

470:                                              ; preds = %460
  %471 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 582, ptr noundef @.str.41, ptr noundef @.str.42, i32 noundef %471)
  br label %472

472:                                              ; preds = %470, %460
  br label %473

473:                                              ; preds = %472
  br label %474

474:                                              ; preds = %473
  %475 = load i32, ptr %10, align 4, !tbaa !9
  %476 = icmp eq i32 %475, 22
  br i1 %476, label %477, label %478

477:                                              ; preds = %474
  br label %480

478:                                              ; preds = %474
  %479 = load i32, ptr %10, align 4, !tbaa !9
  br label %480

480:                                              ; preds = %478, %477
  %481 = phi i32 [ -30784, %477 ], [ %479, %478 ]
  store i32 %481, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %483

482:                                              ; preds = %408
  store i32 0, ptr %11, align 4
  br label %483

483:                                              ; preds = %482, %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #14
  %484 = load i32, ptr %11, align 4
  switch i32 %484, label %2562 [
    i32 0, label %485
  ]

485:                                              ; preds = %483
  br label %839

486:                                              ; preds = %402
  %487 = load ptr, ptr %5, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.MDBX_env, ptr %487, i32 0, i32 35
  %489 = getelementptr inbounds %struct.anon.13, ptr %488, i32 0, i32 2
  %490 = load i64, ptr %489, align 8, !tbaa !27
  %491 = icmp ne i64 %490, 0
  br i1 %491, label %492, label %790

492:                                              ; preds = %486
  %493 = load ptr, ptr %5, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.MDBX_env, ptr %493, i32 0, i32 35
  %495 = getelementptr inbounds %struct.anon.13, ptr %494, i32 0, i32 2
  %496 = load i64, ptr %495, align 8, !tbaa !27
  %497 = load i64, ptr %14, align 8, !tbaa !32
  %498 = icmp ult i64 %496, %497
  br i1 %498, label %499, label %504

499:                                              ; preds = %492
  %500 = load i64, ptr %14, align 8, !tbaa !32
  %501 = load ptr, ptr %5, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.MDBX_env, ptr %501, i32 0, i32 35
  %503 = getelementptr inbounds %struct.anon.13, ptr %502, i32 0, i32 2
  store i64 %500, ptr %503, align 8, !tbaa !27
  br label %504

504:                                              ; preds = %499, %492
  %505 = load ptr, ptr %5, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.MDBX_env, ptr %505, i32 0, i32 35
  %507 = getelementptr inbounds %struct.anon.13, ptr %506, i32 0, i32 1
  %508 = load i64, ptr %507, align 8, !tbaa !57
  %509 = load i64, ptr %14, align 8, !tbaa !32
  %510 = icmp ult i64 %508, %509
  br i1 %510, label %511, label %516

511:                                              ; preds = %504
  %512 = load i64, ptr %14, align 8, !tbaa !32
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.MDBX_env, ptr %513, i32 0, i32 35
  %515 = getelementptr inbounds %struct.anon.13, ptr %514, i32 0, i32 1
  store i64 %512, ptr %515, align 8, !tbaa !57
  br label %516

516:                                              ; preds = %511, %504
  %517 = load ptr, ptr %5, align 8, !tbaa !5
  %518 = load ptr, ptr %5, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.MDBX_env, ptr %518, i32 0, i32 35
  %520 = getelementptr inbounds %struct.anon.13, ptr %519, i32 0, i32 1
  %521 = load i64, ptr %520, align 8, !tbaa !57
  %522 = call i64 @bytes_align2os_bytes(ptr noundef %517, i64 noundef %521) #18
  %523 = load ptr, ptr %5, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %525 = getelementptr inbounds %struct.geo, ptr %524, i32 0, i32 3
  %526 = load i32, ptr %525, align 4, !tbaa !41
  %527 = zext i32 %526 to i64
  %528 = call i64 @pgno2bytes(ptr noundef %523, i64 noundef %527) #18
  %529 = icmp ne i64 %522, %528
  br i1 %529, label %574, label %530

530:                                              ; preds = %516
  %531 = load ptr, ptr %5, align 8, !tbaa !5
  %532 = load ptr, ptr %5, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.MDBX_env, ptr %532, i32 0, i32 35
  %534 = getelementptr inbounds %struct.anon.13, ptr %533, i32 0, i32 0
  %535 = load i64, ptr %534, align 8, !tbaa !58
  %536 = call i64 @bytes_align2os_bytes(ptr noundef %531, i64 noundef %535) #18
  %537 = load ptr, ptr %5, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %539 = getelementptr inbounds %struct.geo, ptr %538, i32 0, i32 2
  %540 = load i32, ptr %539, align 4, !tbaa !37
  %541 = zext i32 %540 to i64
  %542 = call i64 @pgno2bytes(ptr noundef %537, i64 noundef %541) #18
  %543 = icmp ne i64 %536, %542
  br i1 %543, label %574, label %544

544:                                              ; preds = %530
  %545 = load ptr, ptr %5, align 8, !tbaa !5
  %546 = load ptr, ptr %5, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.MDBX_env, ptr %546, i32 0, i32 35
  %548 = getelementptr inbounds %struct.anon.13, ptr %547, i32 0, i32 4
  %549 = load i64, ptr %548, align 8, !tbaa !59
  %550 = call i64 @bytes_align2os_bytes(ptr noundef %545, i64 noundef %549) #18
  %551 = load ptr, ptr %5, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %553 = getelementptr inbounds %struct.geo, ptr %552, i32 0, i32 1
  %554 = load i16, ptr %553, align 2, !tbaa !43
  %555 = call i32 @pv2pages(i16 noundef zeroext %554) #17
  %556 = zext i32 %555 to i64
  %557 = call i64 @pgno2bytes(ptr noundef %551, i64 noundef %556) #18
  %558 = icmp ne i64 %550, %557
  br i1 %558, label %574, label %559

559:                                              ; preds = %544
  %560 = load ptr, ptr %5, align 8, !tbaa !5
  %561 = load ptr, ptr %5, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.MDBX_env, ptr %561, i32 0, i32 35
  %563 = getelementptr inbounds %struct.anon.13, ptr %562, i32 0, i32 3
  %564 = load i64, ptr %563, align 8, !tbaa !60
  %565 = call i64 @bytes_align2os_bytes(ptr noundef %560, i64 noundef %564) #18
  %566 = load ptr, ptr %5, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %568 = getelementptr inbounds %struct.geo, ptr %567, i32 0, i32 0
  %569 = load i16, ptr %568, align 4, !tbaa !42
  %570 = call i32 @pv2pages(i16 noundef zeroext %569) #17
  %571 = zext i32 %570 to i64
  %572 = call i64 @pgno2bytes(ptr noundef %566, i64 noundef %571) #18
  %573 = icmp ne i64 %565, %572
  br i1 %573, label %574, label %759

574:                                              ; preds = %559, %544, %530, %516
  %575 = load ptr, ptr %5, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.MDBX_env, ptr %575, i32 0, i32 35
  %577 = getelementptr inbounds %struct.anon.13, ptr %576, i32 0, i32 4
  %578 = load i64, ptr %577, align 8, !tbaa !59
  %579 = icmp ne i64 %578, 0
  br i1 %579, label %580, label %604

580:                                              ; preds = %574
  %581 = load ptr, ptr %5, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.MDBX_env, ptr %581, i32 0, i32 35
  %583 = getelementptr inbounds %struct.anon.13, ptr %582, i32 0, i32 2
  %584 = load i64, ptr %583, align 8, !tbaa !27
  %585 = load i64, ptr %13, align 8, !tbaa !32
  %586 = icmp ugt i64 %584, %585
  br i1 %586, label %587, label %604

587:                                              ; preds = %580
  %588 = load i64, ptr %13, align 8, !tbaa !32
  %589 = load ptr, ptr %5, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.MDBX_env, ptr %589, i32 0, i32 35
  %591 = getelementptr inbounds %struct.anon.13, ptr %590, i32 0, i32 4
  %592 = load i64, ptr %591, align 8, !tbaa !59
  %593 = add i64 %588, %592
  %594 = load i64, ptr %13, align 8, !tbaa !32
  %595 = load ptr, ptr %5, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.MDBX_env, ptr %595, i32 0, i32 35
  %597 = getelementptr inbounds %struct.anon.13, ptr %596, i32 0, i32 4
  %598 = load i64, ptr %597, align 8, !tbaa !59
  %599 = urem i64 %594, %598
  %600 = sub i64 %593, %599
  %601 = load ptr, ptr %5, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.MDBX_env, ptr %601, i32 0, i32 35
  %603 = getelementptr inbounds %struct.anon.13, ptr %602, i32 0, i32 2
  store i64 %600, ptr %603, align 8, !tbaa !27
  br label %604

604:                                              ; preds = %587, %580, %574
  %605 = load ptr, ptr %5, align 8, !tbaa !5
  %606 = load ptr, ptr %5, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.MDBX_env, ptr %606, i32 0, i32 35
  %608 = getelementptr inbounds %struct.anon.13, ptr %607, i32 0, i32 0
  %609 = load i64, ptr %608, align 8, !tbaa !58
  %610 = load ptr, ptr %5, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.MDBX_env, ptr %610, i32 0, i32 35
  %612 = getelementptr inbounds %struct.anon.13, ptr %611, i32 0, i32 2
  %613 = load i64, ptr %612, align 8, !tbaa !27
  %614 = load ptr, ptr %5, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.MDBX_env, ptr %614, i32 0, i32 35
  %616 = getelementptr inbounds %struct.anon.13, ptr %615, i32 0, i32 1
  %617 = load i64, ptr %616, align 8, !tbaa !57
  %618 = load ptr, ptr %5, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.MDBX_env, ptr %618, i32 0, i32 35
  %620 = getelementptr inbounds %struct.anon.13, ptr %619, i32 0, i32 3
  %621 = load i64, ptr %620, align 8, !tbaa !60
  %622 = load ptr, ptr %5, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.MDBX_env, ptr %622, i32 0, i32 35
  %624 = getelementptr inbounds %struct.anon.13, ptr %623, i32 0, i32 4
  %625 = load i64, ptr %624, align 8, !tbaa !59
  %626 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %627 = getelementptr inbounds %struct.anon.3, ptr %626, i32 0, i32 2
  %628 = load i32, ptr %627, align 4, !tbaa !30
  %629 = zext i32 %628 to i64
  %630 = call i32 @mdbx_env_set_geometry(ptr noundef %605, i64 noundef %609, i64 noundef %613, i64 noundef %617, i64 noundef %621, i64 noundef %625, i64 noundef %629)
  store i32 %630, ptr %10, align 4, !tbaa !9
  %631 = load i32, ptr %10, align 4, !tbaa !9
  %632 = icmp ne i32 %631, 0
  %633 = xor i1 %632, true
  %634 = xor i1 %633, true
  %635 = zext i1 %634 to i32
  %636 = sext i32 %635 to i64
  %637 = call i64 @llvm.expect.i64(i64 %636, i64 0)
  %638 = icmp ne i64 %637, 0
  br i1 %638, label %639, label %662

639:                                              ; preds = %604
  br label %640

640:                                              ; preds = %639
  %641 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %642 = zext i8 %641 to i32
  %643 = icmp sle i32 1, %642
  %644 = xor i1 %643, true
  %645 = xor i1 %644, true
  %646 = zext i1 %645 to i32
  %647 = sext i32 %646 to i64
  %648 = call i64 @llvm.expect.i64(i64 %647, i64 0)
  %649 = icmp ne i64 %648, 0
  br i1 %649, label %650, label %652

650:                                              ; preds = %640
  %651 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 610, ptr noundef @.str.41, ptr noundef @.str.43, i32 noundef %651)
  br label %652

652:                                              ; preds = %650, %640
  br label %653

653:                                              ; preds = %652
  br label %654

654:                                              ; preds = %653
  %655 = load i32, ptr %10, align 4, !tbaa !9
  %656 = icmp eq i32 %655, 22
  br i1 %656, label %657, label %658

657:                                              ; preds = %654
  br label %660

658:                                              ; preds = %654
  %659 = load i32, ptr %10, align 4, !tbaa !9
  br label %660

660:                                              ; preds = %658, %657
  %661 = phi i32 [ -30784, %657 ], [ %659, %658 ]
  store i32 %661, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2562

662:                                              ; preds = %604
  %663 = load ptr, ptr %5, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %665 = getelementptr inbounds %struct.geo, ptr %664, i32 0, i32 4
  %666 = load i32, ptr %665, align 4, !tbaa !30
  %667 = zext i32 %666 to i64
  %668 = call i64 @pgno_align2os_bytes(ptr noundef %663, i64 noundef %667) #18
  store i64 %668, ptr %12, align 8, !tbaa !32
  %669 = load ptr, ptr %5, align 8, !tbaa !5
  %670 = load ptr, ptr %5, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.MDBX_env, ptr %670, i32 0, i32 35
  %672 = getelementptr inbounds %struct.anon.13, ptr %671, i32 0, i32 2
  %673 = load i64, ptr %672, align 8, !tbaa !27
  %674 = call i32 @bytes2pgno(ptr noundef %669, i64 noundef %673) #18
  %675 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %676 = getelementptr inbounds %struct.geo, ptr %675, i32 0, i32 4
  store i32 %674, ptr %676, align 4, !tbaa !30
  %677 = load ptr, ptr %5, align 8, !tbaa !5
  %678 = load ptr, ptr %5, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.MDBX_env, ptr %678, i32 0, i32 35
  %680 = getelementptr inbounds %struct.anon.13, ptr %679, i32 0, i32 0
  %681 = load i64, ptr %680, align 8, !tbaa !58
  %682 = call i32 @bytes2pgno(ptr noundef %677, i64 noundef %681) #18
  %683 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %684 = getelementptr inbounds %struct.geo, ptr %683, i32 0, i32 2
  store i32 %682, ptr %684, align 4, !tbaa !37
  %685 = load ptr, ptr %5, align 8, !tbaa !5
  %686 = load ptr, ptr %5, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.MDBX_env, ptr %686, i32 0, i32 35
  %688 = getelementptr inbounds %struct.anon.13, ptr %687, i32 0, i32 1
  %689 = load i64, ptr %688, align 8, !tbaa !57
  %690 = call i32 @bytes2pgno(ptr noundef %685, i64 noundef %689) #18
  %691 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %692 = getelementptr inbounds %struct.geo, ptr %691, i32 0, i32 3
  store i32 %690, ptr %692, align 4, !tbaa !41
  %693 = load ptr, ptr %5, align 8, !tbaa !5
  %694 = load ptr, ptr %5, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.MDBX_env, ptr %694, i32 0, i32 35
  %696 = getelementptr inbounds %struct.anon.13, ptr %695, i32 0, i32 3
  %697 = load i64, ptr %696, align 8, !tbaa !60
  %698 = call i32 @bytes2pgno(ptr noundef %693, i64 noundef %697) #18
  %699 = zext i32 %698 to i64
  %700 = call zeroext i16 @pages2pv(i64 noundef %699) #17
  %701 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %702 = getelementptr inbounds %struct.geo, ptr %701, i32 0, i32 0
  store i16 %700, ptr %702, align 4, !tbaa !42
  %703 = load ptr, ptr %5, align 8, !tbaa !5
  %704 = load ptr, ptr %5, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.MDBX_env, ptr %704, i32 0, i32 35
  %706 = getelementptr inbounds %struct.anon.13, ptr %705, i32 0, i32 4
  %707 = load i64, ptr %706, align 8, !tbaa !59
  %708 = call i32 @bytes2pgno(ptr noundef %703, i64 noundef %707) #18
  %709 = zext i32 %708 to i64
  %710 = call zeroext i16 @pages2pv(i64 noundef %709) #17
  %711 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %712 = getelementptr inbounds %struct.geo, ptr %711, i32 0, i32 1
  store i16 %710, ptr %712, align 2, !tbaa !43
  br label %713

713:                                              ; preds = %662
  %714 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %715 = zext i8 %714 to i32
  %716 = icmp sle i32 4, %715
  %717 = xor i1 %716, true
  %718 = xor i1 %717, true
  %719 = zext i1 %718 to i32
  %720 = sext i32 %719 to i64
  %721 = call i64 @llvm.expect.i64(i64 %720, i64 0)
  %722 = icmp ne i64 %721, 0
  br i1 %722, label %723, label %756

723:                                              ; preds = %713
  %724 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %725 = getelementptr inbounds %struct.anon, ptr %724, i32 0, i32 1
  %726 = getelementptr inbounds %struct.tree, ptr %725, i32 0, i32 3
  %727 = load i32, ptr %726, align 4, !tbaa !30
  %728 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 6
  %729 = getelementptr inbounds %struct.anon, ptr %728, i32 0, i32 0
  %730 = getelementptr inbounds %struct.tree, ptr %729, i32 0, i32 3
  %731 = load i32, ptr %730, align 4, !tbaa !30
  %732 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %733 = getelementptr inbounds %struct.geo, ptr %732, i32 0, i32 2
  %734 = load i32, ptr %733, align 4, !tbaa !37
  %735 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %736 = getelementptr inbounds %struct.geo, ptr %735, i32 0, i32 5
  %737 = load i32, ptr %736, align 4, !tbaa !30
  %738 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %739 = getelementptr inbounds %struct.geo, ptr %738, i32 0, i32 4
  %740 = load i32, ptr %739, align 4, !tbaa !30
  %741 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %742 = getelementptr inbounds %struct.geo, ptr %741, i32 0, i32 3
  %743 = load i32, ptr %742, align 4, !tbaa !41
  %744 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %745 = getelementptr inbounds %struct.geo, ptr %744, i32 0, i32 0
  %746 = load i16, ptr %745, align 4, !tbaa !42
  %747 = call i32 @pv2pages(i16 noundef zeroext %746) #17
  %748 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %749 = getelementptr inbounds %struct.geo, ptr %748, i32 0, i32 1
  %750 = load i16, ptr %749, align 2, !tbaa !43
  %751 = call i32 @pv2pages(i16 noundef zeroext %750) #17
  %752 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 1
  %753 = getelementptr inbounds [2 x %union.mdbx_atomic_uint32_t], ptr %752, i64 0, i64 0
  %754 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %753) #18
  %755 = call ptr @durable_caption(ptr noundef %8)
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_setup, i32 noundef 626, ptr noundef @.str.44, i32 noundef %727, i32 noundef %731, i32 noundef %734, i32 noundef %737, i32 noundef %740, i32 noundef %743, i32 noundef %747, i32 noundef %751, i64 noundef %754, ptr noundef %755)
  br label %756

756:                                              ; preds = %723, %713
  br label %757

757:                                              ; preds = %756
  br label %758

758:                                              ; preds = %757
  br label %769

759:                                              ; preds = %559
  %760 = load ptr, ptr %5, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %762 = getelementptr inbounds %struct.geo, ptr %761, i32 0, i32 4
  %763 = load i32, ptr %762, align 4, !tbaa !30
  %764 = zext i32 %763 to i64
  %765 = call i64 @pgno_align2os_bytes(ptr noundef %760, i64 noundef %764) #18
  %766 = load ptr, ptr %5, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.MDBX_env, ptr %766, i32 0, i32 35
  %768 = getelementptr inbounds %struct.anon.13, ptr %767, i32 0, i32 2
  store i64 %765, ptr %768, align 8, !tbaa !27
  br label %769

769:                                              ; preds = %759, %758
  br label %770

770:                                              ; preds = %769
  %771 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %772 = getelementptr inbounds %struct.geo, ptr %771, i32 0, i32 4
  %773 = load i32, ptr %772, align 4, !tbaa !30
  %774 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %775 = getelementptr inbounds %struct.geo, ptr %774, i32 0, i32 5
  %776 = load i32, ptr %775, align 4, !tbaa !30
  %777 = icmp uge i32 %773, %776
  %778 = xor i1 %777, true
  %779 = xor i1 %778, true
  %780 = xor i1 %779, true
  %781 = zext i1 %780 to i32
  %782 = sext i32 %781 to i64
  %783 = call i64 @llvm.expect.i64(i64 %782, i64 0)
  %784 = icmp ne i64 %783, 0
  br i1 %784, label %785, label %787

785:                                              ; preds = %770
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %786, ptr noundef @.str.45, ptr noundef @__func__.dxb_setup, i32 noundef 631) #15
  unreachable

787:                                              ; preds = %770
  br label %788

788:                                              ; preds = %787
  br label %789

789:                                              ; preds = %788
  br label %838

790:                                              ; preds = %486
  %791 = load ptr, ptr %5, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %793 = getelementptr inbounds %struct.geo, ptr %792, i32 0, i32 4
  %794 = load i32, ptr %793, align 4, !tbaa !30
  %795 = zext i32 %794 to i64
  %796 = call i64 @pgno2bytes(ptr noundef %791, i64 noundef %795) #18
  %797 = load ptr, ptr %5, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.MDBX_env, ptr %797, i32 0, i32 35
  %799 = getelementptr inbounds %struct.anon.13, ptr %798, i32 0, i32 2
  store i64 %796, ptr %799, align 8, !tbaa !27
  %800 = load ptr, ptr %5, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %802 = getelementptr inbounds %struct.geo, ptr %801, i32 0, i32 2
  %803 = load i32, ptr %802, align 4, !tbaa !37
  %804 = zext i32 %803 to i64
  %805 = call i64 @pgno2bytes(ptr noundef %800, i64 noundef %804) #18
  %806 = load ptr, ptr %5, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.MDBX_env, ptr %806, i32 0, i32 35
  %808 = getelementptr inbounds %struct.anon.13, ptr %807, i32 0, i32 0
  store i64 %805, ptr %808, align 8, !tbaa !58
  %809 = load ptr, ptr %5, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %811 = getelementptr inbounds %struct.geo, ptr %810, i32 0, i32 3
  %812 = load i32, ptr %811, align 4, !tbaa !41
  %813 = zext i32 %812 to i64
  %814 = call i64 @pgno2bytes(ptr noundef %809, i64 noundef %813) #18
  %815 = load ptr, ptr %5, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.MDBX_env, ptr %815, i32 0, i32 35
  %817 = getelementptr inbounds %struct.anon.13, ptr %816, i32 0, i32 1
  store i64 %814, ptr %817, align 8, !tbaa !57
  %818 = load ptr, ptr %5, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %820 = getelementptr inbounds %struct.geo, ptr %819, i32 0, i32 0
  %821 = load i16, ptr %820, align 4, !tbaa !42
  %822 = call i32 @pv2pages(i16 noundef zeroext %821) #17
  %823 = zext i32 %822 to i64
  %824 = call i64 @pgno2bytes(ptr noundef %818, i64 noundef %823) #18
  %825 = load ptr, ptr %5, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.MDBX_env, ptr %825, i32 0, i32 35
  %827 = getelementptr inbounds %struct.anon.13, ptr %826, i32 0, i32 3
  store i64 %824, ptr %827, align 8, !tbaa !60
  %828 = load ptr, ptr %5, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %830 = getelementptr inbounds %struct.geo, ptr %829, i32 0, i32 1
  %831 = load i16, ptr %830, align 2, !tbaa !43
  %832 = call i32 @pv2pages(i16 noundef zeroext %831) #17
  %833 = zext i32 %832 to i64
  %834 = call i64 @pgno2bytes(ptr noundef %828, i64 noundef %833) #18
  %835 = load ptr, ptr %5, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.MDBX_env, ptr %835, i32 0, i32 35
  %837 = getelementptr inbounds %struct.anon.13, ptr %836, i32 0, i32 4
  store i64 %834, ptr %837, align 8, !tbaa !59
  br label %838

838:                                              ; preds = %790, %789
  br label %839

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

840:                                              ; preds = %839
  %841 = load ptr, ptr %5, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %843 = getelementptr inbounds %struct.geo, ptr %842, i32 0, i32 4
  %844 = load i32, ptr %843, align 4, !tbaa !30
  %845 = zext i32 %844 to i64
  %846 = call i64 @pgno_align2os_bytes(ptr noundef %841, i64 noundef %845) #18
  %847 = load ptr, ptr %5, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.MDBX_env, ptr %847, i32 0, i32 35
  %849 = getelementptr inbounds %struct.anon.13, ptr %848, i32 0, i32 2
  %850 = load i64, ptr %849, align 8, !tbaa !27
  %851 = icmp eq i64 %846, %850
  %852 = xor i1 %851, true
  %853 = xor i1 %852, true
  %854 = xor i1 %853, true
  %855 = zext i1 %854 to i32
  %856 = sext i32 %855 to i64
  %857 = call i64 @llvm.expect.i64(i64 %856, i64 0)
  %858 = icmp ne i64 %857, 0
  br i1 %858, label %859, label %861

859:                                              ; preds = %840
  %860 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %860, ptr noundef @.str.46, ptr noundef @__func__.dxb_setup, i32 noundef 641) #15
  unreachable

861:                                              ; preds = %840
  br label %862

862:                                              ; preds = %861
  br label %863

863:                                              ; preds = %862
  br label %864

864:                                              ; preds = %863
  %865 = load ptr, ptr %5, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.MDBX_env, ptr %865, i32 0, i32 35
  %867 = getelementptr inbounds %struct.anon.13, ptr %866, i32 0, i32 2
  %868 = load i64, ptr %867, align 8, !tbaa !27
  %869 = load i64, ptr %13, align 8, !tbaa !32
  %870 = icmp uge i64 %868, %869
  %871 = xor i1 %870, true
  %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 %880

878:                                              ; preds = %864
  %879 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %879, ptr noundef @.str.47, ptr noundef @__func__.dxb_setup, i32 noundef 642) #15
  unreachable

880:                                              ; preds = %864
  br label %881

881:                                              ; preds = %880
  br label %882

882:                                              ; preds = %881
  %883 = load i64, ptr %12, align 8, !tbaa !32
  %884 = icmp ne i64 %883, 0
  br i1 %884, label %890, label %885

885:                                              ; preds = %882
  %886 = load ptr, ptr %5, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.MDBX_env, ptr %886, i32 0, i32 35
  %888 = getelementptr inbounds %struct.anon.13, ptr %887, i32 0, i32 2
  %889 = load i64, ptr %888, align 8, !tbaa !27
  store i64 %889, ptr %12, align 8, !tbaa !32
  br label %890

890:                                              ; preds = %885, %882
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #14
  %891 = load ptr, ptr %5, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.MDBX_env, ptr %891, i32 0, i32 3
  %893 = getelementptr inbounds %struct.osal_mmap, ptr %892, i32 0, i32 4
  %894 = load i64, ptr %893, align 8, !tbaa !36
  store i64 %894, ptr %16, align 8, !tbaa !32
  %895 = load i64, ptr %16, align 8, !tbaa !32
  %896 = load ptr, ptr %5, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.MDBX_env, ptr %896, i32 0, i32 35
  %898 = getelementptr inbounds %struct.anon.13, ptr %897, i32 0, i32 2
  %899 = load i64, ptr %898, align 8, !tbaa !27
  %900 = icmp ne i64 %895, %899
  %901 = xor i1 %900, true
  %902 = xor i1 %901, true
  %903 = zext i1 %902 to i32
  %904 = sext i32 %903 to i64
  %905 = call i64 @llvm.expect.i64(i64 %904, i64 0)
  %906 = icmp ne i64 %905, 0
  br i1 %906, label %907, label %1070

907:                                              ; preds = %890
  %908 = load i32, ptr %6, align 4, !tbaa !9
  %909 = icmp ne i32 %908, -1
  br i1 %909, label %910, label %943

910:                                              ; preds = %907
  br label %911

911:                                              ; preds = %910
  %912 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %913 = zext i8 %912 to i32
  %914 = icmp sle i32 4, %913
  %915 = xor i1 %914, true
  %916 = xor i1 %915, true
  %917 = zext i1 %916 to i32
  %918 = sext i32 %917 to i64
  %919 = call i64 @llvm.expect.i64(i64 %918, i64 0)
  %920 = icmp ne i64 %919, 0
  br i1 %920, label %921, label %940

921:                                              ; preds = %911
  %922 = load ptr, ptr %5, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.MDBX_env, ptr %922, i32 0, i32 35
  %924 = getelementptr inbounds %struct.anon.13, ptr %923, i32 0, i32 2
  %925 = load i64, ptr %924, align 8, !tbaa !27
  %926 = load ptr, ptr %5, align 8, !tbaa !5
  %927 = load ptr, ptr %5, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.MDBX_env, ptr %927, i32 0, i32 35
  %929 = getelementptr inbounds %struct.anon.13, ptr %928, i32 0, i32 2
  %930 = load i64, ptr %929, align 8, !tbaa !27
  %931 = call i32 @bytes2pgno(ptr noundef %926, i64 noundef %930) #18
  %932 = load i64, ptr %16, align 8, !tbaa !32
  %933 = load i64, ptr %16, align 8, !tbaa !32
  %934 = load ptr, ptr %5, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.MDBX_env, ptr %934, i32 0, i32 15
  %936 = load i8, ptr %935, align 8, !tbaa !61
  %937 = zext i8 %936 to i32
  %938 = zext i32 %937 to i64
  %939 = lshr i64 %933, %938
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_setup, i32 noundef 651, ptr noundef @.str.48, i64 noundef %925, i32 noundef %931, i64 noundef %932, i64 noundef %939)
  br label %940

940:                                              ; preds = %921, %911
  br label %941

941:                                              ; preds = %940
  br label %942

942:                                              ; preds = %941
  br label %1069

943:                                              ; preds = %907
  %944 = load i64, ptr %16, align 8, !tbaa !32
  %945 = load i64, ptr %12, align 8, !tbaa !32
  %946 = icmp ne i64 %944, %945
  br i1 %946, label %947, label %974

947:                                              ; preds = %943
  br label %948

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

958:                                              ; preds = %948
  %959 = load i64, ptr %12, align 8, !tbaa !32
  %960 = load ptr, ptr %5, align 8, !tbaa !5
  %961 = load i64, ptr %12, align 8, !tbaa !32
  %962 = call i32 @bytes2pgno(ptr noundef %960, i64 noundef %961) #18
  %963 = load i64, ptr %16, align 8, !tbaa !32
  %964 = load i64, ptr %16, align 8, !tbaa !32
  %965 = load ptr, ptr %5, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.MDBX_env, ptr %965, i32 0, i32 15
  %967 = load i8, ptr %966, align 8, !tbaa !61
  %968 = zext i8 %967 to i32
  %969 = zext i32 %968 to i64
  %970 = lshr i64 %964, %969
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.dxb_setup, i32 noundef 655, ptr noundef @.str.49, i64 noundef %959, i32 noundef %962, i64 noundef %963, i64 noundef %970)
  br label %971

971:                                              ; preds = %958, %948
  br label %972

972:                                              ; preds = %971
  br label %973

973:                                              ; preds = %972
  br label %974

974:                                              ; preds = %973, %943
  %975 = load i64, ptr %16, align 8, !tbaa !32
  %976 = load i64, ptr %13, align 8, !tbaa !32
  %977 = icmp ult i64 %975, %976
  br i1 %977, label %978, label %999

978:                                              ; preds = %974
  br label %979

979:                                              ; preds = %978
  %980 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %981 = zext i8 %980 to i32
  %982 = icmp sle i32 1, %981
  %983 = xor i1 %982, true
  %984 = xor i1 %983, true
  %985 = zext i1 %984 to i32
  %986 = sext i32 %985 to i64
  %987 = call i64 @llvm.expect.i64(i64 %986, i64 0)
  %988 = icmp ne i64 %987, 0
  br i1 %988, label %989, label %996

989:                                              ; preds = %979
  %990 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %991 = getelementptr inbounds %struct.geo, ptr %990, i32 0, i32 5
  %992 = load i32, ptr %991, align 4, !tbaa !30
  %993 = load ptr, ptr %5, align 8, !tbaa !5
  %994 = load i64, ptr %16, align 8, !tbaa !32
  %995 = call i32 @bytes2pgno(ptr noundef %993, i64 noundef %994) #18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 658, ptr noundef @.str.50, i32 noundef %992, i32 noundef %995)
  br label %996

996:                                              ; preds = %989, %979
  br label %997

997:                                              ; preds = %996
  br label %998

998:                                              ; preds = %997
  store i32 -30796, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2561

999:                                              ; preds = %974
  %1000 = load ptr, ptr %5, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.MDBX_env, ptr %1000, i32 0, i32 1
  %1002 = load i32, ptr %1001, align 4, !tbaa !15
  %1003 = and i32 %1002, 131072
  %1004 = icmp ne i32 %1003, 0
  br i1 %1004, label %1005, label %1043

1005:                                             ; preds = %999
  %1006 = load i64, ptr %16, align 8, !tbaa !32
  %1007 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 2), align 4, !tbaa !62
  %1008 = sub i32 %1007, 1
  %1009 = zext i32 %1008 to i64
  %1010 = and i64 %1006, %1009
  %1011 = icmp ne i64 %1010, 0
  br i1 %1011, label %1012, label %1028

1012:                                             ; preds = %1005
  br label %1013

1013:                                             ; preds = %1012
  %1014 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1015 = zext i8 %1014 to i32
  %1016 = icmp sle i32 1, %1015
  %1017 = xor i1 %1016, true
  %1018 = xor i1 %1017, true
  %1019 = zext i1 %1018 to i32
  %1020 = sext i32 %1019 to i64
  %1021 = call i64 @llvm.expect.i64(i64 %1020, i64 0)
  %1022 = icmp ne i64 %1021, 0
  br i1 %1022, label %1023, label %1025

1023:                                             ; preds = %1013
  %1024 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 2), align 4, !tbaa !62
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 665, ptr noundef @.str.51, i32 noundef %1024)
  br label %1025

1025:                                             ; preds = %1023, %1013
  br label %1026

1026:                                             ; preds = %1025
  br label %1027

1027:                                             ; preds = %1026
  store i32 -30419, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2561

1028:                                             ; preds = %1005
  br label %1029

1029:                                             ; preds = %1028
  %1030 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1031 = zext i8 %1030 to i32
  %1032 = icmp sle i32 2, %1031
  %1033 = xor i1 %1032, true
  %1034 = xor i1 %1033, true
  %1035 = zext i1 %1034 to i32
  %1036 = sext i32 %1035 to i64
  %1037 = call i64 @llvm.expect.i64(i64 %1036, i64 0)
  %1038 = icmp ne i64 %1037, 0
  br i1 %1038, label %1039, label %1040

1039:                                             ; preds = %1029
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.dxb_setup, i32 noundef 668, ptr noundef @.str.6, ptr noundef @.str.52)
  br label %1040

1040:                                             ; preds = %1039, %1029
  br label %1041

1041:                                             ; preds = %1040
  br label %1042

1042:                                             ; preds = %1041
  br label %1068

1043:                                             ; preds = %999
  br label %1044

1044:                                             ; preds = %1043
  %1045 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1046 = zext i8 %1045 to i32
  %1047 = icmp sle i32 4, %1046
  %1048 = xor i1 %1047, true
  %1049 = xor i1 %1048, true
  %1050 = zext i1 %1049 to i32
  %1051 = sext i32 %1050 to i64
  %1052 = call i64 @llvm.expect.i64(i64 %1051, i64 0)
  %1053 = icmp ne i64 %1052, 0
  br i1 %1053, label %1054, label %1065

1054:                                             ; preds = %1044
  %1055 = load ptr, ptr %5, align 8, !tbaa !5
  %1056 = getelementptr inbounds %struct.MDBX_env, ptr %1055, i32 0, i32 35
  %1057 = getelementptr inbounds %struct.anon.13, ptr %1056, i32 0, i32 2
  %1058 = load i64, ptr %1057, align 8, !tbaa !27
  %1059 = load ptr, ptr %5, align 8, !tbaa !5
  %1060 = load ptr, ptr %5, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.MDBX_env, ptr %1060, i32 0, i32 35
  %1062 = getelementptr inbounds %struct.anon.13, ptr %1061, i32 0, i32 2
  %1063 = load i64, ptr %1062, align 8, !tbaa !27
  %1064 = call i32 @bytes2pgno(ptr noundef %1059, i64 noundef %1063) #18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_setup, i32 noundef 671, ptr noundef @.str.53, i64 noundef %1058, i32 noundef %1064)
  br label %1065

1065:                                             ; preds = %1054, %1044
  br label %1066

1066:                                             ; preds = %1065
  br label %1067

1067:                                             ; preds = %1066
  br label %1068

1068:                                             ; preds = %1067, %1042
  br label %1069

1069:                                             ; preds = %1068, %942
  br label %1070

1070:                                             ; preds = %1069, %890
  br label %1071

1071:                                             ; preds = %1070
  %1072 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1073 = zext i8 %1072 to i32
  %1074 = icmp sle i32 4, %1073
  %1075 = xor i1 %1074, true
  %1076 = xor i1 %1075, true
  %1077 = zext i1 %1076 to i32
  %1078 = sext i32 %1077 to i64
  %1079 = call i64 @llvm.expect.i64(i64 %1078, i64 0)
  %1080 = icmp ne i64 %1079, 0
  br i1 %1080, label %1081, label %1090

1081:                                             ; preds = %1071
  %1082 = load i64, ptr @globals, align 8, !tbaa !30
  %1083 = load i64, ptr getelementptr inbounds (%struct.anon.5, ptr @globals, i32 0, i32 1), align 8, !tbaa !30
  %1084 = load i64, ptr @globals, align 8, !tbaa !30
  %1085 = load i64, ptr getelementptr inbounds (%struct.anon.5, ptr @globals, i32 0, i32 1), align 8, !tbaa !30
  %1086 = or i64 %1084, %1085
  %1087 = icmp ne i64 %1086, 0
  %1088 = zext i1 %1087 to i64
  %1089 = select i1 %1087, ptr @.str.55, ptr @.str.56
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_setup, i32 noundef 677, ptr noundef @.str.54, i64 noundef %1082, i64 noundef %1083, ptr noundef %1089)
  br label %1090

1090:                                             ; preds = %1081, %1071
  br label %1091

1091:                                             ; preds = %1090
  br label %1092

1092:                                             ; preds = %1091
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #14
  %1093 = load ptr, ptr %5, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.MDBX_env, ptr %1093, i32 0, i32 1
  %1095 = load i32, ptr %1094, align 4, !tbaa !15
  %1096 = and i32 %1095, 8388608
  %1097 = icmp ne i32 %1096, 0
  br i1 %1097, label %1102, label %1098

1098:                                             ; preds = %1092
  %1099 = load i64, ptr %13, align 8, !tbaa !32
  %1100 = call i32 @mdbx_is_readahead_reasonable(i64 noundef %1099, i64 noundef 0)
  %1101 = icmp eq i32 %1100, -1
  br label %1102

1102:                                             ; preds = %1098, %1092
  %1103 = phi i1 [ false, %1092 ], [ %1101, %1098 ]
  %1104 = zext i1 %1103 to i8
  store i8 %1104, ptr %17, align 1, !tbaa !63
  %1105 = load ptr, ptr %5, align 8, !tbaa !5
  %1106 = getelementptr inbounds %struct.MDBX_env, ptr %1105, i32 0, i32 1
  %1107 = load i32, ptr %1106, align 4, !tbaa !15
  %1108 = load ptr, ptr %5, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.MDBX_env, ptr %1108, i32 0, i32 3
  %1110 = load ptr, ptr %5, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.MDBX_env, ptr %1110, i32 0, i32 35
  %1112 = getelementptr inbounds %struct.anon.13, ptr %1111, i32 0, i32 2
  %1113 = load i64, ptr %1112, align 8, !tbaa !27
  %1114 = load ptr, ptr %5, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.MDBX_env, ptr %1114, i32 0, i32 35
  %1116 = getelementptr inbounds %struct.anon.13, ptr %1115, i32 0, i32 1
  %1117 = load i64, ptr %1116, align 8, !tbaa !57
  %1118 = load i32, ptr %6, align 4, !tbaa !9
  %1119 = icmp ne i32 %1118, 0
  br i1 %1119, label %1120, label %1126

1120:                                             ; preds = %1102
  %1121 = load ptr, ptr %5, align 8, !tbaa !5
  %1122 = getelementptr inbounds %struct.MDBX_env, ptr %1121, i32 0, i32 16
  %1123 = load i8, ptr %1122, align 1, !tbaa !25
  %1124 = sext i8 %1123 to i32
  %1125 = icmp slt i32 %1124, 0
  br label %1126

1126:                                             ; preds = %1120, %1102
  %1127 = phi i1 [ false, %1102 ], [ %1125, %1120 ]
  %1128 = zext i1 %1127 to i64
  %1129 = select i1 %1127, i32 1, i32 0
  %1130 = load ptr, ptr %5, align 8, !tbaa !5
  %1131 = getelementptr inbounds %struct.MDBX_env, ptr %1130, i32 0, i32 22
  %1132 = getelementptr inbounds %struct.anon.8, ptr %1131, i32 0, i32 1
  %1133 = load ptr, ptr %1132, align 8, !tbaa !64
  %1134 = call i32 @osal_mmap(i32 noundef %1107, ptr noundef %1109, i64 noundef %1113, i64 noundef %1117, i32 noundef %1129, ptr noundef %1133)
  store i32 %1134, ptr %10, align 4, !tbaa !9
  %1135 = load i32, ptr %10, align 4, !tbaa !9
  %1136 = icmp ne i32 %1135, 0
  %1137 = xor i1 %1136, true
  %1138 = xor i1 %1137, true
  %1139 = zext i1 %1138 to i32
  %1140 = sext i32 %1139 to i64
  %1141 = call i64 @llvm.expect.i64(i64 %1140, i64 0)
  %1142 = icmp ne i64 %1141, 0
  br i1 %1142, label %1143, label %1145

1143:                                             ; preds = %1126
  %1144 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %1144, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2560

1145:                                             ; preds = %1126
  %1146 = load ptr, ptr %5, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.MDBX_env, ptr %1146, i32 0, i32 3
  %1148 = getelementptr inbounds %struct.osal_mmap, ptr %1147, i32 0, i32 0
  %1149 = load ptr, ptr %1148, align 8, !tbaa !30
  %1150 = load ptr, ptr %5, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.MDBX_env, ptr %1150, i32 0, i32 3
  %1152 = getelementptr inbounds %struct.osal_mmap, ptr %1151, i32 0, i32 2
  %1153 = load i64, ptr %1152, align 8, !tbaa !65
  %1154 = call i32 @madvise(ptr noundef %1149, i64 noundef %1153, i32 noundef 16) #14
  %1155 = icmp ne i32 %1154, 0
  br i1 %1155, label %1156, label %1160

1156:                                             ; preds = %1145
  %1157 = call ptr @__errno_location() #17
  %1158 = load i32, ptr %1157, align 4, !tbaa !9
  %1159 = call i32 @ignore_enosys(i32 noundef %1158)
  br label %1161

1160:                                             ; preds = %1145
  br label %1161

1161:                                             ; preds = %1160, %1156
  %1162 = phi i32 [ %1159, %1156 ], [ 0, %1160 ]
  store i32 %1162, ptr %10, align 4, !tbaa !9
  %1163 = load i32, ptr %10, align 4, !tbaa !9
  %1164 = icmp ne i32 %1163, -1
  br i1 %1164, label %1165, label %1168

1165:                                             ; preds = %1161
  %1166 = load i32, ptr %10, align 4, !tbaa !9
  %1167 = icmp ne i32 %1166, 0
  br label %1168

1168:                                             ; preds = %1165, %1161
  %1169 = phi i1 [ false, %1161 ], [ %1167, %1165 ]
  %1170 = xor i1 %1169, true
  %1171 = xor i1 %1170, true
  %1172 = zext i1 %1171 to i32
  %1173 = sext i32 %1172 to i64
  %1174 = call i64 @llvm.expect.i64(i64 %1173, i64 0)
  %1175 = icmp ne i64 %1174, 0
  br i1 %1175, label %1176, label %1178

1176:                                             ; preds = %1168
  %1177 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %1177, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2560

1178:                                             ; preds = %1168
  %1179 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1180 = zext i8 %1179 to i32
  %1181 = and i32 %1180, 8
  %1182 = icmp ne i32 %1181, 0
  br i1 %1182, label %1183, label %1219

1183:                                             ; preds = %1178
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #14
  %1184 = load ptr, ptr %5, align 8, !tbaa !5
  %1185 = call i64 @pgno_align2os_bytes(ptr noundef %1184, i64 noundef 3) #18
  store i64 %1185, ptr %18, align 8, !tbaa !32
  %1186 = load ptr, ptr %5, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.MDBX_env, ptr %1186, i32 0, i32 3
  %1188 = getelementptr inbounds %struct.osal_mmap, ptr %1187, i32 0, i32 0
  %1189 = load ptr, ptr %1188, align 8, !tbaa !30
  %1190 = load i64, ptr %18, align 8, !tbaa !32
  %1191 = call i32 @madvise(ptr noundef %1189, i64 noundef %1190, i32 noundef 17) #14
  %1192 = icmp ne i32 %1191, 0
  br i1 %1192, label %1193, label %1197

1193:                                             ; preds = %1183
  %1194 = call ptr @__errno_location() #17
  %1195 = load i32, ptr %1194, align 4, !tbaa !9
  %1196 = call i32 @ignore_enosys(i32 noundef %1195)
  br label %1198

1197:                                             ; preds = %1183
  br label %1198

1198:                                             ; preds = %1197, %1193
  %1199 = phi i32 [ %1196, %1193 ], [ 0, %1197 ]
  store i32 %1199, ptr %10, align 4, !tbaa !9
  %1200 = load i32, ptr %10, align 4, !tbaa !9
  %1201 = icmp ne i32 %1200, -1
  br i1 %1201, label %1202, label %1205

1202:                                             ; preds = %1198
  %1203 = load i32, ptr %10, align 4, !tbaa !9
  %1204 = icmp ne i32 %1203, 0
  br label %1205

1205:                                             ; preds = %1202, %1198
  %1206 = phi i1 [ false, %1198 ], [ %1204, %1202 ]
  %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 %1215

1213:                                             ; preds = %1205
  %1214 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %1214, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1216

1215:                                             ; preds = %1205
  store i32 0, ptr %11, align 4
  br label %1216

1216:                                             ; preds = %1215, %1213
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #14
  %1217 = load i32, ptr %11, align 4
  switch i32 %1217, label %2560 [
    i32 0, label %1218
  ]

1218:                                             ; preds = %1216
  br label %1219

1219:                                             ; preds = %1218, %1178
  br label %1220

1220:                                             ; preds = %1219
  %1221 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1222 = zext i8 %1221 to i32
  %1223 = and i32 %1222, 1
  %1224 = icmp ne i32 %1223, 0
  %1225 = xor i1 %1224, true
  %1226 = xor i1 %1225, true
  %1227 = zext i1 %1226 to i32
  %1228 = sext i32 %1227 to i64
  %1229 = call i64 @llvm.expect.i64(i64 %1228, i64 1)
  %1230 = icmp ne i64 %1229, 0
  br i1 %1230, label %1231, label %1258

1231:                                             ; preds = %1220
  br label %1232

1232:                                             ; preds = %1231
  %1233 = load i64, ptr %13, align 8, !tbaa !32
  %1234 = load ptr, ptr %5, align 8, !tbaa !5
  %1235 = call i64 @pgno2bytes(ptr noundef %1234, i64 noundef 3) #18
  %1236 = icmp uge i64 %1233, %1235
  br i1 %1236, label %1237, label %1244

1237:                                             ; preds = %1232
  %1238 = load i64, ptr %13, align 8, !tbaa !32
  %1239 = load ptr, ptr %5, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.MDBX_env, ptr %1239, i32 0, i32 3
  %1241 = getelementptr inbounds %struct.osal_mmap, ptr %1240, i32 0, i32 2
  %1242 = load i64, ptr %1241, align 8, !tbaa !65
  %1243 = icmp ule i64 %1238, %1242
  br label %1244

1244:                                             ; preds = %1237, %1232
  %1245 = phi i1 [ false, %1232 ], [ %1243, %1237 ]
  %1246 = xor i1 %1245, true
  %1247 = xor i1 %1246, true
  %1248 = xor i1 %1247, true
  %1249 = zext i1 %1248 to i32
  %1250 = sext i32 %1249 to i64
  %1251 = call i64 @llvm.expect.i64(i64 %1250, i64 0)
  %1252 = icmp ne i64 %1251, 0
  br i1 %1252, label %1253, label %1255

1253:                                             ; preds = %1244
  %1254 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1254, ptr noundef @.str.57, ptr noundef @__func__.dxb_setup, i32 noundef 706) #15
  unreachable

1255:                                             ; preds = %1244
  br label %1256

1256:                                             ; preds = %1255
  br label %1257

1257:                                             ; preds = %1256
  br label %1258

1258:                                             ; preds = %1257, %1220
  br label %1259

1259:                                             ; preds = %1258
  br label %1260

1260:                                             ; preds = %1259
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #14
  %1261 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8 %19, ptr noundef %1261)
  %1262 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1262, ptr noundef %19)
  %1263 = load ptr, ptr %5, align 8, !tbaa !5
  %1264 = getelementptr inbounds %struct.MDBX_env, ptr %1263, i32 0, i32 16
  %1265 = load i8, ptr %1264, align 1, !tbaa !25
  %1266 = sext i8 %1265 to i32
  %1267 = icmp sge i32 %1266, 0
  %1268 = xor i1 %1267, true
  %1269 = xor i1 %1268, true
  %1270 = zext i1 %1269 to i32
  %1271 = sext i32 %1270 to i64
  %1272 = call i64 @llvm.expect.i64(i64 %1271, i64 0)
  %1273 = icmp ne i64 %1272, 0
  br i1 %1273, label %1274, label %1324

1274:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 224, ptr %20) #14
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #14
  %1275 = load ptr, ptr %5, align 8, !tbaa !5
  %1276 = load ptr, ptr %5, align 8, !tbaa !5
  %1277 = getelementptr inbounds %struct.MDBX_env, ptr %1276, i32 0, i32 16
  %1278 = load i8, ptr %1277, align 1, !tbaa !25
  %1279 = sext i8 %1278 to i64
  %1280 = call ptr @pgno2page(ptr noundef %1275, i64 noundef %1279) #18
  %1281 = call ptr @page_meta(ptr noundef %1280) #18
  store ptr %1281, ptr %21, align 8, !tbaa !5
  %1282 = load ptr, ptr %5, align 8, !tbaa !5
  %1283 = load ptr, ptr %21, align 8, !tbaa !5
  %1284 = call i32 @meta_validate_copy(ptr noundef %1282, ptr noundef %1283, ptr noundef %20)
  store i32 %1284, ptr %10, align 4, !tbaa !9
  %1285 = load i32, ptr %10, align 4, !tbaa !9
  %1286 = icmp ne i32 %1285, 0
  %1287 = xor i1 %1286, true
  %1288 = xor i1 %1287, true
  %1289 = zext i1 %1288 to i32
  %1290 = sext i32 %1289 to i64
  %1291 = call i64 @llvm.expect.i64(i64 %1290, i64 0)
  %1292 = icmp ne i64 %1291, 0
  br i1 %1292, label %1293, label %1320

1293:                                             ; preds = %1274
  br label %1294

1294:                                             ; preds = %1293
  %1295 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1296 = zext i8 %1295 to i32
  %1297 = icmp sle i32 1, %1296
  %1298 = xor i1 %1297, true
  %1299 = xor i1 %1298, true
  %1300 = zext i1 %1299 to i32
  %1301 = sext i32 %1300 to i64
  %1302 = call i64 @llvm.expect.i64(i64 %1301, i64 0)
  %1303 = icmp ne i64 %1302, 0
  br i1 %1303, label %1304, label %1316

1304:                                             ; preds = %1294
  %1305 = load ptr, ptr %5, align 8, !tbaa !5
  %1306 = load ptr, ptr %21, align 8, !tbaa !5
  %1307 = call ptr @data_page(ptr noundef %1306) #18
  %1308 = ptrtoint ptr %1307 to i64
  %1309 = load ptr, ptr %5, align 8, !tbaa !5
  %1310 = getelementptr inbounds %struct.MDBX_env, ptr %1309, i32 0, i32 3
  %1311 = getelementptr inbounds %struct.osal_mmap, ptr %1310, i32 0, i32 0
  %1312 = load ptr, ptr %1311, align 8, !tbaa !30
  %1313 = ptrtoint ptr %1312 to i64
  %1314 = sub nsw i64 %1308, %1313
  %1315 = call i32 @bytes2pgno(ptr noundef %1305, i64 noundef %1314) #18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 727, ptr noundef @.str.58, i32 noundef %1315)
  br label %1316

1316:                                             ; preds = %1304, %1294
  br label %1317

1317:                                             ; preds = %1316
  br label %1318

1318:                                             ; preds = %1317
  %1319 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1319, ptr noundef %19)
  store i32 -30796, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1321

1320:                                             ; preds = %1274
  store i32 0, ptr %11, align 4
  br label %1321

1321:                                             ; preds = %1320, %1318
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #14
  call void @llvm.lifetime.end.p0(i64 224, ptr %20) #14
  %1322 = load i32, ptr %11, align 4
  switch i32 %1322, label %2559 [
    i32 0, label %1323
  ]

1323:                                             ; preds = %1321
  br label %1839

1324:                                             ; preds = %1260
  br label %1325

1325:                                             ; preds = %1837, %1324
  br label %1326

1326:                                             ; preds = %1325
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #14
  %1327 = call i32 @meta_eq_mask(ptr noundef %19)
  store i32 %1327, ptr %22, align 4, !tbaa !9
  %1328 = load i32, ptr %22, align 4, !tbaa !9
  %1329 = icmp ne i32 %1328, 0
  %1330 = xor i1 %1329, true
  %1331 = xor i1 %1330, true
  %1332 = zext i1 %1331 to i32
  %1333 = sext i32 %1332 to i64
  %1334 = call i64 @llvm.expect.i64(i64 %1333, i64 0)
  %1335 = icmp ne i64 %1334, 0
  br i1 %1335, label %1336, label %1353

1336:                                             ; preds = %1326
  br label %1337

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

1347:                                             ; preds = %1337
  %1348 = load i32, ptr %22, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 735, ptr noundef @.str.59, i32 noundef %1348)
  br label %1349

1349:                                             ; preds = %1347, %1337
  br label %1350

1350:                                             ; preds = %1349
  br label %1351

1351:                                             ; preds = %1350
  %1352 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1352, ptr noundef %19)
  store i32 -30796, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1835

1353:                                             ; preds = %1326
  %1354 = load i32, ptr %6, align 4, !tbaa !9
  %1355 = icmp ne i32 %1354, -1
  br i1 %1355, label %1356, label %1402

1356:                                             ; preds = %1353
  %1357 = getelementptr inbounds %struct.troika, ptr %19, i32 0, i32 1
  %1358 = load i8, ptr %1357, align 1, !tbaa !66
  %1359 = zext i8 %1358 to i32
  %1360 = getelementptr inbounds %struct.troika, ptr %19, i32 0, i32 2
  %1361 = load i8, ptr %1360, align 2, !tbaa !68
  %1362 = zext i8 %1361 to i32
  %1363 = icmp eq i32 %1359, %1362
  br i1 %1363, label %1364, label %1365

1364:                                             ; preds = %1356
  store i32 45, ptr %11, align 4
  br label %1835

1365:                                             ; preds = %1356
  %1366 = load ptr, ptr %5, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.MDBX_env, ptr %1366, i32 0, i32 6
  %1368 = getelementptr inbounds %struct.osal_mmap, ptr %1367, i32 0, i32 0
  %1369 = load ptr, ptr %1368, align 8, !tbaa !30
  %1370 = icmp ne ptr %1369, null
  br i1 %1370, label %1387, label %1371

1371:                                             ; preds = %1365
  br label %1372

1372:                                             ; preds = %1371
  %1373 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1374 = zext i8 %1373 to i32
  %1375 = icmp sle i32 1, %1374
  %1376 = xor i1 %1375, true
  %1377 = xor i1 %1376, true
  %1378 = zext i1 %1377 to i32
  %1379 = sext i32 %1378 to i64
  %1380 = call i64 @llvm.expect.i64(i64 %1379, i64 0)
  %1381 = icmp ne i64 %1380, 0
  br i1 %1381, label %1382, label %1383

1382:                                             ; preds = %1372
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 749, ptr noundef @.str.6, ptr noundef @.str.60)
  br label %1383

1383:                                             ; preds = %1382, %1372
  br label %1384

1384:                                             ; preds = %1383
  br label %1385

1385:                                             ; preds = %1384
  %1386 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1386, ptr noundef %19)
  store i32 -30419, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1835

1387:                                             ; preds = %1365
  br label %1388

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

1398:                                             ; preds = %1388
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_setup, i32 noundef 756, ptr noundef @.str.6, ptr noundef @.str.61)
  br label %1399

1399:                                             ; preds = %1398, %1388
  br label %1400

1400:                                             ; preds = %1399
  br label %1401

1401:                                             ; preds = %1400
  store i32 45, ptr %11, align 4
  br label %1835

1402:                                             ; preds = %1353
  br label %1403

1403:                                             ; preds = %1402
  %1404 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1405 = zext i8 %1404 to i32
  %1406 = and i32 %1405, 1
  %1407 = icmp ne i32 %1406, 0
  %1408 = xor i1 %1407, true
  %1409 = xor i1 %1408, true
  %1410 = zext i1 %1409 to i32
  %1411 = sext i32 %1410 to i64
  %1412 = call i64 @llvm.expect.i64(i64 %1411, i64 1)
  %1413 = icmp ne i64 %1412, 0
  br i1 %1413, label %1414, label %1430

1414:                                             ; preds = %1403
  br label %1415

1415:                                             ; preds = %1414
  %1416 = load i32, ptr %6, align 4, !tbaa !9
  %1417 = icmp eq i32 %1416, -1
  %1418 = xor i1 %1417, true
  %1419 = xor i1 %1418, true
  %1420 = xor i1 %1419, true
  %1421 = zext i1 %1420 to i32
  %1422 = sext i32 %1421 to i64
  %1423 = call i64 @llvm.expect.i64(i64 %1422, i64 0)
  %1424 = icmp ne i64 %1423, 0
  br i1 %1424, label %1425, label %1427

1425:                                             ; preds = %1415
  %1426 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1426, ptr noundef @.str.62, ptr noundef @__func__.dxb_setup, i32 noundef 759) #15
  unreachable

1427:                                             ; preds = %1415
  br label %1428

1428:                                             ; preds = %1427
  br label %1429

1429:                                             ; preds = %1428
  br label %1430

1430:                                             ; preds = %1429, %1403
  br label %1431

1431:                                             ; preds = %1430
  br label %1432

1432:                                             ; preds = %1431
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #14
  %1433 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_recent(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %23, ptr noundef %1433, ptr noundef %19)
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #14
  %1434 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_prefer_steady(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %24, ptr noundef %1434, ptr noundef %19)
  call void @llvm.lifetime.start.p0(i64 224, ptr %25) #14
  %1435 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 2
  %1436 = load i64, ptr %1435, align 8, !tbaa !69
  %1437 = icmp ne i64 %1436, 0
  br i1 %1437, label %1438, label %1488

1438:                                             ; preds = %1432
  %1439 = load ptr, ptr %5, align 8, !tbaa !5
  %1440 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 1
  %1441 = load ptr, ptr %1440, align 8, !tbaa !30
  %1442 = call i32 @meta_validate_copy(ptr noundef %1439, ptr noundef %1441, ptr noundef %25)
  store i32 %1442, ptr %10, align 4, !tbaa !9
  %1443 = load i32, ptr %10, align 4, !tbaa !9
  %1444 = icmp ne i32 %1443, 0
  %1445 = xor i1 %1444, true
  %1446 = xor i1 %1445, true
  %1447 = zext i1 %1446 to i32
  %1448 = sext i32 %1447 to i64
  %1449 = call i64 @llvm.expect.i64(i64 %1448, i64 0)
  %1450 = icmp ne i64 %1449, 0
  br i1 %1450, label %1451, label %1480

1451:                                             ; preds = %1438
  br label %1452

1452:                                             ; preds = %1451
  %1453 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1454 = zext i8 %1453 to i32
  %1455 = icmp sle i32 1, %1454
  %1456 = xor i1 %1455, true
  %1457 = xor i1 %1456, true
  %1458 = zext i1 %1457 to i32
  %1459 = sext i32 %1458 to i64
  %1460 = call i64 @llvm.expect.i64(i64 %1459, i64 0)
  %1461 = icmp ne i64 %1460, 0
  br i1 %1461, label %1462, label %1476

1462:                                             ; preds = %1452
  %1463 = load ptr, ptr %5, align 8, !tbaa !5
  %1464 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 1
  %1465 = load ptr, ptr %1464, align 8, !tbaa !30
  %1466 = ptrtoint ptr %1465 to i64
  %1467 = load ptr, ptr %5, align 8, !tbaa !5
  %1468 = getelementptr inbounds %struct.MDBX_env, ptr %1467, i32 0, i32 3
  %1469 = getelementptr inbounds %struct.osal_mmap, ptr %1468, i32 0, i32 0
  %1470 = load ptr, ptr %1469, align 8, !tbaa !30
  %1471 = ptrtoint ptr %1470 to i64
  %1472 = sub nsw i64 %1466, %1471
  %1473 = call i32 @bytes2pgno(ptr noundef %1463, i64 noundef %1472) #18
  %1474 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 0
  %1475 = load i64, ptr %1474, align 8, !tbaa !71
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 770, ptr noundef @.str.63, i32 noundef %1473, ptr noundef @.str.64, i64 noundef %1475, ptr noundef @.str.65)
  br label %1476

1476:                                             ; preds = %1462, %1452
  br label %1477

1477:                                             ; preds = %1476
  br label %1478

1478:                                             ; preds = %1477
  %1479 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1479, ptr noundef %19)
  store i32 -30796, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1834

1480:                                             ; preds = %1438
  %1481 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 1
  %1482 = load ptr, ptr %1481, align 8, !tbaa !30
  %1483 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %1484 = load ptr, ptr %1483, align 8, !tbaa !30
  %1485 = icmp eq ptr %1482, %1484
  br i1 %1485, label %1486, label %1487

1486:                                             ; preds = %1480
  store i32 45, ptr %11, align 4
  br label %1834

1487:                                             ; preds = %1480
  br label %1488

1488:                                             ; preds = %1487, %1432
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #14
  %1489 = load ptr, ptr %5, align 8, !tbaa !5
  %1490 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %1491 = load ptr, ptr %1490, align 8, !tbaa !30
  %1492 = ptrtoint ptr %1491 to i64
  %1493 = load ptr, ptr %5, align 8, !tbaa !5
  %1494 = getelementptr inbounds %struct.MDBX_env, ptr %1493, i32 0, i32 3
  %1495 = getelementptr inbounds %struct.osal_mmap, ptr %1494, i32 0, i32 0
  %1496 = load ptr, ptr %1495, align 8, !tbaa !30
  %1497 = ptrtoint ptr %1496 to i64
  %1498 = sub nsw i64 %1492, %1497
  %1499 = call i32 @bytes2pgno(ptr noundef %1489, i64 noundef %1498) #18
  store i32 %1499, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #14
  %1500 = load ptr, ptr %5, align 8, !tbaa !5
  %1501 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %1502 = load ptr, ptr %1501, align 8, !tbaa !30
  %1503 = call i32 @meta_validate_copy(ptr noundef %1500, ptr noundef %1502, ptr noundef %25)
  %1504 = icmp eq i32 %1503, 0
  %1505 = zext i1 %1504 to i8
  store i8 %1505, ptr %27, align 1, !tbaa !63
  br label %1506

1506:                                             ; preds = %1488
  %1507 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1508 = zext i8 %1507 to i32
  %1509 = and i32 %1508, 1
  %1510 = icmp ne i32 %1509, 0
  %1511 = xor i1 %1510, true
  %1512 = xor i1 %1511, true
  %1513 = zext i1 %1512 to i32
  %1514 = sext i32 %1513 to i64
  %1515 = call i64 @llvm.expect.i64(i64 %1514, i64 1)
  %1516 = icmp ne i64 %1515, 0
  br i1 %1516, label %1517, label %1542

1517:                                             ; preds = %1506
  br label %1518

1518:                                             ; preds = %1517
  %1519 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 2
  %1520 = load i64, ptr %1519, align 8, !tbaa !69
  %1521 = icmp ne i64 %1520, 0
  br i1 %1521, label %1522, label %1528

1522:                                             ; preds = %1518
  %1523 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 0
  %1524 = load i64, ptr %1523, align 8, !tbaa !71
  %1525 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 0
  %1526 = load i64, ptr %1525, align 8, !tbaa !71
  %1527 = icmp ne i64 %1524, %1526
  br label %1528

1528:                                             ; preds = %1522, %1518
  %1529 = phi i1 [ true, %1518 ], [ %1527, %1522 ]
  %1530 = xor i1 %1529, true
  %1531 = xor i1 %1530, true
  %1532 = xor i1 %1531, true
  %1533 = zext i1 %1532 to i32
  %1534 = sext i32 %1533 to i64
  %1535 = call i64 @llvm.expect.i64(i64 %1534, i64 0)
  %1536 = icmp ne i64 %1535, 0
  br i1 %1536, label %1537, label %1539

1537:                                             ; preds = %1528
  %1538 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1538, ptr noundef @.str.66, ptr noundef @__func__.dxb_setup, i32 noundef 780) #15
  unreachable

1539:                                             ; preds = %1528
  br label %1540

1540:                                             ; preds = %1539
  br label %1541

1541:                                             ; preds = %1540
  br label %1542

1542:                                             ; preds = %1541, %1506
  br label %1543

1543:                                             ; preds = %1542
  br label %1544

1544:                                             ; preds = %1543
  %1545 = load i8, ptr %27, align 1, !tbaa !63, !range !72, !noundef !73
  %1546 = trunc i8 %1545 to i1
  %1547 = xor i1 %1546, true
  %1548 = xor i1 %1547, true
  %1549 = xor i1 %1548, true
  %1550 = zext i1 %1549 to i32
  %1551 = sext i32 %1550 to i64
  %1552 = call i64 @llvm.expect.i64(i64 %1551, i64 0)
  %1553 = icmp ne i64 %1552, 0
  br i1 %1553, label %1554, label %1600

1554:                                             ; preds = %1544
  %1555 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 2
  %1556 = load i64, ptr %1555, align 8, !tbaa !69
  %1557 = icmp ne i64 %1556, 0
  %1558 = xor i1 %1557, true
  %1559 = xor i1 %1558, true
  %1560 = xor i1 %1559, true
  %1561 = zext i1 %1560 to i32
  %1562 = sext i32 %1561 to i64
  %1563 = call i64 @llvm.expect.i64(i64 %1562, i64 0)
  %1564 = icmp ne i64 %1563, 0
  br i1 %1564, label %1565, label %1581

1565:                                             ; preds = %1554
  br label %1566

1566:                                             ; preds = %1565
  %1567 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1568 = zext i8 %1567 to i32
  %1569 = icmp sle i32 1, %1568
  %1570 = xor i1 %1569, true
  %1571 = xor i1 %1570, true
  %1572 = zext i1 %1571 to i32
  %1573 = sext i32 %1572 to i64
  %1574 = call i64 @llvm.expect.i64(i64 %1573, i64 0)
  %1575 = icmp ne i64 %1574, 0
  br i1 %1575, label %1576, label %1577

1576:                                             ; preds = %1566
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 784, ptr noundef @.str.67, ptr noundef @.str.68, ptr noundef @.str.69)
  br label %1577

1577:                                             ; preds = %1576, %1566
  br label %1578

1578:                                             ; preds = %1577
  br label %1579

1579:                                             ; preds = %1578
  %1580 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1580, ptr noundef %19)
  store i32 -30796, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1833

1581:                                             ; preds = %1554
  br label %1582

1582:                                             ; preds = %1581
  %1583 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1584 = zext i8 %1583 to i32
  %1585 = icmp sle i32 2, %1584
  %1586 = xor i1 %1585, true
  %1587 = xor i1 %1586, true
  %1588 = zext i1 %1587 to i32
  %1589 = sext i32 %1588 to i64
  %1590 = call i64 @llvm.expect.i64(i64 %1589, i64 0)
  %1591 = icmp ne i64 %1590, 0
  br i1 %1591, label %1592, label %1596

1592:                                             ; preds = %1582
  %1593 = load i32, ptr %26, align 4, !tbaa !9
  %1594 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 0
  %1595 = load i64, ptr %1594, align 8, !tbaa !71
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.dxb_setup, i32 noundef 788, ptr noundef @.str.70, i32 noundef %1593, i64 noundef %1595)
  br label %1596

1596:                                             ; preds = %1592, %1582
  br label %1597

1597:                                             ; preds = %1596
  br label %1598

1598:                                             ; preds = %1597
  %1599 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1599, ptr noundef %19)
  br label %1720

1600:                                             ; preds = %1544
  %1601 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %1602 = load ptr, ptr %1601, align 8, !tbaa !30
  %1603 = call zeroext i1 @meta_bootid_match(ptr noundef %1602)
  br i1 %1603, label %1604, label %1666

1604:                                             ; preds = %1600
  %1605 = load ptr, ptr %5, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.MDBX_env, ptr %1605, i32 0, i32 1
  %1607 = load i32, ptr %1606, align 4, !tbaa !15
  %1608 = and i32 %1607, 131072
  %1609 = icmp ne i32 %1608, 0
  br i1 %1609, label %1610, label %1628

1610:                                             ; preds = %1604
  br label %1611

1611:                                             ; preds = %1610
  %1612 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1613 = zext i8 %1612 to i32
  %1614 = icmp sle i32 1, %1613
  %1615 = xor i1 %1614, true
  %1616 = xor i1 %1615, true
  %1617 = zext i1 %1616 to i32
  %1618 = sext i32 %1617 to i64
  %1619 = call i64 @llvm.expect.i64(i64 %1618, i64 0)
  %1620 = icmp ne i64 %1619, 0
  br i1 %1620, label %1621, label %1624

1621:                                             ; preds = %1611
  %1622 = load i64, ptr @globals, align 8, !tbaa !30
  %1623 = load i64, ptr getelementptr inbounds (%struct.anon.5, ptr @globals, i32 0, i32 1), align 8, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 798, ptr noundef @.str.71, ptr noundef @.str.72, i64 noundef %1622, i64 noundef %1623, ptr noundef @.str.73)
  br label %1624

1624:                                             ; preds = %1621, %1611
  br label %1625

1625:                                             ; preds = %1624
  br label %1626

1626:                                             ; preds = %1625
  %1627 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1627, ptr noundef %19)
  store i32 -30419, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1833

1628:                                             ; preds = %1604
  br label %1629

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

1639:                                             ; preds = %1629
  %1640 = load i64, ptr @globals, align 8, !tbaa !30
  %1641 = load i64, ptr getelementptr inbounds (%struct.anon.5, ptr @globals, i32 0, i32 1), align 8, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.dxb_setup, i32 noundef 804, ptr noundef @.str.71, ptr noundef @.str.72, i64 noundef %1640, i64 noundef %1641, ptr noundef @.str.55)
  br label %1642

1642:                                             ; preds = %1639, %1629
  br label %1643

1643:                                             ; preds = %1642
  br label %1644

1644:                                             ; preds = %1643
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 4 %25, i64 224, i1 false), !tbaa.struct !29
  %1645 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1646 = getelementptr inbounds %struct.geo, ptr %1645, i32 0, i32 5
  %1647 = load i32, ptr %1646, align 4, !tbaa !30
  %1648 = zext i32 %1647 to i64
  %1649 = load ptr, ptr %5, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.MDBX_env, ptr %1649, i32 0, i32 7
  %1651 = load ptr, ptr %1650, align 8, !tbaa !74
  %1652 = getelementptr inbounds %struct.shared_lck, ptr %1651, i32 0, i32 14
  store volatile i64 %1648, ptr %1652, align 8, !tbaa !30
  %1653 = load ptr, ptr %5, align 8, !tbaa !5
  %1654 = getelementptr inbounds %struct.MDBX_env, ptr %1653, i32 0, i32 7
  %1655 = load ptr, ptr %1654, align 8, !tbaa !74
  %1656 = getelementptr inbounds %struct.shared_lck, ptr %1655, i32 0, i32 13
  %1657 = load volatile i64, ptr %1656, align 16, !tbaa !30
  %1658 = icmp ne i64 %1657, 0
  br i1 %1658, label %1665, label %1659

1659:                                             ; preds = %1644
  %1660 = call i64 @osal_monotime()
  %1661 = load ptr, ptr %5, align 8, !tbaa !5
  %1662 = getelementptr inbounds %struct.MDBX_env, ptr %1661, i32 0, i32 7
  %1663 = load ptr, ptr %1662, align 8, !tbaa !74
  %1664 = getelementptr inbounds %struct.shared_lck, ptr %1663, i32 0, i32 13
  store volatile i64 %1660, ptr %1664, align 16, !tbaa !30
  br label %1665

1665:                                             ; preds = %1659, %1644
  store i32 45, ptr %11, align 4
  br label %1833

1666:                                             ; preds = %1600
  %1667 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 2
  %1668 = load i64, ptr %1667, align 8, !tbaa !69
  %1669 = icmp ne i64 %1668, 0
  %1670 = xor i1 %1669, true
  %1671 = xor i1 %1670, true
  %1672 = xor i1 %1671, true
  %1673 = zext i1 %1672 to i32
  %1674 = sext i32 %1673 to i64
  %1675 = call i64 @llvm.expect.i64(i64 %1674, i64 0)
  %1676 = icmp ne i64 %1675, 0
  br i1 %1676, label %1677, label %1693

1677:                                             ; preds = %1666
  br label %1678

1678:                                             ; preds = %1677
  %1679 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1680 = zext i8 %1679 to i32
  %1681 = icmp sle i32 1, %1680
  %1682 = xor i1 %1681, true
  %1683 = xor i1 %1682, true
  %1684 = zext i1 %1683 to i32
  %1685 = sext i32 %1684 to i64
  %1686 = call i64 @llvm.expect.i64(i64 %1685, i64 0)
  %1687 = icmp ne i64 %1686, 0
  br i1 %1687, label %1688, label %1689

1688:                                             ; preds = %1678
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 813, ptr noundef @.str.74, ptr noundef @.str.72, ptr noundef @.str.68, ptr noundef @.str.69)
  br label %1689

1689:                                             ; preds = %1688, %1678
  br label %1690

1690:                                             ; preds = %1689
  br label %1691

1691:                                             ; preds = %1690
  %1692 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1692, ptr noundef %19)
  store i32 -30796, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1833

1693:                                             ; preds = %1666
  %1694 = load ptr, ptr %5, align 8, !tbaa !5
  %1695 = getelementptr inbounds %struct.MDBX_env, ptr %1694, i32 0, i32 1
  %1696 = load i32, ptr %1695, align 4, !tbaa !15
  %1697 = and i32 %1696, 131072
  %1698 = icmp ne i32 %1697, 0
  br i1 %1698, label %1699, label %1719

1699:                                             ; preds = %1693
  br label %1700

1700:                                             ; preds = %1699
  %1701 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1702 = zext i8 %1701 to i32
  %1703 = icmp sle i32 1, %1702
  %1704 = xor i1 %1703, true
  %1705 = xor i1 %1704, true
  %1706 = zext i1 %1705 to i32
  %1707 = sext i32 %1706 to i64
  %1708 = call i64 @llvm.expect.i64(i64 %1707, i64 0)
  %1709 = icmp ne i64 %1708, 0
  br i1 %1709, label %1710, label %1715

1710:                                             ; preds = %1700
  %1711 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 0
  %1712 = load i64, ptr %1711, align 8, !tbaa !71
  %1713 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 0
  %1714 = load i64, ptr %1713, align 8, !tbaa !71
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 819, ptr noundef @.str.75, ptr noundef @.str.72, i64 noundef %1712, i64 noundef %1714, ptr noundef @.str.73)
  br label %1715

1715:                                             ; preds = %1710, %1700
  br label %1716

1716:                                             ; preds = %1715
  br label %1717

1717:                                             ; preds = %1716
  %1718 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1718, ptr noundef %19)
  store i32 -30419, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1833

1719:                                             ; preds = %1693
  br label %1720

1720:                                             ; preds = %1719, %1598
  br label %1721

1721:                                             ; preds = %1720
  %1722 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1723 = zext i8 %1722 to i32
  %1724 = icmp sle i32 3, %1723
  %1725 = xor i1 %1724, true
  %1726 = xor i1 %1725, true
  %1727 = zext i1 %1726 to i32
  %1728 = sext i32 %1727 to i64
  %1729 = call i64 @llvm.expect.i64(i64 %1728, i64 0)
  %1730 = icmp ne i64 %1729, 0
  br i1 %1730, label %1731, label %1743

1731:                                             ; preds = %1721
  %1732 = load i8, ptr %27, align 1, !tbaa !63, !range !72, !noundef !73
  %1733 = trunc i8 %1732 to i1
  %1734 = zext i1 %1733 to i64
  %1735 = select i1 %1733, ptr @.str.55, ptr @.str.77
  %1736 = load i32, ptr %26, align 4, !tbaa !9
  %1737 = load i8, ptr %27, align 1, !tbaa !63, !range !72, !noundef !73
  %1738 = trunc i8 %1737 to i1
  %1739 = zext i1 %1738 to i64
  %1740 = select i1 %1738, ptr @.str.78, ptr @.str.55
  %1741 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 0
  %1742 = load i64, ptr %1741, align 8, !tbaa !71
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_setup, i32 noundef 828, ptr noundef @.str.76, ptr noundef @.str.72, ptr noundef %1735, i32 noundef %1736, ptr noundef %1740, i64 noundef %1742)
  br label %1743

1743:                                             ; preds = %1731, %1721
  br label %1744

1744:                                             ; preds = %1743
  br label %1745

1745:                                             ; preds = %1744
  %1746 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_troika_dump(ptr noundef %1746, ptr noundef %19)
  br label %1747

1747:                                             ; preds = %1745
  %1748 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 2
  %1749 = load i64, ptr %1748, align 8, !tbaa !69
  %1750 = icmp ne i64 %1749, 0
  %1751 = xor i1 %1750, true
  %1752 = xor i1 %1751, true
  %1753 = xor i1 %1752, true
  %1754 = zext i1 %1753 to i32
  %1755 = sext i32 %1754 to i64
  %1756 = call i64 @llvm.expect.i64(i64 %1755, i64 0)
  %1757 = icmp ne i64 %1756, 0
  br i1 %1757, label %1758, label %1760

1758:                                             ; preds = %1747
  %1759 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1759, ptr noundef @.str.79, ptr noundef @__func__.dxb_setup, i32 noundef 830) #15
  unreachable

1760:                                             ; preds = %1747
  br label %1761

1761:                                             ; preds = %1760
  br label %1762

1762:                                             ; preds = %1761
  %1763 = load ptr, ptr %5, align 8, !tbaa !5
  %1764 = load i32, ptr %26, align 4, !tbaa !9
  %1765 = zext i32 %1764 to i64
  %1766 = load i8, ptr %27, align 1, !tbaa !63, !range !72, !noundef !73
  %1767 = trunc i8 %1766 to i1
  br i1 %1767, label %1768, label %1771

1768:                                             ; preds = %1762
  %1769 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %1770 = load ptr, ptr %1769, align 8, !tbaa !30
  br label %1774

1771:                                             ; preds = %1762
  %1772 = getelementptr inbounds %struct.meta_ptr, ptr %24, i32 0, i32 1
  %1773 = load ptr, ptr %1772, align 8, !tbaa !30
  br label %1774

1774:                                             ; preds = %1771, %1768
  %1775 = phi ptr [ %1770, %1768 ], [ %1773, %1771 ]
  %1776 = call i32 @meta_override(ptr noundef %1763, i64 noundef %1765, i64 noundef 0, ptr noundef %1775)
  store i32 %1776, ptr %10, align 4, !tbaa !9
  %1777 = load i32, ptr %10, align 4, !tbaa !9
  %1778 = icmp ne i32 %1777, 0
  br i1 %1778, label %1779, label %1799

1779:                                             ; preds = %1774
  br label %1780

1780:                                             ; preds = %1779
  %1781 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1782 = zext i8 %1781 to i32
  %1783 = icmp sle i32 1, %1782
  %1784 = xor i1 %1783, true
  %1785 = xor i1 %1784, true
  %1786 = zext i1 %1785 to i32
  %1787 = sext i32 %1786 to i64
  %1788 = call i64 @llvm.expect.i64(i64 %1787, i64 0)
  %1789 = icmp ne i64 %1788, 0
  br i1 %1789, label %1790, label %1795

1790:                                             ; preds = %1780
  %1791 = load i32, ptr %26, align 4, !tbaa !9
  %1792 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 0
  %1793 = load i64, ptr %1792, align 8, !tbaa !71
  %1794 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 833, ptr noundef @.str.80, i32 noundef %1791, i64 noundef %1793, i32 noundef %1794)
  br label %1795

1795:                                             ; preds = %1790, %1780
  br label %1796

1796:                                             ; preds = %1795
  br label %1797

1797:                                             ; preds = %1796
  %1798 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %1798, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %1833

1799:                                             ; preds = %1774
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #14
  %1800 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8 %28, ptr noundef %1800)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %19, ptr align 8 %28, i64 32, i1 false), !tbaa.struct !75
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #14
  br label %1801

1801:                                             ; preds = %1799
  %1802 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %1803 = load ptr, ptr %1802, align 8, !tbaa !30
  %1804 = call i64 @meta_txnid(ptr noundef %1803)
  %1805 = icmp eq i64 0, %1804
  %1806 = xor i1 %1805, true
  %1807 = xor i1 %1806, true
  %1808 = xor i1 %1807, true
  %1809 = zext i1 %1808 to i32
  %1810 = sext i32 %1809 to i64
  %1811 = call i64 @llvm.expect.i64(i64 %1810, i64 0)
  %1812 = icmp ne i64 %1811, 0
  br i1 %1812, label %1813, label %1815

1813:                                             ; preds = %1801
  %1814 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1814, ptr noundef @.str.81, ptr noundef @__func__.dxb_setup, i32 noundef 837) #15
  unreachable

1815:                                             ; preds = %1801
  br label %1816

1816:                                             ; preds = %1815
  br label %1817

1817:                                             ; preds = %1816
  br label %1818

1818:                                             ; preds = %1817
  %1819 = call i32 @meta_eq_mask(ptr noundef %19)
  %1820 = icmp eq i32 0, %1819
  %1821 = xor i1 %1820, true
  %1822 = xor i1 %1821, true
  %1823 = xor i1 %1822, true
  %1824 = zext i1 %1823 to i32
  %1825 = sext i32 %1824 to i64
  %1826 = call i64 @llvm.expect.i64(i64 %1825, i64 0)
  %1827 = icmp ne i64 %1826, 0
  br i1 %1827, label %1828, label %1830

1828:                                             ; preds = %1818
  %1829 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1829, ptr noundef @.str.82, ptr noundef @__func__.dxb_setup, i32 noundef 838) #15
  unreachable

1830:                                             ; preds = %1818
  br label %1831

1831:                                             ; preds = %1830
  br label %1832

1832:                                             ; preds = %1831
  store i32 0, ptr %11, align 4
  br label %1833

1833:                                             ; preds = %1832, %1797, %1717, %1691, %1665, %1626, %1579
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #14
  br label %1834

1834:                                             ; preds = %1833, %1486, %1478
  call void @llvm.lifetime.end.p0(i64 224, ptr %25) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #14
  br label %1835

1835:                                             ; preds = %1834, %1401, %1385, %1364, %1351
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #14
  %1836 = load i32, ptr %11, align 4
  switch i32 %1836, label %2559 [
    i32 0, label %1837
    i32 45, label %1838
  ]

1837:                                             ; preds = %1835
  br label %1325

1838:                                             ; preds = %1835
  br label %1839

1839:                                             ; preds = %1838, %1323
  %1840 = load i32, ptr %6, align 4, !tbaa !9
  %1841 = icmp eq i32 %1840, -1
  br i1 %1841, label %1842, label %2387

1842:                                             ; preds = %1839
  %1843 = load ptr, ptr %5, align 8, !tbaa !5
  %1844 = getelementptr inbounds %struct.MDBX_env, ptr %1843, i32 0, i32 3
  %1845 = getelementptr inbounds %struct.osal_mmap, ptr %1844, i32 0, i32 3
  %1846 = load i64, ptr %1845, align 8, !tbaa !35
  %1847 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !56
  %1848 = sub i32 %1847, 1
  %1849 = zext i32 %1848 to i64
  %1850 = and i64 %1846, %1849
  %1851 = icmp ne i64 %1850, 0
  br i1 %1851, label %1859, label %1852

1852:                                             ; preds = %1842
  %1853 = load ptr, ptr %5, align 8, !tbaa !5
  %1854 = getelementptr inbounds %struct.MDBX_env, ptr %1853, i32 0, i32 3
  %1855 = getelementptr inbounds %struct.osal_mmap, ptr %1854, i32 0, i32 3
  %1856 = load i64, ptr %1855, align 8, !tbaa !35
  %1857 = load i64, ptr %13, align 8, !tbaa !32
  %1858 = icmp ult i64 %1856, %1857
  br i1 %1858, label %1859, label %1878

1859:                                             ; preds = %1852, %1842
  br label %1860

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

1870:                                             ; preds = %1860
  %1871 = load ptr, ptr %5, align 8, !tbaa !5
  %1872 = getelementptr inbounds %struct.MDBX_env, ptr %1871, i32 0, i32 3
  %1873 = getelementptr inbounds %struct.osal_mmap, ptr %1872, i32 0, i32 3
  %1874 = load i64, ptr %1873, align 8, !tbaa !35
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 845, ptr noundef @.str.83, i64 noundef %1874)
  br label %1875

1875:                                             ; preds = %1870, %1860
  br label %1876

1876:                                             ; preds = %1875
  br label %1877

1877:                                             ; preds = %1876
  store i32 -30779, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2559

1878:                                             ; preds = %1852
  %1879 = load ptr, ptr %5, align 8, !tbaa !5
  %1880 = getelementptr inbounds %struct.MDBX_env, ptr %1879, i32 0, i32 3
  %1881 = getelementptr inbounds %struct.osal_mmap, ptr %1880, i32 0, i32 3
  %1882 = load i64, ptr %1881, align 8, !tbaa !35
  %1883 = load ptr, ptr %5, align 8, !tbaa !5
  %1884 = getelementptr inbounds %struct.MDBX_env, ptr %1883, i32 0, i32 35
  %1885 = getelementptr inbounds %struct.anon.13, ptr %1884, i32 0, i32 2
  %1886 = load i64, ptr %1885, align 8, !tbaa !27
  %1887 = icmp ne i64 %1882, %1886
  br i1 %1887, label %1888, label %1918

1888:                                             ; preds = %1878
  %1889 = load ptr, ptr %5, align 8, !tbaa !5
  %1890 = load ptr, ptr %5, align 8, !tbaa !5
  %1891 = getelementptr inbounds %struct.MDBX_env, ptr %1890, i32 0, i32 3
  %1892 = getelementptr inbounds %struct.osal_mmap, ptr %1891, i32 0, i32 3
  %1893 = load i64, ptr %1892, align 8, !tbaa !35
  %1894 = call i32 @bytes2pgno(ptr noundef %1889, i64 noundef %1893) #18
  %1895 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1896 = getelementptr inbounds %struct.geo, ptr %1895, i32 0, i32 4
  store i32 %1894, ptr %1896, align 4, !tbaa !30
  br label %1897

1897:                                             ; preds = %1888
  %1898 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1899 = zext i8 %1898 to i32
  %1900 = icmp sle i32 3, %1899
  %1901 = xor i1 %1900, true
  %1902 = xor i1 %1901, true
  %1903 = zext i1 %1902 to i32
  %1904 = sext i32 %1903 to i64
  %1905 = call i64 @llvm.expect.i64(i64 %1904, i64 0)
  %1906 = icmp ne i64 %1905, 0
  br i1 %1906, label %1907, label %1915

1907:                                             ; preds = %1897
  %1908 = load ptr, ptr %5, align 8, !tbaa !5
  %1909 = getelementptr inbounds %struct.MDBX_env, ptr %1908, i32 0, i32 3
  %1910 = getelementptr inbounds %struct.osal_mmap, ptr %1909, i32 0, i32 3
  %1911 = load i64, ptr %1910, align 8, !tbaa !35
  %1912 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1913 = getelementptr inbounds %struct.geo, ptr %1912, i32 0, i32 4
  %1914 = load i32, ptr %1913, align 4, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_setup, i32 noundef 851, ptr noundef @.str.84, i64 noundef %1911, i32 noundef %1914)
  br label %1915

1915:                                             ; preds = %1907, %1897
  br label %1916

1916:                                             ; preds = %1915
  br label %1917

1917:                                             ; preds = %1916
  br label %1918

1918:                                             ; preds = %1917, %1878
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #14
  %1919 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_recent(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %29, ptr noundef %1919, ptr noundef %19)
  %1920 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1921 = getelementptr inbounds %struct.geo, ptr %1920, i32 0, i32 0
  %1922 = load i16, ptr %1921, align 4, !tbaa !42
  %1923 = zext i16 %1922 to i32
  %1924 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %1925 = load ptr, ptr %1924, align 8, !tbaa !30
  %1926 = getelementptr inbounds %struct.meta, ptr %1925, i32 0, i32 5
  %1927 = getelementptr inbounds %struct.geo, ptr %1926, i32 0, i32 0
  %1928 = load i16, ptr %1927, align 4, !tbaa !42
  %1929 = zext i16 %1928 to i32
  %1930 = icmp ne i32 %1923, %1929
  br i1 %1930, label %1973, label %1931

1931:                                             ; preds = %1918
  %1932 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1933 = getelementptr inbounds %struct.geo, ptr %1932, i32 0, i32 1
  %1934 = load i16, ptr %1933, align 2, !tbaa !43
  %1935 = zext i16 %1934 to i32
  %1936 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %1937 = load ptr, ptr %1936, align 8, !tbaa !30
  %1938 = getelementptr inbounds %struct.meta, ptr %1937, i32 0, i32 5
  %1939 = getelementptr inbounds %struct.geo, ptr %1938, i32 0, i32 1
  %1940 = load i16, ptr %1939, align 2, !tbaa !43
  %1941 = zext i16 %1940 to i32
  %1942 = icmp ne i32 %1935, %1941
  br i1 %1942, label %1973, label %1943

1943:                                             ; preds = %1931
  %1944 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1945 = getelementptr inbounds %struct.geo, ptr %1944, i32 0, i32 2
  %1946 = load i32, ptr %1945, align 4, !tbaa !37
  %1947 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %1948 = load ptr, ptr %1947, align 8, !tbaa !30
  %1949 = getelementptr inbounds %struct.meta, ptr %1948, i32 0, i32 5
  %1950 = getelementptr inbounds %struct.geo, ptr %1949, i32 0, i32 2
  %1951 = load i32, ptr %1950, align 4, !tbaa !37
  %1952 = icmp ne i32 %1946, %1951
  br i1 %1952, label %1973, label %1953

1953:                                             ; preds = %1943
  %1954 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1955 = getelementptr inbounds %struct.geo, ptr %1954, i32 0, i32 3
  %1956 = load i32, ptr %1955, align 4, !tbaa !41
  %1957 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %1958 = load ptr, ptr %1957, align 8, !tbaa !30
  %1959 = getelementptr inbounds %struct.meta, ptr %1958, i32 0, i32 5
  %1960 = getelementptr inbounds %struct.geo, ptr %1959, i32 0, i32 3
  %1961 = load i32, ptr %1960, align 4, !tbaa !41
  %1962 = icmp ne i32 %1956, %1961
  br i1 %1962, label %1973, label %1963

1963:                                             ; preds = %1953
  %1964 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %1965 = getelementptr inbounds %struct.geo, ptr %1964, i32 0, i32 4
  %1966 = load i32, ptr %1965, align 4, !tbaa !30
  %1967 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %1968 = load ptr, ptr %1967, align 8, !tbaa !30
  %1969 = getelementptr inbounds %struct.meta, ptr %1968, i32 0, i32 5
  %1970 = getelementptr inbounds %struct.geo, ptr %1969, i32 0, i32 4
  %1971 = load i32, ptr %1970, align 4, !tbaa !30
  %1972 = icmp ne i32 %1966, %1971
  br i1 %1972, label %1973, label %2238

1973:                                             ; preds = %1963, %1953, %1943, %1931, %1918
  %1974 = load ptr, ptr %5, align 8, !tbaa !5
  %1975 = getelementptr inbounds %struct.MDBX_env, ptr %1974, i32 0, i32 1
  %1976 = load i32, ptr %1975, align 4, !tbaa !15
  %1977 = and i32 %1976, 131072
  %1978 = icmp ne i32 %1977, 0
  br i1 %1978, label %1985, label %1979

1979:                                             ; preds = %1973
  %1980 = load ptr, ptr %5, align 8, !tbaa !5
  %1981 = getelementptr inbounds %struct.MDBX_env, ptr %1980, i32 0, i32 16
  %1982 = load i8, ptr %1981, align 1, !tbaa !25
  %1983 = sext i8 %1982 to i32
  %1984 = icmp sge i32 %1983, 0
  br i1 %1984, label %1985, label %2051

1985:                                             ; preds = %1979, %1973
  br label %1986

1986:                                             ; preds = %1985
  %1987 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1988 = zext i8 %1987 to i32
  %1989 = icmp sle i32 2, %1988
  %1990 = xor i1 %1989, true
  %1991 = xor i1 %1990, true
  %1992 = zext i1 %1991 to i32
  %1993 = sext i32 %1992 to i64
  %1994 = call i64 @llvm.expect.i64(i64 %1993, i64 0)
  %1995 = icmp ne i64 %1994, 0
  br i1 %1995, label %1996, label %2048

1996:                                             ; preds = %1986
  %1997 = load ptr, ptr %5, align 8, !tbaa !5
  %1998 = getelementptr inbounds %struct.MDBX_env, ptr %1997, i32 0, i32 16
  %1999 = load i8, ptr %1998, align 1, !tbaa !25
  %2000 = sext i8 %1999 to i32
  %2001 = icmp slt i32 %2000, 0
  %2002 = zext i1 %2001 to i64
  %2003 = select i1 %2001, ptr @.str.86, ptr @.str.87
  %2004 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2005 = load ptr, ptr %2004, align 8, !tbaa !30
  %2006 = getelementptr inbounds %struct.meta, ptr %2005, i32 0, i32 5
  %2007 = getelementptr inbounds %struct.geo, ptr %2006, i32 0, i32 2
  %2008 = load i32, ptr %2007, align 4, !tbaa !37
  %2009 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2010 = load ptr, ptr %2009, align 8, !tbaa !30
  %2011 = getelementptr inbounds %struct.meta, ptr %2010, i32 0, i32 5
  %2012 = getelementptr inbounds %struct.geo, ptr %2011, i32 0, i32 4
  %2013 = load i32, ptr %2012, align 4, !tbaa !30
  %2014 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2015 = load ptr, ptr %2014, align 8, !tbaa !30
  %2016 = getelementptr inbounds %struct.meta, ptr %2015, i32 0, i32 5
  %2017 = getelementptr inbounds %struct.geo, ptr %2016, i32 0, i32 3
  %2018 = load i32, ptr %2017, align 4, !tbaa !41
  %2019 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2020 = load ptr, ptr %2019, align 8, !tbaa !30
  %2021 = getelementptr inbounds %struct.meta, ptr %2020, i32 0, i32 5
  %2022 = getelementptr inbounds %struct.geo, ptr %2021, i32 0, i32 1
  %2023 = load i16, ptr %2022, align 2, !tbaa !43
  %2024 = call i32 @pv2pages(i16 noundef zeroext %2023) #17
  %2025 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2026 = load ptr, ptr %2025, align 8, !tbaa !30
  %2027 = getelementptr inbounds %struct.meta, ptr %2026, i32 0, i32 5
  %2028 = getelementptr inbounds %struct.geo, ptr %2027, i32 0, i32 0
  %2029 = load i16, ptr %2028, align 4, !tbaa !42
  %2030 = call i32 @pv2pages(i16 noundef zeroext %2029) #17
  %2031 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2032 = getelementptr inbounds %struct.geo, ptr %2031, i32 0, i32 2
  %2033 = load i32, ptr %2032, align 4, !tbaa !37
  %2034 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2035 = getelementptr inbounds %struct.geo, ptr %2034, i32 0, i32 4
  %2036 = load i32, ptr %2035, align 4, !tbaa !30
  %2037 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2038 = getelementptr inbounds %struct.geo, ptr %2037, i32 0, i32 3
  %2039 = load i32, ptr %2038, align 4, !tbaa !41
  %2040 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2041 = getelementptr inbounds %struct.geo, ptr %2040, i32 0, i32 1
  %2042 = load i16, ptr %2041, align 2, !tbaa !43
  %2043 = call i32 @pv2pages(i16 noundef zeroext %2042) #17
  %2044 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2045 = getelementptr inbounds %struct.geo, ptr %2044, i32 0, i32 0
  %2046 = load i16, ptr %2045, align 4, !tbaa !42
  %2047 = call i32 @pv2pages(i16 noundef zeroext %2046) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.dxb_setup, i32 noundef 867, ptr noundef @.str.85, ptr noundef %2003, i32 noundef %2008, i32 noundef %2013, i32 noundef %2018, i32 noundef %2024, i32 noundef %2030, i32 noundef %2033, i32 noundef %2036, i32 noundef %2039, i32 noundef %2043, i32 noundef %2047)
  br label %2048

2048:                                             ; preds = %1996, %1986
  br label %2049

2049:                                             ; preds = %2048
  br label %2050

2050:                                             ; preds = %2049
  br label %2237

2051:                                             ; preds = %1979
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #14
  %2052 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 0
  %2053 = load i64, ptr %2052, align 8, !tbaa !71
  %2054 = call i64 @safe64_txnid_next(i64 noundef %2053)
  store i64 %2054, ptr %30, align 8, !tbaa !32
  %2055 = load i64, ptr %30, align 8, !tbaa !32
  %2056 = icmp ugt i64 %2055, -4294967297
  %2057 = xor i1 %2056, true
  %2058 = xor i1 %2057, true
  %2059 = zext i1 %2058 to i32
  %2060 = sext i32 %2059 to i64
  %2061 = call i64 @llvm.expect.i64(i64 %2060, i64 0)
  %2062 = icmp ne i64 %2061, 0
  br i1 %2062, label %2063, label %2078

2063:                                             ; preds = %2051
  br label %2064

2064:                                             ; preds = %2063
  %2065 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2066 = zext i8 %2065 to i32
  %2067 = icmp sle i32 1, %2066
  %2068 = xor i1 %2067, true
  %2069 = xor i1 %2068, true
  %2070 = zext i1 %2069 to i32
  %2071 = sext i32 %2070 to i64
  %2072 = call i64 @llvm.expect.i64(i64 %2071, i64 0)
  %2073 = icmp ne i64 %2072, 0
  br i1 %2073, label %2074, label %2075

2074:                                             ; preds = %2064
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 871, ptr noundef @.str.88, i32 noundef -30788)
  br label %2075

2075:                                             ; preds = %2074, %2064
  br label %2076

2076:                                             ; preds = %2075
  br label %2077

2077:                                             ; preds = %2076
  store i32 -30788, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2234

2078:                                             ; preds = %2051
  br label %2079

2079:                                             ; preds = %2078
  %2080 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2081 = zext i8 %2080 to i32
  %2082 = icmp sle i32 3, %2081
  %2083 = xor i1 %2082, true
  %2084 = xor i1 %2083, true
  %2085 = zext i1 %2084 to i32
  %2086 = sext i32 %2085 to i64
  %2087 = call i64 @llvm.expect.i64(i64 %2086, i64 0)
  %2088 = icmp ne i64 %2087, 0
  br i1 %2088, label %2089, label %2137

2089:                                             ; preds = %2079
  %2090 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2091 = load ptr, ptr %2090, align 8, !tbaa !30
  %2092 = getelementptr inbounds %struct.meta, ptr %2091, i32 0, i32 5
  %2093 = getelementptr inbounds %struct.geo, ptr %2092, i32 0, i32 2
  %2094 = load i32, ptr %2093, align 4, !tbaa !37
  %2095 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2096 = load ptr, ptr %2095, align 8, !tbaa !30
  %2097 = getelementptr inbounds %struct.meta, ptr %2096, i32 0, i32 5
  %2098 = getelementptr inbounds %struct.geo, ptr %2097, i32 0, i32 4
  %2099 = load i32, ptr %2098, align 4, !tbaa !30
  %2100 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2101 = load ptr, ptr %2100, align 8, !tbaa !30
  %2102 = getelementptr inbounds %struct.meta, ptr %2101, i32 0, i32 5
  %2103 = getelementptr inbounds %struct.geo, ptr %2102, i32 0, i32 3
  %2104 = load i32, ptr %2103, align 4, !tbaa !41
  %2105 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2106 = load ptr, ptr %2105, align 8, !tbaa !30
  %2107 = getelementptr inbounds %struct.meta, ptr %2106, i32 0, i32 5
  %2108 = getelementptr inbounds %struct.geo, ptr %2107, i32 0, i32 1
  %2109 = load i16, ptr %2108, align 2, !tbaa !43
  %2110 = call i32 @pv2pages(i16 noundef zeroext %2109) #17
  %2111 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2112 = load ptr, ptr %2111, align 8, !tbaa !30
  %2113 = getelementptr inbounds %struct.meta, ptr %2112, i32 0, i32 5
  %2114 = getelementptr inbounds %struct.geo, ptr %2113, i32 0, i32 0
  %2115 = load i16, ptr %2114, align 4, !tbaa !42
  %2116 = call i32 @pv2pages(i16 noundef zeroext %2115) #17
  %2117 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 0
  %2118 = load i64, ptr %2117, align 8, !tbaa !71
  %2119 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2120 = getelementptr inbounds %struct.geo, ptr %2119, i32 0, i32 2
  %2121 = load i32, ptr %2120, align 4, !tbaa !37
  %2122 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2123 = getelementptr inbounds %struct.geo, ptr %2122, i32 0, i32 4
  %2124 = load i32, ptr %2123, align 4, !tbaa !30
  %2125 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2126 = getelementptr inbounds %struct.geo, ptr %2125, i32 0, i32 3
  %2127 = load i32, ptr %2126, align 4, !tbaa !41
  %2128 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2129 = getelementptr inbounds %struct.geo, ptr %2128, i32 0, i32 1
  %2130 = load i16, ptr %2129, align 2, !tbaa !43
  %2131 = call i32 @pv2pages(i16 noundef zeroext %2130) #17
  %2132 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2133 = getelementptr inbounds %struct.geo, ptr %2132, i32 0, i32 0
  %2134 = load i16, ptr %2133, align 4, !tbaa !42
  %2135 = call i32 @pv2pages(i16 noundef zeroext %2134) #17
  %2136 = load i64, ptr %30, align 8, !tbaa !32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_setup, i32 noundef 880, ptr noundef @.str.89, i32 noundef %2094, i32 noundef %2099, i32 noundef %2104, i32 noundef %2110, i32 noundef %2116, i64 noundef %2118, i32 noundef %2121, i32 noundef %2124, i32 noundef %2127, i32 noundef %2131, i32 noundef %2135, i64 noundef %2136)
  br label %2137

2137:                                             ; preds = %2089, %2079
  br label %2138

2138:                                             ; preds = %2137
  br label %2139

2139:                                             ; preds = %2138
  br label %2140

2140:                                             ; preds = %2139
  %2141 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 1
  %2142 = load i64, ptr %2141, align 4, !tbaa !30
  %2143 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 0
  %2144 = load i64, ptr %2143, align 8, !tbaa !71
  %2145 = icmp eq i64 %2142, %2144
  %2146 = xor i1 %2145, true
  %2147 = xor i1 %2146, true
  %2148 = xor i1 %2147, true
  %2149 = zext i1 %2148 to i32
  %2150 = sext i32 %2149 to i64
  %2151 = call i64 @llvm.expect.i64(i64 %2150, i64 0)
  %2152 = icmp ne i64 %2151, 0
  br i1 %2152, label %2153, label %2155

2153:                                             ; preds = %2140
  %2154 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2154, ptr noundef @.str.90, ptr noundef @__func__.dxb_setup, i32 noundef 882) #15
  unreachable

2155:                                             ; preds = %2140
  br label %2156

2156:                                             ; preds = %2155
  br label %2157

2157:                                             ; preds = %2156
  %2158 = load ptr, ptr %5, align 8, !tbaa !5
  %2159 = load i64, ptr %30, align 8, !tbaa !32
  call void @meta_set_txnid(ptr noundef %2158, ptr noundef %8, i64 noundef %2159)
  %2160 = load ptr, ptr %5, align 8, !tbaa !5
  %2161 = load ptr, ptr %5, align 8, !tbaa !5
  %2162 = getelementptr inbounds %struct.MDBX_env, ptr %2161, i32 0, i32 1
  %2163 = load i32, ptr %2162, align 4, !tbaa !15
  %2164 = or i32 %2163, 1073741824
  %2165 = call i32 @dxb_sync_locked(ptr noundef %2160, i32 noundef %2164, ptr noundef %8, ptr noundef %19)
  store i32 %2165, ptr %10, align 4, !tbaa !9
  %2166 = load i32, ptr %10, align 4, !tbaa !9
  %2167 = icmp ne i32 %2166, 0
  br i1 %2167, label %2168, label %2233

2168:                                             ; preds = %2157
  br label %2169

2169:                                             ; preds = %2168
  %2170 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2171 = zext i8 %2170 to i32
  %2172 = icmp sle i32 1, %2171
  %2173 = xor i1 %2172, true
  %2174 = xor i1 %2173, true
  %2175 = zext i1 %2174 to i32
  %2176 = sext i32 %2175 to i64
  %2177 = call i64 @llvm.expect.i64(i64 %2176, i64 0)
  %2178 = icmp ne i64 %2177, 0
  br i1 %2178, label %2179, label %2229

2179:                                             ; preds = %2169
  %2180 = load i32, ptr %10, align 4, !tbaa !9
  %2181 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2182 = load ptr, ptr %2181, align 8, !tbaa !30
  %2183 = getelementptr inbounds %struct.meta, ptr %2182, i32 0, i32 5
  %2184 = getelementptr inbounds %struct.geo, ptr %2183, i32 0, i32 2
  %2185 = load i32, ptr %2184, align 4, !tbaa !37
  %2186 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2187 = load ptr, ptr %2186, align 8, !tbaa !30
  %2188 = getelementptr inbounds %struct.meta, ptr %2187, i32 0, i32 5
  %2189 = getelementptr inbounds %struct.geo, ptr %2188, i32 0, i32 4
  %2190 = load i32, ptr %2189, align 4, !tbaa !30
  %2191 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2192 = load ptr, ptr %2191, align 8, !tbaa !30
  %2193 = getelementptr inbounds %struct.meta, ptr %2192, i32 0, i32 5
  %2194 = getelementptr inbounds %struct.geo, ptr %2193, i32 0, i32 3
  %2195 = load i32, ptr %2194, align 4, !tbaa !41
  %2196 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2197 = load ptr, ptr %2196, align 8, !tbaa !30
  %2198 = getelementptr inbounds %struct.meta, ptr %2197, i32 0, i32 5
  %2199 = getelementptr inbounds %struct.geo, ptr %2198, i32 0, i32 1
  %2200 = load i16, ptr %2199, align 2, !tbaa !43
  %2201 = call i32 @pv2pages(i16 noundef zeroext %2200) #17
  %2202 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 1
  %2203 = load ptr, ptr %2202, align 8, !tbaa !30
  %2204 = getelementptr inbounds %struct.meta, ptr %2203, i32 0, i32 5
  %2205 = getelementptr inbounds %struct.geo, ptr %2204, i32 0, i32 0
  %2206 = load i16, ptr %2205, align 4, !tbaa !42
  %2207 = call i32 @pv2pages(i16 noundef zeroext %2206) #17
  %2208 = getelementptr inbounds %struct.meta_ptr, ptr %29, i32 0, i32 0
  %2209 = load i64, ptr %2208, align 8, !tbaa !71
  %2210 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2211 = getelementptr inbounds %struct.geo, ptr %2210, i32 0, i32 2
  %2212 = load i32, ptr %2211, align 4, !tbaa !37
  %2213 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2214 = getelementptr inbounds %struct.geo, ptr %2213, i32 0, i32 4
  %2215 = load i32, ptr %2214, align 4, !tbaa !30
  %2216 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2217 = getelementptr inbounds %struct.geo, ptr %2216, i32 0, i32 3
  %2218 = load i32, ptr %2217, align 4, !tbaa !41
  %2219 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2220 = getelementptr inbounds %struct.geo, ptr %2219, i32 0, i32 1
  %2221 = load i16, ptr %2220, align 2, !tbaa !43
  %2222 = call i32 @pv2pages(i16 noundef zeroext %2221) #17
  %2223 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 5
  %2224 = getelementptr inbounds %struct.geo, ptr %2223, i32 0, i32 0
  %2225 = load i16, ptr %2224, align 4, !tbaa !42
  %2226 = call i32 @pv2pages(i16 noundef zeroext %2225) #17
  %2227 = getelementptr inbounds %struct.meta, ptr %8, i32 0, i32 1
  %2228 = load i64, ptr %2227, align 4, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 892, ptr noundef @.str.91, i32 noundef %2180, i32 noundef %2185, i32 noundef %2190, i32 noundef %2195, i32 noundef %2201, i32 noundef %2207, i64 noundef %2209, i32 noundef %2212, i32 noundef %2215, i32 noundef %2218, i32 noundef %2222, i32 noundef %2226, i64 noundef %2228)
  br label %2229

2229:                                             ; preds = %2179, %2169
  br label %2230

2230:                                             ; preds = %2229
  br label %2231

2231:                                             ; preds = %2230
  %2232 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %2232, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2234

2233:                                             ; preds = %2157
  store i32 0, ptr %11, align 4
  br label %2234

2234:                                             ; preds = %2233, %2231, %2077
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #14
  %2235 = load i32, ptr %11, align 4
  switch i32 %2235, label %2384 [
    i32 0, label %2236
  ]

2236:                                             ; preds = %2234
  br label %2237

2237:                                             ; preds = %2236, %2050
  br label %2238

2238:                                             ; preds = %2237, %1963
  %2239 = load ptr, ptr %5, align 8, !tbaa !5
  %2240 = getelementptr inbounds %struct.MDBX_env, ptr %2239, i32 0, i32 7
  %2241 = load ptr, ptr %2240, align 8, !tbaa !74
  %2242 = getelementptr inbounds %struct.shared_lck, ptr %2241, i32 0, i32 16
  %2243 = load ptr, ptr %5, align 8, !tbaa !5
  %2244 = load i64, ptr %14, align 8, !tbaa !32
  %2245 = call i32 @bytes2pgno(ptr noundef %2243, i64 noundef %2244) #18
  %2246 = call i32 @atomic_store32(ptr noundef %2242, i32 noundef %2245, i32 noundef 0)
  %2247 = load ptr, ptr %5, align 8, !tbaa !5
  %2248 = getelementptr inbounds %struct.MDBX_env, ptr %2247, i32 0, i32 1
  %2249 = load i32, ptr %2248, align 4, !tbaa !15
  %2250 = and i32 %2249, 131072
  %2251 = icmp eq i32 %2250, 0
  br i1 %2251, label %2252, label %2383

2252:                                             ; preds = %2238
  %2253 = load ptr, ptr %5, align 8, !tbaa !5
  %2254 = getelementptr inbounds %struct.MDBX_env, ptr %2253, i32 0, i32 16
  %2255 = load i8, ptr %2254, align 1, !tbaa !25
  %2256 = sext i8 %2255 to i32
  %2257 = icmp slt i32 %2256, 0
  br i1 %2257, label %2258, label %2383

2258:                                             ; preds = %2252
  %2259 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %2260 = zext i8 %2259 to i32
  %2261 = and i32 %2260, 64
  %2262 = icmp eq i32 %2261, 0
  br i1 %2262, label %2263, label %2383

2263:                                             ; preds = %2258
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #14
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %2264

2264:                                             ; preds = %2377, %2263
  %2265 = load i32, ptr %31, align 4, !tbaa !9
  %2266 = icmp ult i32 %2265, 3
  br i1 %2266, label %2268, label %2267

2267:                                             ; preds = %2264
  store i32 99, ptr %11, align 4
  br label %2380

2268:                                             ; preds = %2264
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #14
  %2269 = load ptr, ptr %5, align 8, !tbaa !5
  %2270 = load i32, ptr %31, align 4, !tbaa !9
  %2271 = zext i32 %2270 to i64
  %2272 = call ptr @pgno2page(ptr noundef %2269, i64 noundef %2271) #18
  %2273 = call ptr @page_meta(ptr noundef %2272) #18
  store ptr %2273, ptr %32, align 8, !tbaa !5
  %2274 = load ptr, ptr %32, align 8, !tbaa !5
  %2275 = getelementptr inbounds %struct.meta, ptr %2274, i32 0, i32 0
  %2276 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %2275) #18
  %2277 = icmp ne i64 %2276, 6441728281112482051
  %2278 = xor i1 %2277, true
  %2279 = xor i1 %2278, true
  %2280 = zext i1 %2279 to i32
  %2281 = sext i32 %2280 to i64
  %2282 = call i64 @llvm.expect.i64(i64 %2281, i64 0)
  %2283 = icmp ne i64 %2282, 0
  br i1 %2283, label %2303, label %2284

2284:                                             ; preds = %2268
  %2285 = load ptr, ptr %32, align 8, !tbaa !5
  %2286 = getelementptr inbounds %struct.meta, ptr %2285, i32 0, i32 12
  %2287 = getelementptr inbounds %struct.anon.5, ptr %2286, i32 0, i32 0
  %2288 = load i64, ptr %2287, align 4, !tbaa !30
  %2289 = load ptr, ptr %32, align 8, !tbaa !5
  %2290 = getelementptr inbounds %struct.meta, ptr %2289, i32 0, i32 12
  %2291 = getelementptr inbounds %struct.anon.5, ptr %2290, i32 0, i32 1
  %2292 = load i64, ptr %2291, align 4, !tbaa !30
  %2293 = or i64 %2288, %2292
  %2294 = icmp eq i64 %2293, 0
  br i1 %2294, label %2303, label %2295

2295:                                             ; preds = %2284
  %2296 = load ptr, ptr %32, align 8, !tbaa !5
  %2297 = getelementptr inbounds %struct.meta, ptr %2296, i32 0, i32 6
  %2298 = getelementptr inbounds %struct.anon.3, ptr %2297, i32 0, i32 0
  %2299 = load i16, ptr %2298, align 4, !tbaa !30
  %2300 = zext i16 %2299 to i32
  %2301 = and i32 %2300, -127
  %2302 = icmp ne i32 %2301, 0
  br i1 %2302, label %2303, label %2373

2303:                                             ; preds = %2295, %2284, %2268
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #14
  %2304 = load i32, ptr %31, align 4, !tbaa !9
  %2305 = call zeroext i1 @meta_is_used(ptr noundef %19, i32 noundef %2304)
  br i1 %2305, label %2306, label %2309

2306:                                             ; preds = %2303
  %2307 = load ptr, ptr %32, align 8, !tbaa !5
  %2308 = call i64 @constmeta_txnid(ptr noundef %2307) #18
  br label %2310

2309:                                             ; preds = %2303
  br label %2310

2310:                                             ; preds = %2309, %2306
  %2311 = phi i64 [ %2308, %2306 ], [ 0, %2309 ]
  store i64 %2311, ptr %33, align 8, !tbaa !32
  br label %2312

2312:                                             ; preds = %2310
  %2313 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2314 = zext i8 %2313 to i32
  %2315 = icmp sle i32 3, %2314
  %2316 = xor i1 %2315, true
  %2317 = xor i1 %2316, true
  %2318 = zext i1 %2317 to i32
  %2319 = sext i32 %2318 to i64
  %2320 = call i64 @llvm.expect.i64(i64 %2319, i64 0)
  %2321 = icmp ne i64 %2320, 0
  br i1 %2321, label %2322, label %2329

2322:                                             ; preds = %2312
  %2323 = load ptr, ptr %32, align 8, !tbaa !5
  %2324 = call zeroext i1 @meta_is_steady(ptr noundef %2323)
  %2325 = zext i1 %2324 to i64
  %2326 = select i1 %2324, ptr @.str.94, ptr @.str.95
  %2327 = load i32, ptr %31, align 4, !tbaa !9
  %2328 = load i64, ptr %33, align 8, !tbaa !32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_setup, i32 noundef 909, ptr noundef @.str.92, ptr noundef @.str.93, ptr noundef %2326, i32 noundef %2327, i64 noundef %2328)
  br label %2329

2329:                                             ; preds = %2322, %2312
  br label %2330

2330:                                             ; preds = %2329
  br label %2331

2331:                                             ; preds = %2330
  %2332 = load ptr, ptr %5, align 8, !tbaa !5
  %2333 = load i32, ptr %31, align 4, !tbaa !9
  %2334 = zext i32 %2333 to i64
  %2335 = load i64, ptr %33, align 8, !tbaa !32
  %2336 = load ptr, ptr %32, align 8, !tbaa !5
  %2337 = call i32 @meta_override(ptr noundef %2332, i64 noundef %2334, i64 noundef %2335, ptr noundef %2336)
  store i32 %2337, ptr %10, align 4, !tbaa !9
  %2338 = load i32, ptr %10, align 4, !tbaa !9
  %2339 = icmp ne i32 %2338, 0
  %2340 = xor i1 %2339, true
  %2341 = xor i1 %2340, true
  %2342 = zext i1 %2341 to i32
  %2343 = sext i32 %2342 to i64
  %2344 = call i64 @llvm.expect.i64(i64 %2343, i64 0)
  %2345 = icmp ne i64 %2344, 0
  br i1 %2345, label %2346, label %2368

2346:                                             ; preds = %2331
  %2347 = load i32, ptr %10, align 4, !tbaa !9
  %2348 = icmp ne i32 %2347, -30779
  br i1 %2348, label %2349, label %2368

2349:                                             ; preds = %2346
  br label %2350

2350:                                             ; preds = %2349
  %2351 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2352 = zext i8 %2351 to i32
  %2353 = icmp sle i32 1, %2352
  %2354 = xor i1 %2353, true
  %2355 = xor i1 %2354, true
  %2356 = zext i1 %2355 to i32
  %2357 = sext i32 %2356 to i64
  %2358 = call i64 @llvm.expect.i64(i64 %2357, i64 0)
  %2359 = icmp ne i64 %2358, 0
  br i1 %2359, label %2360, label %2364

2360:                                             ; preds = %2350
  %2361 = load i32, ptr %31, align 4, !tbaa !9
  %2362 = load i64, ptr %33, align 8, !tbaa !32
  %2363 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_setup, i32 noundef 917, ptr noundef @.str.96, ptr noundef @.str.97, i32 noundef %2361, i64 noundef %2362, i32 noundef %2363)
  br label %2364

2364:                                             ; preds = %2360, %2350
  br label %2365

2365:                                             ; preds = %2364
  br label %2366

2366:                                             ; preds = %2365
  %2367 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %2367, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2370

2368:                                             ; preds = %2346, %2331
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #14
  %2369 = load ptr, ptr %5, align 8, !tbaa !5
  call void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8 %34, ptr noundef %2369)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %19, ptr align 8 %34, i64 32, i1 false), !tbaa.struct !75
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #14
  store i32 0, ptr %11, align 4
  br label %2370

2370:                                             ; preds = %2368, %2366
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #14
  %2371 = load i32, ptr %11, align 4
  switch i32 %2371, label %2374 [
    i32 0, label %2372
  ]

2372:                                             ; preds = %2370
  br label %2373

2373:                                             ; preds = %2372, %2295
  store i32 0, ptr %11, align 4
  br label %2374

2374:                                             ; preds = %2373, %2370
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #14
  %2375 = load i32, ptr %11, align 4
  switch i32 %2375, label %2380 [
    i32 0, label %2376
  ]

2376:                                             ; preds = %2374
  br label %2377

2377:                                             ; preds = %2376
  %2378 = load i32, ptr %31, align 4, !tbaa !9
  %2379 = add i32 %2378, 1
  store i32 %2379, ptr %31, align 4, !tbaa !9
  br label %2264, !llvm.loop !76

2380:                                             ; preds = %2374, %2267
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #14
  %2381 = load i32, ptr %11, align 4
  switch i32 %2381, label %2384 [
    i32 99, label %2382
  ]

2382:                                             ; preds = %2380
  br label %2383

2383:                                             ; preds = %2382, %2258, %2252, %2238
  store i32 0, ptr %11, align 4
  br label %2384

2384:                                             ; preds = %2383, %2380, %2234
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #14
  %2385 = load i32, ptr %11, align 4
  switch i32 %2385, label %2559 [
    i32 0, label %2386
  ]

2386:                                             ; preds = %2384
  br label %2387

2387:                                             ; preds = %2386, %1839
  %2388 = load i64, ptr %14, align 8, !tbaa !32
  %2389 = load ptr, ptr %5, align 8, !tbaa !5
  %2390 = getelementptr inbounds %struct.MDBX_env, ptr %2389, i32 0, i32 3
  %2391 = getelementptr inbounds %struct.osal_mmap, ptr %2390, i32 0, i32 3
  %2392 = load i64, ptr %2391, align 8, !tbaa !35
  %2393 = icmp ult i64 %2388, %2392
  br i1 %2393, label %2394, label %2539

2394:                                             ; preds = %2387
  %2395 = load i32, ptr %6, align 4, !tbaa !9
  %2396 = icmp ne i32 %2395, 0
  br i1 %2396, label %2397, label %2474

2397:                                             ; preds = %2394
  %2398 = load ptr, ptr %5, align 8, !tbaa !5
  %2399 = getelementptr inbounds %struct.MDBX_env, ptr %2398, i32 0, i32 1
  %2400 = load i32, ptr %2399, align 4, !tbaa !15
  %2401 = and i32 %2400, 524288
  %2402 = icmp ne i32 %2401, 0
  br i1 %2402, label %2403, label %2474

2403:                                             ; preds = %2397
  %2404 = load ptr, ptr %5, align 8, !tbaa !5
  %2405 = getelementptr inbounds %struct.MDBX_env, ptr %2404, i32 0, i32 16
  %2406 = load i8, ptr %2405, align 1, !tbaa !25
  %2407 = sext i8 %2406 to i32
  %2408 = icmp slt i32 %2407, 0
  br i1 %2408, label %2409, label %2474

2409:                                             ; preds = %2403
  br label %2410

2410:                                             ; preds = %2409
  %2411 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2412 = zext i8 %2411 to i32
  %2413 = icmp sle i32 3, %2412
  %2414 = xor i1 %2413, true
  %2415 = xor i1 %2414, true
  %2416 = zext i1 %2415 to i32
  %2417 = sext i32 %2416 to i64
  %2418 = call i64 @llvm.expect.i64(i64 %2417, i64 0)
  %2419 = icmp ne i64 %2418, 0
  br i1 %2419, label %2420, label %2432

2420:                                             ; preds = %2410
  %2421 = load ptr, ptr %5, align 8, !tbaa !5
  %2422 = getelementptr inbounds %struct.MDBX_env, ptr %2421, i32 0, i32 7
  %2423 = load ptr, ptr %2422, align 8, !tbaa !74
  %2424 = getelementptr inbounds %struct.shared_lck, ptr %2423, i32 0, i32 16
  %2425 = load volatile i32, ptr %2424, align 8, !tbaa !30
  %2426 = load ptr, ptr %5, align 8, !tbaa !5
  %2427 = load ptr, ptr %5, align 8, !tbaa !5
  %2428 = getelementptr inbounds %struct.MDBX_env, ptr %2427, i32 0, i32 3
  %2429 = getelementptr inbounds %struct.osal_mmap, ptr %2428, i32 0, i32 3
  %2430 = load i64, ptr %2429, align 8, !tbaa !35
  %2431 = call i32 @bytes2pgno(ptr noundef %2426, i64 noundef %2430) #18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_setup, i32 noundef 932, ptr noundef @.str.98, ptr noundef @.str.99, i32 noundef %2425, i32 noundef %2431)
  br label %2432

2432:                                             ; preds = %2420, %2410
  br label %2433

2433:                                             ; preds = %2432
  br label %2434

2434:                                             ; preds = %2433
  %2435 = load ptr, ptr %5, align 8, !tbaa !5
  %2436 = getelementptr inbounds %struct.MDBX_env, ptr %2435, i32 0, i32 3
  %2437 = getelementptr inbounds %struct.osal_mmap, ptr %2436, i32 0, i32 0
  %2438 = load ptr, ptr %2437, align 8, !tbaa !30
  %2439 = ptrtoint ptr %2438 to i64
  %2440 = load i64, ptr %14, align 8, !tbaa !32
  %2441 = add nsw i64 %2439, %2440
  %2442 = inttoptr i64 %2441 to ptr
  %2443 = load ptr, ptr %5, align 8, !tbaa !5
  %2444 = getelementptr inbounds %struct.MDBX_env, ptr %2443, i32 0, i32 3
  %2445 = getelementptr inbounds %struct.osal_mmap, ptr %2444, i32 0, i32 3
  %2446 = load i64, ptr %2445, align 8, !tbaa !35
  %2447 = load i64, ptr %14, align 8, !tbaa !32
  %2448 = sub i64 %2446, %2447
  %2449 = call i32 @madvise(ptr noundef %2442, i64 noundef %2448, i32 noundef 9) #14
  %2450 = icmp ne i32 %2449, 0
  br i1 %2450, label %2451, label %2455

2451:                                             ; preds = %2434
  %2452 = call ptr @__errno_location() #17
  %2453 = load i32, ptr %2452, align 4, !tbaa !9
  %2454 = call i32 @ignore_enosys(i32 noundef %2453)
  br label %2456

2455:                                             ; preds = %2434
  br label %2456

2456:                                             ; preds = %2455, %2451
  %2457 = phi i32 [ %2454, %2451 ], [ 0, %2455 ]
  store i32 %2457, ptr %10, align 4, !tbaa !9
  %2458 = load i32, ptr %10, align 4, !tbaa !9
  %2459 = icmp ne i32 %2458, -1
  br i1 %2459, label %2460, label %2463

2460:                                             ; preds = %2456
  %2461 = load i32, ptr %10, align 4, !tbaa !9
  %2462 = icmp ne i32 %2461, 0
  br label %2463

2463:                                             ; preds = %2460, %2456
  %2464 = phi i1 [ false, %2456 ], [ %2462, %2460 ]
  %2465 = xor i1 %2464, true
  %2466 = xor i1 %2465, true
  %2467 = zext i1 %2466 to i32
  %2468 = sext i32 %2467 to i64
  %2469 = call i64 @llvm.expect.i64(i64 %2468, i64 0)
  %2470 = icmp ne i64 %2469, 0
  br i1 %2470, label %2471, label %2473

2471:                                             ; preds = %2463
  %2472 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %2472, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2559

2473:                                             ; preds = %2463
  br label %2474

2474:                                             ; preds = %2473, %2403, %2397, %2394
  br label %2475

2475:                                             ; preds = %2474
  %2476 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %2477 = zext i8 %2476 to i32
  %2478 = icmp sle i32 3, %2477
  %2479 = xor i1 %2478, true
  %2480 = xor i1 %2479, true
  %2481 = zext i1 %2480 to i32
  %2482 = sext i32 %2481 to i64
  %2483 = call i64 @llvm.expect.i64(i64 %2482, i64 0)
  %2484 = icmp ne i64 %2483, 0
  br i1 %2484, label %2485, label %2497

2485:                                             ; preds = %2475
  %2486 = load ptr, ptr %5, align 8, !tbaa !5
  %2487 = getelementptr inbounds %struct.MDBX_env, ptr %2486, i32 0, i32 7
  %2488 = load ptr, ptr %2487, align 8, !tbaa !74
  %2489 = getelementptr inbounds %struct.shared_lck, ptr %2488, i32 0, i32 16
  %2490 = load volatile i32, ptr %2489, align 8, !tbaa !30
  %2491 = load ptr, ptr %5, align 8, !tbaa !5
  %2492 = load ptr, ptr %5, align 8, !tbaa !5
  %2493 = getelementptr inbounds %struct.MDBX_env, ptr %2492, i32 0, i32 3
  %2494 = getelementptr inbounds %struct.osal_mmap, ptr %2493, i32 0, i32 3
  %2495 = load i64, ptr %2494, align 8, !tbaa !35
  %2496 = call i32 @bytes2pgno(ptr noundef %2491, i64 noundef %2495) #18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_setup, i32 noundef 942, ptr noundef @.str.98, ptr noundef @.str.17, i32 noundef %2490, i32 noundef %2496)
  br label %2497

2497:                                             ; preds = %2485, %2475
  br label %2498

2498:                                             ; preds = %2497
  br label %2499

2499:                                             ; preds = %2498
  %2500 = load ptr, ptr %5, align 8, !tbaa !5
  %2501 = getelementptr inbounds %struct.MDBX_env, ptr %2500, i32 0, i32 3
  %2502 = getelementptr inbounds %struct.osal_mmap, ptr %2501, i32 0, i32 0
  %2503 = load ptr, ptr %2502, align 8, !tbaa !30
  %2504 = ptrtoint ptr %2503 to i64
  %2505 = load i64, ptr %14, align 8, !tbaa !32
  %2506 = add nsw i64 %2504, %2505
  %2507 = inttoptr i64 %2506 to ptr
  %2508 = load ptr, ptr %5, align 8, !tbaa !5
  %2509 = getelementptr inbounds %struct.MDBX_env, ptr %2508, i32 0, i32 3
  %2510 = getelementptr inbounds %struct.osal_mmap, ptr %2509, i32 0, i32 3
  %2511 = load i64, ptr %2510, align 8, !tbaa !35
  %2512 = load i64, ptr %14, align 8, !tbaa !32
  %2513 = sub i64 %2511, %2512
  %2514 = call i32 @madvise(ptr noundef %2507, i64 noundef %2513, i32 noundef 4) #14
  %2515 = icmp ne i32 %2514, 0
  br i1 %2515, label %2516, label %2520

2516:                                             ; preds = %2499
  %2517 = call ptr @__errno_location() #17
  %2518 = load i32, ptr %2517, align 4, !tbaa !9
  %2519 = call i32 @ignore_enosys(i32 noundef %2518)
  br label %2521

2520:                                             ; preds = %2499
  br label %2521

2521:                                             ; preds = %2520, %2516
  %2522 = phi i32 [ %2519, %2516 ], [ 0, %2520 ]
  store i32 %2522, ptr %10, align 4, !tbaa !9
  %2523 = load i32, ptr %10, align 4, !tbaa !9
  %2524 = icmp ne i32 %2523, -1
  br i1 %2524, label %2525, label %2528

2525:                                             ; preds = %2521
  %2526 = load i32, ptr %10, align 4, !tbaa !9
  %2527 = icmp ne i32 %2526, 0
  br label %2528

2528:                                             ; preds = %2525, %2521
  %2529 = phi i1 [ false, %2521 ], [ %2527, %2525 ]
  %2530 = xor i1 %2529, true
  %2531 = xor i1 %2530, true
  %2532 = zext i1 %2531 to i32
  %2533 = sext i32 %2532 to i64
  %2534 = call i64 @llvm.expect.i64(i64 %2533, i64 0)
  %2535 = icmp ne i64 %2534, 0
  br i1 %2535, label %2536, label %2538

2536:                                             ; preds = %2528
  %2537 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %2537, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2559

2538:                                             ; preds = %2528
  br label %2539

2539:                                             ; preds = %2538, %2387
  %2540 = load ptr, ptr %5, align 8, !tbaa !5
  %2541 = load ptr, ptr %5, align 8, !tbaa !5
  %2542 = load i64, ptr %13, align 8, !tbaa !32
  %2543 = call i32 @bytes2pgno(ptr noundef %2541, i64 noundef %2542) #18
  %2544 = load i8, ptr %17, align 1, !tbaa !63, !range !72, !noundef !73
  %2545 = trunc i8 %2544 to i1
  %2546 = call i32 @dxb_set_readahead(ptr noundef %2540, i32 noundef %2543, i1 noundef zeroext %2545, i1 noundef zeroext true) #16
  store i32 %2546, ptr %10, align 4, !tbaa !9
  %2547 = load i32, ptr %10, align 4, !tbaa !9
  %2548 = icmp ne i32 %2547, 0
  %2549 = xor i1 %2548, true
  %2550 = xor i1 %2549, true
  %2551 = zext i1 %2550 to i32
  %2552 = sext i32 %2551 to i64
  %2553 = call i64 @llvm.expect.i64(i64 %2552, i64 0)
  %2554 = icmp ne i64 %2553, 0
  br i1 %2554, label %2555, label %2557

2555:                                             ; preds = %2539
  %2556 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %2556, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2559

2557:                                             ; preds = %2539
  %2558 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %2558, ptr %4, align 4
  store i32 1, ptr %11, align 4
  br label %2559

2559:                                             ; preds = %2557, %2555, %2536, %2471, %2384, %1877, %1835, %1321
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #14
  br label %2560

2560:                                             ; preds = %2559, %1216, %1176, %1143
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #14
  br label %2561

2561:                                             ; preds = %2560, %1027, %998
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #14
  br label %2562

2562:                                             ; preds = %2561, %660, %483
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #14
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #14
  br label %2563

2563:                                             ; preds = %2562, %380, %298, %216, %201, %175, %146, %132, %99
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #14
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #14
  call void @llvm.lifetime.end.p0(i64 224, ptr %8) #14
  %2564 = load i32, ptr %4, align 4
  ret i32 %2564
}

declare i32 @mdbx_env_set_geometry(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) #3

declare i32 @env_page_auxbuffer(ptr noundef) #3

declare ptr @meta_init_triplet(ptr noundef, ptr noundef) #3

declare i32 @osal_pwrite(i32 noundef, ptr noundef, i64 noundef, i64 noundef) #3

declare i32 @osal_ftruncate(i32 noundef, i64 noundef) #3

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

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

declare ptr @durable_caption(ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @cmp_int_align4(ptr noundef, ptr noundef) #8

; Function Attrs: nounwind willreturn memory(read)
declare i32 @cmp_lenfast(ptr noundef, ptr noundef) #8

; Function Attrs: nounwind willreturn memory(read)
declare i32 @mdbx_env_get_maxvalsize_ex(ptr noundef, i32 noundef) #8

declare i32 @env_setup_pagesize(ptr noundef, i64 noundef) #3

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @bytes_align2os_bytes(ptr noundef, i64 noundef) #8

; Function Attrs: nounwind willreturn memory(none)
declare zeroext i16 @pages2pv(i64 noundef) #10

declare i32 @osal_mmap(i32 noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef) #3

declare void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8, ptr noundef) #3

declare void @meta_troika_dump(ptr noundef, ptr noundef) #3

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

declare i32 @meta_validate_copy(ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare hidden ptr @data_page(ptr noundef) #4

declare i32 @meta_eq_mask(ptr noundef) #3

; 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 i64 @osal_monotime() #3

declare i32 @meta_override(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #3

declare i64 @meta_txnid(ptr noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @safe64_txnid_next(i64 noundef) #12

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

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

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

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

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

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

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

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


; 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.5 }
%struct.anon.5 = 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.meta = type { [2 x i32], %union.anon, i16, i8, i8, %struct.geo, %union.anon.2, %struct.MDBX_canary, %union.anon.4, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon.0, %union.anon.1 }
%union.anon.0 = type { i32 }
%union.anon.1 = type { i32 }
%union.anon.2 = type { %struct.anon }
%struct.anon = 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.4 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.meta_ptr = type { i64, %union.anon.24, i64 }
%union.anon.24 = type { ptr }

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [27 x i8], align 1
@__func__.dxb_setup = external hidden unnamed_addr constant [10 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [83 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [105 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [31 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare i32 @mdbx_is_readahead_reasonable(i64 noundef, i64 noundef) local_unnamed_addr #2

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @dxb_setup(ptr noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = alloca %struct.meta, align 4
  %5 = alloca %struct.troika, align 8
  %6 = alloca %struct.meta, align 4
  %7 = alloca %struct.meta_ptr, align 8
  %8 = alloca %struct.meta_ptr, align 8
  %9 = alloca %struct.meta, align 4
  %10 = alloca %struct.troika, align 8
  %11 = alloca %struct.meta_ptr, align 8
  %12 = alloca %struct.troika, align 8
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %4) #13
  %13 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %14 = and i8 %13, 1
  %.not = icmp eq i8 %14, 0
  br i1 %.not, label %20, label %15, !prof !13

15:                                               ; preds = %3
  %16 = getelementptr inbounds i8, ptr %0, i64 4
  %17 = load i32, ptr %16, align 4, !tbaa !14
  %18 = and i32 %17, 536870912
  %.not401 = icmp eq i32 %18, 0
  br i1 %.not401, label %20, label %19, !prof !24

19:                                               ; preds = %15
  tail call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.36, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 507) #14
  unreachable

20:                                               ; preds = %15, %3
  %21 = call i32 @dxb_read_header(ptr noundef %0, ptr noundef nonnull %4, i32 noundef %1, i32 noundef %2) #15
  %.not402 = icmp eq i32 %21, 0
  br i1 %.not402, label %64, label %22, !prof !24

22:                                               ; preds = %20
  %23 = icmp ne i32 %1, -1
  %24 = icmp ne i32 %21, 61
  %or.cond = or i1 %23, %24
  br i1 %or.cond, label %837, label %25

25:                                               ; preds = %22
  %26 = getelementptr inbounds i8, ptr %0, i64 4
  %27 = load i32, ptr %26, align 4, !tbaa !14
  %28 = and i32 %27, 131072
  %.not403 = icmp eq i32 %28, 0
  br i1 %.not403, label %29, label %837

29:                                               ; preds = %25
  %30 = getelementptr inbounds i8, ptr %0, i64 129
  %31 = load i8, ptr %30, align 1, !tbaa !25
  %32 = icmp sgt i8 %31, -1
  br i1 %32, label %837, label %33

33:                                               ; preds = %29
  %34 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %35 = icmp ugt i8 %34, 4
  br i1 %35, label %36, label %37, !prof !13

36:                                               ; preds = %33
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 515, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.37) #13
  br label %37

37:                                               ; preds = %36, %33
  %38 = getelementptr inbounds i8, ptr %0, i64 336
  %39 = load i64, ptr %38, align 8, !tbaa !27
  %.not404 = icmp eq i64 %39, 0
  br i1 %.not404, label %40, label %42

40:                                               ; preds = %37
  %41 = call i32 @mdbx_env_set_geometry(ptr noundef nonnull %0, i64 noundef 0, i64 noundef -1, i64 noundef -1, i64 noundef -1, i64 noundef -1, i64 noundef -1) #13
  %.not405 = icmp eq i32 %41, 0
  br i1 %.not405, label %42, label %837, !prof !24

42:                                               ; preds = %40, %37
  %43 = call i32 @env_page_auxbuffer(ptr noundef nonnull %0) #13
  %.not406 = icmp eq i32 %43, 0
  br i1 %.not406, label %44, label %837, !prof !24

44:                                               ; preds = %42
  %45 = getelementptr inbounds i8, ptr %0, i64 184
  %46 = load ptr, ptr %45, align 8, !tbaa !28
  %47 = call ptr @meta_init_triplet(ptr noundef nonnull %0, ptr noundef %46) #13
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(224) %4, ptr noundef nonnull align 4 dereferenceable(224) %47, i64 224, i1 false), !tbaa.struct !29
  %48 = getelementptr inbounds i8, ptr %0, i64 24
  %49 = load i32, ptr %48, align 8, !tbaa !34
  %50 = load ptr, ptr %45, align 8, !tbaa !28
  %51 = getelementptr inbounds i8, ptr %0, i64 8
  %52 = load i32, ptr %51, align 8, !tbaa !35
  %53 = zext i32 %52 to i64
  %54 = mul nuw nsw i64 %53, 3
  %55 = call i32 @osal_pwrite(i32 noundef %49, ptr noundef %50, i64 noundef %54, i64 noundef 0) #13
  %.not407 = icmp eq i32 %55, 0
  br i1 %.not407, label %56, label %837, !prof !24

56:                                               ; preds = %44
  %57 = load i32, ptr %48, align 8, !tbaa !34
  %58 = load i64, ptr %38, align 8, !tbaa !27
  %59 = getelementptr inbounds i8, ptr %0, i64 40
  store i64 %58, ptr %59, align 8, !tbaa !36
  %60 = getelementptr inbounds i8, ptr %0, i64 48
  store i64 %58, ptr %60, align 8, !tbaa !37
  %61 = call i32 @osal_ftruncate(i32 noundef %57, i64 noundef %58) #13
  %.not408 = icmp eq i32 %61, 0
  br i1 %.not408, label %62, label %837, !prof !24

62:                                               ; preds = %56
  %63 = call i32 @dxb_read_header(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef -1, i32 noundef %2) #15
  %.not409 = icmp eq i32 %63, 0
  br i1 %.not409, label %64, label %837, !prof !24

64:                                               ; preds = %20, %62
  %.0352 = phi i32 [ -1, %62 ], [ 0, %20 ]
  %65 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %66 = icmp ugt i8 %65, 3
  br i1 %66, label %67, label %89, !prof !13

67:                                               ; preds = %64
  %68 = getelementptr inbounds i8, ptr %4, i64 96
  %69 = load i32, ptr %68, align 4, !tbaa !30
  %70 = getelementptr inbounds i8, ptr %4, i64 48
  %71 = load i32, ptr %70, align 4, !tbaa !30
  %72 = getelementptr inbounds i8, ptr %4, i64 20
  %73 = getelementptr inbounds i8, ptr %4, i64 24
  %74 = load i32, ptr %73, align 4, !tbaa !38
  %75 = getelementptr inbounds i8, ptr %4, i64 36
  %76 = load i32, ptr %75, align 4, !tbaa !30
  %77 = getelementptr inbounds i8, ptr %4, i64 32
  %78 = load i32, ptr %77, align 4, !tbaa !30
  %79 = getelementptr inbounds i8, ptr %4, i64 28
  %80 = load i32, ptr %79, align 4, !tbaa !42
  %81 = load i16, ptr %72, align 4, !tbaa !43
  %82 = call i32 @pv2pages(i16 noundef zeroext %81) #16
  %83 = getelementptr inbounds i8, ptr %4, i64 22
  %84 = load i16, ptr %83, align 2, !tbaa !44
  %85 = call i32 @pv2pages(i16 noundef zeroext %84) #16
  %86 = getelementptr inbounds i8, ptr %4, i64 8
  %87 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef nonnull %86) #17
  %88 = call ptr @durable_caption(ptr noundef nonnull %4) #13
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 549, ptr noundef nonnull @.str.38, i32 noundef %69, i32 noundef %71, i32 noundef %74, i32 noundef %76, i32 noundef %78, i32 noundef %80, i32 noundef %82, i32 noundef %85, i64 noundef %87, ptr noundef %88) #13
  br label %89

89:                                               ; preds = %67, %64
  %90 = getelementptr inbounds i8, ptr %4, i64 40
  %91 = load i16, ptr %90, align 4, !tbaa !30
  %92 = zext i16 %91 to i32
  %93 = and i32 %92, 126
  %.not410 = icmp eq i32 %93, 8
  br i1 %.not410, label %97, label %94, !prof !24

94:                                               ; preds = %89
  %95 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not493 = icmp eq i8 %95, 0
  br i1 %.not493, label %837, label %96, !prof !24

96:                                               ; preds = %94
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 552, ptr noundef nonnull @.str.39, i32 noundef %92, ptr noundef nonnull @.str.40) #13
  br label %837

97:                                               ; preds = %89
  %98 = getelementptr inbounds i8, ptr %0, i64 208
  %99 = load ptr, ptr %98, align 8, !tbaa !45
  store i8 -120, ptr %99, align 1, !tbaa !30
  %100 = getelementptr inbounds i8, ptr %0, i64 200
  %101 = load ptr, ptr %100, align 8, !tbaa !46
  store ptr @cmp_int_align4, ptr %101, align 8, !tbaa !47
  %102 = getelementptr inbounds i8, ptr %101, i64 8
  store i64 8, ptr %102, align 8, !tbaa !52
  %103 = getelementptr inbounds i8, ptr %101, i64 16
  store i64 8, ptr %103, align 8, !tbaa !53
  %104 = getelementptr inbounds i8, ptr %101, i64 24
  store ptr @cmp_lenfast, ptr %104, align 8, !tbaa !54
  %105 = getelementptr inbounds i8, ptr %101, i64 32
  store i64 4, ptr %105, align 8, !tbaa !55
  %106 = call i32 @mdbx_env_get_maxvalsize_ex(ptr noundef %0, i32 noundef 8) #17
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds i8, ptr %101, i64 40
  store i64 %107, ptr %108, align 8, !tbaa !56
  %109 = getelementptr inbounds i8, ptr %0, i64 8
  %110 = load i32, ptr %109, align 8, !tbaa !35
  %111 = getelementptr inbounds i8, ptr %4, i64 44
  %112 = load i32, ptr %111, align 4, !tbaa !30
  %.not411 = icmp eq i32 %110, %112
  br i1 %.not411, label %116, label %113

113:                                              ; preds = %97
  %114 = zext i32 %112 to i64
  %115 = call i32 @env_setup_pagesize(ptr noundef nonnull %0, i64 noundef %114) #13
  br label %116

116:                                              ; preds = %113, %97
  %117 = getelementptr inbounds i8, ptr %0, i64 4
  %118 = load i32, ptr %117, align 4, !tbaa !14
  %119 = and i32 %118, 131072
  %120 = icmp eq i32 %119, 0
  br i1 %120, label %121, label %123

121:                                              ; preds = %116
  %122 = call i32 @env_page_auxbuffer(ptr noundef nonnull %0) #13
  %.not412 = icmp eq i32 %122, 0
  br i1 %.not412, label %._crit_edge593, label %837, !prof !24

._crit_edge593:                                   ; preds = %121
  %.pre = load i32, ptr %117, align 4, !tbaa !14
  br label %123

123:                                              ; preds = %._crit_edge593, %116
  %124 = phi i32 [ %.pre, %._crit_edge593 ], [ %118, %116 ]
  %125 = getelementptr inbounds i8, ptr %4, i64 20
  %126 = getelementptr inbounds i8, ptr %4, i64 36
  %127 = load i32, ptr %126, align 4, !tbaa !30
  %128 = zext i32 %127 to i64
  %129 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %128) #17
  %130 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8, !tbaa !57
  %131 = zext i32 %130 to i64
  %132 = call i64 @ceil_powerof2(i64 noundef %129, i64 noundef %131) #16
  %133 = and i32 %124, 131072
  %134 = icmp ne i32 %133, 0
  %135 = icmp ne i32 %1, -1
  %or.cond10 = or i1 %135, %134
  br i1 %or.cond10, label %140, label %136

136:                                              ; preds = %123
  %137 = getelementptr inbounds i8, ptr %0, i64 129
  %138 = load i8, ptr %137, align 1, !tbaa !25
  %139 = icmp sgt i8 %138, -1
  br i1 %139, label %140, label %171

140:                                              ; preds = %136, %123
  %141 = load i32, ptr %111, align 4, !tbaa !30
  %142 = zext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %4, i64 24
  %144 = load i32, ptr %143, align 4, !tbaa !38
  %145 = zext i32 %144 to i64
  %146 = mul nuw i64 %145, %142
  %147 = getelementptr inbounds i8, ptr %4, i64 32
  %148 = load i32, ptr %147, align 4, !tbaa !30
  %149 = zext i32 %148 to i64
  %150 = mul nuw i64 %149, %142
  %151 = getelementptr inbounds i8, ptr %4, i64 28
  %152 = load i32, ptr %151, align 4, !tbaa !42
  %153 = zext i32 %152 to i64
  %154 = mul nuw i64 %153, %142
  %155 = load i16, ptr %125, align 4, !tbaa !43
  %156 = call i32 @pv2pages(i16 noundef zeroext %155) #16
  %157 = zext i32 %156 to i64
  %158 = mul nuw i64 %157, %142
  %159 = getelementptr inbounds i8, ptr %4, i64 22
  %160 = load i16, ptr %159, align 2, !tbaa !44
  %161 = call i32 @pv2pages(i16 noundef zeroext %160) #16
  %162 = zext i32 %161 to i64
  %163 = mul nuw i64 %162, %142
  %164 = call i32 @mdbx_env_set_geometry(ptr noundef nonnull %0, i64 noundef %146, i64 noundef %150, i64 noundef %154, i64 noundef %158, i64 noundef %163, i64 noundef %142) #13
  %.not422 = icmp eq i32 %164, 0
  br i1 %.not422, label %..thread_crit_edge, label %165, !prof !24

..thread_crit_edge:                               ; preds = %140
  %.pre598 = load i32, ptr %147, align 4, !tbaa !30
  br label %.thread

165:                                              ; preds = %140
  %166 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not423 = icmp eq i8 %166, 0
  br i1 %.not423, label %168, label %167, !prof !24

167:                                              ; preds = %165
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 582, ptr noundef nonnull @.str.41, ptr noundef nonnull @.str.42, i32 noundef %164) #13
  br label %168

168:                                              ; preds = %165, %167
  %169 = icmp eq i32 %164, 22
  %170 = select i1 %169, i32 -30784, i32 %164
  br label %837

171:                                              ; preds = %136
  %172 = getelementptr inbounds i8, ptr %0, i64 320
  %173 = getelementptr inbounds i8, ptr %0, i64 336
  %174 = load i64, ptr %173, align 8, !tbaa !27
  %.not413 = icmp eq i64 %174, 0
  br i1 %.not413, label %279, label %175

175:                                              ; preds = %171
  %176 = icmp ult i64 %174, %132
  br i1 %176, label %177, label %178

177:                                              ; preds = %175
  store i64 %132, ptr %173, align 8, !tbaa !27
  br label %178

178:                                              ; preds = %177, %175
  %179 = phi i64 [ %132, %177 ], [ %174, %175 ]
  %180 = getelementptr inbounds i8, ptr %0, i64 328
  %181 = load i64, ptr %180, align 8, !tbaa !58
  %182 = icmp ult i64 %181, %132
  br i1 %182, label %183, label %184

183:                                              ; preds = %178
  store i64 %132, ptr %180, align 8, !tbaa !58
  br label %184

184:                                              ; preds = %183, %178
  %185 = phi i64 [ %132, %183 ], [ %181, %178 ]
  %186 = call i64 @bytes_align2os_bytes(ptr noundef nonnull %0, i64 noundef %185) #17
  %187 = getelementptr inbounds i8, ptr %4, i64 28
  %188 = load i32, ptr %187, align 4, !tbaa !42
  %189 = zext i32 %188 to i64
  %190 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %189) #17
  %.not414 = icmp eq i64 %186, %190
  br i1 %.not414, label %191, label %215

191:                                              ; preds = %184
  %192 = load i64, ptr %172, align 8, !tbaa !59
  %193 = call i64 @bytes_align2os_bytes(ptr noundef nonnull %0, i64 noundef %192) #17
  %194 = getelementptr inbounds i8, ptr %4, i64 24
  %195 = load i32, ptr %194, align 4, !tbaa !38
  %196 = zext i32 %195 to i64
  %197 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %196) #17
  %.not415 = icmp eq i64 %193, %197
  br i1 %.not415, label %198, label %215

198:                                              ; preds = %191
  %199 = getelementptr inbounds i8, ptr %0, i64 352
  %200 = load i64, ptr %199, align 8, !tbaa !60
  %201 = call i64 @bytes_align2os_bytes(ptr noundef nonnull %0, i64 noundef %200) #17
  %202 = getelementptr inbounds i8, ptr %4, i64 22
  %203 = load i16, ptr %202, align 2, !tbaa !44
  %204 = call i32 @pv2pages(i16 noundef zeroext %203) #16
  %205 = zext i32 %204 to i64
  %206 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %205) #17
  %.not416 = icmp eq i64 %201, %206
  br i1 %.not416, label %207, label %215

207:                                              ; preds = %198
  %208 = getelementptr inbounds i8, ptr %0, i64 344
  %209 = load i64, ptr %208, align 8, !tbaa !61
  %210 = call i64 @bytes_align2os_bytes(ptr noundef nonnull %0, i64 noundef %209) #17
  %211 = load i16, ptr %125, align 4, !tbaa !43
  %212 = call i32 @pv2pages(i16 noundef zeroext %211) #16
  %213 = zext i32 %212 to i64
  %214 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %213) #17
  %.not417 = icmp eq i64 %210, %214
  br i1 %.not417, label %270, label %215

215:                                              ; preds = %207, %198, %191, %184
  %216 = getelementptr inbounds i8, ptr %0, i64 352
  %217 = load i64, ptr %216, align 8, !tbaa !60
  %.not418 = icmp ne i64 %217, 0
  %218 = icmp ugt i64 %179, %129
  %or.cond621 = select i1 %.not418, i1 %218, i1 false
  br i1 %or.cond621, label %219, label %223

219:                                              ; preds = %215
  %220 = add i64 %217, %129
  %221 = urem i64 %129, %217
  %222 = sub i64 %220, %221
  store i64 %222, ptr %173, align 8, !tbaa !27
  br label %223

223:                                              ; preds = %219, %215
  %224 = phi i64 [ %222, %219 ], [ %179, %215 ]
  %225 = load i64, ptr %172, align 8, !tbaa !59
  %226 = getelementptr inbounds i8, ptr %0, i64 344
  %227 = load i64, ptr %226, align 8, !tbaa !61
  %228 = load i32, ptr %111, align 4, !tbaa !30
  %229 = zext i32 %228 to i64
  %230 = call i32 @mdbx_env_set_geometry(ptr noundef nonnull %0, i64 noundef %225, i64 noundef %224, i64 noundef %185, i64 noundef %227, i64 noundef %217, i64 noundef %229) #13
  %.not419 = icmp eq i32 %230, 0
  br i1 %.not419, label %237, label %231, !prof !24

231:                                              ; preds = %223
  %232 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not421 = icmp eq i8 %232, 0
  br i1 %.not421, label %234, label %233, !prof !24

233:                                              ; preds = %231
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 610, ptr noundef nonnull @.str.41, ptr noundef nonnull @.str.43, i32 noundef %230) #13
  br label %234

234:                                              ; preds = %233, %231
  %235 = icmp eq i32 %230, 22
  %236 = select i1 %235, i32 -30784, i32 %230
  br label %837

237:                                              ; preds = %223
  %238 = getelementptr inbounds i8, ptr %4, i64 32
  %239 = load i32, ptr %238, align 4, !tbaa !30
  %240 = zext i32 %239 to i64
  %241 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %240) #17
  %242 = load i64, ptr %173, align 8, !tbaa !27
  %243 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %242) #17
  store i32 %243, ptr %238, align 4, !tbaa !30
  %244 = load i64, ptr %172, align 8, !tbaa !59
  %245 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %244) #17
  %246 = getelementptr inbounds i8, ptr %4, i64 24
  store i32 %245, ptr %246, align 4, !tbaa !38
  %247 = load i64, ptr %180, align 8, !tbaa !58
  %248 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %247) #17
  store i32 %248, ptr %187, align 4, !tbaa !42
  %249 = load i64, ptr %226, align 8, !tbaa !61
  %250 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %249) #17
  %251 = zext i32 %250 to i64
  %252 = call zeroext i16 @pages2pv(i64 noundef %251) #16
  store i16 %252, ptr %125, align 4, !tbaa !43
  %253 = load i64, ptr %216, align 8, !tbaa !60
  %254 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %253) #17
  %255 = zext i32 %254 to i64
  %256 = call zeroext i16 @pages2pv(i64 noundef %255) #16
  %257 = getelementptr inbounds i8, ptr %4, i64 22
  store i16 %256, ptr %257, align 2, !tbaa !44
  %258 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %259 = icmp ugt i8 %258, 3
  %.pre596 = load i32, ptr %126, align 4, !tbaa !30
  br i1 %259, label %260, label %275, !prof !13

260:                                              ; preds = %237
  %261 = getelementptr inbounds i8, ptr %4, i64 96
  %262 = load i32, ptr %261, align 4, !tbaa !30
  %263 = getelementptr inbounds i8, ptr %4, i64 48
  %264 = load i32, ptr %263, align 4, !tbaa !30
  %265 = call i32 @pv2pages(i16 noundef zeroext %252) #16
  %266 = call i32 @pv2pages(i16 noundef zeroext %256) #16
  %267 = getelementptr inbounds i8, ptr %4, i64 8
  %268 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef nonnull %267) #17
  %269 = call ptr @durable_caption(ptr noundef nonnull %4) #13
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 626, ptr noundef nonnull @.str.44, i32 noundef %262, i32 noundef %264, i32 noundef %245, i32 noundef %.pre596, i32 noundef %243, i32 noundef %248, i32 noundef %265, i32 noundef %266, i64 noundef %268, ptr noundef %269) #13
  %.pre594 = load i32, ptr %238, align 4, !tbaa !30
  %.pre595 = load i32, ptr %126, align 4, !tbaa !30
  br label %275

270:                                              ; preds = %207
  %271 = getelementptr inbounds i8, ptr %4, i64 32
  %272 = load i32, ptr %271, align 4, !tbaa !30
  %273 = zext i32 %272 to i64
  %274 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %273) #17
  store i64 %274, ptr %173, align 8, !tbaa !27
  br label %275

275:                                              ; preds = %270, %260, %237
  %276 = phi i32 [ %.pre595, %260 ], [ %.pre596, %237 ], [ %127, %270 ]
  %277 = phi i32 [ %.pre594, %260 ], [ %243, %237 ], [ %272, %270 ]
  %.0365 = phi i64 [ %241, %260 ], [ %241, %237 ], [ 0, %270 ]
  %.not420 = icmp ult i32 %277, %276
  br i1 %.not420, label %278, label %.thread, !prof !13

278:                                              ; preds = %275
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.45, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 631) #14
  unreachable

279:                                              ; preds = %171
  %280 = getelementptr inbounds i8, ptr %4, i64 32
  %281 = load i32, ptr %280, align 4, !tbaa !30
  %282 = zext i32 %281 to i64
  %283 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %282) #17
  store i64 %283, ptr %173, align 8, !tbaa !27
  %284 = getelementptr inbounds i8, ptr %4, i64 24
  %285 = load i32, ptr %284, align 4, !tbaa !38
  %286 = zext i32 %285 to i64
  %287 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %286) #17
  store i64 %287, ptr %172, align 8, !tbaa !59
  %288 = getelementptr inbounds i8, ptr %4, i64 28
  %289 = load i32, ptr %288, align 4, !tbaa !42
  %290 = zext i32 %289 to i64
  %291 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %290) #17
  %292 = getelementptr inbounds i8, ptr %0, i64 328
  store i64 %291, ptr %292, align 8, !tbaa !58
  %293 = load i16, ptr %125, align 4, !tbaa !43
  %294 = call i32 @pv2pages(i16 noundef zeroext %293) #16
  %295 = zext i32 %294 to i64
  %296 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %295) #17
  %297 = getelementptr inbounds i8, ptr %0, i64 344
  store i64 %296, ptr %297, align 8, !tbaa !61
  %298 = getelementptr inbounds i8, ptr %4, i64 22
  %299 = load i16, ptr %298, align 2, !tbaa !44
  %300 = call i32 @pv2pages(i16 noundef zeroext %299) #16
  %301 = zext i32 %300 to i64
  %302 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %301) #17
  %303 = getelementptr inbounds i8, ptr %0, i64 352
  store i64 %302, ptr %303, align 8, !tbaa !60
  br label %.thread

.thread:                                          ; preds = %..thread_crit_edge, %275, %279
  %304 = phi i32 [ %277, %275 ], [ %281, %279 ], [ %.pre598, %..thread_crit_edge ]
  %.1366 = phi i64 [ %.0365, %275 ], [ 0, %279 ], [ 0, %..thread_crit_edge ]
  %305 = getelementptr inbounds i8, ptr %4, i64 32
  %306 = zext i32 %304 to i64
  %307 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %306) #17
  %308 = getelementptr inbounds i8, ptr %0, i64 336
  %309 = load i64, ptr %308, align 8, !tbaa !27
  %.not424 = icmp eq i64 %307, %309
  br i1 %.not424, label %311, label %310, !prof !24

310:                                              ; preds = %.thread
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 641) #14
  unreachable

311:                                              ; preds = %.thread
  %.not425 = icmp ult i64 %307, %129
  br i1 %.not425, label %312, label %313, !prof !13

312:                                              ; preds = %311
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.47, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 642) #14
  unreachable

313:                                              ; preds = %311
  %.not426 = icmp eq i64 %.1366, 0
  %spec.select = select i1 %.not426, i64 %307, i64 %.1366
  %314 = getelementptr inbounds i8, ptr %0, i64 16
  %315 = getelementptr inbounds i8, ptr %0, i64 48
  %316 = load i64, ptr %315, align 8, !tbaa !37
  %.not427 = icmp eq i64 %316, %307
  br i1 %.not427, label %363, label %317, !prof !24

317:                                              ; preds = %313
  br i1 %135, label %318, label %327

318:                                              ; preds = %317
  %319 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %320 = icmp ugt i8 %319, 3
  br i1 %320, label %321, label %.thread500, !prof !13

321:                                              ; preds = %318
  %322 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %307) #17
  %323 = getelementptr inbounds i8, ptr %0, i64 128
  %324 = load i8, ptr %323, align 8, !tbaa !62
  %325 = zext nneg i8 %324 to i64
  %326 = lshr i64 %316, %325
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 651, ptr noundef nonnull @.str.48, i64 noundef %307, i32 noundef %322, i64 noundef %316, i64 noundef %326) #13
  br label %363

327:                                              ; preds = %317
  %.not428 = icmp ne i64 %316, %spec.select
  %328 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2
  %329 = icmp ugt i8 %328, 1
  %or.cond495 = select i1 %.not428, i1 %329, i1 false
  br i1 %or.cond495, label %330, label %336, !prof !63

330:                                              ; preds = %327
  %331 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %spec.select) #17
  %332 = getelementptr inbounds i8, ptr %0, i64 128
  %333 = load i8, ptr %332, align 8, !tbaa !62
  %334 = zext nneg i8 %333 to i64
  %335 = lshr i64 %316, %334
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 655, ptr noundef nonnull @.str.49, i64 noundef %spec.select, i32 noundef %331, i64 noundef %316, i64 noundef %335) #13
  br label %336

336:                                              ; preds = %330, %327
  %337 = icmp ult i64 %316, %129
  br i1 %337, label %338, label %343

338:                                              ; preds = %336
  %339 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not432 = icmp eq i8 %339, 0
  br i1 %.not432, label %837, label %340, !prof !24

340:                                              ; preds = %338
  %341 = load i32, ptr %126, align 4, !tbaa !30
  %342 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %316) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 658, ptr noundef nonnull @.str.50, i32 noundef %341, i32 noundef %342) #13
  br label %837

343:                                              ; preds = %336
  %344 = load i32, ptr %117, align 4, !tbaa !14
  %345 = and i32 %344, 131072
  %.not429 = icmp eq i32 %345, 0
  br i1 %.not429, label %357, label %346

346:                                              ; preds = %343
  %347 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 20), align 4, !tbaa !64
  %348 = add i32 %347, -1
  %349 = zext i32 %348 to i64
  %350 = and i64 %316, %349
  %.not430 = icmp eq i64 %350, 0
  %351 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  br i1 %.not430, label %354, label %352

352:                                              ; preds = %346
  %.not431 = icmp eq i8 %351, 0
  br i1 %.not431, label %837, label %353, !prof !24

353:                                              ; preds = %352
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 665, ptr noundef nonnull @.str.51, i32 noundef %347) #13
  br label %837

354:                                              ; preds = %346
  %355 = icmp ugt i8 %351, 1
  br i1 %355, label %356, label %.thread500, !prof !13

356:                                              ; preds = %354
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 668, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.52) #13
  br label %363

357:                                              ; preds = %343
  %358 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %359 = icmp ugt i8 %358, 3
  br i1 %359, label %360, label %.thread500, !prof !13

360:                                              ; preds = %357
  %361 = load i64, ptr %308, align 8, !tbaa !27
  %362 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %361) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 671, ptr noundef nonnull @.str.53, i64 noundef %361, i32 noundef %362) #13
  br label %363

363:                                              ; preds = %313, %356, %360, %321
  %.pr = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %364 = icmp ugt i8 %.pr, 3
  br i1 %364, label %365, label %.thread500, !prof !65

365:                                              ; preds = %363
  %366 = load i64, ptr @globals, align 8, !tbaa !30
  %367 = load i64, ptr getelementptr inbounds (i8, ptr @globals, i64 8), align 8, !tbaa !30
  %368 = or i64 %367, %366
  %.not433 = icmp eq i64 %368, 0
  %369 = select i1 %.not433, ptr @.str.56, ptr @.str.55
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 677, ptr noundef nonnull @.str.54, i64 noundef %366, i64 noundef %367, ptr noundef nonnull %369) #13
  br label %.thread500

.thread500:                                       ; preds = %318, %357, %354, %365, %363
  %370 = load i32, ptr %117, align 4, !tbaa !14
  %371 = and i32 %370, 8388608
  %.not434 = icmp eq i32 %371, 0
  br i1 %.not434, label %372, label %375

372:                                              ; preds = %.thread500
  %373 = call i32 @mdbx_is_readahead_reasonable(i64 noundef %129, i64 noundef 0) #13
  %374 = icmp eq i32 %373, -1
  %.pre599 = load i32, ptr %117, align 4, !tbaa !14
  br label %375

375:                                              ; preds = %372, %.thread500
  %376 = phi i32 [ %370, %.thread500 ], [ %.pre599, %372 ]
  %377 = phi i1 [ false, %.thread500 ], [ %374, %372 ]
  %378 = load i64, ptr %308, align 8, !tbaa !27
  %379 = getelementptr inbounds i8, ptr %0, i64 328
  %380 = load i64, ptr %379, align 8, !tbaa !58
  %.not435 = icmp eq i32 %1, 0
  br i1 %.not435, label %385, label %381

381:                                              ; preds = %375
  %382 = getelementptr inbounds i8, ptr %0, i64 129
  %383 = load i8, ptr %382, align 1, !tbaa !25
  %384 = icmp slt i8 %383, 0
  br label %385

385:                                              ; preds = %381, %375
  %386 = phi i1 [ false, %375 ], [ %384, %381 ]
  %387 = zext i1 %386 to i32
  %388 = getelementptr inbounds i8, ptr %0, i64 160
  %389 = load ptr, ptr %388, align 8, !tbaa !66
  %390 = call i32 @osal_mmap(i32 noundef %376, ptr noundef nonnull %314, i64 noundef %378, i64 noundef %380, i32 noundef %387, ptr noundef %389) #13
  %.not436 = icmp eq i32 %390, 0
  br i1 %.not436, label %391, label %837, !prof !24

391:                                              ; preds = %385
  %392 = load ptr, ptr %314, align 8, !tbaa !30
  %393 = getelementptr inbounds i8, ptr %0, i64 32
  %394 = load i64, ptr %393, align 8, !tbaa !67
  %395 = call i32 @madvise(ptr noundef %392, i64 noundef %394, i32 noundef 16) #13
  %.not437 = icmp eq i32 %395, 0
  br i1 %.not437, label %.thread501, label %396

396:                                              ; preds = %391
  %397 = tail call ptr @__errno_location() #16
  %398 = load i32, ptr %397, align 4, !tbaa !32
  %399 = call i32 @ignore_enosys(i32 noundef %398)
  %400 = add i32 %399, -1
  %401 = icmp ult i32 %400, -2
  br i1 %401, label %837, label %.thread501, !prof !68

.thread501:                                       ; preds = %391, %396
  %402 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %403 = and i8 %402, 8
  %.not438 = icmp eq i8 %403, 0
  br i1 %.not438, label %.thread502, label %404

404:                                              ; preds = %.thread501
  %405 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef 3) #17
  %406 = load ptr, ptr %314, align 8, !tbaa !30
  %407 = call i32 @madvise(ptr noundef %406, i64 noundef %405, i32 noundef 17) #13
  %.not439 = icmp eq i32 %407, 0
  br i1 %.not439, label %.thread502, label %408

408:                                              ; preds = %404
  %409 = tail call ptr @__errno_location() #16
  %410 = load i32, ptr %409, align 4, !tbaa !32
  %411 = call i32 @ignore_enosys(i32 noundef %410)
  %412 = add i32 %411, 1
  %413 = icmp ult i32 %412, 2
  br i1 %413, label %.thread502, label %837

.thread502:                                       ; preds = %404, %.thread501, %408
  %414 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %415 = and i8 %414, 1
  %.not440 = icmp eq i8 %415, 0
  br i1 %.not440, label %420, label %416, !prof !13

416:                                              ; preds = %.thread502
  %417 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef 3) #17
  %.not441 = icmp ult i64 %129, %417
  br i1 %.not441, label %.critedge, label %418, !prof !13

418:                                              ; preds = %416
  %419 = load i64, ptr %393, align 8, !tbaa !67
  %.not542 = icmp ugt i64 %129, %419
  br i1 %.not542, label %.critedge, label %420, !prof !13

.critedge:                                        ; preds = %416, %418
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.57, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 706) #14
  unreachable

420:                                              ; preds = %418, %.thread502
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #13
  call void @meta_tap(ptr dead_on_unwind nonnull writable sret(%struct.troika) align 8 %5, ptr noundef nonnull %0) #13
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  %421 = getelementptr inbounds i8, ptr %0, i64 129
  %422 = load i8, ptr %421, align 1, !tbaa !25
  %423 = icmp sgt i8 %422, -1
  br i1 %423, label %428, label %.preheader543, !prof !13

.preheader543:                                    ; preds = %420
  %424 = call i32 @meta_eq_mask(ptr noundef nonnull %5) #13
  %.not442573 = icmp eq i32 %424, 0
  br i1 %.not442573, label %.lr.ph, label %._crit_edge, !prof !69

.lr.ph:                                           ; preds = %.preheader543
  %425 = getelementptr inbounds i8, ptr %8, i64 16
  %426 = getelementptr inbounds i8, ptr %8, i64 8
  %427 = getelementptr inbounds i8, ptr %7, i64 8
  br i1 %135, label %447, label %.lr.ph.split

428:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %6) #13
  %429 = zext nneg i8 %422 to i64
  %430 = call ptr @pgno2page(ptr noundef nonnull %0, i64 noundef %429) #17
  %431 = call ptr @page_meta(ptr noundef %430) #17
  %432 = call i32 @meta_validate_copy(ptr noundef nonnull %0, ptr noundef %431, ptr noundef nonnull %6) #13
  %.not469 = icmp eq i32 %432, 0
  br i1 %.not469, label %583, label %433, !prof !24

433:                                              ; preds = %428
  %434 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not470 = icmp eq i8 %434, 0
  br i1 %.not470, label %442, label %435, !prof !24

435:                                              ; preds = %433
  %436 = call ptr @data_page(ptr noundef %431) #17
  %437 = ptrtoint ptr %436 to i64
  %438 = load ptr, ptr %314, align 8, !tbaa !30
  %439 = ptrtoint ptr %438 to i64
  %440 = sub nsw i64 %437, %439
  %441 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %440) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 727, ptr noundef nonnull @.str.58, i32 noundef %441) #13
  br label %442

442:                                              ; preds = %433, %435
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %6) #13
  br label %.thread511

._crit_edge:                                      ; preds = %581, %.preheader543
  %.lcssa548 = phi i32 [ %424, %.preheader543 ], [ %582, %581 ]
  %443 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not468 = icmp eq i8 %443, 0
  br i1 %.not468, label %445, label %444, !prof !24

444:                                              ; preds = %._crit_edge
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 735, ptr noundef nonnull @.str.59, i32 noundef %.lcssa548) #13
  br label %445

445:                                              ; preds = %444, %._crit_edge
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread511

.lr.ph.split:                                     ; preds = %.lr.ph, %581
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #13
  call void @meta_recent(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %7, ptr noundef nonnull %0, ptr noundef nonnull %5)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #13
  call void @meta_prefer_steady(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %8, ptr noundef nonnull %0, ptr noundef nonnull %5)
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %9) #13
  %446 = load i64, ptr %425, align 8, !tbaa !70
  %.not444 = icmp eq i64 %446, 0
  br i1 %.not444, label %.lr.ph.split._crit_edge, label %463

.lr.ph.split._crit_edge:                          ; preds = %.lr.ph.split
  %.pre600 = load ptr, ptr %427, align 8, !tbaa !30
  br label %481

447:                                              ; preds = %.lr.ph
  %448 = getelementptr inbounds i8, ptr %5, i64 1
  %449 = load i8, ptr %448, align 1, !tbaa !72
  %450 = getelementptr inbounds i8, ptr %5, i64 2
  %451 = load i8, ptr %450, align 2, !tbaa !74
  %452 = icmp eq i8 %449, %451
  br i1 %452, label %.thread525, label %453

453:                                              ; preds = %447
  %454 = getelementptr inbounds i8, ptr %0, i64 64
  %455 = load ptr, ptr %454, align 8, !tbaa !30
  %.not466 = icmp eq ptr %455, null
  %456 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  br i1 %.not466, label %457, label %460

457:                                              ; preds = %453
  %.not467 = icmp eq i8 %456, 0
  br i1 %.not467, label %459, label %458, !prof !24

458:                                              ; preds = %457
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 749, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.60) #13
  br label %459

459:                                              ; preds = %458, %457
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread511

460:                                              ; preds = %453
  %461 = icmp ugt i8 %456, 3
  br i1 %461, label %462, label %.thread525, !prof !13

462:                                              ; preds = %460
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 756, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.61) #13
  br label %.thread525

463:                                              ; preds = %.lr.ph.split
  %464 = load ptr, ptr %426, align 8, !tbaa !30
  %465 = call i32 @meta_validate_copy(ptr noundef nonnull %0, ptr noundef %464, ptr noundef nonnull %9) #13
  %.not445 = icmp eq i32 %465, 0
  br i1 %.not445, label %477, label %466, !prof !24

466:                                              ; preds = %463
  %467 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not465 = icmp eq i8 %467, 0
  br i1 %.not465, label %476, label %468, !prof !24

468:                                              ; preds = %466
  %469 = load ptr, ptr %426, align 8, !tbaa !30
  %470 = ptrtoint ptr %469 to i64
  %471 = load ptr, ptr %314, align 8, !tbaa !30
  %472 = ptrtoint ptr %471 to i64
  %473 = sub nsw i64 %470, %472
  %474 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %473) #17
  %475 = load i64, ptr %8, align 8, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 770, ptr noundef nonnull @.str.63, i32 noundef %474, ptr noundef nonnull @.str.64, i64 noundef %475, ptr noundef nonnull @.str.65) #13
  br label %476

476:                                              ; preds = %468, %466
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread515

477:                                              ; preds = %463
  %478 = load ptr, ptr %426, align 8, !tbaa !30
  %479 = load ptr, ptr %427, align 8, !tbaa !30
  %480 = icmp eq ptr %478, %479
  br i1 %480, label %.thread522, label %481

481:                                              ; preds = %.lr.ph.split._crit_edge, %477
  %482 = phi ptr [ %.pre600, %.lr.ph.split._crit_edge ], [ %479, %477 ]
  %483 = ptrtoint ptr %482 to i64
  %484 = load ptr, ptr %314, align 8, !tbaa !30
  %485 = ptrtoint ptr %484 to i64
  %486 = sub nsw i64 %483, %485
  %487 = call i32 @bytes2pgno(ptr noundef %0, i64 noundef %486) #17
  %488 = call i32 @meta_validate_copy(ptr noundef %0, ptr noundef %482, ptr noundef nonnull %9) #13
  %.not450 = icmp eq i32 %488, 0
  %489 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %490 = and i8 %489, 1
  %.not446 = icmp eq i8 %490, 0
  br i1 %.not446, label %497, label %491, !prof !13

491:                                              ; preds = %481
  %492 = load i64, ptr %425, align 8, !tbaa !70
  %.not447 = icmp ne i64 %492, 0
  %493 = load i64, ptr %7, align 8
  %494 = load i64, ptr %8, align 8
  %495 = icmp eq i64 %493, %494
  %.not449 = select i1 %.not447, i1 %495, i1 false
  br i1 %.not449, label %496, label %497, !prof !13

496:                                              ; preds = %491
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.66, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 780) #14
  unreachable

497:                                              ; preds = %491, %481
  br i1 %.not450, label %509, label %498, !prof !24

498:                                              ; preds = %497
  %499 = load i64, ptr %425, align 8, !tbaa !70
  %.not458 = icmp eq i64 %499, 0
  %500 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  br i1 %.not458, label %501, label %504, !prof !13

501:                                              ; preds = %498
  %.not464 = icmp eq i8 %500, 0
  br i1 %.not464, label %503, label %502, !prof !24

502:                                              ; preds = %501
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 784, ptr noundef nonnull @.str.67, ptr noundef nonnull @.str.68, ptr noundef nonnull @.str.69) #13
  br label %503

503:                                              ; preds = %502, %501
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread515

504:                                              ; preds = %498
  %505 = icmp ugt i8 %500, 1
  br i1 %505, label %506, label %508, !prof !13

506:                                              ; preds = %504
  %507 = load i64, ptr %7, align 8, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 788, ptr noundef nonnull @.str.70, i32 noundef %487, i64 noundef %507) #13
  br label %508

508:                                              ; preds = %506, %504
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %554

509:                                              ; preds = %497
  %510 = load ptr, ptr %427, align 8, !tbaa !30
  %511 = call zeroext i1 @meta_bootid_match(ptr noundef %510)
  br i1 %511, label %512, label %539

512:                                              ; preds = %509
  %513 = load i32, ptr %117, align 4, !tbaa !14
  %514 = and i32 %513, 131072
  %.not455 = icmp eq i32 %514, 0
  %515 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  br i1 %.not455, label %521, label %516

516:                                              ; preds = %512
  %.not457 = icmp eq i8 %515, 0
  br i1 %.not457, label %520, label %517, !prof !24

517:                                              ; preds = %516
  %518 = load i64, ptr @globals, align 8, !tbaa !30
  %519 = load i64, ptr getelementptr inbounds (i8, ptr @globals, i64 8), align 8, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 798, ptr noundef nonnull @.str.71, ptr noundef nonnull @.str.72, i64 noundef %518, i64 noundef %519, ptr noundef nonnull @.str.73) #13
  br label %520

520:                                              ; preds = %517, %516
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread515

521:                                              ; preds = %512
  %522 = icmp ugt i8 %515, 1
  br i1 %522, label %523, label %526, !prof !13

523:                                              ; preds = %521
  %524 = load i64, ptr @globals, align 8, !tbaa !30
  %525 = load i64, ptr getelementptr inbounds (i8, ptr @globals, i64 8), align 8, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 804, ptr noundef nonnull @.str.71, ptr noundef nonnull @.str.72, i64 noundef %524, i64 noundef %525, ptr noundef nonnull @.str.55) #13
  br label %526

526:                                              ; preds = %523, %521
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(224) %4, ptr noundef nonnull align 4 dereferenceable(224) %9, i64 224, i1 false), !tbaa.struct !29
  %527 = load i32, ptr %126, align 4, !tbaa !30
  %528 = zext i32 %527 to i64
  %529 = getelementptr inbounds i8, ptr %0, i64 104
  %530 = load ptr, ptr %529, align 8, !tbaa !76
  %531 = getelementptr inbounds i8, ptr %530, i64 376
  store volatile i64 %528, ptr %531, align 8, !tbaa !30
  %532 = load ptr, ptr %529, align 8, !tbaa !76
  %533 = getelementptr inbounds i8, ptr %532, i64 368
  %534 = load volatile i64, ptr %533, align 16, !tbaa !30
  %.not456 = icmp eq i64 %534, 0
  br i1 %.not456, label %535, label %.thread522

535:                                              ; preds = %526
  %536 = call i64 @osal_monotime() #13
  %537 = load ptr, ptr %529, align 8, !tbaa !76
  %538 = getelementptr inbounds i8, ptr %537, i64 368
  store volatile i64 %536, ptr %538, align 16, !tbaa !30
  br label %.thread522

539:                                              ; preds = %509
  %540 = load i64, ptr %425, align 8, !tbaa !70
  %.not451 = icmp eq i64 %540, 0
  br i1 %.not451, label %541, label %545, !prof !13

541:                                              ; preds = %539
  %542 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not454 = icmp eq i8 %542, 0
  br i1 %.not454, label %544, label %543, !prof !24

543:                                              ; preds = %541
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 813, ptr noundef nonnull @.str.74, ptr noundef nonnull @.str.72, ptr noundef nonnull @.str.68, ptr noundef nonnull @.str.69) #13
  br label %544

544:                                              ; preds = %543, %541
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread515

545:                                              ; preds = %539
  %546 = load i32, ptr %117, align 4, !tbaa !14
  %547 = and i32 %546, 131072
  %.not452 = icmp eq i32 %547, 0
  br i1 %.not452, label %554, label %548

548:                                              ; preds = %545
  %549 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not453 = icmp eq i8 %549, 0
  br i1 %.not453, label %553, label %550, !prof !24

550:                                              ; preds = %548
  %551 = load i64, ptr %7, align 8, !tbaa !75
  %552 = load i64, ptr %8, align 8, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 819, ptr noundef nonnull @.str.75, ptr noundef nonnull @.str.72, i64 noundef %551, i64 noundef %552, ptr noundef nonnull @.str.73) #13
  br label %553

553:                                              ; preds = %550, %548
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  br label %.thread515

554:                                              ; preds = %508, %545
  %555 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %556 = icmp ugt i8 %555, 2
  br i1 %556, label %557, label %561, !prof !13

557:                                              ; preds = %554
  %558 = select i1 %.not450, ptr @.str.55, ptr @.str.77
  %559 = select i1 %.not450, ptr @.str.78, ptr @.str.55
  %560 = load i64, ptr %7, align 8, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 828, ptr noundef nonnull @.str.76, ptr noundef nonnull @.str.72, ptr noundef nonnull %558, i32 noundef %487, ptr noundef nonnull %559, i64 noundef %560) #13
  br label %561

561:                                              ; preds = %557, %554
  call void @meta_troika_dump(ptr noundef nonnull %0, ptr noundef nonnull %5) #13
  %562 = load i64, ptr %425, align 8, !tbaa !70
  %.not459 = icmp eq i64 %562, 0
  br i1 %.not459, label %563, label %564, !prof !13

563:                                              ; preds = %561
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.79, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 830) #14
  unreachable

564:                                              ; preds = %561
  %565 = zext i32 %487 to i64
  %566 = load ptr, ptr %427, align 8
  %567 = load ptr, ptr %426, align 8
  %568 = select i1 %.not450, ptr %566, ptr %567
  %569 = call i32 @meta_override(ptr noundef nonnull %0, i64 noundef %565, i64 noundef 0, ptr noundef %568) #13
  %.not460 = icmp eq i32 %569, 0
  br i1 %.not460, label %574, label %570

570:                                              ; preds = %564
  %571 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not463 = icmp eq i8 %571, 0
  br i1 %.not463, label %.thread515, label %572, !prof !24

572:                                              ; preds = %570
  %573 = load i64, ptr %7, align 8, !tbaa !75
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 833, ptr noundef nonnull @.str.80, i32 noundef %487, i64 noundef %573, i32 noundef %569) #13
  br label %.thread515

574:                                              ; preds = %564
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #13
  call void @meta_tap(ptr dead_on_unwind nonnull writable sret(%struct.troika) align 8 %10, ptr noundef nonnull %0) #13
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %10, i64 32, i1 false), !tbaa.struct !77
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #13
  %575 = load ptr, ptr %427, align 8, !tbaa !30
  %576 = call i64 @meta_txnid(ptr noundef %575) #13
  %.not461 = icmp eq i64 %576, 0
  br i1 %.not461, label %578, label %577, !prof !24

577:                                              ; preds = %574
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.81, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 837) #14
  unreachable

578:                                              ; preds = %574
  %579 = call i32 @meta_eq_mask(ptr noundef nonnull %5) #13
  %.not462 = icmp eq i32 %579, 0
  br i1 %.not462, label %581, label %580, !prof !24

580:                                              ; preds = %578
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.82, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 838) #14
  unreachable

.thread515:                                       ; preds = %476, %503, %520, %544, %553, %572, %570
  %.7.ph = phi i32 [ %569, %570 ], [ %569, %572 ], [ -30419, %553 ], [ -30796, %544 ], [ -30419, %520 ], [ -30796, %503 ], [ -30796, %476 ]
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %9) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #13
  br label %.thread511

.thread522:                                       ; preds = %477, %526, %535
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %9) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #13
  br label %585

581:                                              ; preds = %578
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %9) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #13
  %582 = call i32 @meta_eq_mask(ptr noundef nonnull %5) #13
  %.not442 = icmp eq i32 %582, 0
  br i1 %.not442, label %.lr.ph.split, label %._crit_edge, !prof !78

583:                                              ; preds = %428
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %6) #13
  %584 = icmp eq i32 %1, -1
  br i1 %584, label %585, label %.thread525

585:                                              ; preds = %.thread522, %583
  %586 = getelementptr inbounds i8, ptr %0, i64 40
  %587 = load i64, ptr %586, align 8, !tbaa !36
  %588 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8, !tbaa !57
  %589 = add i32 %588, -1
  %590 = zext i32 %589 to i64
  %591 = and i64 %587, %590
  %.not471 = icmp ne i64 %591, 0
  %592 = icmp ult i64 %587, %129
  %or.cond496 = or i1 %592, %.not471
  br i1 %or.cond496, label %593, label %596

593:                                              ; preds = %585
  %594 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not492 = icmp eq i8 %594, 0
  br i1 %.not492, label %.thread511, label %595, !prof !24

595:                                              ; preds = %593
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 845, ptr noundef nonnull @.str.83, i64 noundef %587) #13
  br label %.thread511

596:                                              ; preds = %585
  %597 = load i64, ptr %308, align 8, !tbaa !27
  %.not472 = icmp eq i64 %587, %597
  br i1 %.not472, label %603, label %598

598:                                              ; preds = %596
  %599 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %587) #17
  store i32 %599, ptr %305, align 4, !tbaa !30
  %600 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %601 = icmp ugt i8 %600, 2
  br i1 %601, label %602, label %603, !prof !13

602:                                              ; preds = %598
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 851, ptr noundef nonnull @.str.84, i64 noundef %587, i32 noundef %599) #13
  br label %603

603:                                              ; preds = %598, %602, %596
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #13
  call void @meta_recent(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %11, ptr noundef nonnull %0, ptr noundef nonnull %5)
  %604 = load i16, ptr %125, align 4, !tbaa !43
  %605 = getelementptr inbounds i8, ptr %11, i64 8
  %606 = load ptr, ptr %605, align 8, !tbaa !30
  %607 = getelementptr inbounds i8, ptr %606, i64 20
  %608 = load i16, ptr %607, align 4, !tbaa !43
  %.not473 = icmp eq i16 %604, %608
  br i1 %.not473, label %609, label %628

609:                                              ; preds = %603
  %610 = getelementptr inbounds i8, ptr %4, i64 22
  %611 = load i16, ptr %610, align 2, !tbaa !44
  %612 = getelementptr inbounds i8, ptr %606, i64 22
  %613 = load i16, ptr %612, align 2, !tbaa !44
  %.not474 = icmp eq i16 %611, %613
  br i1 %.not474, label %614, label %628

614:                                              ; preds = %609
  %615 = getelementptr inbounds i8, ptr %4, i64 24
  %616 = load i32, ptr %615, align 4, !tbaa !38
  %617 = getelementptr inbounds i8, ptr %606, i64 24
  %618 = load i32, ptr %617, align 4, !tbaa !38
  %.not475 = icmp eq i32 %616, %618
  br i1 %.not475, label %619, label %628

619:                                              ; preds = %614
  %620 = getelementptr inbounds i8, ptr %4, i64 28
  %621 = load i32, ptr %620, align 4, !tbaa !42
  %622 = getelementptr inbounds i8, ptr %606, i64 28
  %623 = load i32, ptr %622, align 4, !tbaa !42
  %.not476 = icmp eq i32 %621, %623
  br i1 %.not476, label %624, label %628

624:                                              ; preds = %619
  %625 = load i32, ptr %305, align 4, !tbaa !30
  %626 = getelementptr inbounds i8, ptr %606, i64 32
  %627 = load i32, ptr %626, align 4, !tbaa !30
  %.not477 = icmp eq i32 %625, %627
  br i1 %.not477, label %731, label %628

628:                                              ; preds = %624, %619, %614, %609, %603
  %629 = load i32, ptr %117, align 4, !tbaa !14
  %630 = and i32 %629, 131072
  %.not478 = icmp eq i32 %630, 0
  br i1 %.not478, label %631, label %634

631:                                              ; preds = %628
  %632 = load i8, ptr %421, align 1, !tbaa !25
  %633 = icmp sgt i8 %632, -1
  br i1 %633, label %634, label %660

634:                                              ; preds = %628, %631
  %635 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %636 = icmp ugt i8 %635, 1
  br i1 %636, label %637, label %731, !prof !13

637:                                              ; preds = %634
  %638 = load i8, ptr %421, align 1, !tbaa !25
  %639 = icmp slt i8 %638, 0
  %640 = select i1 %639, ptr @.str.86, ptr @.str.87
  %641 = getelementptr inbounds i8, ptr %606, i64 24
  %642 = load i32, ptr %641, align 4, !tbaa !38
  %643 = getelementptr inbounds i8, ptr %606, i64 32
  %644 = load i32, ptr %643, align 4, !tbaa !30
  %645 = getelementptr inbounds i8, ptr %606, i64 28
  %646 = load i32, ptr %645, align 4, !tbaa !42
  %647 = getelementptr inbounds i8, ptr %606, i64 22
  %648 = load i16, ptr %647, align 2, !tbaa !44
  %649 = call i32 @pv2pages(i16 noundef zeroext %648) #16
  %650 = call i32 @pv2pages(i16 noundef zeroext %608) #16
  %651 = getelementptr inbounds i8, ptr %4, i64 24
  %652 = load i32, ptr %651, align 4, !tbaa !38
  %653 = load i32, ptr %305, align 4, !tbaa !30
  %654 = getelementptr inbounds i8, ptr %4, i64 28
  %655 = load i32, ptr %654, align 4, !tbaa !42
  %656 = getelementptr inbounds i8, ptr %4, i64 22
  %657 = load i16, ptr %656, align 2, !tbaa !44
  %658 = call i32 @pv2pages(i16 noundef zeroext %657) #16
  %659 = call i32 @pv2pages(i16 noundef zeroext %604) #16
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 867, ptr noundef nonnull @.str.85, ptr noundef nonnull %640, i32 noundef %642, i32 noundef %644, i32 noundef %646, i32 noundef %649, i32 noundef %650, i32 noundef %652, i32 noundef %653, i32 noundef %655, i32 noundef %658, i32 noundef %659) #13
  br label %731

660:                                              ; preds = %631
  %661 = load i64, ptr %11, align 8, !tbaa !75
  %662 = call i64 @safe64_txnid_next(i64 noundef %661)
  %663 = icmp ugt i64 %662, -4294967297
  %664 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  br i1 %663, label %665, label %667, !prof !13

665:                                              ; preds = %660
  %.not482 = icmp eq i8 %664, 0
  br i1 %.not482, label %.thread528, label %666, !prof !24

666:                                              ; preds = %665
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 871, ptr noundef nonnull @.str.88, i32 noundef -30788) #13
  br label %.thread528

667:                                              ; preds = %660
  %668 = icmp ugt i8 %664, 2
  br i1 %668, label %669, label %694, !prof !13

669:                                              ; preds = %667
  %670 = load ptr, ptr %605, align 8, !tbaa !30
  %671 = getelementptr inbounds i8, ptr %670, i64 20
  %672 = getelementptr inbounds i8, ptr %670, i64 24
  %673 = load i32, ptr %672, align 4, !tbaa !38
  %674 = getelementptr inbounds i8, ptr %670, i64 32
  %675 = load i32, ptr %674, align 4, !tbaa !30
  %676 = getelementptr inbounds i8, ptr %670, i64 28
  %677 = load i32, ptr %676, align 4, !tbaa !42
  %678 = getelementptr inbounds i8, ptr %670, i64 22
  %679 = load i16, ptr %678, align 2, !tbaa !44
  %680 = call i32 @pv2pages(i16 noundef zeroext %679) #16
  %681 = load i16, ptr %671, align 4, !tbaa !43
  %682 = call i32 @pv2pages(i16 noundef zeroext %681) #16
  %683 = load i64, ptr %11, align 8, !tbaa !75
  %684 = getelementptr inbounds i8, ptr %4, i64 24
  %685 = load i32, ptr %684, align 4, !tbaa !38
  %686 = load i32, ptr %305, align 4, !tbaa !30
  %687 = getelementptr inbounds i8, ptr %4, i64 28
  %688 = load i32, ptr %687, align 4, !tbaa !42
  %689 = getelementptr inbounds i8, ptr %4, i64 22
  %690 = load i16, ptr %689, align 2, !tbaa !44
  %691 = call i32 @pv2pages(i16 noundef zeroext %690) #16
  %692 = load i16, ptr %125, align 4, !tbaa !43
  %693 = call i32 @pv2pages(i16 noundef zeroext %692) #16
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 880, ptr noundef nonnull @.str.89, i32 noundef %673, i32 noundef %675, i32 noundef %677, i32 noundef %680, i32 noundef %682, i64 noundef %683, i32 noundef %685, i32 noundef %686, i32 noundef %688, i32 noundef %691, i32 noundef %693, i64 noundef %662) #13
  br label %694

694:                                              ; preds = %667, %669
  %695 = getelementptr inbounds i8, ptr %4, i64 8
  %696 = load i64, ptr %695, align 4, !tbaa !30
  %697 = load i64, ptr %11, align 8, !tbaa !75
  %.not479 = icmp eq i64 %696, %697
  br i1 %.not479, label %699, label %698, !prof !24

698:                                              ; preds = %694
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.90, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 882) #14
  unreachable

699:                                              ; preds = %694
  call void @meta_set_txnid(ptr noundef nonnull %0, ptr noundef nonnull %4, i64 noundef %662)
  %700 = load i32, ptr %117, align 4, !tbaa !14
  %701 = or i32 %700, 1073741824
  %702 = call i32 @dxb_sync_locked(ptr noundef nonnull %0, i32 noundef %701, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %.not480 = icmp eq i32 %702, 0
  br i1 %.not480, label %731, label %703

703:                                              ; preds = %699
  %704 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not481 = icmp eq i8 %704, 0
  br i1 %.not481, label %.thread528, label %705, !prof !24

705:                                              ; preds = %703
  %706 = load ptr, ptr %605, align 8, !tbaa !30
  %707 = getelementptr inbounds i8, ptr %706, i64 20
  %708 = getelementptr inbounds i8, ptr %706, i64 24
  %709 = load i32, ptr %708, align 4, !tbaa !38
  %710 = getelementptr inbounds i8, ptr %706, i64 32
  %711 = load i32, ptr %710, align 4, !tbaa !30
  %712 = getelementptr inbounds i8, ptr %706, i64 28
  %713 = load i32, ptr %712, align 4, !tbaa !42
  %714 = getelementptr inbounds i8, ptr %706, i64 22
  %715 = load i16, ptr %714, align 2, !tbaa !44
  %716 = call i32 @pv2pages(i16 noundef zeroext %715) #16
  %717 = load i16, ptr %707, align 4, !tbaa !43
  %718 = call i32 @pv2pages(i16 noundef zeroext %717) #16
  %719 = load i64, ptr %11, align 8, !tbaa !75
  %720 = getelementptr inbounds i8, ptr %4, i64 24
  %721 = load i32, ptr %720, align 4, !tbaa !38
  %722 = load i32, ptr %305, align 4, !tbaa !30
  %723 = getelementptr inbounds i8, ptr %4, i64 28
  %724 = load i32, ptr %723, align 4, !tbaa !42
  %725 = getelementptr inbounds i8, ptr %4, i64 22
  %726 = load i16, ptr %725, align 2, !tbaa !44
  %727 = call i32 @pv2pages(i16 noundef zeroext %726) #16
  %728 = load i16, ptr %125, align 4, !tbaa !43
  %729 = call i32 @pv2pages(i16 noundef zeroext %728) #16
  %730 = load i64, ptr %695, align 4, !tbaa !30
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 892, ptr noundef nonnull @.str.91, i32 noundef %702, i32 noundef %709, i32 noundef %711, i32 noundef %713, i32 noundef %716, i32 noundef %718, i64 noundef %719, i32 noundef %721, i32 noundef %722, i32 noundef %724, i32 noundef %727, i32 noundef %729, i64 noundef %730) #13
  br label %.thread528

731:                                              ; preds = %699, %637, %634, %624
  %732 = getelementptr inbounds i8, ptr %0, i64 104
  %733 = load ptr, ptr %732, align 8, !tbaa !76
  %734 = getelementptr inbounds i8, ptr %733, i64 392
  %735 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %132) #17
  %736 = call i32 @atomic_store32(ptr noundef nonnull %734, i32 noundef %735, i32 noundef 0)
  %737 = load i32, ptr %117, align 4, !tbaa !14
  %738 = and i32 %737, 131072
  %739 = icmp eq i32 %738, 0
  br i1 %739, label %740, label %.thread537

740:                                              ; preds = %731
  %741 = load i8, ptr %421, align 1, !tbaa !25
  %742 = icmp slt i8 %741, 0
  br i1 %742, label %743, label %.thread537

743:                                              ; preds = %740
  %744 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %745 = and i8 %744, 64
  %746 = icmp eq i8 %745, 0
  br i1 %746, label %.preheader, label %.thread537

.preheader:                                       ; preds = %743, %779
  %indvars.iv = phi i64 [ %indvars.iv.next, %779 ], [ 0, %743 ]
  %747 = call ptr @pgno2page(ptr noundef %0, i64 noundef %indvars.iv) #17
  %748 = call ptr @page_meta(ptr noundef %747) #17
  %749 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %748) #17
  %.not483 = icmp eq i64 %749, 6441728281112482051
  br i1 %.not483, label %750, label %761, !prof !24

750:                                              ; preds = %.preheader
  %751 = getelementptr inbounds i8, ptr %748, i64 208
  %752 = load i64, ptr %751, align 4, !tbaa !30
  %753 = getelementptr inbounds i8, ptr %748, i64 216
  %754 = load i64, ptr %753, align 4, !tbaa !30
  %755 = or i64 %754, %752
  %756 = icmp eq i64 %755, 0
  br i1 %756, label %761, label %757

757:                                              ; preds = %750
  %758 = getelementptr inbounds i8, ptr %748, i64 40
  %759 = load i16, ptr %758, align 4, !tbaa !30
  %760 = and i16 %759, -127
  %.not484 = icmp eq i16 %760, 0
  br i1 %.not484, label %779, label %761

761:                                              ; preds = %757, %750, %.preheader
  %762 = trunc nuw nsw i64 %indvars.iv to i32
  %763 = call zeroext i1 @meta_is_used(ptr noundef nonnull %5, i32 noundef %762)
  br i1 %763, label %764, label %766

764:                                              ; preds = %761
  %765 = call i64 @constmeta_txnid(ptr noundef %748) #17
  br label %766

766:                                              ; preds = %761, %764
  %767 = phi i64 [ %765, %764 ], [ 0, %761 ]
  %768 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %769 = icmp ugt i8 %768, 2
  br i1 %769, label %770, label %773, !prof !13

770:                                              ; preds = %766
  %771 = call zeroext i1 @meta_is_steady(ptr noundef %748)
  %772 = select i1 %771, ptr @.str.94, ptr @.str.95
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 909, ptr noundef nonnull @.str.92, ptr noundef nonnull @.str.93, ptr noundef nonnull %772, i32 noundef %762, i64 noundef %767) #13
  br label %773

773:                                              ; preds = %770, %766
  %774 = call i32 @meta_override(ptr noundef %0, i64 noundef %indvars.iv, i64 noundef %767, ptr noundef %748) #13
  switch i32 %774, label %775 [
    i32 0, label %778
    i32 -30779, label %778
  ], !prof !79

775:                                              ; preds = %773
  %776 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %.not487 = icmp eq i8 %776, 0
  br i1 %.not487, label %.thread528, label %777, !prof !24

777:                                              ; preds = %775
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 917, ptr noundef nonnull @.str.96, ptr noundef nonnull @.str.97, i32 noundef %762, i64 noundef %767, i32 noundef %774) #13
  br label %.thread528

778:                                              ; preds = %773, %773
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #13
  call void @meta_tap(ptr dead_on_unwind nonnull writable sret(%struct.troika) align 8 %12, ptr noundef %0) #13
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 8 dereferenceable(32) %12, i64 32, i1 false), !tbaa.struct !77
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #13
  br label %779

779:                                              ; preds = %757, %778
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond = icmp eq i64 %indvars.iv.next, 3
  br i1 %exitcond, label %.thread537, label %.preheader, !llvm.loop !80

.thread537:                                       ; preds = %779, %743, %740, %731
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #13
  br label %.thread525

.thread528:                                       ; preds = %703, %705, %665, %666, %777, %775
  %.18 = phi i32 [ %774, %777 ], [ %774, %775 ], [ %702, %703 ], [ %702, %705 ], [ -30788, %665 ], [ -30788, %666 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #13
  br label %.thread511

.thread525:                                       ; preds = %447, %462, %460, %.thread537, %583
  %780 = getelementptr inbounds i8, ptr %0, i64 40
  %781 = load i64, ptr %780, align 8, !tbaa !36
  %782 = icmp ult i64 %132, %781
  br i1 %782, label %783, label %.thread541

783:                                              ; preds = %.thread525
  br i1 %.not435, label %.thread540, label %784

784:                                              ; preds = %783
  %785 = load i32, ptr %117, align 4, !tbaa !14
  %786 = and i32 %785, 524288
  %.not488 = icmp eq i32 %786, 0
  br i1 %.not488, label %.thread540, label %787

787:                                              ; preds = %784
  %788 = load i8, ptr %421, align 1, !tbaa !25
  %789 = icmp slt i8 %788, 0
  br i1 %789, label %790, label %.thread540

790:                                              ; preds = %787
  %791 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %792 = icmp ugt i8 %791, 2
  br i1 %792, label %793, label %799, !prof !13

793:                                              ; preds = %790
  %794 = getelementptr inbounds i8, ptr %0, i64 104
  %795 = load ptr, ptr %794, align 8, !tbaa !76
  %796 = getelementptr inbounds i8, ptr %795, i64 392
  %797 = load volatile i32, ptr %796, align 8, !tbaa !30
  %798 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %781) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 932, ptr noundef nonnull @.str.98, ptr noundef nonnull @.str.99, i32 noundef %797, i32 noundef %798) #13
  %.pre601 = load i64, ptr %780, align 8, !tbaa !36
  br label %799

799:                                              ; preds = %793, %790
  %800 = phi i64 [ %.pre601, %793 ], [ %781, %790 ]
  %801 = load ptr, ptr %314, align 8, !tbaa !30
  %802 = ptrtoint ptr %801 to i64
  %803 = add nsw i64 %132, %802
  %804 = inttoptr i64 %803 to ptr
  %805 = sub i64 %800, %132
  %806 = call i32 @madvise(ptr noundef %804, i64 noundef %805, i32 noundef 9) #13
  %.not489 = icmp eq i32 %806, 0
  br i1 %.not489, label %.thread540, label %807

807:                                              ; preds = %799
  %808 = tail call ptr @__errno_location() #16
  %809 = load i32, ptr %808, align 4, !tbaa !32
  %810 = call i32 @ignore_enosys(i32 noundef %809)
  %811 = add i32 %810, -1
  %812 = icmp ult i32 %811, -2
  br i1 %812, label %.thread511, label %.thread540, !prof !82

.thread540:                                       ; preds = %799, %783, %784, %787, %807
  %813 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !26
  %814 = icmp ugt i8 %813, 2
  %.pre603 = load i64, ptr %780, align 8, !tbaa !36
  br i1 %814, label %815, label %821, !prof !13

815:                                              ; preds = %.thread540
  %816 = getelementptr inbounds i8, ptr %0, i64 104
  %817 = load ptr, ptr %816, align 8, !tbaa !76
  %818 = getelementptr inbounds i8, ptr %817, i64 392
  %819 = load volatile i32, ptr %818, align 8, !tbaa !30
  %820 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %.pre603) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_setup, i32 noundef 942, ptr noundef nonnull @.str.98, ptr noundef nonnull @.str.17, i32 noundef %819, i32 noundef %820) #13
  %.pre602 = load i64, ptr %780, align 8, !tbaa !36
  br label %821

821:                                              ; preds = %815, %.thread540
  %822 = phi i64 [ %.pre602, %815 ], [ %.pre603, %.thread540 ]
  %823 = load ptr, ptr %314, align 8, !tbaa !30
  %824 = ptrtoint ptr %823 to i64
  %825 = add nsw i64 %132, %824
  %826 = inttoptr i64 %825 to ptr
  %827 = sub i64 %822, %132
  %828 = call i32 @madvise(ptr noundef %826, i64 noundef %827, i32 noundef 4) #13
  %.not490 = icmp eq i32 %828, 0
  br i1 %.not490, label %.thread541, label %829

829:                                              ; preds = %821
  %830 = tail call ptr @__errno_location() #16
  %831 = load i32, ptr %830, align 4, !tbaa !32
  %832 = call i32 @ignore_enosys(i32 noundef %831)
  %833 = add i32 %832, -1
  %834 = icmp ult i32 %833, -2
  br i1 %834, label %.thread511, label %.thread541, !prof !82

.thread541:                                       ; preds = %821, %829, %.thread525
  %835 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %129) #17
  %836 = call i32 @dxb_set_readahead(ptr noundef nonnull %0, i32 noundef %835, i1 noundef zeroext %377, i1 noundef zeroext true) #15
  %.not491 = icmp eq i32 %836, 0
  %.0352. = select i1 %.not491, i32 %.0352, i32 %836, !prof !24
  br label %.thread511

.thread511:                                       ; preds = %459, %445, %.thread528, %.thread515, %442, %.thread541, %829, %807, %593, %595
  %.19 = phi i32 [ %.18, %.thread528 ], [ -30796, %442 ], [ -30779, %595 ], [ -30779, %593 ], [ %810, %807 ], [ %832, %829 ], [ %.0352., %.thread541 ], [ %.7.ph, %.thread515 ], [ -30419, %459 ], [ -30796, %445 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #13
  br label %837

837:                                              ; preds = %168, %234, %.thread511, %408, %385, %396, %352, %353, %338, %340, %121, %94, %96, %62, %56, %44, %42, %40, %22, %25, %29
  %.23 = phi i32 [ 61, %29 ], [ 61, %25 ], [ %21, %22 ], [ %41, %40 ], [ %43, %42 ], [ %55, %44 ], [ %61, %56 ], [ %63, %62 ], [ -30784, %96 ], [ -30784, %94 ], [ %122, %121 ], [ %170, %168 ], [ %236, %234 ], [ -30796, %340 ], [ -30796, %338 ], [ -30419, %353 ], [ -30419, %352 ], [ %.19, %.thread511 ], [ %411, %408 ], [ %390, %385 ], [ %399, %396 ]
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %4) #13
  ret i32 %.23
}

declare i32 @mdbx_env_set_geometry(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare i32 @env_page_auxbuffer(ptr noundef) local_unnamed_addr #2

declare ptr @meta_init_triplet(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @osal_pwrite(i32 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare i32 @osal_ftruncate(i32 noundef, i64 noundef) local_unnamed_addr #2

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

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

declare ptr @durable_caption(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @cmp_int_align4(ptr noundef, ptr noundef) #7

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @cmp_lenfast(ptr noundef, ptr noundef) #7

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

declare i32 @env_setup_pagesize(ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare zeroext i16 @pages2pv(i64 noundef) local_unnamed_addr #9

declare i32 @osal_mmap(i32 noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

declare void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8, ptr noundef) local_unnamed_addr #2

declare void @meta_troika_dump(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @meta_validate_copy(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @meta_eq_mask(ptr noundef) local_unnamed_addr #2

; 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 i64 @osal_monotime() local_unnamed_addr #2

declare i32 @meta_override(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare i64 @meta_txnid(ptr noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @safe64_txnid_next(i64 noundef) local_unnamed_addr #11

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

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

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

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

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

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

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

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


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