; LLVM IR from erthink/libmdbx :: src (api-env)

; 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.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.meta_ptr = type { i64, %union.anon.24, i64 }
%union.anon.24 = type { ptr }
%struct.meta = type { [2 x i32], %union.anon.11, i16, i8, i8, %struct.geo, %union.anon.14, %struct.MDBX_canary, %union.anon.17, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon.11 = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon.12, %union.anon.13 }
%union.anon.12 = type { i32 }
%union.anon.13 = type { i32 }
%union.anon.14 = type { %struct.anon.15 }
%struct.anon.15 = type { %struct.tree, %struct.tree }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.17 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.MDBX_env = type { %union.mdbx_atomic_uint32_t, i32, i32, %struct.osal_mmap, i32, i32, %struct.osal_mmap, ptr, i16, i16, i16, i16, i16, i16, %union.mdbx_atomic_uint32_t, i8, i8, i16, i32, i32, i32, i32, %struct.anon.1, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.2, %struct.anon.6, i8, ptr, ptr, ptr, %struct.anon.7, %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, i32, i64, i64, i64 }
%union.anon = type { ptr }
%struct.anon.1 = type { ptr, ptr, ptr, ptr }
%struct.anon.2 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.3, %union.anon.4 }
%struct.anon.3 = type { i16, i16, i16, i16 }
%union.anon.4 = type { i32 }
%struct.anon.6 = type { i64, i64, i64, i64, i64 }
%struct.anon.7 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }
%struct.MDBX_txn = type { i32, i32, i64, i64, ptr, ptr, %struct.geo, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, %struct.MDBX_canary, ptr, %union.anon.18 }
%union.anon.18 = type { %struct.anon.20 }
%struct.anon.20 = type { %struct.troika, ptr, %struct.anon.21, i8, i32, i32, i64, ptr, ptr, ptr, i64, %union.anon.22 }
%struct.anon.21 = type { %struct.MDBX_rkl, i64, %struct.MDBX_rkl }
%struct.MDBX_rkl = type { i64, i64, i32, i32, ptr, [12 x i64] }
%union.anon.22 = type { %struct.anon.23 }
%struct.anon.23 = type { i64, ptr }

@globals = external global %struct.libmdbx_globals, align 8
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@__func__.mdbx_env_set_geometry = external hidden unnamed_addr constant [22 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [58 x i8], align 1

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

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

; Function Attrs: inlinehint nounwind willreturn memory(none) uwtable
declare hidden zeroext i1 @is_powerof2(i64 noundef) #2

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

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

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

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

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

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

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

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

declare void @env_options_adjust_defaults(ptr noundef) #3

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

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

declare void @lck_txn_unlock(ptr noundef) #3

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

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

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

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @mdbx_env_set_geometry(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, i64 noundef %5, i64 noundef %6) #12 {
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca %struct.troika, align 8
  %22 = alloca ptr, align 8
  %23 = alloca %struct.meta_ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i8, align 1
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca %struct.meta, align 4
  %30 = alloca %struct.meta_ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca ptr, align 8
  %34 = alloca %struct.geo, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i64 %1, ptr %10, align 8, !tbaa !9
  store i64 %2, ptr %11, align 8, !tbaa !9
  store i64 %3, ptr %12, align 8, !tbaa !9
  store i64 %4, ptr %13, align 8, !tbaa !9
  store i64 %5, ptr %14, align 8, !tbaa !9
  store i64 %6, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #13
  %35 = load ptr, ptr %9, align 8, !tbaa !5
  %36 = call i32 @check_env(ptr noundef %35, i1 noundef zeroext false)
  store i32 %36, ptr %16, align 4, !tbaa !11
  %37 = load i32, ptr %16, align 4, !tbaa !11
  %38 = icmp ne i32 %37, 0
  %39 = xor i1 %38, true
  %40 = xor i1 %39, true
  %41 = zext i1 %40 to i32
  %42 = sext i32 %41 to i64
  %43 = call i64 @llvm.expect.i64(i64 %42, i64 0)
  %44 = icmp ne i64 %43, 0
  br i1 %44, label %45, label %48

45:                                               ; preds = %7
  %46 = load i32, ptr %16, align 4, !tbaa !11
  %47 = call i32 @log_if_error(i32 noundef %46, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 932)
  store i32 %47, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %1797

48:                                               ; preds = %7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #13
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = call ptr @env_owned_wrtxn(ptr noundef %49)
  store ptr %50, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #13
  store i8 0, ptr %19, align 1, !tbaa !13
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.MDBX_env, ptr %51, i32 0, i32 3
  %53 = getelementptr inbounds %struct.osal_mmap, ptr %52, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8, !tbaa !15
  %55 = icmp ne ptr %54, null
  br i1 %55, label %56, label %279

56:                                               ; preds = %48
  %57 = load ptr, ptr %9, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.MDBX_env, ptr %57, i32 0, i32 1
  %59 = load i32, ptr %58, align 4, !tbaa !16
  %60 = and i32 %59, 131072
  %61 = icmp ne i32 %60, 0
  %62 = xor i1 %61, true
  %63 = xor i1 %62, true
  %64 = zext i1 %63 to i32
  %65 = sext i32 %64 to i64
  %66 = call i64 @llvm.expect.i64(i64 %65, i64 0)
  %67 = icmp ne i64 %66, 0
  br i1 %67, label %68, label %70

68:                                               ; preds = %56
  %69 = call i32 @log_if_error(i32 noundef 13, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 948)
  store i32 %69, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %1796

70:                                               ; preds = %56
  %71 = load ptr, ptr %18, align 8, !tbaa !5
  %72 = icmp ne ptr %71, null
  br i1 %72, label %163, label %73

73:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #13
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = call i32 @lck_txn_lock(ptr noundef %74, i1 noundef zeroext false)
  store i32 %75, ptr %20, align 4, !tbaa !11
  %76 = load i32, ptr %20, align 4, !tbaa !11
  %77 = icmp ne i32 %76, 0
  %78 = xor i1 %77, true
  %79 = xor i1 %78, true
  %80 = zext i1 %79 to i32
  %81 = sext i32 %80 to i64
  %82 = call i64 @llvm.expect.i64(i64 %81, i64 0)
  %83 = icmp ne i64 %82, 0
  br i1 %83, label %84, label %87

84:                                               ; preds = %73
  %85 = load i32, ptr %20, align 4, !tbaa !11
  %86 = call i32 @log_if_error(i32 noundef %85, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 953)
  store i32 %86, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %160

87:                                               ; preds = %73
  store i8 1, ptr %19, align 1, !tbaa !13
  %88 = load ptr, ptr %9, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.MDBX_env, ptr %88, i32 0, i32 24
  %90 = load ptr, ptr %89, align 8, !tbaa !26
  %91 = getelementptr inbounds %struct.MDBX_txn, ptr %90, i32 0, i32 17
  %92 = getelementptr inbounds %struct.anon.20, ptr %91, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #13
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  call void @meta_tap(ptr dead_on_unwind writable sret(%struct.troika) align 8 %21, ptr noundef %93)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %92, ptr align 8 %21, i64 32, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #13
  br label %94

94:                                               ; preds = %87
  %95 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !28
  %96 = zext i8 %95 to i32
  %97 = and i32 %96, 1
  %98 = icmp ne i32 %97, 0
  %99 = xor i1 %98, true
  %100 = xor i1 %99, true
  %101 = zext i1 %100 to i32
  %102 = sext i32 %101 to i64
  %103 = call i64 @llvm.expect.i64(i64 %102, i64 1)
  %104 = icmp ne i64 %103, 0
  br i1 %104, label %105, label %133

105:                                              ; preds = %94
  br label %106

106:                                              ; preds = %105
  %107 = load ptr, ptr %9, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.MDBX_env, ptr %107, i32 0, i32 39
  %109 = load ptr, ptr %108, align 8, !tbaa !30
  %110 = icmp ne ptr %109, null
  br i1 %110, label %119, label %111

111:                                              ; preds = %106
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.MDBX_env, ptr %112, i32 0, i32 24
  %114 = load ptr, ptr %113, align 8, !tbaa !26
  %115 = getelementptr inbounds %struct.MDBX_txn, ptr %114, i32 0, i32 5
  %116 = load ptr, ptr %115, align 8, !tbaa !31
  %117 = icmp ne ptr %116, null
  %118 = xor i1 %117, true
  br label %119

119:                                              ; preds = %111, %106
  %120 = phi i1 [ false, %106 ], [ %118, %111 ]
  %121 = xor i1 %120, true
  %122 = xor i1 %121, true
  %123 = xor i1 %122, true
  %124 = zext i1 %123 to i32
  %125 = sext i32 %124 to i64
  %126 = call i64 @llvm.expect.i64(i64 %125, i64 0)
  %127 = icmp ne i64 %126, 0
  br i1 %127, label %128, label %130

128:                                              ; preds = %119
  %129 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %129, ptr noundef @.str.17, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 956) #14
  unreachable

130:                                              ; preds = %119
  br label %131

131:                                              ; preds = %130
  br label %132

132:                                              ; preds = %131
  br label %133

133:                                              ; preds = %132, %94
  br label %134

134:                                              ; preds = %133
  br label %135

135:                                              ; preds = %134
  %136 = load ptr, ptr %9, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.MDBX_env, ptr %136, i32 0, i32 24
  %138 = load ptr, ptr %137, align 8, !tbaa !26
  %139 = getelementptr inbounds %struct.MDBX_txn, ptr %138, i32 0, i32 17
  %140 = getelementptr inbounds %struct.anon.20, ptr %139, i32 0, i32 0
  %141 = getelementptr inbounds %struct.troika, ptr %140, i32 0, i32 5
  %142 = load ptr, ptr %9, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.MDBX_env, ptr %142, i32 0, i32 24
  %144 = load ptr, ptr %143, align 8, !tbaa !26
  %145 = getelementptr inbounds %struct.MDBX_txn, ptr %144, i32 0, i32 17
  %146 = getelementptr inbounds %struct.anon.20, ptr %145, i32 0, i32 0
  %147 = getelementptr inbounds %struct.troika, ptr %146, i32 0, i32 1
  %148 = load i8, ptr %147, align 1, !tbaa !15
  %149 = zext i8 %148 to i64
  %150 = getelementptr inbounds [3 x i64], ptr %141, i64 0, i64 %149
  %151 = load i64, ptr %150, align 8, !tbaa !15
  %152 = load ptr, ptr %9, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.MDBX_env, ptr %152, i32 0, i32 24
  %154 = load ptr, ptr %153, align 8, !tbaa !26
  %155 = getelementptr inbounds %struct.MDBX_txn, ptr %154, i32 0, i32 7
  store i64 %151, ptr %155, align 8, !tbaa !35
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.MDBX_env, ptr %156, i32 0, i32 24
  %158 = load ptr, ptr %157, align 8, !tbaa !26
  %159 = call zeroext i1 @txn_gc_detent(ptr noundef %158)
  store i32 0, ptr %17, align 4
  br label %160

160:                                              ; preds = %135, %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #13
  %161 = load i32, ptr %17, align 4
  switch i32 %161, label %1796 [
    i32 0, label %162
  ]

162:                                              ; preds = %160
  br label %163

163:                                              ; preds = %162, %70
  %164 = load i64, ptr %15, align 8, !tbaa !9
  %165 = icmp sle i64 %164, 0
  br i1 %165, label %169, label %166

166:                                              ; preds = %163
  %167 = load i64, ptr %15, align 8, !tbaa !9
  %168 = icmp sge i64 %167, 2147483647
  br i1 %168, label %169, label %174

169:                                              ; preds = %166, %163
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.MDBX_env, ptr %170, i32 0, i32 2
  %172 = load i32, ptr %171, align 8, !tbaa !36
  %173 = zext i32 %172 to i64
  store i64 %173, ptr %15, align 8, !tbaa !9
  br label %174

174:                                              ; preds = %169, %166
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #13
  %175 = load ptr, ptr %9, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.MDBX_env, ptr %175, i32 0, i32 39
  %177 = load ptr, ptr %176, align 8, !tbaa !30
  %178 = icmp ne ptr %177, null
  br i1 %178, label %179, label %184

179:                                              ; preds = %174
  %180 = load ptr, ptr %9, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.MDBX_env, ptr %180, i32 0, i32 39
  %182 = load ptr, ptr %181, align 8, !tbaa !30
  %183 = getelementptr inbounds %struct.MDBX_txn, ptr %182, i32 0, i32 6
  br label %194

184:                                              ; preds = %174
  %185 = load ptr, ptr %9, align 8, !tbaa !5
  %186 = load ptr, ptr %9, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.MDBX_env, ptr %186, i32 0, i32 24
  %188 = load ptr, ptr %187, align 8, !tbaa !26
  %189 = getelementptr inbounds %struct.MDBX_txn, ptr %188, i32 0, i32 17
  %190 = getelementptr inbounds %struct.anon.20, ptr %189, i32 0, i32 0
  call void @meta_recent(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %23, ptr noundef %185, ptr noundef %190)
  %191 = getelementptr inbounds %struct.meta_ptr, ptr %23, i32 0, i32 1
  %192 = load ptr, ptr %191, align 8, !tbaa !15
  %193 = getelementptr inbounds %struct.meta, ptr %192, i32 0, i32 5
  br label %194

194:                                              ; preds = %184, %179
  %195 = phi ptr [ %183, %179 ], [ %193, %184 ]
  store ptr %195, ptr %22, align 8, !tbaa !5
  %196 = load i64, ptr %10, align 8, !tbaa !9
  %197 = icmp slt i64 %196, 0
  br i1 %197, label %198, label %205

198:                                              ; preds = %194
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = load ptr, ptr %22, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.geo, ptr %200, i32 0, i32 2
  %202 = load i32, ptr %201, align 4, !tbaa !37
  %203 = zext i32 %202 to i64
  %204 = call i64 @pgno2bytes(ptr noundef %199, i64 noundef %203) #15
  store i64 %204, ptr %10, align 8, !tbaa !9
  br label %205

205:                                              ; preds = %198, %194
  %206 = load i64, ptr %11, align 8, !tbaa !9
  %207 = icmp slt i64 %206, 0
  br i1 %207, label %208, label %215

208:                                              ; preds = %205
  %209 = load ptr, ptr %9, align 8, !tbaa !5
  %210 = load ptr, ptr %22, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.geo, ptr %210, i32 0, i32 4
  %212 = load i32, ptr %211, align 4, !tbaa !15
  %213 = zext i32 %212 to i64
  %214 = call i64 @pgno2bytes(ptr noundef %209, i64 noundef %213) #15
  store i64 %214, ptr %11, align 8, !tbaa !9
  br label %215

215:                                              ; preds = %208, %205
  %216 = load i64, ptr %12, align 8, !tbaa !9
  %217 = icmp slt i64 %216, 0
  br i1 %217, label %218, label %225

218:                                              ; preds = %215
  %219 = load ptr, ptr %9, align 8, !tbaa !5
  %220 = load ptr, ptr %22, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.geo, ptr %220, i32 0, i32 3
  %222 = load i32, ptr %221, align 4, !tbaa !38
  %223 = zext i32 %222 to i64
  %224 = call i64 @pgno2bytes(ptr noundef %219, i64 noundef %223) #15
  store i64 %224, ptr %12, align 8, !tbaa !9
  br label %225

225:                                              ; preds = %218, %215
  %226 = load i64, ptr %13, align 8, !tbaa !9
  %227 = icmp slt i64 %226, 0
  br i1 %227, label %228, label %236

228:                                              ; preds = %225
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = load ptr, ptr %22, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.geo, ptr %230, i32 0, i32 0
  %232 = load i16, ptr %231, align 4, !tbaa !39
  %233 = call i32 @pv2pages(i16 noundef zeroext %232) #16
  %234 = zext i32 %233 to i64
  %235 = call i64 @pgno2bytes(ptr noundef %229, i64 noundef %234) #15
  store i64 %235, ptr %13, align 8, !tbaa !9
  br label %236

236:                                              ; preds = %228, %225
  %237 = load i64, ptr %14, align 8, !tbaa !9
  %238 = icmp slt i64 %237, 0
  br i1 %238, label %239, label %247

239:                                              ; preds = %236
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = load ptr, ptr %22, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.geo, ptr %241, i32 0, i32 1
  %243 = load i16, ptr %242, align 2, !tbaa !40
  %244 = call i32 @pv2pages(i16 noundef zeroext %243) #16
  %245 = zext i32 %244 to i64
  %246 = call i64 @pgno2bytes(ptr noundef %240, i64 noundef %245) #15
  store i64 %246, ptr %14, align 8, !tbaa !9
  br label %247

247:                                              ; preds = %239, %236
  %248 = load i64, ptr %15, align 8, !tbaa !9
  %249 = load ptr, ptr %9, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.MDBX_env, ptr %249, i32 0, i32 2
  %251 = load i32, ptr %250, align 8, !tbaa !36
  %252 = zext i32 %251 to i64
  %253 = icmp ne i64 %248, %252
  br i1 %253, label %254, label %255

254:                                              ; preds = %247
  store i32 22, ptr %16, align 4, !tbaa !11
  store i32 6, ptr %17, align 4
  br label %276

255:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #13
  %256 = load ptr, ptr %9, align 8, !tbaa !5
  %257 = load ptr, ptr %9, align 8, !tbaa !5
  %258 = load ptr, ptr %22, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.geo, ptr %258, i32 0, i32 5
  %260 = load i32, ptr %259, align 4, !tbaa !15
  %261 = call i32 @mvcc_snapshot_largest(ptr noundef %257, i32 noundef %260)
  %262 = zext i32 %261 to i64
  %263 = call i64 @pgno2bytes(ptr noundef %256, i64 noundef %262) #15
  store i64 %263, ptr %24, align 8, !tbaa !9
  %264 = load i64, ptr %12, align 8, !tbaa !9
  %265 = load i64, ptr %24, align 8, !tbaa !9
  %266 = icmp ult i64 %264, %265
  br i1 %266, label %267, label %268

267:                                              ; preds = %255
  store i32 -30792, ptr %16, align 4, !tbaa !11
  store i32 6, ptr %17, align 4
  br label %275

268:                                              ; preds = %255
  %269 = load i64, ptr %11, align 8, !tbaa !9
  %270 = load i64, ptr %24, align 8, !tbaa !9
  %271 = icmp ult i64 %269, %270
  br i1 %271, label %272, label %274

272:                                              ; preds = %268
  %273 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %273, ptr %11, align 8, !tbaa !9
  br label %274

274:                                              ; preds = %272, %268
  store i32 0, ptr %17, align 4
  br label %275

275:                                              ; preds = %274, %267
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #13
  br label %276

276:                                              ; preds = %275, %254
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #13
  %277 = load i32, ptr %17, align 4
  switch i32 %277, label %1796 [
    i32 0, label %278
    i32 6, label %1788
  ]

278:                                              ; preds = %276
  br label %391

279:                                              ; preds = %48
  %280 = load ptr, ptr %9, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.MDBX_env, ptr %280, i32 0, i32 39
  %282 = load ptr, ptr %281, align 8, !tbaa !30
  %283 = icmp ne ptr %282, null
  %284 = xor i1 %283, true
  %285 = xor i1 %284, true
  %286 = zext i1 %285 to i32
  %287 = sext i32 %286 to i64
  %288 = call i64 @llvm.expect.i64(i64 %287, i64 0)
  %289 = icmp ne i64 %288, 0
  br i1 %289, label %290, label %292

290:                                              ; preds = %279
  %291 = call i32 @log_if_error(i32 noundef -30795, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 990)
  store i32 %291, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %1796

292:                                              ; preds = %279
  %293 = load i64, ptr %15, align 8, !tbaa !9
  %294 = icmp sge i64 %293, 2147483647
  br i1 %294, label %295, label %296

295:                                              ; preds = %292
  store i64 65536, ptr %15, align 8, !tbaa !9
  br label %390

296:                                              ; preds = %292
  %297 = load i64, ptr %15, align 8, !tbaa !9
  %298 = icmp sle i64 %297, 0
  br i1 %298, label %299, label %389

299:                                              ; preds = %296
  %300 = load i64, ptr %15, align 8, !tbaa !9
  %301 = icmp slt i64 %300, 0
  br i1 %301, label %302, label %339

302:                                              ; preds = %299
  %303 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %304 = zext i32 %303 to i64
  store i64 %304, ptr %15, align 8, !tbaa !9
  %305 = load i64, ptr %15, align 8, !tbaa !9
  %306 = icmp ugt i64 %305, 65536
  br i1 %306, label %307, label %308

