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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.libmdbx_globals = type { %union.bin128, i32, i32, i8, i8, i8, i8, i32, %union.logger_union, %union.pthread_mutex_t, i64, ptr }
%union.bin128 = type { %struct.anon }
%struct.anon = type { i64, i64 }
%union.logger_union = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.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.2 }
%struct.geo = type { i16, i16, i32, i32, %union.anon, %union.anon.1 }
%union.anon = type { i32 }
%union.anon.1 = type { i32 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.2 = type { %struct.anon.4 }
%struct.anon.4 = type { %struct.troika, ptr, %struct.anon.5, i8, i32, i32, i64, ptr, ptr, ptr, i64, %union.anon.6 }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.anon.5 = type { %struct.MDBX_rkl, i64, %struct.MDBX_rkl }
%struct.MDBX_rkl = type { i64, i64, i32, i32, ptr, [12 x i64] }
%union.anon.6 = type { %struct.anon.7 }
%struct.anon.7 = type { i64, ptr }
%struct.MDBX_env = type { %union.mdbx_atomic_uint32_t, i32, i32, %struct.osal_mmap, i32, i32, %struct.osal_mmap, ptr, i16, i16, i16, i16, i16, i16, %union.mdbx_atomic_uint32_t, i8, i8, i16, i32, i32, i32, i32, %struct.anon.9, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.10, %struct.anon.14, i8, ptr, ptr, ptr, %struct.anon.15, %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.8, i32, i64, i64, i64 }
%union.anon.8 = type { ptr }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.anon.9 = type { ptr, ptr, ptr, ptr }
%struct.anon.10 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.11, %union.anon.12 }
%struct.anon.11 = type { i16, i16, i16, i16 }
%union.anon.12 = type { i32 }
%struct.anon.14 = type { i64, i64, i64, i64, i64 }
%struct.anon.15 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }
%struct.shared_lck = type { i64, i32, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, [2 x %union.mdbx_atomic_uint32_t], [16 x i8], %struct.pgops, [16 x i8], %union.pthread_mutex_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, i32, %struct.anon.20, %union.pthread_mutex_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, [16 x i8], [0 x %struct.reader_slot] }
%struct.pgops = type { %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %struct.anon.18 }
%struct.anon.18 = type { %struct.gc_prof_stat, %struct.gc_prof_stat, i32, i32, i32, i32, i32 }
%struct.gc_prof_stat = type { i64, i64, i32, i32, i32, i32, %struct.anon.19 }
%struct.anon.19 = type { i64, i64, i32 }
%struct.anon.20 = type { [4 x i32], [4 x i64] }
%struct.reader_slot = type { %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.kvx = type { %struct.clc2, %struct.iovec }
%struct.clc2 = type { %struct.clc, %struct.clc }
%struct.clc = type { ptr, i64, i64 }
%struct.iovec = type { ptr, i64 }

@globals = external global %struct.libmdbx_globals, align 8
@.str.7 = external hidden unnamed_addr constant [43 x i8], align 1
@__func__.txn_renew = external hidden unnamed_addr constant [10 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [94 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [19 x i8], align 1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @txn_renew(ptr noundef %0, i32 noundef %1) #3 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i8, align 1
  %12 = alloca i8, align 1
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.MDBX_txn, ptr %19, i32 0, i32 9
  %21 = load ptr, ptr %20, align 8, !tbaa !11
  store ptr %21, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.MDBX_env, ptr %22, i32 0, i32 1
  %24 = load i32, ptr %23, align 4, !tbaa !17
  %25 = and i32 %24, 2621440
  %26 = load i32, ptr %5, align 4, !tbaa !9
  %27 = or i32 %26, %25
  store i32 %27, ptr %5, align 4, !tbaa !9
  %28 = load i32, ptr %5, align 4, !tbaa !9
  %29 = and i32 %28, 131072
  %30 = icmp ne i32 %29, 0
  br i1 %30, label %31, label %143

31:                                               ; preds = %2
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = load i32, ptr %5, align 4, !tbaa !9
  %34 = call i32 @txn_ro_start(ptr noundef %32, i32 noundef %33)
  store i32 %34, ptr %7, align 4, !tbaa !9
  %35 = load i32, ptr %7, align 4, !tbaa !9
  %36 = icmp ne i32 %35, 0
  %37 = xor i1 %36, true
  %38 = xor i1 %37, true
  %39 = zext i1 %38 to i32
  %40 = sext i32 %39 to i64
  %41 = call i64 @llvm.expect.i64(i64 %40, i64 0)
  %42 = icmp ne i64 %41, 0
  br i1 %42, label %43, label %44

43:                                               ; preds = %31
  br label %1455

44:                                               ; preds = %31
  br label %45

45:                                               ; preds = %44
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.MDBX_txn, ptr %46, i32 0, i32 7
  %48 = load i64, ptr %47, align 8, !tbaa !27
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.MDBX_env, ptr %49, i32 0, i32 7
  %51 = load ptr, ptr %50, align 8, !tbaa !28
  %52 = getelementptr inbounds %struct.shared_lck, ptr %51, i32 0, i32 12
  %53 = load volatile i64, ptr %52, align 8, !tbaa !29
  %54 = icmp uge i64 %48, %53
  %55 = xor i1 %54, true
  %56 = xor i1 %55, true
  %57 = xor i1 %56, true
  %58 = zext i1 %57 to i32
  %59 = sext i32 %58 to i64
  %60 = call i64 @llvm.expect.i64(i64 %59, i64 0)
  %61 = icmp ne i64 %60, 0
  br i1 %61, label %62, label %64

62:                                               ; preds = %45
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %63, ptr noundef @.str.7, ptr noundef @__func__.txn_renew, i32 noundef 105) #9
  unreachable

64:                                               ; preds = %45
  br label %65

65:                                               ; preds = %64
  br label %66

66:                                               ; preds = %65
  br label %67

67:                                               ; preds = %66
  %68 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %69 = zext i8 %68 to i32
  %70 = and i32 %69, 1
  %71 = icmp ne i32 %70, 0
  %72 = xor i1 %71, true
  %73 = xor i1 %72, true
  %74 = zext i1 %73 to i32
  %75 = sext i32 %74 to i64
  %76 = call i64 @llvm.expect.i64(i64 %75, i64 1)
  %77 = icmp ne i64 %76, 0
  br i1 %77, label %78, label %102

78:                                               ; preds = %67
  br label %79

79:                                               ; preds = %78
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.MDBX_txn, ptr %80, i32 0, i32 10
  %82 = load ptr, ptr %81, align 8, !tbaa !32
  %83 = getelementptr inbounds %struct.tree, ptr %82, i64 0
  %84 = getelementptr inbounds %struct.tree, ptr %83, i32 0, i32 0
  %85 = load i16, ptr %84, align 4, !tbaa !33
  %86 = zext i16 %85 to i32
  %87 = icmp eq i32 %86, 8
  %88 = xor i1 %87, true
  %89 = xor i1 %88, true
  %90 = xor i1 %89, true
  %91 = zext i1 %90 to i32
  %92 = sext i32 %91 to i64
  %93 = call i64 @llvm.expect.i64(i64 %92, i64 0)
  %94 = icmp ne i64 %93, 0
  br i1 %94, label %95, label %99

95:                                               ; preds = %79
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.MDBX_txn, ptr %96, i32 0, i32 9
  %98 = load ptr, ptr %97, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %98, ptr noundef @.str.8, ptr noundef @__func__.txn_renew, i32 noundef 106) #9
  unreachable

99:                                               ; preds = %79
  br label %100

100:                                              ; preds = %99
  br label %101

101:                                              ; preds = %100
  br label %102

102:                                              ; preds = %101, %67
  br label %103

103:                                              ; preds = %102
  br label %104

104:                                              ; preds = %103
  br label %105

105:                                              ; preds = %104
  %106 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %107 = zext i8 %106 to i32
  %108 = and i32 %107, 1
  %109 = icmp ne i32 %108, 0
  %110 = xor i1 %109, true
  %111 = xor i1 %110, true
  %112 = zext i1 %111 to i32
  %113 = sext i32 %112 to i64
  %114 = call i64 @llvm.expect.i64(i64 %113, i64 1)
  %115 = icmp ne i64 %114, 0
  br i1 %115, label %116, label %140

116:                                              ; preds = %105
  br label %117

117:                                              ; preds = %116
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.MDBX_txn, ptr %118, i32 0, i32 10
  %120 = load ptr, ptr %119, align 8, !tbaa !32
  %121 = getelementptr inbounds %struct.tree, ptr %120, i64 1
  %122 = getelementptr inbounds %struct.tree, ptr %121, i32 0, i32 0
  %123 = load i16, ptr %122, align 4, !tbaa !33
  %124 = zext i16 %123 to i32
  %125 = call zeroext i1 @check_table_flags(i32 noundef %124)
  %126 = xor i1 %125, true
  %127 = xor i1 %126, true
  %128 = xor i1 %127, true
  %129 = zext i1 %128 to i32
  %130 = sext i32 %129 to i64
  %131 = call i64 @llvm.expect.i64(i64 %130, i64 0)
  %132 = icmp ne i64 %131, 0
  br i1 %132, label %133, label %137

133:                                              ; preds = %117
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.MDBX_txn, ptr %134, i32 0, i32 9
  %136 = load ptr, ptr %135, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %136, ptr noundef @.str.9, ptr noundef @__func__.txn_renew, i32 noundef 107) #9
  unreachable

137:                                              ; preds = %117
  br label %138

138:                                              ; preds = %137
  br label %139

139:                                              ; preds = %138
  br label %140

140:                                              ; preds = %139, %105
  br label %141

141:                                              ; preds = %140
  br label %142

142:                                              ; preds = %141
  br label %272

143:                                              ; preds = %2
  br label %144

144:                                              ; preds = %143
  %145 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %146 = zext i8 %145 to i32
  %147 = and i32 %146, 1
  %148 = icmp ne i32 %147, 0
  %149 = xor i1 %148, true
  %150 = xor i1 %149, true
  %151 = zext i1 %150 to i32
  %152 = sext i32 %151 to i64
  %153 = call i64 @llvm.expect.i64(i64 %152, i64 1)
  %154 = icmp ne i64 %153, 0
  br i1 %154, label %155, label %172

155:                                              ; preds = %144
  br label %156

156:                                              ; preds = %155
  %157 = load i32, ptr %5, align 4, !tbaa !9
  %158 = and i32 %157, -271384585
  %159 = icmp eq i32 %158, 0
  %160 = xor i1 %159, true
  %161 = xor i1 %160, true
  %162 = xor i1 %161, true
  %163 = zext i1 %162 to i32
  %164 = sext i32 %163 to i64
  %165 = call i64 @llvm.expect.i64(i64 %164, i64 0)
  %166 = icmp ne i64 %165, 0
  br i1 %166, label %167, label %169

167:                                              ; preds = %156
  %168 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %168, ptr noundef @.str.10, ptr noundef @__func__.txn_renew, i32 noundef 109) #9
  unreachable

169:                                              ; preds = %156
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  br label %172

172:                                              ; preds = %171, %144
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %175 = call i64 @osal_thread_self()
  store i64 %175, ptr %8, align 8, !tbaa !35
  %176 = load ptr, ptr %4, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.MDBX_txn, ptr %176, i32 0, i32 3
  %178 = load i64, ptr %177, align 8, !tbaa !36
  %179 = load i64, ptr %8, align 8, !tbaa !35
  %180 = icmp eq i64 %178, %179
  br i1 %180, label %187, label %181

181:                                              ; preds = %174
  %182 = load ptr, ptr %6, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.MDBX_env, ptr %182, i32 0, i32 16
  %184 = load i8, ptr %183, align 1, !tbaa !37
  %185 = sext i8 %184 to i32
  %186 = icmp sge i32 %185, 0
  br label %187

187:                                              ; preds = %181, %174
  %188 = phi i1 [ true, %174 ], [ %186, %181 ]
  %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 %196

195:                                              ; preds = %187
  store i32 -30778, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %269

196:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %197 = load ptr, ptr %6, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.MDBX_env, ptr %197, i32 0, i32 6
  %199 = getelementptr inbounds %struct.osal_mmap, ptr %198, i32 0, i32 0
  %200 = load ptr, ptr %199, align 8, !tbaa !29
  store ptr %200, ptr %10, align 8, !tbaa !5
  %201 = load ptr, ptr %10, align 8, !tbaa !5
  %202 = icmp ne ptr %201, null
  br i1 %202, label %203, label %222

203:                                              ; preds = %196
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.MDBX_env, ptr %204, i32 0, i32 1
  %206 = load i32, ptr %205, align 4, !tbaa !17
  %207 = and i32 %206, 2097152
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %222, label %209

209:                                              ; preds = %203
  %210 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %211 = zext i8 %210 to i32
  %212 = and i32 %211, 32
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %222, label %214

214:                                              ; preds = %209
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.MDBX_env, ptr %216, i32 0, i32 20
  %218 = load i32, ptr %217, align 4, !tbaa !38
  %219 = load i64, ptr %8, align 8, !tbaa !35
  %220 = call zeroext i1 @txn_check_overlapped(ptr noundef %215, i32 noundef %218, i64 noundef %219)
  br i1 %220, label %221, label %222

221:                                              ; preds = %214
  store i32 -30415, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %268

222:                                              ; preds = %214, %209, %203, %196
  call void @jitter4testing(i1 noundef zeroext false)
  %223 = load ptr, ptr %6, align 8, !tbaa !5
  %224 = load i32, ptr %5, align 4, !tbaa !9
  %225 = and i32 %224, 268435456
  %226 = icmp ne i32 %225, 0
  %227 = xor i1 %226, true
  %228 = xor i1 %227, true
  %229 = call i32 @lck_txn_lock(ptr noundef %223, i1 noundef zeroext %228)
  store i32 %229, ptr %7, align 4, !tbaa !9
  %230 = load i32, ptr %7, align 4, !tbaa !9
  %231 = icmp ne i32 %230, 0
  %232 = xor i1 %231, true
  %233 = xor i1 %232, true
  %234 = zext i1 %233 to i32
  %235 = sext i32 %234 to i64
  %236 = call i64 @llvm.expect.i64(i64 %235, i64 0)
  %237 = icmp ne i64 %236, 0
  br i1 %237, label %238, label %240

238:                                              ; preds = %222
  %239 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %239, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %268

240:                                              ; preds = %222
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.MDBX_env, ptr %241, i32 0, i32 1
  %243 = load i32, ptr %242, align 4, !tbaa !17
  %244 = and i32 %243, -2147483648
  %245 = icmp ne i32 %244, 0
  %246 = xor i1 %245, true
  %247 = xor i1 %246, true
  %248 = zext i1 %247 to i32
  %249 = sext i32 %248 to i64
  %250 = call i64 @llvm.expect.i64(i64 %249, i64 0)
  %251 = icmp ne i64 %250, 0
  br i1 %251, label %252, label %254

252:                                              ; preds = %240
  %253 = load ptr, ptr %6, align 8, !tbaa !5
  call void @lck_txn_unlock(ptr noundef %253)
  store i32 -30795, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %268

254:                                              ; preds = %240
  %255 = load ptr, ptr %4, align 8, !tbaa !5
  %256 = load i32, ptr %5, align 4, !tbaa !9
  %257 = call i32 @txn_basal_start(ptr noundef %255, i32 noundef %256)
  store i32 %257, ptr %7, align 4, !tbaa !9
  %258 = load i32, ptr %7, align 4, !tbaa !9
  %259 = icmp ne i32 %258, 0
  %260 = xor i1 %259, true
  %261 = xor i1 %260, true
  %262 = zext i1 %261 to i32
  %263 = sext i32 %262 to i64
  %264 = call i64 @llvm.expect.i64(i64 %263, i64 0)
  %265 = icmp ne i64 %264, 0
  br i1 %265, label %266, label %267

