; 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.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.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.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.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 }
%struct.page = type <{ i64, i16, i16, %union.anon.25, i32, [0 x i16] }>
%union.anon.25 = type { i32 }
%struct.MDBX_txn = type { i32, i32, i64, i64, ptr, ptr, %struct.geo, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, %struct.MDBX_canary, ptr, %union.anon.18 }
%union.anon.18 = type { %struct.anon.20 }
%struct.anon.20 = type { %struct.troika, ptr, %struct.anon.21, i8, i32, i32, i64, ptr, ptr, ptr, i64, %union.anon.22 }
%struct.anon.21 = type { %struct.MDBX_rkl, i64, %struct.MDBX_rkl }
%struct.MDBX_rkl = type { i64, i64, i32, i32, ptr, [12 x i64] }
%union.anon.22 = type { %struct.anon.23 }
%struct.anon.23 = type { i64, ptr }

@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.18 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [44 x i8], align 1
@__func__.dxb_sync_locked = external hidden unnamed_addr constant [16 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.129 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.130 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.131 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.132 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [26 x i8], align 1

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @unaligned_poke_u64(i64 noundef, ptr noalias noundef, i64 noundef) #3

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

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

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

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

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

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

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

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

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

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

declare i32 @osal_msync(ptr noundef, i64 noundef, i64 noundef, i32 noundef) #4

declare void @munlock_after(ptr noundef, i32 noundef, i64 noundef) #4

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

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

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

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

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

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

declare ptr @durable_caption(ptr noundef) #4

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

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

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

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

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

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

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

declare i64 @osal_monotime() #4

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @dxb_sync_locked(ptr noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3) #13 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %struct.meta_ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i32, align 4
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i64, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %struct.meta_ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca %struct.meta_ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca %struct.meta, align 4
  %47 = alloca i64, align 8
  %48 = alloca i32, align 4
  %49 = alloca %struct.troika, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  br label %52

52:                                               ; preds = %4
  %53 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %54 = zext i8 %53 to i32
  %55 = and i32 %54, 1
  %56 = icmp ne i32 %55, 0
  %57 = xor i1 %56, true
  %58 = xor i1 %57, true
  %59 = zext i1 %58 to i32
  %60 = sext i32 %59 to i64
  %61 = call i64 @llvm.expect.i64(i64 %60, i64 1)
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %63, label %83

63:                                               ; preds = %52
  br label %64

64:                                               ; preds = %63
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.MDBX_env, ptr %65, i32 0, i32 1
  %67 = load i32, ptr %66, align 4, !tbaa !15
  %68 = load i32, ptr %7, align 4, !tbaa !9
  %69 = xor i32 %67, %68
  %70 = and i32 %69, 524288
  %71 = icmp eq i32 %70, 0
  %72 = xor i1 %71, true
  %73 = xor i1 %72, true
  %74 = xor i1 %73, true
  %75 = zext i1 %74 to i32
  %76 = sext i32 %75 to i64
  %77 = call i64 @llvm.expect.i64(i64 %76, i64 0)
  %78 = icmp ne i64 %77, 0
  br i1 %78, label %79, label %81

79:                                               ; preds = %64
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %80, ptr noundef @.str.100, ptr noundef @__func__.dxb_sync_locked, i32 noundef 970) #14
  unreachable

81:                                               ; preds = %64
  br label %82

82:                                               ; preds = %81
  br label %83

83:                                               ; preds = %82, %52
  br label %84

84:                                               ; preds = %83
  br label %85

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

96:                                               ; preds = %85
  br label %97

97:                                               ; preds = %96
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.meta, ptr %98, i32 0, i32 6
  %100 = getelementptr inbounds %struct.anon, ptr %99, i32 0, i32 0
  %101 = getelementptr inbounds %struct.tree, ptr %100, i32 0, i32 0
  %102 = load i16, ptr %101, align 4, !tbaa !25
  %103 = zext i16 %102 to i32
  %104 = icmp eq i32 %103, 8
  %105 = xor i1 %104, true
  %106 = xor i1 %105, true
  %107 = xor i1 %106, true
  %108 = zext i1 %107 to i32
  %109 = sext i32 %108 to i64
  %110 = call i64 @llvm.expect.i64(i64 %109, i64 0)
  %111 = icmp ne i64 %110, 0
  br i1 %111, label %112, label %114

112:                                              ; preds = %97
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %113, ptr noundef @.str.101, ptr noundef @__func__.dxb_sync_locked, i32 noundef 971) #14
  unreachable

114:                                              ; preds = %97
  br label %115

115:                                              ; preds = %114
  br label %116

116:                                              ; preds = %115, %85
  br label %117

117:                                              ; preds = %116
  br label %118

118:                                              ; preds = %117
  %119 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %120 = zext i8 %119 to i32
  %121 = and i32 %120, 1
  %122 = icmp ne i32 %121, 0
  %123 = xor i1 %122, true
  %124 = xor i1 %123, true
  %125 = zext i1 %124 to i32
  %126 = sext i32 %125 to i64
  %127 = call i64 @llvm.expect.i64(i64 %126, i64 1)
  %128 = icmp ne i64 %127, 0
  br i1 %128, label %129, label %149

129:                                              ; preds = %118
  br label %130

130:                                              ; preds = %129
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.meta, ptr %131, i32 0, i32 6
  %133 = getelementptr inbounds %struct.anon, ptr %132, i32 0, i32 1
  %134 = getelementptr inbounds %struct.tree, ptr %133, i32 0, i32 0
  %135 = load i16, ptr %134, align 4, !tbaa !25
  %136 = zext i16 %135 to i32
  %137 = call zeroext i1 @check_table_flags(i32 noundef %136)
  %138 = xor i1 %137, true
  %139 = xor i1 %138, true
  %140 = xor i1 %139, true
  %141 = zext i1 %140 to i32
  %142 = sext i32 %141 to i64
  %143 = call i64 @llvm.expect.i64(i64 %142, i64 0)
  %144 = icmp ne i64 %143, 0
  br i1 %144, label %145, label %147

145:                                              ; preds = %130
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %146, ptr noundef @.str.102, ptr noundef @__func__.dxb_sync_locked, i32 noundef 972) #14
  unreachable

147:                                              ; preds = %130
  br label %148

148:                                              ; preds = %147
  br label %149

149:                                              ; preds = %148, %118
  br label %150

150:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #15
  %151 = load ptr, ptr %6, align 8, !tbaa !5
  %152 = call ptr @pgno2page(ptr noundef %151, i64 noundef 0) #16
  %153 = call ptr @page_meta(ptr noundef %152) #16
  store ptr %153, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #15
  %154 = load ptr, ptr %6, align 8, !tbaa !5
  %155 = call ptr @pgno2page(ptr noundef %154, i64 noundef 1) #16
  %156 = call ptr @page_meta(ptr noundef %155) #16
  store ptr %156, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #15
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = call ptr @pgno2page(ptr noundef %157, i64 noundef 2) #16
  %159 = call ptr @page_meta(ptr noundef %158) #16
  store ptr %159, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #15
  %160 = load ptr, ptr %6, align 8, !tbaa !5
  %161 = load ptr, ptr %9, align 8, !tbaa !5
  call void @meta_recent(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %13, ptr noundef %160, ptr noundef %161)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #15
  br label %162

162:                                              ; preds = %150
  %163 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %164 = zext i8 %163 to i32
  %165 = and i32 %164, 1
  %166 = icmp ne i32 %165, 0
  %167 = xor i1 %166, true
  %168 = xor i1 %167, true
  %169 = zext i1 %168 to i32
  %170 = sext i32 %169 to i64
  %171 = call i64 @llvm.expect.i64(i64 %170, i64 1)
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %173, label %200

173:                                              ; preds = %162
  br label %174

174:                                              ; preds = %173
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  %177 = call ptr @pgno2page(ptr noundef %176, i64 noundef 0) #16
  %178 = call ptr @page_meta(ptr noundef %177) #16
  %179 = icmp ult ptr %175, %178
  br i1 %179, label %186, label %180

180:                                              ; preds = %174
  %181 = load ptr, ptr %8, align 8, !tbaa !5
  %182 = load ptr, ptr %6, align 8, !tbaa !5
  %183 = call ptr @pgno2page(ptr noundef %182, i64 noundef 3) #16
  %184 = call ptr @page_meta(ptr noundef %183) #16
  %185 = icmp ugt ptr %181, %184
  br label %186

186:                                              ; preds = %180, %174
  %187 = phi i1 [ true, %174 ], [ %185, %180 ]
  %188 = xor i1 %187, true
  %189 = xor i1 %188, true
  %190 = xor i1 %189, true
  %191 = zext i1 %190 to i32
  %192 = sext i32 %191 to i64
  %193 = call i64 @llvm.expect.i64(i64 %192, i64 0)
  %194 = icmp ne i64 %193, 0
  br i1 %194, label %195, label %197

195:                                              ; preds = %186
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %196, ptr noundef @.str.103, ptr noundef @__func__.dxb_sync_locked, i32 noundef 979) #14
  unreachable

197:                                              ; preds = %186
  br label %198

198:                                              ; preds = %197
  br label %199

199:                                              ; preds = %198
  br label %200

200:                                              ; preds = %199, %162
  br label %201

201:                                              ; preds = %200
  br label %202

202:                                              ; preds = %201
  br label %203

203:                                              ; preds = %202
  %204 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %205 = zext i8 %204 to i32
  %206 = and i32 %205, 1
  %207 = icmp ne i32 %206, 0
  %208 = xor i1 %207, true
  %209 = xor i1 %208, true
  %210 = zext i1 %209 to i32
  %211 = sext i32 %210 to i64
  %212 = call i64 @llvm.expect.i64(i64 %211, i64 1)
  %213 = icmp ne i64 %212, 0
  br i1 %213, label %214, label %233

214:                                              ; preds = %203
  br label %215

215:                                              ; preds = %214
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.MDBX_env, ptr %216, i32 0, i32 1
  %218 = load i32, ptr %217, align 4, !tbaa !15
  %219 = and i32 %218, -2147352576
  %220 = icmp eq i32 %219, 0
  %221 = xor i1 %220, true
  %222 = xor i1 %221, true
  %223 = xor i1 %222, true
  %224 = zext i1 %223 to i32
  %225 = sext i32 %224 to i64
  %226 = call i64 @llvm.expect.i64(i64 %225, i64 0)
  %227 = icmp ne i64 %226, 0
  br i1 %227, label %228, label %230

228:                                              ; preds = %215
  %229 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %229, ptr noundef @.str.104, ptr noundef @__func__.dxb_sync_locked, i32 noundef 980) #14
  unreachable

230:                                              ; preds = %215
  br label %231

231:                                              ; preds = %230
  br label %232

232:                                              ; preds = %231
  br label %233

233:                                              ; preds = %232, %203
  br label %234

234:                                              ; preds = %233
  br label %235

235:                                              ; preds = %234
  br label %236

236:                                              ; preds = %235
  %237 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %238 = zext i8 %237 to i32
  %239 = and i32 %238, 1
  %240 = icmp ne i32 %239, 0
  %241 = xor i1 %240, true
  %242 = xor i1 %241, true
  %243 = zext i1 %242 to i32
  %244 = sext i32 %243 to i64
  %245 = call i64 @llvm.expect.i64(i64 %244, i64 1)
  %246 = icmp ne i64 %245, 0
  br i1 %246, label %247, label %270

247:                                              ; preds = %236
  br label %248

248:                                              ; preds = %247
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.meta, ptr %249, i32 0, i32 5
  %251 = getelementptr inbounds %struct.geo, ptr %250, i32 0, i32 5
  %252 = load i32, ptr %251, align 4, !tbaa !25
  %253 = load ptr, ptr %8, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.meta, ptr %253, i32 0, i32 5
  %255 = getelementptr inbounds %struct.geo, ptr %254, i32 0, i32 4
  %256 = load i32, ptr %255, align 4, !tbaa !25
  %257 = icmp ule i32 %252, %256
  %258 = xor i1 %257, true
  %259 = xor i1 %258, true
  %260 = xor i1 %259, true
  %261 = zext i1 %260 to i32
  %262 = sext i32 %261 to i64
  %263 = call i64 @llvm.expect.i64(i64 %262, i64 0)
  %264 = icmp ne i64 %263, 0
  br i1 %264, label %265, label %267

265:                                              ; preds = %248
  %266 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %266, ptr noundef @.str.105, ptr noundef @__func__.dxb_sync_locked, i32 noundef 981) #14
  unreachable

267:                                              ; preds = %248
  br label %268

268:                                              ; preds = %267
  br label %269

269:                                              ; preds = %268
  br label %270

270:                                              ; preds = %269, %236
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271
  %273 = load i32, ptr %7, align 4, !tbaa !9
  %274 = and i32 %273, 65536
  %275 = icmp ne i32 %274, 0
  br i1 %275, label %276, label %318

276:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #15
  %277 = load ptr, ptr %6, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.MDBX_env, ptr %277, i32 0, i32 7
  %279 = load ptr, ptr %278, align 8, !tbaa !26
  %280 = getelementptr inbounds %struct.shared_lck, ptr %279, i32 0, i32 3
  %281 = call i32 @atomic_load32(ptr noundef %280, i32 noundef 0)
  store i32 %281, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #15
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.MDBX_env, ptr %282, i32 0, i32 7
  %284 = load ptr, ptr %283, align 8, !tbaa !26
  %285 = getelementptr inbounds %struct.shared_lck, ptr %284, i32 0, i32 5
  %286 = call i64 @atomic_load64(ptr noundef %285, i32 noundef 0)
  store i64 %286, ptr %16, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #15
  %287 = load i32, ptr %15, align 4, !tbaa !9
  %288 = icmp ne i32 %287, 0
  br i1 %288, label %289, label %298

289:                                              ; preds = %276
  %290 = load ptr, ptr %6, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.MDBX_env, ptr %290, i32 0, i32 7
  %292 = load ptr, ptr %291, align 8, !tbaa !26
  %293 = getelementptr inbounds %struct.shared_lck, ptr %292, i32 0, i32 14
  %294 = call i64 @atomic_load64(ptr noundef %293, i32 noundef 0)
  %295 = load i32, ptr %15, align 4, !tbaa !9
  %296 = zext i32 %295 to i64
  %297 = icmp uge i64 %294, %296
  br i1 %297, label %314, label %298

298:                                              ; preds = %289, %276
  %299 = load i64, ptr %16, align 8, !tbaa !27
  %300 = icmp ne i64 %299, 0
  br i1 %300, label %301, label %317

301:                                              ; preds = %298
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.MDBX_env, ptr %302, i32 0, i32 7
  %304 = load ptr, ptr %303, align 8, !tbaa !26
  %305 = getelementptr inbounds %struct.shared_lck, ptr %304, i32 0, i32 13
  %306 = call i64 @atomic_load64(ptr noundef %305, i32 noundef 0)
  store i64 %306, ptr %17, align 8, !tbaa !27
  %307 = icmp ne i64 %306, 0
  br i1 %307, label %308, label %317

308:                                              ; preds = %301
  %309 = call i64 @osal_monotime()
  %310 = load i64, ptr %17, align 8, !tbaa !27
  %311 = sub i64 %309, %310
  %312 = load i64, ptr %16, align 8, !tbaa !27
  %313 = icmp uge i64 %311, %312
  br i1 %313, label %314, label %317

314:                                              ; preds = %308, %289
  %315 = load i32, ptr %7, align 4, !tbaa !9
  %316 = and i32 %315, 1074266112
  store i32 %316, ptr %7, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %314, %308, %301, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #15
  br label %318

318:                                              ; preds = %317, %272
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #15
  store i32 0, ptr %18, align 4, !tbaa !9
  %319 = load i32, ptr %7, align 4, !tbaa !9
  %320 = and i32 %319, 1073741824
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %322, label %838

322:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #15
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.MDBX_env, ptr %323, i32 0, i32 7
  %325 = load ptr, ptr %324, align 8, !tbaa !26
  %326 = getelementptr inbounds %struct.shared_lck, ptr %325, i32 0, i32 16
  %327 = call i32 @atomic_load32(ptr noundef %326, i32 noundef 0)
  %328 = zext i32 %327 to i64
  store i64 %328, ptr %19, align 8, !tbaa !27
  %329 = load i64, ptr %19, align 8, !tbaa !27
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.meta, ptr %330, i32 0, i32 5
  %332 = getelementptr inbounds %struct.geo, ptr %331, i32 0, i32 5
  %333 = load i32, ptr %332, align 4, !tbaa !25
  %334 = zext i32 %333 to i64
  %335 = icmp ult i64 %329, %334
  br i1 %335, label %336, label %345

336:                                              ; preds = %322
  %337 = load ptr, ptr %8, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.meta, ptr %337, i32 0, i32 5
  %339 = getelementptr inbounds %struct.geo, ptr %338, i32 0, i32 5
  %340 = load i32, ptr %339, align 4, !tbaa !25
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.MDBX_env, ptr %341, i32 0, i32 7
  %343 = load ptr, ptr %342, align 8, !tbaa !26
  %344 = getelementptr inbounds %struct.shared_lck, ptr %343, i32 0, i32 16
  store volatile i32 %340, ptr %344, align 8, !tbaa !25
  br label %834

345:                                              ; preds = %322
  %346 = load i64, ptr %19, align 8, !tbaa !27
  %347 = load ptr, ptr %8, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.meta, ptr %347, i32 0, i32 5
  %349 = getelementptr inbounds %struct.geo, ptr %348, i32 0, i32 5
  %350 = load i32, ptr %349, align 4, !tbaa !25
  %351 = zext i32 %350 to i64
  %352 = load ptr, ptr %6, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.MDBX_env, ptr %352, i32 0, i32 33
  %354 = load i64, ptr %353, align 8, !tbaa !28
  %355 = add i64 %351, %354
  %356 = icmp uge i64 %346, %355
  br i1 %356, label %357, label %833

357:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #15
  %358 = load ptr, ptr %6, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %360 = load ptr, ptr %359, align 8, !tbaa !25
  %361 = getelementptr inbounds %struct.meta, ptr %360, i32 0, i32 5
  %362 = getelementptr inbounds %struct.geo, ptr %361, i32 0, i32 5
  %363 = load i32, ptr %362, align 4, !tbaa !25
  %364 = load ptr, ptr %8, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.meta, ptr %364, i32 0, i32 5
  %366 = getelementptr inbounds %struct.geo, ptr %365, i32 0, i32 5
  %367 = load i32, ptr %366, align 4, !tbaa !25
  %368 = icmp ugt i32 %363, %367
  br i1 %368, label %369, label %375

369:                                              ; preds = %357
  %370 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %371 = load ptr, ptr %370, align 8, !tbaa !25
  %372 = getelementptr inbounds %struct.meta, ptr %371, i32 0, i32 5
  %373 = getelementptr inbounds %struct.geo, ptr %372, i32 0, i32 5
  %374 = load i32, ptr %373, align 4, !tbaa !25
  br label %380

375:                                              ; preds = %357
  %376 = load ptr, ptr %8, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.meta, ptr %376, i32 0, i32 5
  %378 = getelementptr inbounds %struct.geo, ptr %377, i32 0, i32 5
  %379 = load i32, ptr %378, align 4, !tbaa !25
  br label %380

380:                                              ; preds = %375, %369
  %381 = phi i32 [ %374, %369 ], [ %379, %375 ]
  %382 = call i32 @mvcc_snapshot_largest(ptr noundef %358, i32 noundef %381)
  store i32 %382, ptr %20, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %380
  %384 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %385 = zext i8 %384 to i32
  %386 = and i32 %385, 1
  %387 = icmp ne i32 %386, 0
  %388 = xor i1 %387, true
  %389 = xor i1 %388, true
  %390 = zext i1 %389 to i32
  %391 = sext i32 %390 to i64
  %392 = call i64 @llvm.expect.i64(i64 %391, i64 1)
  %393 = icmp ne i64 %392, 0
  br i1 %393, label %394, label %410

394:                                              ; preds = %383
  br label %395

395:                                              ; preds = %394
  %396 = load i32, ptr %20, align 4, !tbaa !9
  %397 = icmp uge i32 %396, 3
  %398 = xor i1 %397, true
  %399 = xor i1 %398, true
  %400 = xor i1 %399, true
  %401 = zext i1 %400 to i32
  %402 = sext i32 %401 to i64
  %403 = call i64 @llvm.expect.i64(i64 %402, i64 0)
  %404 = icmp ne i64 %403, 0
  br i1 %404, label %405, label %407

405:                                              ; preds = %395
  %406 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %406, ptr noundef @.str.106, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1005) #14
  unreachable

407:                                              ; preds = %395
  br label %408

408:                                              ; preds = %407
  br label %409

409:                                              ; preds = %408
  br label %410

410:                                              ; preds = %409, %383
  br label %411

411:                                              ; preds = %410
  br label %412

412:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #15
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  %414 = load i32, ptr %20, align 4, !tbaa !9
  %415 = zext i32 %414 to i64
  %416 = call i32 @pgno_align2os_pgno(ptr noundef %413, i64 noundef %415) #16
  %417 = zext i32 %416 to i64
  store i64 %417, ptr %21, align 8, !tbaa !27
  %418 = load i64, ptr %19, align 8, !tbaa !27
  %419 = load i64, ptr %21, align 8, !tbaa !27
  %420 = load ptr, ptr %6, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.MDBX_env, ptr %420, i32 0, i32 33
  %422 = load i64, ptr %421, align 8, !tbaa !28
  %423 = add i64 %419, %422
  %424 = icmp uge i64 %418, %423
  br i1 %424, label %425, label %575

425:                                              ; preds = %412
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #15
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  %427 = load i64, ptr %19, align 8, !tbaa !27
  %428 = call i64 @pgno_align2os_bytes(ptr noundef %426, i64 noundef %427) #16
  store i64 %428, ptr %22, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #15
  %429 = load ptr, ptr %6, align 8, !tbaa !5
  %430 = load i64, ptr %21, align 8, !tbaa !27
  %431 = call i64 @pgno2bytes(ptr noundef %429, i64 noundef %430) #16
  store i64 %431, ptr %23, align 8, !tbaa !27
  %432 = load i64, ptr %22, align 8, !tbaa !27
  %433 = load i64, ptr %23, align 8, !tbaa !27
  %434 = icmp ugt i64 %432, %433
  br i1 %434, label %435, label %571

435:                                              ; preds = %425
  br label %436

436:                                              ; preds = %435
  %437 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %438 = zext i8 %437 to i32
  %439 = icmp sle i32 3, %438
  %440 = xor i1 %439, true
  %441 = xor i1 %440, true
  %442 = zext i1 %441 to i32
  %443 = sext i32 %442 to i64
  %444 = call i64 @llvm.expect.i64(i64 %443, i64 0)
  %445 = icmp ne i64 %444, 0
  br i1 %445, label %446, label %449

446:                                              ; preds = %436
  %447 = load i64, ptr %21, align 8, !tbaa !27
  %448 = load i64, ptr %19, align 8, !tbaa !27
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1026, ptr noundef @.str.107, ptr noundef @.str.17, i64 noundef %447, i64 noundef %448)
  br label %449

449:                                              ; preds = %446, %436
  br label %450

450:                                              ; preds = %449
  br label %451

451:                                              ; preds = %450
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = load i64, ptr %21, align 8, !tbaa !27
  %454 = trunc i64 %453 to i32
  %455 = load ptr, ptr %6, align 8, !tbaa !5
  %456 = load ptr, ptr %6, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.MDBX_env, ptr %456, i32 0, i32 3
  %458 = getelementptr inbounds %struct.osal_mmap, ptr %457, i32 0, i32 3
  %459 = load i64, ptr %458, align 8, !tbaa !30
  %460 = call i64 @bytes_align2os_bytes(ptr noundef %455, i64 noundef %459) #16
  call void @munlock_after(ptr noundef %452, i32 noundef %454, i64 noundef %460)
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #15
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.MDBX_env, ptr %461, i32 0, i32 7
  %463 = load ptr, ptr %462, align 8, !tbaa !26
  %464 = getelementptr inbounds %struct.shared_lck, ptr %463, i32 0, i32 7
  %465 = getelementptr inbounds [2 x %union.mdbx_atomic_uint32_t], ptr %464, i64 0, i64 1
  %466 = call i32 @atomic_load32(ptr noundef %465, i32 noundef 0)
  store i32 %466, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #15
  store i32 4, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #15
  %467 = load ptr, ptr %6, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.MDBX_env, ptr %467, i32 0, i32 3
  %469 = getelementptr inbounds %struct.osal_mmap, ptr %468, i32 0, i32 0
  %470 = load ptr, ptr %469, align 8, !tbaa !25
  %471 = ptrtoint ptr %470 to i64
  %472 = load i64, ptr %23, align 8, !tbaa !27
  %473 = add nsw i64 %471, %472
  %474 = inttoptr i64 %473 to ptr
  %475 = load i64, ptr %22, align 8, !tbaa !27
  %476 = load i64, ptr %23, align 8, !tbaa !27
  %477 = sub i64 %475, %476
  %478 = load i32, ptr %25, align 4, !tbaa !9
  %479 = call i32 @madvise(ptr noundef %474, i64 noundef %477, i32 noundef %478) #15
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %485