307:                                              ; preds = %302
  store i64 65536, ptr %15, align 8, !tbaa !9
  br label %308

308:                                              ; preds = %307, %302
  br label %309

309:                                              ; preds = %308
  %310 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !28
  %311 = zext i8 %310 to i32
  %312 = and i32 %311, 1
  %313 = icmp ne i32 %312, 0
  %314 = xor i1 %313, true
  %315 = xor i1 %314, true
  %316 = zext i1 %315 to i32
  %317 = sext i32 %316 to i64
  %318 = call i64 @llvm.expect.i64(i64 %317, i64 1)
  %319 = icmp ne i64 %318, 0
  br i1 %319, label %320, label %336

320:                                              ; preds = %309
  br label %321

321:                                              ; preds = %320
  %322 = load i64, ptr %15, align 8, !tbaa !9
  %323 = icmp uge i64 %322, 256
  %324 = xor i1 %323, true
  %325 = xor i1 %324, true
  %326 = xor i1 %325, true
  %327 = zext i1 %326 to i32
  %328 = sext i32 %327 to i64
  %329 = call i64 @llvm.expect.i64(i64 %328, i64 0)
  %330 = icmp ne i64 %329, 0
  br i1 %330, label %331, label %333

331:                                              ; preds = %321
  %332 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %332, ptr noundef @.str.18, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1000) #14
  unreachable

333:                                              ; preds = %321
  br label %334

334:                                              ; preds = %333
  br label %335

335:                                              ; preds = %334
  br label %336

336:                                              ; preds = %335, %309
  br label %337

337:                                              ; preds = %336
  br label %338

338:                                              ; preds = %337
  br label %344

339:                                              ; preds = %299
  %340 = load i64, ptr %15, align 8, !tbaa !9
  %341 = icmp eq i64 %340, 0
  br i1 %341, label %342, label %343

342:                                              ; preds = %339
  store i64 256, ptr %15, align 8, !tbaa !9
  br label %343

343:                                              ; preds = %342, %339
  br label %344

344:                                              ; preds = %343, %338
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #13
  %345 = load i64, ptr %11, align 8, !tbaa !9
  %346 = load i64, ptr %10, align 8, !tbaa !9
  %347 = icmp sgt i64 %345, %346
  br i1 %347, label %348, label %350

348:                                              ; preds = %344
  %349 = load i64, ptr %11, align 8, !tbaa !9
  br label %352

350:                                              ; preds = %344
  %351 = load i64, ptr %10, align 8, !tbaa !9
  br label %352

352:                                              ; preds = %350, %348
  %353 = phi i64 [ %349, %348 ], [ %351, %350 ]
  store i64 %353, ptr %25, align 8, !tbaa !9
  %354 = load i64, ptr %12, align 8, !tbaa !9
  %355 = load i64, ptr %25, align 8, !tbaa !9
  %356 = icmp sgt i64 %354, %355
  br i1 %356, label %357, label %359

357:                                              ; preds = %352
  %358 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %358, ptr %25, align 8, !tbaa !9
  br label %359

359:                                              ; preds = %357, %352
  %360 = load i64, ptr %25, align 8, !tbaa !9
  %361 = icmp slt i64 %360, 0
  br i1 %361, label %362, label %364

362:                                              ; preds = %359
  %363 = call i64 @reasonable_db_maxsize() #17
  store i64 %363, ptr %25, align 8, !tbaa !9
  br label %374

364:                                              ; preds = %359
  %365 = load i64, ptr %25, align 8, !tbaa !9
  %366 = icmp eq i64 %365, 0
  br i1 %366, label %367, label %368

367:                                              ; preds = %364
  store i64 768, ptr %25, align 8, !tbaa !9
  br label %373

368:                                              ; preds = %364
  %369 = load i64, ptr %25, align 8, !tbaa !9
  %370 = icmp sge i64 %369, 140737488355328
  br i1 %370, label %371, label %372

371:                                              ; preds = %368
  store i64 140737488355328, ptr %25, align 8, !tbaa !9
  br label %372

372:                                              ; preds = %371, %368
  br label %373

373:                                              ; preds = %372, %367
  br label %374

374:                                              ; preds = %373, %362
  br label %375

375:                                              ; preds = %385, %374
  %376 = load i64, ptr %25, align 8, !tbaa !9
  %377 = load i64, ptr %15, align 8, !tbaa !9
  %378 = mul nsw i64 %377, 2147483648
  %379 = icmp sgt i64 %376, %378
  br i1 %379, label %380, label %383

380:                                              ; preds = %375
  %381 = load i64, ptr %15, align 8, !tbaa !9
  %382 = icmp slt i64 %381, 65536
  br label %383

383:                                              ; preds = %380, %375
  %384 = phi i1 [ false, %375 ], [ %382, %380 ]
  br i1 %384, label %385, label %388

385:                                              ; preds = %383
  %386 = load i64, ptr %15, align 8, !tbaa !9
  %387 = shl i64 %386, 1
  store i64 %387, ptr %15, align 8, !tbaa !9
  br label %375, !llvm.loop !42

388:                                              ; preds = %383
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #13
  br label %389

389:                                              ; preds = %388, %296
  br label %390

390:                                              ; preds = %389, %295
  br label %391

391:                                              ; preds = %390, %278
  %392 = load i64, ptr %15, align 8, !tbaa !9
  %393 = icmp slt i64 %392, 256
  br i1 %393, label %400, label %394

394:                                              ; preds = %391
  %395 = load i64, ptr %15, align 8, !tbaa !9
  %396 = icmp sgt i64 %395, 65536
  br i1 %396, label %400, label %397

397:                                              ; preds = %394
  %398 = load i64, ptr %15, align 8, !tbaa !9
  %399 = call zeroext i1 @is_powerof2(i64 noundef %398) #16
  br i1 %399, label %401, label %400

400:                                              ; preds = %397, %394, %391
  store i32 22, ptr %16, align 4, !tbaa !11
  br label %1788

401:                                              ; preds = %397
  %402 = load i64, ptr %10, align 8, !tbaa !9
  %403 = icmp slt i64 %402, 0
  %404 = zext i1 %403 to i8
  store i8 %404, ptr %26, align 1, !tbaa !13
  %405 = load i64, ptr %10, align 8, !tbaa !9
  %406 = icmp sle i64 %405, 0
  br i1 %406, label %407, label %424

407:                                              ; preds = %401
  %408 = load i64, ptr %10, align 8, !tbaa !9
  %409 = icmp eq i64 %408, 0
  br i1 %409, label %410, label %411

410:                                              ; preds = %407
  br label %414

411:                                              ; preds = %407
  %412 = load i64, ptr %15, align 8, !tbaa !9
  %413 = mul nsw i64 %412, 64
  br label %414

414:                                              ; preds = %411, %410
  %415 = phi i64 [ 768, %410 ], [ %413, %411 ]
  store i64 %415, ptr %10, align 8, !tbaa !9
  %416 = load i64, ptr %10, align 8, !tbaa !9
  %417 = load i64, ptr %15, align 8, !tbaa !9
  %418 = sdiv i64 %416, %417
  %419 = icmp slt i64 %418, 3
  br i1 %419, label %420, label %423

420:                                              ; preds = %414
  %421 = load i64, ptr %15, align 8, !tbaa !9
  %422 = mul nsw i64 3, %421
  store i64 %422, ptr %10, align 8, !tbaa !9
  br label %423

423:                                              ; preds = %420, %414
  br label %424

424:                                              ; preds = %423, %401
  %425 = load i64, ptr %10, align 8, !tbaa !9
  %426 = icmp sge i64 %425, 9223372036854775807
  br i1 %426, label %427, label %437

427:                                              ; preds = %424
  %428 = call i64 @reasonable_db_maxsize() #17
  store i64 %428, ptr %10, align 8, !tbaa !9
  %429 = load i64, ptr %10, align 8, !tbaa !9
  %430 = load i64, ptr %15, align 8, !tbaa !9
  %431 = udiv i64 %429, %430
  %432 = icmp ugt i64 %431, 2147483648
  br i1 %432, label %433, label %436

433:                                              ; preds = %427
  %434 = load i64, ptr %15, align 8, !tbaa !9
  %435 = mul nsw i64 %434, 2147483648
  store i64 %435, ptr %10, align 8, !tbaa !9
  br label %436

436:                                              ; preds = %433, %427
  br label %437

437:                                              ; preds = %436, %424
  %438 = load i64, ptr %11, align 8, !tbaa !9
  %439 = icmp sge i64 %438, 9223372036854775807
  br i1 %439, label %440, label %450

440:                                              ; preds = %437
  %441 = call i64 @reasonable_db_maxsize() #17
  store i64 %441, ptr %11, align 8, !tbaa !9
  %442 = load i64, ptr %11, align 8, !tbaa !9
  %443 = load i64, ptr %15, align 8, !tbaa !9
  %444 = udiv i64 %442, %443
  %445 = icmp ugt i64 %444, 2147483648
  br i1 %445, label %446, label %449

446:                                              ; preds = %440
  %447 = load i64, ptr %15, align 8, !tbaa !9
  %448 = mul nsw i64 %447, 2147483648
  store i64 %448, ptr %11, align 8, !tbaa !9
  br label %449

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

450:                                              ; preds = %449, %437
  %451 = load i64, ptr %12, align 8, !tbaa !9
  %452 = icmp sle i64 %451, 0
  br i1 %452, label %453, label %512

453:                                              ; preds = %450
  %454 = load i64, ptr %13, align 8, !tbaa !9
  %455 = icmp eq i64 %454, 0
  br i1 %455, label %459, label %456

456:                                              ; preds = %453
  %457 = load i64, ptr %12, align 8, !tbaa !9
  %458 = icmp eq i64 %457, 0
  br i1 %458, label %459, label %465

459:                                              ; preds = %456, %453
  %460 = load i64, ptr %11, align 8, !tbaa !9
  %461 = load i64, ptr %10, align 8, !tbaa !9
  %462 = icmp sge i64 %460, %461
  br i1 %462, label %463, label %465

463:                                              ; preds = %459
  %464 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %464, ptr %12, align 8, !tbaa !9
  br label %503

465:                                              ; preds = %459, %456
  %466 = load i64, ptr %11, align 8, !tbaa !9
  %467 = icmp sle i64 %466, 0
  br i1 %467, label %473, label %468

468:                                              ; preds = %465
  %469 = load i64, ptr %11, align 8, !tbaa !9
  %470 = call i64 @reasonable_db_maxsize() #17
  %471 = sdiv i64 %470, 2
  %472 = icmp sge i64 %469, %471
  br i1 %472, label %473, label %475

473:                                              ; preds = %468, %465
  %474 = call i64 @reasonable_db_maxsize() #17
  store i64 %474, ptr %12, align 8, !tbaa !9
  br label %502

475:                                              ; preds = %468
  %476 = load i64, ptr %11, align 8, !tbaa !9
  %477 = icmp uge i64 %476, 1065353216
  br i1 %477, label %478, label %482

478:                                              ; preds = %475
  %479 = load i64, ptr %11, align 8, !tbaa !9
  %480 = icmp ule i64 %479, 1598029824
  br i1 %480, label %481, label %482

481:                                              ; preds = %478
  store i64 2130706432, ptr %12, align 8, !tbaa !9
  br label %501

482:                                              ; preds = %478, %475
  %483 = load i64, ptr %11, align 8, !tbaa !9
  %484 = icmp ult i64 %483, 35184372088832
  br i1 %484, label %485, label %489

485:                                              ; preds = %482
  %486 = load i64, ptr %11, align 8, !tbaa !9
  %487 = load i64, ptr %11, align 8, !tbaa !9
  %488 = add nsw i64 %486, %487
  br label %494

489:                                              ; preds = %482
  %490 = load i64, ptr %11, align 8, !tbaa !9
  %491 = load i64, ptr %11, align 8, !tbaa !9
  %492 = sdiv i64 %491, 2
  %493 = add nsw i64 %490, %492
  br label %494

494:                                              ; preds = %489, %485
  %495 = phi i64 [ %488, %485 ], [ %493, %489 ]
  %496 = call i64 @ceil_powerof2(i64 noundef %495, i64 noundef 134217728) #16
  store i64 %496, ptr %12, align 8, !tbaa !9
  %497 = load i64, ptr %12, align 8, !tbaa !9
  %498 = icmp ugt i64 %497, 140737488355328
  br i1 %498, label %499, label %500

499:                                              ; preds = %494
  store i64 140737488355328, ptr %12, align 8, !tbaa !9
  br label %500

500:                                              ; preds = %499, %494
  br label %501

501:                                              ; preds = %500, %481
  br label %502

502:                                              ; preds = %501, %473
  br label %503

503:                                              ; preds = %502, %463
  %504 = load i64, ptr %12, align 8, !tbaa !9
  %505 = load i64, ptr %15, align 8, !tbaa !9
  %506 = udiv i64 %504, %505
  %507 = icmp ugt i64 %506, 2147483648
  br i1 %507, label %508, label %511

508:                                              ; preds = %503
  %509 = load i64, ptr %15, align 8, !tbaa !9
  %510 = mul nsw i64 %509, 2147483648
  store i64 %510, ptr %12, align 8, !tbaa !9
  br label %511

511:                                              ; preds = %508, %503
  br label %526

512:                                              ; preds = %450
  %513 = load i64, ptr %12, align 8, !tbaa !9
  %514 = icmp sge i64 %513, 9223372036854775807
  br i1 %514, label %515, label %525

515:                                              ; preds = %512
  %516 = call i64 @reasonable_db_maxsize() #17
  store i64 %516, ptr %12, align 8, !tbaa !9
  %517 = load i64, ptr %12, align 8, !tbaa !9
  %518 = load i64, ptr %15, align 8, !tbaa !9
  %519 = udiv i64 %517, %518
  %520 = icmp ugt i64 %519, 2147483648
  br i1 %520, label %521, label %524

521:                                              ; preds = %515
  %522 = load i64, ptr %15, align 8, !tbaa !9
  %523 = mul nsw i64 %522, 2147483648
  store i64 %523, ptr %12, align 8, !tbaa !9
  br label %524

524:                                              ; preds = %521, %515
  br label %525

525:                                              ; preds = %524, %512
  br label %526

526:                                              ; preds = %525, %511
  %527 = load i64, ptr %10, align 8, !tbaa !9
  %528 = icmp slt i64 %527, 768
  br i1 %528, label %533, label %529

529:                                              ; preds = %526
  %530 = load i64, ptr %10, align 8, !tbaa !9
  %531 = load i64, ptr %12, align 8, !tbaa !9
  %532 = icmp sgt i64 %530, %531
  br label %533

533:                                              ; preds = %529, %526
  %534 = phi i1 [ true, %526 ], [ %532, %529 ]
  %535 = xor i1 %534, true
  %536 = xor i1 %535, true
  %537 = zext i1 %536 to i32
  %538 = sext i32 %537 to i64
  %539 = call i64 @llvm.expect.i64(i64 %538, i64 0)
  %540 = icmp ne i64 %539, 0
  br i1 %540, label %541, label %542

541:                                              ; preds = %533
  store i32 22, ptr %16, align 4, !tbaa !11
  br label %1788

542:                                              ; preds = %533
  %543 = load i64, ptr %11, align 8, !tbaa !9
  %544 = icmp sle i64 %543, 0
  br i1 %544, label %545, label %557

545:                                              ; preds = %542
  %546 = load i64, ptr %10, align 8, !tbaa !9
  store i64 %546, ptr %11, align 8, !tbaa !9
  %547 = load i64, ptr %12, align 8, !tbaa !9
  %548 = load i64, ptr %10, align 8, !tbaa !9
  %549 = icmp sge i64 %547, %548
  br i1 %549, label %550, label %556

550:                                              ; preds = %545
  %551 = load i64, ptr %11, align 8, !tbaa !9
  %552 = load i64, ptr %12, align 8, !tbaa !9
  %553 = icmp sgt i64 %551, %552
  br i1 %553, label %554, label %556

554:                                              ; preds = %550
  %555 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %555, ptr %11, align 8, !tbaa !9
  br label %556

556:                                              ; preds = %554, %550, %545
  br label %557

557:                                              ; preds = %556, %542
  %558 = load i64, ptr %10, align 8, !tbaa !9
  %559 = load i64, ptr %15, align 8, !tbaa !9
  %560 = udiv i64 %558, %559
  %561 = icmp ult i64 %560, 3
  br i1 %561, label %562, label %582

562:                                              ; preds = %557
  %563 = load i64, ptr %15, align 8, !tbaa !9
  %564 = mul nsw i64 %563, 3
  store i64 %564, ptr %10, align 8, !tbaa !9
  %565 = load i64, ptr %10, align 8, !tbaa !9
  %566 = load i64, ptr %12, align 8, !tbaa !9
  %567 = icmp sgt i64 %565, %566
  %568 = xor i1 %567, true
  %569 = xor i1 %568, true
  %570 = zext i1 %569 to i32
  %571 = sext i32 %570 to i64
  %572 = call i64 @llvm.expect.i64(i64 %571, i64 0)
  %573 = icmp ne i64 %572, 0
  br i1 %573, label %574, label %575

574:                                              ; preds = %562
  store i32 22, ptr %16, align 4, !tbaa !11
  br label %1788

575:                                              ; preds = %562
  %576 = load i64, ptr %11, align 8, !tbaa !9
  %577 = load i64, ptr %10, align 8, !tbaa !9
  %578 = icmp slt i64 %576, %577
  br i1 %578, label %579, label %581

579:                                              ; preds = %575
  %580 = load i64, ptr %10, align 8, !tbaa !9
  store i64 %580, ptr %11, align 8, !tbaa !9
  br label %581

581:                                              ; preds = %579, %575
  br label %582

582:                                              ; preds = %581, %557
  %583 = load i64, ptr %12, align 8, !tbaa !9
  %584 = icmp ugt i64 %583, 140737488355328
  br i1 %584, label %590, label %585

585:                                              ; preds = %582
  %586 = load i64, ptr %12, align 8, !tbaa !9
  %587 = load i64, ptr %15, align 8, !tbaa !9
  %588 = udiv i64 %586, %587
  %589 = icmp ugt i64 %588, 2147483648
  br label %590

590:                                              ; preds = %585, %582
  %591 = phi i1 [ true, %582 ], [ %589, %585 ]
  %592 = xor i1 %591, true
  %593 = xor i1 %592, true
  %594 = zext i1 %593 to i32
  %595 = sext i32 %594 to i64
  %596 = call i64 @llvm.expect.i64(i64 %595, i64 0)
  %597 = icmp ne i64 %596, 0
  br i1 %597, label %598, label %599

598:                                              ; preds = %590
  store i32 -30417, ptr %16, align 4, !tbaa !11
  br label %1788

599:                                              ; preds = %590
  %600 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %601 = zext i32 %600 to i64
  %602 = load i64, ptr %15, align 8, !tbaa !9
  %603 = icmp ugt i64 %601, %602
  br i1 %603, label %604, label %607

604:                                              ; preds = %599
  %605 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %606 = zext i32 %605 to i64
  br label %609

607:                                              ; preds = %599
  %608 = load i64, ptr %15, align 8, !tbaa !9
  br label %609

609:                                              ; preds = %607, %604
  %610 = phi i64 [ %606, %604 ], [ %608, %607 ]
  store i64 %610, ptr %27, align 8, !tbaa !9
  %611 = load i64, ptr %10, align 8, !tbaa !9
  %612 = load i64, ptr %27, align 8, !tbaa !9
  %613 = call i64 @ceil_powerof2(i64 noundef %611, i64 noundef %612) #16
  store i64 %613, ptr %10, align 8, !tbaa !9
  %614 = load i64, ptr %12, align 8, !tbaa !9
  %615 = load i64, ptr %27, align 8, !tbaa !9
  %616 = call i64 @ceil_powerof2(i64 noundef %614, i64 noundef %615) #16
  store i64 %616, ptr %12, align 8, !tbaa !9
  %617 = load i64, ptr %11, align 8, !tbaa !9
  %618 = load i64, ptr %27, align 8, !tbaa !9
  %619 = call i64 @ceil_powerof2(i64 noundef %617, i64 noundef %618) #16
  store i64 %619, ptr %11, align 8, !tbaa !9
  br label %620

620:                                              ; preds = %656, %609
  %621 = load i64, ptr %12, align 8, !tbaa !9
  %622 = icmp ugt i64 %621, 140737488355328
  br i1 %622, label %628, label %623