266:                                              ; preds = %254
  store i32 2, ptr %9, align 4
  br label %268

267:                                              ; preds = %254
  store i32 0, ptr %9, align 4
  br label %268

268:                                              ; preds = %267, %266, %252, %238, %221
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %269

269:                                              ; preds = %268, %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  %270 = load i32, ptr %9, align 4
  switch i32 %270, label %1491 [
    i32 0, label %271
    i32 2, label %1455
  ]

271:                                              ; preds = %269
  br label %272

272:                                              ; preds = %271, %142
  %273 = load ptr, ptr %4, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.MDBX_txn, ptr %273, i32 0, i32 7
  %275 = load i64, ptr %274, align 8, !tbaa !27
  %276 = load i32, ptr %5, align 4, !tbaa !9
  %277 = and i32 %276, 655360
  %278 = icmp eq i32 %277, 0
  %279 = zext i1 %278 to i32
  %280 = sext i32 %279 to i64
  %281 = add i64 %275, %280
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.MDBX_txn, ptr %282, i32 0, i32 8
  store i64 %281, ptr %283, align 8, !tbaa !39
  br label %284

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

295:                                              ; preds = %284
  br label %296

296:                                              ; preds = %295
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.MDBX_txn, ptr %297, i32 0, i32 10
  %299 = load ptr, ptr %298, align 8, !tbaa !32
  %300 = getelementptr inbounds %struct.tree, ptr %299, i64 0
  %301 = getelementptr inbounds %struct.tree, ptr %300, i32 0, i32 0
  %302 = load i16, ptr %301, align 4, !tbaa !33
  %303 = zext i16 %302 to i32
  %304 = icmp eq i32 %303, 8
  %305 = xor i1 %304, true
  %306 = xor i1 %305, true
  %307 = xor i1 %306, true
  %308 = zext i1 %307 to i32
  %309 = sext i32 %308 to i64
  %310 = call i64 @llvm.expect.i64(i64 %309, i64 0)
  %311 = icmp ne i64 %310, 0
  br i1 %311, label %312, label %316

312:                                              ; preds = %296
  %313 = load ptr, ptr %4, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.MDBX_txn, ptr %313, i32 0, i32 9
  %315 = load ptr, ptr %314, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %315, ptr noundef @.str.8, ptr noundef @__func__.txn_renew, i32 noundef 143) #9
  unreachable

316:                                              ; preds = %296
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  br label %319

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

320:                                              ; preds = %319
  br label %321

321:                                              ; preds = %320
  br label %322

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

333:                                              ; preds = %322
  br label %334

334:                                              ; preds = %333
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.MDBX_txn, ptr %335, i32 0, i32 10
  %337 = load ptr, ptr %336, align 8, !tbaa !32
  %338 = getelementptr inbounds %struct.tree, ptr %337, i64 1
  %339 = getelementptr inbounds %struct.tree, ptr %338, i32 0, i32 0
  %340 = load i16, ptr %339, align 4, !tbaa !33
  %341 = zext i16 %340 to i32
  %342 = call zeroext i1 @check_table_flags(i32 noundef %341)
  %343 = xor i1 %342, true
  %344 = xor i1 %343, true
  %345 = xor i1 %344, true
  %346 = zext i1 %345 to i32
  %347 = sext i32 %346 to i64
  %348 = call i64 @llvm.expect.i64(i64 %347, i64 0)
  %349 = icmp ne i64 %348, 0
  br i1 %349, label %350, label %354

350:                                              ; preds = %334
  %351 = load ptr, ptr %4, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.MDBX_txn, ptr %351, i32 0, i32 9
  %353 = load ptr, ptr %352, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %353, ptr noundef @.str.9, ptr noundef @__func__.txn_renew, i32 noundef 144) #9
  unreachable

354:                                              ; preds = %334
  br label %355

355:                                              ; preds = %354
  br label %356

356:                                              ; preds = %355
  br label %357

357:                                              ; preds = %356, %322
  br label %358

358:                                              ; preds = %357
  br label %359

359:                                              ; preds = %358
  %360 = load ptr, ptr %4, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.MDBX_txn, ptr %360, i32 0, i32 2
  store i64 2, ptr %361, align 8, !tbaa !40
  %362 = load ptr, ptr %4, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.MDBX_txn, ptr %362, i32 0, i32 11
  %364 = load ptr, ptr %363, align 8, !tbaa !41
  %365 = getelementptr inbounds i32, ptr %364, i64 0
  store i32 3, ptr %365, align 4, !tbaa !9
  %366 = load ptr, ptr %4, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.MDBX_txn, ptr %366, i32 0, i32 12
  %368 = load ptr, ptr %367, align 8, !tbaa !42
  %369 = getelementptr inbounds i8, ptr %368, i64 0
  store i8 -112, ptr %369, align 1, !tbaa !29
  %370 = load ptr, ptr %4, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.MDBX_txn, ptr %370, i32 0, i32 12
  %372 = load ptr, ptr %371, align 8, !tbaa !42
  %373 = getelementptr inbounds i8, ptr %372, i64 1
  store i8 -112, ptr %373, align 1, !tbaa !29
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.MDBX_txn, ptr %374, i32 0, i32 14
  %376 = load ptr, ptr %375, align 8, !tbaa !43
  %377 = getelementptr inbounds ptr, ptr %376, i64 0
  store ptr null, ptr %377, align 8, !tbaa !5
  %378 = load ptr, ptr %4, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.MDBX_txn, ptr %378, i32 0, i32 14
  %380 = load ptr, ptr %379, align 8, !tbaa !43
  %381 = getelementptr inbounds ptr, ptr %380, i64 1
  store ptr null, ptr %381, align 8, !tbaa !5
  %382 = load ptr, ptr %4, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.MDBX_txn, ptr %382, i32 0, i32 13
  %384 = load ptr, ptr %383, align 8, !tbaa !44
  %385 = getelementptr inbounds i32, ptr %384, i64 0
  store i32 0, ptr %385, align 4, !tbaa !9
  %386 = load ptr, ptr %6, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.MDBX_env, ptr %386, i32 0, i32 27
  %388 = load ptr, ptr %387, align 8, !tbaa !45
  %389 = getelementptr inbounds %union.mdbx_atomic_uint32_t, ptr %388, i64 1
  %390 = call i32 @atomic_load32(ptr noundef %389, i32 noundef 1)
  %391 = load ptr, ptr %4, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.MDBX_txn, ptr %391, i32 0, i32 13
  %393 = load ptr, ptr %392, align 8, !tbaa !44
  %394 = getelementptr inbounds i32, ptr %393, i64 1
  store i32 %390, ptr %394, align 4, !tbaa !9
  %395 = load ptr, ptr %6, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.MDBX_env, ptr %395, i32 0, i32 26
  %397 = load ptr, ptr %396, align 8, !tbaa !46
  %398 = getelementptr inbounds i8, ptr %397, i64 1
  %399 = load i8, ptr %398, align 1, !tbaa !29
  %400 = zext i8 %399 to i32
  %401 = load ptr, ptr %4, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.MDBX_txn, ptr %401, i32 0, i32 10
  %403 = load ptr, ptr %402, align 8, !tbaa !32
  %404 = getelementptr inbounds %struct.tree, ptr %403, i64 1
  %405 = getelementptr inbounds %struct.tree, ptr %404, i32 0, i32 0
  %406 = load i16, ptr %405, align 4, !tbaa !33
  %407 = zext i16 %406 to i32
  %408 = or i32 128, %407
  %409 = icmp ne i32 %400, %408
  %410 = xor i1 %409, true
  %411 = xor i1 %410, true
  %412 = zext i1 %411 to i32
  %413 = sext i32 %412 to i64
  %414 = call i64 @llvm.expect.i64(i64 %413, i64 0)
  %415 = icmp ne i64 %414, 0
  br i1 %415, label %416, label %680

416:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #8
  %417 = load ptr, ptr %6, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.MDBX_env, ptr %417, i32 0, i32 24
  %419 = load ptr, ptr %418, align 8, !tbaa !47
  %420 = icmp ne ptr %419, null
  br i1 %420, label %421, label %429

421:                                              ; preds = %416
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.MDBX_env, ptr %422, i32 0, i32 24
  %424 = load ptr, ptr %423, align 8, !tbaa !47
  %425 = getelementptr inbounds %struct.MDBX_txn, ptr %424, i32 0, i32 3
  %426 = load i64, ptr %425, align 8, !tbaa !36
  %427 = call i64 @osal_thread_self()
  %428 = icmp ne i64 %426, %427
  br label %429

429:                                              ; preds = %421, %416
  %430 = phi i1 [ false, %416 ], [ %428, %421 ]
  %431 = zext i1 %430 to i8
  store i8 %431, ptr %11, align 1, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #8
  store i8 0, ptr %12, align 1, !tbaa !48
  %432 = load i8, ptr %11, align 1, !tbaa !48, !range !49, !noundef !50
  %433 = trunc i8 %432 to i1
  br i1 %433, label %434, label %449

434:                                              ; preds = %429
  %435 = load ptr, ptr %6, align 8, !tbaa !5
  %436 = call i32 @lck_txn_lock(ptr noundef %435, i1 noundef zeroext true)
  store i32 %436, ptr %7, align 4, !tbaa !9
  %437 = load i32, ptr %7, align 4, !tbaa !9
  %438 = icmp eq i32 %437, 0
  br i1 %438, label %439, label %440

439:                                              ; preds = %434
  store i8 1, ptr %12, align 1, !tbaa !48
  br label %448

440:                                              ; preds = %434
  %441 = load i32, ptr %7, align 4, !tbaa !9
  %442 = icmp ne i32 %441, -30778
  br i1 %442, label %443, label %447

443:                                              ; preds = %440
  %444 = load i32, ptr %7, align 4, !tbaa !9
  %445 = icmp ne i32 %444, 35
  br i1 %445, label %446, label %447

446:                                              ; preds = %443
  store i32 2, ptr %9, align 4
  br label %677

447:                                              ; preds = %443, %440
  br label %448

448:                                              ; preds = %447, %439
  br label %449

449:                                              ; preds = %448, %429
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.MDBX_env, ptr %450, i32 0, i32 41
  %452 = call i32 @osal_fastmutex_acquire(ptr noundef %451)
  store i32 %452, ptr %7, align 4, !tbaa !9
  %453 = load i32, ptr %7, align 4, !tbaa !9
  %454 = icmp eq i32 %453, 0
  %455 = xor i1 %454, true
  %456 = xor i1 %455, true
  %457 = zext i1 %456 to i32
  %458 = sext i32 %457 to i64
  %459 = call i64 @llvm.expect.i64(i64 %458, i64 1)
  %460 = icmp ne i64 %459, 0
  br i1 %460, label %461, label %645

461:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %462 = load ptr, ptr %6, align 8, !tbaa !5
  %463 = call i32 @dbi_seq_next(ptr noundef %462, i64 noundef 1)
  store i32 %463, ptr %13, align 4, !tbaa !9
  %464 = load ptr, ptr %6, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.MDBX_env, ptr %464, i32 0, i32 26
  %466 = load ptr, ptr %465, align 8, !tbaa !46
  %467 = getelementptr inbounds i8, ptr %466, i64 1
  %468 = load i8, ptr %467, align 1, !tbaa !29
  %469 = zext i8 %468 to i32
  %470 = load ptr, ptr %4, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.MDBX_txn, ptr %470, i32 0, i32 10
  %472 = load ptr, ptr %471, align 8, !tbaa !32
  %473 = getelementptr inbounds %struct.tree, ptr %472, i64 1
  %474 = getelementptr inbounds %struct.tree, ptr %473, i32 0, i32 0
  %475 = load i16, ptr %474, align 4, !tbaa !33
  %476 = zext i16 %475 to i32
  %477 = or i32 128, %476
  %478 = icmp ne i32 %469, %477
  br i1 %478, label %479, label %627

479:                                              ; preds = %461
  %480 = load i8, ptr %11, align 1, !tbaa !48, !range !49, !noundef !50
  %481 = trunc i8 %480 to i1
  br i1 %481, label %482, label %490

482:                                              ; preds = %479
  %483 = load i8, ptr %12, align 1, !tbaa !48, !range !49, !noundef !50
  %484 = trunc i8 %483 to i1
  br i1 %484, label %490, label %485

485:                                              ; preds = %482
  %486 = load ptr, ptr %6, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.MDBX_env, ptr %486, i32 0, i32 39
  %488 = load ptr, ptr %487, align 8, !tbaa !51
  %489 = icmp ne ptr %488, null
  br i1 %489, label %594, label %490

490:                                              ; preds = %485, %482, %479
  %491 = load ptr, ptr %6, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.MDBX_env, ptr %491, i32 0, i32 26
  %493 = load ptr, ptr %492, align 8, !tbaa !46
  %494 = getelementptr inbounds i8, ptr %493, i64 1
  %495 = load i8, ptr %494, align 1, !tbaa !29
  %496 = zext i8 %495 to i32
  %497 = icmp ne i32 %496, 0
  br i1 %497, label %499, label %498

498:                                              ; preds = %490
  br i1 true, label %499, label %538

499:                                              ; preds = %498, %490
  br label %500

500:                                              ; preds = %499
  %501 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !52
  %502 = zext i8 %501 to i32
  %503 = icmp sle i32 3, %502
  %504 = xor i1 %503, true
  %505 = xor i1 %504, true
  %506 = zext i1 %505 to i32
  %507 = sext i32 %506 to i64
  %508 = call i64 @llvm.expect.i64(i64 %507, i64 0)
  %509 = icmp ne i64 %508, 0
  br i1 %509, label %510, label %535

510:                                              ; preds = %500
  %511 = load ptr, ptr %4, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.MDBX_txn, ptr %511, i32 0, i32 1
  %513 = load i32, ptr %512, align 4, !tbaa !53
  %514 = and i32 %513, 131072
  %515 = icmp ne i32 %514, 0
  %516 = zext i1 %515 to i64
  %517 = select i1 %515, ptr @.str.12, ptr @.str.13
  %518 = load ptr, ptr %4, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.MDBX_txn, ptr %518, i32 0, i32 7
  %520 = load i64, ptr %519, align 8, !tbaa !27
  %521 = load ptr, ptr %6, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.MDBX_env, ptr %521, i32 0, i32 26
  %523 = load ptr, ptr %522, align 8, !tbaa !46
  %524 = getelementptr inbounds i8, ptr %523, i64 1
  %525 = load i8, ptr %524, align 1, !tbaa !29
  %526 = zext i8 %525 to i32
  %527 = and i32 %526, -129
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.MDBX_txn, ptr %528, i32 0, i32 10
  %530 = load ptr, ptr %529, align 8, !tbaa !32
  %531 = getelementptr inbounds %struct.tree, ptr %530, i64 1
  %532 = getelementptr inbounds %struct.tree, ptr %531, i32 0, i32 0
  %533 = load i16, ptr %532, align 4, !tbaa !33
  %534 = zext i16 %533 to i32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.txn_renew, i32 noundef 185, ptr noundef @.str.11, ptr noundef %517, i64 noundef %520, i32 noundef %527, i32 noundef %534)
  br label %535

535:                                              ; preds = %510, %500
  br label %536

536:                                              ; preds = %535
  br label %537

537:                                              ; preds = %536
  br label %538