481:                                              ; preds = %451
  %482 = call ptr @__errno_location() #17
  %483 = load i32, ptr %482, align 4, !tbaa !9
  %484 = call i32 @ignore_enosys(i32 noundef %483)
  br label %486

485:                                              ; preds = %451
  br label %486

486:                                              ; preds = %485, %481
  %487 = phi i32 [ %484, %481 ], [ 0, %485 ]
  store i32 %487, ptr %26, align 4, !tbaa !9
  %488 = load i32, ptr %26, align 4, !tbaa !9
  %489 = icmp ne i32 %488, -1
  br i1 %489, label %490, label %493

490:                                              ; preds = %486
  %491 = load i32, ptr %26, align 4, !tbaa !9
  %492 = icmp ne i32 %491, 0
  br label %493

493:                                              ; preds = %490, %486
  %494 = phi i1 [ false, %486 ], [ %492, %490 ]
  %495 = xor i1 %494, true
  %496 = xor i1 %495, true
  %497 = zext i1 %496 to i32
  %498 = sext i32 %497 to i64
  %499 = call i64 @llvm.expect.i64(i64 %498, i64 0)
  %500 = icmp ne i64 %499, 0
  br i1 %500, label %501, label %560

501:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #15
  %502 = load ptr, ptr %6, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.MDBX_env, ptr %502, i32 0, i32 7
  %504 = load ptr, ptr %503, align 8, !tbaa !26
  %505 = getelementptr inbounds %struct.shared_lck, ptr %504, i32 0, i32 7
  %506 = getelementptr inbounds [2 x %union.mdbx_atomic_uint32_t], ptr %505, i64 0, i64 0
  %507 = call i32 @atomic_load32(ptr noundef %506, i32 noundef 0)
  store i32 %507, ptr %27, align 4, !tbaa !9
  %508 = load i32, ptr %26, align 4, !tbaa !9
  %509 = icmp eq i32 %508, 22
  br i1 %509, label %510, label %533

510:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #15
  %511 = load i32, ptr %27, align 4, !tbaa !9
  %512 = load i32, ptr %24, align 4, !tbaa !9
  %513 = sub i32 %511, %512
  %514 = icmp ne i32 %513, 0
  %515 = zext i1 %514 to i64
  %516 = select i1 %514, i32 3, i32 2
  store i32 %516, ptr %28, align 4, !tbaa !9
  %517 = load i32, ptr %28, align 4, !tbaa !9
  %518 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %519 = zext i8 %518 to i32
  %520 = icmp sle i32 %517, %519
  %521 = xor i1 %520, true
  %522 = xor i1 %521, true
  %523 = zext i1 %522 to i32
  %524 = sext i32 %523 to i64
  %525 = call i64 @llvm.expect.i64(i64 %524, i64 0)
  %526 = icmp ne i64 %525, 0
  br i1 %526, label %527, label %532

527:                                              ; preds = %510
  %528 = load i32, ptr %28, align 4, !tbaa !9
  %529 = load i32, ptr %26, align 4, !tbaa !9
  %530 = load i32, ptr %27, align 4, !tbaa !9
  %531 = load i32, ptr %24, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef %528, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1048, ptr noundef @.str.18, ptr noundef @.str.108, i32 noundef %529, i32 noundef %530, i32 noundef %531)
  br label %532

532:                                              ; preds = %527, %510
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #15
  br label %556

533:                                              ; preds = %501
  br label %534

534:                                              ; preds = %533
  %535 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %536 = zext i8 %535 to i32
  %537 = icmp sle i32 1, %536
  %538 = xor i1 %537, true
  %539 = xor i1 %538, true
  %540 = zext i1 %539 to i32
  %541 = sext i32 %540 to i64
  %542 = call i64 @llvm.expect.i64(i64 %541, i64 0)
  %543 = icmp ne i64 %542, 0
  br i1 %543, label %544, label %552

544:                                              ; preds = %534
  %545 = load i64, ptr %23, align 8, !tbaa !27
  %546 = load i64, ptr %22, align 8, !tbaa !27
  %547 = load i64, ptr %23, align 8, !tbaa !27
  %548 = sub i64 %546, %547
  %549 = load i32, ptr %27, align 4, !tbaa !9
  %550 = load i32, ptr %24, align 4, !tbaa !9
  %551 = load i32, ptr %26, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1054, ptr noundef @.str.20, ptr noundef @.str.108, ptr noundef @.str.17, i64 noundef %545, i64 noundef %548, i32 noundef %549, i32 noundef %550, i32 noundef %551)
  br label %552

552:                                              ; preds = %544, %534
  br label %553

553:                                              ; preds = %552
  br label %554

554:                                              ; preds = %553
  %555 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %555, ptr %5, align 4
  store i32 1, ptr %29, align 4
  br label %557

556:                                              ; preds = %532
  store i32 0, ptr %29, align 4
  br label %557

557:                                              ; preds = %556, %554
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #15
  %558 = load i32, ptr %29, align 4
  switch i32 %558, label %568 [
    i32 0, label %559
  ]

559:                                              ; preds = %557
  br label %567

560:                                              ; preds = %493
  %561 = load i64, ptr %21, align 8, !tbaa !27
  %562 = trunc i64 %561 to i32
  %563 = load ptr, ptr %6, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.MDBX_env, ptr %563, i32 0, i32 7
  %565 = load ptr, ptr %564, align 8, !tbaa !26
  %566 = getelementptr inbounds %struct.shared_lck, ptr %565, i32 0, i32 16
  store volatile i32 %562, ptr %566, align 8, !tbaa !25
  br label %567

567:                                              ; preds = %560, %559
  store i32 0, ptr %29, align 4
  br label %568

568:                                              ; preds = %567, %557
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #15
  %569 = load i32, ptr %29, align 4
  switch i32 %569, label %572 [
    i32 0, label %570
  ]

570:                                              ; preds = %568
  br label %571

571:                                              ; preds = %570, %425
  store i32 0, ptr %29, align 4
  br label %572

572:                                              ; preds = %571, %568
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #15
  %573 = load i32, ptr %29, align 4
  switch i32 %573, label %830 [
    i32 0, label %574
  ]

574:                                              ; preds = %572
  br label %575

575:                                              ; preds = %574, %412
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #15
  %576 = load ptr, ptr %8, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.meta, ptr %576, i32 0, i32 6
  %578 = getelementptr inbounds %struct.anon, ptr %577, i32 0, i32 0
  %579 = getelementptr inbounds %struct.tree, ptr %578, i32 0, i32 1
  %580 = load i16, ptr %579, align 2, !tbaa !25
  %581 = zext i16 %580 to i32
  %582 = mul nsw i32 %581, 3
  %583 = add nsw i32 3, %582
  store i32 %583, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #15
  store i32 0, ptr %31, align 4, !tbaa !9
  %584 = load ptr, ptr %8, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.meta, ptr %584, i32 0, i32 5
  %586 = getelementptr inbounds %struct.geo, ptr %585, i32 0, i32 1
  %587 = load i16, ptr %586, align 2, !tbaa !31
  %588 = zext i16 %587 to i32
  %589 = icmp ne i32 %588, 0
  br i1 %589, label %590, label %828

590:                                              ; preds = %575
  %591 = load ptr, ptr %8, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.meta, ptr %591, i32 0, i32 5
  %593 = getelementptr inbounds %struct.geo, ptr %592, i32 0, i32 4
  %594 = load i32, ptr %593, align 4, !tbaa !25
  %595 = load ptr, ptr %8, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.meta, ptr %595, i32 0, i32 5
  %597 = getelementptr inbounds %struct.geo, ptr %596, i32 0, i32 5
  %598 = load i32, ptr %597, align 4, !tbaa !25
  %599 = sub i32 %594, %598
  %600 = load ptr, ptr %8, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.meta, ptr %600, i32 0, i32 5
  %602 = getelementptr inbounds %struct.geo, ptr %601, i32 0, i32 1
  %603 = load i16, ptr %602, align 2, !tbaa !31
  %604 = call i32 @pv2pages(i16 noundef zeroext %603) #17
  store i32 %604, ptr %31, align 4, !tbaa !9
  %605 = load i32, ptr %30, align 4, !tbaa !9
  %606 = add i32 %604, %605
  %607 = icmp ugt i32 %599, %606
  br i1 %607, label %608, label %828

608:                                              ; preds = %590
  %609 = load ptr, ptr %8, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.meta, ptr %609, i32 0, i32 5
  %611 = getelementptr inbounds %struct.geo, ptr %610, i32 0, i32 4
  %612 = load i32, ptr %611, align 4, !tbaa !25
  %613 = load i32, ptr %20, align 4, !tbaa !9
  %614 = icmp ugt i32 %612, %613
  br i1 %614, label %615, label %827

615:                                              ; preds = %608
  %616 = load ptr, ptr %8, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.meta, ptr %616, i32 0, i32 5
  %618 = getelementptr inbounds %struct.geo, ptr %617, i32 0, i32 4
  %619 = load i32, ptr %618, align 4, !tbaa !25
  %620 = load i32, ptr %20, align 4, !tbaa !9
  %621 = sub i32 %619, %620
  %622 = load i32, ptr %31, align 4, !tbaa !9
  %623 = load i32, ptr %30, align 4, !tbaa !9
  %624 = add i32 %622, %623
  %625 = icmp ugt i32 %621, %624
  br i1 %625, label %626, label %827

626:                                              ; preds = %615
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #15
  %627 = load ptr, ptr %8, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.meta, ptr %627, i32 0, i32 5
  %629 = getelementptr inbounds %struct.geo, ptr %628, i32 0, i32 0
  %630 = load i16, ptr %629, align 4, !tbaa !35
  %631 = zext i16 %630 to i32
  %632 = icmp ne i32 %631, 0
  br i1 %632, label %633, label %639

633:                                              ; preds = %626
  %634 = load ptr, ptr %8, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.meta, ptr %634, i32 0, i32 5
  %636 = getelementptr inbounds %struct.geo, ptr %635, i32 0, i32 0
  %637 = load i16, ptr %636, align 4, !tbaa !35
  %638 = call i32 @pv2pages(i16 noundef zeroext %637) #17
  br label %641

639:                                              ; preds = %626
  %640 = load i32, ptr %31, align 4, !tbaa !9
  br label %641

641:                                              ; preds = %639, %633
  %642 = phi i32 [ %638, %633 ], [ %640, %639 ]
  store i32 %642, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #15
  %643 = load i32, ptr %20, align 4, !tbaa !9
  %644 = load i32, ptr %30, align 4, !tbaa !9
  %645 = add i32 %643, %644
  store i32 %645, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #15
  %646 = load ptr, ptr %6, align 8, !tbaa !5
  %647 = load i32, ptr %33, align 4, !tbaa !9
  %648 = zext i32 %647 to i64
  %649 = load i32, ptr %32, align 4, !tbaa !9
  %650 = zext i32 %649 to i64
  %651 = add i64 %648, %650
  %652 = load i32, ptr %33, align 4, !tbaa !9
  %653 = load i32, ptr %32, align 4, !tbaa !9
  %654 = urem i32 %652, %653
  %655 = zext i32 %654 to i64
  %656 = sub i64 %651, %655
  %657 = call i32 @pgno_align2os_pgno(ptr noundef %646, i64 noundef %656) #16
  store i32 %657, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #15
  %658 = load i32, ptr %34, align 4, !tbaa !9
  %659 = load ptr, ptr %8, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.meta, ptr %659, i32 0, i32 5
  %661 = getelementptr inbounds %struct.geo, ptr %660, i32 0, i32 2
  %662 = load i32, ptr %661, align 4, !tbaa !36
  %663 = icmp ugt i32 %658, %662
  br i1 %663, label %664, label %666

664:                                              ; preds = %641
  %665 = load i32, ptr %34, align 4, !tbaa !9
  br label %671

666:                                              ; preds = %641
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.meta, ptr %667, i32 0, i32 5
  %669 = getelementptr inbounds %struct.geo, ptr %668, i32 0, i32 2
  %670 = load i32, ptr %669, align 4, !tbaa !36
  br label %671

671:                                              ; preds = %666, %664
  %672 = phi i32 [ %665, %664 ], [ %670, %666 ]
  store i32 %672, ptr %35, align 4, !tbaa !9
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.meta, ptr %673, i32 0, i32 5
  %675 = getelementptr inbounds %struct.geo, ptr %674, i32 0, i32 4
  %676 = load i32, ptr %675, align 4, !tbaa !25
  %677 = load i32, ptr %35, align 4, !tbaa !9
  %678 = icmp ugt i32 %676, %677
  br i1 %678, label %679, label %823

679:                                              ; preds = %671
  %680 = load ptr, ptr %9, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.troika, ptr %680, i32 0, i32 0
  %682 = load i8, ptr %681, align 8, !tbaa !37
  %683 = zext i8 %682 to i32
  %684 = and i32 %683, 7
  %685 = icmp ne i32 %684, 0
  br i1 %685, label %686, label %689

686:                                              ; preds = %679
  %687 = load i32, ptr %7, align 4, !tbaa !9
  %688 = and i32 %687, 1074266112
  store i32 %688, ptr %7, align 4, !tbaa !9
  br label %689

689:                                              ; preds = %686, %679
  %690 = load ptr, ptr %8, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.meta, ptr %690, i32 0, i32 5
  %692 = getelementptr inbounds %struct.geo, ptr %691, i32 0, i32 4
  %693 = load i32, ptr %692, align 4, !tbaa !25
  %694 = load i32, ptr %35, align 4, !tbaa !9
  %695 = sub i32 %693, %694
  store i32 %695, ptr %18, align 4, !tbaa !9
  %696 = load i32, ptr %35, align 4, !tbaa !9
  %697 = load ptr, ptr %8, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.meta, ptr %697, i32 0, i32 5
  %699 = getelementptr inbounds %struct.geo, ptr %698, i32 0, i32 4
  store i32 %696, ptr %699, align 4, !tbaa !25
  %700 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 0
  %701 = load i64, ptr %700, align 8, !tbaa !39
  %702 = load ptr, ptr %8, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.meta, ptr %702, i32 0, i32 1
  %704 = load i64, ptr %703, align 4, !tbaa !25
  %705 = icmp eq i64 %701, %704
  %706 = xor i1 %705, true
  %707 = xor i1 %706, true
  %708 = zext i1 %707 to i32
  %709 = sext i32 %708 to i64
  %710 = call i64 @llvm.expect.i64(i64 %709, i64 0)
  %711 = icmp ne i64 %710, 0
  br i1 %711, label %712, label %822

712:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #15
  %713 = load ptr, ptr %8, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.meta, ptr %713, i32 0, i32 1
  %715 = load i64, ptr %714, align 4, !tbaa !25
  %716 = call i64 @safe64_txnid_next(i64 noundef %715)
  store i64 %716, ptr %36, align 8, !tbaa !27
  br label %717

717:                                              ; preds = %712
  %718 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %719 = zext i8 %718 to i32
  %720 = icmp sle i32 3, %719
  %721 = xor i1 %720, true
  %722 = xor i1 %721, true
  %723 = zext i1 %722 to i32
  %724 = sext i32 %723 to i64
  %725 = call i64 @llvm.expect.i64(i64 %724, i64 0)
  %726 = icmp ne i64 %725, 0
  br i1 %726, label %727, label %732

727:                                              ; preds = %717
  %728 = load ptr, ptr %8, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.meta, ptr %728, i32 0, i32 1
  %730 = load i64, ptr %729, align 4, !tbaa !25
  %731 = load i64, ptr %36, align 8, !tbaa !27
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1084, ptr noundef @.str.109, i64 noundef %730, i64 noundef %731)
  br label %732

732:                                              ; preds = %727, %717
  br label %733

733:                                              ; preds = %732
  br label %734

734:                                              ; preds = %733
  br label %735

735:                                              ; preds = %734
  %736 = load ptr, ptr %6, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.MDBX_env, ptr %736, i32 0, i32 24
  %738 = load ptr, ptr %737, align 8, !tbaa !41
  %739 = icmp ne ptr %738, null
  br i1 %739, label %740, label %746

740:                                              ; preds = %735
  %741 = load ptr, ptr %6, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.MDBX_env, ptr %741, i32 0, i32 39
  %743 = load ptr, ptr %742, align 8, !tbaa !42
  %744 = icmp ne ptr %743, null
  %745 = xor i1 %744, true
  br label %746

746:                                              ; preds = %740, %735
  %747 = phi i1 [ true, %735 ], [ %745, %740 ]
  %748 = xor i1 %747, true
  %749 = xor i1 %748, true
  %750 = xor i1 %749, true
  %751 = zext i1 %750 to i32
  %752 = sext i32 %751 to i64
  %753 = call i64 @llvm.expect.i64(i64 %752, i64 0)
  %754 = icmp ne i64 %753, 0
  br i1 %754, label %755, label %757

755:                                              ; preds = %746
  %756 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %756, ptr noundef @.str.110, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1085) #14
  unreachable

757:                                              ; preds = %746
  br label %758

758:                                              ; preds = %757
  br label %759

759:                                              ; preds = %758
  %760 = load i64, ptr %36, align 8, !tbaa !27
  %761 = icmp ugt i64 %760, -4294967297
  %762 = xor i1 %761, true
  %763 = xor i1 %762, true
  %764 = zext i1 %763 to i32
  %765 = sext i32 %764 to i64
  %766 = call i64 @llvm.expect.i64(i64 %765, i64 0)
  %767 = icmp ne i64 %766, 0
  br i1 %767, label %768, label %784

768:                                              ; preds = %759
  store i32 -30788, ptr %14, align 4, !tbaa !9
  br label %769

769:                                              ; preds = %768
  %770 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %771 = zext i8 %770 to i32
  %772 = icmp sle i32 1, %771
  %773 = xor i1 %772, true
  %774 = xor i1 %773, true
  %775 = zext i1 %774 to i32
  %776 = sext i32 %775 to i64
  %777 = call i64 @llvm.expect.i64(i64 %776, i64 0)
  %778 = icmp ne i64 %777, 0
  br i1 %778, label %779, label %781

779:                                              ; preds = %769
  %780 = load i32, ptr %14, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1088, ptr noundef @.str.88, i32 noundef %780)
  br label %781

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

782:                                              ; preds = %781
  br label %783

783:                                              ; preds = %782
  store i32 40, ptr %29, align 4
  br label %819

784:                                              ; preds = %759
  %785 = load ptr, ptr %6, align 8, !tbaa !5
  %786 = load ptr, ptr %8, align 8, !tbaa !5
  %787 = load i64, ptr %36, align 8, !tbaa !27
  call void @meta_set_txnid(ptr noundef %785, ptr noundef %786, i64 noundef %787)
  br label %788

788:                                              ; preds = %784
  %789 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %790 = zext i8 %789 to i32
  %791 = and i32 %790, 1
  %792 = icmp ne i32 %791, 0
  %793 = xor i1 %792, true
  %794 = xor i1 %793, true
  %795 = zext i1 %794 to i32
  %796 = sext i32 %795 to i64
  %797 = call i64 @llvm.expect.i64(i64 %796, i64 1)
  %798 = icmp ne i64 %797, 0
  br i1 %798, label %799, label %816

799:                                              ; preds = %788
  br label %800

800:                                              ; preds = %799
  %801 = load ptr, ptr %6, align 8, !tbaa !5
  %802 = load ptr, ptr %8, align 8, !tbaa !5
  %803 = call zeroext i1 @coherency_check_meta(ptr noundef %801, ptr noundef %802, i1 noundef zeroext true)
  %804 = xor i1 %803, true
  %805 = xor i1 %804, true
  %806 = xor i1 %805, true
  %807 = zext i1 %806 to i32
  %808 = sext i32 %807 to i64
  %809 = call i64 @llvm.expect.i64(i64 %808, i64 0)
  %810 = icmp ne i64 %809, 0
  br i1 %810, label %811, label %813

811:                                              ; preds = %800
  %812 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %812, ptr noundef @.str.111, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1092) #14
  unreachable

813:                                              ; preds = %800
  br label %814

814:                                              ; preds = %813
  br label %815

815:                                              ; preds = %814
  br label %816

816:                                              ; preds = %815, %788
  br label %817

817:                                              ; preds = %816
  br label %818

818:                                              ; preds = %817
  store i32 0, ptr %29, align 4
  br label %819

819:                                              ; preds = %818, %783
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #15
  %820 = load i32, ptr %29, align 4
  switch i32 %820, label %824 [
    i32 0, label %821
  ]

821:                                              ; preds = %819
  br label %822

822:                                              ; preds = %821, %689
  br label %823

823:                                              ; preds = %822, %671
  store i32 0, ptr %29, align 4
  br label %824

824:                                              ; preds = %823, %819
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #15
  %825 = load i32, ptr %29, align 4
  switch i32 %825, label %829 [
    i32 0, label %826
  ]

826:                                              ; preds = %824
  br label %827

827:                                              ; preds = %826, %615, %608
  br label %828

828:                                              ; preds = %827, %590, %575
  store i32 0, ptr %29, align 4
  br label %829

829:                                              ; preds = %828, %824
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #15
  br label %830

830:                                              ; preds = %829, %572
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #15
  %831 = load i32, ptr %29, align 4
  switch i32 %831, label %835 [
    i32 0, label %832
  ]

832:                                              ; preds = %830
  br label %833

833:                                              ; preds = %832, %345
  br label %834

834:                                              ; preds = %833, %336
  store i32 0, ptr %29, align 4
  br label %835

835:                                              ; preds = %834, %830
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #15
  %836 = load i32, ptr %29, align 4
  switch i32 %836, label %2218 [
    i32 0, label %837
    i32 40, label %2212
  ]

837:                                              ; preds = %835
  br label %838

838:                                              ; preds = %837, %318
  store i32 0, ptr %14, align 4, !tbaa !9
  %839 = load ptr, ptr %6, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.MDBX_env, ptr %839, i32 0, i32 7
  %841 = load ptr, ptr %840, align 8, !tbaa !26
  %842 = getelementptr inbounds %struct.shared_lck, ptr %841, i32 0, i32 14
  %843 = call i64 @atomic_load64(ptr noundef %842, i32 noundef 0)
  %844 = icmp ne i64 %843, 0
  br i1 %844, label %845, label %981

845:                                              ; preds = %838
  br label %846

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

857:                                              ; preds = %846
  br label %858

858:                                              ; preds = %857
  %859 = load i32, ptr %7, align 4, !tbaa !9
  %860 = load ptr, ptr %6, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.MDBX_env, ptr %860, i32 0, i32 1
  %862 = load i32, ptr %861, align 4, !tbaa !15
  %863 = xor i32 %859, %862
  %864 = and i32 %863, 524288
  %865 = icmp eq i32 %864, 0
  %866 = xor i1 %865, true
  %867 = xor i1 %866, true
  %868 = xor i1 %867, true
  %869 = zext i1 %868 to i32
  %870 = sext i32 %869 to i64
  %871 = call i64 @llvm.expect.i64(i64 %870, i64 0)
  %872 = icmp ne i64 %871, 0
  br i1 %872, label %873, label %875

873:                                              ; preds = %858
  %874 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %874, ptr noundef @.str.112, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1103) #14
  unreachable

875:                                              ; preds = %858
  br label %876

876:                                              ; preds = %875
  br label %877

877:                                              ; preds = %876
  br label %878

878:                                              ; preds = %877, %846
  br label %879

879:                                              ; preds = %878
  br label %880

880:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #15
  store i32 0, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #15
  store i32 0, ptr %38, align 4, !tbaa !9
  %881 = load i32, ptr %7, align 4, !tbaa !9
  %882 = and i32 %881, 65536
  %883 = icmp eq i32 %882, 0
  br i1 %883, label %884, label %908

884:                                              ; preds = %880
  store i32 1, ptr %38, align 4, !tbaa !9
  store i32 2, ptr %37, align 4, !tbaa !9
  %885 = load ptr, ptr %8, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.meta, ptr %885, i32 0, i32 5
  %887 = getelementptr inbounds %struct.geo, ptr %886, i32 0, i32 5
  %888 = load i32, ptr %887, align 4, !tbaa !25
  %889 = load ptr, ptr %6, align 8, !tbaa !5
  %890 = load ptr, ptr %9, align 8, !tbaa !5
  call void @meta_prefer_steady(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %39, ptr noundef %889, ptr noundef %890)
  %891 = getelementptr inbounds %struct.meta_ptr, ptr %39, i32 0, i32 1
  %892 = load ptr, ptr %891, align 8, !tbaa !25
  %893 = getelementptr inbounds %struct.meta, ptr %892, i32 0, i32 5
  %894 = getelementptr inbounds %struct.geo, ptr %893, i32 0, i32 4
  %895 = load i32, ptr %894, align 4, !tbaa !25
  %896 = icmp ugt i32 %888, %895
  br i1 %896, label %897, label %900

897:                                              ; preds = %884
  %898 = load i32, ptr %37, align 4, !tbaa !9
  %899 = or i32 %898, 4
  store i32 %899, ptr %37, align 4, !tbaa !9
  br label %900