623:                                              ; preds = %620
  %624 = load i64, ptr %12, align 8, !tbaa !9
  %625 = load i64, ptr %15, align 8, !tbaa !9
  %626 = udiv i64 %624, %625
  %627 = icmp ugt i64 %626, 2147483648
  br label %628

628:                                              ; preds = %623, %620
  %629 = phi i1 [ true, %620 ], [ %627, %623 ]
  %630 = xor i1 %629, true
  %631 = xor i1 %630, true
  %632 = zext i1 %631 to i32
  %633 = sext i32 %632 to i64
  %634 = call i64 @llvm.expect.i64(i64 %633, i64 0)
  %635 = icmp ne i64 %634, 0
  br i1 %635, label %636, label %657

636:                                              ; preds = %628
  %637 = load i64, ptr %12, align 8, !tbaa !9
  %638 = load i64, ptr %27, align 8, !tbaa !9
  %639 = add i64 %638, 768
  %640 = icmp ult i64 %637, %639
  br i1 %640, label %646, label %641

641:                                              ; preds = %636
  %642 = load i64, ptr %12, align 8, !tbaa !9
  %643 = load i64, ptr %15, align 8, !tbaa !9
  %644 = mul i64 %643, 4
  %645 = icmp ult i64 %642, %644
  br i1 %645, label %646, label %647

646:                                              ; preds = %641, %636
  store i32 22, ptr %16, align 4, !tbaa !11
  br label %1788

647:                                              ; preds = %641
  %648 = load i64, ptr %27, align 8, !tbaa !9
  %649 = load i64, ptr %12, align 8, !tbaa !9
  %650 = sub i64 %649, %648
  store i64 %650, ptr %12, align 8, !tbaa !9
  %651 = load i64, ptr %12, align 8, !tbaa !9
  %652 = load i64, ptr %10, align 8, !tbaa !9
  %653 = icmp ult i64 %651, %652
  br i1 %653, label %654, label %656

654:                                              ; preds = %647
  %655 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %655, ptr %10, align 8, !tbaa !9
  br label %656

656:                                              ; preds = %654, %647
  br label %620, !llvm.loop !44

657:                                              ; preds = %628
  br label %658

658:                                              ; preds = %657
  %659 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !28
  %660 = zext i8 %659 to i32
  %661 = and i32 %660, 1
  %662 = icmp ne i32 %661, 0
  %663 = xor i1 %662, true
  %664 = xor i1 %663, true
  %665 = zext i1 %664 to i32
  %666 = sext i32 %665 to i64
  %667 = call i64 @llvm.expect.i64(i64 %666, i64 1)
  %668 = icmp ne i64 %667, 0
  br i1 %668, label %669, label %690

669:                                              ; preds = %658
  br label %670

670:                                              ; preds = %669
  %671 = load i64, ptr %12, align 8, !tbaa !9
  %672 = load i64, ptr %10, align 8, !tbaa !9
  %673 = sub nsw i64 %671, %672
  %674 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %675 = zext i32 %674 to i64
  %676 = srem i64 %673, %675
  %677 = icmp eq i64 %676, 0
  %678 = xor i1 %677, true
  %679 = xor i1 %678, true
  %680 = xor i1 %679, true
  %681 = zext i1 %680 to i32
  %682 = sext i32 %681 to i64
  %683 = call i64 @llvm.expect.i64(i64 %682, i64 0)
  %684 = icmp ne i64 %683, 0
  br i1 %684, label %685, label %687

685:                                              ; preds = %670
  %686 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %686, ptr noundef @.str.19, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1110) #14
  unreachable

687:                                              ; preds = %670
  br label %688

688:                                              ; preds = %687
  br label %689

689:                                              ; preds = %688
  br label %690

690:                                              ; preds = %689, %658
  br label %691

691:                                              ; preds = %690
  br label %692

692:                                              ; preds = %691
  %693 = load i64, ptr %11, align 8, !tbaa !9
  %694 = load i64, ptr %10, align 8, !tbaa !9
  %695 = icmp slt i64 %693, %694
  br i1 %695, label %696, label %698

696:                                              ; preds = %692
  %697 = load i64, ptr %10, align 8, !tbaa !9
  store i64 %697, ptr %11, align 8, !tbaa !9
  br label %698

698:                                              ; preds = %696, %692
  %699 = load i64, ptr %11, align 8, !tbaa !9
  %700 = load i64, ptr %12, align 8, !tbaa !9
  %701 = icmp sgt i64 %699, %700
  br i1 %701, label %702, label %704

702:                                              ; preds = %698
  %703 = load i64, ptr %12, align 8, !tbaa !9
  store i64 %703, ptr %11, align 8, !tbaa !9
  br label %704

704:                                              ; preds = %702, %698
  %705 = load i64, ptr %13, align 8, !tbaa !9
  %706 = icmp slt i64 %705, 0
  br i1 %706, label %707, label %753

707:                                              ; preds = %704
  %708 = load i64, ptr %12, align 8, !tbaa !9
  %709 = load i64, ptr %10, align 8, !tbaa !9
  %710 = sub nsw i64 %708, %709
  %711 = udiv i64 %710, 42
  store i64 %711, ptr %13, align 8, !tbaa !9
  %712 = load i8, ptr %26, align 1, !tbaa !13, !range !45, !noundef !46
  %713 = trunc i8 %712 to i1
  br i1 %713, label %723, label %714

714:                                              ; preds = %707
  %715 = load i64, ptr %13, align 8, !tbaa !9
  %716 = load i64, ptr %10, align 8, !tbaa !9
  %717 = icmp sgt i64 %715, %716
  br i1 %717, label %718, label %723

718:                                              ; preds = %714
  %719 = load i64, ptr %10, align 8, !tbaa !9
  %720 = icmp slt i64 %719, 1048576
  br i1 %720, label %721, label %723

721:                                              ; preds = %718
  %722 = load i64, ptr %10, align 8, !tbaa !9
  store i64 %722, ptr %13, align 8, !tbaa !9
  br label %732

723:                                              ; preds = %718, %714, %707
  %724 = load i64, ptr %13, align 8, !tbaa !9
  %725 = load i64, ptr %10, align 8, !tbaa !9
  %726 = sdiv i64 %724, %725
  %727 = icmp sgt i64 %726, 64
  br i1 %727, label %728, label %731

728:                                              ; preds = %723
  %729 = load i64, ptr %10, align 8, !tbaa !9
  %730 = shl i64 %729, 6
  store i64 %730, ptr %13, align 8, !tbaa !9
  br label %731

731:                                              ; preds = %728, %723
  br label %732

732:                                              ; preds = %731, %721
  %733 = load i64, ptr %13, align 8, !tbaa !9
  %734 = icmp slt i64 %733, 65536
  br i1 %734, label %735, label %736

735:                                              ; preds = %732
  store i64 65536, ptr %13, align 8, !tbaa !9
  br label %736

736:                                              ; preds = %735, %732
  %737 = load i64, ptr %12, align 8, !tbaa !9
  %738 = load i64, ptr %10, align 8, !tbaa !9
  %739 = sub nsw i64 %737, %738
  %740 = load i64, ptr %13, align 8, !tbaa !9
  %741 = sdiv i64 %739, %740
  %742 = icmp sgt i64 %741, 65536
  br i1 %742, label %743, label %748

743:                                              ; preds = %736
  %744 = load i64, ptr %12, align 8, !tbaa !9
  %745 = load i64, ptr %10, align 8, !tbaa !9
  %746 = sub nsw i64 %744, %745
  %747 = ashr i64 %746, 16
  store i64 %747, ptr %13, align 8, !tbaa !9
  br label %748

748:                                              ; preds = %743, %736
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #13
  store i64 4294967296, ptr %28, align 8, !tbaa !9
  %749 = load i64, ptr %13, align 8, !tbaa !9
  %750 = icmp sgt i64 %749, 4294967296
  br i1 %750, label %751, label %752

751:                                              ; preds = %748
  store i64 4294967296, ptr %13, align 8, !tbaa !9
  br label %752

752:                                              ; preds = %751, %748
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #13
  br label %753

753:                                              ; preds = %752, %704
  %754 = load i64, ptr %13, align 8, !tbaa !9
  %755 = icmp eq i64 %754, 0
  br i1 %755, label %756, label %760

756:                                              ; preds = %753
  %757 = load i64, ptr %14, align 8, !tbaa !9
  %758 = icmp sgt i64 %757, 0
  br i1 %758, label %759, label %760

759:                                              ; preds = %756
  store i64 1, ptr %13, align 8, !tbaa !9
  br label %760

760:                                              ; preds = %759, %756, %753
  %761 = load i64, ptr %13, align 8, !tbaa !9
  %762 = load i64, ptr %27, align 8, !tbaa !9
  %763 = call i64 @ceil_powerof2(i64 noundef %761, i64 noundef %762) #16
  store i64 %763, ptr %13, align 8, !tbaa !9
  %764 = load i64, ptr %14, align 8, !tbaa !9
  %765 = icmp slt i64 %764, 0
  br i1 %765, label %766, label %770

766:                                              ; preds = %760
  %767 = load i64, ptr %13, align 8, !tbaa !9
  %768 = load i64, ptr %13, align 8, !tbaa !9
  %769 = add nsw i64 %767, %768
  store i64 %769, ptr %14, align 8, !tbaa !9
  br label %770

770:                                              ; preds = %766, %760
  %771 = load i64, ptr %14, align 8, !tbaa !9
  %772 = load i64, ptr %27, align 8, !tbaa !9
  %773 = call i64 @ceil_powerof2(i64 noundef %771, i64 noundef %772) #16
  store i64 %773, ptr %14, align 8, !tbaa !9
  %774 = load ptr, ptr %9, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.MDBX_env, ptr %774, i32 0, i32 3
  %776 = getelementptr inbounds %struct.osal_mmap, ptr %775, i32 0, i32 0
  %777 = load ptr, ptr %776, align 8, !tbaa !15
  %778 = icmp ne ptr %777, null
  br i1 %778, label %1167, label %779

779:                                              ; preds = %770
  %780 = load i64, ptr %15, align 8, !tbaa !9
  %781 = load ptr, ptr %9, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.MDBX_env, ptr %781, i32 0, i32 2
  %783 = load i32, ptr %782, align 8, !tbaa !36
  %784 = zext i32 %783 to i64
  %785 = icmp ne i64 %780, %784
  br i1 %785, label %786, label %790

786:                                              ; preds = %779
  %787 = load ptr, ptr %9, align 8, !tbaa !5
  %788 = load i64, ptr %15, align 8, !tbaa !9
  %789 = call i32 @env_setup_pagesize(ptr noundef %787, i64 noundef %788)
  br label %790

790:                                              ; preds = %786, %779
  %791 = load i64, ptr %10, align 8, !tbaa !9
  %792 = load ptr, ptr %9, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.MDBX_env, ptr %792, i32 0, i32 35
  %794 = getelementptr inbounds %struct.anon.6, ptr %793, i32 0, i32 0
  store i64 %791, ptr %794, align 8, !tbaa !47
  %795 = load i64, ptr %11, align 8, !tbaa !9
  %796 = load ptr, ptr %9, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.MDBX_env, ptr %796, i32 0, i32 35
  %798 = getelementptr inbounds %struct.anon.6, ptr %797, i32 0, i32 2
  store i64 %795, ptr %798, align 8, !tbaa !48
  %799 = load i64, ptr %12, align 8, !tbaa !9
  %800 = load ptr, ptr %9, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.MDBX_env, ptr %800, i32 0, i32 35
  %802 = getelementptr inbounds %struct.anon.6, ptr %801, i32 0, i32 1
  store i64 %799, ptr %802, align 8, !tbaa !49
  %803 = load ptr, ptr %9, align 8, !tbaa !5
  %804 = load ptr, ptr %9, align 8, !tbaa !5
  %805 = load i64, ptr %13, align 8, !tbaa !9
  %806 = call i32 @bytes2pgno(ptr noundef %804, i64 noundef %805) #15
  %807 = zext i32 %806 to i64
  %808 = call zeroext i16 @pages2pv(i64 noundef %807) #16
  %809 = call i32 @pv2pages(i16 noundef zeroext %808) #16
  %810 = zext i32 %809 to i64
  %811 = call i64 @pgno2bytes(ptr noundef %803, i64 noundef %810) #15
  %812 = load ptr, ptr %9, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.MDBX_env, ptr %812, i32 0, i32 35
  %814 = getelementptr inbounds %struct.anon.6, ptr %813, i32 0, i32 3
  store i64 %811, ptr %814, align 8, !tbaa !50
  %815 = load ptr, ptr %9, align 8, !tbaa !5
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  %817 = load i64, ptr %14, align 8, !tbaa !9
  %818 = call i32 @bytes2pgno(ptr noundef %816, i64 noundef %817) #15
  %819 = zext i32 %818 to i64
  %820 = call zeroext i16 @pages2pv(i64 noundef %819) #16
  %821 = call i32 @pv2pages(i16 noundef zeroext %820) #16
  %822 = zext i32 %821 to i64
  %823 = call i64 @pgno2bytes(ptr noundef %815, i64 noundef %822) #15
  %824 = load ptr, ptr %9, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.MDBX_env, ptr %824, i32 0, i32 35
  %826 = getelementptr inbounds %struct.anon.6, ptr %825, i32 0, i32 4
  store i64 %823, ptr %826, align 8, !tbaa !51
  %827 = load ptr, ptr %9, align 8, !tbaa !5
  call void @env_options_adjust_defaults(ptr noundef %827)
  br label %828

828:                                              ; preds = %790
  %829 = load ptr, ptr %9, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.MDBX_env, ptr %829, i32 0, i32 35
  %831 = getelementptr inbounds %struct.anon.6, ptr %830, i32 0, i32 0
  %832 = load i64, ptr %831, align 8, !tbaa !47
  %833 = icmp uge i64 %832, 768
  %834 = xor i1 %833, true
  %835 = xor i1 %834, true
  %836 = xor i1 %835, true
  %837 = zext i1 %836 to i32
  %838 = sext i32 %837 to i64
  %839 = call i64 @llvm.expect.i64(i64 %838, i64 0)
  %840 = icmp ne i64 %839, 0
  br i1 %840, label %841, label %843

841:                                              ; preds = %828
  %842 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %842, ptr noundef @.str.20, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1152) #14
  unreachable

843:                                              ; preds = %828
  br label %844

844:                                              ; preds = %843
  br label %845

845:                                              ; preds = %844
  br label %846

846:                                              ; preds = %845
  %847 = load ptr, ptr %9, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.MDBX_env, ptr %847, i32 0, i32 35
  %849 = getelementptr inbounds %struct.anon.6, ptr %848, i32 0, i32 0
  %850 = load i64, ptr %849, align 8, !tbaa !47
  %851 = load i64, ptr %15, align 8, !tbaa !9
  %852 = trunc i64 %851 to i32
  %853 = zext i32 %852 to i64
  %854 = udiv i64 %850, %853
  %855 = icmp uge i64 %854, 3
  %856 = xor i1 %855, true
  %857 = xor i1 %856, true
  %858 = xor i1 %857, true
  %859 = zext i1 %858 to i32
  %860 = sext i32 %859 to i64
  %861 = call i64 @llvm.expect.i64(i64 %860, i64 0)
  %862 = icmp ne i64 %861, 0
  br i1 %862, label %863, label %865

863:                                              ; preds = %846
  %864 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %864, ptr noundef @.str.21, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1153) #14
  unreachable

865:                                              ; preds = %846
  br label %866

866:                                              ; preds = %865
  br label %867

867:                                              ; preds = %866
  br label %868

868:                                              ; preds = %867
  %869 = load ptr, ptr %9, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.MDBX_env, ptr %869, i32 0, i32 35
  %871 = getelementptr inbounds %struct.anon.6, ptr %870, i32 0, i32 0
  %872 = load i64, ptr %871, align 8, !tbaa !47
  %873 = load i64, ptr %15, align 8, !tbaa !9
  %874 = trunc i64 %873 to i32
  %875 = zext i32 %874 to i64
  %876 = urem i64 %872, %875
  %877 = icmp eq i64 %876, 0
  %878 = xor i1 %877, true
  %879 = xor i1 %878, true
  %880 = xor i1 %879, true
  %881 = zext i1 %880 to i32
  %882 = sext i32 %881 to i64
  %883 = call i64 @llvm.expect.i64(i64 %882, i64 0)
  %884 = icmp ne i64 %883, 0
  br i1 %884, label %885, label %887

885:                                              ; preds = %868
  %886 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %886, ptr noundef @.str.22, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1154) #14
  unreachable

887:                                              ; preds = %868
  br label %888

888:                                              ; preds = %887
  br label %889

889:                                              ; preds = %888
  br label %890

890:                                              ; preds = %889
  %891 = load ptr, ptr %9, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.MDBX_env, ptr %891, i32 0, i32 35
  %893 = getelementptr inbounds %struct.anon.6, ptr %892, i32 0, i32 0
  %894 = load i64, ptr %893, align 8, !tbaa !47
  %895 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %896 = zext i32 %895 to i64
  %897 = urem i64 %894, %896
  %898 = icmp eq i64 %897, 0
  %899 = xor i1 %898, true
  %900 = xor i1 %899, true
  %901 = xor i1 %900, true
  %902 = zext i1 %901 to i32
  %903 = sext i32 %902 to i64
  %904 = call i64 @llvm.expect.i64(i64 %903, i64 0)
  %905 = icmp ne i64 %904, 0
  br i1 %905, label %906, label %908

906:                                              ; preds = %890
  %907 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %907, ptr noundef @.str.23, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1155) #14
  unreachable

908:                                              ; preds = %890
  br label %909

909:                                              ; preds = %908
  br label %910

910:                                              ; preds = %909
  br label %911

911:                                              ; preds = %910
  %912 = load ptr, ptr %9, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.MDBX_env, ptr %912, i32 0, i32 35
  %914 = getelementptr inbounds %struct.anon.6, ptr %913, i32 0, i32 1
  %915 = load i64, ptr %914, align 8, !tbaa !49
  %916 = icmp ule i64 %915, 140737488355328
  %917 = xor i1 %916, true
  %918 = xor i1 %917, true
  %919 = xor i1 %918, true
  %920 = zext i1 %919 to i32
  %921 = sext i32 %920 to i64
  %922 = call i64 @llvm.expect.i64(i64 %921, i64 0)
  %923 = icmp ne i64 %922, 0
  br i1 %923, label %924, label %926

924:                                              ; preds = %911
  %925 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %925, ptr noundef @.str.24, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1157) #14
  unreachable

926:                                              ; preds = %911
  br label %927

927:                                              ; preds = %926
  br label %928

928:                                              ; preds = %927
  br label %929

929:                                              ; preds = %928
  %930 = load ptr, ptr %9, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.MDBX_env, ptr %930, i32 0, i32 35
  %932 = getelementptr inbounds %struct.anon.6, ptr %931, i32 0, i32 1
  %933 = load i64, ptr %932, align 8, !tbaa !49
  %934 = load i64, ptr %15, align 8, !tbaa !9
  %935 = trunc i64 %934 to i32
  %936 = zext i32 %935 to i64
  %937 = udiv i64 %933, %936
  %938 = icmp ule i64 %937, 2147483648
  %939 = xor i1 %938, true
  %940 = xor i1 %939, true
  %941 = xor i1 %940, true
  %942 = zext i1 %941 to i32
  %943 = sext i32 %942 to i64
  %944 = call i64 @llvm.expect.i64(i64 %943, i64 0)
  %945 = icmp ne i64 %944, 0
  br i1 %945, label %946, label %948

946:                                              ; preds = %929
  %947 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %947, ptr noundef @.str.25, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1158) #14
  unreachable

948:                                              ; preds = %929
  br label %949

949:                                              ; preds = %948
  br label %950

950:                                              ; preds = %949
  br label %951

951:                                              ; preds = %950
  %952 = load ptr, ptr %9, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.MDBX_env, ptr %952, i32 0, i32 35
  %954 = getelementptr inbounds %struct.anon.6, ptr %953, i32 0, i32 1
  %955 = load i64, ptr %954, align 8, !tbaa !49
  %956 = load i64, ptr %15, align 8, !tbaa !9
  %957 = trunc i64 %956 to i32
  %958 = zext i32 %957 to i64
  %959 = urem i64 %955, %958
  %960 = icmp eq i64 %959, 0
  %961 = xor i1 %960, true
  %962 = xor i1 %961, true
  %963 = xor i1 %962, true
  %964 = zext i1 %963 to i32
  %965 = sext i32 %964 to i64
  %966 = call i64 @llvm.expect.i64(i64 %965, i64 0)
  %967 = icmp ne i64 %966, 0
  br i1 %967, label %968, label %970

