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

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

%struct.libmdbx_globals = type { %union.bin128, i32, i32, i8, i8, i8, i8, i32, %union.logger_union, %union.pthread_mutex_t, i64, ptr }
%union.bin128 = type { %struct.anon }
%struct.anon = type { i64, i64 }
%union.logger_union = type { ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.MDBX_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 }
%union.mdbx_atomic_uint32_t = type { i32 }
%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.shared_lck = type { i64, i32, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, [2 x %union.mdbx_atomic_uint32_t], [16 x i8], %struct.pgops, [16 x i8], %union.pthread_mutex_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, i32, %struct.anon.10, %union.pthread_mutex_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, [16 x i8], [0 x %struct.reader_slot] }
%struct.pgops = type { %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %struct.anon.8 }
%struct.anon.8 = type { %struct.gc_prof_stat, %struct.gc_prof_stat, i32, i32, i32, i32, i32 }
%struct.gc_prof_stat = type { i64, i64, i32, i32, i32, i32, %struct.anon.9 }
%struct.anon.9 = type { i64, i64, i32 }
%struct.anon.10 = type { [4 x i32], [4 x i64] }
%struct.reader_slot = type { %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t }
%struct.page = type <{ i64, i16, i16, %union.anon.11, i32, [0 x i16] }>
%union.anon.11 = type { i32 }

@globals = external global %struct.libmdbx_globals, align 8
@__func__.mdbx_env_set_option = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [39 x i8], align 1

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @env_max_pgno(ptr noundef) #3