900:                                              ; preds = %897, %884
  %901 = load i32, ptr %7, align 4, !tbaa !9
  %902 = and i32 %901, 262144
  %903 = icmp ne i32 %902, 0
  br i1 %903, label %904, label %907

904:                                              ; preds = %900
  %905 = load i32, ptr %37, align 4, !tbaa !9
  %906 = or i32 %905, 8
  store i32 %906, ptr %37, align 4, !tbaa !9
  br label %907

907:                                              ; preds = %904, %900
  br label %921

908:                                              ; preds = %880
  %909 = load ptr, ptr %6, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.MDBX_env, ptr %909, i32 0, i32 36
  %911 = load i8, ptr %910, align 8, !tbaa !43, !range !44, !noundef !45
  %912 = trunc i8 %911 to i1
  %913 = xor i1 %912, true
  %914 = xor i1 %913, true
  %915 = zext i1 %914 to i32
  %916 = sext i32 %915 to i64
  %917 = call i64 @llvm.expect.i64(i64 %916, i64 0)
  %918 = icmp ne i64 %917, 0
  br i1 %918, label %919, label %920

919:                                              ; preds = %908
  store i32 49, ptr %29, align 4
  br label %978

920:                                              ; preds = %908
  br label %921

921:                                              ; preds = %920, %907
  %922 = load i32, ptr %7, align 4, !tbaa !9
  %923 = and i32 %922, 524288
  %924 = icmp ne i32 %923, 0
  br i1 %924, label %925, label %946

925:                                              ; preds = %921
  %926 = load i32, ptr %38, align 4, !tbaa !9
  %927 = zext i32 %926 to i64
  %928 = load ptr, ptr %6, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.MDBX_env, ptr %928, i32 0, i32 7
  %930 = load ptr, ptr %929, align 8, !tbaa !26
  %931 = getelementptr inbounds %struct.shared_lck, ptr %930, i32 0, i32 9
  %932 = getelementptr inbounds %struct.pgops, ptr %931, i32 0, i32 8
  %933 = load volatile i64, ptr %932, align 64, !tbaa !25
  %934 = add i64 %933, %927
  store volatile i64 %934, ptr %932, align 64, !tbaa !25
  %935 = load ptr, ptr %6, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.MDBX_env, ptr %935, i32 0, i32 3
  %937 = load ptr, ptr %6, align 8, !tbaa !5
  %938 = load ptr, ptr %8, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.meta, ptr %938, i32 0, i32 5
  %940 = getelementptr inbounds %struct.geo, ptr %939, i32 0, i32 5
  %941 = load i32, ptr %940, align 4, !tbaa !25
  %942 = zext i32 %941 to i64
  %943 = call i64 @pgno_align2os_bytes(ptr noundef %937, i64 noundef %942) #16
  %944 = load i32, ptr %37, align 4, !tbaa !9
  %945 = call i32 @osal_msync(ptr noundef %936, i64 noundef 0, i64 noundef %943, i32 noundef %944)
  store i32 %945, ptr %14, align 4, !tbaa !9
  br label %962

946:                                              ; preds = %921
  %947 = load i32, ptr %38, align 4, !tbaa !9
  %948 = zext i32 %947 to i64
  %949 = load ptr, ptr %6, align 8, !tbaa !5
  %950 = getelementptr inbounds %struct.MDBX_env, ptr %949, i32 0, i32 7
  %951 = load ptr, ptr %950, align 8, !tbaa !26
  %952 = getelementptr inbounds %struct.shared_lck, ptr %951, i32 0, i32 9
  %953 = getelementptr inbounds %struct.pgops, ptr %952, i32 0, i32 9
  %954 = load volatile i64, ptr %953, align 8, !tbaa !25
  %955 = add i64 %954, %948
  store volatile i64 %955, ptr %953, align 8, !tbaa !25
  %956 = load ptr, ptr %6, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.MDBX_env, ptr %956, i32 0, i32 3
  %958 = getelementptr inbounds %struct.osal_mmap, ptr %957, i32 0, i32 1
  %959 = load i32, ptr %958, align 8, !tbaa !46
  %960 = load i32, ptr %37, align 4, !tbaa !9
  %961 = call i32 @osal_fsync(i32 noundef %959, i32 noundef %960)
  store i32 %961, ptr %14, align 4, !tbaa !9
  br label %962

962:                                              ; preds = %946, %925
  %963 = load i32, ptr %14, align 4, !tbaa !9
  %964 = icmp ne i32 %963, 0
  %965 = xor i1 %964, true
  %966 = xor i1 %965, true
  %967 = zext i1 %966 to i32
  %968 = sext i32 %967 to i64
  %969 = call i64 @llvm.expect.i64(i64 %968, i64 0)
  %970 = icmp ne i64 %969, 0
  br i1 %970, label %971, label %972

971:                                              ; preds = %962
  store i32 40, ptr %29, align 4
  br label %978

972:                                              ; preds = %962
  %973 = load i32, ptr %7, align 4, !tbaa !9
  %974 = and i32 %973, 65536
  %975 = icmp ne i32 %974, 0
  %976 = zext i1 %975 to i64
  %977 = select i1 %975, i32 -1, i32 0
  store i32 %977, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %29, align 4
  br label %978

978:                                              ; preds = %972, %971, %919
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #15
  %979 = load i32, ptr %29, align 4
  switch i32 %979, label %2218 [
    i32 0, label %980
    i32 49, label %1057
    i32 40, label %2212
  ]

980:                                              ; preds = %978
  br label %981

981:                                              ; preds = %980, %838
  br label %982

982:                                              ; preds = %981
  %983 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %984 = zext i8 %983 to i32
  %985 = and i32 %984, 1
  %986 = icmp ne i32 %985, 0
  %987 = xor i1 %986, true
  %988 = xor i1 %987, true
  %989 = zext i1 %988 to i32
  %990 = sext i32 %989 to i64
  %991 = call i64 @llvm.expect.i64(i64 %990, i64 1)
  %992 = icmp ne i64 %991, 0
  br i1 %992, label %993, label %1010

993:                                              ; preds = %982
  br label %994

994:                                              ; preds = %993
  %995 = load ptr, ptr %6, align 8, !tbaa !5
  %996 = load ptr, ptr %8, align 8, !tbaa !5
  %997 = call zeroext i1 @coherency_check_meta(ptr noundef %995, ptr noundef %996, i1 noundef zeroext true)
  %998 = xor i1 %997, true
  %999 = xor i1 %998, true
  %1000 = xor i1 %999, true
  %1001 = zext i1 %1000 to i32
  %1002 = sext i32 %1001 to i64
  %1003 = call i64 @llvm.expect.i64(i64 %1002, i64 0)
  %1004 = icmp ne i64 %1003, 0
  br i1 %1004, label %1005, label %1007

1005:                                             ; preds = %994
  %1006 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1006, ptr noundef @.str.111, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1135) #14
  unreachable

1007:                                             ; preds = %994
  br label %1008

1008:                                             ; preds = %1007
  br label %1009

1009:                                             ; preds = %1008
  br label %1010

1010:                                             ; preds = %1009, %982
  br label %1011

1011:                                             ; preds = %1010
  br label %1012

1012:                                             ; preds = %1011
  %1013 = load i32, ptr %14, align 4, !tbaa !9
  %1014 = icmp eq i32 %1013, 0
  br i1 %1014, label %1015, label %1027

1015:                                             ; preds = %1012
  %1016 = load ptr, ptr %8, align 8, !tbaa !5
  call void @meta_sign_as_steady(ptr noundef %1016)
  %1017 = load ptr, ptr %6, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.MDBX_env, ptr %1017, i32 0, i32 7
  %1019 = load ptr, ptr %1018, align 8, !tbaa !26
  %1020 = getelementptr inbounds %struct.shared_lck, ptr %1019, i32 0, i32 13
  %1021 = call i64 @atomic_store64(ptr noundef %1020, i64 noundef 0, i32 noundef 0)
  %1022 = load ptr, ptr %6, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.MDBX_env, ptr %1022, i32 0, i32 7
  %1024 = load ptr, ptr %1023, align 8, !tbaa !26
  %1025 = getelementptr inbounds %struct.shared_lck, ptr %1024, i32 0, i32 14
  %1026 = call i64 @atomic_store64(ptr noundef %1025, i64 noundef 0, i32 noundef 0)
  br label %1095

1027:                                             ; preds = %1012
  br label %1028

1028:                                             ; preds = %1027
  %1029 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1030 = zext i8 %1029 to i32
  %1031 = and i32 %1030, 1
  %1032 = icmp ne i32 %1031, 0
  %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 1)
  %1038 = icmp ne i64 %1037, 0
  br i1 %1038, label %1039, label %1054

1039:                                             ; preds = %1028
  br label %1040

1040:                                             ; preds = %1039
  %1041 = load i32, ptr %14, align 4, !tbaa !9
  %1042 = icmp eq i32 %1041, -1
  %1043 = xor i1 %1042, true
  %1044 = xor i1 %1043, true
  %1045 = xor i1 %1044, true
  %1046 = zext i1 %1045 to i32
  %1047 = sext i32 %1046 to i64
  %1048 = call i64 @llvm.expect.i64(i64 %1047, i64 0)
  %1049 = icmp ne i64 %1048, 0
  br i1 %1049, label %1050, label %1051

1050:                                             ; preds = %1040
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.113, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1143) #14
  unreachable

1051:                                             ; preds = %1040
  br label %1052

1052:                                             ; preds = %1051
  br label %1053

1053:                                             ; preds = %1052
  br label %1054

1054:                                             ; preds = %1053, %1028
  br label %1055

1055:                                             ; preds = %1054
  br label %1056

1056:                                             ; preds = %1055
  br label %1057

1057:                                             ; preds = %1056, %978
  br label %1058

1058:                                             ; preds = %1057
  %1059 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1060 = zext i8 %1059 to i32
  %1061 = and i32 %1060, 1
  %1062 = icmp ne i32 %1061, 0
  %1063 = xor i1 %1062, true
  %1064 = xor i1 %1063, true
  %1065 = zext i1 %1064 to i32
  %1066 = sext i32 %1065 to i64
  %1067 = call i64 @llvm.expect.i64(i64 %1066, i64 1)
  %1068 = icmp ne i64 %1067, 0
  br i1 %1068, label %1069, label %1089

1069:                                             ; preds = %1058
  br label %1070

1070:                                             ; preds = %1069
  %1071 = load ptr, ptr %6, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.MDBX_env, ptr %1071, i32 0, i32 7
  %1073 = load ptr, ptr %1072, align 8, !tbaa !26
  %1074 = getelementptr inbounds %struct.shared_lck, ptr %1073, i32 0, i32 14
  %1075 = load volatile i64, ptr %1074, align 8, !tbaa !25
  %1076 = icmp ugt i64 %1075, 0
  %1077 = xor i1 %1076, true
  %1078 = xor i1 %1077, true
  %1079 = xor i1 %1078, true
  %1080 = zext i1 %1079 to i32
  %1081 = sext i32 %1080 to i64
  %1082 = call i64 @llvm.expect.i64(i64 %1081, i64 0)
  %1083 = icmp ne i64 %1082, 0
  br i1 %1083, label %1084, label %1086

1084:                                             ; preds = %1070
  %1085 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1085, ptr noundef @.str.114, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1145) #14
  unreachable

1086:                                             ; preds = %1070
  br label %1087

1087:                                             ; preds = %1086
  br label %1088

1088:                                             ; preds = %1087
  br label %1089

1089:                                             ; preds = %1088, %1058
  br label %1090

1090:                                             ; preds = %1089
  br label %1091

1091:                                             ; preds = %1090
  %1092 = load ptr, ptr %8, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.meta, ptr %1092, i32 0, i32 8
  %1094 = getelementptr inbounds [2 x i32], ptr %1093, i64 0, i64 0
  call void @unaligned_poke_u64(i64 noundef 4, ptr noundef %1094, i64 noundef 1)
  br label %1095

1095:                                             ; preds = %1091, %1015
  %1096 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 0
  %1097 = load i64, ptr %1096, align 8, !tbaa !39
  %1098 = load ptr, ptr %8, align 8, !tbaa !5
  %1099 = getelementptr inbounds %struct.meta, ptr %1098, i32 0, i32 1
  %1100 = load i64, ptr %1099, align 4, !tbaa !25
  %1101 = icmp eq i64 %1097, %1100
  br i1 %1101, label %1102, label %1127

1102:                                             ; preds = %1095
  %1103 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1104 = load ptr, ptr %1103, align 8, !tbaa !25
  %1105 = getelementptr inbounds %struct.meta, ptr %1104, i32 0, i32 6
  %1106 = load ptr, ptr %8, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.meta, ptr %1106, i32 0, i32 6
  %1108 = call i32 @memcmp(ptr noundef %1105, ptr noundef %1107, i64 noundef 96) #16
  %1109 = icmp ne i32 %1108, 0
  br i1 %1109, label %1127, label %1110

1110:                                             ; preds = %1102
  %1111 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1112 = load ptr, ptr %1111, align 8, !tbaa !25
  %1113 = getelementptr inbounds %struct.meta, ptr %1112, i32 0, i32 7
  %1114 = load ptr, ptr %8, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.meta, ptr %1114, i32 0, i32 7
  %1116 = call i32 @memcmp(ptr noundef %1113, ptr noundef %1115, i64 noundef 32) #16
  %1117 = icmp ne i32 %1116, 0
  br i1 %1117, label %1127, label %1118

1118:                                             ; preds = %1110
  %1119 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1120 = load ptr, ptr %1119, align 8, !tbaa !25
  %1121 = getelementptr inbounds %struct.meta, ptr %1120, i32 0, i32 5
  %1122 = load ptr, ptr %8, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.meta, ptr %1122, i32 0, i32 5
  %1124 = call i32 @memcmp(ptr noundef %1121, ptr noundef %1123, i64 noundef 20) #16
  %1125 = icmp ne i32 %1124, 0
  %1126 = xor i1 %1125, true
  br label %1127

1127:                                             ; preds = %1118, %1110, %1102, %1095
  %1128 = phi i1 [ false, %1110 ], [ false, %1102 ], [ false, %1095 ], [ %1126, %1118 ]
  %1129 = zext i1 %1128 to i8
  store i8 %1129, ptr %40, align 1, !tbaa !47
  store ptr null, ptr %41, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 0
  %1131 = load i64, ptr %1130, align 8, !tbaa !39
  %1132 = load ptr, ptr %8, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.meta, ptr %1132, i32 0, i32 1
  %1134 = load i64, ptr %1133, align 4, !tbaa !25
  %1135 = icmp eq i64 %1131, %1134
  br i1 %1135, label %1136, label %1184

1136:                                             ; preds = %1127
  br label %1137

1137:                                             ; preds = %1136
  %1138 = load i8, ptr %40, align 1, !tbaa !47, !range !44, !noundef !45
  %1139 = trunc i8 %1138 to i1
  %1140 = xor i1 %1139, true
  %1141 = xor i1 %1140, true
  %1142 = xor i1 %1141, true
  %1143 = zext i1 %1142 to i32
  %1144 = sext i32 %1143 to i64
  %1145 = call i64 @llvm.expect.i64(i64 %1144, i64 0)
  %1146 = icmp ne i64 %1145, 0
  br i1 %1146, label %1147, label %1149

1147:                                             ; preds = %1137
  %1148 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1148, ptr noundef @.str.115, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1157) #14
  unreachable

1149:                                             ; preds = %1137
  br label %1150

1150:                                             ; preds = %1149
  br label %1151

1151:                                             ; preds = %1150
  %1152 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 2
  %1153 = load i64, ptr %1152, align 8, !tbaa !48
  %1154 = icmp ne i64 %1153, 0
  br i1 %1154, label %1161, label %1155

1155:                                             ; preds = %1151
  %1156 = load ptr, ptr %8, align 8, !tbaa !5
  %1157 = call zeroext i1 @meta_is_steady(ptr noundef %1156)
  br i1 %1157, label %1158, label %1161

1158:                                             ; preds = %1155
  %1159 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1160 = load ptr, ptr %1159, align 8, !tbaa !25
  store ptr %1160, ptr %41, align 8, !tbaa !5
  br label %1183

1161:                                             ; preds = %1155, %1151
  br label %1162

1162:                                             ; preds = %1161
  %1163 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %1164 = zext i8 %1163 to i32
  %1165 = icmp sle i32 3, %1164
  %1166 = xor i1 %1165, true
  %1167 = xor i1 %1166, true
  %1168 = zext i1 %1167 to i32
  %1169 = sext i32 %1168 to i64
  %1170 = call i64 @llvm.expect.i64(i64 %1169, i64 0)
  %1171 = icmp ne i64 %1170, 0
  br i1 %1171, label %1172, label %1180

1172:                                             ; preds = %1162
  %1173 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1174 = load ptr, ptr %1173, align 8, !tbaa !25
  %1175 = call ptr @data_page(ptr noundef %1174) #16
  %1176 = getelementptr inbounds %struct.page, ptr %1175, i32 0, i32 4
  %1177 = load i32, ptr %1176, align 1, !tbaa !9
  %1178 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 0
  %1179 = load i64, ptr %1178, align 8, !tbaa !39
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1162, ptr noundef @.str.116, i32 noundef %1177, i64 noundef %1179)
  br label %1180

1180:                                             ; preds = %1172, %1162
  br label %1181

1181:                                             ; preds = %1180
  br label %1182

1182:                                             ; preds = %1181
  store i32 0, ptr %5, align 4
  store i32 1, ptr %29, align 4
  br label %2218

1183:                                             ; preds = %1158
  br label %1225

1184:                                             ; preds = %1127
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #15
  %1185 = load ptr, ptr %9, align 8, !tbaa !5
  %1186 = getelementptr inbounds %struct.troika, ptr %1185, i32 0, i32 3
  %1187 = load i8, ptr %1186, align 1, !tbaa !49
  %1188 = zext i8 %1187 to i32
  %1189 = and i32 %1188, 3
  store i32 %1189, ptr %42, align 4, !tbaa !9
  br label %1190

1190:                                             ; preds = %1184
  %1191 = load i32, ptr %42, align 4, !tbaa !9
  %1192 = icmp ult i32 %1191, 3
  br i1 %1192, label %1193, label %1207

1193:                                             ; preds = %1190
  %1194 = load i32, ptr %42, align 4, !tbaa !9
  %1195 = load ptr, ptr %9, align 8, !tbaa !5
  %1196 = getelementptr inbounds %struct.troika, ptr %1195, i32 0, i32 1
  %1197 = load i8, ptr %1196, align 1, !tbaa !50
  %1198 = zext i8 %1197 to i32
  %1199 = icmp ne i32 %1194, %1198
  br i1 %1199, label %1200, label %1207

1200:                                             ; preds = %1193
  %1201 = load i32, ptr %42, align 4, !tbaa !9
  %1202 = load ptr, ptr %9, align 8, !tbaa !5
  %1203 = getelementptr inbounds %struct.troika, ptr %1202, i32 0, i32 2
  %1204 = load i8, ptr %1203, align 2, !tbaa !51
  %1205 = zext i8 %1204 to i32
  %1206 = icmp ne i32 %1201, %1205
  br label %1207

1207:                                             ; preds = %1200, %1193, %1190
  %1208 = phi i1 [ false, %1193 ], [ false, %1190 ], [ %1206, %1200 ]
  %1209 = xor i1 %1208, true
  %1210 = xor i1 %1209, true
  %1211 = xor i1 %1210, true
  %1212 = zext i1 %1211 to i32
  %1213 = sext i32 %1212 to i64
  %1214 = call i64 @llvm.expect.i64(i64 %1213, i64 0)
  %1215 = icmp ne i64 %1214, 0
  br i1 %1215, label %1216, label %1218

1216:                                             ; preds = %1207
  %1217 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1217, ptr noundef @.str.117, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1167) #14
  unreachable

1218:                                             ; preds = %1207
  br label %1219

1219:                                             ; preds = %1218
  br label %1220

1220:                                             ; preds = %1219
  %1221 = load ptr, ptr %6, align 8, !tbaa !5
  %1222 = load ptr, ptr %9, align 8, !tbaa !5
  call void @meta_tail(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %43, ptr noundef %1221, ptr noundef %1222)
  %1223 = getelementptr inbounds %struct.meta_ptr, ptr %43, i32 0, i32 1
  %1224 = load ptr, ptr %1223, align 8, !tbaa !25
  store ptr %1224, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #15
  br label %1225

1225:                                             ; preds = %1220, %1183
  br label %1226

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

1236:                                             ; preds = %1226
  %1237 = load ptr, ptr %41, align 8, !tbaa !5
  %1238 = call ptr @data_page(ptr noundef %1237) #16
  %1239 = getelementptr inbounds %struct.page, ptr %1238, i32 0, i32 4
  %1240 = load i32, ptr %1239, align 1, !tbaa !9
  %1241 = load ptr, ptr %8, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.meta, ptr %1241, i32 0, i32 6
  %1243 = getelementptr inbounds %struct.anon, ptr %1242, i32 0, i32 1
  %1244 = getelementptr inbounds %struct.tree, ptr %1243, i32 0, i32 3
  %1245 = load i32, ptr %1244, align 4, !tbaa !25
  %1246 = load ptr, ptr %8, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct.meta, ptr %1246, i32 0, i32 6
  %1248 = getelementptr inbounds %struct.anon, ptr %1247, i32 0, i32 0
  %1249 = getelementptr inbounds %struct.tree, ptr %1248, i32 0, i32 3
  %1250 = load i32, ptr %1249, align 4, !tbaa !25
  %1251 = load ptr, ptr %8, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.meta, ptr %1251, i32 0, i32 5
  %1253 = getelementptr inbounds %struct.geo, ptr %1252, i32 0, i32 2
  %1254 = load i32, ptr %1253, align 4, !tbaa !36
  %1255 = load ptr, ptr %8, align 8, !tbaa !5
  %1256 = getelementptr inbounds %struct.meta, ptr %1255, i32 0, i32 5
  %1257 = getelementptr inbounds %struct.geo, ptr %1256, i32 0, i32 5
  %1258 = load i32, ptr %1257, align 4, !tbaa !25
  %1259 = load ptr, ptr %8, align 8, !tbaa !5
  %1260 = getelementptr inbounds %struct.meta, ptr %1259, i32 0, i32 5
  %1261 = getelementptr inbounds %struct.geo, ptr %1260, i32 0, i32 4
  %1262 = load i32, ptr %1261, align 4, !tbaa !25
  %1263 = load ptr, ptr %8, align 8, !tbaa !5
  %1264 = getelementptr inbounds %struct.meta, ptr %1263, i32 0, i32 5
  %1265 = getelementptr inbounds %struct.geo, ptr %1264, i32 0, i32 3
  %1266 = load i32, ptr %1265, align 4, !tbaa !52
  %1267 = load ptr, ptr %8, align 8, !tbaa !5
  %1268 = getelementptr inbounds %struct.meta, ptr %1267, i32 0, i32 5
  %1269 = getelementptr inbounds %struct.geo, ptr %1268, i32 0, i32 0
  %1270 = load i16, ptr %1269, align 4, !tbaa !35
  %1271 = call i32 @pv2pages(i16 noundef zeroext %1270) #17
  %1272 = load ptr, ptr %8, align 8, !tbaa !5
  %1273 = getelementptr inbounds %struct.meta, ptr %1272, i32 0, i32 5
  %1274 = getelementptr inbounds %struct.geo, ptr %1273, i32 0, i32 1
  %1275 = load i16, ptr %1274, align 2, !tbaa !31
  %1276 = call i32 @pv2pages(i16 noundef zeroext %1275) #17
  %1277 = load ptr, ptr %8, align 8, !tbaa !5
  %1278 = getelementptr inbounds %struct.meta, ptr %1277, i32 0, i32 1
  %1279 = load i64, ptr %1278, align 4, !tbaa !25
  %1280 = load ptr, ptr %8, align 8, !tbaa !5
  %1281 = call ptr @durable_caption(ptr noundef %1280)
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1177, ptr noundef @.str.118, i32 noundef %1240, i32 noundef %1245, i32 noundef %1250, i32 noundef %1254, i32 noundef %1258, i32 noundef %1262, i32 noundef %1266, i32 noundef %1271, i32 noundef %1276, i64 noundef %1279, ptr noundef %1281)
  br label %1282

1282:                                             ; preds = %1236, %1226
  br label %1283

1283:                                             ; preds = %1282
  br label %1284

1284:                                             ; preds = %1283
  br label %1285

1285:                                             ; preds = %1284
  %1286 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %1287 = zext i8 %1286 to i32
  %1288 = icmp sle i32 5, %1287
  %1289 = xor i1 %1288, true
  %1290 = xor i1 %1289, true
  %1291 = zext i1 %1290 to i32
  %1292 = sext i32 %1291 to i64
  %1293 = call i64 @llvm.expect.i64(i64 %1292, i64 0)
  %1294 = icmp ne i64 %1293, 0
  br i1 %1294, label %1295, label %1323