538:                                              ; preds = %537, %498
  %539 = load ptr, ptr %6, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.MDBX_env, ptr %539, i32 0, i32 26
  %541 = load ptr, ptr %540, align 8, !tbaa !46
  %542 = getelementptr inbounds i8, ptr %541, i64 1
  store i8 127, ptr %542, align 1, !tbaa !29
  %543 = load ptr, ptr %6, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.MDBX_env, ptr %543, i32 0, i32 27
  %545 = load ptr, ptr %544, align 8, !tbaa !45
  %546 = getelementptr inbounds %union.mdbx_atomic_uint32_t, ptr %545, i64 1
  %547 = load i32, ptr %13, align 4, !tbaa !9
  %548 = call i32 @atomic_store32(ptr noundef %546, i32 noundef %547, i32 noundef 1)
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  %550 = load ptr, ptr %6, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.MDBX_env, ptr %550, i32 0, i32 25
  %552 = load ptr, ptr %551, align 8, !tbaa !54
  %553 = getelementptr inbounds %struct.kvx, ptr %552, i64 1
  %554 = load ptr, ptr %4, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.MDBX_txn, ptr %554, i32 0, i32 10
  %556 = load ptr, ptr %555, align 8, !tbaa !32
  %557 = getelementptr inbounds %struct.tree, ptr %556, i64 1
  %558 = call i32 @tbl_setup(ptr noundef %549, ptr noundef %553, ptr noundef %557)
  store i32 %558, ptr %7, align 4, !tbaa !9
  %559 = load i32, ptr %7, align 4, !tbaa !9
  %560 = icmp eq i32 %559, 0
  %561 = xor i1 %560, true
  %562 = xor i1 %561, true
  %563 = zext i1 %562 to i32
  %564 = sext i32 %563 to i64
  %565 = call i64 @llvm.expect.i64(i64 %564, i64 1)
  %566 = icmp ne i64 %565, 0
  br i1 %566, label %567, label %593

567:                                              ; preds = %538
  %568 = load ptr, ptr %6, align 8, !tbaa !5
  %569 = call i32 @dbi_seq_next(ptr noundef %568, i64 noundef 1)
  store i32 %569, ptr %13, align 4, !tbaa !9
  %570 = load ptr, ptr %4, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.MDBX_txn, ptr %570, i32 0, i32 10
  %572 = load ptr, ptr %571, align 8, !tbaa !32
  %573 = getelementptr inbounds %struct.tree, ptr %572, i64 1
  %574 = getelementptr inbounds %struct.tree, ptr %573, i32 0, i32 0
  %575 = load i16, ptr %574, align 4, !tbaa !33
  %576 = zext i16 %575 to i32
  %577 = or i32 128, %576
  %578 = trunc i32 %577 to i8
  %579 = load ptr, ptr %6, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.MDBX_env, ptr %579, i32 0, i32 26
  %581 = load ptr, ptr %580, align 8, !tbaa !46
  %582 = getelementptr inbounds i8, ptr %581, i64 1
  store i8 %578, ptr %582, align 1, !tbaa !29
  %583 = load ptr, ptr %6, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.MDBX_env, ptr %583, i32 0, i32 27
  %585 = load ptr, ptr %584, align 8, !tbaa !45
  %586 = getelementptr inbounds %union.mdbx_atomic_uint32_t, ptr %585, i64 1
  %587 = load i32, ptr %13, align 4, !tbaa !9
  %588 = call i32 @atomic_store32(ptr noundef %586, i32 noundef %587, i32 noundef 1)
  %589 = load ptr, ptr %4, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.MDBX_txn, ptr %589, i32 0, i32 13
  %591 = load ptr, ptr %590, align 8, !tbaa !44
  %592 = getelementptr inbounds i32, ptr %591, i64 1
  store i32 %588, ptr %592, align 4, !tbaa !9
  br label %593

593:                                              ; preds = %567, %538
  br label %626

594:                                              ; preds = %485
  br label %595

595:                                              ; preds = %594
  %596 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !52
  %597 = zext i8 %596 to i32
  %598 = icmp sle i32 1, %597
  %599 = xor i1 %598, true
  %600 = xor i1 %599, true
  %601 = zext i1 %600 to i32
  %602 = sext i32 %601 to i64
  %603 = call i64 @llvm.expect.i64(i64 %602, i64 0)
  %604 = icmp ne i64 %603, 0
  br i1 %604, label %605, label %623

605:                                              ; preds = %595
  %606 = load ptr, ptr %4, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.MDBX_txn, ptr %606, i32 0, i32 10
  %608 = load ptr, ptr %607, align 8, !tbaa !32
  %609 = getelementptr inbounds %struct.tree, ptr %608, i64 1
  %610 = getelementptr inbounds %struct.tree, ptr %609, i32 0, i32 0
  %611 = load i16, ptr %610, align 4, !tbaa !33
  %612 = zext i16 %611 to i32
  %613 = load ptr, ptr %6, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.MDBX_env, ptr %613, i32 0, i32 26
  %615 = load ptr, ptr %614, align 8, !tbaa !46
  %616 = getelementptr inbounds i8, ptr %615, i64 1
  %617 = load i8, ptr %616, align 1, !tbaa !29
  %618 = zext i8 %617 to i32
  %619 = and i32 %618, -129
  %620 = load ptr, ptr %4, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.MDBX_txn, ptr %620, i32 0, i32 7
  %622 = load i64, ptr %621, align 8, !tbaa !27
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.txn_renew, i32 noundef 197, ptr noundef @.str.14, i32 noundef %612, i32 noundef %619, i64 noundef %622)
  br label %623

623:                                              ; preds = %605, %595
  br label %624

624:                                              ; preds = %623
  br label %625

625:                                              ; preds = %624
  store i32 -30784, ptr %7, align 4, !tbaa !9
  br label %626

626:                                              ; preds = %625, %593
  br label %627

627:                                              ; preds = %626, %461
  br label %628

628:                                              ; preds = %627
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.MDBX_env, ptr %629, i32 0, i32 41
  %631 = call i32 @osal_fastmutex_release(ptr noundef %630)
  %632 = icmp eq i32 %631, 0
  %633 = xor i1 %632, true
  %634 = xor i1 %633, true
  %635 = xor i1 %634, true
  %636 = zext i1 %635 to i32
  %637 = sext i32 %636 to i64
  %638 = call i64 @llvm.expect.i64(i64 %637, i64 0)
  %639 = icmp ne i64 %638, 0
  br i1 %639, label %640, label %642

640:                                              ; preds = %628
  %641 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %641, ptr noundef @.str.15, ptr noundef @__func__.txn_renew, i32 noundef 201) #9
  unreachable

642:                                              ; preds = %628
  br label %643

643:                                              ; preds = %642
  br label %644

644:                                              ; preds = %643
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %661

645:                                              ; preds = %449
  br label %646

646:                                              ; preds = %645
  %647 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !52
  %648 = zext i8 %647 to i32
  %649 = icmp sle i32 5, %648
  %650 = xor i1 %649, true
  %651 = xor i1 %650, true
  %652 = zext i1 %651 to i32
  %653 = sext i32 %652 to i64
  %654 = call i64 @llvm.expect.i64(i64 %653, i64 0)
  %655 = icmp ne i64 %654, 0
  br i1 %655, label %656, label %658

656:                                              ; preds = %646
  %657 = load i32, ptr %7, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.txn_renew, i32 noundef 203, ptr noundef @.str.16, i32 noundef %657)
  br label %658

658:                                              ; preds = %656, %646
  br label %659

659:                                              ; preds = %658
  br label %660

660:                                              ; preds = %659
  br label %661

661:                                              ; preds = %660, %644
  %662 = load i8, ptr %12, align 1, !tbaa !48, !range !49, !noundef !50
  %663 = trunc i8 %662 to i1
  br i1 %663, label %664, label %666

664:                                              ; preds = %661
  %665 = load ptr, ptr %6, align 8, !tbaa !5
  call void @lck_txn_unlock(ptr noundef %665)
  br label %666

666:                                              ; preds = %664, %661
  %667 = load i32, ptr %7, align 4, !tbaa !9
  %668 = icmp ne i32 %667, 0
  %669 = xor i1 %668, true
  %670 = xor i1 %669, true
  %671 = zext i1 %670 to i32
  %672 = sext i32 %671 to i64
  %673 = call i64 @llvm.expect.i64(i64 %672, i64 0)
  %674 = icmp ne i64 %673, 0
  br i1 %674, label %675, label %676

675:                                              ; preds = %666
  store i32 2, ptr %9, align 4
  br label %677

676:                                              ; preds = %666
  store i32 0, ptr %9, align 4
  br label %677

677:                                              ; preds = %676, %675, %446
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #8
  %678 = load i32, ptr %9, align 4
  switch i32 %678, label %1491 [
    i32 0, label %679
    i32 2, label %1455
  ]

679:                                              ; preds = %677
  br label %680

680:                                              ; preds = %679, %359
  %681 = load ptr, ptr %4, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.MDBX_txn, ptr %681, i32 0, i32 10
  %683 = load ptr, ptr %682, align 8, !tbaa !32
  %684 = getelementptr inbounds %struct.tree, ptr %683, i64 0
  %685 = getelementptr inbounds %struct.tree, ptr %684, i32 0, i32 0
  %686 = load i16, ptr %685, align 4, !tbaa !33
  %687 = zext i16 %686 to i32
  %688 = icmp ne i32 %687, 8
  %689 = xor i1 %688, true
  %690 = xor i1 %689, true
  %691 = zext i1 %690 to i32
  %692 = sext i32 %691 to i64
  %693 = call i64 @llvm.expect.i64(i64 %692, i64 0)
  %694 = icmp ne i64 %693, 0
  br i1 %694, label %695, label %717

695:                                              ; preds = %680
  br label %696

696:                                              ; preds = %695
  %697 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !52
  %698 = zext i8 %697 to i32
  %699 = icmp sle i32 1, %698
  %700 = xor i1 %699, true
  %701 = xor i1 %700, true
  %702 = zext i1 %701 to i32
  %703 = sext i32 %702 to i64
  %704 = call i64 @llvm.expect.i64(i64 %703, i64 0)
  %705 = icmp ne i64 %704, 0
  br i1 %705, label %706, label %714

706:                                              ; preds = %696
  %707 = load ptr, ptr %4, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.MDBX_txn, ptr %707, i32 0, i32 10
  %709 = load ptr, ptr %708, align 8, !tbaa !32
  %710 = getelementptr inbounds %struct.tree, ptr %709, i64 0
  %711 = getelementptr inbounds %struct.tree, ptr %710, i32 0, i32 0
  %712 = load i16, ptr %711, align 4, !tbaa !33
  %713 = zext i16 %712 to i32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.txn_renew, i32 noundef 212, ptr noundef @.str.17, i32 noundef %713, ptr noundef @.str.18)
  br label %714

714:                                              ; preds = %706, %696
  br label %715

715:                                              ; preds = %714
  br label %716

716:                                              ; preds = %715
  store i32 -30784, ptr %7, align 4, !tbaa !9
  br label %1455

717:                                              ; preds = %680
  br label %718

718:                                              ; preds = %717
  %719 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %720 = zext i8 %719 to i32
  %721 = and i32 %720, 1
  %722 = icmp ne i32 %721, 0
  %723 = xor i1 %722, true
  %724 = xor i1 %723, true
  %725 = zext i1 %724 to i32
  %726 = sext i32 %725 to i64
  %727 = call i64 @llvm.expect.i64(i64 %726, i64 1)
  %728 = icmp ne i64 %727, 0
  br i1 %728, label %729, label %753

729:                                              ; preds = %718
  br label %730

730:                                              ; preds = %729
  %731 = load ptr, ptr %4, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.MDBX_txn, ptr %731, i32 0, i32 10
  %733 = load ptr, ptr %732, align 8, !tbaa !32
  %734 = getelementptr inbounds %struct.tree, ptr %733, i64 0
  %735 = getelementptr inbounds %struct.tree, ptr %734, i32 0, i32 0
  %736 = load i16, ptr %735, align 4, !tbaa !33
  %737 = zext i16 %736 to i32
  %738 = icmp eq i32 %737, 8
  %739 = xor i1 %738, true
  %740 = xor i1 %739, true
  %741 = xor i1 %740, true
  %742 = zext i1 %741 to i32
  %743 = sext i32 %742 to i64
  %744 = call i64 @llvm.expect.i64(i64 %743, i64 0)
  %745 = icmp ne i64 %744, 0
  br i1 %745, label %746, label %750

746:                                              ; preds = %730
  %747 = load ptr, ptr %4, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.MDBX_txn, ptr %747, i32 0, i32 9
  %749 = load ptr, ptr %748, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %749, ptr noundef @.str.8, ptr noundef @__func__.txn_renew, i32 noundef 217) #9
  unreachable

750:                                              ; preds = %730
  br label %751

751:                                              ; preds = %750
  br label %752

752:                                              ; preds = %751
  br label %753

753:                                              ; preds = %752, %718
  br label %754

754:                                              ; preds = %753
  br label %755

755:                                              ; preds = %754
  br label %756

756:                                              ; preds = %755
  %757 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %758 = zext i8 %757 to i32
  %759 = and i32 %758, 1
  %760 = icmp ne i32 %759, 0
  %761 = xor i1 %760, true
  %762 = xor i1 %761, true
  %763 = zext i1 %762 to i32
  %764 = sext i32 %763 to i64
  %765 = call i64 @llvm.expect.i64(i64 %764, i64 1)
  %766 = icmp ne i64 %765, 0
  br i1 %766, label %767, label %791

767:                                              ; preds = %756
  br label %768

768:                                              ; preds = %767
  %769 = load ptr, ptr %4, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.MDBX_txn, ptr %769, i32 0, i32 10
  %771 = load ptr, ptr %770, align 8, !tbaa !32
  %772 = getelementptr inbounds %struct.tree, ptr %771, i64 1
  %773 = getelementptr inbounds %struct.tree, ptr %772, i32 0, i32 0
  %774 = load i16, ptr %773, align 4, !tbaa !33
  %775 = zext i16 %774 to i32
  %776 = call zeroext i1 @check_table_flags(i32 noundef %775)
  %777 = xor i1 %776, true
  %778 = xor i1 %777, true
  %779 = xor i1 %778, true
  %780 = zext i1 %779 to i32
  %781 = sext i32 %780 to i64
  %782 = call i64 @llvm.expect.i64(i64 %781, i64 0)
  %783 = icmp ne i64 %782, 0
  br i1 %783, label %784, label %788

784:                                              ; preds = %768
  %785 = load ptr, ptr %4, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.MDBX_txn, ptr %785, i32 0, i32 9
  %787 = load ptr, ptr %786, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %787, ptr noundef @.str.9, ptr noundef @__func__.txn_renew, i32 noundef 218) #9
  unreachable

788:                                              ; preds = %768
  br label %789

789:                                              ; preds = %788
  br label %790

790:                                              ; preds = %789
  br label %791

791:                                              ; preds = %790, %756
  br label %792

792:                                              ; preds = %791
  br label %793

793:                                              ; preds = %792
  %794 = load ptr, ptr %6, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.MDBX_env, ptr %794, i32 0, i32 1
  %796 = load i32, ptr %795, align 4, !tbaa !17
  %797 = and i32 %796, -2147483648
  %798 = icmp ne i32 %797, 0
  %799 = xor i1 %798, true
  %800 = xor i1 %799, true
  %801 = zext i1 %800 to i32
  %802 = sext i32 %801 to i64
  %803 = call i64 @llvm.expect.i64(i64 %802, i64 0)
  %804 = icmp ne i64 %803, 0
  br i1 %804, label %805, label %820