; Function Attrs: cold nounwind optsize uwtable
declare hidden i32 @default_rp_augment_limit(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare hidden i32 @default_dp_reserve_limit(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @default_dp_initial(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_spill_max_denominator(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_spill_min_denominator(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_spill_parent4child_denominator(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_dp_loose_limit(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_merge_threshold_16dot16_percent(ptr noundef) #3

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

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_limit(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_room_threshold(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_reserve_prereq(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_reserve_limit(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @env_options_adjust_dp_limit(ptr noundef) #3

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

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @mdbx_env_set_option(ptr noundef %0, i32 noundef %1, i64 noundef %2) #4 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i64, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i64 %2, ptr %7, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  %15 = load ptr, ptr %5, align 8, !tbaa !5
  %16 = call i32 @check_env(ptr noundef %15, i1 noundef zeroext false)
  store i32 %16, ptr %8, align 4, !tbaa !9
  %17 = load i32, ptr %8, align 4, !tbaa !9
  %18 = icmp ne i32 %17, 0
  %19 = xor i1 %18, true
  %20 = xor i1 %19, true
  %21 = zext i1 %20 to i32
  %22 = sext i32 %21 to i64
  %23 = call i64 @llvm.expect.i64(i64 %22, i64 0)
  %24 = icmp ne i64 %23, 0
  br i1 %24, label %25, label %28

25:                                               ; preds = %3
  %26 = load i32, ptr %8, align 4, !tbaa !9
  %27 = call i32 @log_if_error(i32 noundef %26, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 184)
  store i32 %27, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %968

28:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #10
  %29 = load ptr, ptr %5, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.MDBX_env, ptr %29, i32 0, i32 1
  %31 = load i32, ptr %30, align 4, !tbaa !13
  %32 = and i32 %31, 536870912
  %33 = icmp ne i32 %32, 0
  br i1 %33, label %34, label %44

34:                                               ; preds = %28
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.MDBX_env, ptr %35, i32 0, i32 24
  %37 = load ptr, ptr %36, align 8, !tbaa !24
  %38 = icmp ne ptr %37, null
  br i1 %38, label %39, label %44

39:                                               ; preds = %34
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = call ptr @env_owned_wrtxn(ptr noundef %40)
  %42 = icmp ne ptr %41, null
  %43 = xor i1 %42, true
  br label %44

44:                                               ; preds = %39, %34, %28
  %45 = phi i1 [ false, %34 ], [ false, %28 ], [ %43, %39 ]
  %46 = zext i1 %45 to i8
  store i8 %46, ptr %10, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #10
  store i8 0, ptr %11, align 1, !tbaa !25
  %47 = load i32, ptr %6, align 4, !tbaa !9
  switch i32 %47, label %957 [
    i32 2, label %48
    i32 3, label %131
    i32 0, label %205
    i32 1, label %240
    i32 6, label %279
    i32 4, label %420
    i32 15, label %460
    i32 7, label %530
    i32 8, label %530
    i32 9, label %655
    i32 10, label %679
    i32 11, label %703
    i32 5, label %727
    i32 12, label %751
    i32 13, label %781
    i32 14, label %799
    i32 16, label %834
    i32 17, label %857
    i32 18, label %882
    i32 19, label %907
    i32 20, label %932
  ]

48:                                               ; preds = %44
  %49 = load i64, ptr %7, align 8, !tbaa !11
  %50 = icmp eq i64 %49, -1
  br i1 %50, label %51, label %52

51:                                               ; preds = %48
  store i64 1056964608, ptr %7, align 8, !tbaa !11
  br label %52

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

64:                                               ; preds = %52
  %65 = call i32 @log_if_error(i32 noundef 13, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 193)
  store i32 %65, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

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

79:                                               ; preds = %66
  %80 = call i32 @log_if_error(i32 noundef 1, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 195)
  store i32 %80, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

81:                                               ; preds = %66
  %82 = load i64, ptr %7, align 8, !tbaa !11
  %83 = icmp ugt i64 %82, -65537
  %84 = xor i1 %83, true
  %85 = xor i1 %84, true
  %86 = zext i1 %85 to i32
  %87 = sext i32 %86 to i64
  %88 = call i64 @llvm.expect.i64(i64 %87, i64 0)
  %89 = icmp ne i64 %88, 0
  br i1 %89, label %90, label %92

90:                                               ; preds = %81
  %91 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 197)
  store i32 %91, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

92:                                               ; preds = %81
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = load i64, ptr %7, align 8, !tbaa !11
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.MDBX_env, ptr %95, i32 0, i32 2
  %97 = load i32, ptr %96, align 8, !tbaa !26
  %98 = zext i32 %97 to i64
  %99 = add i64 %94, %98
  %100 = sub i64 %99, 1
  %101 = call i32 @bytes2pgno(ptr noundef %93, i64 noundef %100) #11
  %102 = zext i32 %101 to i64
  store i64 %102, ptr %7, align 8, !tbaa !11
  %103 = load i64, ptr %7, align 8, !tbaa !11
  %104 = trunc i64 %103 to i32
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.MDBX_env, ptr %105, i32 0, i32 7
  %107 = load ptr, ptr %106, align 8, !tbaa !27
  %108 = getelementptr inbounds %struct.shared_lck, ptr %107, i32 0, i32 3
  %109 = call i32 @atomic_load32(ptr noundef %108, i32 noundef 1)
  %110 = icmp ne i32 %104, %109
  br i1 %110, label %111, label %130

111:                                              ; preds = %92
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.MDBX_env, ptr %112, i32 0, i32 7
  %114 = load ptr, ptr %113, align 8, !tbaa !27
  %115 = getelementptr inbounds %struct.shared_lck, ptr %114, i32 0, i32 3
  %116 = load i64, ptr %7, align 8, !tbaa !11
  %117 = trunc i64 %116 to i32
  %118 = call i32 @atomic_store32(ptr noundef %115, i32 noundef %117, i32 noundef 0)
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %120, label %130

120:                                              ; preds = %111
  %121 = load i8, ptr %10, align 1, !tbaa !25, !range !28, !noundef !29
  %122 = trunc i8 %121 to i1
  br i1 %122, label %123, label %130

123:                                              ; preds = %120
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = call i32 @env_sync(ptr noundef %124, i1 noundef zeroext false, i1 noundef zeroext false)
  store i32 %125, ptr %8, align 4, !tbaa !9
  %126 = load i32, ptr %8, align 4, !tbaa !9
  %127 = icmp eq i32 %126, -1
  br i1 %127, label %128, label %129

128:                                              ; preds = %123
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %128, %123
  br label %130

130:                                              ; preds = %129, %120, %111, %92
  br label %959

131:                                              ; preds = %44
  %132 = load i64, ptr %7, align 8, !tbaa !11
  %133 = icmp eq i64 %132, -1
  br i1 %133, label %134, label %135

134:                                              ; preds = %131
  store i64 2780315, ptr %7, align 8, !tbaa !11
  br label %135

135:                                              ; preds = %134, %131
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.MDBX_env, ptr %136, i32 0, i32 1
  %138 = load i32, ptr %137, align 4, !tbaa !13
  %139 = and i32 %138, 131072
  %140 = icmp ne i32 %139, 0
  %141 = xor i1 %140, true
  %142 = xor i1 %141, true
  %143 = zext i1 %142 to i32
  %144 = sext i32 %143 to i64
  %145 = call i64 @llvm.expect.i64(i64 %144, i64 0)
  %146 = icmp ne i64 %145, 0
  br i1 %146, label %147, label %149

147:                                              ; preds = %135
  %148 = call i32 @log_if_error(i32 noundef 13, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 214)
  store i32 %148, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

149:                                              ; preds = %135
  %150 = load ptr, ptr %5, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.MDBX_env, ptr %150, i32 0, i32 1
  %152 = load i32, ptr %151, align 4, !tbaa !13
  %153 = and i32 %152, 536870912
  %154 = icmp ne i32 %153, 0
  %155 = xor i1 %154, true
  %156 = xor i1 %155, true
  %157 = xor i1 %156, true
  %158 = zext i1 %157 to i32
  %159 = sext i32 %158 to i64
  %160 = call i64 @llvm.expect.i64(i64 %159, i64 0)
  %161 = icmp ne i64 %160, 0
  br i1 %161, label %162, label %164

162:                                              ; preds = %149
  %163 = call i32 @log_if_error(i32 noundef 1, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 216)
  store i32 %163, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

164:                                              ; preds = %149
  %165 = load i64, ptr %7, align 8, !tbaa !11
  %166 = icmp ugt i64 %165, 4294967295
  %167 = xor i1 %166, true
  %168 = xor i1 %167, true
  %169 = zext i1 %168 to i32
  %170 = sext i32 %169 to i64
  %171 = call i64 @llvm.expect.i64(i64 %170, i64 0)
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %173, label %175

173:                                              ; preds = %164
  %174 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 218)
  store i32 %174, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

175:                                              ; preds = %164
  %176 = load i64, ptr %7, align 8, !tbaa !11
  %177 = trunc i64 %176 to i32
  %178 = call i64 @osal_16dot16_to_monotime(i32 noundef %177)
  store i64 %178, ptr %7, align 8, !tbaa !11
  %179 = load i64, ptr %7, align 8, !tbaa !11
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.MDBX_env, ptr %180, i32 0, i32 7
  %182 = load ptr, ptr %181, align 8, !tbaa !27
  %183 = getelementptr inbounds %struct.shared_lck, ptr %182, i32 0, i32 5
  %184 = call i64 @atomic_load64(ptr noundef %183, i32 noundef 1)
  %185 = icmp ne i64 %179, %184
  br i1 %185, label %186, label %204

186:                                              ; preds = %175
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.MDBX_env, ptr %187, i32 0, i32 7
  %189 = load ptr, ptr %188, align 8, !tbaa !27
  %190 = getelementptr inbounds %struct.shared_lck, ptr %189, i32 0, i32 5
  %191 = load i64, ptr %7, align 8, !tbaa !11
  %192 = call i64 @atomic_store64(ptr noundef %190, i64 noundef %191, i32 noundef 0)
  %193 = icmp ne i64 %192, 0
  br i1 %193, label %194, label %204

194:                                              ; preds = %186
  %195 = load i8, ptr %10, align 1, !tbaa !25, !range !28, !noundef !29
  %196 = trunc i8 %195 to i1
  br i1 %196, label %197, label %204

197:                                              ; preds = %194
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = call i32 @env_sync(ptr noundef %198, i1 noundef zeroext false, i1 noundef zeroext false)
  store i32 %199, ptr %8, align 4, !tbaa !9
  %200 = load i32, ptr %8, align 4, !tbaa !9
  %201 = icmp eq i32 %200, -1
  br i1 %201, label %202, label %203

202:                                              ; preds = %197
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %202, %197
  br label %204

204:                                              ; preds = %203, %194, %186, %175
  br label %959

205:                                              ; preds = %44
  %206 = load i64, ptr %7, align 8, !tbaa !11
  %207 = icmp eq i64 %206, -1
  br i1 %207, label %208, label %209

208:                                              ; preds = %205
  store i64 42, ptr %7, align 8, !tbaa !11
  br label %209

209:                                              ; preds = %208, %205
  %210 = load i64, ptr %7, align 8, !tbaa !11
  %211 = icmp ugt i64 %210, 32765
  %212 = xor i1 %211, true
  %213 = xor i1 %212, true
  %214 = zext i1 %213 to i32
  %215 = sext i32 %214 to i64
  %216 = call i64 @llvm.expect.i64(i64 %215, i64 0)
  %217 = icmp ne i64 %216, 0
  br i1 %217, label %218, label %220

218:                                              ; preds = %209
  %219 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 235)
  store i32 %219, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

220:                                              ; preds = %209
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.MDBX_env, ptr %221, i32 0, i32 3
  %223 = getelementptr inbounds %struct.osal_mmap, ptr %222, i32 0, i32 0
  %224 = load ptr, ptr %223, align 8, !tbaa !30
  %225 = icmp ne ptr %224, null
  %226 = xor i1 %225, true
  %227 = xor i1 %226, true
  %228 = zext i1 %227 to i32
  %229 = sext i32 %228 to i64
  %230 = call i64 @llvm.expect.i64(i64 %229, i64 0)
  %231 = icmp ne i64 %230, 0
  br i1 %231, label %232, label %234

232:                                              ; preds = %220
  %233 = call i32 @log_if_error(i32 noundef 1, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 237)
  store i32 %233, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

234:                                              ; preds = %220
  %235 = load i64, ptr %7, align 8, !tbaa !11
  %236 = trunc i64 %235 to i32
  %237 = add i32 %236, 2
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.MDBX_env, ptr %238, i32 0, i32 19
  store i32 %237, ptr %239, align 8, !tbaa !31
  br label %959

240:                                              ; preds = %44
  %241 = load i64, ptr %7, align 8, !tbaa !11
  %242 = icmp eq i64 %241, -1
  br i1 %242, label %243, label %244

243:                                              ; preds = %240
  store i64 32767, ptr %7, align 8, !tbaa !11
  br label %244

244:                                              ; preds = %243, %240
  %245 = load i64, ptr %7, align 8, !tbaa !11
  %246 = icmp ult i64 %245, 1
  br i1 %246, label %250, label %247

247:                                              ; preds = %244
  %248 = load i64, ptr %7, align 8, !tbaa !11
  %249 = icmp ugt i64 %248, 32767
  br label %250

250:                                              ; preds = %247, %244
  %251 = phi i1 [ true, %244 ], [ %249, %247 ]
  %252 = xor i1 %251, true
  %253 = xor i1 %252, true
  %254 = zext i1 %253 to i32
  %255 = sext i32 %254 to i64
  %256 = call i64 @llvm.expect.i64(i64 %255, i64 0)
  %257 = icmp ne i64 %256, 0
  br i1 %257, label %258, label %260

258:                                              ; preds = %250
  %259 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 245)
  store i32 %259, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

260:                                              ; preds = %250
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.MDBX_env, ptr %261, i32 0, i32 3
  %263 = getelementptr inbounds %struct.osal_mmap, ptr %262, i32 0, i32 0
  %264 = load ptr, ptr %263, align 8, !tbaa !30
  %265 = icmp ne ptr %264, null
  %266 = xor i1 %265, true
  %267 = xor i1 %266, true
  %268 = zext i1 %267 to i32
  %269 = sext i32 %268 to i64
  %270 = call i64 @llvm.expect.i64(i64 %269, i64 0)
  %271 = icmp ne i64 %270, 0
  br i1 %271, label %272, label %274

272:                                              ; preds = %260
  %273 = call i32 @log_if_error(i32 noundef 1, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 247)
  store i32 %273, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

274:                                              ; preds = %260
  %275 = load i64, ptr %7, align 8, !tbaa !11
  %276 = trunc i64 %275 to i32
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.MDBX_env, ptr %277, i32 0, i32 18
  store i32 %276, ptr %278, align 4, !tbaa !32
  br label %959

279:                                              ; preds = %44
  %280 = load i64, ptr %7, align 8, !tbaa !11
  %281 = icmp eq i64 %280, -1
  br i1 %281, label %282, label %286

282:                                              ; preds = %279
  %283 = load ptr, ptr %5, align 8, !tbaa !5
  %284 = call i32 @default_dp_reserve_limit(ptr noundef %283)
  %285 = zext i32 %284 to i64
  store i64 %285, ptr %7, align 8, !tbaa !11
  br label %286

286:                                              ; preds = %282, %279
  %287 = load i64, ptr %7, align 8, !tbaa !11
  %288 = icmp ugt i64 %287, 2147483647
  %289 = xor i1 %288, true
  %290 = xor i1 %289, true
  %291 = zext i1 %290 to i32
  %292 = sext i32 %291 to i64
  %293 = call i64 @llvm.expect.i64(i64 %292, i64 0)
  %294 = icmp ne i64 %293, 0
  br i1 %294, label %295, label %297

295:                                              ; preds = %286
  %296 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 255)
  store i32 %296, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

297:                                              ; preds = %286
  %298 = load ptr, ptr %5, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.MDBX_env, ptr %298, i32 0, i32 34
  %300 = getelementptr inbounds %struct.anon.2, ptr %299, i32 0, i32 0
  %301 = load i32, ptr %300, align 8, !tbaa !33
  %302 = load i64, ptr %7, align 8, !tbaa !11
  %303 = trunc i64 %302 to i32
  %304 = icmp ne i32 %301, %303
  br i1 %304, label %305, label %419

305:                                              ; preds = %297
  %306 = load i8, ptr %10, align 1, !tbaa !25, !range !28, !noundef !29
  %307 = trunc i8 %306 to i1
  br i1 %307, label %308, label %323

308:                                              ; preds = %305
  %309 = load ptr, ptr %5, align 8, !tbaa !5
  %310 = call i32 @lck_txn_lock(ptr noundef %309, i1 noundef zeroext false)
  store i32 %310, ptr %8, align 4, !tbaa !9
  %311 = load i32, ptr %8, align 4, !tbaa !9
  %312 = icmp ne i32 %311, 0
  %313 = xor i1 %312, true
  %314 = xor i1 %313, true
  %315 = zext i1 %314 to i32
  %316 = sext i32 %315 to i64
  %317 = call i64 @llvm.expect.i64(i64 %316, i64 0)
  %318 = icmp ne i64 %317, 0
  br i1 %318, label %319, label %322

319:                                              ; preds = %308
  %320 = load i32, ptr %8, align 4, !tbaa !9
  %321 = call i32 @log_if_error(i32 noundef %320, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 260)
  store i32 %321, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

322:                                              ; preds = %308
  store i8 1, ptr %11, align 1, !tbaa !25
  br label %323

323:                                              ; preds = %322, %305
  %324 = load i64, ptr %7, align 8, !tbaa !11
  %325 = trunc i64 %324 to i32
  %326 = load ptr, ptr %5, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.MDBX_env, ptr %326, i32 0, i32 34
  %328 = getelementptr inbounds %struct.anon.2, ptr %327, i32 0, i32 0
  store i32 %325, ptr %328, align 8, !tbaa !33
  br label %329

329:                                              ; preds = %399, %323
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.MDBX_env, ptr %330, i32 0, i32 43
  %332 = load i32, ptr %331, align 4, !tbaa !34
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.MDBX_env, ptr %333, i32 0, i32 34
  %335 = getelementptr inbounds %struct.anon.2, ptr %334, i32 0, i32 0
  %336 = load i32, ptr %335, align 8, !tbaa !33
  %337 = icmp ugt i32 %332, %336
  br i1 %337, label %338, label %418

338:                                              ; preds = %329
  br label %339

339:                                              ; preds = %338
  %340 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !35
  %341 = zext i8 %340 to i32
  %342 = and i32 %341, 1
  %343 = icmp ne i32 %342, 0
  %344 = xor i1 %343, true
  %345 = xor i1 %344, true
  %346 = zext i1 %345 to i32
  %347 = sext i32 %346 to i64
  %348 = call i64 @llvm.expect.i64(i64 %347, i64 1)
  %349 = icmp ne i64 %348, 0
  br i1 %349, label %350, label %368

350:                                              ; preds = %339
  br label %351

351:                                              ; preds = %350
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.MDBX_env, ptr %352, i32 0, i32 44
  %354 = load ptr, ptr %353, align 8, !tbaa !37
  %355 = icmp ne ptr %354, null
  %356 = xor i1 %355, true
  %357 = xor i1 %356, true
  %358 = xor i1 %357, true
  %359 = zext i1 %358 to i32
  %360 = sext i32 %359 to i64
  %361 = call i64 @llvm.expect.i64(i64 %360, i64 0)
  %362 = icmp ne i64 %361, 0
  br i1 %362, label %363, label %365

363:                                              ; preds = %351
  %364 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %364, ptr noundef @.str.1, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 265) #12
  unreachable

365:                                              ; preds = %351
  br label %366

366:                                              ; preds = %365
  br label %367

367:                                              ; preds = %366
  br label %368

368:                                              ; preds = %367, %339
  br label %369

369:                                              ; preds = %368
  br label %370

370:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %371 = load ptr, ptr %5, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.MDBX_env, ptr %371, i32 0, i32 44
  %373 = load ptr, ptr %372, align 8, !tbaa !37
  store ptr %373, ptr %12, align 8, !tbaa !5
  br label %374

374:                                              ; preds = %370
  br label %375

375:                                              ; preds = %374
  %376 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !38
  %377 = zext i8 %376 to i32
  %378 = icmp sle i32 6, %377
  %379 = xor i1 %378, true
  %380 = xor i1 %379, true
  %381 = zext i1 %380 to i32
  %382 = sext i32 %381 to i64
  %383 = call i64 @llvm.expect.i64(i64 %382, i64 0)
  %384 = icmp ne i64 %383, 0
  br i1 %384, label %385, label %391

385:                                              ; preds = %375
  %386 = load ptr, ptr %12, align 8, !tbaa !5
  %387 = load ptr, ptr %5, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.MDBX_env, ptr %387, i32 0, i32 2
  %389 = load i32, ptr %388, align 8, !tbaa !26
  %390 = zext i32 %389 to i64
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 267, ptr noundef @.str.2, ptr noundef %386, i64 noundef %390, i32 noundef 267)
  br label %391

391:                                              ; preds = %385, %375
  br label %392

392:                                              ; preds = %391
  br label %393

393:                                              ; preds = %392
  %394 = load ptr, ptr %12, align 8, !tbaa !5
  %395 = load ptr, ptr %5, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.MDBX_env, ptr %395, i32 0, i32 2
  %397 = load i32, ptr %396, align 8, !tbaa !26
  br label %398

398:                                              ; preds = %393
  br label %399

399:                                              ; preds = %398
  %400 = load ptr, ptr %12, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.page, ptr %400, i32 0, i32 5
  %402 = getelementptr inbounds [0 x i16], ptr %401, i64 0, i64 0
  %403 = ptrtoint ptr %402 to i64
  %404 = add nsw i64 %403, 4
  %405 = inttoptr i64 %404 to ptr
  %406 = load ptr, ptr %405, align 8, !tbaa !5
  %407 = load ptr, ptr %5, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.MDBX_env, ptr %407, i32 0, i32 44
  store ptr %406, ptr %408, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %409 = load ptr, ptr %12, align 8, !tbaa !5
  %410 = ptrtoint ptr %409 to i64
  %411 = add nsw i64 %410, -8
  %412 = inttoptr i64 %411 to ptr
  store ptr %412, ptr %13, align 8, !tbaa !5
  %413 = load ptr, ptr %13, align 8, !tbaa !5
  call void @free(ptr noundef %413) #10
  %414 = load ptr, ptr %5, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.MDBX_env, ptr %414, i32 0, i32 43
  %416 = load i32, ptr %415, align 4, !tbaa !34
  %417 = sub i32 %416, 1
  store i32 %417, ptr %415, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %329, !llvm.loop !39

418:                                              ; preds = %329
  br label %419

419:                                              ; preds = %418, %297
  br label %959

420:                                              ; preds = %44
  %421 = load i64, ptr %7, align 8, !tbaa !11
  %422 = icmp eq i64 %421, -1
  br i1 %422, label %423, label %435

423:                                              ; preds = %420
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.MDBX_env, ptr %424, i32 0, i32 34
  %426 = getelementptr inbounds %struct.anon.2, ptr %425, i32 0, i32 15
  %427 = load i8, ptr %426, align 8
  %428 = and i8 %427, -3
  %429 = or i8 %428, 0
  store i8 %429, ptr %426, align 8
  %430 = load ptr, ptr %5, align 8, !tbaa !5
  %431 = call i32 @default_rp_augment_limit(ptr noundef %430) #13
  %432 = load ptr, ptr %5, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.MDBX_env, ptr %432, i32 0, i32 34
  %434 = getelementptr inbounds %struct.anon.2, ptr %433, i32 0, i32 1
  store i32 %431, ptr %434, align 4, !tbaa !41
  br label %459

435:                                              ; preds = %420
  %436 = load i64, ptr %7, align 8, !tbaa !11
  %437 = icmp ugt i64 %436, 2147483647
  %438 = xor i1 %437, true
  %439 = xor i1 %438, true
  %440 = zext i1 %439 to i32
  %441 = sext i32 %440 to i64
  %442 = call i64 @llvm.expect.i64(i64 %441, i64 0)
  %443 = icmp ne i64 %442, 0
  br i1 %443, label %444, label %446

444:                                              ; preds = %435
  %445 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 282)
  store i32 %445, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

446:                                              ; preds = %435
  %447 = load ptr, ptr %5, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.MDBX_env, ptr %447, i32 0, i32 34
  %449 = getelementptr inbounds %struct.anon.2, ptr %448, i32 0, i32 15
  %450 = load i8, ptr %449, align 8
  %451 = and i8 %450, -3
  %452 = or i8 %451, 2
  store i8 %452, ptr %449, align 8
  %453 = load i64, ptr %7, align 8, !tbaa !11
  %454 = trunc i64 %453 to i32
  %455 = load ptr, ptr %5, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.MDBX_env, ptr %455, i32 0, i32 34
  %457 = getelementptr inbounds %struct.anon.2, ptr %456, i32 0, i32 1
  store i32 %454, ptr %457, align 4, !tbaa !41
  br label %458

458:                                              ; preds = %446
  br label %459

459:                                              ; preds = %458, %423
  br label %959

460:                                              ; preds = %44
  %461 = load i64, ptr %7, align 8, !tbaa !11
  %462 = icmp eq i64 %461, -1
  br i1 %462, label %463, label %464

463:                                              ; preds = %460
  store i64 0, ptr %7, align 8, !tbaa !11
  br label %464

464:                                              ; preds = %463, %460
  %465 = load i64, ptr %7, align 8, !tbaa !11
  %466 = icmp ugt i64 %465, 4294967295
  %467 = xor i1 %466, true
  %468 = xor i1 %467, true
  %469 = zext i1 %468 to i32
  %470 = sext i32 %469 to i64
  %471 = call i64 @llvm.expect.i64(i64 %470, i64 0)
  %472 = icmp ne i64 %471, 0
  br i1 %472, label %473, label %475

473:                                              ; preds = %464
  %474 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 293)
  store i32 %474, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

475:                                              ; preds = %464
  %476 = load ptr, ptr %5, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.MDBX_env, ptr %476, i32 0, i32 1
  %478 = load i32, ptr %477, align 4, !tbaa !13
  %479 = and i32 %478, 131072
  %480 = icmp ne i32 %479, 0
  %481 = xor i1 %480, true
  %482 = xor i1 %481, true
  %483 = zext i1 %482 to i32
  %484 = sext i32 %483 to i64
  %485 = call i64 @llvm.expect.i64(i64 %484, i64 0)
  %486 = icmp ne i64 %485, 0
  br i1 %486, label %487, label %489

487:                                              ; preds = %475
  %488 = call i32 @log_if_error(i32 noundef 13, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 295)
  store i32 %488, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

489:                                              ; preds = %475
  %490 = load i64, ptr %7, align 8, !tbaa !11
  %491 = trunc i64 %490 to i32
  %492 = call i64 @osal_16dot16_to_monotime(i32 noundef %491)
  store i64 %492, ptr %7, align 8, !tbaa !11
  %493 = load i64, ptr %7, align 8, !tbaa !11
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.MDBX_env, ptr %494, i32 0, i32 34
  %496 = getelementptr inbounds %struct.anon.2, ptr %495, i32 0, i32 4
  %497 = load i64, ptr %496, align 8, !tbaa !42
  %498 = icmp ne i64 %493, %497
  br i1 %498, label %499, label %529

499:                                              ; preds = %489
  %500 = load ptr, ptr %5, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.MDBX_env, ptr %500, i32 0, i32 39
  %502 = load ptr, ptr %501, align 8, !tbaa !43
  %503 = icmp ne ptr %502, null
  br i1 %503, label %504, label %509

504:                                              ; preds = %499
  %505 = load i8, ptr %10, align 1, !tbaa !25, !range !28, !noundef !29
  %506 = trunc i8 %505 to i1
  br i1 %506, label %507, label %509

507:                                              ; preds = %504
  %508 = call i32 @log_if_error(i32 noundef 1, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 299)
  store i32 %508, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

509:                                              ; preds = %504, %499
  %510 = load i64, ptr %7, align 8, !tbaa !11
  %511 = load ptr, ptr %5, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.MDBX_env, ptr %511, i32 0, i32 34
  %513 = getelementptr inbounds %struct.anon.2, ptr %512, i32 0, i32 4
  store i64 %510, ptr %513, align 8, !tbaa !42
  %514 = load ptr, ptr %5, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.MDBX_env, ptr %514, i32 0, i32 34
  %516 = getelementptr inbounds %struct.anon.2, ptr %515, i32 0, i32 15
  %517 = load i8, ptr %516, align 8
  %518 = lshr i8 %517, 1
  %519 = and i8 %518, 1
  %520 = zext i8 %519 to i32
  %521 = icmp ne i32 %520, 0
  br i1 %521, label %528, label %522

522:                                              ; preds = %509
  %523 = load ptr, ptr %5, align 8, !tbaa !5
  %524 = call i32 @default_rp_augment_limit(ptr noundef %523) #13
  %525 = load ptr, ptr %5, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.MDBX_env, ptr %525, i32 0, i32 34
  %527 = getelementptr inbounds %struct.anon.2, ptr %526, i32 0, i32 1
  store i32 %524, ptr %527, align 4, !tbaa !41
  br label %528

528:                                              ; preds = %522, %509
  br label %529

529:                                              ; preds = %528, %489
  br label %959

530:                                              ; preds = %44, %44
  %531 = load i64, ptr %7, align 8, !tbaa !11
  %532 = icmp ne i64 %531, -1
  br i1 %532, label %533, label %549

533:                                              ; preds = %530
  %534 = load i64, ptr %7, align 8, !tbaa !11
  %535 = icmp ugt i64 %534, 2147483647
  br i1 %535, label %539, label %536

536:                                              ; preds = %533
  %537 = load i64, ptr %7, align 8, !tbaa !11
  %538 = icmp ult i64 %537, 128
  br label %539

539:                                              ; preds = %536, %533
  %540 = phi i1 [ true, %533 ], [ %538, %536 ]
  %541 = xor i1 %540, true
  %542 = xor i1 %541, true
  %543 = zext i1 %542 to i32
  %544 = sext i32 %543 to i64
  %545 = call i64 @llvm.expect.i64(i64 %544, i64 0)
  %546 = icmp ne i64 %545, 0
  br i1 %546, label %547, label %549

547:                                              ; preds = %539
  %548 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 309)
  store i32 %548, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

549:                                              ; preds = %539, %530
  %550 = load ptr, ptr %5, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.MDBX_env, ptr %550, i32 0, i32 1
  %552 = load i32, ptr %551, align 4, !tbaa !13
  %553 = and i32 %552, 131072
  %554 = icmp ne i32 %553, 0
  %555 = xor i1 %554, true
  %556 = xor i1 %555, true
  %557 = zext i1 %556 to i32
  %558 = sext i32 %557 to i64
  %559 = call i64 @llvm.expect.i64(i64 %558, i64 0)
  %560 = icmp ne i64 %559, 0
  br i1 %560, label %561, label %563

561:                                              ; preds = %549
  %562 = call i32 @log_if_error(i32 noundef 13, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 311)
  store i32 %562, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

563:                                              ; preds = %549
  %564 = load i8, ptr %10, align 1, !tbaa !25, !range !28, !noundef !29
  %565 = trunc i8 %564 to i1
  br i1 %565, label %566, label %581

566:                                              ; preds = %563
  %567 = load ptr, ptr %5, align 8, !tbaa !5
  %568 = call i32 @lck_txn_lock(ptr noundef %567, i1 noundef zeroext false)
  store i32 %568, ptr %8, align 4, !tbaa !9
  %569 = load i32, ptr %8, align 4, !tbaa !9
  %570 = icmp ne i32 %569, 0
  %571 = xor i1 %570, true
  %572 = xor i1 %571, true
  %573 = zext i1 %572 to i32
  %574 = sext i32 %573 to i64
  %575 = call i64 @llvm.expect.i64(i64 %574, i64 0)
  %576 = icmp ne i64 %575, 0
  br i1 %576, label %577, label %580

577:                                              ; preds = %566
  %578 = load i32, ptr %8, align 4, !tbaa !9
  %579 = call i32 @log_if_error(i32 noundef %578, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 315)
  store i32 %579, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

580:                                              ; preds = %566
  store i8 1, ptr %11, align 1, !tbaa !25
  br label %581

581:                                              ; preds = %580, %563
  %582 = load ptr, ptr %5, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.MDBX_env, ptr %582, i32 0, i32 39
  %584 = load ptr, ptr %583, align 8, !tbaa !43
  %585 = icmp ne ptr %584, null
  br i1 %585, label %586, label %587

586:                                              ; preds = %581
  store i32 1, ptr %8, align 4, !tbaa !9
  br label %654

587:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  %588 = load ptr, ptr %5, align 8, !tbaa !5
  %589 = call i32 @env_max_pgno(ptr noundef %588)
  store i32 %589, ptr %14, align 4, !tbaa !9
  %590 = load i32, ptr %6, align 4, !tbaa !9
  %591 = icmp eq i32 %590, 8
  br i1 %591, label %592, label %626

592:                                              ; preds = %587
  %593 = load i64, ptr %7, align 8, !tbaa !11
  %594 = icmp eq i64 %593, -1
  br i1 %594, label %595, label %601

595:                                              ; preds = %592
  %596 = load ptr, ptr %5, align 8, !tbaa !5
  %597 = call i32 @default_dp_initial(ptr noundef %596)
  %598 = load ptr, ptr %5, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.MDBX_env, ptr %598, i32 0, i32 34
  %600 = getelementptr inbounds %struct.anon.2, ptr %599, i32 0, i32 3
  store i32 %597, ptr %600, align 4, !tbaa !44
  br label %625

601:                                              ; preds = %592
  %602 = load i64, ptr %7, align 8, !tbaa !11
  %603 = trunc i64 %602 to i32
  %604 = load ptr, ptr %5, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.MDBX_env, ptr %604, i32 0, i32 34
  %606 = getelementptr inbounds %struct.anon.2, ptr %605, i32 0, i32 3
  store i32 %603, ptr %606, align 4, !tbaa !44
  %607 = load ptr, ptr %5, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.MDBX_env, ptr %607, i32 0, i32 34
  %609 = getelementptr inbounds %struct.anon.2, ptr %608, i32 0, i32 3
  %610 = load i32, ptr %609, align 4, !tbaa !44
  %611 = load i32, ptr %14, align 4, !tbaa !9
  %612 = icmp ugt i32 %610, %611
  br i1 %612, label %613, label %624

613:                                              ; preds = %601
  %614 = load i32, ptr %14, align 4, !tbaa !9
  %615 = icmp ugt i32 %614, 128
  br i1 %615, label %616, label %618

616:                                              ; preds = %613
  %617 = load i32, ptr %14, align 4, !tbaa !9
  br label %619

618:                                              ; preds = %613
  br label %619

619:                                              ; preds = %618, %616
  %620 = phi i32 [ %617, %616 ], [ 128, %618 ]
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.MDBX_env, ptr %621, i32 0, i32 34
  %623 = getelementptr inbounds %struct.anon.2, ptr %622, i32 0, i32 3
  store i32 %620, ptr %623, align 4, !tbaa !44
  br label %624

624:                                              ; preds = %619, %601
  br label %625

625:                                              ; preds = %624, %595
  br label %626

626:                                              ; preds = %625, %587
  %627 = load i32, ptr %6, align 4, !tbaa !9
  %628 = icmp eq i32 %627, 7
  br i1 %628, label %629, label %653

629:                                              ; preds = %626
  %630 = load i64, ptr %7, align 8, !tbaa !11
  %631 = icmp eq i64 %630, -1
  br i1 %631, label %632, label %639

632:                                              ; preds = %629
  %633 = load ptr, ptr %5, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.MDBX_env, ptr %633, i32 0, i32 34
  %635 = getelementptr inbounds %struct.anon.2, ptr %634, i32 0, i32 15
  %636 = load i8, ptr %635, align 8
  %637 = and i8 %636, -2
  %638 = or i8 %637, 0
  store i8 %638, ptr %635, align 8
  br label %651

639:                                              ; preds = %629
  %640 = load ptr, ptr %5, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.MDBX_env, ptr %640, i32 0, i32 34
  %642 = getelementptr inbounds %struct.anon.2, ptr %641, i32 0, i32 15
  %643 = load i8, ptr %642, align 8
  %644 = and i8 %643, -2
  %645 = or i8 %644, 1
  store i8 %645, ptr %642, align 8
  %646 = load i64, ptr %7, align 8, !tbaa !11
  %647 = trunc i64 %646 to i32
  %648 = load ptr, ptr %5, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.MDBX_env, ptr %648, i32 0, i32 34
  %650 = getelementptr inbounds %struct.anon.2, ptr %649, i32 0, i32 2
  store i32 %647, ptr %650, align 8, !tbaa !45
  br label %651

651:                                              ; preds = %639, %632
  %652 = load ptr, ptr %5, align 8, !tbaa !5
  call void @env_options_adjust_dp_limit(ptr noundef %652)
  br label %653

653:                                              ; preds = %651, %626
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  br label %654

654:                                              ; preds = %653, %586
  br label %959

655:                                              ; preds = %44
  %656 = load i64, ptr %7, align 8, !tbaa !11
  %657 = icmp eq i64 %656, -1
  br i1 %657, label %658, label %662

658:                                              ; preds = %655
  %659 = load ptr, ptr %5, align 8, !tbaa !5
  %660 = call zeroext i8 @default_spill_max_denominator(ptr noundef %659)
  %661 = zext i8 %660 to i64
  store i64 %661, ptr %7, align 8, !tbaa !11
  br label %662

662:                                              ; preds = %658, %655
  %663 = load i64, ptr %7, align 8, !tbaa !11
  %664 = icmp ugt i64 %663, 255
  %665 = xor i1 %664, true
  %666 = xor i1 %665, true
  %667 = zext i1 %666 to i32
  %668 = sext i32 %667 to i64
  %669 = call i64 @llvm.expect.i64(i64 %668, i64 0)
  %670 = icmp ne i64 %669, 0
  br i1 %670, label %671, label %673

671:                                              ; preds = %662
  %672 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 347)
  store i32 %672, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