1295:                                             ; preds = %1285
  %1296 = load ptr, ptr %10, align 8, !tbaa !5
  %1297 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1298 = load ptr, ptr %1297, align 8, !tbaa !25
  %1299 = icmp eq ptr %1296, %1298
  br i1 %1299, label %1300, label %1301

1300:                                             ; preds = %1295
  br label %1307

1301:                                             ; preds = %1295
  %1302 = load ptr, ptr %10, align 8, !tbaa !5
  %1303 = load ptr, ptr %41, align 8, !tbaa !5
  %1304 = icmp eq ptr %1302, %1303
  %1305 = zext i1 %1304 to i64
  %1306 = select i1 %1304, ptr @.str.121, ptr @.str.122
  br label %1307

1307:                                             ; preds = %1301, %1300
  %1308 = phi ptr [ @.str.120, %1300 ], [ %1306, %1301 ]
  %1309 = load ptr, ptr %10, align 8, !tbaa !5
  %1310 = call ptr @durable_caption(ptr noundef %1309)
  %1311 = load ptr, ptr %10, align 8, !tbaa !5
  %1312 = call i64 @constmeta_txnid(ptr noundef %1311) #16
  %1313 = load ptr, ptr %10, align 8, !tbaa !5
  %1314 = getelementptr inbounds %struct.meta, ptr %1313, i32 0, i32 6
  %1315 = getelementptr inbounds %struct.anon, ptr %1314, i32 0, i32 1
  %1316 = getelementptr inbounds %struct.tree, ptr %1315, i32 0, i32 3
  %1317 = load i32, ptr %1316, align 4, !tbaa !25
  %1318 = load ptr, ptr %10, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct.meta, ptr %1318, i32 0, i32 6
  %1320 = getelementptr inbounds %struct.anon, ptr %1319, i32 0, i32 0
  %1321 = getelementptr inbounds %struct.tree, ptr %1320, i32 0, i32 3
  %1322 = load i32, ptr %1321, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1183, ptr noundef @.str.119, ptr noundef %1308, ptr noundef %1310, i64 noundef %1312, i32 noundef %1317, i32 noundef %1322)
  br label %1323

1323:                                             ; preds = %1307, %1285
  br label %1324

1324:                                             ; preds = %1323
  br label %1325

1325:                                             ; preds = %1324
  br label %1326

1326:                                             ; preds = %1325
  %1327 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %1328 = zext i8 %1327 to i32
  %1329 = icmp sle i32 5, %1328
  %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 %1364

1336:                                             ; preds = %1326
  %1337 = load ptr, ptr %11, align 8, !tbaa !5
  %1338 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1339 = load ptr, ptr %1338, align 8, !tbaa !25
  %1340 = icmp eq ptr %1337, %1339
  br i1 %1340, label %1341, label %1342

1341:                                             ; preds = %1336
  br label %1348

1342:                                             ; preds = %1336
  %1343 = load ptr, ptr %11, align 8, !tbaa !5
  %1344 = load ptr, ptr %41, align 8, !tbaa !5
  %1345 = icmp eq ptr %1343, %1344
  %1346 = zext i1 %1345 to i64
  %1347 = select i1 %1345, ptr @.str.121, ptr @.str.122
  br label %1348

1348:                                             ; preds = %1342, %1341
  %1349 = phi ptr [ @.str.120, %1341 ], [ %1347, %1342 ]
  %1350 = load ptr, ptr %11, align 8, !tbaa !5
  %1351 = call ptr @durable_caption(ptr noundef %1350)
  %1352 = load ptr, ptr %11, align 8, !tbaa !5
  %1353 = call i64 @constmeta_txnid(ptr noundef %1352) #16
  %1354 = load ptr, ptr %11, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.meta, ptr %1354, i32 0, i32 6
  %1356 = getelementptr inbounds %struct.anon, ptr %1355, i32 0, i32 1
  %1357 = getelementptr inbounds %struct.tree, ptr %1356, i32 0, i32 3
  %1358 = load i32, ptr %1357, align 4, !tbaa !25
  %1359 = load ptr, ptr %11, align 8, !tbaa !5
  %1360 = getelementptr inbounds %struct.meta, ptr %1359, i32 0, i32 6
  %1361 = getelementptr inbounds %struct.anon, ptr %1360, i32 0, i32 0
  %1362 = getelementptr inbounds %struct.tree, ptr %1361, i32 0, i32 3
  %1363 = load i32, ptr %1362, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1188, ptr noundef @.str.123, ptr noundef %1349, ptr noundef %1351, i64 noundef %1353, i32 noundef %1358, i32 noundef %1363)
  br label %1364

1364:                                             ; preds = %1348, %1326
  br label %1365

1365:                                             ; preds = %1364
  br label %1366

1366:                                             ; preds = %1365
  br label %1367

1367:                                             ; preds = %1366
  %1368 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %1369 = zext i8 %1368 to i32
  %1370 = icmp sle i32 5, %1369
  %1371 = xor i1 %1370, true
  %1372 = xor i1 %1371, true
  %1373 = zext i1 %1372 to i32
  %1374 = sext i32 %1373 to i64
  %1375 = call i64 @llvm.expect.i64(i64 %1374, i64 0)
  %1376 = icmp ne i64 %1375, 0
  br i1 %1376, label %1377, label %1405

1377:                                             ; preds = %1367
  %1378 = load ptr, ptr %12, align 8, !tbaa !5
  %1379 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1380 = load ptr, ptr %1379, align 8, !tbaa !25
  %1381 = icmp eq ptr %1378, %1380
  br i1 %1381, label %1382, label %1383

1382:                                             ; preds = %1377
  br label %1389

1383:                                             ; preds = %1377
  %1384 = load ptr, ptr %12, align 8, !tbaa !5
  %1385 = load ptr, ptr %41, align 8, !tbaa !5
  %1386 = icmp eq ptr %1384, %1385
  %1387 = zext i1 %1386 to i64
  %1388 = select i1 %1386, ptr @.str.121, ptr @.str.122
  br label %1389

1389:                                             ; preds = %1383, %1382
  %1390 = phi ptr [ @.str.120, %1382 ], [ %1388, %1383 ]
  %1391 = load ptr, ptr %12, align 8, !tbaa !5
  %1392 = call ptr @durable_caption(ptr noundef %1391)
  %1393 = load ptr, ptr %12, align 8, !tbaa !5
  %1394 = call i64 @constmeta_txnid(ptr noundef %1393) #16
  %1395 = load ptr, ptr %12, align 8, !tbaa !5
  %1396 = getelementptr inbounds %struct.meta, ptr %1395, i32 0, i32 6
  %1397 = getelementptr inbounds %struct.anon, ptr %1396, i32 0, i32 1
  %1398 = getelementptr inbounds %struct.tree, ptr %1397, i32 0, i32 3
  %1399 = load i32, ptr %1398, align 4, !tbaa !25
  %1400 = load ptr, ptr %12, align 8, !tbaa !5
  %1401 = getelementptr inbounds %struct.meta, ptr %1400, i32 0, i32 6
  %1402 = getelementptr inbounds %struct.anon, ptr %1401, i32 0, i32 0
  %1403 = getelementptr inbounds %struct.tree, ptr %1402, i32 0, i32 3
  %1404 = load i32, ptr %1403, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1193, ptr noundef @.str.124, ptr noundef %1390, ptr noundef %1392, i64 noundef %1394, i32 noundef %1399, i32 noundef %1404)
  br label %1405

1405:                                             ; preds = %1389, %1367
  br label %1406

1406:                                             ; preds = %1405
  br label %1407

1407:                                             ; preds = %1406
  br label %1408

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

1419:                                             ; preds = %1408
  br label %1420

1420:                                             ; preds = %1419
  %1421 = load ptr, ptr %8, align 8, !tbaa !5
  %1422 = getelementptr inbounds %struct.meta, ptr %1421, i32 0, i32 1
  %1423 = load i64, ptr %1422, align 4, !tbaa !25
  %1424 = load ptr, ptr %10, align 8, !tbaa !5
  %1425 = call i64 @constmeta_txnid(ptr noundef %1424) #16
  %1426 = icmp ne i64 %1423, %1425
  br i1 %1426, label %1436, label %1427

1427:                                             ; preds = %1420
  %1428 = load ptr, ptr %8, align 8, !tbaa !5
  %1429 = call zeroext i1 @meta_is_steady(ptr noundef %1428)
  br i1 %1429, label %1430, label %1434

1430:                                             ; preds = %1427
  %1431 = load ptr, ptr %10, align 8, !tbaa !5
  %1432 = call zeroext i1 @meta_is_steady(ptr noundef %1431)
  %1433 = xor i1 %1432, true
  br label %1434

1434:                                             ; preds = %1430, %1427
  %1435 = phi i1 [ false, %1427 ], [ %1433, %1430 ]
  br label %1436

1436:                                             ; preds = %1434, %1420
  %1437 = phi i1 [ true, %1420 ], [ %1435, %1434 ]
  %1438 = xor i1 %1437, true
  %1439 = xor i1 %1438, true
  %1440 = xor i1 %1439, true
  %1441 = zext i1 %1440 to i32
  %1442 = sext i32 %1441 to i64
  %1443 = call i64 @llvm.expect.i64(i64 %1442, i64 0)
  %1444 = icmp ne i64 %1443, 0
  br i1 %1444, label %1445, label %1447

1445:                                             ; preds = %1436
  %1446 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1446, ptr noundef @.str.125, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1195) #14
  unreachable

1447:                                             ; preds = %1436
  br label %1448

1448:                                             ; preds = %1447
  br label %1449

1449:                                             ; preds = %1448
  br label %1450

1450:                                             ; preds = %1449, %1408
  br label %1451

1451:                                             ; preds = %1450
  br label %1452

1452:                                             ; preds = %1451
  br label %1453

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

1464:                                             ; preds = %1453
  br label %1465

1465:                                             ; preds = %1464
  %1466 = load ptr, ptr %8, align 8, !tbaa !5
  %1467 = getelementptr inbounds %struct.meta, ptr %1466, i32 0, i32 1
  %1468 = load i64, ptr %1467, align 4, !tbaa !25
  %1469 = load ptr, ptr %11, align 8, !tbaa !5
  %1470 = call i64 @constmeta_txnid(ptr noundef %1469) #16
  %1471 = icmp ne i64 %1468, %1470
  br i1 %1471, label %1481, label %1472

1472:                                             ; preds = %1465
  %1473 = load ptr, ptr %8, align 8, !tbaa !5
  %1474 = call zeroext i1 @meta_is_steady(ptr noundef %1473)
  br i1 %1474, label %1475, label %1479

1475:                                             ; preds = %1472
  %1476 = load ptr, ptr %11, align 8, !tbaa !5
  %1477 = call zeroext i1 @meta_is_steady(ptr noundef %1476)
  %1478 = xor i1 %1477, true
  br label %1479

1479:                                             ; preds = %1475, %1472
  %1480 = phi i1 [ false, %1472 ], [ %1478, %1475 ]
  br label %1481

1481:                                             ; preds = %1479, %1465
  %1482 = phi i1 [ true, %1465 ], [ %1480, %1479 ]
  %1483 = xor i1 %1482, true
  %1484 = xor i1 %1483, true
  %1485 = xor i1 %1484, true
  %1486 = zext i1 %1485 to i32
  %1487 = sext i32 %1486 to i64
  %1488 = call i64 @llvm.expect.i64(i64 %1487, i64 0)
  %1489 = icmp ne i64 %1488, 0
  br i1 %1489, label %1490, label %1492

1490:                                             ; preds = %1481
  %1491 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1491, ptr noundef @.str.126, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1196) #14
  unreachable

1492:                                             ; preds = %1481
  br label %1493

1493:                                             ; preds = %1492
  br label %1494

1494:                                             ; preds = %1493
  br label %1495

1495:                                             ; preds = %1494, %1453
  br label %1496

1496:                                             ; preds = %1495
  br label %1497

1497:                                             ; preds = %1496
  br label %1498

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

1509:                                             ; preds = %1498
  br label %1510

1510:                                             ; preds = %1509
  %1511 = load ptr, ptr %8, align 8, !tbaa !5
  %1512 = getelementptr inbounds %struct.meta, ptr %1511, i32 0, i32 1
  %1513 = load i64, ptr %1512, align 4, !tbaa !25
  %1514 = load ptr, ptr %12, align 8, !tbaa !5
  %1515 = call i64 @constmeta_txnid(ptr noundef %1514) #16
  %1516 = icmp ne i64 %1513, %1515
  br i1 %1516, label %1526, label %1517

1517:                                             ; preds = %1510
  %1518 = load ptr, ptr %8, align 8, !tbaa !5
  %1519 = call zeroext i1 @meta_is_steady(ptr noundef %1518)
  br i1 %1519, label %1520, label %1524

1520:                                             ; preds = %1517
  %1521 = load ptr, ptr %12, align 8, !tbaa !5
  %1522 = call zeroext i1 @meta_is_steady(ptr noundef %1521)
  %1523 = xor i1 %1522, true
  br label %1524

1524:                                             ; preds = %1520, %1517
  %1525 = phi i1 [ false, %1517 ], [ %1523, %1520 ]
  br label %1526

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

1535:                                             ; preds = %1526
  %1536 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1536, ptr noundef @.str.127, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1197) #14
  unreachable

1537:                                             ; preds = %1526
  br label %1538

1538:                                             ; preds = %1537
  br label %1539

1539:                                             ; preds = %1538
  br label %1540

1540:                                             ; preds = %1539, %1498
  br label %1541

1541:                                             ; preds = %1540
  br label %1542

1542:                                             ; preds = %1541
  br label %1543

1543:                                             ; preds = %1542
  %1544 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1545 = zext i8 %1544 to i32
  %1546 = and i32 %1545, 1
  %1547 = icmp ne i32 %1546, 0
  %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 1)
  %1553 = icmp ne i64 %1552, 0
  br i1 %1553, label %1554, label %1575

1554:                                             ; preds = %1543
  br label %1555

1555:                                             ; preds = %1554
  %1556 = load ptr, ptr %6, align 8, !tbaa !5
  %1557 = getelementptr inbounds %struct.MDBX_env, ptr %1556, i32 0, i32 1
  %1558 = load i32, ptr %1557, align 4, !tbaa !15
  %1559 = load i32, ptr %7, align 4, !tbaa !9
  %1560 = xor i32 %1558, %1559
  %1561 = and i32 %1560, 524288
  %1562 = icmp eq i32 %1561, 0
  %1563 = xor i1 %1562, true
  %1564 = xor i1 %1563, true
  %1565 = xor i1 %1564, true
  %1566 = zext i1 %1565 to i32
  %1567 = sext i32 %1566 to i64
  %1568 = call i64 @llvm.expect.i64(i64 %1567, i64 0)
  %1569 = icmp ne i64 %1568, 0
  br i1 %1569, label %1570, label %1572

1570:                                             ; preds = %1555
  %1571 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1571, ptr noundef @.str.100, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1199) #14
  unreachable

1572:                                             ; preds = %1555
  br label %1573

1573:                                             ; preds = %1572
  br label %1574

1574:                                             ; preds = %1573
  br label %1575

1575:                                             ; preds = %1574, %1543
  br label %1576

1576:                                             ; preds = %1575
  br label %1577

1577:                                             ; preds = %1576
  br label %1578

1578:                                             ; preds = %1577
  %1579 = load ptr, ptr %41, align 8, !tbaa !5
  %1580 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1581 = load ptr, ptr %1580, align 8, !tbaa !25
  %1582 = icmp eq ptr %1579, %1581
  br i1 %1582, label %1590, label %1583

1583:                                             ; preds = %1578
  %1584 = load ptr, ptr %41, align 8, !tbaa !5
  %1585 = call i64 @constmeta_txnid(ptr noundef %1584) #16
  %1586 = load ptr, ptr %8, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct.meta, ptr %1586, i32 0, i32 1
  %1588 = load i64, ptr %1587, align 4, !tbaa !25
  %1589 = icmp ult i64 %1585, %1588
  br label %1590

1590:                                             ; preds = %1583, %1578
  %1591 = phi i1 [ true, %1578 ], [ %1589, %1583 ]
  %1592 = xor i1 %1591, true
  %1593 = xor i1 %1592, true
  %1594 = xor i1 %1593, true
  %1595 = zext i1 %1594 to i32
  %1596 = sext i32 %1595 to i64
  %1597 = call i64 @llvm.expect.i64(i64 %1596, i64 0)
  %1598 = icmp ne i64 %1597, 0
  br i1 %1598, label %1599, label %1601

1599:                                             ; preds = %1590
  %1600 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1600, ptr noundef @.str.128, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1200) #14
  unreachable

1601:                                             ; preds = %1590
  br label %1602

1602:                                             ; preds = %1601
  br label %1603

1603:                                             ; preds = %1602
  %1604 = load i32, ptr %7, align 4, !tbaa !9
  %1605 = and i32 %1604, 524288
  %1606 = icmp ne i32 %1605, 0
  br i1 %1606, label %1607, label %1852

1607:                                             ; preds = %1603
  call void @jitter4testing(i1 noundef zeroext true)
  %1608 = load ptr, ptr %41, align 8, !tbaa !5
  %1609 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 1
  %1610 = load ptr, ptr %1609, align 8, !tbaa !25
  %1611 = icmp ne ptr %1608, %1610
  %1612 = xor i1 %1611, true
  %1613 = xor i1 %1612, true
  %1614 = zext i1 %1613 to i32
  %1615 = sext i32 %1614 to i64
  %1616 = call i64 @llvm.expect.i64(i64 %1615, i64 1)
  %1617 = icmp ne i64 %1616, 0
  br i1 %1617, label %1618, label %1772

1618:                                             ; preds = %1607
  %1619 = load ptr, ptr %6, align 8, !tbaa !5
  %1620 = load ptr, ptr %41, align 8, !tbaa !5
  %1621 = load ptr, ptr %8, align 8, !tbaa !5
  %1622 = getelementptr inbounds %struct.meta, ptr %1621, i32 0, i32 1
  %1623 = load i64, ptr %1622, align 4, !tbaa !25
  call void @meta_update_begin(ptr noundef %1619, ptr noundef %1620, i64 noundef %1623)
  %1624 = load ptr, ptr %41, align 8, !tbaa !5
  %1625 = getelementptr inbounds %struct.meta, ptr %1624, i32 0, i32 8
  %1626 = getelementptr inbounds [2 x i32], ptr %1625, i64 0, i64 0
  call void @unaligned_poke_u64(i64 noundef 4, ptr noundef %1626, i64 noundef 1)
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #15
  %1627 = load ptr, ptr %41, align 8, !tbaa !5
  %1628 = getelementptr inbounds %struct.meta, ptr %1627, i32 0, i32 6
  %1629 = getelementptr inbounds %struct.anon, ptr %1628, i32 0, i32 0
  %1630 = getelementptr inbounds %struct.tree, ptr %1629, i32 0, i32 3
  store ptr %1630, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #15
  %1631 = load ptr, ptr %41, align 8, !tbaa !5
  %1632 = getelementptr inbounds %struct.meta, ptr %1631, i32 0, i32 8
  store ptr %1632, ptr %45, align 8, !tbaa !5
  %1633 = load ptr, ptr %44, align 8, !tbaa !5
  %1634 = load ptr, ptr %45, align 8, !tbaa !5
  %1635 = ptrtoint ptr %1634 to i64
  %1636 = load ptr, ptr %44, align 8, !tbaa !5
  %1637 = ptrtoint ptr %1636 to i64
  %1638 = sub nsw i64 %1635, %1637
  call void @llvm.memset.p0.i64(ptr align 1 %1633, i8 -52, i64 %1638, i1 false)
  call void @jitter4testing(i1 noundef zeroext false)
  %1639 = load ptr, ptr %41, align 8, !tbaa !5
  %1640 = getelementptr inbounds %struct.meta, ptr %1639, i32 0, i32 5
  %1641 = load ptr, ptr %8, align 8, !tbaa !5
  %1642 = getelementptr inbounds %struct.meta, ptr %1641, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1640, ptr align 4 %1642, i64 20, i1 false), !tbaa.struct !53
  %1643 = load ptr, ptr %41, align 8, !tbaa !5
  %1644 = getelementptr inbounds %struct.meta, ptr %1643, i32 0, i32 6
  %1645 = getelementptr inbounds %struct.anon, ptr %1644, i32 0, i32 0
  %1646 = load ptr, ptr %8, align 8, !tbaa !5
  %1647 = getelementptr inbounds %struct.meta, ptr %1646, i32 0, i32 6
  %1648 = getelementptr inbounds %struct.anon, ptr %1647, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1645, ptr align 4 %1648, i64 48, i1 false), !tbaa.struct !55
  %1649 = load ptr, ptr %41, align 8, !tbaa !5
  %1650 = getelementptr inbounds %struct.meta, ptr %1649, i32 0, i32 6
  %1651 = getelementptr inbounds %struct.anon, ptr %1650, i32 0, i32 1
  %1652 = load ptr, ptr %8, align 8, !tbaa !5
  %1653 = getelementptr inbounds %struct.meta, ptr %1652, i32 0, i32 6
  %1654 = getelementptr inbounds %struct.anon, ptr %1653, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1651, ptr align 4 %1654, i64 48, i1 false), !tbaa.struct !55
  br label %1655

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

1666:                                             ; preds = %1655
  br label %1667

1667:                                             ; preds = %1666
  %1668 = load ptr, ptr %41, align 8, !tbaa !5
  %1669 = getelementptr inbounds %struct.meta, ptr %1668, i32 0, i32 6
  %1670 = getelementptr inbounds %struct.anon, ptr %1669, i32 0, i32 0
  %1671 = getelementptr inbounds %struct.tree, ptr %1670, i32 0, i32 0
  %1672 = load i16, ptr %1671, align 4, !tbaa !25
  %1673 = zext i16 %1672 to i32
  %1674 = icmp eq i32 %1673, 8
  %1675 = xor i1 %1674, true
  %1676 = xor i1 %1675, true
  %1677 = xor i1 %1676, true
  %1678 = zext i1 %1677 to i32
  %1679 = sext i32 %1678 to i64
  %1680 = call i64 @llvm.expect.i64(i64 %1679, i64 0)
  %1681 = icmp ne i64 %1680, 0
  br i1 %1681, label %1682, label %1684

1682:                                             ; preds = %1667
  %1683 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1683, ptr noundef @.str.129, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1220) #14
  unreachable

1684:                                             ; preds = %1667
  br label %1685

1685:                                             ; preds = %1684
  br label %1686

1686:                                             ; preds = %1685
  br label %1687

1687:                                             ; preds = %1686, %1655
  br label %1688

1688:                                             ; preds = %1687
  br label %1689

1689:                                             ; preds = %1688
  br label %1690

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

1701:                                             ; preds = %1690
  br label %1702

1702:                                             ; preds = %1701
  %1703 = load ptr, ptr %41, align 8, !tbaa !5
  %1704 = getelementptr inbounds %struct.meta, ptr %1703, i32 0, i32 6
  %1705 = getelementptr inbounds %struct.anon, ptr %1704, i32 0, i32 1
  %1706 = getelementptr inbounds %struct.tree, ptr %1705, i32 0, i32 0
  %1707 = load i16, ptr %1706, align 4, !tbaa !25
  %1708 = zext i16 %1707 to i32
  %1709 = call zeroext i1 @check_table_flags(i32 noundef %1708)
  %1710 = xor i1 %1709, true
  %1711 = xor i1 %1710, true
  %1712 = xor i1 %1711, true
  %1713 = zext i1 %1712 to i32
  %1714 = sext i32 %1713 to i64
  %1715 = call i64 @llvm.expect.i64(i64 %1714, i64 0)
  %1716 = icmp ne i64 %1715, 0
  br i1 %1716, label %1717, label %1719

1717:                                             ; preds = %1702
  %1718 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1718, ptr noundef @.str.130, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1221) #14
  unreachable

1719:                                             ; preds = %1702
  br label %1720

1720:                                             ; preds = %1719
  br label %1721

1721:                                             ; preds = %1720
  br label %1722

1722:                                             ; preds = %1721, %1690
  br label %1723

1723:                                             ; preds = %1722
  br label %1724

1724:                                             ; preds = %1723
  %1725 = load ptr, ptr %41, align 8, !tbaa !5
  %1726 = getelementptr inbounds %struct.meta, ptr %1725, i32 0, i32 7
  %1727 = load ptr, ptr %8, align 8, !tbaa !5
  %1728 = getelementptr inbounds %struct.meta, ptr %1727, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1726, ptr align 4 %1728, i64 32, i1 false), !tbaa.struct !56
  %1729 = load ptr, ptr %41, align 8, !tbaa !5
  %1730 = getelementptr inbounds %struct.meta, ptr %1729, i32 0, i32 10
  %1731 = getelementptr inbounds [2 x i32], ptr %1730, i64 0, i64 0
  %1732 = load ptr, ptr %8, align 8, !tbaa !5
  %1733 = getelementptr inbounds %struct.meta, ptr %1732, i32 0, i32 10
  %1734 = getelementptr inbounds [2 x i32], ptr %1733, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1731, ptr align 4 %1734, i64 8, i1 false)
  call void @jitter4testing(i1 noundef zeroext true)
  %1735 = load ptr, ptr %6, align 8, !tbaa !5
  %1736 = load ptr, ptr %41, align 8, !tbaa !5
  %1737 = load ptr, ptr %8, align 8, !tbaa !5
  %1738 = getelementptr inbounds %struct.meta, ptr %1737, i32 0, i32 9
  %1739 = getelementptr inbounds [2 x %union.mdbx_atomic_uint32_t], ptr %1738, i64 0, i64 0
  %1740 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %1739) #16
  call void @meta_update_end(ptr noundef %1735, ptr noundef %1736, i64 noundef %1740)
  call void @jitter4testing(i1 noundef zeroext true)
  br label %1741