968:                                              ; preds = %951
  %969 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %969, ptr noundef @.str.26, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1159) #14
  unreachable

970:                                              ; preds = %951
  br label %971

971:                                              ; preds = %970
  br label %972

972:                                              ; preds = %971
  br label %973

973:                                              ; preds = %972
  %974 = load ptr, ptr %9, align 8, !tbaa !5
  %975 = getelementptr inbounds %struct.MDBX_env, ptr %974, i32 0, i32 35
  %976 = getelementptr inbounds %struct.anon.6, ptr %975, i32 0, i32 1
  %977 = load i64, ptr %976, align 8, !tbaa !49
  %978 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %979 = zext i32 %978 to i64
  %980 = urem i64 %977, %979
  %981 = icmp eq i64 %980, 0
  %982 = xor i1 %981, true
  %983 = xor i1 %982, true
  %984 = xor i1 %983, true
  %985 = zext i1 %984 to i32
  %986 = sext i32 %985 to i64
  %987 = call i64 @llvm.expect.i64(i64 %986, i64 0)
  %988 = icmp ne i64 %987, 0
  br i1 %988, label %989, label %991

989:                                              ; preds = %973
  %990 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %990, ptr noundef @.str.27, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1160) #14
  unreachable

991:                                              ; preds = %973
  br label %992

992:                                              ; preds = %991
  br label %993

993:                                              ; preds = %992
  br label %994

994:                                              ; preds = %993
  %995 = load ptr, ptr %9, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.MDBX_env, ptr %995, i32 0, i32 35
  %997 = getelementptr inbounds %struct.anon.6, ptr %996, i32 0, i32 2
  %998 = load i64, ptr %997, align 8, !tbaa !48
  %999 = load ptr, ptr %9, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.MDBX_env, ptr %999, i32 0, i32 35
  %1001 = getelementptr inbounds %struct.anon.6, ptr %1000, i32 0, i32 0
  %1002 = load i64, ptr %1001, align 8, !tbaa !47
  %1003 = icmp uge i64 %998, %1002
  %1004 = xor i1 %1003, true
  %1005 = xor i1 %1004, true
  %1006 = xor i1 %1005, true
  %1007 = zext i1 %1006 to i32
  %1008 = sext i32 %1007 to i64
  %1009 = call i64 @llvm.expect.i64(i64 %1008, i64 0)
  %1010 = icmp ne i64 %1009, 0
  br i1 %1010, label %1011, label %1013

1011:                                             ; preds = %994
  %1012 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1012, ptr noundef @.str.28, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1162) #14
  unreachable

1013:                                             ; preds = %994
  br label %1014

1014:                                             ; preds = %1013
  br label %1015

1015:                                             ; preds = %1014
  br label %1016

1016:                                             ; preds = %1015
  %1017 = load ptr, ptr %9, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.MDBX_env, ptr %1017, i32 0, i32 35
  %1019 = getelementptr inbounds %struct.anon.6, ptr %1018, i32 0, i32 2
  %1020 = load i64, ptr %1019, align 8, !tbaa !48
  %1021 = load ptr, ptr %9, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.MDBX_env, ptr %1021, i32 0, i32 35
  %1023 = getelementptr inbounds %struct.anon.6, ptr %1022, i32 0, i32 1
  %1024 = load i64, ptr %1023, align 8, !tbaa !49
  %1025 = icmp ule i64 %1020, %1024
  %1026 = xor i1 %1025, true
  %1027 = xor i1 %1026, true
  %1028 = xor i1 %1027, true
  %1029 = zext i1 %1028 to i32
  %1030 = sext i32 %1029 to i64
  %1031 = call i64 @llvm.expect.i64(i64 %1030, i64 0)
  %1032 = icmp ne i64 %1031, 0
  br i1 %1032, label %1033, label %1035

1033:                                             ; preds = %1016
  %1034 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1034, ptr noundef @.str.29, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1163) #14
  unreachable

1035:                                             ; preds = %1016
  br label %1036

1036:                                             ; preds = %1035
  br label %1037

1037:                                             ; preds = %1036
  br label %1038

1038:                                             ; preds = %1037
  %1039 = load ptr, ptr %9, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.MDBX_env, ptr %1039, i32 0, i32 35
  %1041 = getelementptr inbounds %struct.anon.6, ptr %1040, i32 0, i32 2
  %1042 = load i64, ptr %1041, align 8, !tbaa !48
  %1043 = load i64, ptr %15, align 8, !tbaa !9
  %1044 = trunc i64 %1043 to i32
  %1045 = zext i32 %1044 to i64
  %1046 = urem i64 %1042, %1045
  %1047 = icmp eq i64 %1046, 0
  %1048 = xor i1 %1047, true
  %1049 = xor i1 %1048, true
  %1050 = xor i1 %1049, true
  %1051 = zext i1 %1050 to i32
  %1052 = sext i32 %1051 to i64
  %1053 = call i64 @llvm.expect.i64(i64 %1052, i64 0)
  %1054 = icmp ne i64 %1053, 0
  br i1 %1054, label %1055, label %1057

1055:                                             ; preds = %1038
  %1056 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1056, ptr noundef @.str.30, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1164) #14
  unreachable

1057:                                             ; preds = %1038
  br label %1058

1058:                                             ; preds = %1057
  br label %1059

1059:                                             ; preds = %1058
  br label %1060

1060:                                             ; preds = %1059
  %1061 = load ptr, ptr %9, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.MDBX_env, ptr %1061, i32 0, i32 35
  %1063 = getelementptr inbounds %struct.anon.6, ptr %1062, i32 0, i32 2
  %1064 = load i64, ptr %1063, align 8, !tbaa !48
  %1065 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %1066 = zext i32 %1065 to i64
  %1067 = urem i64 %1064, %1066
  %1068 = icmp eq i64 %1067, 0
  %1069 = xor i1 %1068, true
  %1070 = xor i1 %1069, true
  %1071 = xor i1 %1070, true
  %1072 = zext i1 %1071 to i32
  %1073 = sext i32 %1072 to i64
  %1074 = call i64 @llvm.expect.i64(i64 %1073, i64 0)
  %1075 = icmp ne i64 %1074, 0
  br i1 %1075, label %1076, label %1078

1076:                                             ; preds = %1060
  %1077 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1077, ptr noundef @.str.31, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1165) #14
  unreachable

1078:                                             ; preds = %1060
  br label %1079

1079:                                             ; preds = %1078
  br label %1080

1080:                                             ; preds = %1079
  br label %1081

1081:                                             ; preds = %1080
  %1082 = load ptr, ptr %9, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.MDBX_env, ptr %1082, i32 0, i32 35
  %1084 = getelementptr inbounds %struct.anon.6, ptr %1083, i32 0, i32 3
  %1085 = load i64, ptr %1084, align 8, !tbaa !50
  %1086 = load i64, ptr %15, align 8, !tbaa !9
  %1087 = trunc i64 %1086 to i32
  %1088 = zext i32 %1087 to i64
  %1089 = urem i64 %1085, %1088
  %1090 = icmp eq i64 %1089, 0
  %1091 = xor i1 %1090, true
  %1092 = xor i1 %1091, true
  %1093 = xor i1 %1092, true
  %1094 = zext i1 %1093 to i32
  %1095 = sext i32 %1094 to i64
  %1096 = call i64 @llvm.expect.i64(i64 %1095, i64 0)
  %1097 = icmp ne i64 %1096, 0
  br i1 %1097, label %1098, label %1100

1098:                                             ; preds = %1081
  %1099 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1099, ptr noundef @.str.32, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1167) #14
  unreachable

1100:                                             ; preds = %1081
  br label %1101

1101:                                             ; preds = %1100
  br label %1102

1102:                                             ; preds = %1101
  br label %1103

1103:                                             ; preds = %1102
  %1104 = load ptr, ptr %9, align 8, !tbaa !5
  %1105 = getelementptr inbounds %struct.MDBX_env, ptr %1104, i32 0, i32 35
  %1106 = getelementptr inbounds %struct.anon.6, ptr %1105, i32 0, i32 3
  %1107 = load i64, ptr %1106, align 8, !tbaa !50
  %1108 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %1109 = zext i32 %1108 to i64
  %1110 = urem i64 %1107, %1109
  %1111 = icmp eq i64 %1110, 0
  %1112 = xor i1 %1111, true
  %1113 = xor i1 %1112, true
  %1114 = xor i1 %1113, true
  %1115 = zext i1 %1114 to i32
  %1116 = sext i32 %1115 to i64
  %1117 = call i64 @llvm.expect.i64(i64 %1116, i64 0)
  %1118 = icmp ne i64 %1117, 0
  br i1 %1118, label %1119, label %1121

1119:                                             ; preds = %1103
  %1120 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1120, ptr noundef @.str.33, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1168) #14
  unreachable

1121:                                             ; preds = %1103
  br label %1122

1122:                                             ; preds = %1121
  br label %1123

1123:                                             ; preds = %1122
  br label %1124

1124:                                             ; preds = %1123
  %1125 = load ptr, ptr %9, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.MDBX_env, ptr %1125, i32 0, i32 35
  %1127 = getelementptr inbounds %struct.anon.6, ptr %1126, i32 0, i32 4
  %1128 = load i64, ptr %1127, align 8, !tbaa !51
  %1129 = load i64, ptr %15, align 8, !tbaa !9
  %1130 = trunc i64 %1129 to i32
  %1131 = zext i32 %1130 to i64
  %1132 = urem i64 %1128, %1131
  %1133 = icmp eq i64 %1132, 0
  %1134 = xor i1 %1133, true
  %1135 = xor i1 %1134, true
  %1136 = xor i1 %1135, true
  %1137 = zext i1 %1136 to i32
  %1138 = sext i32 %1137 to i64
  %1139 = call i64 @llvm.expect.i64(i64 %1138, i64 0)
  %1140 = icmp ne i64 %1139, 0
  br i1 %1140, label %1141, label %1143

1141:                                             ; preds = %1124
  %1142 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1142, ptr noundef @.str.34, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1169) #14
  unreachable

1143:                                             ; preds = %1124
  br label %1144

1144:                                             ; preds = %1143
  br label %1145

1145:                                             ; preds = %1144
  br label %1146

1146:                                             ; preds = %1145
  %1147 = load ptr, ptr %9, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.MDBX_env, ptr %1147, i32 0, i32 35
  %1149 = getelementptr inbounds %struct.anon.6, ptr %1148, i32 0, i32 4
  %1150 = load i64, ptr %1149, align 8, !tbaa !51
  %1151 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !41
  %1152 = zext i32 %1151 to i64
  %1153 = urem i64 %1150, %1152
  %1154 = icmp eq i64 %1153, 0
  %1155 = xor i1 %1154, true
  %1156 = xor i1 %1155, true
  %1157 = xor i1 %1156, true
  %1158 = zext i1 %1157 to i32
  %1159 = sext i32 %1158 to i64
  %1160 = call i64 @llvm.expect.i64(i64 %1159, i64 0)
  %1161 = icmp ne i64 %1160, 0
  br i1 %1161, label %1162, label %1164

1162:                                             ; preds = %1146
  %1163 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1163, ptr noundef @.str.35, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1170) #14
  unreachable

1164:                                             ; preds = %1146
  br label %1165

1165:                                             ; preds = %1164
  br label %1166

1166:                                             ; preds = %1165
  store i32 0, ptr %16, align 4, !tbaa !11
  br label %1787

1167:                                             ; preds = %770
  br label %1168

1168:                                             ; preds = %1167
  %1169 = load i64, ptr %15, align 8, !tbaa !9
  %1170 = load ptr, ptr %9, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.MDBX_env, ptr %1170, i32 0, i32 2
  %1172 = load i32, ptr %1171, align 8, !tbaa !36
  %1173 = zext i32 %1172 to i64
  %1174 = icmp eq i64 %1169, %1173
  %1175 = xor i1 %1174, true
  %1176 = xor i1 %1175, true
  %1177 = xor i1 %1176, true
  %1178 = zext i1 %1177 to i32
  %1179 = sext i32 %1178 to i64
  %1180 = call i64 @llvm.expect.i64(i64 %1179, i64 0)
  %1181 = icmp ne i64 %1180, 0
  br i1 %1181, label %1182, label %1184

1182:                                             ; preds = %1168
  %1183 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1183, ptr noundef @.str.36, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1175) #14
  unreachable

1184:                                             ; preds = %1168
  br label %1185

1185:                                             ; preds = %1184
  br label %1186

1186:                                             ; preds = %1185
  call void @llvm.lifetime.start.p0(i64 224, ptr %29) #13
  call void @llvm.memset.p0.i64(ptr align 4 %29, i8 0, i64 224, i1 false)
  %1187 = load ptr, ptr %9, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.MDBX_env, ptr %1187, i32 0, i32 39
  %1189 = load ptr, ptr %1188, align 8, !tbaa !30
  %1190 = icmp ne ptr %1189, null
  br i1 %1190, label %1261, label %1191

1191:                                             ; preds = %1186
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #13
  %1192 = load ptr, ptr %9, align 8, !tbaa !5
  %1193 = load ptr, ptr %9, align 8, !tbaa !5
  %1194 = getelementptr inbounds %struct.MDBX_env, ptr %1193, i32 0, i32 24
  %1195 = load ptr, ptr %1194, align 8, !tbaa !26
  %1196 = getelementptr inbounds %struct.MDBX_txn, ptr %1195, i32 0, i32 17
  %1197 = getelementptr inbounds %struct.anon.20, ptr %1196, i32 0, i32 0
  call void @meta_recent(ptr dead_on_unwind writable sret(%struct.meta_ptr) align 8 %30, ptr noundef %1192, ptr noundef %1197)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #13
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %1198

1198:                                             ; preds = %1223, %1191
  br label %1199

1199:                                             ; preds = %1198
  %1200 = load ptr, ptr %9, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.MDBX_env, ptr %1200, i32 0, i32 24
  %1202 = load ptr, ptr %1201, align 8, !tbaa !26
  %1203 = call i32 @coherency_fetch_head(ptr noundef %1202, ptr noundef byval(%struct.meta_ptr) align 8 %30, ptr noundef %31)
  store i32 %1203, ptr %16, align 4, !tbaa !11
  %1204 = load i32, ptr %16, align 4, !tbaa !11
  %1205 = icmp eq i32 %1204, 0
  %1206 = xor i1 %1205, true
  %1207 = xor i1 %1206, true
  %1208 = zext i1 %1207 to i32
  %1209 = sext i32 %1208 to i64
  %1210 = call i64 @llvm.expect.i64(i64 %1209, i64 1)
  %1211 = icmp ne i64 %1210, 0
  br i1 %1211, label %1212, label %1213

1212:                                             ; preds = %1199
  br label %1224

1213:                                             ; preds = %1199
  %1214 = load i32, ptr %16, align 4, !tbaa !11
  %1215 = icmp ne i32 %1214, -1
  %1216 = xor i1 %1215, true
  %1217 = xor i1 %1216, true
  %1218 = zext i1 %1217 to i32
  %1219 = sext i32 %1218 to i64
  %1220 = call i64 @llvm.expect.i64(i64 %1219, i64 0)
  %1221 = icmp ne i64 %1220, 0
  br i1 %1221, label %1222, label %1223

1222:                                             ; preds = %1213
  store i32 6, ptr %17, align 4
  br label %1258

1223:                                             ; preds = %1213
  br label %1198, !llvm.loop !52

1224:                                             ; preds = %1212
  %1225 = getelementptr inbounds %struct.meta_ptr, ptr %30, i32 0, i32 1
  %1226 = load ptr, ptr %1225, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 4 %1226, i64 224, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #13
  %1227 = getelementptr inbounds %struct.meta_ptr, ptr %30, i32 0, i32 0
  %1228 = load i64, ptr %1227, align 8, !tbaa !55
  %1229 = call i64 @safe64_txnid_next(i64 noundef %1228)
  store i64 %1229, ptr %32, align 8, !tbaa !9
  %1230 = load i64, ptr %32, align 8, !tbaa !9
  %1231 = icmp ugt i64 %1230, -4294967297
  %1232 = xor i1 %1231, true
  %1233 = xor i1 %1232, true
  %1234 = zext i1 %1233 to i32
  %1235 = sext i32 %1234 to i64
  %1236 = call i64 @llvm.expect.i64(i64 %1235, i64 0)
  %1237 = icmp ne i64 %1236, 0
  br i1 %1237, label %1238, label %1254

1238:                                             ; preds = %1224
  store i32 -30788, ptr %16, align 4, !tbaa !11
  br label %1239

1239:                                             ; preds = %1238
  %1240 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !57
  %1241 = zext i8 %1240 to i32
  %1242 = icmp sle i32 1, %1241
  %1243 = xor i1 %1242, true
  %1244 = xor i1 %1243, true
  %1245 = zext i1 %1244 to i32
  %1246 = sext i32 %1245 to i64
  %1247 = call i64 @llvm.expect.i64(i64 %1246, i64 0)
  %1248 = icmp ne i64 %1247, 0
  br i1 %1248, label %1249, label %1251

1249:                                             ; preds = %1239
  %1250 = load i32, ptr %16, align 4, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1194, ptr noundef @.str.2, i32 noundef %1250)
  br label %1251

1251:                                             ; preds = %1249, %1239
  br label %1252

1252:                                             ; preds = %1251
  br label %1253

1253:                                             ; preds = %1252
  store i32 6, ptr %17, align 4
  br label %1257

1254:                                             ; preds = %1224
  %1255 = load ptr, ptr %9, align 8, !tbaa !5
  %1256 = load i64, ptr %32, align 8, !tbaa !9
  call void @meta_set_txnid(ptr noundef %1255, ptr noundef %29, i64 noundef %1256)
  store i32 0, ptr %17, align 4
  br label %1257

1257:                                             ; preds = %1254, %1253
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #13
  br label %1258

1258:                                             ; preds = %1257, %1222
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #13
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #13
  %1259 = load i32, ptr %17, align 4
  switch i32 %1259, label %1784 [
    i32 0, label %1260
  ]

1260:                                             ; preds = %1258
  br label %1261

1261:                                             ; preds = %1260, %1186
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #13
  %1262 = load ptr, ptr %9, align 8, !tbaa !5
  %1263 = getelementptr inbounds %struct.MDBX_env, ptr %1262, i32 0, i32 39
  %1264 = load ptr, ptr %1263, align 8, !tbaa !30
  %1265 = icmp ne ptr %1264, null
  br i1 %1265, label %1266, label %1270

1266:                                             ; preds = %1261
  %1267 = load ptr, ptr %9, align 8, !tbaa !5
  %1268 = getelementptr inbounds %struct.MDBX_env, ptr %1267, i32 0, i32 39
  %1269 = load ptr, ptr %1268, align 8, !tbaa !30
  br label %1274

1270:                                             ; preds = %1261
  %1271 = load ptr, ptr %9, align 8, !tbaa !5
  %1272 = getelementptr inbounds %struct.MDBX_env, ptr %1271, i32 0, i32 24
  %1273 = load ptr, ptr %1272, align 8, !tbaa !26
  br label %1274