805:                                              ; preds = %793
  br label %806

806:                                              ; preds = %805
  %807 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !52
  %808 = zext i8 %807 to i32
  %809 = icmp sle i32 2, %808
  %810 = xor i1 %809, true
  %811 = xor i1 %810, true
  %812 = zext i1 %811 to i32
  %813 = sext i32 %812 to i64
  %814 = call i64 @llvm.expect.i64(i64 %813, i64 0)
  %815 = icmp ne i64 %814, 0
  br i1 %815, label %816, label %817

816:                                              ; preds = %806
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.txn_renew, i32 noundef 220, ptr noundef @.str.19, ptr noundef @.str.20)
  br label %817

817:                                              ; preds = %816, %806
  br label %818

818:                                              ; preds = %817
  br label %819

819:                                              ; preds = %818
  store i32 -30795, ptr %7, align 4, !tbaa !9
  br label %1454

820:                                              ; preds = %793
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %821 = load ptr, ptr %6, align 8, !tbaa !5
  %822 = load ptr, ptr %4, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.MDBX_txn, ptr %822, i32 0, i32 6
  %824 = getelementptr inbounds %struct.geo, ptr %823, i32 0, i32 4
  %825 = load i32, ptr %824, align 4, !tbaa !29
  %826 = zext i32 %825 to i64
  %827 = call i64 @pgno2bytes(ptr noundef %821, i64 noundef %826) #10
  store i64 %827, ptr %14, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %828 = load ptr, ptr %6, align 8, !tbaa !5
  %829 = load ptr, ptr %4, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.MDBX_txn, ptr %829, i32 0, i32 6
  %831 = getelementptr inbounds %struct.geo, ptr %830, i32 0, i32 5
  %832 = load i32, ptr %831, align 8, !tbaa !29
  %833 = zext i32 %832 to i64
  %834 = call i64 @pgno2bytes(ptr noundef %828, i64 noundef %833) #10
  store i64 %834, ptr %15, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %835 = load ptr, ptr %4, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.MDBX_txn, ptr %835, i32 0, i32 1
  %837 = load i32, ptr %836, align 4, !tbaa !53
  %838 = and i32 %837, 131072
  %839 = icmp ne i32 %838, 0
  br i1 %839, label %840, label %842

840:                                              ; preds = %820
  %841 = load i64, ptr %15, align 8, !tbaa !35
  br label %844

842:                                              ; preds = %820
  %843 = load i64, ptr %14, align 8, !tbaa !35
  br label %844

844:                                              ; preds = %842, %840
  %845 = phi i64 [ %841, %840 ], [ %843, %842 ]
  store i64 %845, ptr %16, align 8, !tbaa !35
  br label %846

846:                                              ; preds = %844
  %847 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %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 %880

857:                                              ; preds = %846
  br label %858

858:                                              ; preds = %857
  %859 = load ptr, ptr %6, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.MDBX_env, ptr %859, i32 0, i32 3
  %861 = getelementptr inbounds %struct.osal_mmap, ptr %860, i32 0, i32 2
  %862 = load i64, ptr %861, align 8, !tbaa !55
  %863 = load ptr, ptr %6, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.MDBX_env, ptr %863, i32 0, i32 3
  %865 = getelementptr inbounds %struct.osal_mmap, ptr %864, i32 0, i32 3
  %866 = load i64, ptr %865, align 8, !tbaa !56
  %867 = icmp uge i64 %862, %866
  %868 = xor i1 %867, true
  %869 = xor i1 %868, true
  %870 = xor i1 %869, true
  %871 = zext i1 %870 to i32
  %872 = sext i32 %871 to i64
  %873 = call i64 @llvm.expect.i64(i64 %872, i64 0)
  %874 = icmp ne i64 %873, 0
  br i1 %874, label %875, label %877

875:                                              ; preds = %858
  %876 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %876, ptr noundef @.str.21, ptr noundef @__func__.txn_renew, i32 noundef 226) #9
  unreachable

877:                                              ; preds = %858
  br label %878

878:                                              ; preds = %877
  br label %879

879:                                              ; preds = %878
  br label %880

880:                                              ; preds = %879, %846
  br label %881

881:                                              ; preds = %880
  br label %882

882:                                              ; preds = %881
  %883 = load i64, ptr %16, align 8, !tbaa !35
  %884 = load ptr, ptr %6, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.MDBX_env, ptr %884, i32 0, i32 3
  %886 = getelementptr inbounds %struct.osal_mmap, ptr %885, i32 0, i32 3
  %887 = load i64, ptr %886, align 8, !tbaa !56
  %888 = icmp ugt i64 %883, %887
  %889 = xor i1 %888, true
  %890 = xor i1 %889, true
  %891 = zext i1 %890 to i32
  %892 = sext i32 %891 to i64
  %893 = call i64 @llvm.expect.i64(i64 %892, i64 0)
  %894 = icmp ne i64 %893, 0
  br i1 %894, label %895, label %979

895:                                              ; preds = %882
  %896 = load ptr, ptr %4, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.MDBX_txn, ptr %896, i32 0, i32 6
  %898 = getelementptr inbounds %struct.geo, ptr %897, i32 0, i32 3
  %899 = load i32, ptr %898, align 8, !tbaa !57
  %900 = icmp ugt i32 %899, -2147483648
  br i1 %900, label %916, label %901

901:                                              ; preds = %895
  %902 = load ptr, ptr %6, align 8, !tbaa !5
  %903 = load ptr, ptr %6, align 8, !tbaa !5
  %904 = load ptr, ptr %4, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.MDBX_txn, ptr %904, i32 0, i32 6
  %906 = getelementptr inbounds %struct.geo, ptr %905, i32 0, i32 3
  %907 = load i32, ptr %906, align 8, !tbaa !57
  %908 = zext i32 %907 to i64
  %909 = call i64 @pgno2bytes(ptr noundef %903, i64 noundef %908) #10
  %910 = call i32 @bytes2pgno(ptr noundef %902, i64 noundef %909) #10
  %911 = load ptr, ptr %4, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.MDBX_txn, ptr %911, i32 0, i32 6
  %913 = getelementptr inbounds %struct.geo, ptr %912, i32 0, i32 3
  %914 = load i32, ptr %913, align 8, !tbaa !57
  %915 = icmp ne i32 %910, %914
  br i1 %915, label %916, label %917

916:                                              ; preds = %901, %895
  store i32 -30785, ptr %7, align 4, !tbaa !9
  store i32 2, ptr %9, align 4
  br label %1452

917:                                              ; preds = %901
  %918 = load ptr, ptr %6, align 8, !tbaa !5
  %919 = load ptr, ptr %4, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.MDBX_txn, ptr %919, i32 0, i32 6
  %921 = getelementptr inbounds %struct.geo, ptr %920, i32 0, i32 5
  %922 = load i32, ptr %921, align 8, !tbaa !29
  %923 = load ptr, ptr %4, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.MDBX_txn, ptr %923, i32 0, i32 6
  %925 = getelementptr inbounds %struct.geo, ptr %924, i32 0, i32 4
  %926 = load i32, ptr %925, align 4, !tbaa !29
  %927 = load ptr, ptr %4, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.MDBX_txn, ptr %927, i32 0, i32 6
  %929 = getelementptr inbounds %struct.geo, ptr %928, i32 0, i32 3
  %930 = load i32, ptr %929, align 8, !tbaa !57
  %931 = call i32 @dxb_resize(ptr noundef %918, i32 noundef %922, i32 noundef %926, i32 noundef %930, i32 noundef 0)
  store i32 %931, ptr %7, align 4, !tbaa !9
  %932 = load i32, ptr %7, align 4, !tbaa !9
  %933 = icmp ne i32 %932, 0
  %934 = xor i1 %933, true
  %935 = xor i1 %934, true
  %936 = zext i1 %935 to i32
  %937 = sext i32 %936 to i64
  %938 = call i64 @llvm.expect.i64(i64 %937, i64 0)
  %939 = icmp ne i64 %938, 0
  br i1 %939, label %940, label %941

940:                                              ; preds = %917
  store i32 2, ptr %9, align 4
  br label %1452

941:                                              ; preds = %917
  br label %942

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

953:                                              ; preds = %942
  br label %954

954:                                              ; preds = %953
  %955 = load ptr, ptr %6, align 8, !tbaa !5
  %956 = getelementptr inbounds %struct.MDBX_env, ptr %955, i32 0, i32 3
  %957 = getelementptr inbounds %struct.osal_mmap, ptr %956, i32 0, i32 2
  %958 = load i64, ptr %957, align 8, !tbaa !55
  %959 = load ptr, ptr %6, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.MDBX_env, ptr %959, i32 0, i32 3
  %961 = getelementptr inbounds %struct.osal_mmap, ptr %960, i32 0, i32 3
  %962 = load i64, ptr %961, align 8, !tbaa !56
  %963 = icmp uge i64 %958, %962
  %964 = xor i1 %963, true
  %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 %973

971:                                              ; preds = %954
  %972 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %972, ptr noundef @.str.21, ptr noundef @__func__.txn_renew, i32 noundef 241) #9
  unreachable

973:                                              ; preds = %954
  br label %974

974:                                              ; preds = %973
  br label %975

975:                                              ; preds = %974
  br label %976

976:                                              ; preds = %975, %942
  br label %977

977:                                              ; preds = %976
  br label %978

978:                                              ; preds = %977
  br label %1164

979:                                              ; preds = %882
  %980 = load i64, ptr %14, align 8, !tbaa !35
  %981 = load ptr, ptr %6, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.MDBX_env, ptr %981, i32 0, i32 3
  %983 = getelementptr inbounds %struct.osal_mmap, ptr %982, i32 0, i32 3
  %984 = load i64, ptr %983, align 8, !tbaa !56
  %985 = icmp ult i64 %980, %984
  %986 = xor i1 %985, true
  %987 = xor i1 %986, true
  %988 = zext i1 %987 to i32
  %989 = sext i32 %988 to i64
  %990 = call i64 @llvm.expect.i64(i64 %989, i64 0)
  %991 = icmp ne i64 %990, 0
  br i1 %991, label %992, label %1163

992:                                              ; preds = %979
  %993 = load ptr, ptr %6, align 8, !tbaa !5
  %994 = getelementptr inbounds %struct.MDBX_env, ptr %993, i32 0, i32 46
  %995 = call i32 @osal_fastmutex_acquire(ptr noundef %994)
  store i32 %995, ptr %7, align 4, !tbaa !9
  %996 = load i32, ptr %7, align 4, !tbaa !9
  %997 = icmp eq i32 %996, 0
  %998 = xor i1 %997, true
  %999 = xor i1 %998, true
  %1000 = zext i1 %999 to i32
  %1001 = sext i32 %1000 to i64
  %1002 = call i64 @llvm.expect.i64(i64 %1001, i64 1)
  %1003 = icmp ne i64 %1002, 0
  br i1 %1003, label %1004, label %1152

1004:                                             ; preds = %992
  br label %1005

1005:                                             ; preds = %1004
  %1006 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %1007 = zext i8 %1006 to i32
  %1008 = and i32 %1007, 1
  %1009 = icmp ne i32 %1008, 0
  %1010 = xor i1 %1009, true
  %1011 = xor i1 %1010, true
  %1012 = zext i1 %1011 to i32
  %1013 = sext i32 %1012 to i64
  %1014 = call i64 @llvm.expect.i64(i64 %1013, i64 1)
  %1015 = icmp ne i64 %1014, 0
  br i1 %1015, label %1016, label %1039

1016:                                             ; preds = %1005
  br label %1017

1017:                                             ; preds = %1016
  %1018 = load ptr, ptr %6, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.MDBX_env, ptr %1018, i32 0, i32 3
  %1020 = getelementptr inbounds %struct.osal_mmap, ptr %1019, i32 0, i32 2
  %1021 = load i64, ptr %1020, align 8, !tbaa !55
  %1022 = load ptr, ptr %6, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.MDBX_env, ptr %1022, i32 0, i32 3
  %1024 = getelementptr inbounds %struct.osal_mmap, ptr %1023, i32 0, i32 3
  %1025 = load i64, ptr %1024, align 8, !tbaa !56
  %1026 = icmp uge i64 %1021, %1025
  %1027 = xor i1 %1026, true
  %1028 = xor i1 %1027, true
  %1029 = xor i1 %1028, true
  %1030 = zext i1 %1029 to i32
  %1031 = sext i32 %1030 to i64
  %1032 = call i64 @llvm.expect.i64(i64 %1031, i64 0)
  %1033 = icmp ne i64 %1032, 0
  br i1 %1033, label %1034, label %1036

1034:                                             ; preds = %1017
  %1035 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1035, ptr noundef @.str.21, ptr noundef @__func__.txn_renew, i32 noundef 267) #9
  unreachable

1036:                                             ; preds = %1017
  br label %1037

1037:                                             ; preds = %1036
  br label %1038

1038:                                             ; preds = %1037
  br label %1039

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

1040:                                             ; preds = %1039
  br label %1041

1041:                                             ; preds = %1040
  %1042 = load ptr, ptr %6, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.MDBX_env, ptr %1042, i32 0, i32 3
  %1044 = getelementptr inbounds %struct.osal_mmap, ptr %1043, i32 0, i32 1
  %1045 = load i32, ptr %1044, align 8, !tbaa !58
  %1046 = load ptr, ptr %6, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct.MDBX_env, ptr %1046, i32 0, i32 3
  %1048 = getelementptr inbounds %struct.osal_mmap, ptr %1047, i32 0, i32 4
  %1049 = call i32 @osal_filesize(i32 noundef %1045, ptr noundef %1048)
  store i32 %1049, ptr %7, align 4, !tbaa !9
  %1050 = load i32, ptr %7, align 4, !tbaa !9
  %1051 = icmp eq i32 %1050, 0
  %1052 = xor i1 %1051, true
  %1053 = xor i1 %1052, true
  %1054 = zext i1 %1053 to i32
  %1055 = sext i32 %1054 to i64
  %1056 = call i64 @llvm.expect.i64(i64 %1055, i64 1)
  %1057 = icmp ne i64 %1056, 0
  br i1 %1057, label %1058, label %1128

1058:                                             ; preds = %1041
  br label %1059

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

1070:                                             ; preds = %1059
  br label %1071

1071:                                             ; preds = %1070
  %1072 = load ptr, ptr %6, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.MDBX_env, ptr %1072, i32 0, i32 3
  %1074 = getelementptr inbounds %struct.osal_mmap, ptr %1073, i32 0, i32 4
  %1075 = load i64, ptr %1074, align 8, !tbaa !59
  %1076 = load i64, ptr %16, align 8, !tbaa !35
  %1077 = icmp uge i64 %1075, %1076
  %1078 = xor i1 %1077, true
  %1079 = xor i1 %1078, true
  %1080 = xor i1 %1079, true
  %1081 = zext i1 %1080 to i32
  %1082 = sext i32 %1081 to i64
  %1083 = call i64 @llvm.expect.i64(i64 %1082, i64 0)
  %1084 = icmp ne i64 %1083, 0
  br i1 %1084, label %1085, label %1087

1085:                                             ; preds = %1071
  %1086 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1086, ptr noundef @.str.22, ptr noundef @__func__.txn_renew, i32 noundef 270) #9
  unreachable

1087:                                             ; preds = %1071
  br label %1088

1088:                                             ; preds = %1087
  br label %1089

1089:                                             ; preds = %1088
  br label %1090

1090:                                             ; preds = %1089, %1059
  br label %1091

1091:                                             ; preds = %1090
  br label %1092