1741:                                             ; preds = %1724
  %1742 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1743 = zext i8 %1742 to i32
  %1744 = and i32 %1743, 1
  %1745 = icmp ne i32 %1744, 0
  %1746 = xor i1 %1745, true
  %1747 = xor i1 %1746, true
  %1748 = zext i1 %1747 to i32
  %1749 = sext i32 %1748 to i64
  %1750 = call i64 @llvm.expect.i64(i64 %1749, i64 1)
  %1751 = icmp ne i64 %1750, 0
  br i1 %1751, label %1752, label %1769

1752:                                             ; preds = %1741
  br label %1753

1753:                                             ; preds = %1752
  %1754 = load ptr, ptr %6, align 8, !tbaa !5
  %1755 = load ptr, ptr %41, align 8, !tbaa !5
  %1756 = call zeroext i1 @coherency_check_meta(ptr noundef %1754, ptr noundef %1755, i1 noundef zeroext true)
  %1757 = xor i1 %1756, true
  %1758 = xor i1 %1757, true
  %1759 = xor i1 %1758, true
  %1760 = zext i1 %1759 to i32
  %1761 = sext i32 %1760 to i64
  %1762 = call i64 @llvm.expect.i64(i64 %1761, i64 0)
  %1763 = icmp ne i64 %1762, 0
  br i1 %1763, label %1764, label %1766

1764:                                             ; preds = %1753
  %1765 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1765, ptr noundef @.str.131, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1229) #14
  unreachable

1766:                                             ; preds = %1753
  br label %1767

1767:                                             ; preds = %1766
  br label %1768

1768:                                             ; preds = %1767
  br label %1769

1769:                                             ; preds = %1768, %1741
  br label %1770

1770:                                             ; preds = %1769
  br label %1771

1771:                                             ; preds = %1770
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #15
  br label %1812

1772:                                             ; preds = %1607
  br label %1773

1773:                                             ; preds = %1772
  %1774 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1775 = zext i8 %1774 to i32
  %1776 = and i32 %1775, 1
  %1777 = icmp ne i32 %1776, 0
  %1778 = xor i1 %1777, true
  %1779 = xor i1 %1778, true
  %1780 = zext i1 %1779 to i32
  %1781 = sext i32 %1780 to i64
  %1782 = call i64 @llvm.expect.i64(i64 %1781, i64 1)
  %1783 = icmp ne i64 %1782, 0
  br i1 %1783, label %1784, label %1809

1784:                                             ; preds = %1773
  br label %1785

1785:                                             ; preds = %1784
  %1786 = load i8, ptr %40, align 1, !tbaa !47, !range !44, !noundef !45
  %1787 = trunc i8 %1786 to i1
  br i1 %1787, label %1788, label %1795

1788:                                             ; preds = %1785
  %1789 = getelementptr inbounds %struct.meta_ptr, ptr %13, i32 0, i32 2
  %1790 = load i64, ptr %1789, align 8, !tbaa !48
  %1791 = icmp ne i64 %1790, 0
  br i1 %1791, label %1795, label %1792

1792:                                             ; preds = %1788
  %1793 = load ptr, ptr %8, align 8, !tbaa !5
  %1794 = call zeroext i1 @meta_is_steady(ptr noundef %1793)
  br label %1795

1795:                                             ; preds = %1792, %1788, %1785
  %1796 = phi i1 [ false, %1788 ], [ false, %1785 ], [ %1794, %1792 ]
  %1797 = xor i1 %1796, true
  %1798 = xor i1 %1797, true
  %1799 = xor i1 %1798, true
  %1800 = zext i1 %1799 to i32
  %1801 = sext i32 %1800 to i64
  %1802 = call i64 @llvm.expect.i64(i64 %1801, i64 0)
  %1803 = icmp ne i64 %1802, 0
  br i1 %1803, label %1804, label %1806

1804:                                             ; preds = %1795
  %1805 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1805, ptr noundef @.str.132, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1233) #14
  unreachable

1806:                                             ; preds = %1795
  br label %1807

1807:                                             ; preds = %1806
  br label %1808

1808:                                             ; preds = %1807
  br label %1809

1809:                                             ; preds = %1808, %1773
  br label %1810

1810:                                             ; preds = %1809
  br label %1811

1811:                                             ; preds = %1810
  br label %1812

1812:                                             ; preds = %1811, %1771
  %1813 = load ptr, ptr %41, align 8, !tbaa !5
  %1814 = getelementptr inbounds %struct.meta, ptr %1813, i32 0, i32 8
  %1815 = getelementptr inbounds [2 x i32], ptr %1814, i64 0, i64 0
  %1816 = load ptr, ptr %8, align 8, !tbaa !5
  %1817 = getelementptr inbounds %struct.meta, ptr %1816, i32 0, i32 8
  %1818 = getelementptr inbounds [2 x i32], ptr %1817, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1815, ptr align 4 %1818, i64 8, i1 false)
  call void @osal_compiler_barrier()
  call void @jitter4testing(i1 noundef zeroext true)
  %1819 = load ptr, ptr %6, align 8, !tbaa !5
  %1820 = getelementptr inbounds %struct.MDBX_env, ptr %1819, i32 0, i32 36
  %1821 = load i8, ptr %1820, align 8, !tbaa !43, !range !44, !noundef !45
  %1822 = trunc i8 %1821 to i1
  br i1 %1822, label %1851, label %1823

1823:                                             ; preds = %1812
  %1824 = load ptr, ptr %6, align 8, !tbaa !5
  %1825 = getelementptr inbounds %struct.MDBX_env, ptr %1824, i32 0, i32 7
  %1826 = load ptr, ptr %1825, align 8, !tbaa !26
  %1827 = getelementptr inbounds %struct.shared_lck, ptr %1826, i32 0, i32 9
  %1828 = getelementptr inbounds %struct.pgops, ptr %1827, i32 0, i32 8
  %1829 = load volatile i64, ptr %1828, align 64, !tbaa !25
  %1830 = add i64 %1829, 1
  store volatile i64 %1830, ptr %1828, align 64, !tbaa !25
  %1831 = load ptr, ptr %6, align 8, !tbaa !5
  %1832 = getelementptr inbounds %struct.MDBX_env, ptr %1831, i32 0, i32 3
  %1833 = load ptr, ptr %6, align 8, !tbaa !5
  %1834 = call i64 @pgno_align2os_bytes(ptr noundef %1833, i64 noundef 3) #16
  %1835 = load i32, ptr %7, align 4, !tbaa !9
  %1836 = and i32 %1835, 262144
  %1837 = icmp ne i32 %1836, 0
  %1838 = zext i1 %1837 to i64
  %1839 = select i1 %1837, i32 0, i32 10
  %1840 = call i32 @osal_msync(ptr noundef %1832, i64 noundef 0, i64 noundef %1834, i32 noundef %1839)
  store i32 %1840, ptr %14, align 4, !tbaa !9
  %1841 = load i32, ptr %14, align 4, !tbaa !9
  %1842 = icmp ne i32 %1841, 0
  %1843 = xor i1 %1842, true
  %1844 = xor i1 %1843, true
  %1845 = zext i1 %1844 to i32
  %1846 = sext i32 %1845 to i64
  %1847 = call i64 @llvm.expect.i64(i64 %1846, i64 0)
  %1848 = icmp ne i64 %1847, 0
  br i1 %1848, label %1849, label %1850

1849:                                             ; preds = %1823
  br label %2212

1850:                                             ; preds = %1823
  br label %1851

1851:                                             ; preds = %1850, %1812
  br label %2022

1852:                                             ; preds = %1603
  %1853 = load ptr, ptr %6, align 8, !tbaa !5
  %1854 = getelementptr inbounds %struct.MDBX_env, ptr %1853, i32 0, i32 7
  %1855 = load ptr, ptr %1854, align 8, !tbaa !26
  %1856 = getelementptr inbounds %struct.shared_lck, ptr %1855, i32 0, i32 9
  %1857 = getelementptr inbounds %struct.pgops, ptr %1856, i32 0, i32 7
  %1858 = load volatile i64, ptr %1857, align 8, !tbaa !25
  %1859 = add i64 %1858, 1
  store volatile i64 %1859, ptr %1857, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 224, ptr %46) #15
  %1860 = load ptr, ptr %41, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 4 %1860, i64 224, i1 false), !tbaa.struct !57
  br label %1861

1861:                                             ; preds = %1852
  %1862 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1863 = zext i8 %1862 to i32
  %1864 = and i32 %1863, 1
  %1865 = icmp ne i32 %1864, 0
  %1866 = xor i1 %1865, true
  %1867 = xor i1 %1866, true
  %1868 = zext i1 %1867 to i32
  %1869 = sext i32 %1868 to i64
  %1870 = call i64 @llvm.expect.i64(i64 %1869, i64 1)
  %1871 = icmp ne i64 %1870, 0
  br i1 %1871, label %1872, label %1893

1872:                                             ; preds = %1861
  br label %1873

1873:                                             ; preds = %1872
  %1874 = load ptr, ptr %8, align 8, !tbaa !5
  %1875 = getelementptr inbounds %struct.meta, ptr %1874, i32 0, i32 6
  %1876 = getelementptr inbounds %struct.anon, ptr %1875, i32 0, i32 0
  %1877 = getelementptr inbounds %struct.tree, ptr %1876, i32 0, i32 0
  %1878 = load i16, ptr %1877, align 4, !tbaa !25
  %1879 = zext i16 %1878 to i32
  %1880 = icmp eq i32 %1879, 8
  %1881 = xor i1 %1880, true
  %1882 = xor i1 %1881, true
  %1883 = xor i1 %1882, true
  %1884 = zext i1 %1883 to i32
  %1885 = sext i32 %1884 to i64
  %1886 = call i64 @llvm.expect.i64(i64 %1885, i64 0)
  %1887 = icmp ne i64 %1886, 0
  br i1 %1887, label %1888, label %1890

1888:                                             ; preds = %1873
  %1889 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1889, ptr noundef @.str.101, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1270) #14
  unreachable

1890:                                             ; preds = %1873
  br label %1891

1891:                                             ; preds = %1890
  br label %1892

1892:                                             ; preds = %1891
  br label %1893

1893:                                             ; preds = %1892, %1861
  br label %1894

1894:                                             ; preds = %1893
  br label %1895

1895:                                             ; preds = %1894
  br label %1896

1896:                                             ; preds = %1895
  %1897 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1898 = zext i8 %1897 to i32
  %1899 = and i32 %1898, 1
  %1900 = icmp ne i32 %1899, 0
  %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 1)
  %1906 = icmp ne i64 %1905, 0
  br i1 %1906, label %1907, label %1928

1907:                                             ; preds = %1896
  br label %1908

1908:                                             ; preds = %1907
  %1909 = load ptr, ptr %8, align 8, !tbaa !5
  %1910 = getelementptr inbounds %struct.meta, ptr %1909, i32 0, i32 6
  %1911 = getelementptr inbounds %struct.anon, ptr %1910, i32 0, i32 1
  %1912 = getelementptr inbounds %struct.tree, ptr %1911, i32 0, i32 0
  %1913 = load i16, ptr %1912, align 4, !tbaa !25
  %1914 = zext i16 %1913 to i32
  %1915 = call zeroext i1 @check_table_flags(i32 noundef %1914)
  %1916 = xor i1 %1915, true
  %1917 = xor i1 %1916, true
  %1918 = xor i1 %1917, true
  %1919 = zext i1 %1918 to i32
  %1920 = sext i32 %1919 to i64
  %1921 = call i64 @llvm.expect.i64(i64 %1920, i64 0)
  %1922 = icmp ne i64 %1921, 0
  br i1 %1922, label %1923, label %1925

1923:                                             ; preds = %1908
  %1924 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1924, ptr noundef @.str.102, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1271) #14
  unreachable

1925:                                             ; preds = %1908
  br label %1926

1926:                                             ; preds = %1925
  br label %1927

1927:                                             ; preds = %1926
  br label %1928

1928:                                             ; preds = %1927, %1896
  br label %1929

1929:                                             ; preds = %1928
  br label %1930

1930:                                             ; preds = %1929
  %1931 = load ptr, ptr %6, align 8, !tbaa !5
  %1932 = getelementptr inbounds %struct.MDBX_env, ptr %1931, i32 0, i32 5
  %1933 = load i32, ptr %1932, align 4, !tbaa !58
  %1934 = load ptr, ptr %8, align 8, !tbaa !5
  %1935 = load ptr, ptr %41, align 8, !tbaa !5
  %1936 = ptrtoint ptr %1935 to i64
  %1937 = load ptr, ptr %6, align 8, !tbaa !5
  %1938 = getelementptr inbounds %struct.MDBX_env, ptr %1937, i32 0, i32 3
  %1939 = getelementptr inbounds %struct.osal_mmap, ptr %1938, i32 0, i32 0
  %1940 = load ptr, ptr %1939, align 8, !tbaa !25
  %1941 = ptrtoint ptr %1940 to i64
  %1942 = sub nsw i64 %1936, %1941
  %1943 = call i32 @osal_pwrite(i32 noundef %1933, ptr noundef %1934, i64 noundef 224, i64 noundef %1942)
  store i32 %1943, ptr %14, align 4, !tbaa !9
  %1944 = load i32, ptr %14, align 4, !tbaa !9
  %1945 = icmp ne i32 %1944, 0
  %1946 = xor i1 %1945, true
  %1947 = xor i1 %1946, true
  %1948 = zext i1 %1947 to i32
  %1949 = sext i32 %1948 to i64
  %1950 = call i64 @llvm.expect.i64(i64 %1949, i64 0)
  %1951 = icmp ne i64 %1950, 0
  br i1 %1951, label %1952, label %1980

1952:                                             ; preds = %1930
  br label %1953

1953:                                             ; preds = %2016, %1952
  br label %1954

1954:                                             ; preds = %1953
  %1955 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %1956 = zext i8 %1955 to i32
  %1957 = icmp sle i32 5, %1956
  %1958 = xor i1 %1957, true
  %1959 = xor i1 %1958, true
  %1960 = zext i1 %1959 to i32
  %1961 = sext i32 %1960 to i64
  %1962 = call i64 @llvm.expect.i64(i64 %1961, i64 0)
  %1963 = icmp ne i64 %1962, 0
  br i1 %1963, label %1964, label %1965

1964:                                             ; preds = %1954
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1275, ptr noundef @.str.6, ptr noundef @.str.133)
  br label %1965

1965:                                             ; preds = %1964, %1954
  br label %1966

1966:                                             ; preds = %1965
  br label %1967

1967:                                             ; preds = %1966
  %1968 = load ptr, ptr %6, align 8, !tbaa !5
  %1969 = getelementptr inbounds %struct.MDBX_env, ptr %1968, i32 0, i32 5
  %1970 = load i32, ptr %1969, align 4, !tbaa !58
  %1971 = load ptr, ptr %41, align 8, !tbaa !5
  %1972 = ptrtoint ptr %1971 to i64
  %1973 = load ptr, ptr %6, align 8, !tbaa !5
  %1974 = getelementptr inbounds %struct.MDBX_env, ptr %1973, i32 0, i32 3
  %1975 = getelementptr inbounds %struct.osal_mmap, ptr %1974, i32 0, i32 0
  %1976 = load ptr, ptr %1975, align 8, !tbaa !25
  %1977 = ptrtoint ptr %1976 to i64
  %1978 = sub nsw i64 %1972, %1977
  %1979 = call i32 @osal_pwrite(i32 noundef %1970, ptr noundef %46, i64 noundef 224, i64 noundef %1978)
  store i32 40, ptr %29, align 4
  br label %2019

1980:                                             ; preds = %1930
  %1981 = load ptr, ptr %41, align 8, !tbaa !5
  %1982 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !59
  %1983 = zext i32 %1982 to i64
  call void @osal_flush_incoherent_mmap(ptr noundef %1981, i64 noundef 224, i64 noundef %1983)
  %1984 = load i32, ptr %7, align 4, !tbaa !9
  %1985 = and i32 %1984, 262144
  %1986 = icmp eq i32 %1985, 0
  br i1 %1986, label %1987, label %2018

1987:                                             ; preds = %1980
  %1988 = load ptr, ptr %6, align 8, !tbaa !5
  %1989 = getelementptr inbounds %struct.MDBX_env, ptr %1988, i32 0, i32 5
  %1990 = load i32, ptr %1989, align 4, !tbaa !58
  %1991 = load ptr, ptr %6, align 8, !tbaa !5
  %1992 = getelementptr inbounds %struct.MDBX_env, ptr %1991, i32 0, i32 3
  %1993 = getelementptr inbounds %struct.osal_mmap, ptr %1992, i32 0, i32 1
  %1994 = load i32, ptr %1993, align 8, !tbaa !46
  %1995 = icmp eq i32 %1990, %1994
  br i1 %1995, label %1996, label %2018

1996:                                             ; preds = %1987
  %1997 = load ptr, ptr %6, align 8, !tbaa !5
  %1998 = getelementptr inbounds %struct.MDBX_env, ptr %1997, i32 0, i32 36
  %1999 = load i8, ptr %1998, align 8, !tbaa !43, !range !44, !noundef !45
  %2000 = trunc i8 %1999 to i1
  br i1 %2000, label %2018, label %2001

2001:                                             ; preds = %1996
  %2002 = load ptr, ptr %6, align 8, !tbaa !5
  %2003 = getelementptr inbounds %struct.MDBX_env, ptr %2002, i32 0, i32 7
  %2004 = load ptr, ptr %2003, align 8, !tbaa !26
  %2005 = getelementptr inbounds %struct.shared_lck, ptr %2004, i32 0, i32 9
  %2006 = getelementptr inbounds %struct.pgops, ptr %2005, i32 0, i32 9
  %2007 = load volatile i64, ptr %2006, align 8, !tbaa !25
  %2008 = add i64 %2007, 1
  store volatile i64 %2008, ptr %2006, align 8, !tbaa !25
  %2009 = load ptr, ptr %6, align 8, !tbaa !5
  %2010 = getelementptr inbounds %struct.MDBX_env, ptr %2009, i32 0, i32 3
  %2011 = getelementptr inbounds %struct.osal_mmap, ptr %2010, i32 0, i32 1
  %2012 = load i32, ptr %2011, align 8, !tbaa !46
  %2013 = call i32 @osal_fsync(i32 noundef %2012, i32 noundef 10)
  store i32 %2013, ptr %14, align 4, !tbaa !9
  %2014 = load i32, ptr %14, align 4, !tbaa !9
  %2015 = icmp ne i32 %2014, 0
  br i1 %2015, label %2016, label %2017

2016:                                             ; preds = %2001
  br label %1953

2017:                                             ; preds = %2001
  br label %2018

2018:                                             ; preds = %2017, %1996, %1987, %1980
  store i32 0, ptr %29, align 4
  br label %2019

2019:                                             ; preds = %2018, %1967
  call void @llvm.lifetime.end.p0(i64 224, ptr %46) #15
  %2020 = load i32, ptr %29, align 4
  switch i32 %2020, label %2218 [
    i32 0, label %2021
    i32 40, label %2212
  ]

2021:                                             ; preds = %2019
  br label %2022

2022:                                             ; preds = %2021, %1851
  store i64 0, ptr %47, align 8, !tbaa !27
  br label %2023

2023:                                             ; preds = %2061, %2022
  br label %2024

2024:                                             ; preds = %2023
  %2025 = load ptr, ptr %6, align 8, !tbaa !5
  %2026 = load ptr, ptr %8, align 8, !tbaa !5
  %2027 = getelementptr inbounds %struct.meta, ptr %2026, i32 0, i32 1
  %2028 = load i64, ptr %2027, align 4, !tbaa !25
  %2029 = load ptr, ptr %41, align 8, !tbaa !5
  %2030 = load ptr, ptr %6, align 8, !tbaa !5
  %2031 = load ptr, ptr %41, align 8, !tbaa !5
  %2032 = ptrtoint ptr %2031 to i64
  %2033 = load ptr, ptr %6, align 8, !tbaa !5
  %2034 = getelementptr inbounds %struct.MDBX_env, ptr %2033, i32 0, i32 3
  %2035 = getelementptr inbounds %struct.osal_mmap, ptr %2034, i32 0, i32 0
  %2036 = load ptr, ptr %2035, align 8, !tbaa !25
  %2037 = ptrtoint ptr %2036 to i64
  %2038 = sub nsw i64 %2032, %2037
  %2039 = call i32 @bytes2pgno(ptr noundef %2030, i64 noundef %2038) #16
  %2040 = zext i32 %2039 to i64
  %2041 = call i32 @coherency_check_written(ptr noundef %2025, i64 noundef %2028, ptr noundef %2029, i64 noundef %2040, ptr noundef %47)
  store i32 %2041, ptr %14, align 4, !tbaa !9
  %2042 = load i32, ptr %14, align 4, !tbaa !9
  %2043 = icmp eq i32 %2042, 0
  %2044 = xor i1 %2043, true
  %2045 = xor i1 %2044, true
  %2046 = zext i1 %2045 to i32
  %2047 = sext i32 %2046 to i64
  %2048 = call i64 @llvm.expect.i64(i64 %2047, i64 1)
  %2049 = icmp ne i64 %2048, 0
  br i1 %2049, label %2050, label %2051

2050:                                             ; preds = %2024
  br label %2062

2051:                                             ; preds = %2024
  %2052 = load i32, ptr %14, align 4, !tbaa !9
  %2053 = icmp ne i32 %2052, -1
  %2054 = xor i1 %2053, true
  %2055 = xor i1 %2054, true
  %2056 = zext i1 %2055 to i32
  %2057 = sext i32 %2056 to i64
  %2058 = call i64 @llvm.expect.i64(i64 %2057, i64 0)
  %2059 = icmp ne i64 %2058, 0
  br i1 %2059, label %2060, label %2061

2060:                                             ; preds = %2051
  br label %2212

2061:                                             ; preds = %2051
  br label %2023, !llvm.loop !60

2062:                                             ; preds = %2050
  %2063 = load i32, ptr %7, align 4, !tbaa !9
  %2064 = and i32 %2063, 262144
  %2065 = icmp eq i32 %2064, 0
  br i1 %2065, label %2066, label %2067

2066:                                             ; preds = %2062
  br label %2076

2067:                                             ; preds = %2062
  %2068 = load i32, ptr %7, align 4, !tbaa !9
  %2069 = and i32 %2068, 524288
  %2070 = icmp eq i32 %2069, 0
  br i1 %2070, label %2072, label %2071

2071:                                             ; preds = %2067
  br label %2072

2072:                                             ; preds = %2071, %2067
  %2073 = phi i1 [ true, %2067 ], [ false, %2071 ]
  %2074 = zext i1 %2073 to i64
  %2075 = select i1 %2073, i32 1968526676, i32 894784854
  br label %2076

2076:                                             ; preds = %2072, %2066
  %2077 = phi i32 [ 0, %2066 ], [ %2075, %2072 ]
  store i32 %2077, ptr %48, align 4, !tbaa !9
  %2078 = load ptr, ptr %8, align 8, !tbaa !5
  %2079 = getelementptr inbounds %struct.meta, ptr %2078, i32 0, i32 1
  %2080 = getelementptr inbounds [2 x %union.mdbx_atomic_uint32_t], ptr %2079, i64 0, i64 0
  %2081 = load volatile i32, ptr %2080, align 4, !tbaa !25
  %2082 = load i32, ptr %48, align 4, !tbaa !9
  %2083 = sub i32 %2081, %2082
  %2084 = load ptr, ptr %6, align 8, !tbaa !5
  %2085 = getelementptr inbounds %struct.MDBX_env, ptr %2084, i32 0, i32 7
  %2086 = load ptr, ptr %2085, align 8, !tbaa !26
  %2087 = getelementptr inbounds %struct.shared_lck, ptr %2086, i32 0, i32 4
  store volatile i32 %2083, ptr %2087, align 4, !tbaa !25
  %2088 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #15
  %2089 = load ptr, ptr %6, align 8, !tbaa !5
  call void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8 %49, ptr noundef %2089)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2088, ptr align 8 %49, i64 32, i1 false), !tbaa.struct !62
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #15
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #15
  %2090 = load ptr, ptr %6, align 8, !tbaa !5
  %2091 = getelementptr inbounds %struct.MDBX_env, ptr %2090, i32 0, i32 24
  %2092 = load ptr, ptr %2091, align 8, !tbaa !41
  store ptr %2092, ptr %50, align 8, !tbaa !5
  br label %2093