1274:                                             ; preds = %1270, %1266
  %1275 = phi ptr [ %1269, %1266 ], [ %1273, %1270 ]
  %1276 = getelementptr inbounds %struct.MDBX_txn, ptr %1275, i32 0, i32 6
  store ptr %1276, ptr %33, align 8, !tbaa !5
  %1277 = load ptr, ptr %9, align 8, !tbaa !5
  %1278 = load ptr, ptr %33, align 8, !tbaa !5
  %1279 = getelementptr inbounds %struct.geo, ptr %1278, i32 0, i32 4
  %1280 = load i32, ptr %1279, align 4, !tbaa !15
  %1281 = zext i32 %1280 to i64
  %1282 = call i64 @pgno2bytes(ptr noundef %1277, i64 noundef %1281) #15
  %1283 = load ptr, ptr %9, align 8, !tbaa !5
  %1284 = getelementptr inbounds %struct.MDBX_env, ptr %1283, i32 0, i32 35
  %1285 = getelementptr inbounds %struct.anon.6, ptr %1284, i32 0, i32 2
  store i64 %1282, ptr %1285, align 8, !tbaa !48
  %1286 = load ptr, ptr %9, align 8, !tbaa !5
  %1287 = load ptr, ptr %33, align 8, !tbaa !5
  %1288 = getelementptr inbounds %struct.geo, ptr %1287, i32 0, i32 2
  %1289 = load i32, ptr %1288, align 4, !tbaa !37
  %1290 = zext i32 %1289 to i64
  %1291 = call i64 @pgno2bytes(ptr noundef %1286, i64 noundef %1290) #15
  %1292 = load ptr, ptr %9, align 8, !tbaa !5
  %1293 = getelementptr inbounds %struct.MDBX_env, ptr %1292, i32 0, i32 35
  %1294 = getelementptr inbounds %struct.anon.6, ptr %1293, i32 0, i32 0
  store i64 %1291, ptr %1294, align 8, !tbaa !47
  %1295 = load ptr, ptr %9, align 8, !tbaa !5
  %1296 = load ptr, ptr %33, align 8, !tbaa !5
  %1297 = getelementptr inbounds %struct.geo, ptr %1296, i32 0, i32 3
  %1298 = load i32, ptr %1297, align 4, !tbaa !38
  %1299 = zext i32 %1298 to i64
  %1300 = call i64 @pgno2bytes(ptr noundef %1295, i64 noundef %1299) #15
  %1301 = load ptr, ptr %9, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.MDBX_env, ptr %1301, i32 0, i32 35
  %1303 = getelementptr inbounds %struct.anon.6, ptr %1302, i32 0, i32 1
  store i64 %1300, ptr %1303, align 8, !tbaa !49
  %1304 = load ptr, ptr %9, align 8, !tbaa !5
  %1305 = load ptr, ptr %33, align 8, !tbaa !5
  %1306 = getelementptr inbounds %struct.geo, ptr %1305, i32 0, i32 0
  %1307 = load i16, ptr %1306, align 4, !tbaa !39
  %1308 = call i32 @pv2pages(i16 noundef zeroext %1307) #16
  %1309 = zext i32 %1308 to i64
  %1310 = call i64 @pgno2bytes(ptr noundef %1304, i64 noundef %1309) #15
  %1311 = load ptr, ptr %9, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.MDBX_env, ptr %1311, i32 0, i32 35
  %1313 = getelementptr inbounds %struct.anon.6, ptr %1312, i32 0, i32 3
  store i64 %1310, ptr %1313, align 8, !tbaa !50
  %1314 = load ptr, ptr %9, align 8, !tbaa !5
  %1315 = load ptr, ptr %33, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.geo, ptr %1315, i32 0, i32 1
  %1317 = load i16, ptr %1316, align 2, !tbaa !40
  %1318 = call i32 @pv2pages(i16 noundef zeroext %1317) #16
  %1319 = zext i32 %1318 to i64
  %1320 = call i64 @pgno2bytes(ptr noundef %1314, i64 noundef %1319) #15
  %1321 = load ptr, ptr %9, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.MDBX_env, ptr %1321, i32 0, i32 35
  %1323 = getelementptr inbounds %struct.anon.6, ptr %1322, i32 0, i32 4
  store i64 %1320, ptr %1323, align 8, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 20, ptr %34) #13
  %1324 = load ptr, ptr %9, align 8, !tbaa !5
  %1325 = load i64, ptr %10, align 8, !tbaa !9
  %1326 = call i32 @bytes2pgno(ptr noundef %1324, i64 noundef %1325) #15
  %1327 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 2
  store i32 %1326, ptr %1327, align 4, !tbaa !37
  %1328 = load ptr, ptr %9, align 8, !tbaa !5
  %1329 = load i64, ptr %11, align 8, !tbaa !9
  %1330 = call i32 @bytes2pgno(ptr noundef %1328, i64 noundef %1329) #15
  %1331 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  store i32 %1330, ptr %1331, align 4, !tbaa !15
  %1332 = load ptr, ptr %9, align 8, !tbaa !5
  %1333 = load i64, ptr %12, align 8, !tbaa !9
  %1334 = call i32 @bytes2pgno(ptr noundef %1332, i64 noundef %1333) #15
  %1335 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  store i32 %1334, ptr %1335, align 4, !tbaa !38
  %1336 = load ptr, ptr %9, align 8, !tbaa !5
  %1337 = load i64, ptr %13, align 8, !tbaa !9
  %1338 = call i32 @bytes2pgno(ptr noundef %1336, i64 noundef %1337) #15
  %1339 = zext i32 %1338 to i64
  %1340 = call zeroext i16 @pages2pv(i64 noundef %1339) #16
  %1341 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 0
  store i16 %1340, ptr %1341, align 4, !tbaa !39
  %1342 = load ptr, ptr %9, align 8, !tbaa !5
  %1343 = load i64, ptr %14, align 8, !tbaa !9
  %1344 = call i32 @bytes2pgno(ptr noundef %1342, i64 noundef %1343) #15
  %1345 = zext i32 %1344 to i64
  %1346 = call zeroext i16 @pages2pv(i64 noundef %1345) #16
  %1347 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 1
  store i16 %1346, ptr %1347, align 2, !tbaa !40
  %1348 = load ptr, ptr %33, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.geo, ptr %1348, i32 0, i32 5
  %1350 = load i32, ptr %1349, align 4, !tbaa !15
  %1351 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 5
  store i32 %1350, ptr %1351, align 4, !tbaa !15
  br label %1352

1352:                                             ; preds = %1274
  %1353 = load ptr, ptr %9, align 8, !tbaa !5
  %1354 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 2
  %1355 = load i32, ptr %1354, align 4, !tbaa !37
  %1356 = zext i32 %1355 to i64
  %1357 = call i64 @pgno_align2os_bytes(ptr noundef %1353, i64 noundef %1356) #15
  %1358 = load i64, ptr %10, align 8, !tbaa !9
  %1359 = icmp eq i64 %1357, %1358
  %1360 = xor i1 %1359, true
  %1361 = xor i1 %1360, true
  %1362 = xor i1 %1361, true
  %1363 = zext i1 %1362 to i32
  %1364 = sext i32 %1363 to i64
  %1365 = call i64 @llvm.expect.i64(i64 %1364, i64 0)
  %1366 = icmp ne i64 %1365, 0
  br i1 %1366, label %1367, label %1369

1367:                                             ; preds = %1352
  %1368 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1368, ptr noundef @.str.38, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1216) #14
  unreachable

1369:                                             ; preds = %1352
  br label %1370

1370:                                             ; preds = %1369
  br label %1371

1371:                                             ; preds = %1370
  br label %1372

1372:                                             ; preds = %1371
  %1373 = load ptr, ptr %9, align 8, !tbaa !5
  %1374 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  %1375 = load i32, ptr %1374, align 4, !tbaa !38
  %1376 = zext i32 %1375 to i64
  %1377 = call i64 @pgno_align2os_bytes(ptr noundef %1373, i64 noundef %1376) #15
  %1378 = load i64, ptr %12, align 8, !tbaa !9
  %1379 = icmp eq i64 %1377, %1378
  %1380 = xor i1 %1379, true
  %1381 = xor i1 %1380, true
  %1382 = xor i1 %1381, true
  %1383 = zext i1 %1382 to i32
  %1384 = sext i32 %1383 to i64
  %1385 = call i64 @llvm.expect.i64(i64 %1384, i64 0)
  %1386 = icmp ne i64 %1385, 0
  br i1 %1386, label %1387, label %1389

1387:                                             ; preds = %1372
  %1388 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1388, ptr noundef @.str.39, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1217) #14
  unreachable

1389:                                             ; preds = %1372
  br label %1390

1390:                                             ; preds = %1389
  br label %1391

1391:                                             ; preds = %1390
  br label %1392

1392:                                             ; preds = %1391
  %1393 = load ptr, ptr %9, align 8, !tbaa !5
  %1394 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1395 = load i32, ptr %1394, align 4, !tbaa !15
  %1396 = zext i32 %1395 to i64
  %1397 = call i64 @pgno_align2os_bytes(ptr noundef %1393, i64 noundef %1396) #15
  %1398 = load i64, ptr %11, align 8, !tbaa !9
  %1399 = icmp eq i64 %1397, %1398
  %1400 = xor i1 %1399, true
  %1401 = xor i1 %1400, true
  %1402 = xor i1 %1401, true
  %1403 = zext i1 %1402 to i32
  %1404 = sext i32 %1403 to i64
  %1405 = call i64 @llvm.expect.i64(i64 %1404, i64 0)
  %1406 = icmp ne i64 %1405, 0
  br i1 %1406, label %1407, label %1409

1407:                                             ; preds = %1392
  %1408 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1408, ptr noundef @.str.40, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1218) #14
  unreachable

1409:                                             ; preds = %1392
  br label %1410

1410:                                             ; preds = %1409
  br label %1411

1411:                                             ; preds = %1410
  br label %1412

1412:                                             ; preds = %1411
  %1413 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 0
  %1414 = load i16, ptr %1413, align 4, !tbaa !39
  %1415 = zext i16 %1414 to i32
  %1416 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 0
  %1417 = load i16, ptr %1416, align 4, !tbaa !39
  %1418 = call i32 @pv2pages(i16 noundef zeroext %1417) #16
  %1419 = zext i32 %1418 to i64
  %1420 = call zeroext i16 @pages2pv(i64 noundef %1419) #16
  %1421 = zext i16 %1420 to i32
  %1422 = icmp eq i32 %1415, %1421
  %1423 = xor i1 %1422, true
  %1424 = xor i1 %1423, true
  %1425 = xor i1 %1424, true
  %1426 = zext i1 %1425 to i32
  %1427 = sext i32 %1426 to i64
  %1428 = call i64 @llvm.expect.i64(i64 %1427, i64 0)
  %1429 = icmp ne i64 %1428, 0
  br i1 %1429, label %1430, label %1432

1430:                                             ; preds = %1412
  %1431 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1431, ptr noundef @.str.41, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1219) #14
  unreachable

1432:                                             ; preds = %1412
  br label %1433

1433:                                             ; preds = %1432
  br label %1434

1434:                                             ; preds = %1433
  br label %1435

1435:                                             ; preds = %1434
  %1436 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 1
  %1437 = load i16, ptr %1436, align 2, !tbaa !40
  %1438 = zext i16 %1437 to i32
  %1439 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 1
  %1440 = load i16, ptr %1439, align 2, !tbaa !40
  %1441 = call i32 @pv2pages(i16 noundef zeroext %1440) #16
  %1442 = zext i32 %1441 to i64
  %1443 = call zeroext i16 @pages2pv(i64 noundef %1442) #16
  %1444 = zext i16 %1443 to i32
  %1445 = icmp eq i32 %1438, %1444
  %1446 = xor i1 %1445, true
  %1447 = xor i1 %1446, true
  %1448 = xor i1 %1447, true
  %1449 = zext i1 %1448 to i32
  %1450 = sext i32 %1449 to i64
  %1451 = call i64 @llvm.expect.i64(i64 %1450, i64 0)
  %1452 = icmp ne i64 %1451, 0
  br i1 %1452, label %1453, label %1455

1453:                                             ; preds = %1435
  %1454 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1454, ptr noundef @.str.42, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1220) #14
  unreachable

1455:                                             ; preds = %1435
  br label %1456

1456:                                             ; preds = %1455
  br label %1457

1457:                                             ; preds = %1456
  br label %1458

1458:                                             ; preds = %1457
  %1459 = load i64, ptr %10, align 8, !tbaa !9
  %1460 = icmp uge i64 %1459, 768
  %1461 = xor i1 %1460, true
  %1462 = xor i1 %1461, true
  %1463 = xor i1 %1462, true
  %1464 = zext i1 %1463 to i32
  %1465 = sext i32 %1464 to i64
  %1466 = call i64 @llvm.expect.i64(i64 %1465, i64 0)
  %1467 = icmp ne i64 %1466, 0
  br i1 %1467, label %1468, label %1470

1468:                                             ; preds = %1458
  %1469 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1469, ptr noundef @.str.43, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1222) #14
  unreachable

1470:                                             ; preds = %1458
  br label %1471

1471:                                             ; preds = %1470
  br label %1472

1472:                                             ; preds = %1471
  br label %1473

1473:                                             ; preds = %1472
  %1474 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 2
  %1475 = load i32, ptr %1474, align 4, !tbaa !37
  %1476 = icmp uge i32 %1475, 3
  %1477 = xor i1 %1476, true
  %1478 = xor i1 %1477, true
  %1479 = xor i1 %1478, true
  %1480 = zext i1 %1479 to i32
  %1481 = sext i32 %1480 to i64
  %1482 = call i64 @llvm.expect.i64(i64 %1481, i64 0)
  %1483 = icmp ne i64 %1482, 0
  br i1 %1483, label %1484, label %1486

1484:                                             ; preds = %1473
  %1485 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1485, ptr noundef @.str.44, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1223) #14
  unreachable

1486:                                             ; preds = %1473
  br label %1487

1487:                                             ; preds = %1486
  br label %1488

1488:                                             ; preds = %1487
  br label %1489

1489:                                             ; preds = %1488
  %1490 = load i64, ptr %12, align 8, !tbaa !9
  %1491 = icmp ule i64 %1490, 140737488355328
  %1492 = xor i1 %1491, true
  %1493 = xor i1 %1492, true
  %1494 = xor i1 %1493, true
  %1495 = zext i1 %1494 to i32
  %1496 = sext i32 %1495 to i64
  %1497 = call i64 @llvm.expect.i64(i64 %1496, i64 0)
  %1498 = icmp ne i64 %1497, 0
  br i1 %1498, label %1499, label %1501

1499:                                             ; preds = %1489
  %1500 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1500, ptr noundef @.str.45, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1224) #14
  unreachable

1501:                                             ; preds = %1489
  br label %1502

1502:                                             ; preds = %1501
  br label %1503

1503:                                             ; preds = %1502
  br label %1504

1504:                                             ; preds = %1503
  %1505 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  %1506 = load i32, ptr %1505, align 4, !tbaa !38
  %1507 = icmp ule i32 %1506, -2147483648
  %1508 = xor i1 %1507, true
  %1509 = xor i1 %1508, true
  %1510 = xor i1 %1509, true
  %1511 = zext i1 %1510 to i32
  %1512 = sext i32 %1511 to i64
  %1513 = call i64 @llvm.expect.i64(i64 %1512, i64 0)
  %1514 = icmp ne i64 %1513, 0
  br i1 %1514, label %1515, label %1517

1515:                                             ; preds = %1504
  %1516 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1516, ptr noundef @.str.46, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1225) #14
  unreachable

1517:                                             ; preds = %1504
  br label %1518

1518:                                             ; preds = %1517
  br label %1519

1519:                                             ; preds = %1518
  br label %1520

1520:                                             ; preds = %1519
  %1521 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1522 = load i32, ptr %1521, align 4, !tbaa !15
  %1523 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 5
  %1524 = load i32, ptr %1523, align 4, !tbaa !15
  %1525 = icmp uge i32 %1522, %1524
  %1526 = xor i1 %1525, true
  %1527 = xor i1 %1526, true
  %1528 = xor i1 %1527, true
  %1529 = zext i1 %1528 to i32
  %1530 = sext i32 %1529 to i64
  %1531 = call i64 @llvm.expect.i64(i64 %1530, i64 0)
  %1532 = icmp ne i64 %1531, 0
  br i1 %1532, label %1533, label %1535

1533:                                             ; preds = %1520
  %1534 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1534, ptr noundef @.str.47, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1226) #14
  unreachable

1535:                                             ; preds = %1520
  br label %1536

1536:                                             ; preds = %1535
  br label %1537

1537:                                             ; preds = %1536
  br label %1538

1538:                                             ; preds = %1537
  %1539 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  %1540 = load i32, ptr %1539, align 4, !tbaa !38
  %1541 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1542 = load i32, ptr %1541, align 4, !tbaa !15
  %1543 = icmp uge i32 %1540, %1542
  %1544 = xor i1 %1543, true
  %1545 = xor i1 %1544, true
  %1546 = xor i1 %1545, true
  %1547 = zext i1 %1546 to i32
  %1548 = sext i32 %1547 to i64
  %1549 = call i64 @llvm.expect.i64(i64 %1548, i64 0)
  %1550 = icmp ne i64 %1549, 0
  br i1 %1550, label %1551, label %1553

1551:                                             ; preds = %1538
  %1552 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1552, ptr noundef @.str.48, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1227) #14
  unreachable

1553:                                             ; preds = %1538
  br label %1554

1554:                                             ; preds = %1553
  br label %1555

1555:                                             ; preds = %1554
  br label %1556

1556:                                             ; preds = %1555
  %1557 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1558 = load i32, ptr %1557, align 4, !tbaa !15
  %1559 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 2
  %1560 = load i32, ptr %1559, align 4, !tbaa !37
  %1561 = icmp uge i32 %1558, %1560
  %1562 = xor i1 %1561, true
  %1563 = xor i1 %1562, true
  %1564 = xor i1 %1563, true
  %1565 = zext i1 %1564 to i32
  %1566 = sext i32 %1565 to i64
  %1567 = call i64 @llvm.expect.i64(i64 %1566, i64 0)
  %1568 = icmp ne i64 %1567, 0
  br i1 %1568, label %1569, label %1571

1569:                                             ; preds = %1556
  %1570 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1570, ptr noundef @.str.49, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1228) #14
  unreachable

1571:                                             ; preds = %1556
  br label %1572

1572:                                             ; preds = %1571
  br label %1573

1573:                                             ; preds = %1572
  %1574 = load ptr, ptr %33, align 8, !tbaa !5
  %1575 = call i32 @memcmp(ptr noundef %1574, ptr noundef %34, i64 noundef 20) #15
  %1576 = icmp ne i32 %1575, 0
  br i1 %1576, label %1577, label %1670

1577:                                             ; preds = %1573
  %1578 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1579 = load i32, ptr %1578, align 4, !tbaa !15
  %1580 = load ptr, ptr %33, align 8, !tbaa !5
  %1581 = getelementptr inbounds %struct.geo, ptr %1580, i32 0, i32 4
  %1582 = load i32, ptr %1581, align 4, !tbaa !15
  %1583 = icmp ne i32 %1579, %1582
  br i1 %1583, label %1591, label %1584

1584:                                             ; preds = %1577
  %1585 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  %1586 = load i32, ptr %1585, align 4, !tbaa !38
  %1587 = load ptr, ptr %33, align 8, !tbaa !5
  %1588 = getelementptr inbounds %struct.geo, ptr %1587, i32 0, i32 3
  %1589 = load i32, ptr %1588, align 4, !tbaa !38
  %1590 = icmp ne i32 %1586, %1589
  br i1 %1590, label %1591, label %1611

1591:                                             ; preds = %1584, %1577
  %1592 = load ptr, ptr %9, align 8, !tbaa !5
  %1593 = load ptr, ptr %33, align 8, !tbaa !5
  %1594 = getelementptr inbounds %struct.geo, ptr %1593, i32 0, i32 5
  %1595 = load i32, ptr %1594, align 4, !tbaa !15
  %1596 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1597 = load i32, ptr %1596, align 4, !tbaa !15
  %1598 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  %1599 = load i32, ptr %1598, align 4, !tbaa !38
  %1600 = call i32 @dxb_resize(ptr noundef %1592, i32 noundef %1595, i32 noundef %1597, i32 noundef %1599, i32 noundef 2)
  store i32 %1600, ptr %16, align 4, !tbaa !11
  %1601 = load i32, ptr %16, align 4, !tbaa !11
  %1602 = icmp ne i32 %1601, 0
  %1603 = xor i1 %1602, true
  %1604 = xor i1 %1603, true
  %1605 = zext i1 %1604 to i32
  %1606 = sext i32 %1605 to i64
  %1607 = call i64 @llvm.expect.i64(i64 %1606, i64 0)
  %1608 = icmp ne i64 %1607, 0
  br i1 %1608, label %1609, label %1610

1609:                                             ; preds = %1591
  store i32 6, ptr %17, align 4
  br label %1783

1610:                                             ; preds = %1591
  br label %1611

1611:                                             ; preds = %1610, %1584
  %1612 = load ptr, ptr %9, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct.MDBX_env, ptr %1612, i32 0, i32 39
  %1614 = load ptr, ptr %1613, align 8, !tbaa !30
  %1615 = icmp ne ptr %1614, null
  br i1 %1615, label %1616, label %1627