673:                                              ; preds = %662
  %674 = load i64, ptr %7, align 8, !tbaa !11
  %675 = trunc i64 %674 to i8
  %676 = load ptr, ptr %5, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.MDBX_env, ptr %676, i32 0, i32 34
  %678 = getelementptr inbounds %struct.anon.2, ptr %677, i32 0, i32 6
  store i8 %675, ptr %678, align 1, !tbaa !46
  br label %959

679:                                              ; preds = %44
  %680 = load i64, ptr %7, align 8, !tbaa !11
  %681 = icmp eq i64 %680, -1
  br i1 %681, label %682, label %686

682:                                              ; preds = %679
  %683 = load ptr, ptr %5, align 8, !tbaa !5
  %684 = call zeroext i8 @default_spill_min_denominator(ptr noundef %683)
  %685 = zext i8 %684 to i64
  store i64 %685, ptr %7, align 8, !tbaa !11
  br label %686

686:                                              ; preds = %682, %679
  %687 = load i64, ptr %7, align 8, !tbaa !11
  %688 = icmp ugt i64 %687, 255
  %689 = xor i1 %688, true
  %690 = xor i1 %689, true
  %691 = zext i1 %690 to i32
  %692 = sext i32 %691 to i64
  %693 = call i64 @llvm.expect.i64(i64 %692, i64 0)
  %694 = icmp ne i64 %693, 0
  br i1 %694, label %695, label %697