2093:                                             ; preds = %2109, %2076
  %2094 = load ptr, ptr %50, align 8, !tbaa !5
  %2095 = icmp ne ptr %2094, null
  br i1 %2095, label %2097, label %2096

2096:                                             ; preds = %2093
  store i32 123, ptr %29, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #15
  br label %2113

2097:                                             ; preds = %2093
  %2098 = load ptr, ptr %9, align 8, !tbaa !5
  %2099 = load ptr, ptr %50, align 8, !tbaa !5
  %2100 = getelementptr inbounds %struct.MDBX_txn, ptr %2099, i32 0, i32 17
  %2101 = getelementptr inbounds %struct.anon.20, ptr %2100, i32 0, i32 0
  %2102 = icmp ne ptr %2098, %2101
  br i1 %2102, label %2103, label %2108

2103:                                             ; preds = %2097
  %2104 = load ptr, ptr %50, align 8, !tbaa !5
  %2105 = getelementptr inbounds %struct.MDBX_txn, ptr %2104, i32 0, i32 17
  %2106 = getelementptr inbounds %struct.anon.20, ptr %2105, i32 0, i32 0
  %2107 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %2106, ptr align 8 %2107, i64 32, i1 false), !tbaa.struct !62
  br label %2108

2108:                                             ; preds = %2103, %2097
  br label %2109

2109:                                             ; preds = %2108
  %2110 = load ptr, ptr %50, align 8, !tbaa !5
  %2111 = getelementptr inbounds %struct.MDBX_txn, ptr %2110, i32 0, i32 5
  %2112 = load ptr, ptr %2111, align 8, !tbaa !63
  store ptr %2112, ptr %50, align 8, !tbaa !5
  br label %2093, !llvm.loop !65

2113:                                             ; preds = %2096
  %2114 = load i32, ptr %18, align 4, !tbaa !9
  %2115 = icmp ne i32 %2114, 0
  %2116 = xor i1 %2115, true
  %2117 = xor i1 %2116, true
  %2118 = zext i1 %2117 to i32
  %2119 = sext i32 %2118 to i64
  %2120 = call i64 @llvm.expect.i64(i64 %2119, i64 0)
  %2121 = icmp ne i64 %2120, 0
  br i1 %2121, label %2122, label %2194

2122:                                             ; preds = %2113
  br label %2123

2123:                                             ; preds = %2122
  %2124 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !29
  %2125 = zext i8 %2124 to i32
  %2126 = icmp sle i32 4, %2125
  %2127 = xor i1 %2126, true
  %2128 = xor i1 %2127, true
  %2129 = zext i1 %2128 to i32
  %2130 = sext i32 %2129 to i64
  %2131 = call i64 @llvm.expect.i64(i64 %2130, i64 0)
  %2132 = icmp ne i64 %2131, 0
  br i1 %2132, label %2133, label %2139

2133:                                             ; preds = %2123
  %2134 = load ptr, ptr %8, align 8, !tbaa !5
  %2135 = getelementptr inbounds %struct.meta, ptr %2134, i32 0, i32 5
  %2136 = getelementptr inbounds %struct.geo, ptr %2135, i32 0, i32 4
  %2137 = load i32, ptr %2136, align 4, !tbaa !25
  %2138 = load i32, ptr %18, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1316, ptr noundef @.str.135, i32 noundef %2137, i32 noundef %2138)
  br label %2139

2139:                                             ; preds = %2133, %2123
  br label %2140

2140:                                             ; preds = %2139
  br label %2141

2141:                                             ; preds = %2140
  %2142 = load ptr, ptr %6, align 8, !tbaa !5
  %2143 = load ptr, ptr %8, align 8, !tbaa !5
  %2144 = getelementptr inbounds %struct.meta, ptr %2143, i32 0, i32 5
  %2145 = getelementptr inbounds %struct.geo, ptr %2144, i32 0, i32 5
  %2146 = load i32, ptr %2145, align 4, !tbaa !25
  %2147 = load ptr, ptr %8, align 8, !tbaa !5
  %2148 = getelementptr inbounds %struct.meta, ptr %2147, i32 0, i32 5
  %2149 = getelementptr inbounds %struct.geo, ptr %2148, i32 0, i32 4
  %2150 = load i32, ptr %2149, align 4, !tbaa !25
  %2151 = load ptr, ptr %8, align 8, !tbaa !5
  %2152 = getelementptr inbounds %struct.meta, ptr %2151, i32 0, i32 5
  %2153 = getelementptr inbounds %struct.geo, ptr %2152, i32 0, i32 3
  %2154 = load i32, ptr %2153, align 4, !tbaa !52
  %2155 = call i32 @dxb_resize(ptr noundef %2142, i32 noundef %2146, i32 noundef %2150, i32 noundef %2154, i32 noundef 1) #18
  store i32 %2155, ptr %14, align 4, !tbaa !9
  %2156 = load i32, ptr %14, align 4, !tbaa !9
  %2157 = icmp ne i32 %2156, 0
  br i1 %2157, label %2158, label %2162

2158:                                             ; preds = %2141
  %2159 = load i32, ptr %14, align 4, !tbaa !9
  %2160 = icmp ne i32 %2159, 1
  br i1 %2160, label %2161, label %2162

2161:                                             ; preds = %2158
  br label %2212

2162:                                             ; preds = %2158, %2141
  br label %2163

2163:                                             ; preds = %2162
  %2164 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %2165 = zext i8 %2164 to i32
  %2166 = and i32 %2165, 1
  %2167 = icmp ne i32 %2166, 0
  %2168 = xor i1 %2167, true
  %2169 = xor i1 %2168, true
  %2170 = zext i1 %2169 to i32
  %2171 = sext i32 %2170 to i64
  %2172 = call i64 @llvm.expect.i64(i64 %2171, i64 1)
  %2173 = icmp ne i64 %2172, 0
  br i1 %2173, label %2174, label %2191

2174:                                             ; preds = %2163
  br label %2175

2175:                                             ; preds = %2174
  %2176 = load ptr, ptr %6, align 8, !tbaa !5
  %2177 = load ptr, ptr %41, align 8, !tbaa !5
  %2178 = call zeroext i1 @coherency_check_meta(ptr noundef %2176, ptr noundef %2177, i1 noundef zeroext true)
  %2179 = xor i1 %2178, true
  %2180 = xor i1 %2179, true
  %2181 = xor i1 %2180, true
  %2182 = zext i1 %2181 to i32
  %2183 = sext i32 %2182 to i64
  %2184 = call i64 @llvm.expect.i64(i64 %2183, i64 0)
  %2185 = icmp ne i64 %2184, 0
  br i1 %2185, label %2186, label %2188

2186:                                             ; preds = %2175
  %2187 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %2187, ptr noundef @.str.131, ptr noundef @__func__.dxb_sync_locked, i32 noundef 1321) #14
  unreachable

2188:                                             ; preds = %2175
  br label %2189

2189:                                             ; preds = %2188
  br label %2190

2190:                                             ; preds = %2189
  br label %2191

2191:                                             ; preds = %2190, %2163
  br label %2192

2192:                                             ; preds = %2191
  br label %2193

2193:                                             ; preds = %2192
  br label %2194

2194:                                             ; preds = %2193, %2113
  %2195 = load ptr, ptr %6, align 8, !tbaa !5
  %2196 = getelementptr inbounds %struct.MDBX_env, ptr %2195, i32 0, i32 6
  %2197 = getelementptr inbounds %struct.osal_mmap, ptr %2196, i32 0, i32 0
  %2198 = load ptr, ptr %2197, align 8, !tbaa !25
  store ptr %2198, ptr %51, align 8, !tbaa !5
  %2199 = load ptr, ptr %51, align 8, !tbaa !5
  %2200 = icmp ne ptr %2199, null
  %2201 = xor i1 %2200, true
  %2202 = xor i1 %2201, true
  %2203 = zext i1 %2202 to i32
  %2204 = sext i32 %2203 to i64
  %2205 = call i64 @llvm.expect.i64(i64 %2204, i64 1)
  %2206 = icmp ne i64 %2205, 0
  br i1 %2206, label %2207, label %2211

2207:                                             ; preds = %2194
  %2208 = load ptr, ptr %51, align 8, !tbaa !5
  %2209 = getelementptr inbounds %struct.shared_lck, ptr %2208, i32 0, i32 21
  %2210 = call i32 @atomic_store32(ptr noundef %2209, i32 noundef 0, i32 noundef 0)
  br label %2211

2211:                                             ; preds = %2207, %2194
  store i32 0, ptr %5, align 4
  store i32 1, ptr %29, align 4
  br label %2218

2212:                                             ; preds = %2161, %2060, %2019, %1849, %978, %835
  %2213 = load ptr, ptr %6, align 8, !tbaa !5
  %2214 = getelementptr inbounds %struct.MDBX_env, ptr %2213, i32 0, i32 1
  %2215 = load i32, ptr %2214, align 4, !tbaa !15
  %2216 = or i32 %2215, -2147483648
  store i32 %2216, ptr %2214, align 4, !tbaa !15
  %2217 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %2217, ptr %5, align 4
  store i32 1, ptr %29, align 4
  br label %2218

2218:                                             ; preds = %2212, %2211, %2019, %1182, %978, %835
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #15
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #15
  %2219 = load i32, ptr %5, align 4
  ret i32 %2219
}

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @check_table_flags(i32 noundef) #3

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

declare i32 @mvcc_snapshot_largest(ptr noundef, i32 noundef) #4

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

declare zeroext i1 @coherency_check_meta(ptr noundef, ptr noundef, i1 noundef zeroext) #4

declare i32 @osal_fsync(i32 noundef, i32 noundef) #4

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @jitter4testing(i1 noundef zeroext) #3

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @osal_compiler_barrier() #3

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

declare i32 @coherency_check_written(ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) #4

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

!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 = !{!7, !7, i64 0}
!26 = !{!16, !6, i64 104}
!27 = !{!14, !14, i64 0}
!28 = !{!16, !14, i64 256}
!29 = !{!12, !7, i64 26}
!30 = !{!16, !14, i64 40}
!31 = !{!32, !18, i64 22}
!32 = !{!"meta", !7, i64 0, !7, i64 8, !18, i64 16, !7, i64 18, !7, i64 19, !33, i64 20, !7, i64 40, !34, i64 136, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 208}
!33 = !{!"geo", !18, i64 0, !18, i64 2, !10, i64 4, !10, i64 8, !7, i64 12, !7, i64 16}
!34 = !{!"MDBX_canary", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!35 = !{!32, !18, i64 20}
!36 = !{!32, !10, i64 24}
!37 = !{!38, !7, i64 0}
!38 = !{!"troika", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !10, i64 4, !7, i64 8}
!39 = !{!40, !14, i64 0}
!40 = !{!"meta_ptr", !14, i64 0, !7, i64 8, !14, i64 16}
!41 = !{!16, !6, i64 192}
!42 = !{!16, !6, i64 384}
!43 = !{!16, !13, i64 360}
!44 = !{i8 0, i8 2}
!45 = !{}
!46 = !{!16, !10, i64 24}
!47 = !{!13, !13, i64 0}
!48 = !{!40, !14, i64 16}
!49 = !{!38, !7, i64 3}
!50 = !{!38, !7, i64 1}
!51 = !{!38, !7, i64 2}
!52 = !{!32, !10, i64 28}
!53 = !{i64 0, i64 2, !54, i64 2, i64 2, !54, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !25, i64 16, i64 4, !25}
!54 = !{!18, !18, i64 0}
!55 = !{i64 0, i64 2, !54, i64 2, i64 2, !54, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9, i64 24, i64 8, !27, i64 32, i64 8, !27, i64 40, i64 8, !27}
!56 = !{i64 0, i64 8, !27, i64 8, i64 8, !27, i64 16, i64 8, !27, i64 24, i64 8, !27}
!57 = !{i64 0, i64 8, !25, i64 8, i64 8, !25, i64 16, i64 2, !54, i64 18, i64 1, !25, i64 19, i64 1, !25, i64 20, i64 2, !54, i64 22, i64 2, !54, i64 24, i64 4, !9, i64 28, i64 4, !9, i64 32, i64 4, !25, i64 36, i64 4, !25, i64 40, i64 96, !25, i64 136, i64 8, !27, i64 144, i64 8, !27, i64 152, i64 8, !27, i64 160, i64 8, !27, i64 168, i64 8, !25, i64 176, i64 8, !25, i64 184, i64 8, !25, i64 192, i64 16, !25, i64 208, i64 16, !25}
!58 = !{!16, !10, i64 60}
!59 = !{!12, !10, i64 16}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}
!62 = !{i64 0, i64 1, !25, i64 1, i64 1, !25, i64 2, i64 1, !25, i64 3, i64 1, !25, i64 4, i64 4, !9, i64 8, i64 24, !25}
!63 = !{!64, !6, i64 32}
!64 = !{!"MDBX_txn", !10, i64 0, !10, i64 4, !14, i64 8, !14, i64 16, !6, i64 24, !6, i64 32, !33, i64 40, !14, i64 64, !14, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !34, i64 128, !6, i64 160, !7, i64 168}
!65 = distinct !{!65, !61}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

@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.18 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [44 x i8], align 1
@__func__.dxb_sync_locked = external hidden unnamed_addr constant [16 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [97 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.129 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.130 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.131 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.132 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [26 x i8], align 1

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @unaligned_poke_u64(i64 noundef, ptr noalias noundef, i64 noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

declare i32 @osal_msync(ptr noundef, i64 noundef, i64 noundef, i32 noundef) local_unnamed_addr #3

declare void @munlock_after(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #3

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

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

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

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

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

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

declare ptr @durable_caption(ptr noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

declare i64 @osal_monotime() local_unnamed_addr #3

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @dxb_sync_locked(ptr noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #12 {
  %5 = alloca %struct.meta_ptr, align 8
  %6 = alloca %struct.meta_ptr, align 8
  %7 = alloca %struct.meta_ptr, align 8
  %8 = alloca %struct.meta, align 4
  %9 = alloca i64, align 8
  %10 = alloca %struct.troika, align 8
  %11 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %12 = and i8 %11, 1
  %.not444 = icmp eq i8 %12, 0
  br i1 %.not444, label %.thread556, label %13, !prof !13

13:                                               ; preds = %4
  %14 = getelementptr inbounds i8, ptr %0, i64 4
  %15 = load i32, ptr %14, align 4, !tbaa !14
  %16 = xor i32 %15, %1
  %17 = and i32 %16, 524288
  %.not445 = icmp eq i32 %17, 0
  br i1 %.not445, label %19, label %18, !prof !24

18:                                               ; preds = %13
  tail call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.100, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 970) #15
  unreachable

19:                                               ; preds = %13
  %20 = getelementptr inbounds i8, ptr %2, i64 40
  %21 = load i16, ptr %20, align 4, !tbaa !25
  %.not447 = icmp eq i16 %21, 8
  br i1 %.not447, label %23, label %22, !prof !24

22:                                               ; preds = %19
  tail call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.101, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 971) #15
  unreachable

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %2, i64 88
  %25 = load i16, ptr %24, align 4, !tbaa !25
  %26 = zext i16 %25 to i32
  %27 = tail call zeroext i1 @check_table_flags(i32 noundef %26)
  br i1 %27, label %.thread556, label %28, !prof !24

28:                                               ; preds = %23
  tail call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.102, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 972) #15
  unreachable

.thread556:                                       ; preds = %4, %23
  %29 = tail call ptr @pgno2page(ptr noundef %0, i64 noundef 0) #16
  %30 = tail call ptr @page_meta(ptr noundef %29) #16
  %31 = tail call ptr @pgno2page(ptr noundef %0, i64 noundef 1) #16
  %32 = tail call ptr @page_meta(ptr noundef %31) #16
  %33 = tail call ptr @pgno2page(ptr noundef %0, i64 noundef 2) #16
  %34 = tail call ptr @page_meta(ptr noundef %33) #16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #17
  call void @meta_recent(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %5, ptr noundef %0, ptr noundef %3)
  %35 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %36 = and i8 %35, 1
  %.not449 = icmp eq i8 %36, 0
  br i1 %.not449, label %.critedge.thread557, label %37, !prof !13

37:                                               ; preds = %.thread556
  %38 = call ptr @pgno2page(ptr noundef %0, i64 noundef 0) #16
  %39 = call ptr @page_meta(ptr noundef %38) #16
  %40 = icmp ugt ptr %39, %2
  br i1 %40, label %46, label %41

41:                                               ; preds = %37
  %42 = call ptr @pgno2page(ptr noundef %0, i64 noundef 3) #16
  %43 = call ptr @page_meta(ptr noundef %42) #16
  %44 = icmp ult ptr %43, %2
  br i1 %44, label %46, label %45, !prof !24

45:                                               ; preds = %41
  call void @mdbx_assert_fail(ptr noundef %0, ptr noundef nonnull @.str.103, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 979) #15
  unreachable

46:                                               ; preds = %37, %41
  %47 = getelementptr inbounds i8, ptr %0, i64 4
  %48 = load i32, ptr %47, align 4, !tbaa !14
  %49 = and i32 %48, -2147352576
  %.not451 = icmp eq i32 %49, 0
  br i1 %.not451, label %.critedge, label %50, !prof !24

50:                                               ; preds = %46
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.104, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 980) #15
  unreachable

.critedge:                                        ; preds = %46
  %51 = getelementptr inbounds i8, ptr %2, i64 36
  %52 = load i32, ptr %51, align 4, !tbaa !25
  %53 = getelementptr inbounds i8, ptr %2, i64 32
  %54 = load i32, ptr %53, align 4, !tbaa !25
  %.not453 = icmp ugt i32 %52, %54
  br i1 %.not453, label %55, label %.critedge.thread557, !prof !13

55:                                               ; preds = %.critedge
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.105, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 981) #15
  unreachable

.critedge.thread557:                              ; preds = %.thread556, %.critedge
  %56 = and i32 %1, 65536
  %.not454 = icmp eq i32 %56, 0
  br i1 %.not454, label %80, label %57

57:                                               ; preds = %.critedge.thread557
  %58 = getelementptr inbounds i8, ptr %0, i64 104
  %59 = load ptr, ptr %58, align 8, !tbaa !26
  %60 = getelementptr inbounds i8, ptr %59, i64 16
  %61 = call i32 @atomic_load32(ptr noundef nonnull %60, i32 noundef 0)
  %62 = load ptr, ptr %58, align 8, !tbaa !26
  %63 = getelementptr inbounds i8, ptr %62, i64 24
  %64 = call i64 @atomic_load64(ptr noundef nonnull %63, i32 noundef 0)
  %.not455 = icmp eq i32 %61, 0
  br i1 %.not455, label %70, label %65

65:                                               ; preds = %57
  %66 = load ptr, ptr %58, align 8, !tbaa !26
  %67 = getelementptr inbounds i8, ptr %66, i64 376
  %68 = call i64 @atomic_load64(ptr noundef nonnull %67, i32 noundef 0)
  %69 = zext i32 %61 to i64
  %.not456 = icmp ult i64 %68, %69
  br i1 %.not456, label %70, label %78

70:                                               ; preds = %65, %57
  %.not457 = icmp eq i64 %64, 0
  br i1 %.not457, label %80, label %71

71:                                               ; preds = %70
  %72 = load ptr, ptr %58, align 8, !tbaa !26
  %73 = getelementptr inbounds i8, ptr %72, i64 368
  %74 = call i64 @atomic_load64(ptr noundef nonnull %73, i32 noundef 0)
  %.not458 = icmp eq i64 %74, 0
  br i1 %.not458, label %80, label %75

75:                                               ; preds = %71
  %76 = call i64 @osal_monotime() #17
  %77 = sub i64 %76, %74
  %.not459 = icmp ult i64 %77, %64
  br i1 %.not459, label %80, label %78

78:                                               ; preds = %75, %65
  %79 = and i32 %1, 1074266112
  br label %80

80:                                               ; preds = %70, %71, %75, %78, %.critedge.thread557
  %.1369 = phi i32 [ %1, %.critedge.thread557 ], [ %79, %78 ], [ %1, %75 ], [ %1, %71 ], [ %1, %70 ]
  %81 = and i32 %.1369, 1073741824
  %.not460 = icmp eq i32 %81, 0
  br i1 %.not460, label %.thread563, label %82

82:                                               ; preds = %80
  %83 = getelementptr inbounds i8, ptr %0, i64 104
  %84 = load ptr, ptr %83, align 8, !tbaa !26
  %85 = getelementptr inbounds i8, ptr %84, i64 392
  %86 = call i32 @atomic_load32(ptr noundef nonnull %85, i32 noundef 0)
  %87 = zext i32 %86 to i64
  %88 = getelementptr inbounds i8, ptr %2, i64 20
  %89 = getelementptr inbounds i8, ptr %2, i64 36
  %90 = load i32, ptr %89, align 4, !tbaa !25
  %91 = icmp ult i32 %86, %90
  br i1 %91, label %92, label %95

92:                                               ; preds = %82
  %93 = load ptr, ptr %83, align 8, !tbaa !26
  %94 = getelementptr inbounds i8, ptr %93, i64 392
  store volatile i32 %90, ptr %94, align 8, !tbaa !25
  br label %.thread563

95:                                               ; preds = %82
  %96 = zext i32 %90 to i64
  %97 = getelementptr inbounds i8, ptr %0, i64 256
  %98 = load i64, ptr %97, align 8, !tbaa !27
  %99 = add i64 %98, %96
  %.not461 = icmp ugt i64 %99, %87
  br i1 %.not461, label %.thread563, label %100

100:                                              ; preds = %95
  %101 = getelementptr inbounds i8, ptr %5, i64 8
  %102 = load ptr, ptr %101, align 8, !tbaa !25
  %103 = getelementptr inbounds i8, ptr %102, i64 36
  %104 = load i32, ptr %103, align 4, !tbaa !25
  %. = call i32 @llvm.umax.i32(i32 %104, i32 %90)
  %105 = call i32 @mvcc_snapshot_largest(ptr noundef nonnull %0, i32 noundef %.) #17
  %106 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %107 = and i8 %106, 1
  %.not462 = icmp ne i8 %107, 0
  %108 = icmp ult i32 %105, 3
  %or.cond = select i1 %.not462, i1 %108, i1 false
  br i1 %or.cond, label %109, label %110, !prof !28

109:                                              ; preds = %100
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.106, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1005) #15
  unreachable

110:                                              ; preds = %100
  %111 = zext i32 %105 to i64
  %112 = call i32 @pgno_align2os_pgno(ptr noundef nonnull %0, i64 noundef %111) #16
  %113 = zext i32 %112 to i64
  %114 = load i64, ptr %97, align 8, !tbaa !27
  %115 = add i64 %114, %113
  %.not463 = icmp ugt i64 %115, %87
  br i1 %.not463, label %.critedge525.thread, label %116

116:                                              ; preds = %110
  %117 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %87) #16
  %118 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %113) #16
  %119 = icmp ugt i64 %117, %118
  br i1 %119, label %120, label %.critedge525.thread

120:                                              ; preds = %116
  %121 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %122 = icmp ugt i8 %121, 2
  br i1 %122, label %123, label %124, !prof !13

123:                                              ; preds = %120
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1026, ptr noundef nonnull @.str.107, ptr noundef nonnull @.str.17, i64 noundef %113, i64 noundef %87) #17
  br label %124

124:                                              ; preds = %123, %120
  %125 = getelementptr inbounds i8, ptr %0, i64 16
  %126 = getelementptr inbounds i8, ptr %0, i64 40
  %127 = load i64, ptr %126, align 8, !tbaa !30
  %128 = call i64 @bytes_align2os_bytes(ptr noundef nonnull %0, i64 noundef %127) #16
  call void @munlock_after(ptr noundef nonnull %0, i32 noundef %112, i64 noundef %128) #17
  %129 = load ptr, ptr %83, align 8, !tbaa !26
  %130 = getelementptr inbounds i8, ptr %129, i64 44
  %131 = call i32 @atomic_load32(ptr noundef nonnull %130, i32 noundef 0)
  %132 = load ptr, ptr %125, align 8, !tbaa !25
  %133 = ptrtoint ptr %132 to i64
  %134 = add nsw i64 %118, %133
  %135 = inttoptr i64 %134 to ptr
  %136 = sub i64 %117, %118
  %137 = call i32 @madvise(ptr noundef %135, i64 noundef %136, i32 noundef 4) #17
  %.not464 = icmp eq i32 %137, 0
  br i1 %.not464, label %.thread558, label %138

138:                                              ; preds = %124
  %139 = tail call ptr @__errno_location() #18
  %140 = load i32, ptr %139, align 4, !tbaa !31
  %141 = call i32 @ignore_enosys(i32 noundef %140)
  %142 = add i32 %141, -1
  %143 = icmp ult i32 %142, -2
  br i1 %143, label %144, label %.thread558, !prof !32