1092:                                             ; preds = %1091
  %1093 = load ptr, ptr %6, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.MDBX_env, ptr %1093, i32 0, i32 3
  %1095 = getelementptr inbounds %struct.osal_mmap, ptr %1094, i32 0, i32 3
  %1096 = load i64, ptr %1095, align 8, !tbaa !56
  %1097 = load ptr, ptr %6, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.MDBX_env, ptr %1097, i32 0, i32 3
  %1099 = getelementptr inbounds %struct.osal_mmap, ptr %1098, i32 0, i32 4
  %1100 = load i64, ptr %1099, align 8, !tbaa !59
  %1101 = icmp ugt i64 %1096, %1100
  br i1 %1101, label %1102, label %1127

1102:                                             ; preds = %1092
  %1103 = load ptr, ptr %6, align 8, !tbaa !5
  %1104 = getelementptr inbounds %struct.MDBX_env, ptr %1103, i32 0, i32 3
  %1105 = getelementptr inbounds %struct.osal_mmap, ptr %1104, i32 0, i32 2
  %1106 = load i64, ptr %1105, align 8, !tbaa !55
  %1107 = load ptr, ptr %6, align 8, !tbaa !5
  %1108 = getelementptr inbounds %struct.MDBX_env, ptr %1107, i32 0, i32 3
  %1109 = getelementptr inbounds %struct.osal_mmap, ptr %1108, i32 0, i32 4
  %1110 = load i64, ptr %1109, align 8, !tbaa !59
  %1111 = icmp ult i64 %1106, %1110
  br i1 %1111, label %1112, label %1117

1112:                                             ; preds = %1102
  %1113 = load ptr, ptr %6, align 8, !tbaa !5
  %1114 = getelementptr inbounds %struct.MDBX_env, ptr %1113, i32 0, i32 3
  %1115 = getelementptr inbounds %struct.osal_mmap, ptr %1114, i32 0, i32 2
  %1116 = load i64, ptr %1115, align 8, !tbaa !55
  br label %1122

1117:                                             ; preds = %1102
  %1118 = load ptr, ptr %6, align 8, !tbaa !5
  %1119 = getelementptr inbounds %struct.MDBX_env, ptr %1118, i32 0, i32 3
  %1120 = getelementptr inbounds %struct.osal_mmap, ptr %1119, i32 0, i32 4
  %1121 = load i64, ptr %1120, align 8, !tbaa !59
  br label %1122

1122:                                             ; preds = %1117, %1112
  %1123 = phi i64 [ %1116, %1112 ], [ %1121, %1117 ]
  %1124 = load ptr, ptr %6, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.MDBX_env, ptr %1124, i32 0, i32 3
  %1126 = getelementptr inbounds %struct.osal_mmap, ptr %1125, i32 0, i32 3
  store i64 %1123, ptr %1126, align 8, !tbaa !56
  br label %1127

1127:                                             ; preds = %1122, %1092
  br label %1128

1128:                                             ; preds = %1127, %1041
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %1129 = load ptr, ptr %6, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.MDBX_env, ptr %1129, i32 0, i32 46
  %1131 = call i32 @osal_fastmutex_release(ptr noundef %1130)
  store i32 %1131, ptr %17, align 4, !tbaa !9
  %1132 = load i32, ptr %17, align 4, !tbaa !9
  %1133 = icmp ne i32 %1132, 0
  %1134 = xor i1 %1133, true
  %1135 = xor i1 %1134, true
  %1136 = zext i1 %1135 to i32
  %1137 = sext i32 %1136 to i64
  %1138 = call i64 @llvm.expect.i64(i64 %1137, i64 0)
  %1139 = icmp ne i64 %1138, 0
  br i1 %1139, label %1140, label %1151

1140:                                             ; preds = %1128
  %1141 = load i32, ptr %7, align 4, !tbaa !9
  %1142 = icmp eq i32 %1141, 0
  %1143 = xor i1 %1142, true
  %1144 = xor i1 %1143, true
  %1145 = zext i1 %1144 to i32
  %1146 = sext i32 %1145 to i64
  %1147 = call i64 @llvm.expect.i64(i64 %1146, i64 1)
  %1148 = icmp ne i64 %1147, 0
  br i1 %1148, label %1149, label %1151

1149:                                             ; preds = %1140
  %1150 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %1150, ptr %7, align 4, !tbaa !9
  br label %1151

1151:                                             ; preds = %1149, %1140, %1128
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %1152

1152:                                             ; preds = %1151, %992
  %1153 = load i32, ptr %7, align 4, !tbaa !9
  %1154 = icmp ne i32 %1153, 0
  %1155 = xor i1 %1154, true
  %1156 = xor i1 %1155, true
  %1157 = zext i1 %1156 to i32
  %1158 = sext i32 %1157 to i64
  %1159 = call i64 @llvm.expect.i64(i64 %1158, i64 0)
  %1160 = icmp ne i64 %1159, 0
  br i1 %1160, label %1161, label %1162

1161:                                             ; preds = %1152
  store i32 2, ptr %9, align 4
  br label %1452

1162:                                             ; preds = %1152
  br label %1163

1163:                                             ; preds = %1162, %979
  br label %1164

1164:                                             ; preds = %1163, %978
  br label %1165

1165:                                             ; preds = %1164
  %1166 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %1167 = zext i8 %1166 to i32
  %1168 = and i32 %1167, 1
  %1169 = icmp ne i32 %1168, 0
  %1170 = xor i1 %1169, true
  %1171 = xor i1 %1170, true
  %1172 = zext i1 %1171 to i32
  %1173 = sext i32 %1172 to i64
  %1174 = call i64 @llvm.expect.i64(i64 %1173, i64 1)
  %1175 = icmp ne i64 %1174, 0
  br i1 %1175, label %1176, label %1202

1176:                                             ; preds = %1165
  br label %1177

1177:                                             ; preds = %1176
  %1178 = load ptr, ptr %6, align 8, !tbaa !5
  %1179 = load ptr, ptr %4, align 8, !tbaa !5
  %1180 = getelementptr inbounds %struct.MDBX_txn, ptr %1179, i32 0, i32 6
  %1181 = getelementptr inbounds %struct.geo, ptr %1180, i32 0, i32 5
  %1182 = load i32, ptr %1181, align 8, !tbaa !29
  %1183 = zext i32 %1182 to i64
  %1184 = call i64 @pgno2bytes(ptr noundef %1178, i64 noundef %1183) #10
  %1185 = load ptr, ptr %6, align 8, !tbaa !5
  %1186 = getelementptr inbounds %struct.MDBX_env, ptr %1185, i32 0, i32 3
  %1187 = getelementptr inbounds %struct.osal_mmap, ptr %1186, i32 0, i32 3
  %1188 = load i64, ptr %1187, align 8, !tbaa !56
  %1189 = icmp ule i64 %1184, %1188
  %1190 = xor i1 %1189, true
  %1191 = xor i1 %1190, true
  %1192 = xor i1 %1191, true
  %1193 = zext i1 %1192 to i32
  %1194 = sext i32 %1193 to i64
  %1195 = call i64 @llvm.expect.i64(i64 %1194, i64 0)
  %1196 = icmp ne i64 %1195, 0
  br i1 %1196, label %1197, label %1199

1197:                                             ; preds = %1177
  %1198 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1198, ptr noundef @.str.23, ptr noundef @__func__.txn_renew, i32 noundef 286) #9
  unreachable

1199:                                             ; preds = %1177
  br label %1200

1200:                                             ; preds = %1199
  br label %1201

1201:                                             ; preds = %1200
  br label %1202

1202:                                             ; preds = %1201, %1165
  br label %1203

1203:                                             ; preds = %1202
  br label %1204

1204:                                             ; preds = %1203
  br label %1205

1205:                                             ; preds = %1204
  %1206 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %1207 = zext i8 %1206 to i32
  %1208 = and i32 %1207, 1
  %1209 = icmp ne i32 %1208, 0
  %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 1)
  %1215 = icmp ne i64 %1214, 0
  br i1 %1215, label %1216, label %1239

1216:                                             ; preds = %1205
  br label %1217

1217:                                             ; preds = %1216
  %1218 = load ptr, ptr %6, align 8, !tbaa !5
  %1219 = getelementptr inbounds %struct.MDBX_env, ptr %1218, i32 0, i32 3
  %1220 = getelementptr inbounds %struct.osal_mmap, ptr %1219, i32 0, i32 2
  %1221 = load i64, ptr %1220, align 8, !tbaa !55
  %1222 = load ptr, ptr %6, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.MDBX_env, ptr %1222, i32 0, i32 3
  %1224 = getelementptr inbounds %struct.osal_mmap, ptr %1223, i32 0, i32 3
  %1225 = load i64, ptr %1224, align 8, !tbaa !56
  %1226 = icmp uge i64 %1221, %1225
  %1227 = xor i1 %1226, true
  %1228 = xor i1 %1227, true
  %1229 = xor i1 %1228, true
  %1230 = zext i1 %1229 to i32
  %1231 = sext i32 %1230 to i64
  %1232 = call i64 @llvm.expect.i64(i64 %1231, i64 0)
  %1233 = icmp ne i64 %1232, 0
  br i1 %1233, label %1234, label %1236

1234:                                             ; preds = %1217
  %1235 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1235, ptr noundef @.str.21, ptr noundef @__func__.txn_renew, i32 noundef 287) #9
  unreachable

1236:                                             ; preds = %1217
  br label %1237

1237:                                             ; preds = %1236
  br label %1238

1238:                                             ; preds = %1237
  br label %1239

1239:                                             ; preds = %1238, %1205
  br label %1240

1240:                                             ; preds = %1239
  br label %1241

1241:                                             ; preds = %1240
  %1242 = load ptr, ptr %4, align 8, !tbaa !5
  %1243 = getelementptr inbounds %struct.MDBX_txn, ptr %1242, i32 0, i32 1
  %1244 = load i32, ptr %1243, align 4, !tbaa !53
  %1245 = and i32 %1244, 131072
  %1246 = icmp ne i32 %1245, 0
  br i1 %1246, label %1247, label %1248

1247:                                             ; preds = %1241
  br label %1449

1248:                                             ; preds = %1241
  br label %1249

1249:                                             ; preds = %1248
  %1250 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %1251 = zext i8 %1250 to i32
  %1252 = and i32 %1251, 1
  %1253 = icmp ne i32 %1252, 0
  %1254 = xor i1 %1253, true
  %1255 = xor i1 %1254, true
  %1256 = zext i1 %1255 to i32
  %1257 = sext i32 %1256 to i64
  %1258 = call i64 @llvm.expect.i64(i64 %1257, i64 1)
  %1259 = icmp ne i64 %1258, 0
  br i1 %1259, label %1260, label %1281

1260:                                             ; preds = %1249
  br label %1261

1261:                                             ; preds = %1260
  %1262 = load ptr, ptr %4, align 8, !tbaa !5
  %1263 = load ptr, ptr %6, align 8, !tbaa !5
  %1264 = getelementptr inbounds %struct.MDBX_env, ptr %1263, i32 0, i32 24
  %1265 = load ptr, ptr %1264, align 8, !tbaa !47
  %1266 = icmp eq ptr %1262, %1265
  %1267 = xor i1 %1266, true
  %1268 = xor i1 %1267, true
  %1269 = xor i1 %1268, true
  %1270 = zext i1 %1269 to i32
  %1271 = sext i32 %1270 to i64
  %1272 = call i64 @llvm.expect.i64(i64 %1271, i64 0)
  %1273 = icmp ne i64 %1272, 0
  br i1 %1273, label %1274, label %1278

1274:                                             ; preds = %1261
  %1275 = load ptr, ptr %4, align 8, !tbaa !5
  %1276 = getelementptr inbounds %struct.MDBX_txn, ptr %1275, i32 0, i32 9
  %1277 = load ptr, ptr %1276, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %1277, ptr noundef @.str.24, ptr noundef @__func__.txn_renew, i32 noundef 302) #9
  unreachable

1278:                                             ; preds = %1261
  br label %1279

1279:                                             ; preds = %1278
  br label %1280

1280:                                             ; preds = %1279
  br label %1281

1281:                                             ; preds = %1280, %1249
  br label %1282

1282:                                             ; preds = %1281
  br label %1283

1283:                                             ; preds = %1282
  %1284 = load ptr, ptr %6, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.MDBX_env, ptr %1284, i32 0, i32 34
  %1286 = getelementptr inbounds %struct.anon.10, ptr %1285, i32 0, i32 13
  %1287 = load i8, ptr %1286, align 2, !tbaa !60, !range !49, !noundef !50
  %1288 = trunc i8 %1287 to i1
  br i1 %1288, label %1289, label %1291

1289:                                             ; preds = %1283
  %1290 = load ptr, ptr %6, align 8, !tbaa !5
  call void @env_options_adjust_dp_limit(ptr noundef %1290)
  br label %1291

1291:                                             ; preds = %1289, %1283
  %1292 = load ptr, ptr %4, align 8, !tbaa !5
  %1293 = getelementptr inbounds %struct.MDBX_txn, ptr %1292, i32 0, i32 1
  %1294 = load i32, ptr %1293, align 4, !tbaa !53
  %1295 = and i32 %1294, 524288
  %1296 = icmp eq i32 %1295, 0
  br i1 %1296, label %1297, label %1323

1297:                                             ; preds = %1291
  %1298 = load ptr, ptr %4, align 8, !tbaa !5
  %1299 = call i32 @dpl_alloc(ptr noundef %1298)
  store i32 %1299, ptr %7, align 4, !tbaa !9
  %1300 = load i32, ptr %7, align 4, !tbaa !9
  %1301 = icmp ne i32 %1300, 0
  %1302 = xor i1 %1301, true
  %1303 = xor i1 %1302, true
  %1304 = zext i1 %1303 to i32
  %1305 = sext i32 %1304 to i64
  %1306 = call i64 @llvm.expect.i64(i64 %1305, i64 0)
  %1307 = icmp ne i64 %1306, 0
  br i1 %1307, label %1308, label %1309

1308:                                             ; preds = %1297
  store i32 2, ptr %9, align 4
  br label %1452

1309:                                             ; preds = %1297
  %1310 = load ptr, ptr %4, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct.MDBX_txn, ptr %1310, i32 0, i32 9
  %1312 = load ptr, ptr %1311, align 8, !tbaa !11
  %1313 = getelementptr inbounds %struct.MDBX_env, ptr %1312, i32 0, i32 34
  %1314 = getelementptr inbounds %struct.anon.10, ptr %1313, i32 0, i32 2
  %1315 = load i32, ptr %1314, align 8, !tbaa !61
  %1316 = zext i32 %1315 to i64
  %1317 = load ptr, ptr %4, align 8, !tbaa !5
  %1318 = getelementptr inbounds %struct.MDBX_txn, ptr %1317, i32 0, i32 17
  %1319 = getelementptr inbounds %struct.anon.4, ptr %1318, i32 0, i32 6
  store i64 %1316, ptr %1319, align 8, !tbaa !29
  %1320 = load ptr, ptr %4, align 8, !tbaa !5
  %1321 = getelementptr inbounds %struct.MDBX_txn, ptr %1320, i32 0, i32 17
  %1322 = getelementptr inbounds %struct.anon.4, ptr %1321, i32 0, i32 5
  store i32 1431655723, ptr %1322, align 8, !tbaa !29
  br label %1368

1323:                                             ; preds = %1291
  br label %1324