695:                                              ; preds = %686
  %696 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 354)
  store i32 %696, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

697:                                              ; preds = %686
  %698 = load i64, ptr %7, align 8, !tbaa !11
  %699 = trunc i64 %698 to i8
  %700 = load ptr, ptr %5, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.MDBX_env, ptr %700, i32 0, i32 34
  %702 = getelementptr inbounds %struct.anon.2, ptr %701, i32 0, i32 7
  store i8 %699, ptr %702, align 2, !tbaa !47
  br label %959

703:                                              ; preds = %44
  %704 = load i64, ptr %7, align 8, !tbaa !11
  %705 = icmp eq i64 %704, -1
  br i1 %705, label %706, label %710

706:                                              ; preds = %703
  %707 = load ptr, ptr %5, align 8, !tbaa !5
  %708 = call zeroext i8 @default_spill_parent4child_denominator(ptr noundef %707)
  %709 = zext i8 %708 to i64
  store i64 %709, ptr %7, align 8, !tbaa !11
  br label %710

710:                                              ; preds = %706, %703
  %711 = load i64, ptr %7, align 8, !tbaa !11
  %712 = icmp ugt i64 %711, 255
  %713 = xor i1 %712, true
  %714 = xor i1 %713, true
  %715 = zext i1 %714 to i32
  %716 = sext i32 %715 to i64
  %717 = call i64 @llvm.expect.i64(i64 %716, i64 0)
  %718 = icmp ne i64 %717, 0
  br i1 %718, label %719, label %721

719:                                              ; preds = %710
  %720 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 361)
  store i32 %720, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

721:                                              ; preds = %710
  %722 = load i64, ptr %7, align 8, !tbaa !11
  %723 = trunc i64 %722 to i8
  %724 = load ptr, ptr %5, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.MDBX_env, ptr %724, i32 0, i32 34
  %726 = getelementptr inbounds %struct.anon.2, ptr %725, i32 0, i32 8
  store i8 %723, ptr %726, align 1, !tbaa !48
  br label %959

727:                                              ; preds = %44
  %728 = load i64, ptr %7, align 8, !tbaa !11
  %729 = icmp eq i64 %728, -1
  br i1 %729, label %730, label %734

730:                                              ; preds = %727
  %731 = load ptr, ptr %5, align 8, !tbaa !5
  %732 = call zeroext i8 @default_dp_loose_limit(ptr noundef %731)
  %733 = zext i8 %732 to i64
  store i64 %733, ptr %7, align 8, !tbaa !11
  br label %734

734:                                              ; preds = %730, %727
  %735 = load i64, ptr %7, align 8, !tbaa !11
  %736 = icmp ugt i64 %735, 255
  %737 = xor i1 %736, true
  %738 = xor i1 %737, true
  %739 = zext i1 %738 to i32
  %740 = sext i32 %739 to i64
  %741 = call i64 @llvm.expect.i64(i64 %740, i64 0)
  %742 = icmp ne i64 %741, 0
  br i1 %742, label %743, label %745

743:                                              ; preds = %734
  %744 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 369)
  store i32 %744, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

745:                                              ; preds = %734
  %746 = load i64, ptr %7, align 8, !tbaa !11
  %747 = trunc i64 %746 to i8
  %748 = load ptr, ptr %5, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.MDBX_env, ptr %748, i32 0, i32 34
  %750 = getelementptr inbounds %struct.anon.2, ptr %749, i32 0, i32 5
  store i8 %747, ptr %750, align 8, !tbaa !49
  br label %959

751:                                              ; preds = %44
  %752 = load i64, ptr %7, align 8, !tbaa !11
  %753 = icmp eq i64 %752, -1
  br i1 %753, label %754, label %758

754:                                              ; preds = %751
  %755 = load ptr, ptr %5, align 8, !tbaa !5
  %756 = call zeroext i16 @default_merge_threshold_16dot16_percent(ptr noundef %755)
  %757 = zext i16 %756 to i64
  store i64 %757, ptr %7, align 8, !tbaa !11
  br label %758

758:                                              ; preds = %754, %751
  %759 = load i64, ptr %7, align 8, !tbaa !11
  %760 = icmp ult i64 %759, 8192
  br i1 %760, label %764, label %761

761:                                              ; preds = %758
  %762 = load i64, ptr %7, align 8, !tbaa !11
  %763 = icmp ugt i64 %762, 32768
  br label %764

764:                                              ; preds = %761, %758
  %765 = phi i1 [ true, %758 ], [ %763, %761 ]
  %766 = xor i1 %765, true
  %767 = xor i1 %766, true
  %768 = zext i1 %767 to i32
  %769 = sext i32 %768 to i64
  %770 = call i64 @llvm.expect.i64(i64 %769, i64 0)
  %771 = icmp ne i64 %770, 0
  br i1 %771, label %772, label %774

772:                                              ; preds = %764
  %773 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 377)
  store i32 %773, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

774:                                              ; preds = %764
  %775 = load i64, ptr %7, align 8, !tbaa !11
  %776 = trunc i64 %775 to i32
  %777 = load ptr, ptr %5, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.MDBX_env, ptr %777, i32 0, i32 34
  %779 = getelementptr inbounds %struct.anon.2, ptr %778, i32 0, i32 9
  store i32 %776, ptr %779, align 4, !tbaa !50
  %780 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_merge_thresholds(ptr noundef %780)
  br label %959

781:                                              ; preds = %44
  %782 = load i64, ptr %7, align 8, !tbaa !11
  %783 = icmp eq i64 %782, -1
  br i1 %783, label %784, label %785

784:                                              ; preds = %781
  store i64 2, ptr %7, align 8, !tbaa !11
  br label %785

785:                                              ; preds = %784, %781
  %786 = load i64, ptr %7, align 8, !tbaa !11
  %787 = load i64, ptr %7, align 8, !tbaa !11
  %788 = trunc i64 %787 to i32
  %789 = zext i32 %788 to i64
  %790 = icmp ne i64 %786, %789
  br i1 %790, label %791, label %792

791:                                              ; preds = %785
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %798

792:                                              ; preds = %785
  %793 = load i64, ptr %7, align 8, !tbaa !11
  %794 = trunc i64 %793 to i32
  %795 = load ptr, ptr %5, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.MDBX_env, ptr %795, i32 0, i32 34
  %797 = getelementptr inbounds %struct.anon.2, ptr %796, i32 0, i32 10
  store i32 %794, ptr %797, align 8, !tbaa !51
  br label %798

798:                                              ; preds = %792, %791
  br label %959

799:                                              ; preds = %44
  %800 = load i64, ptr %7, align 8, !tbaa !11
  %801 = icmp eq i64 %800, -1
  br i1 %801, label %802, label %815

802:                                              ; preds = %799
  %803 = load ptr, ptr %5, align 8, !tbaa !5
  %804 = call zeroext i1 @default_prefault_write(ptr noundef %803)
  %805 = load ptr, ptr %5, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.MDBX_env, ptr %805, i32 0, i32 34
  %807 = getelementptr inbounds %struct.anon.2, ptr %806, i32 0, i32 11
  %808 = zext i1 %804 to i8
  store i8 %808, ptr %807, align 4, !tbaa !52
  %809 = load ptr, ptr %5, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.MDBX_env, ptr %809, i32 0, i32 34
  %811 = getelementptr inbounds %struct.anon.2, ptr %810, i32 0, i32 15
  %812 = load i8, ptr %811, align 8
  %813 = and i8 %812, -5
  %814 = or i8 %813, 0
  store i8 %814, ptr %811, align 8
  br label %833