144:                                              ; preds = %138
  %145 = load ptr, ptr %83, align 8, !tbaa !26
  %146 = getelementptr inbounds i8, ptr %145, i64 40
  %147 = call i32 @atomic_load32(ptr noundef nonnull %146, i32 noundef 0)
  %148 = icmp eq i32 %141, 22
  br i1 %148, label %149, label %154

149:                                              ; preds = %144
  %.not466 = icmp eq i32 %147, %131
  %150 = select i1 %.not466, i32 2, i32 3
  %151 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %152 = zext i8 %151 to i32
  %.not467 = icmp ugt i32 %150, %152
  br i1 %.not467, label %.critedge525.thread, label %153, !prof !24

153:                                              ; preds = %149
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef %150, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1048, ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.108, i32 noundef 22, i32 noundef %147, i32 noundef %131) #17
  br label %.critedge525.thread

154:                                              ; preds = %144
  %155 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %.not465 = icmp eq i8 %155, 0
  br i1 %.not465, label %.thread569, label %156, !prof !24

156:                                              ; preds = %154
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1054, ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.108, ptr noundef nonnull @.str.17, i64 noundef %118, i64 noundef %136, i32 noundef %147, i32 noundef %131, i32 noundef %141) #17
  br label %.thread569

.thread558:                                       ; preds = %124, %138
  %157 = load ptr, ptr %83, align 8, !tbaa !26
  %158 = getelementptr inbounds i8, ptr %157, i64 392
  store volatile i32 %112, ptr %158, align 8, !tbaa !25
  br label %.critedge525.thread

.critedge525.thread:                              ; preds = %153, %149, %.thread558, %116, %110
  %159 = getelementptr inbounds i8, ptr %2, i64 42
  %160 = load i16, ptr %159, align 2, !tbaa !25
  %161 = zext i16 %160 to i32
  %162 = mul nuw nsw i32 %161, 3
  %163 = add nuw nsw i32 %162, 3
  %164 = getelementptr inbounds i8, ptr %2, i64 22
  %165 = load i16, ptr %164, align 2, !tbaa !33
  %.not468 = icmp eq i16 %165, 0
  br i1 %.not468, label %.thread563, label %166

166:                                              ; preds = %.critedge525.thread
  %167 = getelementptr inbounds i8, ptr %2, i64 32
  %168 = load i32, ptr %167, align 4, !tbaa !25
  %169 = load i32, ptr %89, align 4, !tbaa !25
  %170 = sub i32 %168, %169
  %171 = call i32 @pv2pages(i16 noundef zeroext %165) #18
  %172 = add i32 %171, %163
  %173 = icmp ugt i32 %170, %172
  %174 = icmp ugt i32 %168, %105
  %175 = sub i32 %168, %105
  %176 = icmp ugt i32 %175, %172
  %177 = and i1 %174, %176
  %or.cond528 = select i1 %173, i1 %177, i1 false
  br i1 %or.cond528, label %178, label %.thread563

178:                                              ; preds = %166
  %179 = load i16, ptr %88, align 4, !tbaa !37
  %.not469 = icmp eq i16 %179, 0
  br i1 %.not469, label %182, label %180

180:                                              ; preds = %178
  %181 = call i32 @pv2pages(i16 noundef zeroext %179) #18
  br label %182

182:                                              ; preds = %178, %180
  %183 = phi i32 [ %181, %180 ], [ %171, %178 ]
  %184 = add i32 %163, %105
  %185 = zext i32 %184 to i64
  %186 = zext i32 %183 to i64
  %187 = add nuw nsw i64 %186, %185
  %188 = urem i32 %184, %183
  %189 = zext i32 %188 to i64
  %190 = sub nsw i64 %187, %189
  %191 = call i32 @pgno_align2os_pgno(ptr noundef nonnull %0, i64 noundef %190) #16
  %192 = getelementptr inbounds i8, ptr %2, i64 24
  %193 = load i32, ptr %192, align 4, !tbaa !38
  %.529 = call i32 @llvm.umax.i32(i32 %191, i32 %193)
  %194 = icmp ugt i32 %168, %.529
  br i1 %194, label %195, label %.thread563

195:                                              ; preds = %182
  %196 = load i8, ptr %3, align 8, !tbaa !39
  %197 = and i8 %196, 7
  %.not470 = icmp eq i8 %197, 0
  %198 = and i32 %.1369, 1074266112
  %spec.select = select i1 %.not470, i32 %.1369, i32 %198
  %199 = sub i32 %168, %.529
  store i32 %.529, ptr %167, align 4, !tbaa !25
  %200 = load i64, ptr %5, align 8, !tbaa !41
  %201 = getelementptr inbounds i8, ptr %2, i64 8
  %202 = load i64, ptr %201, align 4, !tbaa !25
  %203 = icmp eq i64 %200, %202
  br i1 %203, label %204, label %.thread563, !prof !13

204:                                              ; preds = %195
  %205 = call i64 @safe64_txnid_next(i64 noundef %200)
  %206 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %207 = icmp ugt i8 %206, 2
  br i1 %207, label %208, label %210, !prof !13

208:                                              ; preds = %204
  %209 = load i64, ptr %201, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1084, ptr noundef nonnull @.str.109, i64 noundef %209, i64 noundef %205) #17
  br label %210

210:                                              ; preds = %204, %208
  %211 = getelementptr inbounds i8, ptr %0, i64 192
  %212 = load ptr, ptr %211, align 8, !tbaa !43
  %.not471 = icmp eq ptr %212, null
  br i1 %.not471, label %.critedge531, label %213

213:                                              ; preds = %210
  %214 = getelementptr inbounds i8, ptr %0, i64 384
  %215 = load ptr, ptr %214, align 8, !tbaa !44
  %.not472 = icmp eq ptr %215, null
  br i1 %.not472, label %.critedge531, label %216, !prof !24

216:                                              ; preds = %213
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.110, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1085) #15
  unreachable

.critedge531:                                     ; preds = %210, %213
  %217 = icmp ult i64 %205, -4294967296
  br i1 %217, label %221, label %218, !prof !24

218:                                              ; preds = %.critedge531
  %219 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %.not474 = icmp eq i8 %219, 0
  br i1 %.not474, label %.loopexit, label %220, !prof !24

220:                                              ; preds = %218
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1088, ptr noundef nonnull @.str.88, i32 noundef -30788) #17
  br label %.loopexit

221:                                              ; preds = %.critedge531
  call void @meta_set_txnid(ptr noundef nonnull %0, ptr noundef nonnull %2, i64 noundef %205)
  %222 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %223 = and i8 %222, 1
  %.not473 = icmp eq i8 %223, 0
  br i1 %.not473, label %.thread563, label %224, !prof !13

224:                                              ; preds = %221
  %225 = call zeroext i1 @coherency_check_meta(ptr noundef nonnull %0, ptr noundef nonnull %2, i1 noundef zeroext true) #17
  br i1 %225, label %.thread563, label %226, !prof !24

226:                                              ; preds = %224
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.111, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1092) #15
  unreachable

.thread563:                                       ; preds = %224, %221, %182, %195, %.critedge525.thread, %166, %92, %95, %80
  %.7397 = phi i32 [ 0, %80 ], [ 0, %95 ], [ 0, %92 ], [ 0, %166 ], [ 0, %.critedge525.thread ], [ 0, %182 ], [ %199, %195 ], [ %199, %221 ], [ %199, %224 ]
  %.10378 = phi i32 [ %.1369, %80 ], [ %.1369, %95 ], [ %.1369, %92 ], [ %.1369, %166 ], [ %.1369, %.critedge525.thread ], [ %.1369, %182 ], [ %spec.select, %195 ], [ %spec.select, %221 ], [ %spec.select, %224 ]
  %227 = getelementptr inbounds i8, ptr %0, i64 104
  %228 = load ptr, ptr %227, align 8, !tbaa !26
  %229 = getelementptr inbounds i8, ptr %228, i64 376
  %230 = call i64 @atomic_load64(ptr noundef nonnull %229, i32 noundef 0)
  %.not475 = icmp eq i64 %230, 0
  br i1 %.not475, label %279, label %231

231:                                              ; preds = %.thread563
  %232 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %233 = and i8 %232, 1
  %.not476 = icmp eq i8 %233, 0
  br i1 %.not476, label %240, label %234, !prof !13

234:                                              ; preds = %231
  %235 = getelementptr inbounds i8, ptr %0, i64 4
  %236 = load i32, ptr %235, align 4, !tbaa !14
  %237 = xor i32 %236, %.10378
  %238 = and i32 %237, 524288
  %.not477 = icmp eq i32 %238, 0
  br i1 %.not477, label %240, label %239, !prof !24

239:                                              ; preds = %234
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.112, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1103) #15
  unreachable

240:                                              ; preds = %234, %231
  %241 = and i32 %.10378, 65536
  %242 = icmp eq i32 %241, 0
  br i1 %242, label %243, label %253

243:                                              ; preds = %240
  %244 = getelementptr inbounds i8, ptr %2, i64 36
  %245 = load i32, ptr %244, align 4, !tbaa !25
  call void @meta_prefer_steady(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %6, ptr noundef nonnull %0, ptr noundef %3)
  %246 = getelementptr inbounds i8, ptr %6, i64 8
  %247 = load ptr, ptr %246, align 8, !tbaa !25
  %248 = getelementptr inbounds i8, ptr %247, i64 32
  %249 = load i32, ptr %248, align 4, !tbaa !25
  %250 = icmp ugt i32 %245, %249
  %spec.select532 = select i1 %250, i32 6, i32 2
  %251 = lshr i32 %.10378, 15
  %252 = and i32 %251, 8
  %spec.select555 = or disjoint i32 %spec.select532, %252
  br label %257

253:                                              ; preds = %240
  %254 = getelementptr inbounds i8, ptr %0, i64 360
  %255 = load i8, ptr %254, align 8, !tbaa !45, !range !46, !noundef !47
  %256 = trunc nuw i8 %255 to i1
  br i1 %256, label %.thread592, label %257, !prof !13

257:                                              ; preds = %243, %253
  %.1411 = phi i32 [ 0, %253 ], [ %spec.select555, %243 ]
  %.0409 = phi i64 [ 0, %253 ], [ 1, %243 ]
  %258 = and i32 %.10378, 524288
  %.not479 = icmp eq i32 %258, 0
  %259 = load ptr, ptr %227, align 8, !tbaa !26
  br i1 %.not479, label %270, label %260

260:                                              ; preds = %257
  %261 = getelementptr inbounds i8, ptr %259, i64 128
  %262 = load volatile i64, ptr %261, align 64, !tbaa !25
  %263 = add i64 %262, %.0409
  store volatile i64 %263, ptr %261, align 64, !tbaa !25
  %264 = getelementptr inbounds i8, ptr %0, i64 16
  %265 = getelementptr inbounds i8, ptr %2, i64 36
  %266 = load i32, ptr %265, align 4, !tbaa !25
  %267 = zext i32 %266 to i64
  %268 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %267) #16
  %269 = call i32 @osal_msync(ptr noundef nonnull %264, i64 noundef 0, i64 noundef %268, i32 noundef %.1411) #17
  br label %277

270:                                              ; preds = %257
  %271 = getelementptr inbounds i8, ptr %259, i64 136
  %272 = load volatile i64, ptr %271, align 8, !tbaa !25
  %273 = add i64 %272, %.0409
  store volatile i64 %273, ptr %271, align 8, !tbaa !25
  %274 = getelementptr inbounds i8, ptr %0, i64 24
  %275 = load i32, ptr %274, align 8, !tbaa !48
  %276 = call i32 @osal_fsync(i32 noundef %275, i32 noundef %.1411) #17
  br label %277

277:                                              ; preds = %270, %260
  %.8387 = phi i32 [ %269, %260 ], [ %276, %270 ]
  %.not480 = icmp eq i32 %.8387, 0
  br i1 %.not480, label %.thread589, label %.loopexit, !prof !24

.thread589:                                       ; preds = %277
  %278 = shl nuw i32 %241, 15
  %sext = ashr exact i32 %278, 31
  br label %279

279:                                              ; preds = %.thread589, %.thread563
  %.10389 = phi i32 [ 0, %.thread563 ], [ %sext, %.thread589 ]
  %280 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %281 = and i8 %280, 1
  %.not482 = icmp eq i8 %281, 0
  br i1 %.not482, label %285, label %282, !prof !13

282:                                              ; preds = %279
  %283 = call zeroext i1 @coherency_check_meta(ptr noundef nonnull %0, ptr noundef %2, i1 noundef zeroext true) #17
  br i1 %283, label %285, label %284, !prof !24

284:                                              ; preds = %282
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.111, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1135) #15
  unreachable

285:                                              ; preds = %282, %279
  %286 = icmp eq i32 %.10389, 0
  br i1 %286, label %287, label %..thread592_crit_edge

..thread592_crit_edge:                            ; preds = %285
  %.pre = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %.pre631 = and i8 %.pre, 1
  br label %.thread592

287:                                              ; preds = %285
  call void @meta_sign_as_steady(ptr noundef %2)
  %288 = load ptr, ptr %227, align 8, !tbaa !26
  %289 = getelementptr inbounds i8, ptr %288, i64 368
  %290 = call i64 @atomic_store64(ptr noundef nonnull %289, i64 noundef 0, i32 noundef 0)
  %291 = load ptr, ptr %227, align 8, !tbaa !26
  %292 = getelementptr inbounds i8, ptr %291, i64 376
  %293 = call i64 @atomic_store64(ptr noundef nonnull %292, i64 noundef 0, i32 noundef 0)
  br label %301

.thread592:                                       ; preds = %..thread592_crit_edge, %253
  %.pre-phi632 = phi i8 [ %.pre631, %..thread592_crit_edge ], [ %233, %253 ]
  %.not485 = icmp eq i8 %.pre-phi632, 0
  br i1 %.not485, label %299, label %294, !prof !13

294:                                              ; preds = %.thread592
  %295 = load ptr, ptr %227, align 8, !tbaa !26
  %296 = getelementptr inbounds i8, ptr %295, i64 376
  %297 = load volatile i64, ptr %296, align 8, !tbaa !25
  %.not486 = icmp eq i64 %297, 0
  br i1 %.not486, label %298, label %299, !prof !13

298:                                              ; preds = %294
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.114, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1145) #15
  unreachable

299:                                              ; preds = %294, %.thread592
  %300 = getelementptr inbounds i8, ptr %2, i64 168
  call void @unaligned_poke_u64(i64 noundef 4, ptr noundef nonnull %300, i64 noundef 1)
  br label %301

301:                                              ; preds = %299, %287
  %302 = load i64, ptr %5, align 8, !tbaa !41
  %303 = getelementptr inbounds i8, ptr %2, i64 8
  %304 = load i64, ptr %303, align 4, !tbaa !25
  %305 = icmp eq i64 %302, %304
  br i1 %305, label %306, label %331

306:                                              ; preds = %301
  %307 = getelementptr inbounds i8, ptr %5, i64 8
  %308 = load ptr, ptr %307, align 8, !tbaa !25
  %309 = getelementptr inbounds i8, ptr %308, i64 40
  %310 = getelementptr inbounds i8, ptr %2, i64 40
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(96) %309, ptr noundef nonnull dereferenceable(96) %310, i64 96)
  %.not487 = icmp eq i32 %bcmp, 0
  br i1 %.not487, label %311, label %.thread598, !prof !49

311:                                              ; preds = %306
  %312 = getelementptr inbounds i8, ptr %308, i64 136
  %313 = getelementptr inbounds i8, ptr %2, i64 136
  %bcmp488 = call i32 @bcmp(ptr noundef nonnull dereferenceable(32) %312, ptr noundef nonnull dereferenceable(32) %313, i64 32)
  %.not489 = icmp eq i32 %bcmp488, 0
  br i1 %.not489, label %314, label %.thread598, !prof !49

314:                                              ; preds = %311
  %315 = getelementptr inbounds i8, ptr %308, i64 20
  %316 = getelementptr inbounds i8, ptr %2, i64 20
  %bcmp490 = call i32 @bcmp(ptr noundef nonnull dereferenceable(20) %315, ptr noundef nonnull dereferenceable(20) %316, i64 20)
  %.not491 = icmp eq i32 %bcmp490, 0
  br i1 %.not491, label %317, label %.thread598, !prof !50

.thread598:                                       ; preds = %311, %306, %314
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.115, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1157) #15
  unreachable

317:                                              ; preds = %314
  %318 = getelementptr inbounds i8, ptr %5, i64 16
  %319 = load i64, ptr %318, align 8, !tbaa !51
  %.not494 = icmp eq i64 %319, 0
  br i1 %.not494, label %320, label %322

320:                                              ; preds = %317
  %321 = call zeroext i1 @meta_is_steady(ptr noundef nonnull %2)
  br i1 %321, label %343, label %322

322:                                              ; preds = %317, %320
  %323 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %324 = icmp ugt i8 %323, 2
  br i1 %324, label %325, label %.thread569, !prof !13

325:                                              ; preds = %322
  %326 = load ptr, ptr %307, align 8, !tbaa !25
  %327 = call ptr @data_page(ptr noundef %326) #16
  %328 = getelementptr inbounds i8, ptr %327, i64 16
  %329 = load i32, ptr %328, align 1, !tbaa !31
  %330 = load i64, ptr %5, align 8, !tbaa !41
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1162, ptr noundef nonnull @.str.116, i32 noundef %329, i64 noundef %330) #17
  br label %.thread569

331:                                              ; preds = %301
  %332 = getelementptr inbounds i8, ptr %3, i64 3
  %333 = load i8, ptr %332, align 1, !tbaa !52
  %334 = and i8 %333, 3
  %.not492 = icmp eq i8 %334, 3
  br i1 %.not492, label %.critedge535, label %335, !prof !13

335:                                              ; preds = %331
  %336 = getelementptr inbounds i8, ptr %3, i64 1
  %337 = load i8, ptr %336, align 1, !tbaa !53
  %.not493 = icmp eq i8 %334, %337
  br i1 %.not493, label %.critedge535, label %338, !prof !13

338:                                              ; preds = %335
  %339 = getelementptr inbounds i8, ptr %3, i64 2
  %340 = load i8, ptr %339, align 2, !tbaa !54
  %.not616 = icmp eq i8 %334, %340
  br i1 %.not616, label %.critedge535, label %341, !prof !13

.critedge535:                                     ; preds = %335, %331, %338
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.117, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1167) #15
  unreachable

341:                                              ; preds = %338
  call void @meta_tail(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %7, ptr noundef nonnull %0, ptr noundef nonnull %3)
  %342 = getelementptr inbounds i8, ptr %7, i64 8
  br label %343

343:                                              ; preds = %320, %341
  %.sink = phi ptr [ %342, %341 ], [ %307, %320 ]
  %344 = load ptr, ptr %.sink, align 8, !tbaa !25
  %345 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %346 = icmp ugt i8 %345, 4
  br i1 %346, label %347, label %.thread605, !prof !13

347:                                              ; preds = %343
  %348 = call ptr @data_page(ptr noundef %344) #16
  %349 = getelementptr inbounds i8, ptr %348, i64 16
  %350 = load i32, ptr %349, align 1, !tbaa !31
  %351 = getelementptr inbounds i8, ptr %2, i64 96
  %352 = load i32, ptr %351, align 4, !tbaa !25
  %353 = getelementptr inbounds i8, ptr %2, i64 48
  %354 = load i32, ptr %353, align 4, !tbaa !25
  %355 = getelementptr inbounds i8, ptr %2, i64 20
  %356 = getelementptr inbounds i8, ptr %2, i64 24
  %357 = load i32, ptr %356, align 4, !tbaa !38
  %358 = getelementptr inbounds i8, ptr %2, i64 36
  %359 = load i32, ptr %358, align 4, !tbaa !25
  %360 = getelementptr inbounds i8, ptr %2, i64 32
  %361 = load i32, ptr %360, align 4, !tbaa !25
  %362 = getelementptr inbounds i8, ptr %2, i64 28
  %363 = load i32, ptr %362, align 4, !tbaa !55
  %364 = load i16, ptr %355, align 4, !tbaa !37
  %365 = call i32 @pv2pages(i16 noundef zeroext %364) #18
  %366 = getelementptr inbounds i8, ptr %2, i64 22
  %367 = load i16, ptr %366, align 2, !tbaa !33
  %368 = call i32 @pv2pages(i16 noundef zeroext %367) #18
  %369 = load i64, ptr %303, align 4, !tbaa !25
  %370 = call ptr @durable_caption(ptr noundef nonnull %2) #17
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1177, ptr noundef nonnull @.str.118, i32 noundef %350, i32 noundef %352, i32 noundef %354, i32 noundef %357, i32 noundef %359, i32 noundef %361, i32 noundef %363, i32 noundef %365, i32 noundef %368, i64 noundef %369, ptr noundef %370) #17
  %.pr = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %371 = icmp ugt i8 %.pr, 4
  br i1 %371, label %372, label %.thread605, !prof !50

372:                                              ; preds = %347
  %373 = getelementptr inbounds i8, ptr %5, i64 8
  %374 = load ptr, ptr %373, align 8, !tbaa !25
  %375 = icmp eq ptr %30, %374
  %376 = icmp eq ptr %30, %344
  %377 = select i1 %376, ptr @.str.121, ptr @.str.122
  %378 = select i1 %375, ptr @.str.120, ptr %377
  %379 = call ptr @durable_caption(ptr noundef %30) #17
  %380 = call i64 @constmeta_txnid(ptr noundef %30) #16
  %381 = getelementptr inbounds i8, ptr %30, i64 96
  %382 = load i32, ptr %381, align 4, !tbaa !25
  %383 = getelementptr inbounds i8, ptr %30, i64 48
  %384 = load i32, ptr %383, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1183, ptr noundef nonnull @.str.119, ptr noundef nonnull %378, ptr noundef %379, i64 noundef %380, i32 noundef %382, i32 noundef %384) #17
  %.pr601 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %385 = icmp ugt i8 %.pr601, 4
  br i1 %385, label %.thread603, label %.thread605, !prof !50

.thread603:                                       ; preds = %372
  %386 = load ptr, ptr %373, align 8, !tbaa !25
  %387 = icmp eq ptr %32, %386
  %388 = icmp eq ptr %32, %344
  %389 = select i1 %388, ptr @.str.121, ptr @.str.122
  %390 = select i1 %387, ptr @.str.120, ptr %389
  %391 = call ptr @durable_caption(ptr noundef %32) #17
  %392 = call i64 @constmeta_txnid(ptr noundef %32) #16
  %393 = getelementptr inbounds i8, ptr %32, i64 96
  %394 = load i32, ptr %393, align 4, !tbaa !25
  %395 = getelementptr inbounds i8, ptr %32, i64 48
  %396 = load i32, ptr %395, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1188, ptr noundef nonnull @.str.123, ptr noundef nonnull %390, ptr noundef %391, i64 noundef %392, i32 noundef %394, i32 noundef %396) #17
  %.pr604.pr = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %397 = icmp ugt i8 %.pr604.pr, 4
  br i1 %397, label %398, label %.thread605, !prof !50

398:                                              ; preds = %.thread603
  %399 = load ptr, ptr %373, align 8, !tbaa !25
  %400 = icmp eq ptr %34, %399
  %401 = icmp eq ptr %34, %344
  %402 = select i1 %401, ptr @.str.121, ptr @.str.122
  %403 = select i1 %400, ptr @.str.120, ptr %402
  %404 = call ptr @durable_caption(ptr noundef %34) #17
  %405 = call i64 @constmeta_txnid(ptr noundef %34) #16
  %406 = getelementptr inbounds i8, ptr %34, i64 96
  %407 = load i32, ptr %406, align 4, !tbaa !25
  %408 = getelementptr inbounds i8, ptr %34, i64 48
  %409 = load i32, ptr %408, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1193, ptr noundef nonnull @.str.124, ptr noundef nonnull %403, ptr noundef %404, i64 noundef %405, i32 noundef %407, i32 noundef %409) #17
  br label %.thread605

.thread605:                                       ; preds = %347, %343, %372, %.thread603, %398
  %410 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %411 = and i8 %410, 1
  %.not495 = icmp eq i8 %411, 0
  br i1 %.not495, label %.critedge545.thread, label %412, !prof !13

412:                                              ; preds = %.thread605
  %413 = load i64, ptr %303, align 4, !tbaa !25
  %414 = call i64 @constmeta_txnid(ptr noundef %30) #16
  %.not496 = icmp eq i64 %413, %414
  br i1 %.not496, label %415, label %.critedge537.thread635

415:                                              ; preds = %412
  %416 = call zeroext i1 @meta_is_steady(ptr noundef nonnull %2)
  br i1 %416, label %417, label %.critedge539

417:                                              ; preds = %415
  %418 = call zeroext i1 @meta_is_steady(ptr noundef %30)
  br i1 %418, label %.critedge539, label %.critedge537, !prof !13

.critedge539:                                     ; preds = %415, %417
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.125, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1195) #15
  unreachable

.critedge537:                                     ; preds = %417
  %.pre623 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %.pre626 = and i8 %.pre623, 1
  %.not497 = icmp eq i8 %.pre626, 0
  br i1 %.not497, label %.critedge545.thread, label %.critedge537.thread635, !prof !56