1616:                                             ; preds = %1611
  %1617 = load ptr, ptr %9, align 8, !tbaa !5
  %1618 = getelementptr inbounds %struct.MDBX_env, ptr %1617, i32 0, i32 39
  %1619 = load ptr, ptr %1618, align 8, !tbaa !30
  %1620 = getelementptr inbounds %struct.MDBX_txn, ptr %1619, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1620, ptr align 4 %34, i64 20, i1 false), !tbaa.struct !58
  %1621 = load ptr, ptr %9, align 8, !tbaa !5
  %1622 = getelementptr inbounds %struct.MDBX_env, ptr %1621, i32 0, i32 39
  %1623 = load ptr, ptr %1622, align 8, !tbaa !30
  %1624 = getelementptr inbounds %struct.MDBX_txn, ptr %1623, i32 0, i32 1
  %1625 = load i32, ptr %1624, align 4, !tbaa !59
  %1626 = or i32 %1625, 4
  store i32 %1626, ptr %1624, align 4, !tbaa !59
  br label %1669

1627:                                             ; preds = %1611
  %1628 = getelementptr inbounds %struct.meta, ptr %29, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1628, ptr align 4 %34, i64 20, i1 false), !tbaa.struct !58
  %1629 = load ptr, ptr %9, align 8, !tbaa !5
  %1630 = load ptr, ptr %9, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct.MDBX_env, ptr %1630, i32 0, i32 1
  %1632 = load i32, ptr %1631, align 4, !tbaa !16
  %1633 = load ptr, ptr %9, align 8, !tbaa !5
  %1634 = getelementptr inbounds %struct.MDBX_env, ptr %1633, i32 0, i32 24
  %1635 = load ptr, ptr %1634, align 8, !tbaa !26
  %1636 = getelementptr inbounds %struct.MDBX_txn, ptr %1635, i32 0, i32 17
  %1637 = getelementptr inbounds %struct.anon.20, ptr %1636, i32 0, i32 0
  %1638 = call i32 @dxb_sync_locked(ptr noundef %1629, i32 noundef %1632, ptr noundef %29, ptr noundef %1637)
  store i32 %1638, ptr %16, align 4, !tbaa !11
  %1639 = load i32, ptr %16, align 4, !tbaa !11
  %1640 = icmp eq i32 %1639, 0
  %1641 = xor i1 %1640, true
  %1642 = xor i1 %1641, true
  %1643 = zext i1 %1642 to i32
  %1644 = sext i32 %1643 to i64
  %1645 = call i64 @llvm.expect.i64(i64 %1644, i64 1)
  %1646 = icmp ne i64 %1645, 0
  br i1 %1646, label %1647, label %1668

1647:                                             ; preds = %1627
  %1648 = load ptr, ptr %9, align 8, !tbaa !5
  %1649 = getelementptr inbounds %struct.meta, ptr %29, i32 0, i32 5
  %1650 = getelementptr inbounds %struct.geo, ptr %1649, i32 0, i32 4
  %1651 = load i32, ptr %1650, align 4, !tbaa !15
  %1652 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  store i32 %1651, ptr %1652, align 4, !tbaa !15
  %1653 = zext i32 %1651 to i64
  %1654 = call i64 @pgno2bytes(ptr noundef %1648, i64 noundef %1653) #15
  %1655 = load ptr, ptr %9, align 8, !tbaa !5
  %1656 = getelementptr inbounds %struct.MDBX_env, ptr %1655, i32 0, i32 35
  %1657 = getelementptr inbounds %struct.anon.6, ptr %1656, i32 0, i32 2
  store i64 %1654, ptr %1657, align 8, !tbaa !48
  %1658 = load ptr, ptr %9, align 8, !tbaa !5
  %1659 = getelementptr inbounds %struct.meta, ptr %29, i32 0, i32 5
  %1660 = getelementptr inbounds %struct.geo, ptr %1659, i32 0, i32 3
  %1661 = load i32, ptr %1660, align 4, !tbaa !60
  %1662 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  store i32 %1661, ptr %1662, align 4, !tbaa !38
  %1663 = zext i32 %1661 to i64
  %1664 = call i64 @pgno2bytes(ptr noundef %1658, i64 noundef %1663) #15
  %1665 = load ptr, ptr %9, align 8, !tbaa !5
  %1666 = getelementptr inbounds %struct.MDBX_env, ptr %1665, i32 0, i32 35
  %1667 = getelementptr inbounds %struct.anon.6, ptr %1666, i32 0, i32 1
  store i64 %1664, ptr %1667, align 8, !tbaa !49
  br label %1668

1668:                                             ; preds = %1647, %1627
  br label %1669

1669:                                             ; preds = %1668, %1616
  br label %1670

1670:                                             ; preds = %1669, %1573
  %1671 = load i32, ptr %16, align 4, !tbaa !11
  %1672 = icmp eq i32 %1671, 0
  %1673 = xor i1 %1672, true
  %1674 = xor i1 %1673, true
  %1675 = zext i1 %1674 to i32
  %1676 = sext i32 %1675 to i64
  %1677 = call i64 @llvm.expect.i64(i64 %1676, i64 1)
  %1678 = icmp ne i64 %1677, 0
  br i1 %1678, label %1679, label %1782

1679:                                             ; preds = %1670
  br label %1680

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

1691:                                             ; preds = %1680
  br label %1692

1692:                                             ; preds = %1691
  %1693 = load ptr, ptr %9, align 8, !tbaa !5
  %1694 = getelementptr inbounds %struct.MDBX_env, ptr %1693, i32 0, i32 35
  %1695 = getelementptr inbounds %struct.anon.6, ptr %1694, i32 0, i32 2
  %1696 = load i64, ptr %1695, align 8, !tbaa !48
  %1697 = load ptr, ptr %9, align 8, !tbaa !5
  %1698 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 4
  %1699 = load i32, ptr %1698, align 4, !tbaa !15
  %1700 = zext i32 %1699 to i64
  %1701 = call i64 @pgno2bytes(ptr noundef %1697, i64 noundef %1700) #15
  %1702 = icmp eq i64 %1696, %1701
  %1703 = xor i1 %1702, true
  %1704 = xor i1 %1703, true
  %1705 = xor i1 %1704, true
  %1706 = zext i1 %1705 to i32
  %1707 = sext i32 %1706 to i64
  %1708 = call i64 @llvm.expect.i64(i64 %1707, i64 0)
  %1709 = icmp ne i64 %1708, 0
  br i1 %1709, label %1710, label %1712

1710:                                             ; preds = %1692
  %1711 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1711, ptr noundef @.str.50, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1282) #14
  unreachable

1712:                                             ; preds = %1692
  br label %1713

1713:                                             ; preds = %1712
  br label %1714

1714:                                             ; preds = %1713
  br label %1715

1715:                                             ; preds = %1714, %1680
  br label %1716

1716:                                             ; preds = %1715
  br label %1717

1717:                                             ; preds = %1716
  %1718 = load ptr, ptr %9, align 8, !tbaa !5
  %1719 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 2
  %1720 = load i32, ptr %1719, align 4, !tbaa !37
  %1721 = zext i32 %1720 to i64
  %1722 = call i64 @pgno2bytes(ptr noundef %1718, i64 noundef %1721) #15
  %1723 = load ptr, ptr %9, align 8, !tbaa !5
  %1724 = getelementptr inbounds %struct.MDBX_env, ptr %1723, i32 0, i32 35
  %1725 = getelementptr inbounds %struct.anon.6, ptr %1724, i32 0, i32 0
  store i64 %1722, ptr %1725, align 8, !tbaa !47
  br label %1726

1726:                                             ; preds = %1717
  %1727 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !28
  %1728 = zext i8 %1727 to i32
  %1729 = and i32 %1728, 1
  %1730 = icmp ne i32 %1729, 0
  %1731 = xor i1 %1730, true
  %1732 = xor i1 %1731, true
  %1733 = zext i1 %1732 to i32
  %1734 = sext i32 %1733 to i64
  %1735 = call i64 @llvm.expect.i64(i64 %1734, i64 1)
  %1736 = icmp ne i64 %1735, 0
  br i1 %1736, label %1737, label %1761

1737:                                             ; preds = %1726
  br label %1738

1738:                                             ; preds = %1737
  %1739 = load ptr, ptr %9, align 8, !tbaa !5
  %1740 = getelementptr inbounds %struct.MDBX_env, ptr %1739, i32 0, i32 35
  %1741 = getelementptr inbounds %struct.anon.6, ptr %1740, i32 0, i32 1
  %1742 = load i64, ptr %1741, align 8, !tbaa !49
  %1743 = load ptr, ptr %9, align 8, !tbaa !5
  %1744 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 3
  %1745 = load i32, ptr %1744, align 4, !tbaa !38
  %1746 = zext i32 %1745 to i64
  %1747 = call i64 @pgno2bytes(ptr noundef %1743, i64 noundef %1746) #15
  %1748 = icmp eq i64 %1742, %1747
  %1749 = xor i1 %1748, true
  %1750 = xor i1 %1749, true
  %1751 = xor i1 %1750, true
  %1752 = zext i1 %1751 to i32
  %1753 = sext i32 %1752 to i64
  %1754 = call i64 @llvm.expect.i64(i64 %1753, i64 0)
  %1755 = icmp ne i64 %1754, 0
  br i1 %1755, label %1756, label %1758

1756:                                             ; preds = %1738
  %1757 = load ptr, ptr %9, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %1757, ptr noundef @.str.51, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1284) #14
  unreachable

1758:                                             ; preds = %1738
  br label %1759

1759:                                             ; preds = %1758
  br label %1760

1760:                                             ; preds = %1759
  br label %1761

1761:                                             ; preds = %1760, %1726
  br label %1762

1762:                                             ; preds = %1761
  br label %1763

1763:                                             ; preds = %1762
  %1764 = load ptr, ptr %9, align 8, !tbaa !5
  %1765 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 0
  %1766 = load i16, ptr %1765, align 4, !tbaa !39
  %1767 = call i32 @pv2pages(i16 noundef zeroext %1766) #16
  %1768 = zext i32 %1767 to i64
  %1769 = call i64 @pgno2bytes(ptr noundef %1764, i64 noundef %1768) #15
  %1770 = load ptr, ptr %9, align 8, !tbaa !5
  %1771 = getelementptr inbounds %struct.MDBX_env, ptr %1770, i32 0, i32 35
  %1772 = getelementptr inbounds %struct.anon.6, ptr %1771, i32 0, i32 3
  store i64 %1769, ptr %1772, align 8, !tbaa !50
  %1773 = load ptr, ptr %9, align 8, !tbaa !5
  %1774 = getelementptr inbounds %struct.geo, ptr %34, i32 0, i32 1
  %1775 = load i16, ptr %1774, align 2, !tbaa !40
  %1776 = call i32 @pv2pages(i16 noundef zeroext %1775) #16
  %1777 = zext i32 %1776 to i64
  %1778 = call i64 @pgno2bytes(ptr noundef %1773, i64 noundef %1777) #15
  %1779 = load ptr, ptr %9, align 8, !tbaa !5
  %1780 = getelementptr inbounds %struct.MDBX_env, ptr %1779, i32 0, i32 35
  %1781 = getelementptr inbounds %struct.anon.6, ptr %1780, i32 0, i32 4
  store i64 %1778, ptr %1781, align 8, !tbaa !51
  br label %1782

1782:                                             ; preds = %1763, %1670
  store i32 0, ptr %17, align 4
  br label %1783

1783:                                             ; preds = %1782, %1609
  call void @llvm.lifetime.end.p0(i64 20, ptr %34) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #13
  br label %1784

1784:                                             ; preds = %1783, %1258
  call void @llvm.lifetime.end.p0(i64 224, ptr %29) #13
  %1785 = load i32, ptr %17, align 4
  switch i32 %1785, label %1796 [
    i32 0, label %1786
    i32 6, label %1788
  ]

1786:                                             ; preds = %1784
  br label %1787

1787:                                             ; preds = %1786, %1166
  br label %1788

1788:                                             ; preds = %1787, %1784, %646, %598, %574, %541, %400, %276
  %1789 = load i8, ptr %19, align 1, !tbaa !13, !range !45, !noundef !46
  %1790 = trunc i8 %1789 to i1
  br i1 %1790, label %1791, label %1793

1791:                                             ; preds = %1788
  %1792 = load ptr, ptr %9, align 8, !tbaa !5
  call void @lck_txn_unlock(ptr noundef %1792)
  br label %1793

1793:                                             ; preds = %1791, %1788
  %1794 = load i32, ptr %16, align 4, !tbaa !11
  %1795 = call i32 @log_if_error(i32 noundef %1794, ptr noundef @__func__.mdbx_env_set_geometry, i32 noundef 1293)
  store i32 %1795, ptr %8, align 4
  store i32 1, ptr %17, align 4
  br label %1796

1796:                                             ; preds = %1793, %1784, %290, %276, %160, %68
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #13
  br label %1797

1797:                                             ; preds = %1796, %45
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #13
  %1798 = load i32, ptr %8, align 4
  ret i32 %1798
}

declare ptr @env_owned_wrtxn(ptr noundef) #3

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

declare zeroext i1 @txn_gc_detent(ptr noundef) #3

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

; Function Attrs: cold nounwind optsize uwtable
declare hidden i64 @reasonable_db_maxsize() #12

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

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

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

declare i32 @coherency_fetch_head(ptr noundef, ptr noundef byval(%struct.meta_ptr) align 8, ptr noundef) #3

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

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

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

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

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

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

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


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

%struct.libmdbx_globals = type { %union.bin128, i32, i32, i8, i8, i8, i8, i32, %union.logger_union, %union.pthread_mutex_t, i64, ptr }
%union.bin128 = type { %struct.anon }
%struct.anon = type { i64, i64 }
%union.logger_union = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.meta_ptr = type { i64, %union.anon.24, i64 }
%union.anon.24 = type { ptr }
%struct.meta = type { [2 x i32], %union.anon.11, i16, i8, i8, %struct.geo, %union.anon.14, %struct.MDBX_canary, %union.anon.17, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon.11 = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon.12, %union.anon.13 }
%union.anon.12 = type { i32 }
%union.anon.13 = type { i32 }
%union.anon.14 = type { %struct.anon.15 }
%struct.anon.15 = type { %struct.tree, %struct.tree }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.17 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@__func__.mdbx_env_set_geometry = external hidden unnamed_addr constant [22 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [58 x i8], align 1

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

; Function Attrs: inlinehint mustprogress nofree nosync nounwind willreturn memory(none) uwtable
declare hidden zeroext i1 @is_powerof2(i64 noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

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

declare void @env_options_adjust_defaults(ptr noundef) local_unnamed_addr #2

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

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

declare void @lck_txn_unlock(ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @mdbx_env_set_geometry(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, i64 noundef %5, i64 noundef %6) local_unnamed_addr #10 {
  %8 = alloca %struct.troika, align 8
  %9 = alloca %struct.meta_ptr, align 8
  %10 = alloca %struct.meta, align 4
  %11 = alloca %struct.meta_ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca %struct.geo, align 4
  %14 = tail call i32 @check_env(ptr noundef %0, i1 noundef zeroext false)
  %.not = icmp eq i32 %14, 0
  br i1 %.not, label %17, label %15, !prof !5

15:                                               ; preds = %7
  %16 = tail call i32 @log_if_error(i32 noundef %14, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 932)
  br label %507

17:                                               ; preds = %7
  %18 = tail call ptr @env_owned_wrtxn(ptr noundef %0) #14
  %19 = getelementptr inbounds i8, ptr %0, i64 16
  %20 = load ptr, ptr %19, align 8, !tbaa !6
  %.not447 = icmp eq ptr %20, null
  br i1 %.not447, label %120, label %21

21:                                               ; preds = %17
  %22 = getelementptr inbounds i8, ptr %0, i64 4
  %23 = load i32, ptr %22, align 4, !tbaa !9
  %24 = and i32 %23, 131072
  %.not450 = icmp eq i32 %24, 0
  br i1 %.not450, label %27, label %25, !prof !5

25:                                               ; preds = %21
  %26 = tail call i32 @log_if_error(i32 noundef 13, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 948)
  br label %507

27:                                               ; preds = %21
  %.not451 = icmp eq ptr %18, null
  br i1 %.not451, label %28, label %54

28:                                               ; preds = %27
  %29 = tail call i32 @lck_txn_lock(ptr noundef nonnull %0, i1 noundef zeroext false) #14
  %.not452 = icmp eq i32 %29, 0
  br i1 %.not452, label %30, label %52, !prof !5

30:                                               ; preds = %28
  %31 = getelementptr inbounds i8, ptr %0, i64 192
  %32 = load ptr, ptr %31, align 8, !tbaa !23
  %33 = getelementptr inbounds i8, ptr %32, i64 168
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #14
  call void @meta_tap(ptr dead_on_unwind nonnull writable sret(%struct.troika) align 8 %8, ptr noundef nonnull %0) #14
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %8, i64 32, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #14
  %34 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !26
  %35 = and i8 %34, 1
  %.not453 = icmp eq i8 %35, 0
  br i1 %.not453, label %..thread_crit_edge, label %36, !prof !28

..thread_crit_edge:                               ; preds = %30
  %.pre = load ptr, ptr %31, align 8, !tbaa !23
  br label %.thread

36:                                               ; preds = %30
  %37 = getelementptr inbounds i8, ptr %0, i64 384
  %38 = load ptr, ptr %37, align 8, !tbaa !29
  %.not454 = icmp eq ptr %38, null
  br i1 %.not454, label %39, label %.critedge, !prof !5

39:                                               ; preds = %36
  %40 = load ptr, ptr %31, align 8, !tbaa !23
  %41 = getelementptr inbounds i8, ptr %40, i64 32
  %42 = load ptr, ptr %41, align 8, !tbaa !30
  %.not455 = icmp eq ptr %42, null
  br i1 %.not455, label %.thread, label %.critedge, !prof !5

.critedge:                                        ; preds = %36, %39
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.17, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 956) #15
  unreachable

.thread:                                          ; preds = %..thread_crit_edge, %39
  %43 = phi ptr [ %.pre, %..thread_crit_edge ], [ %40, %39 ]
  %44 = getelementptr inbounds i8, ptr %43, i64 176
  %45 = getelementptr inbounds i8, ptr %43, i64 169
  %46 = load i8, ptr %45, align 1, !tbaa !6
  %47 = zext i8 %46 to i64
  %48 = getelementptr inbounds [3 x i64], ptr %44, i64 0, i64 %47
  %49 = load i64, ptr %48, align 8, !tbaa !6
  %50 = getelementptr inbounds i8, ptr %43, i64 64
  store i64 %49, ptr %50, align 8, !tbaa !34
  %51 = call zeroext i1 @txn_gc_detent(ptr noundef %43) #14
  br label %54

52:                                               ; preds = %28
  %53 = tail call i32 @log_if_error(i32 noundef %29, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 953)
  br label %507

54:                                               ; preds = %.thread, %27
  %55 = add i64 %6, -2147483647
  %or.cond = icmp ult i64 %55, -2147483646
  br i1 %or.cond, label %56, label %60

56:                                               ; preds = %54
  %57 = getelementptr inbounds i8, ptr %0, i64 8
  %58 = load i32, ptr %57, align 8, !tbaa !35
  %59 = zext i32 %58 to i64
  br label %60

60:                                               ; preds = %54, %56
  %.0396 = phi i64 [ %59, %56 ], [ %6, %54 ]
  %61 = getelementptr inbounds i8, ptr %0, i64 384
  %62 = load ptr, ptr %61, align 8, !tbaa !29
  %.not456 = icmp eq ptr %62, null
  br i1 %.not456, label %65, label %63

63:                                               ; preds = %60
  %64 = getelementptr inbounds i8, ptr %62, i64 40
  br label %72

65:                                               ; preds = %60
  %66 = getelementptr inbounds i8, ptr %0, i64 192
  %67 = load ptr, ptr %66, align 8, !tbaa !23
  %68 = getelementptr inbounds i8, ptr %67, i64 168
  call void @meta_recent(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %9, ptr noundef nonnull %0, ptr noundef nonnull %68)
  %69 = getelementptr inbounds i8, ptr %9, i64 8
  %70 = load ptr, ptr %69, align 8, !tbaa !6
  %71 = getelementptr inbounds i8, ptr %70, i64 20
  br label %72

72:                                               ; preds = %65, %63
  %73 = phi ptr [ %64, %63 ], [ %71, %65 ]
  %74 = icmp slt i64 %1, 0
  br i1 %74, label %75, label %80

75:                                               ; preds = %72
  %76 = getelementptr inbounds i8, ptr %73, i64 4
  %77 = load i32, ptr %76, align 4, !tbaa !36
  %78 = zext i32 %77 to i64
  %79 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %78) #16
  br label %80

80:                                               ; preds = %75, %72
  %.0369 = phi i64 [ %79, %75 ], [ %1, %72 ]
  %81 = icmp slt i64 %2, 0
  br i1 %81, label %82, label %87

82:                                               ; preds = %80
  %83 = getelementptr inbounds i8, ptr %73, i64 12
  %84 = load i32, ptr %83, align 4, !tbaa !6
  %85 = zext i32 %84 to i64
  %86 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %85) #16
  br label %87