815:                                              ; preds = %799
  %816 = load i64, ptr %7, align 8, !tbaa !11
  %817 = icmp ugt i64 %816, 1
  br i1 %817, label %818, label %819

818:                                              ; preds = %815
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %832

819:                                              ; preds = %815
  %820 = load i64, ptr %7, align 8, !tbaa !11
  %821 = icmp ne i64 %820, 0
  %822 = load ptr, ptr %5, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.MDBX_env, ptr %822, i32 0, i32 34
  %824 = getelementptr inbounds %struct.anon.2, ptr %823, i32 0, i32 11
  %825 = zext i1 %821 to i8
  store i8 %825, ptr %824, align 4, !tbaa !52
  %826 = load ptr, ptr %5, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.MDBX_env, ptr %826, i32 0, i32 34
  %828 = getelementptr inbounds %struct.anon.2, ptr %827, i32 0, i32 15
  %829 = load i8, ptr %828, align 8
  %830 = and i8 %829, -5
  %831 = or i8 %830, 4
  store i8 %831, ptr %828, align 8
  br label %832

832:                                              ; preds = %819, %818
  br label %833

833:                                              ; preds = %832, %802
  br label %959

834:                                              ; preds = %44
  %835 = load i64, ptr %7, align 8, !tbaa !11
  %836 = icmp eq i64 %835, -1
  br i1 %836, label %837, label %844

837:                                              ; preds = %834
  %838 = load ptr, ptr %5, align 8, !tbaa !5
  %839 = call zeroext i1 @default_prefer_waf_insteadof_balance(ptr noundef %838)
  %840 = load ptr, ptr %5, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.MDBX_env, ptr %840, i32 0, i32 34
  %842 = getelementptr inbounds %struct.anon.2, ptr %841, i32 0, i32 12
  %843 = zext i1 %839 to i8
  store i8 %843, ptr %842, align 1, !tbaa !53
  br label %856

844:                                              ; preds = %834
  %845 = load i64, ptr %7, align 8, !tbaa !11
  %846 = icmp ugt i64 %845, 1
  br i1 %846, label %847, label %848

847:                                              ; preds = %844
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %855

848:                                              ; preds = %844
  %849 = load i64, ptr %7, align 8, !tbaa !11
  %850 = icmp ne i64 %849, 0
  %851 = load ptr, ptr %5, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.MDBX_env, ptr %851, i32 0, i32 34
  %853 = getelementptr inbounds %struct.anon.2, ptr %852, i32 0, i32 12
  %854 = zext i1 %850 to i8
  store i8 %854, ptr %853, align 1, !tbaa !53
  br label %855

855:                                              ; preds = %848, %847
  br label %856

856:                                              ; preds = %855, %837
  br label %959

857:                                              ; preds = %44
  %858 = load i64, ptr %7, align 8, !tbaa !11
  %859 = icmp eq i64 %858, -1
  br i1 %859, label %860, label %868

860:                                              ; preds = %857
  %861 = load ptr, ptr %5, align 8, !tbaa !5
  %862 = call zeroext i16 @default_subpage_limit(ptr noundef %861)
  %863 = load ptr, ptr %5, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.MDBX_env, ptr %863, i32 0, i32 34
  %865 = getelementptr inbounds %struct.anon.2, ptr %864, i32 0, i32 14
  %866 = getelementptr inbounds %struct.anon.3, ptr %865, i32 0, i32 0
  store i16 %862, ptr %866, align 8, !tbaa !54
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %867)
  br label %881

868:                                              ; preds = %857
  %869 = load i64, ptr %7, align 8, !tbaa !11
  %870 = icmp ugt i64 %869, 65535
  br i1 %870, label %871, label %872

871:                                              ; preds = %868
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %880

872:                                              ; preds = %868
  %873 = load i64, ptr %7, align 8, !tbaa !11
  %874 = trunc i64 %873 to i16
  %875 = load ptr, ptr %5, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.MDBX_env, ptr %875, i32 0, i32 34
  %877 = getelementptr inbounds %struct.anon.2, ptr %876, i32 0, i32 14
  %878 = getelementptr inbounds %struct.anon.3, ptr %877, i32 0, i32 0
  store i16 %874, ptr %878, align 8, !tbaa !54
  %879 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %879)
  br label %880

880:                                              ; preds = %872, %871
  br label %881

881:                                              ; preds = %880, %860
  br label %959

882:                                              ; preds = %44
  %883 = load i64, ptr %7, align 8, !tbaa !11
  %884 = icmp eq i64 %883, -1
  br i1 %884, label %885, label %893

885:                                              ; preds = %882
  %886 = load ptr, ptr %5, align 8, !tbaa !5
  %887 = call zeroext i16 @default_subpage_room_threshold(ptr noundef %886)
  %888 = load ptr, ptr %5, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.MDBX_env, ptr %888, i32 0, i32 34
  %890 = getelementptr inbounds %struct.anon.2, ptr %889, i32 0, i32 14
  %891 = getelementptr inbounds %struct.anon.3, ptr %890, i32 0, i32 1
  store i16 %887, ptr %891, align 2, !tbaa !55
  %892 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %892)
  br label %906

893:                                              ; preds = %882
  %894 = load i64, ptr %7, align 8, !tbaa !11
  %895 = icmp ugt i64 %894, 65535
  br i1 %895, label %896, label %897

896:                                              ; preds = %893
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %905

897:                                              ; preds = %893
  %898 = load i64, ptr %7, align 8, !tbaa !11
  %899 = trunc i64 %898 to i16
  %900 = load ptr, ptr %5, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.MDBX_env, ptr %900, i32 0, i32 34
  %902 = getelementptr inbounds %struct.anon.2, ptr %901, i32 0, i32 14
  %903 = getelementptr inbounds %struct.anon.3, ptr %902, i32 0, i32 1
  store i16 %899, ptr %903, align 2, !tbaa !55
  %904 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %904)
  br label %905

905:                                              ; preds = %897, %896
  br label %906

906:                                              ; preds = %905, %885
  br label %959

907:                                              ; preds = %44
  %908 = load i64, ptr %7, align 8, !tbaa !11
  %909 = icmp eq i64 %908, -1
  br i1 %909, label %910, label %918

910:                                              ; preds = %907
  %911 = load ptr, ptr %5, align 8, !tbaa !5
  %912 = call zeroext i16 @default_subpage_reserve_prereq(ptr noundef %911)
  %913 = load ptr, ptr %5, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.MDBX_env, ptr %913, i32 0, i32 34
  %915 = getelementptr inbounds %struct.anon.2, ptr %914, i32 0, i32 14
  %916 = getelementptr inbounds %struct.anon.3, ptr %915, i32 0, i32 2
  store i16 %912, ptr %916, align 4, !tbaa !56
  %917 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %917)
  br label %931

918:                                              ; preds = %907
  %919 = load i64, ptr %7, align 8, !tbaa !11
  %920 = icmp ugt i64 %919, 65535
  br i1 %920, label %921, label %922

921:                                              ; preds = %918
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %930

922:                                              ; preds = %918
  %923 = load i64, ptr %7, align 8, !tbaa !11
  %924 = trunc i64 %923 to i16
  %925 = load ptr, ptr %5, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.MDBX_env, ptr %925, i32 0, i32 34
  %927 = getelementptr inbounds %struct.anon.2, ptr %926, i32 0, i32 14
  %928 = getelementptr inbounds %struct.anon.3, ptr %927, i32 0, i32 2
  store i16 %924, ptr %928, align 4, !tbaa !56
  %929 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %929)
  br label %930

930:                                              ; preds = %922, %921
  br label %931

931:                                              ; preds = %930, %910
  br label %959

932:                                              ; preds = %44
  %933 = load i64, ptr %7, align 8, !tbaa !11
  %934 = icmp eq i64 %933, -1
  br i1 %934, label %935, label %943

935:                                              ; preds = %932
  %936 = load ptr, ptr %5, align 8, !tbaa !5
  %937 = call zeroext i16 @default_subpage_reserve_limit(ptr noundef %936)
  %938 = load ptr, ptr %5, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.MDBX_env, ptr %938, i32 0, i32 34
  %940 = getelementptr inbounds %struct.anon.2, ptr %939, i32 0, i32 14
  %941 = getelementptr inbounds %struct.anon.3, ptr %940, i32 0, i32 3
  store i16 %937, ptr %941, align 2, !tbaa !57
  %942 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %942)
  br label %956

943:                                              ; preds = %932
  %944 = load i64, ptr %7, align 8, !tbaa !11
  %945 = icmp ugt i64 %944, 65535
  br i1 %945, label %946, label %947

946:                                              ; preds = %943
  store i32 22, ptr %8, align 4, !tbaa !9
  br label %955

947:                                              ; preds = %943
  %948 = load i64, ptr %7, align 8, !tbaa !11
  %949 = trunc i64 %948 to i16
  %950 = load ptr, ptr %5, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.MDBX_env, ptr %950, i32 0, i32 34
  %952 = getelementptr inbounds %struct.anon.2, ptr %951, i32 0, i32 14
  %953 = getelementptr inbounds %struct.anon.3, ptr %952, i32 0, i32 3
  store i16 %949, ptr %953, align 2, !tbaa !57
  %954 = load ptr, ptr %5, align 8, !tbaa !5
  call void @recalculate_subpage_thresholds(ptr noundef %954)
  br label %955

955:                                              ; preds = %947, %946
  br label %956

956:                                              ; preds = %955, %935
  br label %959

957:                                              ; preds = %44
  %958 = call i32 @log_if_error(i32 noundef 22, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 468)
  store i32 %958, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

959:                                              ; preds = %956, %931, %906, %881, %856, %833, %798, %774, %745, %721, %697, %673, %654, %529, %459, %419, %274, %234, %204, %130
  %960 = load i8, ptr %11, align 1, !tbaa !25, !range !28, !noundef !29
  %961 = trunc i8 %960 to i1
  br i1 %961, label %962, label %964

962:                                              ; preds = %959
  %963 = load ptr, ptr %5, align 8, !tbaa !5
  call void @lck_txn_unlock(ptr noundef %963)
  br label %964

964:                                              ; preds = %962, %959
  %965 = load i32, ptr %8, align 4, !tbaa !9
  %966 = call i32 @log_if_error(i32 noundef %965, ptr noundef @__func__.mdbx_env_set_option, i32 noundef 473)
  store i32 %966, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %967

967:                                              ; preds = %964, %957, %772, %743, %719, %695, %671, %577, %561, %547, %507, %487, %473, %444, %319, %295, %272, %258, %232, %218, %173, %162, %147, %90, %79, %64
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  br label %968

968:                                              ; preds = %967, %25
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  %969 = load i32, ptr %4, align 4
  ret i32 %969
}

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

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

declare ptr @env_owned_wrtxn(ptr noundef) #2

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

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

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

declare i64 @osal_16dot16_to_monotime(i32 noundef) #2

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

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

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

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #9

declare void @recalculate_merge_thresholds(ptr noundef) #2

declare void @recalculate_subpage_thresholds(ptr noundef) #2

declare void @lck_txn_unlock(ptr noundef) #2

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

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

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


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

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

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@__func__.mdbx_env_set_option = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [39 x i8], align 1

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

; Function Attrs: nounwind uwtable
declare hidden i32 @env_max_pgno(ptr noundef) local_unnamed_addr #1