.critedge537.thread635:                           ; preds = %412, %.critedge537
  %419 = load i64, ptr %303, align 4, !tbaa !25
  %420 = call i64 @constmeta_txnid(ptr noundef %32) #16
  %.not498 = icmp eq i64 %419, %420
  br i1 %.not498, label %421, label %.critedge541.thread641

421:                                              ; preds = %.critedge537.thread635
  %422 = call zeroext i1 @meta_is_steady(ptr noundef nonnull %2)
  br i1 %422, label %423, label %.critedge543

423:                                              ; preds = %421
  %424 = call zeroext i1 @meta_is_steady(ptr noundef %32)
  br i1 %424, label %.critedge543, label %.critedge541, !prof !13

.critedge543:                                     ; preds = %421, %423
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.126, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1196) #15
  unreachable

.critedge541:                                     ; preds = %423
  %.pre624 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %.pre627 = and i8 %.pre624, 1
  %.not499 = icmp eq i8 %.pre627, 0
  br i1 %.not499, label %.critedge545.thread, label %.critedge541.thread641, !prof !56

.critedge541.thread641:                           ; preds = %.critedge537.thread635, %.critedge541
  %425 = load i64, ptr %303, align 4, !tbaa !25
  %426 = call i64 @constmeta_txnid(ptr noundef %34) #16
  %.not500 = icmp eq i64 %425, %426
  br i1 %.not500, label %427, label %.critedge545.thread647

427:                                              ; preds = %.critedge541.thread641
  %428 = call zeroext i1 @meta_is_steady(ptr noundef nonnull %2)
  br i1 %428, label %429, label %.critedge547

429:                                              ; preds = %427
  %430 = call zeroext i1 @meta_is_steady(ptr noundef %34)
  br i1 %430, label %.critedge547, label %.critedge545, !prof !13

.critedge547:                                     ; preds = %427, %429
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.127, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1197) #15
  unreachable

.critedge545:                                     ; preds = %429
  %.pre625 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %.pre629 = and i8 %.pre625, 1
  %.not501 = icmp eq i8 %.pre629, 0
  br i1 %.not501, label %.critedge545.thread, label %.critedge545.thread647, !prof !56

.critedge545.thread647:                           ; preds = %.critedge541.thread641, %.critedge545
  %431 = getelementptr inbounds i8, ptr %0, i64 4
  %432 = load i32, ptr %431, align 4, !tbaa !14
  %433 = xor i32 %432, %.10378
  %434 = and i32 %433, 524288
  %.not502 = icmp eq i32 %434, 0
  br i1 %.not502, label %.critedge545.thread, label %435, !prof !24

435:                                              ; preds = %.critedge545.thread647
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.100, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1199) #15
  unreachable

.critedge545.thread:                              ; preds = %.thread605, %.critedge537, %.critedge541, %.critedge545, %.critedge545.thread647
  %.not501646 = phi i1 [ true, %.critedge545 ], [ false, %.critedge545.thread647 ], [ true, %.critedge541 ], [ true, %.critedge537 ], [ true, %.thread605 ]
  %436 = getelementptr inbounds i8, ptr %5, i64 8
  %437 = load ptr, ptr %436, align 8, !tbaa !25
  %438 = icmp eq ptr %344, %437
  br i1 %438, label %.critedge549, label %439

439:                                              ; preds = %.critedge545.thread
  %440 = call i64 @constmeta_txnid(ptr noundef %344) #16
  %441 = load i64, ptr %303, align 4, !tbaa !25
  %442 = icmp ult i64 %440, %441
  br i1 %442, label %.critedge549, label %443, !prof !24

443:                                              ; preds = %439
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.128, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1200) #15
  unreachable

.critedge549:                                     ; preds = %.critedge545.thread, %439
  %444 = and i32 %.10378, 524288
  %.not503 = icmp eq i32 %444, 0
  br i1 %.not503, label %505, label %445

445:                                              ; preds = %.critedge549
  call void @jitter4testing(i1 noundef zeroext true)
  %446 = load ptr, ptr %436, align 8, !tbaa !25
  %.not509 = icmp eq ptr %344, %446
  br i1 %.not509, label %479, label %447, !prof !13

447:                                              ; preds = %445
  %448 = load i64, ptr %303, align 4, !tbaa !25
  call void @meta_update_begin(ptr noundef nonnull %0, ptr noundef %344, i64 noundef %448)
  %449 = getelementptr inbounds i8, ptr %344, i64 168
  call void @unaligned_poke_u64(i64 noundef 4, ptr noundef nonnull %449, i64 noundef 1)
  %450 = getelementptr inbounds i8, ptr %344, i64 40
  %451 = getelementptr inbounds i8, ptr %344, i64 48
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(120) %451, i8 -52, i64 120, i1 false)
  call void @jitter4testing(i1 noundef zeroext false)
  %452 = getelementptr inbounds i8, ptr %344, i64 20
  %453 = getelementptr inbounds i8, ptr %2, i64 20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %452, ptr noundef nonnull align 4 dereferenceable(20) %453, i64 20, i1 false), !tbaa.struct !57
  %454 = getelementptr inbounds i8, ptr %2, i64 40
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(48) %450, ptr noundef nonnull align 4 dereferenceable(48) %454, i64 48, i1 false), !tbaa.struct !59
  %455 = getelementptr inbounds i8, ptr %344, i64 88
  %456 = getelementptr inbounds i8, ptr %2, i64 88
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(48) %455, ptr noundef nonnull align 4 dereferenceable(48) %456, i64 48, i1 false), !tbaa.struct !59
  %457 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %458 = and i8 %457, 1
  %.not = icmp eq i8 %458, 0
  br i1 %.not, label %.thread606, label %459, !prof !13

459:                                              ; preds = %447
  %460 = load i16, ptr %450, align 4, !tbaa !25
  %.not512 = icmp eq i16 %460, 8
  br i1 %.not512, label %462, label %461, !prof !24

461:                                              ; preds = %459
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.129, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1220) #15
  unreachable

462:                                              ; preds = %459
  %463 = load i16, ptr %455, align 4, !tbaa !25
  %464 = zext i16 %463 to i32
  %465 = call zeroext i1 @check_table_flags(i32 noundef %464)
  br i1 %465, label %.thread606, label %466, !prof !24

466:                                              ; preds = %462
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.130, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1221) #15
  unreachable

.thread606:                                       ; preds = %447, %462
  %467 = getelementptr inbounds i8, ptr %344, i64 136
  %468 = getelementptr inbounds i8, ptr %2, i64 136
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(32) %467, ptr noundef nonnull align 4 dereferenceable(32) %468, i64 32, i1 false), !tbaa.struct !61
  %469 = getelementptr inbounds i8, ptr %344, i64 184
  %470 = getelementptr inbounds i8, ptr %2, i64 184
  %471 = load i64, ptr %470, align 4
  store i64 %471, ptr %469, align 4
  call void @jitter4testing(i1 noundef zeroext true)
  %472 = getelementptr inbounds i8, ptr %2, i64 176
  %473 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef nonnull %472) #16
  call void @meta_update_end(ptr noundef nonnull %0, ptr noundef nonnull %344, i64 noundef %473)
  call void @jitter4testing(i1 noundef zeroext true)
  %474 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %475 = and i8 %474, 1
  %.not514 = icmp eq i8 %475, 0
  br i1 %.not514, label %488, label %476, !prof !13

476:                                              ; preds = %.thread606
  %477 = call zeroext i1 @coherency_check_meta(ptr noundef nonnull %0, ptr noundef nonnull %344, i1 noundef zeroext true) #17
  br i1 %477, label %488, label %478, !prof !24

478:                                              ; preds = %476
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.131, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1229) #15
  unreachable

479:                                              ; preds = %445
  %480 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %481 = and i8 %480, 1
  %.not510 = icmp eq i8 %481, 0
  br i1 %.not510, label %488, label %482, !prof !13

482:                                              ; preds = %479
  %483 = getelementptr inbounds i8, ptr %5, i64 16
  %484 = load i64, ptr %483, align 8
  %485 = icmp eq i64 %484, 0
  %or.cond.not = select i1 %305, i1 %485, i1 false
  br i1 %or.cond.not, label %486, label %.critedge551, !prof !62

486:                                              ; preds = %482
  %487 = call zeroext i1 @meta_is_steady(ptr noundef nonnull %2)
  br i1 %487, label %488, label %.critedge551, !prof !24

.critedge551:                                     ; preds = %482, %486
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.132, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1233) #15
  unreachable

488:                                              ; preds = %.thread606, %476, %479, %486
  %489 = getelementptr inbounds i8, ptr %344, i64 168
  %490 = getelementptr inbounds i8, ptr %2, i64 168
  %491 = load i64, ptr %490, align 4
  store i64 %491, ptr %489, align 4
  call void @osal_compiler_barrier()
  call void @jitter4testing(i1 noundef zeroext true)
  %492 = getelementptr inbounds i8, ptr %0, i64 360
  %493 = load i8, ptr %492, align 8, !tbaa !45, !range !46, !noundef !47
  %494 = trunc nuw i8 %493 to i1
  br i1 %494, label %559, label %495

495:                                              ; preds = %488
  %496 = load ptr, ptr %227, align 8, !tbaa !26
  %497 = getelementptr inbounds i8, ptr %496, i64 128
  %498 = load volatile i64, ptr %497, align 64, !tbaa !25
  %499 = add i64 %498, 1
  store volatile i64 %499, ptr %497, align 64, !tbaa !25
  %500 = getelementptr inbounds i8, ptr %0, i64 16
  %501 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef 3) #16
  %502 = and i32 %.10378, 262144
  %.not515 = icmp eq i32 %502, 0
  %503 = select i1 %.not515, i32 10, i32 0
  %504 = call i32 @osal_msync(ptr noundef nonnull %500, i64 noundef 0, i64 noundef %501, i32 noundef %503) #17
  %.not516 = icmp eq i32 %504, 0
  br i1 %.not516, label %559, label %.loopexit, !prof !24

505:                                              ; preds = %.critedge549
  %506 = load ptr, ptr %227, align 8, !tbaa !26
  %507 = getelementptr inbounds i8, ptr %506, i64 120
  %508 = load volatile i64, ptr %507, align 8, !tbaa !25
  %509 = add i64 %508, 1
  store volatile i64 %509, ptr %507, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %8) #17
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(224) %8, ptr noundef nonnull align 4 dereferenceable(224) %344, i64 224, i1 false), !tbaa.struct !63
  br i1 %.not501646, label %.thread607, label %510, !prof !13

510:                                              ; preds = %505
  %511 = getelementptr inbounds i8, ptr %2, i64 40
  %512 = load i16, ptr %511, align 4, !tbaa !25
  %.not505 = icmp eq i16 %512, 8
  br i1 %.not505, label %514, label %513, !prof !24

513:                                              ; preds = %510
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.101, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1270) #15
  unreachable

514:                                              ; preds = %510
  %515 = getelementptr inbounds i8, ptr %2, i64 88
  %516 = load i16, ptr %515, align 4, !tbaa !25
  %517 = zext i16 %516 to i32
  %518 = call zeroext i1 @check_table_flags(i32 noundef %517)
  br i1 %518, label %.thread607, label %519, !prof !24

519:                                              ; preds = %514
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.102, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1271) #15
  unreachable

.thread607:                                       ; preds = %505, %514
  %520 = getelementptr inbounds i8, ptr %0, i64 60
  %521 = load i32, ptr %520, align 4, !tbaa !64
  %522 = ptrtoint ptr %344 to i64
  %523 = getelementptr inbounds i8, ptr %0, i64 16
  %524 = load ptr, ptr %523, align 8, !tbaa !25
  %525 = ptrtoint ptr %524 to i64
  %526 = sub nsw i64 %522, %525
  %527 = call i32 @osal_pwrite(i32 noundef %521, ptr noundef nonnull %2, i64 noundef 224, i64 noundef %526) #17
  %.not507 = icmp eq i32 %527, 0
  br i1 %.not507, label %532, label %528, !prof !24

528:                                              ; preds = %546, %.thread607
  %.11 = phi i32 [ %527, %.thread607 ], [ %552, %546 ]
  %529 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %530 = icmp ugt i8 %529, 4
  br i1 %530, label %531, label %553, !prof !13

531:                                              ; preds = %528
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1275, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.133) #17
  br label %553

532:                                              ; preds = %.thread607
  %533 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8, !tbaa !65
  %534 = zext i32 %533 to i64
  call void @osal_flush_incoherent_mmap(ptr noundef nonnull %344, i64 noundef 224, i64 noundef %534)
  %535 = and i32 %.10378, 262144
  %536 = icmp eq i32 %535, 0
  br i1 %536, label %537, label %.thread609

537:                                              ; preds = %532
  %538 = load i32, ptr %520, align 4, !tbaa !64
  %539 = getelementptr inbounds i8, ptr %0, i64 24
  %540 = load i32, ptr %539, align 8, !tbaa !48
  %541 = icmp eq i32 %538, %540
  br i1 %541, label %542, label %.thread609

542:                                              ; preds = %537
  %543 = getelementptr inbounds i8, ptr %0, i64 360
  %544 = load i8, ptr %543, align 8, !tbaa !45, !range !46, !noundef !47
  %545 = trunc nuw i8 %544 to i1
  br i1 %545, label %.thread609, label %546

546:                                              ; preds = %542
  %547 = load ptr, ptr %227, align 8, !tbaa !26
  %548 = getelementptr inbounds i8, ptr %547, i64 136
  %549 = load volatile i64, ptr %548, align 8, !tbaa !25
  %550 = add i64 %549, 1
  store volatile i64 %550, ptr %548, align 8, !tbaa !25
  %551 = load i32, ptr %539, align 8, !tbaa !48
  %552 = call i32 @osal_fsync(i32 noundef %551, i32 noundef 10) #17
  %.not508 = icmp eq i32 %552, 0
  br i1 %.not508, label %.thread609, label %528

.thread609:                                       ; preds = %546, %542, %537, %532
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %8) #17
  br label %559

553:                                              ; preds = %528, %531
  %554 = load i32, ptr %520, align 4, !tbaa !64
  %555 = load ptr, ptr %523, align 8, !tbaa !25
  %556 = ptrtoint ptr %555 to i64
  %557 = sub nsw i64 %522, %556
  %558 = call i32 @osal_pwrite(i32 noundef %554, ptr noundef nonnull %8, i64 noundef 224, i64 noundef %557) #17
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %8) #17
  br label %.loopexit

559:                                              ; preds = %.thread609, %488, %495
  store i64 0, ptr %9, align 8, !tbaa !60
  %560 = ptrtoint ptr %344 to i64
  %561 = getelementptr inbounds i8, ptr %0, i64 16
  br label %562

562:                                              ; preds = %562, %559
  %563 = load i64, ptr %303, align 4, !tbaa !25
  %564 = load ptr, ptr %561, align 8, !tbaa !25
  %565 = ptrtoint ptr %564 to i64
  %566 = sub nsw i64 %560, %565
  %567 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %566) #16
  %568 = zext i32 %567 to i64
  %569 = call i32 @coherency_check_written(ptr noundef nonnull %0, i64 noundef %563, ptr noundef %344, i64 noundef %568, ptr noundef nonnull %9) #17
  switch i32 %569, label %.loopexit [
    i32 0, label %570
    i32 -1, label %562
  ], !prof !66

570:                                              ; preds = %562
  %571 = and i32 %.10378, 262144
  %572 = icmp eq i32 %571, 0
  %.neg = select i1 %.not503, i32 -1968526676, i32 -894784854
  %.neg518 = select i1 %572, i32 0, i32 %.neg
  %573 = load volatile i32, ptr %303, align 4, !tbaa !25
  %574 = add i32 %573, %.neg518
  %575 = load ptr, ptr %227, align 8, !tbaa !26
  %576 = getelementptr inbounds i8, ptr %575, i64 20
  store volatile i32 %574, ptr %576, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #17
  call void @meta_tap(ptr dead_on_unwind nonnull writable sret(%struct.troika) align 8 %10, ptr noundef nonnull %0) #17
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 8 dereferenceable(32) %10, i64 32, i1 false), !tbaa.struct !67
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #17
  %577 = getelementptr inbounds i8, ptr %0, i64 192
  %.0367619 = load ptr, ptr %577, align 8, !tbaa !68
  %.not519620 = icmp eq ptr %.0367619, null
  br i1 %.not519620, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %580, %570
  %.not520 = icmp eq i32 %.7397, 0
  br i1 %.not520, label %602, label %582, !prof !24

.lr.ph:                                           ; preds = %570, %580
  %.0367621 = phi ptr [ %.0367, %580 ], [ %.0367619, %570 ]
  %578 = getelementptr inbounds i8, ptr %.0367621, i64 168
  %.not523 = icmp eq ptr %578, %3
  br i1 %.not523, label %580, label %579

579:                                              ; preds = %.lr.ph
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %578, ptr noundef nonnull align 8 dereferenceable(32) %3, i64 32, i1 false), !tbaa.struct !67
  br label %580

580:                                              ; preds = %.lr.ph, %579
  %581 = getelementptr inbounds i8, ptr %.0367621, i64 32
  %.0367 = load ptr, ptr %581, align 8, !tbaa !68
  %.not519 = icmp eq ptr %.0367, null
  br i1 %.not519, label %._crit_edge, label %.lr.ph, !llvm.loop !69

582:                                              ; preds = %._crit_edge
  %583 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !29
  %584 = icmp ugt i8 %583, 3
  br i1 %584, label %585, label %588, !prof !13

585:                                              ; preds = %582
  %586 = getelementptr inbounds i8, ptr %2, i64 32
  %587 = load i32, ptr %586, align 4, !tbaa !25
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1316, ptr noundef nonnull @.str.135, i32 noundef %587, i32 noundef %.7397) #17
  br label %588

588:                                              ; preds = %585, %582
  %589 = getelementptr inbounds i8, ptr %2, i64 36
  %590 = load i32, ptr %589, align 4, !tbaa !25
  %591 = getelementptr inbounds i8, ptr %2, i64 32
  %592 = load i32, ptr %591, align 4, !tbaa !25
  %593 = getelementptr inbounds i8, ptr %2, i64 28
  %594 = load i32, ptr %593, align 4, !tbaa !55
  %595 = call i32 @dxb_resize(ptr noundef %0, i32 noundef %590, i32 noundef %592, i32 noundef %594, i32 noundef 1) #19
  %or.cond9 = icmp ugt i32 %595, 1
  br i1 %or.cond9, label %.loopexit, label %596

596:                                              ; preds = %588
  %597 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %598 = and i8 %597, 1
  %.not521 = icmp eq i8 %598, 0
  br i1 %.not521, label %602, label %599, !prof !13

599:                                              ; preds = %596
  %600 = call zeroext i1 @coherency_check_meta(ptr noundef %0, ptr noundef %344, i1 noundef zeroext true) #17
  br i1 %600, label %602, label %601, !prof !24

601:                                              ; preds = %599
  call void @mdbx_assert_fail(ptr noundef %0, ptr noundef nonnull @.str.131, ptr noundef nonnull @__func__.dxb_sync_locked, i32 noundef 1321) #15
  unreachable

602:                                              ; preds = %596, %599, %._crit_edge
  %603 = getelementptr inbounds i8, ptr %0, i64 64
  %604 = load ptr, ptr %603, align 8, !tbaa !25
  %.not522 = icmp eq ptr %604, null
  br i1 %.not522, label %.thread569, label %605, !prof !13

605:                                              ; preds = %602
  %606 = getelementptr inbounds i8, ptr %604, i64 492
  %607 = call i32 @atomic_store32(ptr noundef nonnull %606, i32 noundef 0, i32 noundef 0)
  br label %.thread569

.loopexit:                                        ; preds = %562, %218, %220, %553, %277, %588, %495
  %.14 = phi i32 [ %595, %588 ], [ %504, %495 ], [ %.11, %553 ], [ %.8387, %277 ], [ -30788, %220 ], [ -30788, %218 ], [ %569, %562 ]
  %608 = getelementptr inbounds i8, ptr %0, i64 4
  %609 = load i32, ptr %608, align 4, !tbaa !14
  %610 = or i32 %609, -2147483648
  store i32 %610, ptr %608, align 4, !tbaa !14
  br label %.thread569

.thread569:                                       ; preds = %154, %156, %602, %605, %322, %325, %.loopexit
  %.10 = phi i32 [ %.14, %.loopexit ], [ 0, %325 ], [ 0, %322 ], [ 0, %605 ], [ 0, %602 ], [ %141, %156 ], [ %141, %154 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #17
  ret i32 %.10
}

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @check_table_flags(i32 noundef) local_unnamed_addr #2

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

declare i32 @mvcc_snapshot_largest(ptr noundef, i32 noundef) local_unnamed_addr #3

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

declare zeroext i1 @coherency_check_meta(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3

declare i32 @osal_fsync(i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @meta_sign_as_steady(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @jitter4testing(i1 noundef zeroext) local_unnamed_addr #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @osal_compiler_barrier() local_unnamed_addr #2

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

declare i32 @coherency_check_written(ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #13

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

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

!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 = !{!7, !7, i64 0}
!26 = !{!15, !12, i64 104}
!27 = !{!15, !11, i64 256}
!28 = !{!"branch_weights", i32 2000, i32 4002001}
!29 = !{!6, !7, i64 26}
!30 = !{!15, !11, i64 40}
!31 = !{!9, !9, i64 0}
!32 = !{!"branch_weights", !"expected", i32 1717128, i32 2145766520}
!33 = !{!34, !17, i64 22}
!34 = !{!"meta", !7, i64 0, !7, i64 8, !17, i64 16, !7, i64 18, !7, i64 19, !35, i64 20, !7, i64 40, !36, i64 136, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 208}
!35 = !{!"geo", !17, i64 0, !17, i64 2, !9, i64 4, !9, i64 8, !7, i64 12, !7, i64 16}
!36 = !{!"MDBX_canary", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!37 = !{!34, !17, i64 20}
!38 = !{!34, !9, i64 24}
!39 = !{!40, !7, i64 0}
!40 = !{!"troika", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !9, i64 4, !7, i64 8}
!41 = !{!42, !11, i64 0}
!42 = !{!"meta_ptr", !11, i64 0, !7, i64 8, !11, i64 16}
!43 = !{!15, !12, i64 192}
!44 = !{!15, !12, i64 384}
!45 = !{!15, !10, i64 360}
!46 = !{i8 0, i8 2}
!47 = !{}
!48 = !{!15, !9, i64 24}
!49 = !{!"branch_weights", i32 2146410443, i32 1073205}
!50 = !{!"branch_weights", !"expected", i32 -2147483648, i32 0}
!51 = !{!42, !11, i64 16}
!52 = !{!40, !7, i64 3}
!53 = !{!40, !7, i64 1}
!54 = !{!40, !7, i64 2}
!55 = !{!34, !9, i64 28}
!56 = !{!"branch_weights", !"expected", i32 0, i32 -2147483648}
!57 = !{i64 0, i64 2, !58, i64 2, i64 2, !58, i64 4, i64 4, !31, i64 8, i64 4, !31, i64 12, i64 4, !25, i64 16, i64 4, !25}
!58 = !{!17, !17, i64 0}
!59 = !{i64 0, i64 2, !58, i64 2, i64 2, !58, i64 4, i64 4, !31, i64 8, i64 4, !31, i64 12, i64 4, !31, i64 16, i64 4, !31, i64 20, i64 4, !31, i64 24, i64 8, !60, i64 32, i64 8, !60, i64 40, i64 8, !60}
!60 = !{!11, !11, i64 0}
!61 = !{i64 0, i64 8, !60, i64 8, i64 8, !60, i64 16, i64 8, !60, i64 24, i64 8, !60}
!62 = !{!"branch_weights", i32 4000000, i32 4001}
!63 = !{i64 0, i64 8, !25, i64 8, i64 8, !25, i64 16, i64 2, !58, i64 18, i64 1, !25, i64 19, i64 1, !25, i64 20, i64 2, !58, i64 22, i64 2, !58, i64 24, i64 4, !31, i64 28, i64 4, !31, i64 32, i64 4, !25, i64 36, i64 4, !25, i64 40, i64 96, !25, i64 136, i64 8, !60, i64 144, i64 8, !60, i64 152, i64 8, !60, i64 160, i64 8, !60, i64 168, i64 8, !25, i64 176, i64 8, !25, i64 184, i64 8, !25, i64 192, i64 16, !25, i64 208, i64 16, !25}
!64 = !{!15, !9, i64 60}
!65 = !{!6, !9, i64 16}
!66 = !{!"branch_weights", i32 1, i32 4002000, i32 2000}
!67 = !{i64 0, i64 1, !25, i64 1, i64 1, !25, i64 2, i64 1, !25, i64 3, i64 1, !25, i64 4, i64 4, !31, i64 8, i64 24, !25}
!68 = !{!12, !12, i64 0}
!69 = distinct !{!69, !70}
!70 = !{!"llvm.loop.mustprogress"}


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