1324:                                             ; preds = %1323
  %1325 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %1326 = zext i8 %1325 to i32
  %1327 = and i32 %1326, 1
  %1328 = icmp ne i32 %1327, 0
  %1329 = xor i1 %1328, true
  %1330 = xor i1 %1329, true
  %1331 = zext i1 %1330 to i32
  %1332 = sext i32 %1331 to i64
  %1333 = call i64 @llvm.expect.i64(i64 %1332, i64 1)
  %1334 = icmp ne i64 %1333, 0
  br i1 %1334, label %1335, label %1356

1335:                                             ; preds = %1324
  br label %1336

1336:                                             ; preds = %1335
  %1337 = load ptr, ptr %4, align 8, !tbaa !5
  %1338 = getelementptr inbounds %struct.MDBX_txn, ptr %1337, i32 0, i32 17
  %1339 = getelementptr inbounds %struct.anon.4, ptr %1338, i32 0, i32 7
  %1340 = load ptr, ptr %1339, align 8, !tbaa !29
  %1341 = icmp eq ptr %1340, null
  %1342 = xor i1 %1341, true
  %1343 = xor i1 %1342, true
  %1344 = xor i1 %1343, true
  %1345 = zext i1 %1344 to i32
  %1346 = sext i32 %1345 to i64
  %1347 = call i64 @llvm.expect.i64(i64 %1346, i64 0)
  %1348 = icmp ne i64 %1347, 0
  br i1 %1348, label %1349, label %1353

1349:                                             ; preds = %1336
  %1350 = load ptr, ptr %4, align 8, !tbaa !5
  %1351 = getelementptr inbounds %struct.MDBX_txn, ptr %1350, i32 0, i32 9
  %1352 = load ptr, ptr %1351, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %1352, ptr noundef @.str.25, ptr noundef @__func__.txn_renew, i32 noundef 313) #9
  unreachable

1353:                                             ; preds = %1336
  br label %1354

1354:                                             ; preds = %1353
  br label %1355

1355:                                             ; preds = %1354
  br label %1356

1356:                                             ; preds = %1355, %1324
  br label %1357

1357:                                             ; preds = %1356
  br label %1358

1358:                                             ; preds = %1357
  %1359 = load ptr, ptr %4, align 8, !tbaa !5
  %1360 = getelementptr inbounds %struct.MDBX_txn, ptr %1359, i32 0, i32 17
  %1361 = getelementptr inbounds %struct.anon.4, ptr %1360, i32 0, i32 7
  store ptr null, ptr %1361, align 8, !tbaa !29
  %1362 = load ptr, ptr %4, align 8, !tbaa !5
  %1363 = getelementptr inbounds %struct.MDBX_txn, ptr %1362, i32 0, i32 17
  %1364 = getelementptr inbounds %struct.anon.4, ptr %1363, i32 0, i32 6
  store i64 2147483647, ptr %1364, align 8, !tbaa !29
  %1365 = load ptr, ptr %4, align 8, !tbaa !5
  %1366 = getelementptr inbounds %struct.MDBX_txn, ptr %1365, i32 0, i32 17
  %1367 = getelementptr inbounds %struct.anon.4, ptr %1366, i32 0, i32 5
  store i32 0, ptr %1367, align 8, !tbaa !29
  br label %1368

1368:                                             ; preds = %1358, %1309
  br label %1369

1369:                                             ; preds = %1368
  %1370 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !30
  %1371 = zext i8 %1370 to i32
  %1372 = and i32 %1371, 1
  %1373 = icmp ne i32 %1372, 0
  %1374 = xor i1 %1373, true
  %1375 = xor i1 %1374, true
  %1376 = zext i1 %1375 to i32
  %1377 = sext i32 %1376 to i64
  %1378 = call i64 @llvm.expect.i64(i64 %1377, i64 1)
  %1379 = icmp ne i64 %1378, 0
  br i1 %1379, label %1380, label %1399

1380:                                             ; preds = %1369
  br label %1381

1381:                                             ; preds = %1380
  %1382 = load ptr, ptr %4, align 8, !tbaa !5
  %1383 = getelementptr inbounds %struct.MDBX_txn, ptr %1382, i32 0, i32 17
  %1384 = getelementptr inbounds %struct.anon.4, ptr %1383, i32 0, i32 11
  %1385 = load i64, ptr %1384, align 8, !tbaa !29
  %1386 = icmp eq i64 %1385, 0
  %1387 = xor i1 %1386, true
  %1388 = xor i1 %1387, true
  %1389 = xor i1 %1388, true
  %1390 = zext i1 %1389 to i32
  %1391 = sext i32 %1390 to i64
  %1392 = call i64 @llvm.expect.i64(i64 %1391, i64 0)
  %1393 = icmp ne i64 %1392, 0
  br i1 %1393, label %1394, label %1396

1394:                                             ; preds = %1381
  %1395 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1395, ptr noundef @.str.26, ptr noundef @__func__.txn_renew, i32 noundef 318) #9
  unreachable

1396:                                             ; preds = %1381
  br label %1397

1397:                                             ; preds = %1396
  br label %1398

1398:                                             ; preds = %1397
  br label %1399

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

1400:                                             ; preds = %1399
  br label %1401

1401:                                             ; preds = %1400
  br label %1402

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

1413:                                             ; preds = %1402
  br label %1414

1414:                                             ; preds = %1413
  %1415 = load ptr, ptr %4, align 8, !tbaa !5
  %1416 = getelementptr inbounds %struct.MDBX_txn, ptr %1415, i32 0, i32 17
  %1417 = getelementptr inbounds %struct.anon.4, ptr %1416, i32 0, i32 11
  %1418 = load i64, ptr %1417, align 8, !tbaa !29
  %1419 = icmp eq i64 %1418, 0
  %1420 = xor i1 %1419, true
  %1421 = xor i1 %1420, true
  %1422 = xor i1 %1421, true
  %1423 = zext i1 %1422 to i32
  %1424 = sext i32 %1423 to i64
  %1425 = call i64 @llvm.expect.i64(i64 %1424, i64 0)
  %1426 = icmp ne i64 %1425, 0
  br i1 %1426, label %1427, label %1429

1427:                                             ; preds = %1414
  %1428 = load ptr, ptr %6, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1428, ptr noundef @.str.27, ptr noundef @__func__.txn_renew, i32 noundef 319) #9
  unreachable

1429:                                             ; preds = %1414
  br label %1430

1430:                                             ; preds = %1429
  br label %1431

1431:                                             ; preds = %1430
  br label %1432

1432:                                             ; preds = %1431, %1402
  br label %1433

1433:                                             ; preds = %1432
  br label %1434

1434:                                             ; preds = %1433
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %1435 = load ptr, ptr %4, align 8, !tbaa !5
  %1436 = ptrtoint ptr %1435 to i64
  %1437 = add nsw i64 %1436, 544
  %1438 = inttoptr i64 %1437 to ptr
  store ptr %1438, ptr %18, align 8, !tbaa !5
  %1439 = load ptr, ptr %18, align 8, !tbaa !5
  %1440 = load ptr, ptr %4, align 8, !tbaa !5
  %1441 = call i32 @cursor_init(ptr noundef %1439, ptr noundef %1440, i64 noundef 0)
  store i32 %1441, ptr %7, align 4, !tbaa !9
  %1442 = load i32, ptr %7, align 4, !tbaa !9
  %1443 = icmp ne i32 %1442, 0
  br i1 %1443, label %1444, label %1445

1444:                                             ; preds = %1434
  store i32 2, ptr %9, align 4
  br label %1446

1445:                                             ; preds = %1434
  store i32 0, ptr %9, align 4
  br label %1446

1446:                                             ; preds = %1445, %1444
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  %1447 = load i32, ptr %9, align 4
  switch i32 %1447, label %1452 [
    i32 0, label %1448
  ]

1448:                                             ; preds = %1446
  br label %1449

1449:                                             ; preds = %1448, %1247
  %1450 = load ptr, ptr %6, align 8, !tbaa !5
  %1451 = load ptr, ptr %4, align 8, !tbaa !5
  call void @dxb_sanitize_tail(ptr noundef %1450, ptr noundef %1451)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %1452

1452:                                             ; preds = %1449, %1446, %1308, %1161, %940, %916
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  %1453 = load i32, ptr %9, align 4
  switch i32 %1453, label %1491 [
    i32 2, label %1455
  ]

1454:                                             ; preds = %819
  br label %1455

1455:                                             ; preds = %1454, %1452, %716, %677, %269, %43
  br label %1456

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

1467:                                             ; preds = %1456
  br label %1468

1468:                                             ; preds = %1467
  %1469 = load i32, ptr %7, align 4, !tbaa !9
  %1470 = icmp ne i32 %1469, 0
  %1471 = xor i1 %1470, true
  %1472 = xor i1 %1471, true
  %1473 = xor i1 %1472, true
  %1474 = zext i1 %1473 to i32
  %1475 = sext i32 %1474 to i64
  %1476 = call i64 @llvm.expect.i64(i64 %1475, i64 0)
  %1477 = icmp ne i64 %1476, 0
  br i1 %1477, label %1478, label %1482

1478:                                             ; preds = %1468
  %1479 = load ptr, ptr %4, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.MDBX_txn, ptr %1479, i32 0, i32 9
  %1481 = load ptr, ptr %1480, align 8, !tbaa !11
  call void @mdbx_assert_fail(ptr noundef %1481, ptr noundef @.str.28, ptr noundef @__func__.txn_renew, i32 noundef 330) #9
  unreachable

1482:                                             ; preds = %1468
  br label %1483

1483:                                             ; preds = %1482
  br label %1484

1484:                                             ; preds = %1483
  br label %1485

1485:                                             ; preds = %1484, %1456
  br label %1486

1486:                                             ; preds = %1485
  br label %1487

1487:                                             ; preds = %1486
  %1488 = load ptr, ptr %4, align 8, !tbaa !5
  %1489 = call i32 @txn_end(ptr noundef %1488, i32 noundef 68)
  %1490 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %1490, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %1491

1491:                                             ; preds = %1487, %1452, %677, %269
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  %1492 = load i32, ptr %3, align 4
  ret i32 %1492
}

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @osal_thread_self() #5

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @txn_check_overlapped(ptr noundef, i32 noundef, i64 noundef) #3

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

declare i32 @lck_txn_lock(ptr noundef, i1 noundef zeroext) #4

declare void @lck_txn_unlock(ptr noundef) #4

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

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

declare i32 @osal_fastmutex_acquire(ptr noundef) #4

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

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

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

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

declare i32 @osal_fastmutex_release(ptr noundef) #4

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

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

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

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

declare void @env_options_adjust_dp_limit(ptr noundef) #4

declare i32 @dpl_alloc(ptr noundef) #4

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

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

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

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

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


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

%struct.libmdbx_globals = type { %union.bin128, i32, i32, i8, i8, i8, i8, i32, %union.logger_union, %union.pthread_mutex_t, i64, ptr }
%union.bin128 = type { %struct.anon }
%struct.anon = type { i64, i64 }
%union.logger_union = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@.str.7 = external hidden unnamed_addr constant [43 x i8], align 1
@__func__.txn_renew = external hidden unnamed_addr constant [10 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [94 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [19 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @txn_renew(ptr noundef %0, i32 noundef %1) local_unnamed_addr #1 {
  %3 = getelementptr inbounds i8, ptr %0, i64 80
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %4, i64 4
  %6 = load i32, ptr %5, align 4, !tbaa !15
  %7 = and i32 %6, 2621440
  %8 = or i32 %7, %1
  %9 = and i32 %1, 131072
  %.not = icmp eq i32 %9, 0
  br i1 %.not, label %36, label %10

10:                                               ; preds = %2
  %11 = tail call i32 @txn_ro_start(ptr noundef nonnull %0, i32 noundef %8) #7
  %.not241 = icmp eq i32 %11, 0
  br i1 %.not241, label %12, label %.critedge.thread341, !prof !25

12:                                               ; preds = %10
  %13 = getelementptr inbounds i8, ptr %0, i64 64
  %14 = load i64, ptr %13, align 8, !tbaa !26
  %15 = getelementptr inbounds i8, ptr %4, i64 104
  %16 = load ptr, ptr %15, align 8, !tbaa !27
  %17 = getelementptr inbounds i8, ptr %16, i64 360
  %18 = load volatile i64, ptr %17, align 8, !tbaa !28
  %.not242 = icmp ult i64 %14, %18
  br i1 %.not242, label %19, label %20, !prof !29

19:                                               ; preds = %12
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.txn_renew, i32 noundef 105) #8
  unreachable

20:                                               ; preds = %12
  %21 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %22 = and i8 %21, 1
  %.not243 = icmp eq i8 %22, 0
  br i1 %.not243, label %.thread, label %23, !prof !29

23:                                               ; preds = %20
  %24 = getelementptr inbounds i8, ptr %0, i64 88
  %25 = load ptr, ptr %24, align 8, !tbaa !32
  %26 = load i16, ptr %25, align 4, !tbaa !33
  %.not244 = icmp eq i16 %26, 8
  br i1 %.not244, label %29, label %27, !prof !25

27:                                               ; preds = %23
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %28, ptr noundef nonnull @.str.8, ptr noundef nonnull @__func__.txn_renew, i32 noundef 106) #8
  unreachable

29:                                               ; preds = %23
  %30 = getelementptr inbounds i8, ptr %25, i64 48
  %31 = load i16, ptr %30, align 4, !tbaa !33
  %32 = zext i16 %31 to i32
  %33 = tail call zeroext i1 @check_table_flags(i32 noundef %32)
  br i1 %33, label %.thread, label %34, !prof !25

34:                                               ; preds = %29
  %35 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %35, ptr noundef nonnull @.str.9, ptr noundef nonnull @__func__.txn_renew, i32 noundef 107) #8
  unreachable

36:                                               ; preds = %2
  %37 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %38 = and i8 %37, 1
  %.not233 = icmp eq i8 %38, 0
  %39 = and i32 %1, -271515657
  %.not234 = icmp eq i32 %39, 0
  %or.cond292 = or i1 %.not234, %.not233
  br i1 %or.cond292, label %41, label %40, !prof !35

40:                                               ; preds = %36
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.10, ptr noundef nonnull @__func__.txn_renew, i32 noundef 109) #8
  unreachable

41:                                               ; preds = %36
  %42 = tail call i64 @osal_thread_self()
  %43 = getelementptr inbounds i8, ptr %0, i64 16
  %44 = load i64, ptr %43, align 8, !tbaa !36
  %45 = icmp eq i64 %44, %42
  br i1 %45, label %.critedge.thread, label %46, !prof !29

46:                                               ; preds = %41
  %47 = getelementptr inbounds i8, ptr %4, i64 129
  %48 = load i8, ptr %47, align 1, !tbaa !37
  %49 = icmp sgt i8 %48, -1
  br i1 %49, label %.critedge.thread, label %50, !prof !29

50:                                               ; preds = %46
  %51 = getelementptr inbounds i8, ptr %4, i64 64
  %52 = load ptr, ptr %51, align 8, !tbaa !28
  %.not235 = icmp eq ptr %52, null
  br i1 %.not235, label %63, label %53

53:                                               ; preds = %50
  %54 = load i32, ptr %5, align 4, !tbaa !15
  %55 = and i32 %54, 2097152
  %.not236 = icmp eq i32 %55, 0
  br i1 %.not236, label %56, label %63

56:                                               ; preds = %53
  %57 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %58 = and i8 %57, 32
  %.not237 = icmp eq i8 %58, 0
  br i1 %.not237, label %59, label %63

59:                                               ; preds = %56
  %60 = getelementptr inbounds i8, ptr %4, i64 140
  %61 = load i32, ptr %60, align 4, !tbaa !38
  %62 = tail call zeroext i1 @txn_check_overlapped(ptr noundef nonnull %52, i32 noundef %61, i64 noundef %42)
  br i1 %62, label %.critedge.thread, label %63