87:                                               ; preds = %82, %80
  %.0374 = phi i64 [ %86, %82 ], [ %2, %80 ]
  %88 = icmp slt i64 %3, 0
  br i1 %88, label %89, label %94

89:                                               ; preds = %87
  %90 = getelementptr inbounds i8, ptr %73, i64 8
  %91 = load i32, ptr %90, align 4, !tbaa !37
  %92 = zext i32 %91 to i64
  %93 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %92) #16
  br label %94

94:                                               ; preds = %89, %87
  %.0381 = phi i64 [ %93, %89 ], [ %3, %87 ]
  %95 = icmp slt i64 %4, 0
  br i1 %95, label %96, label %101

96:                                               ; preds = %94
  %97 = load i16, ptr %73, align 4, !tbaa !38
  %98 = call i32 @pv2pages(i16 noundef zeroext %97) #17
  %99 = zext i32 %98 to i64
  %100 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %99) #16
  br label %101

101:                                              ; preds = %96, %94
  %.0386 = phi i64 [ %100, %96 ], [ %4, %94 ]
  %102 = icmp slt i64 %5, 0
  br i1 %102, label %103, label %109

103:                                              ; preds = %101
  %104 = getelementptr inbounds i8, ptr %73, i64 2
  %105 = load i16, ptr %104, align 2, !tbaa !39
  %106 = call i32 @pv2pages(i16 noundef zeroext %105) #17
  %107 = zext i32 %106 to i64
  %108 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %107) #16
  br label %109

109:                                              ; preds = %103, %101
  %.0393 = phi i64 [ %108, %103 ], [ %5, %101 ]
  %110 = getelementptr inbounds i8, ptr %0, i64 8
  %111 = load i32, ptr %110, align 8, !tbaa !35
  %112 = zext i32 %111 to i64
  %.not457 = icmp eq i64 %.0396, %112
  br i1 %.not457, label %113, label %.critedge509

113:                                              ; preds = %109
  %114 = getelementptr inbounds i8, ptr %73, i64 16
  %115 = load i32, ptr %114, align 4, !tbaa !6
  %116 = call i32 @mvcc_snapshot_largest(ptr noundef nonnull %0, i32 noundef %115) #14
  %117 = zext i32 %116 to i64
  %118 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %117) #16
  %119 = icmp ult i64 %.0381, %118
  %spec.select = call i64 @llvm.umax.i64(i64 %.0374, i64 %118)
  br i1 %119, label %.critedge509, label %.loopexit

120:                                              ; preds = %17
  %121 = getelementptr inbounds i8, ptr %0, i64 384
  %122 = load ptr, ptr %121, align 8, !tbaa !29
  %.not448 = icmp eq ptr %122, null
  br i1 %.not448, label %125, label %123, !prof !5

123:                                              ; preds = %120
  %124 = tail call i32 @log_if_error(i32 noundef -30795, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 990)
  br label %507

125:                                              ; preds = %120
  %126 = icmp sgt i64 %6, 2147483646
  br i1 %126, label %.thread525, label %127

127:                                              ; preds = %125
  %128 = icmp slt i64 %6, 1
  br i1 %128, label %129, label %.loopexit

129:                                              ; preds = %127
  %130 = icmp slt i64 %6, 0
  br i1 %130, label %131, label %138

131:                                              ; preds = %129
  %132 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8, !tbaa !40
  %133 = tail call i32 @llvm.umin.i32(i32 %132, i32 65536)
  %134 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !26
  %135 = and i8 %134, 1
  %.not449 = icmp ne i8 %135, 0
  %136 = icmp ult i32 %132, 256
  %or.cond499 = select i1 %.not449, i1 %136, i1 false
  br i1 %or.cond499, label %137, label %138, !prof !41

137:                                              ; preds = %131
  tail call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.18, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1000) #15
  unreachable

138:                                              ; preds = %129, %131
  %.1397.shrunk = phi i32 [ %133, %131 ], [ 256, %129 ]
  %.1397 = zext nneg i32 %.1397.shrunk to i64
  %139 = tail call i64 @llvm.smax.i64(i64 %2, i64 %1)
  %spec.select500 = tail call i64 @llvm.smax.i64(i64 %139, i64 %3)
  %140 = icmp slt i64 %spec.select500, 0
  br i1 %140, label %141, label %143

141:                                              ; preds = %138
  %142 = tail call i64 @reasonable_db_maxsize() #18
  br label %147

143:                                              ; preds = %138
  %144 = icmp eq i64 %spec.select500, 0
  br i1 %144, label %147, label %145

145:                                              ; preds = %143
  %146 = tail call i64 @llvm.umin.i64(i64 %spec.select500, i64 140737488355328)
  br label %147

147:                                              ; preds = %143, %145, %141
  %.1392 = phi i64 [ %142, %141 ], [ %146, %145 ], [ 768, %143 ]
  br label %148

148:                                              ; preds = %148, %147
  %.2398 = phi i64 [ %.1397, %147 ], [ %153, %148 ]
  %149 = shl nuw nsw i64 %.2398, 31
  %150 = icmp sgt i64 %.1392, %149
  %151 = icmp ult i64 %.2398, 65536
  %152 = and i1 %151, %150
  %153 = shl nuw nsw i64 %.2398, 1
  br i1 %152, label %148, label %.loopexit, !llvm.loop !42

.loopexit:                                        ; preds = %148, %113, %127
  %.2412 = phi i1 [ false, %127 ], [ %.not451, %113 ], [ false, %148 ]
  %.3399 = phi i64 [ %6, %127 ], [ %.0396, %113 ], [ %.2398, %148 ]
  %.1394 = phi i64 [ %5, %127 ], [ %.0393, %113 ], [ %5, %148 ]
  %.1387 = phi i64 [ %4, %127 ], [ %.0386, %113 ], [ %4, %148 ]
  %.1382 = phi i64 [ %3, %127 ], [ %.0381, %113 ], [ %3, %148 ]
  %.4378 = phi i64 [ %2, %127 ], [ %spec.select, %113 ], [ %2, %148 ]
  %.1370 = phi i64 [ %1, %127 ], [ %.0369, %113 ], [ %1, %148 ]
  %154 = add nsw i64 %.3399, -65537
  %or.cond6 = icmp ult i64 %154, -65281
  br i1 %or.cond6, label %.critedge509, label %.thread525

.thread525:                                       ; preds = %125, %.loopexit
  %.1370543 = phi i64 [ %.1370, %.loopexit ], [ %1, %125 ]
  %.4378542 = phi i64 [ %.4378, %.loopexit ], [ %2, %125 ]
  %.1382541 = phi i64 [ %.1382, %.loopexit ], [ %3, %125 ]
  %.1387540 = phi i64 [ %.1387, %.loopexit ], [ %4, %125 ]
  %.1394539 = phi i64 [ %.1394, %.loopexit ], [ %5, %125 ]
  %.3399538 = phi i64 [ %.3399, %.loopexit ], [ 65536, %125 ]
  %.2412536 = phi i1 [ %.2412, %.loopexit ], [ false, %125 ]
  %155 = call zeroext i1 @is_powerof2(i64 noundef %.3399538) #17
  br i1 %155, label %156, label %.critedge509

156:                                              ; preds = %.thread525
  %157 = icmp slt i64 %.1370543, 0
  %158 = icmp slt i64 %.1370543, 1
  br i1 %158, label %.thread545, label %165

.thread545:                                       ; preds = %156
  %159 = icmp eq i64 %.1370543, 0
  %160 = shl nuw nsw i64 %.3399538, 6
  %161 = select i1 %159, i64 768, i64 %160
  %.lhs.trunc = trunc i64 %161 to i32
  %.rhs.trunc = trunc i64 %.3399538 to i32
  %162 = udiv i32 %.lhs.trunc, %.rhs.trunc
  %163 = icmp ult i32 %162, 3
  %164 = mul nuw nsw i64 %.3399538, 3
  %spec.select501 = select i1 %163, i64 %164, i64 %161
  br label %172

165:                                              ; preds = %156
  %166 = icmp eq i64 %.1370543, 9223372036854775807
  br i1 %166, label %167, label %172

167:                                              ; preds = %165
  %168 = call i64 @reasonable_db_maxsize() #18
  %169 = udiv i64 %168, %.3399538
  %170 = icmp ugt i64 %169, 2147483648
  %171 = shl nuw nsw i64 %.3399538, 31
  %spec.select502 = select i1 %170, i64 %171, i64 %168
  br label %172

172:                                              ; preds = %.thread545, %167, %165
  %.3372 = phi i64 [ %.1370543, %165 ], [ %spec.select502, %167 ], [ %spec.select501, %.thread545 ]
  %173 = icmp eq i64 %.4378542, 9223372036854775807
  br i1 %173, label %174, label %179

174:                                              ; preds = %172
  %175 = call i64 @reasonable_db_maxsize() #18
  %176 = udiv i64 %175, %.3399538
  %177 = icmp ugt i64 %176, 2147483648
  %178 = shl nuw nsw i64 %.3399538, 31
  %spec.select503 = select i1 %177, i64 %178, i64 %175
  br label %179

179:                                              ; preds = %174, %172
  %.5379 = phi i64 [ %.4378542, %172 ], [ %spec.select503, %174 ]
  %180 = icmp slt i64 %.1382541, 1
  br i1 %180, label %181, label %200

181:                                              ; preds = %179
  %182 = icmp ne i64 %.1387540, 0
  %183 = icmp ne i64 %.1382541, 0
  %or.cond8.not568 = select i1 %182, i1 %183, i1 false
  %.not458 = icmp slt i64 %.5379, %.3372
  %or.cond504 = select i1 %or.cond8.not568, i1 true, i1 %.not458
  br i1 %or.cond504, label %184, label %.sink.split

184:                                              ; preds = %181
  %185 = icmp slt i64 %.5379, 1
  br i1 %185, label %189, label %186

186:                                              ; preds = %184
  %187 = call i64 @reasonable_db_maxsize() #18
  %188 = sdiv i64 %187, 2
  %.not459 = icmp slt i64 %.5379, %188
  br i1 %.not459, label %191, label %189

189:                                              ; preds = %186, %184
  %190 = call i64 @reasonable_db_maxsize() #18
  br label %.sink.split

191:                                              ; preds = %186
  %192 = add nsw i64 %.5379, -1065353216
  %or.cond10 = icmp ult i64 %192, 532676609
  br i1 %or.cond10, label %.sink.split, label %193

193:                                              ; preds = %191
  %194 = icmp ult i64 %.5379, 35184372088832
  %195 = shl nuw nsw i64 %.5379, 1
  %196 = lshr i64 %.5379, 1
  %197 = add nuw nsw i64 %196, %.5379
  %198 = select i1 %194, i64 %195, i64 %197
  %199 = call i64 @ceil_powerof2(i64 noundef %198, i64 noundef 134217728) #17
  %spec.store.select11 = call i64 @llvm.umin.i64(i64 %199, i64 140737488355328)
  br label %.sink.split

200:                                              ; preds = %179
  %201 = icmp eq i64 %.1382541, 9223372036854775807
  br i1 %201, label %202, label %207

202:                                              ; preds = %200
  %203 = call i64 @reasonable_db_maxsize() #18
  br label %.sink.split

.sink.split:                                      ; preds = %193, %189, %181, %191, %202
  %.sink = phi i64 [ %203, %202 ], [ %190, %189 ], [ %spec.store.select11, %193 ], [ %.5379, %181 ], [ 2130706432, %191 ]
  %204 = udiv i64 %.sink, %.3399538
  %205 = icmp ugt i64 %204, 2147483648
  %206 = shl nuw nsw i64 %.3399538, 31
  %spec.select506 = select i1 %205, i64 %206, i64 %.sink
  br label %207

207:                                              ; preds = %.sink.split, %200
  %.3384 = phi i64 [ %.1382541, %200 ], [ %spec.select506, %.sink.split ]
  %208 = icmp slt i64 %.3372, 768
  %209 = icmp sgt i64 %.3372, %.3384
  %210 = select i1 %208, i1 true, i1 %209, !prof !28
  br i1 %210, label %.critedge509, label %211, !prof !28

211:                                              ; preds = %207
  %212 = icmp slt i64 %.5379, 1
  %.6380 = select i1 %212, i64 %.3372, i64 %.5379
  %213 = udiv i64 %.3372, %.3399538
  %214 = icmp ult i64 %213, 3
  br i1 %214, label %215, label %219

215:                                              ; preds = %211
  %216 = mul nuw nsw i64 %.3399538, 3
  %217 = icmp sgt i64 %216, %.3384
  br i1 %217, label %.critedge509, label %218, !prof !28

218:                                              ; preds = %215
  %spec.select507 = call i64 @llvm.smax.i64(i64 %.6380, i64 %216)
  br label %219

219:                                              ; preds = %218, %211
  %.7 = phi i64 [ %.6380, %211 ], [ %spec.select507, %218 ]
  %.4373 = phi i64 [ %.3372, %211 ], [ %216, %218 ]
  %220 = icmp ugt i64 %.3384, 140737488355328
  br i1 %220, label %.critedge509, label %221, !prof !28

221:                                              ; preds = %219
  %222 = udiv i64 %.3384, %.3399538
  %223 = icmp ugt i64 %222, 2147483648
  br i1 %223, label %.critedge509, label %224, !prof !28

224:                                              ; preds = %221
  %225 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8
  %226 = zext i32 %225 to i64
  %227 = call i64 @llvm.umax.i64(i64 %.3399538, i64 %226)
  %228 = call i64 @ceil_powerof2(i64 noundef %.4373, i64 noundef %227) #17
  %229 = call i64 @ceil_powerof2(i64 noundef %.3384, i64 noundef %227) #17
  %230 = call i64 @ceil_powerof2(i64 noundef %.7, i64 noundef %227) #17
  %231 = add nuw nsw i64 %227, 768
  %232 = shl nuw nsw i64 %.3399538, 2
  %invariant.umax = call i64 @llvm.umax.i64(i64 %231, i64 %232)
  br label %233

233:                                              ; preds = %238, %224
  %.4385 = phi i64 [ %229, %224 ], [ %239, %238 ]
  %.5 = phi i64 [ %228, %224 ], [ %spec.select514, %238 ]
  %234 = icmp ugt i64 %.4385, 140737488355328
  br i1 %234, label %.critedge511, label %235, !prof !28

235:                                              ; preds = %233
  %236 = udiv i64 %.4385, %.3399538
  %237 = icmp ugt i64 %236, 2147483648
  br i1 %237, label %.critedge511, label %240, !prof !28

.critedge511:                                     ; preds = %233, %235
  %or.cond513 = icmp ult i64 %.4385, %invariant.umax
  br i1 %or.cond513, label %.critedge509, label %238

238:                                              ; preds = %.critedge511
  %239 = sub i64 %.4385, %227
  %spec.select514 = call i64 @llvm.umin.i64(i64 %239, i64 %.5)
  br label %233, !llvm.loop !44

240:                                              ; preds = %235
  %241 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !26
  %242 = and i8 %241, 1
  %.not461 = icmp eq i8 %242, 0
  br i1 %.not461, label %247, label %243, !prof !28

243:                                              ; preds = %240
  %244 = sub nsw i64 %.4385, %.5
  %245 = srem i64 %244, %226
  %.not462 = icmp eq i64 %245, 0
  br i1 %.not462, label %247, label %246, !prof !5

246:                                              ; preds = %243
  call void @mdbx_assert_fail(ptr noundef %0, ptr noundef nonnull @.str.19, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1110) #15
  unreachable

247:                                              ; preds = %243, %240
  %spec.select515 = call i64 @llvm.smax.i64(i64 %230, i64 %.5)
  %.9 = call i64 @llvm.smin.i64(i64 %spec.select515, i64 %.4385)
  %248 = icmp slt i64 %.1387540, 0
  br i1 %248, label %249, label %263

249:                                              ; preds = %247
  %250 = sub nsw i64 %.4385, %.5
  %251 = udiv i64 %250, 42
  br i1 %157, label %255, label %252

252:                                              ; preds = %249
  %253 = icmp sgt i64 %251, %.5
  %254 = icmp slt i64 %.5, 1048576
  %or.cond13 = and i1 %254, %253
  br i1 %or.cond13, label %259, label %255

255:                                              ; preds = %252, %249
  %256 = sdiv i64 %251, %.5
  %257 = icmp sgt i64 %256, 64
  %258 = shl i64 %.5, 6
  %spec.select516 = select i1 %257, i64 %258, i64 %251
  br label %259

259:                                              ; preds = %255, %252
  %.2388 = phi i64 [ %.5, %252 ], [ %spec.select516, %255 ]
  %spec.store.select14 = call i64 @llvm.smax.i64(i64 %.2388, i64 65536)
  %260 = sdiv i64 %250, %spec.store.select14
  %261 = icmp sgt i64 %260, 65536
  %262 = ashr i64 %250, 16
  %spec.select517 = select i1 %261, i64 %262, i64 %spec.store.select14
  %spec.store.select15 = call i64 @llvm.smin.i64(i64 %spec.select517, i64 4294967296)
  br label %263

263:                                              ; preds = %259, %247
  %.4390 = phi i64 [ %spec.store.select15, %259 ], [ %.1387540, %247 ]
  %264 = icmp eq i64 %.4390, 0
  %265 = icmp sgt i64 %.1394539, 0
  %or.cond17 = select i1 %264, i1 %265, i1 false
  %spec.store.select18 = select i1 %or.cond17, i64 1, i64 %.4390
  %266 = call i64 @ceil_powerof2(i64 noundef %spec.store.select18, i64 noundef %227) #17
  %267 = icmp slt i64 %.1394539, 0
  %268 = shl nsw i64 %266, 1
  %spec.select518 = select i1 %267, i64 %268, i64 %.1394539
  %269 = call i64 @ceil_powerof2(i64 noundef %spec.select518, i64 noundef %227) #17
  %270 = load ptr, ptr %19, align 8, !tbaa !6
  %.not463 = icmp eq ptr %270, null
  %271 = getelementptr inbounds i8, ptr %0, i64 8
  %272 = load i32, ptr %271, align 8, !tbaa !35
  %273 = zext i32 %272 to i64
  %.not464 = icmp eq i64 %.3399538, %273
  br i1 %.not463, label %274, label %349

274:                                              ; preds = %263
  br i1 %.not464, label %277, label %275

275:                                              ; preds = %274
  %276 = call i32 @env_setup_pagesize(ptr noundef nonnull %0, i64 noundef %.3399538) #14
  br label %277

277:                                              ; preds = %275, %274
  %278 = getelementptr inbounds i8, ptr %0, i64 320
  store i64 %.5, ptr %278, align 8, !tbaa !45
  %279 = getelementptr inbounds i8, ptr %0, i64 336
  store i64 %.9, ptr %279, align 8, !tbaa !46
  %280 = getelementptr inbounds i8, ptr %0, i64 328
  store i64 %.4385, ptr %280, align 8, !tbaa !47
  %281 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %266) #16
  %282 = zext i32 %281 to i64
  %283 = call zeroext i16 @pages2pv(i64 noundef %282) #17
  %284 = call i32 @pv2pages(i16 noundef zeroext %283) #17
  %285 = zext i32 %284 to i64
  %286 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %285) #16
  %287 = getelementptr inbounds i8, ptr %0, i64 344
  store i64 %286, ptr %287, align 8, !tbaa !48
  %288 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %269) #16
  %289 = zext i32 %288 to i64
  %290 = call zeroext i16 @pages2pv(i64 noundef %289) #17
  %291 = call i32 @pv2pages(i16 noundef zeroext %290) #17
  %292 = zext i32 %291 to i64
  %293 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %292) #16
  %294 = getelementptr inbounds i8, ptr %0, i64 352
  store i64 %293, ptr %294, align 8, !tbaa !49
  call void @env_options_adjust_defaults(ptr noundef nonnull %0) #14
  %295 = load i64, ptr %278, align 8, !tbaa !45
  %296 = icmp ult i64 %295, 768
  br i1 %296, label %297, label %298, !prof !28

297:                                              ; preds = %277
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.20, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1152) #15
  unreachable