; Function Attrs: cold nounwind optsize uwtable
declare hidden i32 @default_rp_augment_limit(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @default_dp_reserve_limit(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i32 @default_dp_initial(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_spill_max_denominator(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_spill_min_denominator(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_spill_parent4child_denominator(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @default_dp_loose_limit(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_merge_threshold_16dot16_percent(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @default_prefer_waf_insteadof_balance(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_limit(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_room_threshold(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_reserve_prereq(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @default_subpage_reserve_limit(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @env_options_adjust_dp_limit(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i1 @default_prefault_write(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @mdbx_env_set_option(ptr noundef %0, i32 noundef %1, i64 noundef %2) local_unnamed_addr #2 {
  %4 = tail call i32 @check_env(ptr noundef %0, i1 noundef zeroext false)
  %.not = icmp eq i32 %4, 0
  br i1 %.not, label %7, label %5, !prof !5

5:                                                ; preds = %3
  %6 = tail call i32 @log_if_error(i32 noundef %4, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 184)
  br label %372

7:                                                ; preds = %3
  %8 = getelementptr inbounds i8, ptr %0, i64 4
  %9 = load i32, ptr %8, align 4, !tbaa !6
  %10 = and i32 %9, 536870912
  %.not230 = icmp eq i32 %10, 0
  br i1 %.not230, label %16, label %11

11:                                               ; preds = %7
  %12 = getelementptr inbounds i8, ptr %0, i64 192
  %13 = load ptr, ptr %12, align 8, !tbaa !22
  %.not231 = icmp eq ptr %13, null
  br i1 %.not231, label %16, label %14

14:                                               ; preds = %11
  %15 = tail call ptr @env_owned_wrtxn(ptr noundef nonnull %0) #9
  %.not232 = icmp eq ptr %15, null
  br label %16

16:                                               ; preds = %14, %11, %7
  %17 = phi i1 [ false, %11 ], [ false, %7 ], [ %.not232, %14 ]
  switch i32 %1, label %368 [
    i32 2, label %18
    i32 3, label %50
    i32 0, label %78
    i32 1, label %92
    i32 6, label %106
    i32 4, label %153
    i32 15, label %171
    i32 7, label %198
    i32 8, label %198
    i32 9, label %238
    i32 10, label %249
    i32 11, label %260
    i32 5, label %271
    i32 12, label %282
    i32 13, label %295
    i32 14, label %300
    i32 16, label %317
    i32 17, label %328
    i32 18, label %338
    i32 19, label %348
    i32 20, label %358
  ]

18:                                               ; preds = %16
  %19 = icmp eq i64 %2, -1
  %spec.store.select = select i1 %19, i64 1056964608, i64 %2
  %20 = load i32, ptr %8, align 4, !tbaa !6
  %21 = and i32 %20, 131072
  %.not252 = icmp eq i32 %21, 0
  br i1 %.not252, label %24, label %22, !prof !5

22:                                               ; preds = %18
  %23 = tail call i32 @log_if_error(i32 noundef 13, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 193)
  br label %372

24:                                               ; preds = %18
  %25 = and i32 %20, 536870912
  %.not253 = icmp eq i32 %25, 0
  br i1 %.not253, label %26, label %28, !prof !23

26:                                               ; preds = %24
  %27 = tail call i32 @log_if_error(i32 noundef 1, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 195)
  br label %372

28:                                               ; preds = %24
  %29 = icmp ugt i64 %spec.store.select, -65537
  br i1 %29, label %30, label %32, !prof !23

30:                                               ; preds = %28
  %31 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 197)
  br label %372

32:                                               ; preds = %28
  %33 = getelementptr inbounds i8, ptr %0, i64 8
  %34 = load i32, ptr %33, align 8, !tbaa !24
  %35 = zext i32 %34 to i64
  %36 = add i64 %spec.store.select, -1
  %37 = add i64 %36, %35
  %38 = tail call i32 @bytes2pgno(ptr noundef nonnull %0, i64 noundef %37) #10
  %39 = getelementptr inbounds i8, ptr %0, i64 104
  %40 = load ptr, ptr %39, align 8, !tbaa !25
  %41 = getelementptr inbounds i8, ptr %40, i64 16
  %42 = tail call i32 @atomic_load32(ptr noundef nonnull %41, i32 noundef 1)
  %.not254 = icmp eq i32 %38, %42
  br i1 %.not254, label %.thread273, label %43

43:                                               ; preds = %32
  %44 = load ptr, ptr %39, align 8, !tbaa !25
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  %46 = tail call i32 @atomic_store32(ptr noundef nonnull %45, i32 noundef %38, i32 noundef 0)
  %.not255 = icmp ne i32 %46, 0
  %brmerge.not = select i1 %.not255, i1 %17, i1 false
  br i1 %brmerge.not, label %47, label %.thread273

47:                                               ; preds = %43
  %48 = tail call i32 @env_sync(ptr noundef nonnull %0, i1 noundef zeroext false, i1 noundef zeroext false) #9
  %49 = icmp eq i32 %48, -1
  %spec.store.select1 = select i1 %49, i32 0, i32 %48
  br label %.thread273

50:                                               ; preds = %16
  %51 = icmp eq i64 %2, -1
  %spec.store.select2 = select i1 %51, i64 2780315, i64 %2
  %52 = load i32, ptr %8, align 4, !tbaa !6
  %53 = and i32 %52, 131072
  %.not248 = icmp eq i32 %53, 0
  br i1 %.not248, label %56, label %54, !prof !5

54:                                               ; preds = %50
  %55 = tail call i32 @log_if_error(i32 noundef 13, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 214)
  br label %372

56:                                               ; preds = %50
  %57 = and i32 %52, 536870912
  %.not249 = icmp eq i32 %57, 0
  br i1 %.not249, label %58, label %60, !prof !23

58:                                               ; preds = %56
  %59 = tail call i32 @log_if_error(i32 noundef 1, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 216)
  br label %372

60:                                               ; preds = %56
  %61 = icmp ugt i64 %spec.store.select2, 4294967295
  br i1 %61, label %62, label %64, !prof !23

62:                                               ; preds = %60
  %63 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 218)
  br label %372

64:                                               ; preds = %60
  %65 = trunc nuw i64 %spec.store.select2 to i32
  %66 = tail call i64 @osal_16dot16_to_monotime(i32 noundef %65) #9
  %67 = getelementptr inbounds i8, ptr %0, i64 104
  %68 = load ptr, ptr %67, align 8, !tbaa !25
  %69 = getelementptr inbounds i8, ptr %68, i64 24
  %70 = tail call i64 @atomic_load64(ptr noundef nonnull %69, i32 noundef 1)
  %.not250 = icmp eq i64 %66, %70
  br i1 %.not250, label %.thread273, label %71

71:                                               ; preds = %64
  %72 = load ptr, ptr %67, align 8, !tbaa !25
  %73 = getelementptr inbounds i8, ptr %72, i64 24
  %74 = tail call i64 @atomic_store64(ptr noundef nonnull %73, i64 noundef %66, i32 noundef 0)
  %.not251 = icmp ne i64 %74, 0
  %brmerge258.not = select i1 %.not251, i1 %17, i1 false
  br i1 %brmerge258.not, label %75, label %.thread273

75:                                               ; preds = %71
  %76 = tail call i32 @env_sync(ptr noundef nonnull %0, i1 noundef zeroext false, i1 noundef zeroext false) #9
  %77 = icmp eq i32 %76, -1
  %spec.store.select3 = select i1 %77, i32 0, i32 %76
  br label %.thread273

78:                                               ; preds = %16
  %79 = icmp eq i64 %2, -1
  %spec.store.select4 = select i1 %79, i64 42, i64 %2
  %80 = icmp ugt i64 %spec.store.select4, 32765
  br i1 %80, label %81, label %83, !prof !23

81:                                               ; preds = %78
  %82 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 235)
  br label %372

83:                                               ; preds = %78
  %84 = getelementptr inbounds i8, ptr %0, i64 16
  %85 = load ptr, ptr %84, align 8, !tbaa !26
  %.not247 = icmp eq ptr %85, null
  br i1 %.not247, label %88, label %86, !prof !5

86:                                               ; preds = %83
  %87 = tail call i32 @log_if_error(i32 noundef 1, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 237)
  br label %372

88:                                               ; preds = %83
  %89 = trunc nuw nsw i64 %spec.store.select4 to i32
  %90 = add nuw nsw i32 %89, 2
  %91 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %90, ptr %91, align 8, !tbaa !27
  br label %.thread273

92:                                               ; preds = %16
  %93 = icmp eq i64 %2, -1
  %spec.store.select5 = select i1 %93, i64 32767, i64 %2
  %94 = add i64 %spec.store.select5, -32768
  %95 = icmp ult i64 %94, -32767
  br i1 %95, label %96, label %98, !prof !23

96:                                               ; preds = %92
  %97 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 245)
  br label %372

98:                                               ; preds = %92
  %99 = getelementptr inbounds i8, ptr %0, i64 16
  %100 = load ptr, ptr %99, align 8, !tbaa !26
  %.not246 = icmp eq ptr %100, null
  br i1 %.not246, label %103, label %101, !prof !5

101:                                              ; preds = %98
  %102 = tail call i32 @log_if_error(i32 noundef 1, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 247)
  br label %372

103:                                              ; preds = %98
  %104 = trunc nuw nsw i64 %spec.store.select5 to i32
  %105 = getelementptr inbounds i8, ptr %0, i64 132
  store i32 %104, ptr %105, align 4, !tbaa !28
  br label %.thread273

106:                                              ; preds = %16
  %107 = icmp eq i64 %2, -1
  br i1 %107, label %108, label %111

108:                                              ; preds = %106
  %109 = tail call i32 @default_dp_reserve_limit(ptr noundef nonnull %0)
  %110 = zext i32 %109 to i64
  br label %111

111:                                              ; preds = %108, %106
  %.0206 = phi i64 [ %110, %108 ], [ %2, %106 ]
  %112 = icmp ugt i64 %.0206, 2147483647
  br i1 %112, label %113, label %115, !prof !23

113:                                              ; preds = %111
  %114 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 255)
  br label %372

115:                                              ; preds = %111
  %116 = getelementptr inbounds i8, ptr %0, i64 264
  %117 = load i32, ptr %116, align 8, !tbaa !29
  %118 = trunc nuw nsw i64 %.0206 to i32
  %.not242 = icmp eq i32 %117, %118
  br i1 %.not242, label %.thread273, label %119

119:                                              ; preds = %115
  br i1 %17, label %120, label %124

120:                                              ; preds = %119
  %121 = tail call i32 @lck_txn_lock(ptr noundef nonnull %0, i1 noundef zeroext false) #9
  %.not243 = icmp eq i32 %121, 0
  br i1 %.not243, label %124, label %122, !prof !5

122:                                              ; preds = %120
  %123 = tail call i32 @log_if_error(i32 noundef %121, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 260)
  br label %372

124:                                              ; preds = %120, %119
  store i32 %118, ptr %116, align 8, !tbaa !29
  %125 = getelementptr inbounds i8, ptr %0, i64 444
  %126 = load i32, ptr %125, align 4, !tbaa !30
  %127 = icmp ugt i32 %126, %118
  br i1 %127, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %124
  %128 = getelementptr inbounds i8, ptr %0, i64 448
  %129 = getelementptr inbounds i8, ptr %0, i64 8
  br label %130

130:                                              ; preds = %.lr.ph, %140
  %131 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !31
  %132 = and i8 %131, 1
  %.not244 = icmp ne i8 %132, 0
  %.pre = load ptr, ptr %128, align 8, !tbaa !33
  %.not245 = icmp eq ptr %.pre, null
  %or.cond277 = select i1 %.not244, i1 %.not245, i1 false
  br i1 %or.cond277, label %133, label %134, !prof !34

133:                                              ; preds = %130
  tail call void @mdbx_assert_fail(ptr noundef nonnull %0, ptr noundef nonnull @.str.1, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 265) #11
  unreachable

134:                                              ; preds = %130
  %135 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !35
  %136 = icmp ugt i8 %135, 5
  br i1 %136, label %137, label %140, !prof !23

137:                                              ; preds = %134
  %138 = load i32, ptr %129, align 8, !tbaa !24
  %139 = zext i32 %138 to i64
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 267, ptr noundef nonnull @.str.2, ptr noundef %.pre, i64 noundef %139, i32 noundef 267) #9
  br label %140

140:                                              ; preds = %137, %134
  %141 = getelementptr inbounds i8, ptr %.pre, i64 20
  %142 = ptrtoint ptr %141 to i64
  %143 = add nsw i64 %142, 4
  %144 = inttoptr i64 %143 to ptr
  %145 = load ptr, ptr %144, align 8, !tbaa !36
  store ptr %145, ptr %128, align 8, !tbaa !33
  %146 = ptrtoint ptr %.pre to i64
  %147 = add nsw i64 %146, -8
  %148 = inttoptr i64 %147 to ptr
  tail call void @free(ptr noundef %148) #9
  %149 = load i32, ptr %125, align 4, !tbaa !30
  %150 = add i32 %149, -1
  store i32 %150, ptr %125, align 4, !tbaa !30
  %151 = load i32, ptr %116, align 8, !tbaa !29
  %152 = icmp ugt i32 %150, %151
  br i1 %152, label %130, label %.loopexit, !llvm.loop !37

153:                                              ; preds = %16
  %154 = icmp eq i64 %2, -1
  br i1 %154, label %155, label %161

155:                                              ; preds = %153
  %156 = getelementptr inbounds i8, ptr %0, i64 312
  %157 = load i8, ptr %156, align 8
  %158 = and i8 %157, -3
  store i8 %158, ptr %156, align 8
  %159 = tail call i32 @default_rp_augment_limit(ptr noundef nonnull %0) #12
  %160 = getelementptr inbounds i8, ptr %0, i64 268
  store i32 %159, ptr %160, align 4, !tbaa !39
  br label %.thread273

161:                                              ; preds = %153
  %162 = icmp ugt i64 %2, 2147483647
  br i1 %162, label %163, label %165, !prof !23

163:                                              ; preds = %161
  %164 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 282)
  br label %372

165:                                              ; preds = %161
  %166 = getelementptr inbounds i8, ptr %0, i64 312
  %167 = load i8, ptr %166, align 8
  %168 = or i8 %167, 2
  store i8 %168, ptr %166, align 8
  %169 = trunc nuw nsw i64 %2 to i32
  %170 = getelementptr inbounds i8, ptr %0, i64 268
  store i32 %169, ptr %170, align 4, !tbaa !39
  br label %.thread273

171:                                              ; preds = %16
  %172 = icmp eq i64 %2, -1
  %spec.store.select6 = select i1 %172, i64 0, i64 %2
  %173 = icmp ugt i64 %spec.store.select6, 4294967295
  br i1 %173, label %174, label %176, !prof !23

174:                                              ; preds = %171
  %175 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 293)
  br label %372

176:                                              ; preds = %171
  %177 = load i32, ptr %8, align 4, !tbaa !6
  %178 = and i32 %177, 131072
  %.not238 = icmp eq i32 %178, 0
  br i1 %.not238, label %181, label %179, !prof !5

179:                                              ; preds = %176
  %180 = tail call i32 @log_if_error(i32 noundef 13, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 295)
  br label %372

181:                                              ; preds = %176
  %182 = trunc nuw i64 %spec.store.select6 to i32
  %183 = tail call i64 @osal_16dot16_to_monotime(i32 noundef %182) #9
  %184 = getelementptr inbounds i8, ptr %0, i64 280
  %185 = load i64, ptr %184, align 8, !tbaa !40
  %.not239 = icmp eq i64 %183, %185
  br i1 %.not239, label %.thread273, label %186

186:                                              ; preds = %181
  %187 = getelementptr inbounds i8, ptr %0, i64 384
  %188 = load ptr, ptr %187, align 8, !tbaa !41
  %.not240 = icmp ne ptr %188, null
  %brmerge260.not = select i1 %.not240, i1 %17, i1 false
  br i1 %brmerge260.not, label %189, label %191

189:                                              ; preds = %186
  %190 = tail call i32 @log_if_error(i32 noundef 1, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 299)
  br label %372

191:                                              ; preds = %186
  store i64 %183, ptr %184, align 8, !tbaa !40
  %192 = getelementptr inbounds i8, ptr %0, i64 312
  %193 = load i8, ptr %192, align 8
  %194 = and i8 %193, 2
  %.not241 = icmp eq i8 %194, 0
  br i1 %.not241, label %195, label %.thread273

195:                                              ; preds = %191
  %196 = tail call i32 @default_rp_augment_limit(ptr noundef nonnull %0) #12
  %197 = getelementptr inbounds i8, ptr %0, i64 268
  store i32 %196, ptr %197, align 4, !tbaa !39
  br label %.thread273

198:                                              ; preds = %16, %16
  %.not234 = icmp ne i64 %2, -1
  %199 = add i64 %2, -2147483648
  %200 = icmp ult i64 %199, -2147483520
  %or.cond = and i1 %.not234, %200
  br i1 %or.cond, label %201, label %203, !prof !42

201:                                              ; preds = %198
  %202 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 309)
  br label %372

203:                                              ; preds = %198
  %204 = load i32, ptr %8, align 4, !tbaa !6
  %205 = and i32 %204, 131072
  %.not235 = icmp eq i32 %205, 0
  br i1 %.not235, label %208, label %206, !prof !5

206:                                              ; preds = %203
  %207 = tail call i32 @log_if_error(i32 noundef 13, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 311)
  br label %372

208:                                              ; preds = %203
  br i1 %17, label %209, label %213

209:                                              ; preds = %208
  %210 = tail call i32 @lck_txn_lock(ptr noundef nonnull %0, i1 noundef zeroext false) #9
  %.not236 = icmp eq i32 %210, 0
  br i1 %.not236, label %213, label %211, !prof !5

211:                                              ; preds = %209
  %212 = tail call i32 @log_if_error(i32 noundef %210, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 315)
  br label %372

213:                                              ; preds = %209, %208
  %214 = getelementptr inbounds i8, ptr %0, i64 384
  %215 = load ptr, ptr %214, align 8, !tbaa !41
  %.not237 = icmp eq ptr %215, null
  br i1 %.not237, label %216, label %.loopexit

216:                                              ; preds = %213
  %217 = tail call i32 @env_max_pgno(ptr noundef nonnull %0)
  %switch = icmp eq i32 %1, 8
  %218 = icmp eq i64 %2, -1
  br i1 %switch, label %219, label %228

219:                                              ; preds = %216
  %220 = getelementptr inbounds i8, ptr %0, i64 276
  br i1 %218, label %221, label %223

221:                                              ; preds = %219
  %222 = tail call i32 @default_dp_initial(ptr noundef nonnull %0)
  store i32 %222, ptr %220, align 4, !tbaa !43
  br label %.loopexit

223:                                              ; preds = %219
  %224 = trunc i64 %2 to i32
  store i32 %224, ptr %220, align 4, !tbaa !43
  %225 = icmp ult i32 %217, %224
  br i1 %225, label %226, label %.loopexit

226:                                              ; preds = %223
  %227 = tail call i32 @llvm.umax.i32(i32 %217, i32 128)
  store i32 %227, ptr %220, align 4, !tbaa !43
  br label %.loopexit

228:                                              ; preds = %216
  %229 = getelementptr inbounds i8, ptr %0, i64 312
  %230 = load i8, ptr %229, align 8
  br i1 %218, label %231, label %233

231:                                              ; preds = %228
  %232 = and i8 %230, -2
  store i8 %232, ptr %229, align 8
  br label %237

233:                                              ; preds = %228
  %234 = or i8 %230, 1
  store i8 %234, ptr %229, align 8
  %235 = trunc i64 %2 to i32
  %236 = getelementptr inbounds i8, ptr %0, i64 272
  store i32 %235, ptr %236, align 8, !tbaa !44
  br label %237

237:                                              ; preds = %233, %231
  tail call void @env_options_adjust_dp_limit(ptr noundef nonnull %0)
  br label %.loopexit

238:                                              ; preds = %16
  %239 = icmp eq i64 %2, -1
  br i1 %239, label %.thread, label %242

.thread:                                          ; preds = %238
  %240 = tail call zeroext i8 @default_spill_max_denominator(ptr noundef nonnull %0)
  %241 = zext i8 %240 to i64
  br label %246

242:                                              ; preds = %238
  %243 = icmp ugt i64 %2, 255
  br i1 %243, label %244, label %246, !prof !45

244:                                              ; preds = %242
  %245 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 347)
  br label %372

246:                                              ; preds = %.thread, %242
  %.1207263 = phi i64 [ %241, %.thread ], [ %2, %242 ]
  %247 = trunc nuw i64 %.1207263 to i8
  %248 = getelementptr inbounds i8, ptr %0, i64 289
  store i8 %247, ptr %248, align 1, !tbaa !46
  br label %.thread273

249:                                              ; preds = %16
  %250 = icmp eq i64 %2, -1
  br i1 %250, label %.thread264, label %253

.thread264:                                       ; preds = %249
  %251 = tail call zeroext i8 @default_spill_min_denominator(ptr noundef nonnull %0)
  %252 = zext i8 %251 to i64
  br label %257

253:                                              ; preds = %249
  %254 = icmp ugt i64 %2, 255
  br i1 %254, label %255, label %257, !prof !45

255:                                              ; preds = %253
  %256 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 354)
  br label %372

257:                                              ; preds = %.thread264, %253
  %.2266 = phi i64 [ %252, %.thread264 ], [ %2, %253 ]
  %258 = trunc nuw i64 %.2266 to i8
  %259 = getelementptr inbounds i8, ptr %0, i64 290
  store i8 %258, ptr %259, align 2, !tbaa !47
  br label %.thread273

260:                                              ; preds = %16
  %261 = icmp eq i64 %2, -1
  br i1 %261, label %.thread267, label %264

.thread267:                                       ; preds = %260
  %262 = tail call zeroext i8 @default_spill_parent4child_denominator(ptr noundef nonnull %0)
  %263 = zext i8 %262 to i64
  br label %268

264:                                              ; preds = %260
  %265 = icmp ugt i64 %2, 255
  br i1 %265, label %266, label %268, !prof !45

266:                                              ; preds = %264
  %267 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 361)
  br label %372

268:                                              ; preds = %.thread267, %264
  %.3269 = phi i64 [ %263, %.thread267 ], [ %2, %264 ]
  %269 = trunc nuw i64 %.3269 to i8
  %270 = getelementptr inbounds i8, ptr %0, i64 291
  store i8 %269, ptr %270, align 1, !tbaa !48
  br label %.thread273

271:                                              ; preds = %16
  %272 = icmp eq i64 %2, -1
  br i1 %272, label %.thread270, label %275

.thread270:                                       ; preds = %271
  %273 = tail call zeroext i8 @default_dp_loose_limit(ptr noundef nonnull %0)
  %274 = zext i8 %273 to i64
  br label %279

275:                                              ; preds = %271
  %276 = icmp ugt i64 %2, 255
  br i1 %276, label %277, label %279, !prof !45

277:                                              ; preds = %275
  %278 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 369)
  br label %372

279:                                              ; preds = %.thread270, %275
  %.4272 = phi i64 [ %274, %.thread270 ], [ %2, %275 ]
  %280 = trunc nuw i64 %.4272 to i8
  %281 = getelementptr inbounds i8, ptr %0, i64 288
  store i8 %280, ptr %281, align 8, !tbaa !49
  br label %.thread273

282:                                              ; preds = %16
  %283 = icmp eq i64 %2, -1
  br i1 %283, label %284, label %287

284:                                              ; preds = %282
  %285 = tail call zeroext i16 @default_merge_threshold_16dot16_percent(ptr noundef nonnull %0)
  %286 = zext i16 %285 to i64
  br label %287

287:                                              ; preds = %284, %282
  %.5 = phi i64 [ %286, %284 ], [ %2, %282 ]
  %288 = add i64 %.5, -32769
  %289 = icmp ult i64 %288, -24577
  br i1 %289, label %290, label %292, !prof !23

290:                                              ; preds = %287
  %291 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 377)
  br label %372

292:                                              ; preds = %287
  %293 = trunc nuw nsw i64 %.5 to i32
  %294 = getelementptr inbounds i8, ptr %0, i64 292
  store i32 %293, ptr %294, align 4, !tbaa !50
  tail call void @recalculate_merge_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

295:                                              ; preds = %16
  %296 = icmp eq i64 %2, -1
  %spec.store.select7 = select i1 %296, i64 2, i64 %2
  %.not233 = icmp ult i64 %spec.store.select7, 4294967296
  br i1 %.not233, label %297, label %.thread273

297:                                              ; preds = %295
  %298 = trunc nuw i64 %spec.store.select7 to i32
  %299 = getelementptr inbounds i8, ptr %0, i64 296
  store i32 %298, ptr %299, align 8, !tbaa !51
  br label %.thread273

300:                                              ; preds = %16
  %301 = icmp eq i64 %2, -1
  br i1 %301, label %302, label %309

302:                                              ; preds = %300
  %303 = tail call zeroext i1 @default_prefault_write(ptr noundef nonnull %0)
  %304 = getelementptr inbounds i8, ptr %0, i64 300
  %305 = zext i1 %303 to i8
  store i8 %305, ptr %304, align 4, !tbaa !52
  %306 = getelementptr inbounds i8, ptr %0, i64 312
  %307 = load i8, ptr %306, align 8
  %308 = and i8 %307, -5
  store i8 %308, ptr %306, align 8
  br label %.thread273

309:                                              ; preds = %300
  %310 = icmp ugt i64 %2, 1
  br i1 %310, label %.thread273, label %311

311:                                              ; preds = %309
  %312 = getelementptr inbounds i8, ptr %0, i64 300
  %313 = trunc nuw i64 %2 to i8
  store i8 %313, ptr %312, align 4, !tbaa !52
  %314 = getelementptr inbounds i8, ptr %0, i64 312
  %315 = load i8, ptr %314, align 8
  %316 = or i8 %315, 4
  store i8 %316, ptr %314, align 8
  br label %.thread273

317:                                              ; preds = %16
  %318 = icmp eq i64 %2, -1
  br i1 %318, label %319, label %323

319:                                              ; preds = %317
  %320 = tail call zeroext i1 @default_prefer_waf_insteadof_balance(ptr noundef nonnull %0)
  %321 = getelementptr inbounds i8, ptr %0, i64 301
  %322 = zext i1 %320 to i8
  store i8 %322, ptr %321, align 1, !tbaa !53
  br label %.thread273

323:                                              ; preds = %317
  %324 = icmp ugt i64 %2, 1
  br i1 %324, label %.thread273, label %325

325:                                              ; preds = %323
  %326 = getelementptr inbounds i8, ptr %0, i64 301
  %327 = trunc nuw i64 %2 to i8
  store i8 %327, ptr %326, align 1, !tbaa !53
  br label %.thread273

328:                                              ; preds = %16
  %329 = icmp eq i64 %2, -1
  br i1 %329, label %330, label %333

330:                                              ; preds = %328
  %331 = tail call zeroext i16 @default_subpage_limit(ptr noundef nonnull %0)
  %332 = getelementptr inbounds i8, ptr %0, i64 304
  store i16 %331, ptr %332, align 8, !tbaa !54
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

333:                                              ; preds = %328
  %334 = icmp ugt i64 %2, 65535
  br i1 %334, label %.thread273, label %335

335:                                              ; preds = %333
  %336 = trunc nuw i64 %2 to i16
  %337 = getelementptr inbounds i8, ptr %0, i64 304
  store i16 %336, ptr %337, align 8, !tbaa !54
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

338:                                              ; preds = %16
  %339 = icmp eq i64 %2, -1
  br i1 %339, label %340, label %343

340:                                              ; preds = %338
  %341 = tail call zeroext i16 @default_subpage_room_threshold(ptr noundef nonnull %0)
  %342 = getelementptr inbounds i8, ptr %0, i64 306
  store i16 %341, ptr %342, align 2, !tbaa !55
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

343:                                              ; preds = %338
  %344 = icmp ugt i64 %2, 65535
  br i1 %344, label %.thread273, label %345

345:                                              ; preds = %343
  %346 = trunc nuw i64 %2 to i16
  %347 = getelementptr inbounds i8, ptr %0, i64 306
  store i16 %346, ptr %347, align 2, !tbaa !55
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

348:                                              ; preds = %16
  %349 = icmp eq i64 %2, -1
  br i1 %349, label %350, label %353

350:                                              ; preds = %348
  %351 = tail call zeroext i16 @default_subpage_reserve_prereq(ptr noundef nonnull %0)
  %352 = getelementptr inbounds i8, ptr %0, i64 308
  store i16 %351, ptr %352, align 4, !tbaa !56
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

353:                                              ; preds = %348
  %354 = icmp ugt i64 %2, 65535
  br i1 %354, label %.thread273, label %355

355:                                              ; preds = %353
  %356 = trunc nuw i64 %2 to i16
  %357 = getelementptr inbounds i8, ptr %0, i64 308
  store i16 %356, ptr %357, align 4, !tbaa !56
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

358:                                              ; preds = %16
  %359 = icmp eq i64 %2, -1
  br i1 %359, label %360, label %363

360:                                              ; preds = %358
  %361 = tail call zeroext i16 @default_subpage_reserve_limit(ptr noundef nonnull %0)
  %362 = getelementptr inbounds i8, ptr %0, i64 310
  store i16 %361, ptr %362, align 2, !tbaa !57
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

363:                                              ; preds = %358
  %364 = icmp ugt i64 %2, 65535
  br i1 %364, label %.thread273, label %365

365:                                              ; preds = %363
  %366 = trunc nuw i64 %2 to i16
  %367 = getelementptr inbounds i8, ptr %0, i64 310
  store i16 %366, ptr %367, align 2, !tbaa !57
  tail call void @recalculate_subpage_thresholds(ptr noundef nonnull %0) #9
  br label %.thread273

368:                                              ; preds = %16
  %369 = tail call i32 @log_if_error(i32 noundef 22, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 468)
  br label %372

.loopexit:                                        ; preds = %140, %124, %223, %226, %221, %237, %213
  %.2210 = phi i32 [ 1, %213 ], [ 0, %237 ], [ 0, %221 ], [ 0, %226 ], [ 0, %223 ], [ 0, %124 ], [ 0, %140 ]
  br i1 %17, label %370, label %.thread273

370:                                              ; preds = %.loopexit
  tail call void @lck_txn_unlock(ptr noundef nonnull %0) #9
  br label %.thread273

.thread273:                                       ; preds = %363, %353, %343, %333, %323, %309, %295, %32, %43, %47, %64, %71, %75, %88, %103, %115, %165, %155, %181, %195, %191, %246, %257, %268, %279, %292, %297, %311, %302, %325, %319, %335, %330, %345, %340, %355, %350, %365, %360, %370, %.loopexit
  %.2210276 = phi i32 [ %.2210, %370 ], [ %.2210, %.loopexit ], [ 22, %363 ], [ 22, %353 ], [ 22, %343 ], [ 22, %333 ], [ 22, %323 ], [ 22, %309 ], [ 22, %295 ], [ 0, %32 ], [ 0, %43 ], [ %spec.store.select1, %47 ], [ 0, %64 ], [ 0, %71 ], [ %spec.store.select3, %75 ], [ 0, %88 ], [ 0, %103 ], [ 0, %115 ], [ 0, %165 ], [ 0, %155 ], [ 0, %181 ], [ 0, %195 ], [ 0, %191 ], [ 0, %246 ], [ 0, %257 ], [ 0, %268 ], [ 0, %279 ], [ 0, %292 ], [ 0, %297 ], [ 0, %311 ], [ 0, %302 ], [ 0, %325 ], [ 0, %319 ], [ 0, %335 ], [ 0, %330 ], [ 0, %345 ], [ 0, %340 ], [ 0, %355 ], [ 0, %350 ], [ 0, %365 ], [ 0, %360 ]
  %371 = tail call i32 @log_if_error(i32 noundef %.2210276, ptr noundef nonnull @__func__.mdbx_env_set_option, i32 noundef 473)
  br label %372

372:                                              ; preds = %22, %26, %30, %54, %58, %62, %81, %86, %96, %101, %113, %122, %163, %174, %179, %189, %201, %206, %211, %244, %255, %266, %277, %290, %368, %.thread273, %5
  %.1 = phi i32 [ %6, %5 ], [ %369, %368 ], [ %371, %.thread273 ], [ %291, %290 ], [ %278, %277 ], [ %267, %266 ], [ %256, %255 ], [ %245, %244 ], [ %202, %201 ], [ %207, %206 ], [ %212, %211 ], [ %175, %174 ], [ %180, %179 ], [ %190, %189 ], [ %164, %163 ], [ %114, %113 ], [ %123, %122 ], [ %97, %96 ], [ %102, %101 ], [ %82, %81 ], [ %87, %86 ], [ %55, %54 ], [ %59, %58 ], [ %63, %62 ], [ %23, %22 ], [ %27, %26 ], [ %31, %30 ]
  ret i32 %.1
}

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

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