63:                                               ; preds = %59, %56, %53, %50
  tail call void @jitter4testing(i1 noundef zeroext false)
  %64 = and i32 %1, 268435456
  %65 = icmp ne i32 %64, 0
  %66 = tail call i32 @lck_txn_lock(ptr noundef nonnull %4, i1 noundef zeroext %65) #7
  %.not238 = icmp eq i32 %66, 0
  br i1 %.not238, label %67, label %.critedge.thread, !prof !25

67:                                               ; preds = %63
  %68 = load i32, ptr %5, align 4, !tbaa !15
  %.not239 = icmp sgt i32 %68, -1
  br i1 %.not239, label %70, label %69, !prof !25

69:                                               ; preds = %67
  tail call void @lck_txn_unlock(ptr noundef nonnull %4) #7
  br label %.critedge.thread

70:                                               ; preds = %67
  %71 = tail call i32 @txn_basal_start(ptr noundef nonnull %0, i32 noundef %8) #7
  %.not240 = icmp eq i32 %71, 0
  br i1 %.not240, label %.thread, label %.critedge.thread341, !prof !25

.thread:                                          ; preds = %70, %20, %29
  %72 = getelementptr inbounds i8, ptr %0, i64 64
  %73 = load i64, ptr %72, align 8, !tbaa !26
  %74 = and i32 %8, 655360
  %75 = icmp eq i32 %74, 0
  %76 = zext i1 %75 to i64
  %77 = add i64 %73, %76
  %78 = getelementptr inbounds i8, ptr %0, i64 72
  store i64 %77, ptr %78, align 8, !tbaa !39
  %79 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %80 = and i8 %79, 1
  %.not246 = icmp eq i8 %80, 0
  br i1 %.not246, label %.thread306, label %81, !prof !29

81:                                               ; preds = %.thread
  %82 = getelementptr inbounds i8, ptr %0, i64 88
  %83 = load ptr, ptr %82, align 8, !tbaa !32
  %84 = load i16, ptr %83, align 4, !tbaa !33
  %.not247 = icmp eq i16 %84, 8
  br i1 %.not247, label %87, label %85, !prof !25

85:                                               ; preds = %81
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %86, ptr noundef nonnull @.str.8, ptr noundef nonnull @__func__.txn_renew, i32 noundef 143) #8
  unreachable

87:                                               ; preds = %81
  %88 = getelementptr inbounds i8, ptr %83, i64 48
  %89 = load i16, ptr %88, align 4, !tbaa !33
  %90 = zext i16 %89 to i32
  %91 = tail call zeroext i1 @check_table_flags(i32 noundef %90)
  br i1 %91, label %.thread306, label %92, !prof !25

92:                                               ; preds = %87
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %93, ptr noundef nonnull @.str.9, ptr noundef nonnull @__func__.txn_renew, i32 noundef 144) #8
  unreachable

.thread306:                                       ; preds = %.thread, %87
  %94 = getelementptr inbounds i8, ptr %0, i64 8
  store i64 2, ptr %94, align 8, !tbaa !40
  %95 = getelementptr inbounds i8, ptr %0, i64 96
  %96 = load ptr, ptr %95, align 8, !tbaa !41
  store i32 3, ptr %96, align 4, !tbaa !42
  %97 = getelementptr inbounds i8, ptr %0, i64 104
  %98 = load ptr, ptr %97, align 8, !tbaa !43
  store i8 -112, ptr %98, align 1, !tbaa !28
  %99 = load ptr, ptr %97, align 8, !tbaa !43
  %100 = getelementptr inbounds i8, ptr %99, i64 1
  store i8 -112, ptr %100, align 1, !tbaa !28
  %101 = getelementptr inbounds i8, ptr %0, i64 120
  %102 = load ptr, ptr %101, align 8, !tbaa !44
  store ptr null, ptr %102, align 8, !tbaa !45
  %103 = load ptr, ptr %101, align 8, !tbaa !44
  %104 = getelementptr inbounds i8, ptr %103, i64 8
  store ptr null, ptr %104, align 8, !tbaa !45
  %105 = getelementptr inbounds i8, ptr %0, i64 112
  %106 = load ptr, ptr %105, align 8, !tbaa !46
  store i32 0, ptr %106, align 4, !tbaa !42
  %107 = getelementptr inbounds i8, ptr %4, i64 216
  %108 = load ptr, ptr %107, align 8, !tbaa !47
  %109 = getelementptr inbounds i8, ptr %108, i64 4
  %110 = tail call i32 @atomic_load32(ptr noundef nonnull %109, i32 noundef 1)
  %111 = load ptr, ptr %105, align 8, !tbaa !46
  %112 = getelementptr inbounds i8, ptr %111, i64 4
  store i32 %110, ptr %112, align 4, !tbaa !42
  %113 = getelementptr inbounds i8, ptr %4, i64 208
  %114 = load ptr, ptr %113, align 8, !tbaa !48
  %115 = getelementptr inbounds i8, ptr %114, i64 1
  %116 = load i8, ptr %115, align 1, !tbaa !28
  %117 = getelementptr inbounds i8, ptr %0, i64 88
  %118 = load ptr, ptr %117, align 8, !tbaa !32
  %119 = getelementptr inbounds i8, ptr %118, i64 48
  %120 = load i16, ptr %119, align 4, !tbaa !33
  %121 = or i16 %120, 128
  %122 = zext i8 %116 to i16
  %.not249 = icmp eq i16 %121, %122
  br i1 %.not249, label %203, label %123, !prof !25

123:                                              ; preds = %.thread306
  %124 = getelementptr inbounds i8, ptr %4, i64 192
  %125 = load ptr, ptr %124, align 8, !tbaa !49
  %.not250 = icmp eq ptr %125, null
  br i1 %.not250, label %.thread307, label %126

126:                                              ; preds = %123
  %127 = getelementptr inbounds i8, ptr %125, i64 16
  %128 = load i64, ptr %127, align 8, !tbaa !36
  %129 = tail call i64 @osal_thread_self()
  %.not352 = icmp eq i64 %128, %129
  br i1 %.not352, label %.thread307, label %130

130:                                              ; preds = %126
  %131 = tail call i32 @lck_txn_lock(ptr noundef nonnull %4, i1 noundef zeroext true) #7
  switch i32 %131, label %.critedge [
    i32 0, label %.thread307
    i32 -30778, label %.fold.split
    i32 35, label %.fold.split
  ]

.fold.split:                                      ; preds = %130, %130
  br label %.thread307

.thread307:                                       ; preds = %123, %130, %.fold.split, %126
  %.not294 = phi i1 [ true, %126 ], [ false, %130 ], [ false, %.fold.split ], [ true, %123 ]
  %.0205 = phi i1 [ false, %126 ], [ true, %130 ], [ false, %.fold.split ], [ false, %123 ]
  %132 = getelementptr inbounds i8, ptr %4, i64 400
  %133 = tail call i32 @osal_fastmutex_acquire(ptr noundef nonnull %132) #7
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %135, label %196, !prof !25

135:                                              ; preds = %.thread307
  %136 = tail call i32 @dbi_seq_next(ptr noundef nonnull %4, i64 noundef 1)
  %137 = load ptr, ptr %113, align 8, !tbaa !48
  %138 = getelementptr inbounds i8, ptr %137, i64 1
  %139 = load i8, ptr %138, align 1, !tbaa !28
  %140 = zext i8 %139 to i32
  %141 = load ptr, ptr %117, align 8, !tbaa !32
  %142 = getelementptr inbounds i8, ptr %141, i64 48
  %143 = load i16, ptr %142, align 4, !tbaa !33
  %144 = zext i16 %143 to i32
  %145 = or i32 %144, 128
  %.not251 = icmp eq i32 %145, %140
  br i1 %.not251, label %193, label %146

146:                                              ; preds = %135
  %brmerge = or i1 %.not294, %.0205
  br i1 %brmerge, label %150, label %147

147:                                              ; preds = %146
  %148 = getelementptr inbounds i8, ptr %4, i64 384
  %149 = load ptr, ptr %148, align 8, !tbaa !50
  %.not252 = icmp eq ptr %149, null
  br i1 %.not252, label %150, label %188

150:                                              ; preds = %146, %147
  %151 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !51
  %152 = icmp ugt i8 %151, 2
  br i1 %152, label %153, label %161, !prof !29

153:                                              ; preds = %150
  %154 = getelementptr inbounds i8, ptr %0, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !52
  %156 = and i32 %155, 131072
  %.not254 = icmp eq i32 %156, 0
  %157 = select i1 %.not254, ptr @.str.13, ptr @.str.12
  %158 = load i64, ptr %72, align 8, !tbaa !26
  %159 = and i8 %139, 127
  %160 = zext nneg i8 %159 to i32
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.txn_renew, i32 noundef 185, ptr noundef nonnull @.str.11, ptr noundef nonnull %157, i64 noundef %158, i32 noundef %160, i32 noundef %144) #7
  %.pre = load ptr, ptr %113, align 8, !tbaa !48
  br label %161

161:                                              ; preds = %150, %153
  %162 = phi ptr [ %137, %150 ], [ %.pre, %153 ]
  %163 = getelementptr inbounds i8, ptr %162, i64 1
  store i8 127, ptr %163, align 1, !tbaa !28
  %164 = load ptr, ptr %107, align 8, !tbaa !47
  %165 = getelementptr inbounds i8, ptr %164, i64 4
  %166 = tail call i32 @atomic_store32(ptr noundef nonnull %165, i32 noundef %136, i32 noundef 1)
  %167 = getelementptr inbounds i8, ptr %4, i64 200
  %168 = load ptr, ptr %167, align 8, !tbaa !53
  %169 = getelementptr inbounds i8, ptr %168, i64 64
  %170 = load ptr, ptr %117, align 8, !tbaa !32
  %171 = getelementptr inbounds i8, ptr %170, i64 48
  %172 = tail call i32 @tbl_setup(ptr noundef nonnull %4, ptr noundef nonnull %169, ptr noundef nonnull %171) #7
  %173 = icmp eq i32 %172, 0
  br i1 %173, label %174, label %193, !prof !25

174:                                              ; preds = %161
  %175 = tail call i32 @dbi_seq_next(ptr noundef nonnull %4, i64 noundef 1)
  %176 = load ptr, ptr %117, align 8, !tbaa !32
  %177 = getelementptr inbounds i8, ptr %176, i64 48
  %178 = load i16, ptr %177, align 4, !tbaa !33
  %179 = trunc i16 %178 to i8
  %180 = or i8 %179, -128
  %181 = load ptr, ptr %113, align 8, !tbaa !48
  %182 = getelementptr inbounds i8, ptr %181, i64 1
  store i8 %180, ptr %182, align 1, !tbaa !28
  %183 = load ptr, ptr %107, align 8, !tbaa !47
  %184 = getelementptr inbounds i8, ptr %183, i64 4
  %185 = tail call i32 @atomic_store32(ptr noundef nonnull %184, i32 noundef %175, i32 noundef 1)
  %186 = load ptr, ptr %105, align 8, !tbaa !46
  %187 = getelementptr inbounds i8, ptr %186, i64 4
  store i32 %185, ptr %187, align 4, !tbaa !42
  br label %193

188:                                              ; preds = %147
  %189 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !51
  %.not253 = icmp eq i8 %189, 0
  br i1 %.not253, label %193, label %190, !prof !25

190:                                              ; preds = %188
  %191 = and i32 %140, 127
  %192 = load i64, ptr %72, align 8, !tbaa !26
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.txn_renew, i32 noundef 197, ptr noundef nonnull @.str.14, i32 noundef %144, i32 noundef %191, i64 noundef %192) #7
  br label %193

193:                                              ; preds = %188, %190, %135, %161, %174
  %.3198 = phi i32 [ 0, %174 ], [ %172, %161 ], [ 0, %135 ], [ -30784, %190 ], [ -30784, %188 ]
  %194 = tail call i32 @osal_fastmutex_release(ptr noundef nonnull %132) #7
  %.not255 = icmp eq i32 %194, 0
  br i1 %.not255, label %200, label %195, !prof !25

195:                                              ; preds = %193
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.15, ptr noundef nonnull @__func__.txn_renew, i32 noundef 201) #8
  unreachable

196:                                              ; preds = %.thread307
  %197 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !51
  %198 = icmp ugt i8 %197, 4
  br i1 %198, label %199, label %200, !prof !29

199:                                              ; preds = %196
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.txn_renew, i32 noundef 203, ptr noundef nonnull @.str.16, i32 noundef %133) #7
  br label %200

200:                                              ; preds = %193, %196, %199
  %.4199 = phi i32 [ %133, %199 ], [ %133, %196 ], [ %.3198, %193 ]
  br i1 %.0205, label %201, label %202

201:                                              ; preds = %200
  tail call void @lck_txn_unlock(ptr noundef nonnull %4) #7
  br label %202

202:                                              ; preds = %201, %200
  %.not256 = icmp eq i32 %.4199, 0
  br i1 %.not256, label %._crit_edge, label %.critedge.thread341, !prof !25

._crit_edge:                                      ; preds = %202
  %.pre353 = load ptr, ptr %117, align 8, !tbaa !32
  br label %203

203:                                              ; preds = %._crit_edge, %.thread306
  %204 = phi ptr [ %.pre353, %._crit_edge ], [ %118, %.thread306 ]
  %205 = load i16, ptr %204, align 4, !tbaa !33
  %206 = zext i16 %205 to i32
  %.not257 = icmp eq i16 %205, 8
  br i1 %.not257, label %210, label %207, !prof !25

207:                                              ; preds = %203
  %208 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !51
  %.not289 = icmp eq i8 %208, 0
  br i1 %.not289, label %.critedge.thread341, label %209, !prof !25

209:                                              ; preds = %207
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.txn_renew, i32 noundef 212, ptr noundef nonnull @.str.17, i32 noundef %206, ptr noundef nonnull @.str.18) #7
  br label %.critedge.thread341

210:                                              ; preds = %203
  %211 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %212 = and i8 %211, 1
  %.not259 = icmp eq i8 %212, 0
  br i1 %.not259, label %220, label %213, !prof !29

213:                                              ; preds = %210
  %214 = getelementptr inbounds i8, ptr %204, i64 48
  %215 = load i16, ptr %214, align 4, !tbaa !33
  %216 = zext i16 %215 to i32
  %217 = tail call zeroext i1 @check_table_flags(i32 noundef %216)
  br i1 %217, label %220, label %218, !prof !25

218:                                              ; preds = %213
  %219 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %219, ptr noundef nonnull @.str.9, ptr noundef nonnull @__func__.txn_renew, i32 noundef 218) #8
  unreachable

220:                                              ; preds = %213, %210
  %221 = load i32, ptr %5, align 4, !tbaa !15
  %.not260 = icmp sgt i32 %221, -1
  br i1 %.not260, label %226, label %222, !prof !25

222:                                              ; preds = %220
  %223 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !51
  %224 = icmp ugt i8 %223, 1
  br i1 %224, label %225, label %.critedge.thread341, !prof !29

225:                                              ; preds = %222
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.txn_renew, i32 noundef 220, ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.20) #7
  br label %.critedge.thread341