298:                                              ; preds = %277
  %299 = udiv i64 %295, %.3399538
  %300 = urem i64 %295, %.3399538
  %301 = icmp ult i64 %299, 3
  br i1 %301, label %302, label %303, !prof !28

302:                                              ; preds = %298
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.21, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1153) #15
  unreachable

303:                                              ; preds = %298
  %.not465 = icmp eq i64 %300, 0
  br i1 %.not465, label %305, label %304, !prof !5

304:                                              ; preds = %303
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.22, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1154) #15
  unreachable

305:                                              ; preds = %303
  %306 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8, !tbaa !40
  %307 = zext i32 %306 to i64
  %308 = urem i64 %295, %307
  %.not466 = icmp eq i64 %308, 0
  br i1 %.not466, label %310, label %309, !prof !5

309:                                              ; preds = %305
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.23, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1155) #15
  unreachable

310:                                              ; preds = %305
  %311 = load i64, ptr %280, align 8, !tbaa !47
  %312 = icmp ugt i64 %311, 140737488355328
  br i1 %312, label %313, label %314, !prof !28

313:                                              ; preds = %310
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.24, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1157) #15
  unreachable

314:                                              ; preds = %310
  %315 = udiv i64 %311, %.3399538
  %316 = urem i64 %311, %.3399538
  %317 = icmp ugt i64 %315, 2147483648
  br i1 %317, label %318, label %319, !prof !28

318:                                              ; preds = %314
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.25, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1158) #15
  unreachable

319:                                              ; preds = %314
  %.not467 = icmp eq i64 %316, 0
  br i1 %.not467, label %321, label %320, !prof !5

320:                                              ; preds = %319
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.26, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1159) #15
  unreachable

321:                                              ; preds = %319
  %322 = urem i64 %311, %307
  %.not468 = icmp eq i64 %322, 0
  br i1 %.not468, label %324, label %323, !prof !5

323:                                              ; preds = %321
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.27, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1160) #15
  unreachable

324:                                              ; preds = %321
  %325 = load i64, ptr %279, align 8, !tbaa !46
  %.not469 = icmp ult i64 %325, %295
  br i1 %.not469, label %326, label %327, !prof !28

326:                                              ; preds = %324
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.28, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1162) #15
  unreachable

327:                                              ; preds = %324
  %.not470 = icmp ugt i64 %325, %311
  br i1 %.not470, label %328, label %329, !prof !28

328:                                              ; preds = %327
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.29, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1163) #15
  unreachable

329:                                              ; preds = %327
  %330 = urem i64 %325, %.3399538
  %.not471 = icmp eq i64 %330, 0
  br i1 %.not471, label %332, label %331, !prof !5

331:                                              ; preds = %329
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.30, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1164) #15
  unreachable

332:                                              ; preds = %329
  %333 = urem i64 %325, %307
  %.not472 = icmp eq i64 %333, 0
  br i1 %.not472, label %335, label %334, !prof !5

334:                                              ; preds = %332
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.31, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1165) #15
  unreachable

335:                                              ; preds = %332
  %336 = load i64, ptr %287, align 8, !tbaa !48
  %337 = urem i64 %336, %.3399538
  %.not473 = icmp eq i64 %337, 0
  br i1 %.not473, label %339, label %338, !prof !5

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

339:                                              ; preds = %335
  %340 = urem i64 %336, %307
  %.not474 = icmp eq i64 %340, 0
  br i1 %.not474, label %342, label %341, !prof !5

341:                                              ; preds = %339
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.33, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1168) #15
  unreachable

342:                                              ; preds = %339
  %343 = load i64, ptr %294, align 8, !tbaa !49
  %344 = urem i64 %343, %.3399538
  %.not475 = icmp eq i64 %344, 0
  br i1 %.not475, label %346, label %345, !prof !5

345:                                              ; preds = %342
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.34, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1169) #15
  unreachable

346:                                              ; preds = %342
  %347 = urem i64 %343, %307
  %.not476 = icmp eq i64 %347, 0
  br i1 %.not476, label %.critedge509, label %348, !prof !5

348:                                              ; preds = %346
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.35, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1170) #15
  unreachable

349:                                              ; preds = %263
  br i1 %.not464, label %351, label %350, !prof !5

350:                                              ; preds = %349
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.36, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1175) #15
  unreachable

351:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %10) #14
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(224) %10, i8 0, i64 224, i1 false)
  %352 = getelementptr inbounds i8, ptr %0, i64 384
  %353 = load ptr, ptr %352, align 8, !tbaa !29
  %.not478 = icmp eq ptr %353, null
  br i1 %.not478, label %354, label %.thread552

354:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #14
  %355 = getelementptr inbounds i8, ptr %0, i64 192
  %356 = load ptr, ptr %355, align 8, !tbaa !23
  %357 = getelementptr inbounds i8, ptr %356, i64 168
  call void @meta_recent(ptr dead_on_unwind nonnull writable sret(%struct.meta_ptr) align 8 %11, ptr noundef nonnull %0, ptr noundef nonnull %357)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #14
  store i64 0, ptr %12, align 8, !tbaa !50
  br label %358

358:                                              ; preds = %358, %354
  %359 = load ptr, ptr %355, align 8, !tbaa !23
  %360 = call i32 @coherency_fetch_head(ptr noundef %359, ptr noundef nonnull byval(%struct.meta_ptr) align 8 %11, ptr noundef nonnull %12) #14
  switch i32 %360, label %.thread562 [
    i32 0, label %361
    i32 -1, label %358
  ], !prof !51

361:                                              ; preds = %358
  %362 = getelementptr inbounds i8, ptr %11, i64 8
  %363 = load ptr, ptr %362, align 8, !tbaa !6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(224) %10, ptr noundef nonnull align 4 dereferenceable(224) %363, i64 224, i1 false), !tbaa.struct !52
  %364 = load i64, ptr %11, align 8, !tbaa !54
  %365 = call i64 @safe64_txnid_next(i64 noundef %364)
  %366 = icmp ugt i64 %365, -4294967297
  br i1 %366, label %367, label %370, !prof !28

367:                                              ; preds = %361
  %368 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !56
  %.not480 = icmp eq i8 %368, 0
  br i1 %.not480, label %.thread562, label %369, !prof !5

369:                                              ; preds = %367
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1194, ptr noundef nonnull @.str.2, i32 noundef -30788) #14
  br label %.thread562

.thread562:                                       ; preds = %358, %367, %369
  %.4404.ph = phi i32 [ -30788, %367 ], [ -30788, %369 ], [ %360, %358 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #14
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %10) #14
  br i1 %.2412536, label %504, label %505

370:                                              ; preds = %361
  call void @meta_set_txnid(ptr noundef nonnull %0, ptr noundef nonnull %10, i64 noundef %365)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #14
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #14
  %.pr = load ptr, ptr %352, align 8, !tbaa !29
  %.not481 = icmp eq ptr %.pr, null
  br i1 %.not481, label %371, label %.thread552

371:                                              ; preds = %370
  %372 = load ptr, ptr %355, align 8, !tbaa !23
  br label %.thread552

.thread552:                                       ; preds = %351, %370, %371
  %373 = phi ptr [ null, %371 ], [ %.pr, %370 ], [ %353, %351 ]
  %374 = phi ptr [ %372, %371 ], [ %.pr, %370 ], [ %353, %351 ]
  %375 = getelementptr inbounds i8, ptr %374, i64 40
  %376 = getelementptr inbounds i8, ptr %374, i64 52
  %377 = load i32, ptr %376, align 4, !tbaa !6
  %378 = zext i32 %377 to i64
  %379 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %378) #16
  %380 = getelementptr inbounds i8, ptr %0, i64 320
  %381 = getelementptr inbounds i8, ptr %0, i64 336
  store i64 %379, ptr %381, align 8, !tbaa !46
  %382 = getelementptr inbounds i8, ptr %374, i64 44
  %383 = load i32, ptr %382, align 4, !tbaa !36
  %384 = zext i32 %383 to i64
  %385 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %384) #16
  store i64 %385, ptr %380, align 8, !tbaa !45
  %386 = getelementptr inbounds i8, ptr %374, i64 48
  %387 = load i32, ptr %386, align 4, !tbaa !37
  %388 = zext i32 %387 to i64
  %389 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %388) #16
  %390 = getelementptr inbounds i8, ptr %0, i64 328
  store i64 %389, ptr %390, align 8, !tbaa !47
  %391 = load i16, ptr %375, align 4, !tbaa !38
  %392 = call i32 @pv2pages(i16 noundef zeroext %391) #17
  %393 = zext i32 %392 to i64
  %394 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %393) #16
  %395 = getelementptr inbounds i8, ptr %0, i64 344
  store i64 %394, ptr %395, align 8, !tbaa !48
  %396 = getelementptr inbounds i8, ptr %374, i64 42
  %397 = load i16, ptr %396, align 2, !tbaa !39
  %398 = call i32 @pv2pages(i16 noundef zeroext %397) #17
  %399 = zext i32 %398 to i64
  %400 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %399) #16
  %401 = getelementptr inbounds i8, ptr %0, i64 352
  store i64 %400, ptr %401, align 8, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %13) #14
  %402 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %.5) #16
  %403 = getelementptr inbounds i8, ptr %13, i64 4
  store i32 %402, ptr %403, align 4, !tbaa !36
  %404 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %.9) #16
  %405 = getelementptr inbounds i8, ptr %13, i64 12
  store i32 %404, ptr %405, align 4, !tbaa !6
  %406 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %.4385) #16
  %407 = getelementptr inbounds i8, ptr %13, i64 8
  store i32 %406, ptr %407, align 4, !tbaa !37
  %408 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %266) #16
  %409 = zext i32 %408 to i64
  %410 = call zeroext i16 @pages2pv(i64 noundef %409) #17
  store i16 %410, ptr %13, align 4, !tbaa !38
  %411 = call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %269) #16
  %412 = zext i32 %411 to i64
  %413 = call zeroext i16 @pages2pv(i64 noundef %412) #17
  %414 = getelementptr inbounds i8, ptr %13, i64 2
  store i16 %413, ptr %414, align 2, !tbaa !39
  %415 = getelementptr inbounds i8, ptr %374, i64 56
  %416 = load i32, ptr %415, align 4, !tbaa !6
  %417 = getelementptr inbounds i8, ptr %13, i64 16
  store i32 %416, ptr %417, align 4, !tbaa !6
  %418 = zext i32 %402 to i64
  %419 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %418) #16
  %.not482 = icmp eq i64 %419, %.5
  br i1 %.not482, label %421, label %420, !prof !5

420:                                              ; preds = %.thread552
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.38, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1216) #15
  unreachable

421:                                              ; preds = %.thread552
  %422 = zext i32 %406 to i64
  %423 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %422) #16
  %.not483 = icmp eq i64 %423, %.4385
  br i1 %.not483, label %425, label %424, !prof !5

424:                                              ; preds = %421
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.39, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1217) #15
  unreachable

425:                                              ; preds = %421
  %426 = zext i32 %404 to i64
  %427 = call i64 @pgno_align2os_bytes(ptr noundef nonnull %0, i64 noundef %426) #16
  %.not484 = icmp eq i64 %427, %.9
  br i1 %.not484, label %429, label %428, !prof !5

428:                                              ; preds = %425
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.40, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1218) #15
  unreachable

429:                                              ; preds = %425
  %430 = call i32 @pv2pages(i16 noundef zeroext %410) #17
  %431 = zext i32 %430 to i64
  %432 = call zeroext i16 @pages2pv(i64 noundef %431) #17
  %.not485 = icmp eq i16 %410, %432
  br i1 %.not485, label %434, label %433, !prof !5

433:                                              ; preds = %429
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.41, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1219) #15
  unreachable

434:                                              ; preds = %429
  %435 = call i32 @pv2pages(i16 noundef zeroext %413) #17
  %436 = zext i32 %435 to i64
  %437 = call zeroext i16 @pages2pv(i64 noundef %436) #17
  %.not486 = icmp eq i16 %413, %437
  br i1 %.not486, label %439, label %438, !prof !5

438:                                              ; preds = %434
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.42, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1220) #15
  unreachable

439:                                              ; preds = %434
  %440 = icmp ult i64 %.5, 768
  br i1 %440, label %441, label %442, !prof !28

441:                                              ; preds = %439
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.43, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1222) #15
  unreachable

442:                                              ; preds = %439
  %443 = icmp ult i32 %402, 3
  br i1 %443, label %444, label %445, !prof !28

444:                                              ; preds = %442
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.44, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1223) #15
  unreachable

445:                                              ; preds = %442
  %446 = icmp ugt i32 %406, -2147483648
  br i1 %446, label %447, label %448, !prof !28

447:                                              ; preds = %445
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.46, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1225) #15
  unreachable

448:                                              ; preds = %445
  %.not487 = icmp ult i32 %404, %416
  br i1 %.not487, label %449, label %450, !prof !28

449:                                              ; preds = %448
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.47, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1226) #15
  unreachable

450:                                              ; preds = %448
  %.not488 = icmp ult i32 %406, %404
  br i1 %.not488, label %451, label %452, !prof !28

451:                                              ; preds = %450
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.48, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1227) #15
  unreachable

452:                                              ; preds = %450
  %.not489 = icmp ult i32 %404, %402
  br i1 %.not489, label %453, label %454, !prof !28

453:                                              ; preds = %452
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.49, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1228) #15
  unreachable

454:                                              ; preds = %452
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(20) %375, ptr noundef nonnull dereferenceable(20) %13, i64 20)
  %.not490 = icmp eq i32 %bcmp, 0
  br i1 %.not490, label %484, label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %376, align 4, !tbaa !6
  %.not491 = icmp eq i32 %404, %456
  %.not492 = icmp eq i32 %406, %387
  %or.cond565 = select i1 %.not491, i1 %.not492, i1 false
  br i1 %or.cond565, label %459, label %457

457:                                              ; preds = %455
  %458 = call i32 @dxb_resize(ptr noundef nonnull %0, i32 noundef %416, i32 noundef %404, i32 noundef %406, i32 noundef 2) #14
  %.not493 = icmp eq i32 %458, 0
  br i1 %.not493, label %._crit_edge, label %.thread559, !prof !5

._crit_edge:                                      ; preds = %457
  %.pre576 = load ptr, ptr %352, align 8, !tbaa !29
  br label %459

459:                                              ; preds = %._crit_edge, %455
  %460 = phi ptr [ %.pre576, %._crit_edge ], [ %373, %455 ]
  %.not494 = icmp eq ptr %460, null
  br i1 %.not494, label %467, label %461

461:                                              ; preds = %459
  %462 = getelementptr inbounds i8, ptr %460, i64 40
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %462, ptr noundef nonnull align 4 dereferenceable(20) %13, i64 20, i1 false), !tbaa.struct !57
  %463 = load ptr, ptr %352, align 8, !tbaa !29
  %464 = getelementptr inbounds i8, ptr %463, i64 4
  %465 = load i32, ptr %464, align 4, !tbaa !58
  %466 = or i32 %465, 4
  store i32 %466, ptr %464, align 4, !tbaa !58
  br label %484

467:                                              ; preds = %459
  %468 = getelementptr inbounds i8, ptr %10, i64 20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %468, ptr noundef nonnull align 4 dereferenceable(20) %13, i64 20, i1 false), !tbaa.struct !57
  %469 = getelementptr inbounds i8, ptr %0, i64 4
  %470 = load i32, ptr %469, align 4, !tbaa !9
  %471 = getelementptr inbounds i8, ptr %0, i64 192
  %472 = load ptr, ptr %471, align 8, !tbaa !23
  %473 = getelementptr inbounds i8, ptr %472, i64 168
  %474 = call i32 @dxb_sync_locked(ptr noundef nonnull %0, i32 noundef %470, ptr noundef nonnull %10, ptr noundef nonnull %473) #14
  %475 = icmp eq i32 %474, 0
  br i1 %475, label %.thread556, label %.thread559, !prof !5

.thread556:                                       ; preds = %467
  %476 = getelementptr inbounds i8, ptr %10, i64 32
  %477 = load i32, ptr %476, align 4, !tbaa !6
  %478 = zext i32 %477 to i64
  %479 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %478) #16
  store i64 %479, ptr %381, align 8, !tbaa !46
  %480 = getelementptr inbounds i8, ptr %10, i64 28
  %481 = load i32, ptr %480, align 4, !tbaa !59
  %482 = zext i32 %481 to i64
  %483 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %482) #16
  store i64 %483, ptr %390, align 8, !tbaa !47
  br label %484

484:                                              ; preds = %454, %461, %.thread556
  %485 = phi i32 [ %406, %454 ], [ %406, %461 ], [ %481, %.thread556 ]
  %486 = phi i32 [ %404, %454 ], [ %404, %461 ], [ %477, %.thread556 ]
  %487 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !26
  %488 = and i8 %487, 1
  %.not495 = icmp eq i8 %488, 0
  br i1 %.not495, label %.thread561, label %490, !prof !28

.thread561:                                       ; preds = %484
  %489 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %418) #16
  store i64 %489, ptr %380, align 8, !tbaa !45
  br label %501

490:                                              ; preds = %484
  %491 = load i64, ptr %381, align 8, !tbaa !46
  %492 = zext i32 %486 to i64
  %493 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %492) #16
  %.not496 = icmp eq i64 %491, %493
  br i1 %.not496, label %495, label %494, !prof !5

494:                                              ; preds = %490
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.50, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1282) #15
  unreachable

495:                                              ; preds = %490
  %496 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %418) #16
  store i64 %496, ptr %380, align 8, !tbaa !45
  %497 = load i64, ptr %390, align 8, !tbaa !47
  %498 = zext i32 %485 to i64
  %499 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %498) #16
  %.not498 = icmp eq i64 %497, %499
  br i1 %.not498, label %501, label %500, !prof !5

500:                                              ; preds = %495
  call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.51, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1284) #15
  unreachable

501:                                              ; preds = %.thread561, %495
  %502 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %431) #16
  store i64 %502, ptr %395, align 8, !tbaa !48
  %503 = call i64 @pgno2bytes(ptr noundef nonnull %0, i64 noundef %436) #16
  store i64 %503, ptr %401, align 8, !tbaa !49
  br label %.thread559

.thread559:                                       ; preds = %467, %457, %501
  %.8408 = phi i32 [ %458, %457 ], [ 0, %501 ], [ %474, %467 ]
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %13) #14
  call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %10) #14
  br i1 %.2412536, label %504, label %505

.critedge509:                                     ; preds = %.critedge511, %113, %109, %219, %346, %221, %215, %207, %.loopexit, %.thread525
  %.3413 = phi i1 [ %.2412536, %.thread525 ], [ %.2412, %.loopexit ], [ %.2412536, %207 ], [ %.2412536, %215 ], [ %.2412536, %221 ], [ %.2412536, %346 ], [ %.2412536, %219 ], [ %.not451, %109 ], [ %.not451, %113 ], [ %.2412536, %.critedge511 ]
  %.10 = phi i32 [ 22, %.thread525 ], [ 22, %.loopexit ], [ 22, %207 ], [ 22, %215 ], [ -30417, %221 ], [ 0, %346 ], [ -30417, %219 ], [ 22, %109 ], [ -30792, %113 ], [ 22, %.critedge511 ]
  br i1 %.3413, label %504, label %505

504:                                              ; preds = %.thread562, %.thread559, %.critedge509
  %.10578 = phi i32 [ %.8408, %.thread559 ], [ %.10, %.critedge509 ], [ %.4404.ph, %.thread562 ]
  call void @lck_txn_unlock(ptr noundef %0) #14
  br label %505

505:                                              ; preds = %.thread562, %.thread559, %504, %.critedge509
  %.10577 = phi i32 [ %.8408, %.thread559 ], [ %.10578, %504 ], [ %.10, %.critedge509 ], [ %.4404.ph, %.thread562 ]
  %506 = call i32 @log_if_error(i32 noundef %.10577, ptr noundef nonnull @__func__.mdbx_env_set_geometry, i32 noundef 1293)
  br label %507

507:                                              ; preds = %52, %25, %123, %505, %15
  %.4 = phi i32 [ %16, %15 ], [ %26, %25 ], [ %506, %505 ], [ %53, %52 ], [ %124, %123 ]
  ret i32 %.4
}

declare ptr @env_owned_wrtxn(ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: cold nounwind optsize uwtable
declare hidden i64 @reasonable_db_maxsize() local_unnamed_addr #10

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

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

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

declare i32 @coherency_fetch_head(ptr noundef, ptr noundef byval(%struct.meta_ptr) align 8, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

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


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