declare ptr @env_owned_wrtxn(ptr noundef) local_unnamed_addr #0

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

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

declare i32 @env_sync(ptr noundef, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #0

declare i64 @osal_16dot16_to_monotime(i32 noundef) local_unnamed_addr #0

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

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

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #7

declare void @recalculate_merge_thresholds(ptr noundef) local_unnamed_addr #0

declare void @recalculate_subpage_thresholds(ptr noundef) local_unnamed_addr #0

declare void @lck_txn_unlock(ptr noundef) local_unnamed_addr #0

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = { noreturn "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { noreturn nounwind }
attributes #12 = { 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, !10, i64 4}
!7 = !{!"MDBX_env", !8, i64 0, !10, i64 4, !10, i64 8, !11, i64 16, !10, i64 56, !10, i64 60, !11, i64 64, !13, i64 104, !14, i64 112, !14, i64 114, !14, i64 116, !14, i64 118, !14, i64 120, !14, i64 122, !8, i64 124, !8, i64 128, !8, i64 129, !14, i64 130, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !15, i64 152, !13, i64 184, !13, i64 192, !13, i64 200, !13, i64 208, !13, i64 216, !10, i64 224, !10, i64 228, !10, i64 232, !13, i64 240, !13, i64 248, !12, i64 256, !16, i64 264, !19, i64 320, !17, i64 360, !13, i64 368, !13, i64 376, !13, i64 384, !20, i64 392, !8, i64 400, !10, i64 440, !10, i64 444, !13, i64 448, !21, i64 456, !8, i64 496, !8, i64 536}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"osal_mmap", !8, i64 0, !10, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!12 = !{!"long", !8, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"short", !8, i64 0}
!15 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!16 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !12, i64 16, !8, i64 24, !8, i64 25, !8, i64 26, !8, i64 27, !10, i64 28, !10, i64 32, !17, i64 36, !17, i64 37, !17, i64 38, !18, i64 40, !8, i64 48}
!17 = !{!"_Bool", !8, i64 0}
!18 = !{!"", !14, i64 0, !14, i64 2, !14, i64 4, !14, i64 6}
!19 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!20 = !{!"", !12, i64 0}
!21 = !{!"osal_ioring", !10, i64 0, !10, i64 4, !10, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!22 = !{!7, !13, i64 192}
!23 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!24 = !{!7, !10, i64 8}
!25 = !{!7, !13, i64 104}
!26 = !{!8, !8, i64 0}
!27 = !{!7, !10, i64 136}
!28 = !{!7, !10, i64 132}
!29 = !{!7, !10, i64 264}
!30 = !{!7, !10, i64 444}
!31 = !{!32, !8, i64 25}
!32 = !{!"libmdbx_globals", !8, i64 0, !10, i64 16, !10, i64 20, !8, i64 24, !8, i64 25, !8, i64 26, !17, i64 27, !10, i64 28, !8, i64 32, !8, i64 40, !12, i64 80, !13, i64 88}
!33 = !{!7, !13, i64 448}
!34 = !{!"branch_weights", i32 2000, i32 4002001}
!35 = !{!32, !8, i64 26}
!36 = !{!13, !13, i64 0}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = !{!7, !10, i64 268}
!40 = !{!7, !12, i64 280}
!41 = !{!7, !13, i64 384}
!42 = !{!"branch_weights", i32 1, i32 4001}
!43 = !{!7, !10, i64 276}
!44 = !{!7, !10, i64 272}
!45 = !{!"branch_weights", !"expected", i32 1717128, i32 2145766520}
!46 = !{!7, !8, i64 289}
!47 = !{!7, !8, i64 290}
!48 = !{!7, !8, i64 291}
!49 = !{!7, !8, i64 288}
!50 = !{!7, !10, i64 292}
!51 = !{!7, !10, i64 296}
!52 = !{!7, !17, i64 300}
!53 = !{!7, !17, i64 301}
!54 = !{!7, !14, i64 304}
!55 = !{!7, !14, i64 306}
!56 = !{!7, !14, i64 308}
!57 = !{!7, !14, i64 310}


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