226:                                              ; preds = %220
  %227 = getelementptr inbounds i8, ptr %0, i64 52
  %228 = load i32, ptr %227, align 4, !tbaa !28
  %229 = zext i32 %228 to i64
  %230 = tail call i64 @pgno2bytes(ptr noundef nonnull %4, i64 noundef %229) #9
  %231 = getelementptr inbounds i8, ptr %0, i64 56
  %232 = load i32, ptr %231, align 8, !tbaa !28
  %233 = zext i32 %232 to i64
  %234 = tail call i64 @pgno2bytes(ptr noundef nonnull %4, i64 noundef %233) #9
  %235 = getelementptr inbounds i8, ptr %0, i64 4
  %236 = load i32, ptr %235, align 4, !tbaa !52
  %237 = and i32 %236, 131072
  %.not261 = icmp eq i32 %237, 0
  %238 = select i1 %.not261, i64 %230, i64 %234
  %239 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %240 = and i8 %239, 1
  %.not262 = icmp eq i8 %240, 0
  br i1 %.not262, label %._crit_edge354, label %241, !prof !29

._crit_edge354:                                   ; preds = %226
  %.phi.trans.insert = getelementptr inbounds i8, ptr %4, i64 40
  %.pre355 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !54
  br label %247

241:                                              ; preds = %226
  %242 = getelementptr inbounds i8, ptr %4, i64 32
  %243 = load i64, ptr %242, align 8, !tbaa !55
  %244 = getelementptr inbounds i8, ptr %4, i64 40
  %245 = load i64, ptr %244, align 8, !tbaa !54
  %.not263 = icmp ult i64 %243, %245
  br i1 %.not263, label %246, label %247, !prof !29

246:                                              ; preds = %241
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.21, ptr noundef nonnull @__func__.txn_renew, i32 noundef 226) #8
  unreachable

247:                                              ; preds = %._crit_edge354, %241
  %248 = phi i64 [ %.pre355, %._crit_edge354 ], [ %245, %241 ]
  %249 = getelementptr inbounds i8, ptr %4, i64 40
  %250 = icmp ugt i64 %238, %248
  br i1 %250, label %251, label %269, !prof !29

251:                                              ; preds = %247
  %252 = getelementptr inbounds i8, ptr %0, i64 48
  %253 = load i32, ptr %252, align 8, !tbaa !56
  %254 = icmp ugt i32 %253, -2147483648
  br i1 %254, label %.critedge.thread341, label %255

255:                                              ; preds = %251
  %256 = zext i32 %253 to i64
  %257 = tail call i64 @pgno2bytes(ptr noundef nonnull %4, i64 noundef %256) #9
  %258 = tail call i32 @bytes2pgno(ptr noundef nonnull %4, i64 noundef %257) #9
  %.not270 = icmp eq i32 %258, %253
  br i1 %.not270, label %259, label %.critedge.thread341

259:                                              ; preds = %255
  %260 = tail call i32 @dxb_resize(ptr noundef nonnull %4, i32 noundef %232, i32 noundef %228, i32 noundef %253, i32 noundef 0) #7
  %.not271 = icmp eq i32 %260, 0
  br i1 %.not271, label %261, label %.critedge.thread341, !prof !25

261:                                              ; preds = %259
  %262 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %263 = and i8 %262, 1
  %.not272 = icmp eq i8 %263, 0
  br i1 %.not272, label %302, label %264, !prof !29

264:                                              ; preds = %261
  %265 = getelementptr inbounds i8, ptr %4, i64 32
  %266 = load i64, ptr %265, align 8, !tbaa !55
  %267 = load i64, ptr %249, align 8, !tbaa !54
  %.not273 = icmp ult i64 %266, %267
  br i1 %.not273, label %268, label %302, !prof !29

268:                                              ; preds = %264
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.21, ptr noundef nonnull @__func__.txn_renew, i32 noundef 241) #8
  unreachable

269:                                              ; preds = %247
  %270 = icmp ult i64 %230, %248
  br i1 %270, label %271, label %302, !prof !29

271:                                              ; preds = %269
  %272 = getelementptr inbounds i8, ptr %4, i64 496
  %273 = tail call i32 @osal_fastmutex_acquire(ptr noundef nonnull %272) #7
  %274 = icmp eq i32 %273, 0
  br i1 %274, label %275, label %.critedge.thread341, !prof !25

275:                                              ; preds = %271
  %276 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %277 = and i8 %276, 1
  %.not264 = icmp eq i8 %277, 0
  br i1 %.not264, label %283, label %278, !prof !29

278:                                              ; preds = %275
  %279 = getelementptr inbounds i8, ptr %4, i64 32
  %280 = load i64, ptr %279, align 8, !tbaa !55
  %281 = load i64, ptr %249, align 8, !tbaa !54
  %.not265 = icmp ult i64 %280, %281
  br i1 %.not265, label %282, label %283, !prof !29

282:                                              ; preds = %278
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.21, ptr noundef nonnull @__func__.txn_renew, i32 noundef 267) #8
  unreachable

283:                                              ; preds = %278, %275
  %284 = getelementptr inbounds i8, ptr %4, i64 24
  %285 = load i32, ptr %284, align 8, !tbaa !57
  %286 = getelementptr inbounds i8, ptr %4, i64 48
  %287 = tail call i32 @osal_filesize(i32 noundef %285, ptr noundef nonnull %286) #7
  %288 = icmp eq i32 %287, 0
  br i1 %288, label %289, label %.thread346, !prof !25

289:                                              ; preds = %283
  %290 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %291 = and i8 %290, 1
  %.not266 = icmp ne i8 %291, 0
  %.pre356 = load i64, ptr %286, align 8, !tbaa !58
  %.not267 = icmp ult i64 %.pre356, %238
  %or.cond362 = select i1 %.not266, i1 %.not267, i1 false
  br i1 %or.cond362, label %292, label %293, !prof !59

292:                                              ; preds = %289
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.22, ptr noundef nonnull @__func__.txn_renew, i32 noundef 270) #8
  unreachable

293:                                              ; preds = %289
  %294 = load i64, ptr %249, align 8, !tbaa !54
  %295 = icmp ugt i64 %294, %.pre356
  br i1 %295, label %296, label %299

296:                                              ; preds = %293
  %297 = getelementptr inbounds i8, ptr %4, i64 32
  %298 = load i64, ptr %297, align 8, !tbaa !55
  %.297 = tail call i64 @llvm.umin.i64(i64 %298, i64 %.pre356)
  store i64 %.297, ptr %249, align 8, !tbaa !54
  br label %299

299:                                              ; preds = %293, %296
  %300 = tail call i32 @osal_fastmutex_release(ptr noundef nonnull %272) #7
  %.not268 = icmp eq i32 %300, 0
  br i1 %.not268, label %._crit_edge357, label %.critedge.thread341, !prof !25

._crit_edge357:                                   ; preds = %299
  %.pre358 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  br label %302

.thread346:                                       ; preds = %283
  %301 = tail call i32 @osal_fastmutex_release(ptr noundef nonnull %272) #7
  br label %.critedge.thread341

302:                                              ; preds = %._crit_edge357, %264, %261, %269
  %303 = phi i8 [ %.pre358, %._crit_edge357 ], [ %262, %264 ], [ %262, %261 ], [ %239, %269 ]
  %304 = and i8 %303, 1
  %.not274 = icmp eq i8 %304, 0
  br i1 %.not274, label %.thread318, label %305, !prof !29

305:                                              ; preds = %302
  %306 = load i32, ptr %231, align 8, !tbaa !28
  %307 = zext i32 %306 to i64
  %308 = tail call i64 @pgno2bytes(ptr noundef nonnull %4, i64 noundef %307) #9
  %309 = load i64, ptr %249, align 8, !tbaa !54
  %.not275 = icmp ugt i64 %308, %309
  br i1 %.not275, label %310, label %311, !prof !29

310:                                              ; preds = %305
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.23, ptr noundef nonnull @__func__.txn_renew, i32 noundef 286) #8
  unreachable

311:                                              ; preds = %305
  %312 = getelementptr inbounds i8, ptr %4, i64 32
  %313 = load i64, ptr %312, align 8, !tbaa !55
  %.not277 = icmp ult i64 %313, %309
  br i1 %.not277, label %314, label %.thread319, !prof !29

314:                                              ; preds = %311
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.21, ptr noundef nonnull @__func__.txn_renew, i32 noundef 287) #8
  unreachable

.thread318:                                       ; preds = %302
  %315 = load i32, ptr %235, align 4, !tbaa !52
  %316 = and i32 %315, 131072
  %.not278 = icmp eq i32 %316, 0
  br i1 %.not278, label %323, label %.thread329

.thread319:                                       ; preds = %311
  %317 = load i32, ptr %235, align 4, !tbaa !52
  %318 = and i32 %317, 131072
  %.not278320 = icmp eq i32 %318, 0
  br i1 %.not278320, label %.thread321, label %.thread329

.thread321:                                       ; preds = %.thread319
  %319 = getelementptr inbounds i8, ptr %4, i64 192
  %320 = load ptr, ptr %319, align 8, !tbaa !49
  %.not280 = icmp eq ptr %320, %0
  br i1 %.not280, label %323, label %321, !prof !25

321:                                              ; preds = %.thread321
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %322, ptr noundef nonnull @.str.24, ptr noundef nonnull @__func__.txn_renew, i32 noundef 302) #8
  unreachable

323:                                              ; preds = %.thread318, %.thread321
  %324 = phi i32 [ %315, %.thread318 ], [ %317, %.thread321 ]
  %325 = getelementptr inbounds i8, ptr %4, i64 302
  %326 = load i8, ptr %325, align 2, !tbaa !60, !range !61, !noundef !62
  %327 = trunc nuw i8 %326 to i1
  br i1 %327, label %328, label %329

328:                                              ; preds = %323
  tail call void @env_options_adjust_dp_limit(ptr noundef nonnull %4) #7
  %.pre359 = load i32, ptr %235, align 4, !tbaa !52
  br label %329

329:                                              ; preds = %328, %323
  %330 = phi i32 [ %.pre359, %328 ], [ %324, %323 ]
  %331 = and i32 %330, 524288
  %332 = icmp eq i32 %331, 0
  br i1 %332, label %333, label %342

333:                                              ; preds = %329
  %334 = tail call i32 @dpl_alloc(ptr noundef nonnull %0) #7
  %.not283 = icmp eq i32 %334, 0
  br i1 %.not283, label %335, label %.critedge.thread341, !prof !25

335:                                              ; preds = %333
  %336 = load ptr, ptr %3, align 8, !tbaa !5
  %337 = getelementptr inbounds i8, ptr %336, i64 272
  %338 = load i32, ptr %337, align 8, !tbaa !63
  %339 = zext i32 %338 to i64
  %340 = getelementptr inbounds i8, ptr %0, i64 488
  store i64 %339, ptr %340, align 8, !tbaa !28
  %341 = getelementptr inbounds i8, ptr %0, i64 480
  store i32 1431655723, ptr %341, align 8, !tbaa !28
  %.pre360 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %.pre361 = and i8 %.pre360, 1
  br label %354

342:                                              ; preds = %329
  %343 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %344 = and i8 %343, 1
  %.not281 = icmp eq i8 %344, 0
  br i1 %.not281, label %350, label %345, !prof !29

345:                                              ; preds = %342
  %346 = getelementptr inbounds i8, ptr %0, i64 496
  %347 = load ptr, ptr %346, align 8, !tbaa !28
  %.not282 = icmp eq ptr %347, null
  br i1 %.not282, label %350, label %348, !prof !25

348:                                              ; preds = %345
  %349 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %349, ptr noundef nonnull @.str.25, ptr noundef nonnull @__func__.txn_renew, i32 noundef 313) #8
  unreachable

350:                                              ; preds = %345, %342
  %351 = getelementptr inbounds i8, ptr %0, i64 496
  store ptr null, ptr %351, align 8, !tbaa !28
  %352 = getelementptr inbounds i8, ptr %0, i64 488
  store i64 2147483647, ptr %352, align 8, !tbaa !28
  %353 = getelementptr inbounds i8, ptr %0, i64 480
  store i32 0, ptr %353, align 8, !tbaa !28
  br label %354

354:                                              ; preds = %335, %350
  %.pre-phi = phi i8 [ %.pre361, %335 ], [ %344, %350 ]
  %.not284 = icmp eq i8 %.pre-phi, 0
  br i1 %.not284, label %.thread322, label %355, !prof !29

355:                                              ; preds = %354
  %356 = getelementptr inbounds i8, ptr %0, i64 528
  %357 = load i64, ptr %356, align 8, !tbaa !28
  %.not285 = icmp eq i64 %357, 0
  br i1 %.not285, label %.thread322, label %358, !prof !25

358:                                              ; preds = %355
  tail call void @mdbx_assert_fail(ptr noundef nonnull %4, ptr noundef nonnull @.str.26, ptr noundef nonnull @__func__.txn_renew, i32 noundef 318) #8
  unreachable

.thread322:                                       ; preds = %355, %354
  %359 = ptrtoint ptr %0 to i64
  %360 = add nsw i64 %359, 544
  %361 = inttoptr i64 %360 to ptr
  %362 = tail call i32 @cursor_init(ptr noundef %361, ptr noundef nonnull %0, i64 noundef 0) #7
  %.not288 = icmp eq i32 %362, 0
  br i1 %.not288, label %.thread329, label %.critedge.thread341

.thread329:                                       ; preds = %.thread318, %.thread322, %.thread319
  tail call void @dxb_sanitize_tail(ptr noundef nonnull %4, ptr noundef nonnull %0)
  br label %.critedge.thread

.critedge:                                        ; preds = %130
  %363 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !30
  %364 = and i8 %363, 1
  %.not290 = icmp ne i8 %364, 0
  %.not291 = icmp eq i32 %131, 0
  %or.cond = and i1 %.not291, %.not290
  br i1 %or.cond, label %365, label %.critedge.thread341, !prof !64

365:                                              ; preds = %.critedge
  %366 = load ptr, ptr %3, align 8, !tbaa !5
  tail call void @mdbx_assert_fail(ptr noundef %366, ptr noundef nonnull @.str.28, ptr noundef nonnull @__func__.txn_renew, i32 noundef 330) #8
  unreachable

.critedge.thread341:                              ; preds = %299, %.thread322, %.thread346, %271, %333, %259, %251, %255, %70, %222, %225, %207, %209, %10, %202, %.critedge
  %.12340 = phi i32 [ %131, %.critedge ], [ %.4199, %202 ], [ %71, %70 ], [ -30795, %222 ], [ -30795, %225 ], [ -30784, %207 ], [ -30784, %209 ], [ %11, %10 ], [ %334, %333 ], [ %260, %259 ], [ -30785, %251 ], [ -30785, %255 ], [ %273, %271 ], [ %287, %.thread346 ], [ %362, %.thread322 ], [ %300, %299 ]
  %367 = tail call i32 @txn_end(ptr noundef nonnull %0, i32 noundef 68)
  br label %.critedge.thread

.critedge.thread:                                 ; preds = %41, %63, %59, %69, %46, %.thread329, %.critedge.thread341
  %.4 = phi i32 [ %.12340, %.critedge.thread341 ], [ 0, %.thread329 ], [ -30778, %41 ], [ %66, %63 ], [ -30415, %59 ], [ -30795, %69 ], [ -30778, %46 ]
  ret i32 %.4
}

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @osal_thread_self() local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @txn_check_overlapped(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #1

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

declare i32 @lck_txn_lock(ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

declare void @lck_txn_unlock(ptr noundef) local_unnamed_addr #2

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

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

declare i32 @osal_fastmutex_acquire(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @dbi_seq_next(ptr noundef, i64 noundef) local_unnamed_addr #3

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

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

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

declare i32 @osal_fastmutex_release(ptr noundef) local_unnamed_addr #2

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

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

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

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

declare void @env_options_adjust_dp_limit(ptr noundef) local_unnamed_addr #2

declare i32 @dpl_alloc(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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


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