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

; 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.iov_ctx = type { ptr, ptr, i32, i32, i32, i32, i64 }
%struct.MDBX_txn = type { i32, i32, i64, i64, ptr, ptr, %struct.geo, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, %struct.MDBX_canary, ptr, %union.anon.2 }
%struct.geo = type { i16, i16, i32, i32, %union.anon, %union.anon.1 }
%union.anon = type { i32 }
%union.anon.1 = type { i32 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.2 = type { %struct.anon.4 }
%struct.anon.4 = type { %struct.troika, ptr, %struct.anon.5, i8, i32, i32, i64, ptr, ptr, ptr, i64, %union.anon.6 }
%struct.troika = type { i8, i8, i8, i8, i32, [3 x i64] }
%struct.anon.5 = type { %struct.MDBX_rkl, i64, %struct.MDBX_rkl }
%struct.MDBX_rkl = type { i64, i64, i32, i32, ptr, [12 x i64] }
%union.anon.6 = type { %struct.anon.7 }
%struct.anon.7 = type { i64, ptr }
%struct.dpl = type { i64, i64, i64, i64, [18 x %struct.dp] }
%struct.dp = type { ptr, i32, i32 }
%struct.MDBX_env = type { %union.mdbx_atomic_uint32_t, i32, i32, %struct.osal_mmap, i32, i32, %struct.osal_mmap, ptr, i16, i16, i16, i16, i16, i16, %union.mdbx_atomic_uint32_t, i8, i8, i16, i32, i32, i32, i32, %struct.anon.9, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.10, %struct.anon.14, i8, ptr, ptr, ptr, %struct.anon.15, %union.pthread_mutex_t, i32, i32, ptr, %struct.osal_ioring, %union.pthread_mutex_t, [71 x %union.mdbx_atomic_uint64_t] }
%struct.osal_mmap = type { %union.anon.8, i32, i64, i64, i64 }
%union.anon.8 = type { ptr }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.anon.9 = type { ptr, ptr, ptr, ptr }
%struct.anon.10 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.11, %union.anon.12 }
%struct.anon.11 = type { i16, i16, i16, i16 }
%union.anon.12 = type { i32 }
%struct.anon.14 = type { i64, i64, i64, i64, i64 }
%struct.anon.15 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }
%struct.shared_lck = type { i64, i32, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint32_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, [2 x %union.mdbx_atomic_uint32_t], [16 x i8], %struct.pgops, [16 x i8], %union.pthread_mutex_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint64_t, %union.mdbx_atomic_uint32_t, i32, %struct.anon.18, %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.16 }
%struct.anon.16 = 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.17 }
%struct.anon.17 = type { i64, i64, i32 }
%struct.anon.18 = 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.19, i32, [0 x i16] }>
%union.anon.19 = type { i32 }

@globals = external global %struct.libmdbx_globals, align 8
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@__func__.spill_slowpath = external hidden unnamed_addr constant [15 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [69 x i8], align 1

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

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

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

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

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

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

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

62:                                               ; preds = %51
  br label %63

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

76:                                               ; preds = %63
  %77 = load ptr, ptr %7, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.MDBX_txn, ptr %77, i32 0, i32 9
  %79 = load ptr, ptr %78, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %79, ptr noundef @.str.4, ptr noundef @__func__.spill_slowpath, i32 noundef 182) #12
  unreachable

80:                                               ; preds = %63
  br label %81

81:                                               ; preds = %80
  br label %82

82:                                               ; preds = %81, %51
  br label %83

83:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #13
  store i32 0, ptr %12, align 4, !tbaa !21
  %84 = load ptr, ptr %7, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.MDBX_txn, ptr %84, i32 0, i32 17
  %86 = getelementptr inbounds %struct.anon.4, ptr %85, i32 0, i32 10
  %87 = load i64, ptr %86, align 8, !tbaa !22
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.MDBX_txn, ptr %88, i32 0, i32 17
  %90 = getelementptr inbounds %struct.anon.4, ptr %89, i32 0, i32 7
  %91 = load ptr, ptr %90, align 8, !tbaa !22
  %92 = icmp ne ptr %91, null
  br i1 %92, label %93, label %100

93:                                               ; preds = %83
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.MDBX_txn, ptr %94, i32 0, i32 17
  %96 = getelementptr inbounds %struct.anon.4, ptr %95, i32 0, i32 7
  %97 = load ptr, ptr %96, align 8, !tbaa !22
  %98 = getelementptr inbounds %struct.dpl, ptr %97, i32 0, i32 2
  %99 = load i64, ptr %98, align 8, !tbaa !23
  br label %105

100:                                              ; preds = %83
  %101 = load ptr, ptr %7, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.MDBX_txn, ptr %101, i32 0, i32 17
  %103 = getelementptr inbounds %struct.anon.4, ptr %102, i32 0, i32 11
  %104 = load i64, ptr %103, align 8, !tbaa !22
  br label %105

105:                                              ; preds = %100, %93
  %106 = phi i64 [ %99, %93 ], [ %104, %100 ]
  %107 = icmp uge i64 %87, %106
  %108 = xor i1 %107, true
  %109 = xor i1 %108, true
  %110 = zext i1 %109 to i32
  %111 = sext i32 %110 to i64
  %112 = call i64 @llvm.expect.i64(i64 %111, i64 0)
  %113 = icmp ne i64 %112, 0
  br i1 %113, label %114, label %115

114:                                              ; preds = %105
  br label %1453

115:                                              ; preds = %105
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.MDBX_txn, ptr %116, i32 0, i32 17
  %118 = getelementptr inbounds %struct.anon.4, ptr %117, i32 0, i32 7
  %119 = load ptr, ptr %118, align 8, !tbaa !22
  %120 = icmp ne ptr %119, null
  br i1 %120, label %121, label %133

121:                                              ; preds = %115
  %122 = load ptr, ptr %7, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.MDBX_txn, ptr %122, i32 0, i32 17
  %124 = getelementptr inbounds %struct.anon.4, ptr %123, i32 0, i32 7
  %125 = load ptr, ptr %124, align 8, !tbaa !22
  %126 = getelementptr inbounds %struct.dpl, ptr %125, i32 0, i32 1
  %127 = load i64, ptr %126, align 8, !tbaa !25
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.MDBX_txn, ptr %128, i32 0, i32 17
  %130 = getelementptr inbounds %struct.anon.4, ptr %129, i32 0, i32 10
  %131 = load i64, ptr %130, align 8, !tbaa !22
  %132 = sub i64 %127, %131
  br label %134

133:                                              ; preds = %115
  br label %134

134:                                              ; preds = %133, %121
  %135 = phi i64 [ %132, %121 ], [ 1, %133 ]
  store i64 %135, ptr %13, align 8, !tbaa !9
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.MDBX_txn, ptr %136, i32 0, i32 17
  %138 = getelementptr inbounds %struct.anon.4, ptr %137, i32 0, i32 7
  %139 = load ptr, ptr %138, align 8, !tbaa !22
  %140 = icmp ne ptr %139, null
  br i1 %140, label %141, label %148

141:                                              ; preds = %134
  %142 = load ptr, ptr %7, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.MDBX_txn, ptr %142, i32 0, i32 17
  %144 = getelementptr inbounds %struct.anon.4, ptr %143, i32 0, i32 7
  %145 = load ptr, ptr %144, align 8, !tbaa !22
  %146 = getelementptr inbounds %struct.dpl, ptr %145, i32 0, i32 2
  %147 = load i64, ptr %146, align 8, !tbaa !23
  br label %153

148:                                              ; preds = %134
  %149 = load ptr, ptr %7, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.MDBX_txn, ptr %149, i32 0, i32 17
  %151 = getelementptr inbounds %struct.anon.4, ptr %150, i32 0, i32 11
  %152 = load i64, ptr %151, align 8, !tbaa !22
  br label %153

153:                                              ; preds = %148, %141
  %154 = phi i64 [ %147, %141 ], [ %152, %148 ]
  %155 = load ptr, ptr %7, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.MDBX_txn, ptr %155, i32 0, i32 17
  %157 = getelementptr inbounds %struct.anon.4, ptr %156, i32 0, i32 10
  %158 = load i64, ptr %157, align 8, !tbaa !22
  %159 = sub i64 %154, %158
  store i64 %159, ptr %14, align 8, !tbaa !9
  %160 = load ptr, ptr %7, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.MDBX_txn, ptr %160, i32 0, i32 9
  %162 = load ptr, ptr %161, align 8, !tbaa !20
  %163 = load i64, ptr %9, align 8, !tbaa !9
  %164 = load i64, ptr %13, align 8, !tbaa !9
  %165 = call i64 @spill_gate(ptr noundef %162, i64 noundef %163, i64 noundef %164)
  store i64 %165, ptr %15, align 8, !tbaa !9
  %166 = load ptr, ptr %7, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.MDBX_txn, ptr %166, i32 0, i32 9
  %168 = load ptr, ptr %167, align 8, !tbaa !20
  %169 = load i64, ptr %10, align 8, !tbaa !9
  %170 = load i64, ptr %14, align 8, !tbaa !9
  %171 = call i64 @spill_gate(ptr noundef %168, i64 noundef %169, i64 noundef %170)
  store i64 %171, ptr %16, align 8, !tbaa !9
  %172 = load i64, ptr %15, align 8, !tbaa !9
  %173 = load i64, ptr %16, align 8, !tbaa !9
  %174 = icmp ugt i64 %172, %173
  br i1 %174, label %175, label %177

175:                                              ; preds = %153
  %176 = load i64, ptr %15, align 8, !tbaa !9
  br label %179

177:                                              ; preds = %153
  %178 = load i64, ptr %16, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %177, %175
  %180 = phi i64 [ %176, %175 ], [ %178, %177 ]
  store i64 %180, ptr %17, align 8, !tbaa !9
  %181 = load i64, ptr %17, align 8, !tbaa !9
  %182 = icmp ne i64 %181, 0
  br i1 %182, label %184, label %183

183:                                              ; preds = %179
  br label %1453

184:                                              ; preds = %179
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.MDBX_txn, ptr %185, i32 0, i32 1
  %187 = load i32, ptr %186, align 4, !tbaa !15
  %188 = and i32 %187, 524288
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %190, label %327

190:                                              ; preds = %184
  br label %191

191:                                              ; preds = %190
  %192 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %193 = zext i8 %192 to i32
  %194 = icmp sle i32 3, %193
  %195 = xor i1 %194, true
  %196 = xor i1 %195, true
  %197 = zext i1 %196 to i32
  %198 = sext i32 %197 to i64
  %199 = call i64 @llvm.expect.i64(i64 %198, i64 0)
  %200 = icmp ne i64 %199, 0
  br i1 %200, label %201, label %204

201:                                              ; preds = %191
  %202 = load i64, ptr %13, align 8, !tbaa !9
  %203 = load i64, ptr %14, align 8, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.spill_slowpath, i32 noundef 201, ptr noundef @.str.5, ptr noundef @.str.6, i64 noundef %202, i64 noundef %203)
  br label %204

204:                                              ; preds = %201, %191
  br label %205

205:                                              ; preds = %204
  br label %206

206:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #13
  %207 = load ptr, ptr %7, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.MDBX_txn, ptr %207, i32 0, i32 9
  %209 = load ptr, ptr %208, align 8, !tbaa !20
  store ptr %209, ptr %18, align 8, !tbaa !5
  br label %210

210:                                              ; preds = %206
  %211 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %212 = zext i8 %211 to i32
  %213 = and i32 %212, 1
  %214 = icmp ne i32 %213, 0
  %215 = xor i1 %214, true
  %216 = xor i1 %215, true
  %217 = zext i1 %216 to i32
  %218 = sext i32 %217 to i64
  %219 = call i64 @llvm.expect.i64(i64 %218, i64 1)
  %220 = icmp ne i64 %219, 0
  br i1 %220, label %221, label %243

221:                                              ; preds = %210
  br label %222

222:                                              ; preds = %221
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.MDBX_txn, ptr %223, i32 0, i32 17
  %225 = getelementptr inbounds %struct.anon.4, ptr %224, i32 0, i32 11
  %226 = getelementptr inbounds %struct.anon.7, ptr %225, i32 0, i32 1
  %227 = load ptr, ptr %226, align 8, !tbaa !22
  %228 = icmp eq ptr %227, null
  %229 = xor i1 %228, true
  %230 = xor i1 %229, true
  %231 = xor i1 %230, true
  %232 = zext i1 %231 to i32
  %233 = sext i32 %232 to i64
  %234 = call i64 @llvm.expect.i64(i64 %233, i64 0)
  %235 = icmp ne i64 %234, 0
  br i1 %235, label %236, label %240

236:                                              ; preds = %222
  %237 = load ptr, ptr %7, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.MDBX_txn, ptr %237, i32 0, i32 9
  %239 = load ptr, ptr %238, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %239, ptr noundef @.str.7, ptr noundef @__func__.spill_slowpath, i32 noundef 203) #12
  unreachable

240:                                              ; preds = %222
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241
  br label %243

243:                                              ; preds = %242, %210
  br label %244

244:                                              ; preds = %243
  br label %245

245:                                              ; preds = %244
  %246 = load ptr, ptr %7, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.MDBX_txn, ptr %246, i32 0, i32 9
  %248 = load ptr, ptr %247, align 8, !tbaa !20
  %249 = getelementptr inbounds %struct.MDBX_env, ptr %248, i32 0, i32 3
  %250 = load ptr, ptr %18, align 8, !tbaa !5
  %251 = load ptr, ptr %7, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.MDBX_txn, ptr %251, i32 0, i32 6
  %253 = getelementptr inbounds %struct.geo, ptr %252, i32 0, i32 5
  %254 = load i32, ptr %253, align 8, !tbaa !22
  %255 = zext i32 %254 to i64
  %256 = call i64 @pgno_align2os_bytes(ptr noundef %250, i64 noundef %255) #14
  %257 = call i32 @osal_msync(ptr noundef %249, i64 noundef 0, i64 noundef %256, i32 noundef 1)
  store i32 %257, ptr %12, align 4, !tbaa !21
  %258 = load i32, ptr %12, align 4, !tbaa !21
  %259 = icmp ne i32 %258, 0
  %260 = xor i1 %259, true
  %261 = xor i1 %260, true
  %262 = zext i1 %261 to i32
  %263 = sext i32 %262 to i64
  %264 = call i64 @llvm.expect.i64(i64 %263, i64 0)
  %265 = icmp ne i64 %264, 0
  br i1 %265, label %266, label %267

266:                                              ; preds = %245
  store i32 13, ptr %19, align 4
  br label %325

267:                                              ; preds = %245
  br label %268

268:                                              ; preds = %267
  %269 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %270 = zext i8 %269 to i32
  %271 = and i32 %270, 1
  %272 = icmp ne i32 %271, 0
  %273 = xor i1 %272, true
  %274 = xor i1 %273, true
  %275 = zext i1 %274 to i32
  %276 = sext i32 %275 to i64
  %277 = call i64 @llvm.expect.i64(i64 %276, i64 1)
  %278 = icmp ne i64 %277, 0
  br i1 %278, label %279, label %300

279:                                              ; preds = %268
  br label %280

280:                                              ; preds = %279
  %281 = load ptr, ptr %7, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.MDBX_txn, ptr %281, i32 0, i32 17
  %283 = getelementptr inbounds %struct.anon.4, ptr %282, i32 0, i32 7
  %284 = load ptr, ptr %283, align 8, !tbaa !22
  %285 = icmp eq ptr %284, null
  %286 = xor i1 %285, true
  %287 = xor i1 %286, true
  %288 = xor i1 %287, true
  %289 = zext i1 %288 to i32
  %290 = sext i32 %289 to i64
  %291 = call i64 @llvm.expect.i64(i64 %290, i64 0)
  %292 = icmp ne i64 %291, 0
  br i1 %292, label %293, label %297

293:                                              ; preds = %280
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.MDBX_txn, ptr %294, i32 0, i32 9
  %296 = load ptr, ptr %295, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %296, ptr noundef @.str.8, ptr noundef @__func__.spill_slowpath, i32 noundef 223) #12
  unreachable

297:                                              ; preds = %280
  br label %298

298:                                              ; preds = %297
  br label %299

299:                                              ; preds = %298
  br label %300

300:                                              ; preds = %299, %268
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.MDBX_txn, ptr %303, i32 0, i32 17
  %305 = getelementptr inbounds %struct.anon.4, ptr %304, i32 0, i32 11
  %306 = load i64, ptr %305, align 8, !tbaa !22
  %307 = load ptr, ptr %18, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.MDBX_env, ptr %307, i32 0, i32 7
  %309 = load ptr, ptr %308, align 8, !tbaa !27
  %310 = getelementptr inbounds %struct.shared_lck, ptr %309, i32 0, i32 14
  %311 = load volatile i64, ptr %310, align 8, !tbaa !22
  %312 = add i64 %311, %306
  store volatile i64 %312, ptr %310, align 8, !tbaa !22
  %313 = load ptr, ptr %7, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.MDBX_txn, ptr %313, i32 0, i32 17
  %315 = getelementptr inbounds %struct.anon.4, ptr %314, i32 0, i32 11
  %316 = load i64, ptr %315, align 8, !tbaa !22
  %317 = load ptr, ptr %7, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.MDBX_txn, ptr %317, i32 0, i32 17
  %319 = getelementptr inbounds %struct.anon.4, ptr %318, i32 0, i32 11
  %320 = load i64, ptr %319, align 8, !tbaa !22
  %321 = add i64 %320, %316
  store i64 %321, ptr %319, align 8, !tbaa !22
  %322 = load ptr, ptr %7, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.MDBX_txn, ptr %322, i32 0, i32 17
  %324 = getelementptr inbounds %struct.anon.4, ptr %323, i32 0, i32 11
  store i64 0, ptr %324, align 8, !tbaa !22
  store i32 6, ptr %19, align 4
  br label %325

325:                                              ; preds = %302, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #13
  %326 = load i32, ptr %19, align 4
  switch i32 %326, label %1479 [
    i32 13, label %492
    i32 6, label %1453
  ]

327:                                              ; preds = %184
  br label %328

328:                                              ; preds = %327
  %329 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %330 = zext i8 %329 to i32
  %331 = icmp sle i32 3, %330
  %332 = xor i1 %331, true
  %333 = xor i1 %332, true
  %334 = zext i1 %333 to i32
  %335 = sext i32 %334 to i64
  %336 = call i64 @llvm.expect.i64(i64 %335, i64 0)
  %337 = icmp ne i64 %336, 0
  br i1 %337, label %338, label %341

338:                                              ; preds = %328
  %339 = load i64, ptr %15, align 8, !tbaa !9
  %340 = load i64, ptr %16, align 8, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.spill_slowpath, i32 noundef 231, ptr noundef @.str.5, ptr noundef @.str.9, i64 noundef %339, i64 noundef %340)
  br label %341

341:                                              ; preds = %338, %328
  br label %342

342:                                              ; preds = %341
  br label %343

343:                                              ; preds = %342
  br label %344

344:                                              ; preds = %343
  %345 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %346 = zext i8 %345 to i32
  %347 = and i32 %346, 1
  %348 = icmp ne i32 %347, 0
  %349 = xor i1 %348, true
  %350 = xor i1 %349, true
  %351 = zext i1 %350 to i32
  %352 = sext i32 %351 to i64
  %353 = call i64 @llvm.expect.i64(i64 %352, i64 1)
  %354 = icmp ne i64 %353, 0
  br i1 %354, label %355, label %373

355:                                              ; preds = %344
  br label %356

356:                                              ; preds = %355
  %357 = load ptr, ptr %7, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.MDBX_txn, ptr %357, i32 0, i32 17
  %359 = getelementptr inbounds %struct.anon.4, ptr %358, i32 0, i32 7
  %360 = load ptr, ptr %359, align 8, !tbaa !22
  %361 = icmp ne ptr %360, null
  %362 = xor i1 %361, true
  %363 = xor i1 %362, true
  %364 = xor i1 %363, true
  %365 = zext i1 %364 to i32
  %366 = sext i32 %365 to i64
  %367 = call i64 @llvm.expect.i64(i64 %366, i64 0)
  %368 = icmp ne i64 %367, 0
  br i1 %368, label %369, label %370

369:                                              ; preds = %356
  call void @mdbx_assert_fail(ptr noundef null, ptr noundef @.str.10, ptr noundef @__func__.spill_slowpath, i32 noundef 232) #12
  unreachable

370:                                              ; preds = %356
  br label %371

371:                                              ; preds = %370
  br label %372

372:                                              ; preds = %371
  br label %373

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

374:                                              ; preds = %373
  br label %375

375:                                              ; preds = %374
  br label %376

376:                                              ; preds = %375
  %377 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %378 = zext i8 %377 to i32
  %379 = and i32 %378, 1
  %380 = icmp ne i32 %379, 0
  %381 = xor i1 %380, true
  %382 = xor i1 %381, true
  %383 = zext i1 %382 to i32
  %384 = sext i32 %383 to i64
  %385 = call i64 @llvm.expect.i64(i64 %384, i64 1)
  %386 = icmp ne i64 %385, 0
  br i1 %386, label %387, label %415

387:                                              ; preds = %376
  br label %388

388:                                              ; preds = %387
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.MDBX_txn, ptr %389, i32 0, i32 17
  %391 = getelementptr inbounds %struct.anon.4, ptr %390, i32 0, i32 7
  %392 = load ptr, ptr %391, align 8, !tbaa !22
  %393 = getelementptr inbounds %struct.dpl, ptr %392, i32 0, i32 1
  %394 = load i64, ptr %393, align 8, !tbaa !25
  %395 = load ptr, ptr %7, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.MDBX_txn, ptr %395, i32 0, i32 17
  %397 = getelementptr inbounds %struct.anon.4, ptr %396, i32 0, i32 10
  %398 = load i64, ptr %397, align 8, !tbaa !22
  %399 = sub i64 %394, %398
  %400 = icmp uge i64 %399, 1
  %401 = xor i1 %400, true
  %402 = xor i1 %401, true
  %403 = xor i1 %402, true
  %404 = zext i1 %403 to i32
  %405 = sext i32 %404 to i64
  %406 = call i64 @llvm.expect.i64(i64 %405, i64 0)
  %407 = icmp ne i64 %406, 0
  br i1 %407, label %408, label %412

408:                                              ; preds = %388
  %409 = load ptr, ptr %7, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.MDBX_txn, ptr %409, i32 0, i32 9
  %411 = load ptr, ptr %410, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %411, ptr noundef @.str.11, ptr noundef @__func__.spill_slowpath, i32 noundef 233) #12
  unreachable

412:                                              ; preds = %388
  br label %413

413:                                              ; preds = %412
  br label %414

414:                                              ; preds = %413
  br label %415

415:                                              ; preds = %414, %376
  br label %416

416:                                              ; preds = %415
  br label %417

417:                                              ; preds = %416
  br label %418

418:                                              ; preds = %417
  %419 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %420 = zext i8 %419 to i32
  %421 = and i32 %420, 1
  %422 = icmp ne i32 %421, 0
  %423 = xor i1 %422, true
  %424 = xor i1 %423, true
  %425 = zext i1 %424 to i32
  %426 = sext i32 %425 to i64
  %427 = call i64 @llvm.expect.i64(i64 %426, i64 1)
  %428 = icmp ne i64 %427, 0
  br i1 %428, label %429, label %458

429:                                              ; preds = %418
  br label %430

430:                                              ; preds = %429
  %431 = load ptr, ptr %7, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.MDBX_txn, ptr %431, i32 0, i32 17
  %433 = getelementptr inbounds %struct.anon.4, ptr %432, i32 0, i32 7
  %434 = load ptr, ptr %433, align 8, !tbaa !22
  %435 = getelementptr inbounds %struct.dpl, ptr %434, i32 0, i32 2
  %436 = load i64, ptr %435, align 8, !tbaa !23
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.MDBX_txn, ptr %437, i32 0, i32 17
  %439 = getelementptr inbounds %struct.anon.4, ptr %438, i32 0, i32 10
  %440 = load i64, ptr %439, align 8, !tbaa !22
  %441 = sub i64 %436, %440
  %442 = load i64, ptr %16, align 8, !tbaa !9
  %443 = icmp uge i64 %441, %442
  %444 = xor i1 %443, true
  %445 = xor i1 %444, true
  %446 = xor i1 %445, true
  %447 = zext i1 %446 to i32
  %448 = sext i32 %447 to i64
  %449 = call i64 @llvm.expect.i64(i64 %448, i64 0)
  %450 = icmp ne i64 %449, 0
  br i1 %450, label %451, label %455

451:                                              ; preds = %430
  %452 = load ptr, ptr %7, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.MDBX_txn, ptr %452, i32 0, i32 9
  %454 = load ptr, ptr %453, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %454, ptr noundef @.str.12, ptr noundef @__func__.spill_slowpath, i32 noundef 234) #12
  unreachable

455:                                              ; preds = %430
  br label %456

456:                                              ; preds = %455
  br label %457

457:                                              ; preds = %456
  br label %458

458:                                              ; preds = %457, %418
  br label %459

459:                                              ; preds = %458
  br label %460

460:                                              ; preds = %459
  %461 = load ptr, ptr %7, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.MDBX_txn, ptr %461, i32 0, i32 17
  %463 = getelementptr inbounds %struct.anon.4, ptr %462, i32 0, i32 11
  %464 = getelementptr inbounds %struct.anon.7, ptr %463, i32 0, i32 1
  %465 = load ptr, ptr %464, align 8, !tbaa !22
  %466 = icmp ne ptr %465, null
  br i1 %466, label %499, label %467

467:                                              ; preds = %460
  %468 = load ptr, ptr %7, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.MDBX_txn, ptr %468, i32 0, i32 17
  %470 = getelementptr inbounds %struct.anon.4, ptr %469, i32 0, i32 11
  %471 = getelementptr inbounds %struct.anon.7, ptr %470, i32 0, i32 0
  store i64 2147483647, ptr %471, align 8, !tbaa !22
  %472 = load i64, ptr %17, align 8, !tbaa !9
  %473 = call ptr @pnl_alloc(i64 noundef %472)
  %474 = load ptr, ptr %7, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.MDBX_txn, ptr %474, i32 0, i32 17
  %476 = getelementptr inbounds %struct.anon.4, ptr %475, i32 0, i32 11
  %477 = getelementptr inbounds %struct.anon.7, ptr %476, i32 0, i32 1
  store ptr %473, ptr %477, align 8, !tbaa !22
  %478 = load ptr, ptr %7, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.MDBX_txn, ptr %478, i32 0, i32 17
  %480 = getelementptr inbounds %struct.anon.4, ptr %479, i32 0, i32 11
  %481 = getelementptr inbounds %struct.anon.7, ptr %480, i32 0, i32 1
  %482 = load ptr, ptr %481, align 8, !tbaa !22
  %483 = icmp ne ptr %482, null
  %484 = xor i1 %483, true
  %485 = xor i1 %484, true
  %486 = xor i1 %485, true
  %487 = zext i1 %486 to i32
  %488 = sext i32 %487 to i64
  %489 = call i64 @llvm.expect.i64(i64 %488, i64 0)
  %490 = icmp ne i64 %489, 0
  br i1 %490, label %491, label %498

491:                                              ; preds = %467
  store i32 12, ptr %12, align 4, !tbaa !21
  br label %492

492:                                              ; preds = %1366, %491, %325
  %493 = load ptr, ptr %7, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.MDBX_txn, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 4, !tbaa !15
  %496 = or i32 %495, 2
  store i32 %496, ptr %494, align 4, !tbaa !15
  %497 = load i32, ptr %12, align 4, !tbaa !21
  store i32 %497, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %1479

498:                                              ; preds = %467
  br label %509

499:                                              ; preds = %460
  %500 = load ptr, ptr %7, align 8, !tbaa !5
  %501 = call ptr @spill_purge(ptr noundef %500)
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.MDBX_txn, ptr %502, i32 0, i32 17
  %504 = getelementptr inbounds %struct.anon.4, ptr %503, i32 0, i32 11
  %505 = getelementptr inbounds %struct.anon.7, ptr %504, i32 0, i32 1
  %506 = load i64, ptr %17, align 8, !tbaa !9
  %507 = call i32 @pnl_reserve(ptr noundef %505, i64 noundef %506)
  store i32 %507, ptr %12, align 4, !tbaa !21
  %508 = load i32, ptr %12, align 4, !tbaa !21
  br label %509

509:                                              ; preds = %499, %498
  %510 = load ptr, ptr %7, align 8, !tbaa !5
  %511 = call ptr @dpl_sort(ptr noundef %510)
  store ptr %511, ptr %20, align 8, !tbaa !5
  %512 = load ptr, ptr %7, align 8, !tbaa !5
  %513 = load ptr, ptr %8, align 8, !tbaa !5
  %514 = call i64 @spill_txn_keep(ptr noundef %512, ptr noundef %513)
  store i64 %514, ptr %21, align 8, !tbaa !9
  %515 = load i64, ptr %21, align 8, !tbaa !9
  %516 = load ptr, ptr %7, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.MDBX_txn, ptr %516, i32 0, i32 17
  %518 = getelementptr inbounds %struct.anon.4, ptr %517, i32 0, i32 10
  %519 = load i64, ptr %518, align 8, !tbaa !22
  %520 = add i64 %515, %519
  %521 = load ptr, ptr %20, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.dpl, ptr %521, i32 0, i32 1
  %523 = load i64, ptr %522, align 8, !tbaa !25
  %524 = icmp uge i64 %520, %523
  br i1 %524, label %525, label %541

525:                                              ; preds = %509
  br label %526

526:                                              ; preds = %525
  %527 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %528 = zext i8 %527 to i32
  %529 = icmp sle i32 1, %528
  %530 = xor i1 %529, true
  %531 = xor i1 %530, true
  %532 = zext i1 %531 to i32
  %533 = sext i32 %532 to i64
  %534 = call i64 @llvm.expect.i64(i64 %533, i64 0)
  %535 = icmp ne i64 %534, 0
  br i1 %535, label %536, label %538

536:                                              ; preds = %526
  %537 = load i64, ptr %21, align 8, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.spill_slowpath, i32 noundef 266, ptr noundef @.str.13, i64 noundef %537)
  br label %538

538:                                              ; preds = %536, %526
  br label %539

539:                                              ; preds = %538
  br label %540

540:                                              ; preds = %539
  br label %1453

541:                                              ; preds = %509
  store i32 0, ptr %22, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #13
  store i64 1, ptr %23, align 8, !tbaa !9
  br label %542

542:                                              ; preds = %562, %541
  %543 = load i64, ptr %23, align 8, !tbaa !9
  %544 = load ptr, ptr %20, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.dpl, ptr %544, i32 0, i32 1
  %546 = load i64, ptr %545, align 8, !tbaa !25
  %547 = icmp ule i64 %543, %546
  br i1 %547, label %549, label %548

548:                                              ; preds = %542
  store i32 34, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #13
  br label %565

549:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #13
  %550 = load ptr, ptr %7, align 8, !tbaa !5
  %551 = load i64, ptr %23, align 8, !tbaa !9
  %552 = call i32 @dpl_age(ptr noundef %550, i64 noundef %551) #14
  store i32 %552, ptr %24, align 4, !tbaa !21
  %553 = load i32, ptr %22, align 4, !tbaa !21
  %554 = load i32, ptr %24, align 4, !tbaa !21
  %555 = icmp uge i32 %553, %554
  br i1 %555, label %556, label %558

556:                                              ; preds = %549
  %557 = load i32, ptr %22, align 4, !tbaa !21
  br label %560

558:                                              ; preds = %549
  %559 = load i32, ptr %24, align 4, !tbaa !21
  br label %560

560:                                              ; preds = %558, %556
  %561 = phi i32 [ %557, %556 ], [ %559, %558 ]
  store i32 %561, ptr %22, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #13
  br label %562

562:                                              ; preds = %560
  %563 = load i64, ptr %23, align 8, !tbaa !9
  %564 = add i64 %563, 1
  store i64 %564, ptr %23, align 8, !tbaa !9
  br label %542, !llvm.loop !36

565:                                              ; preds = %548
  br label %566

566:                                              ; preds = %565
  %567 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %568 = zext i8 %567 to i32
  %569 = icmp sle i32 4, %568
  %570 = xor i1 %569, true
  %571 = xor i1 %570, true
  %572 = zext i1 %571 to i32
  %573 = sext i32 %572 to i64
  %574 = call i64 @llvm.expect.i64(i64 %573, i64 0)
  %575 = icmp ne i64 %574, 0
  br i1 %575, label %576, label %582

576:                                              ; preds = %566
  %577 = load ptr, ptr %7, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.MDBX_txn, ptr %577, i32 0, i32 17
  %579 = getelementptr inbounds %struct.anon.4, ptr %578, i32 0, i32 5
  %580 = load i32, ptr %579, align 8, !tbaa !22
  %581 = load i32, ptr %22, align 4, !tbaa !21
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.spill_slowpath, i32 noundef 300, ptr noundef @.str.14, i32 noundef %580, i32 noundef %581)
  br label %582

582:                                              ; preds = %576, %566
  br label %583

583:                                              ; preds = %582
  br label %584

584:                                              ; preds = %583
  call void @llvm.memset.p0.i64(ptr align 16 %25, i8 0, i64 1024, i1 false)
  call void @llvm.memset.p0.i64(ptr align 16 %26, i8 0, i64 1024, i1 false)
  store i64 0, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %28, align 8, !tbaa !9
  %585 = load i32, ptr %22, align 4, !tbaa !21
  %586 = add i32 %585, 1
  %587 = udiv i32 -16777216, %586
  store i32 %587, ptr %29, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #13
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %588

588:                                              ; preds = %672, %584
  %589 = load i64, ptr %30, align 8, !tbaa !9
  %590 = load ptr, ptr %20, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.dpl, ptr %590, i32 0, i32 1
  %592 = load i64, ptr %591, align 8, !tbaa !25
  %593 = icmp ule i64 %589, %592
  br i1 %593, label %595, label %594

594:                                              ; preds = %588
  store i32 39, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #13
  br label %675

595:                                              ; preds = %588
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #13
  %596 = load ptr, ptr %7, align 8, !tbaa !5
  %597 = load i64, ptr %30, align 8, !tbaa !9
  %598 = load i32, ptr %29, align 4, !tbaa !21
  %599 = call i32 @spill_prio(ptr noundef %596, i64 noundef %597, i32 noundef %598) #14
  store i32 %599, ptr %31, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #13
  %600 = load ptr, ptr %20, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.dpl, ptr %600, i32 0, i32 4
  %602 = load i64, ptr %30, align 8, !tbaa !9
  %603 = getelementptr inbounds [18 x %struct.dp], ptr %601, i64 0, i64 %602
  %604 = getelementptr inbounds %struct.dp, ptr %603, i32 0, i32 0
  %605 = load ptr, ptr %604, align 8, !tbaa !38
  %606 = ptrtoint ptr %605 to i64
  %607 = add nsw i64 %606, -8
  %608 = inttoptr i64 %607 to ptr
  store ptr %608, ptr %32, align 8, !tbaa !5
  br label %609

609:                                              ; preds = %595
  %610 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %611 = zext i8 %610 to i32
  %612 = icmp sle i32 6, %611
  %613 = xor i1 %612, true
  %614 = xor i1 %613, true
  %615 = zext i1 %614 to i32
  %616 = sext i32 %615 to i64
  %617 = call i64 @llvm.expect.i64(i64 %616, i64 0)
  %618 = icmp ne i64 %617, 0
  br i1 %618, label %619, label %645

619:                                              ; preds = %609
  %620 = load ptr, ptr %20, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.dpl, ptr %620, i32 0, i32 4
  %622 = load i64, ptr %30, align 8, !tbaa !9
  %623 = getelementptr inbounds [18 x %struct.dp], ptr %621, i64 0, i64 %622
  %624 = getelementptr inbounds %struct.dp, ptr %623, i32 0, i32 1
  %625 = load i32, ptr %624, align 8, !tbaa !40
  %626 = load ptr, ptr %32, align 8, !tbaa !5
  %627 = load i64, ptr %626, align 8, !tbaa !9
  %628 = load ptr, ptr %20, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.dpl, ptr %628, i32 0, i32 4
  %630 = load i64, ptr %30, align 8, !tbaa !9
  %631 = getelementptr inbounds [18 x %struct.dp], ptr %629, i64 0, i64 %630
  %632 = getelementptr inbounds %struct.dp, ptr %631, i32 0, i32 2
  %633 = load i32, ptr %632, align 4, !tbaa !41
  %634 = icmp ugt i32 %633, 1
  %635 = zext i1 %634 to i64
  %636 = select i1 %634, i32 89, i32 78
  %637 = load ptr, ptr %20, align 8, !tbaa !5
  %638 = load i64, ptr %30, align 8, !tbaa !9
  %639 = call i32 @dpl_npages(ptr noundef %637, i64 noundef %638) #14
  %640 = load ptr, ptr %7, align 8, !tbaa !5
  %641 = load i64, ptr %30, align 8, !tbaa !9
  %642 = call i32 @dpl_age(ptr noundef %640, i64 noundef %641) #14
  %643 = load i32, ptr %22, align 4, !tbaa !21
  %644 = load i32, ptr %31, align 4, !tbaa !21
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef @__func__.spill_slowpath, i32 noundef 312, ptr noundef @.str.15, i32 noundef %625, i64 noundef %627, i32 noundef %636, i32 noundef %639, i32 noundef %642, i32 noundef %643, i32 noundef %644)
  br label %645

645:                                              ; preds = %619, %609
  br label %646

646:                                              ; preds = %645
  br label %647

647:                                              ; preds = %646
  %648 = load i32, ptr %31, align 4, !tbaa !21
  %649 = icmp ult i32 %648, 256
  br i1 %649, label %650, label %671

650:                                              ; preds = %647
  %651 = load i32, ptr %31, align 4, !tbaa !21
  %652 = zext i32 %651 to i64
  %653 = getelementptr inbounds [256 x i32], ptr %25, i64 0, i64 %652
  %654 = load i32, ptr %653, align 4, !tbaa !21
  %655 = add i32 %654, 1
  store i32 %655, ptr %653, align 4, !tbaa !21
  %656 = load i64, ptr %27, align 8, !tbaa !9
  %657 = add i64 %656, 1
  store i64 %657, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #13
  %658 = load ptr, ptr %20, align 8, !tbaa !5
  %659 = load i64, ptr %30, align 8, !tbaa !9
  %660 = call i32 @dpl_npages(ptr noundef %658, i64 noundef %659) #14
  store i32 %660, ptr %33, align 4, !tbaa !21
  %661 = load i32, ptr %33, align 4, !tbaa !21
  %662 = load i32, ptr %31, align 4, !tbaa !21
  %663 = zext i32 %662 to i64
  %664 = getelementptr inbounds [256 x i32], ptr %26, i64 0, i64 %663
  %665 = load i32, ptr %664, align 4, !tbaa !21
  %666 = add i32 %665, %661
  store i32 %666, ptr %664, align 4, !tbaa !21
  %667 = load i32, ptr %33, align 4, !tbaa !21
  %668 = zext i32 %667 to i64
  %669 = load i64, ptr %28, align 8, !tbaa !9
  %670 = add i64 %669, %668
  store i64 %670, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #13
  br label %671

671:                                              ; preds = %650, %647
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #13
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #13
  br label %672

672:                                              ; preds = %671
  %673 = load i64, ptr %30, align 8, !tbaa !9
  %674 = add i64 %673, 1
  store i64 %674, ptr %30, align 8, !tbaa !9
  br label %588, !llvm.loop !42

675:                                              ; preds = %594
  br label %676

676:                                              ; preds = %675
  %677 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %678 = zext i8 %677 to i32
  %679 = and i32 %678, 1
  %680 = icmp ne i32 %679, 0
  %681 = xor i1 %680, true
  %682 = xor i1 %681, true
  %683 = zext i1 %682 to i32
  %684 = sext i32 %683 to i64
  %685 = call i64 @llvm.expect.i64(i64 %684, i64 1)
  %686 = icmp ne i64 %685, 0
  br i1 %686, label %687, label %706

687:                                              ; preds = %676
  br label %688

688:                                              ; preds = %687
  %689 = load i64, ptr %28, align 8, !tbaa !9
  %690 = load i64, ptr %27, align 8, !tbaa !9
  %691 = icmp uge i64 %689, %690
  %692 = xor i1 %691, true
  %693 = xor i1 %692, true
  %694 = xor i1 %693, true
  %695 = zext i1 %694 to i32
  %696 = sext i32 %695 to i64
  %697 = call i64 @llvm.expect.i64(i64 %696, i64 0)
  %698 = icmp ne i64 %697, 0
  br i1 %698, label %699, label %703

699:                                              ; preds = %688
  %700 = load ptr, ptr %7, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.MDBX_txn, ptr %700, i32 0, i32 9
  %702 = load ptr, ptr %701, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %702, ptr noundef @.str.16, ptr noundef @__func__.spill_slowpath, i32 noundef 322) #12
  unreachable

703:                                              ; preds = %688
  br label %704

704:                                              ; preds = %703
  br label %705

705:                                              ; preds = %704
  br label %706

706:                                              ; preds = %705, %676
  br label %707

707:                                              ; preds = %706
  br label %708

708:                                              ; preds = %707
  store i32 0, ptr %34, align 4, !tbaa !21
  store i32 0, ptr %35, align 4, !tbaa !21
  %709 = load i64, ptr %27, align 8, !tbaa !9
  %710 = icmp ugt i64 %709, 0
  %711 = xor i1 %710, true
  %712 = xor i1 %711, true
  %713 = zext i1 %712 to i32
  %714 = sext i32 %713 to i64
  %715 = call i64 @llvm.expect.i64(i64 %714, i64 1)
  %716 = icmp ne i64 %715, 0
  br i1 %716, label %717, label %1369

717:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #13
  store i64 0, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #13
  store i64 128, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #13
  %718 = getelementptr inbounds [256 x i32], ptr %25, i64 0, i64 0
  %719 = load i32, ptr %718, align 16, !tbaa !21
  %720 = zext i32 %719 to i64
  store i64 %720, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #13
  %721 = getelementptr inbounds [256 x i32], ptr %26, i64 0, i64 0
  %722 = load i32, ptr %721, align 16, !tbaa !21
  %723 = zext i32 %722 to i64
  store i64 %723, ptr %39, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #13
  store i64 1, ptr %40, align 8, !tbaa !9
  br label %724

724:                                              ; preds = %788, %717
  %725 = load i64, ptr %40, align 8, !tbaa !9
  %726 = icmp ult i64 %725, 256
  br i1 %726, label %728, label %727

727:                                              ; preds = %724
  store i32 48, ptr %19, align 4
  br label %791

728:                                              ; preds = %724
  %729 = load i64, ptr %38, align 8, !tbaa !9
  %730 = load i64, ptr %15, align 8, !tbaa !9
  %731 = icmp ult i64 %729, %730
  br i1 %731, label %736, label %732

732:                                              ; preds = %728
  %733 = load i64, ptr %39, align 8, !tbaa !9
  %734 = load i64, ptr %16, align 8, !tbaa !9
  %735 = icmp ult i64 %733, %734
  br i1 %735, label %736, label %755

736:                                              ; preds = %732, %728
  %737 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %737, ptr %36, align 8, !tbaa !9
  %738 = load i64, ptr %40, align 8, !tbaa !9
  %739 = load i64, ptr %40, align 8, !tbaa !9
  %740 = sub i64 257, %739
  %741 = udiv i64 %740, 2
  %742 = add i64 %738, %741
  store i64 %742, ptr %37, align 8, !tbaa !9
  %743 = load i64, ptr %40, align 8, !tbaa !9
  %744 = getelementptr inbounds [256 x i32], ptr %25, i64 0, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !21
  %746 = zext i32 %745 to i64
  %747 = load i64, ptr %38, align 8, !tbaa !9
  %748 = add i64 %747, %746
  store i64 %748, ptr %38, align 8, !tbaa !9
  %749 = load i64, ptr %40, align 8, !tbaa !9
  %750 = getelementptr inbounds [256 x i32], ptr %26, i64 0, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !21
  %752 = zext i32 %751 to i64
  %753 = load i64, ptr %39, align 8, !tbaa !9
  %754 = add i64 %753, %752
  store i64 %754, ptr %39, align 8, !tbaa !9
  br label %787

755:                                              ; preds = %732
  %756 = load i64, ptr %38, align 8, !tbaa !9
  %757 = load i64, ptr %38, align 8, !tbaa !9
  %758 = add i64 %756, %757
  %759 = load i64, ptr %27, align 8, !tbaa !9
  %760 = load i64, ptr %15, align 8, !tbaa !9
  %761 = add i64 %759, %760
  %762 = icmp ult i64 %758, %761
  br i1 %762, label %771, label %763

763:                                              ; preds = %755
  %764 = load i64, ptr %39, align 8, !tbaa !9
  %765 = load i64, ptr %39, align 8, !tbaa !9
  %766 = add i64 %764, %765
  %767 = load i64, ptr %28, align 8, !tbaa !9
  %768 = load i64, ptr %16, align 8, !tbaa !9
  %769 = add i64 %767, %768
  %770 = icmp ult i64 %766, %769
  br i1 %770, label %771, label %785

771:                                              ; preds = %763, %755
  %772 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %772, ptr %37, align 8, !tbaa !9
  %773 = load i64, ptr %40, align 8, !tbaa !9
  %774 = getelementptr inbounds [256 x i32], ptr %25, i64 0, i64 %773
  %775 = load i32, ptr %774, align 4, !tbaa !21
  %776 = zext i32 %775 to i64
  %777 = load i64, ptr %38, align 8, !tbaa !9
  %778 = add i64 %777, %776
  store i64 %778, ptr %38, align 8, !tbaa !9
  %779 = load i64, ptr %40, align 8, !tbaa !9
  %780 = getelementptr inbounds [256 x i32], ptr %26, i64 0, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !21
  %782 = zext i32 %781 to i64
  %783 = load i64, ptr %39, align 8, !tbaa !9
  %784 = add i64 %783, %782
  store i64 %784, ptr %39, align 8, !tbaa !9
  br label %786

785:                                              ; preds = %763
  store i32 48, ptr %19, align 4
  br label %791

786:                                              ; preds = %771
  br label %787

787:                                              ; preds = %786, %736
  br label %788

788:                                              ; preds = %787
  %789 = load i64, ptr %40, align 8, !tbaa !9
  %790 = add i64 %789, 1
  store i64 %790, ptr %40, align 8, !tbaa !9
  br label %724, !llvm.loop !43

791:                                              ; preds = %785, %727
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #13
  br label %792

792:                                              ; preds = %791
  br label %793

793:                                              ; preds = %792
  %794 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %795 = zext i8 %794 to i32
  %796 = icmp sle i32 4, %795
  %797 = xor i1 %796, true
  %798 = xor i1 %797, true
  %799 = zext i1 %798 to i32
  %800 = sext i32 %799 to i64
  %801 = call i64 @llvm.expect.i64(i64 %800, i64 0)
  %802 = icmp ne i64 %801, 0
  br i1 %802, label %803, label %812

803:                                              ; preds = %793
  %804 = load i64, ptr %36, align 8, !tbaa !9
  %805 = load i64, ptr %37, align 8, !tbaa !9
  %806 = load i64, ptr %27, align 8, !tbaa !9
  %807 = load i64, ptr %28, align 8, !tbaa !9
  %808 = load i64, ptr %15, align 8, !tbaa !9
  %809 = load i64, ptr %16, align 8, !tbaa !9
  %810 = load i64, ptr %38, align 8, !tbaa !9
  %811 = load i64, ptr %39, align 8, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.spill_slowpath, i32 noundef 345, ptr noundef @.str.17, i64 noundef %804, i64 noundef %805, i64 noundef %806, i64 noundef %807, i64 noundef %808, i64 noundef %809, i64 noundef %810, i64 noundef %811)
  br label %812

812:                                              ; preds = %803, %793
  br label %813

813:                                              ; preds = %812
  br label %814

814:                                              ; preds = %813
  br label %815

815:                                              ; preds = %814
  %816 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %817 = zext i8 %816 to i32
  %818 = and i32 %817, 1
  %819 = icmp ne i32 %818, 0
  %820 = xor i1 %819, true
  %821 = xor i1 %820, true
  %822 = zext i1 %821 to i32
  %823 = sext i32 %822 to i64
  %824 = call i64 @llvm.expect.i64(i64 %823, i64 1)
  %825 = icmp ne i64 %824, 0
  br i1 %825, label %826, label %850

826:                                              ; preds = %815
  br label %827

827:                                              ; preds = %826
  %828 = load i64, ptr %36, align 8, !tbaa !9
  %829 = load i64, ptr %37, align 8, !tbaa !9
  %830 = icmp ult i64 %828, %829
  br i1 %830, label %831, label %834

831:                                              ; preds = %827
  %832 = load i64, ptr %37, align 8, !tbaa !9
  %833 = icmp ule i64 %832, 256
  br label %834

834:                                              ; preds = %831, %827
  %835 = phi i1 [ false, %827 ], [ %833, %831 ]
  %836 = xor i1 %835, true
  %837 = xor i1 %836, true
  %838 = xor i1 %837, true
  %839 = zext i1 %838 to i32
  %840 = sext i32 %839 to i64
  %841 = call i64 @llvm.expect.i64(i64 %840, i64 0)
  %842 = icmp ne i64 %841, 0
  br i1 %842, label %843, label %847

843:                                              ; preds = %834
  %844 = load ptr, ptr %7, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.MDBX_txn, ptr %844, i32 0, i32 9
  %846 = load ptr, ptr %845, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %846, ptr noundef @.str.18, ptr noundef @__func__.spill_slowpath, i32 noundef 346) #12
  unreachable

847:                                              ; preds = %834
  br label %848

848:                                              ; preds = %847
  br label %849

849:                                              ; preds = %848
  br label %850

850:                                              ; preds = %849, %815
  br label %851

851:                                              ; preds = %850
  br label %852

852:                                              ; preds = %851
  call void @llvm.lifetime.start.p0(i64 40, ptr %41) #13
  %853 = load ptr, ptr %7, align 8, !tbaa !5
  %854 = load i64, ptr %38, align 8, !tbaa !9
  %855 = load i64, ptr %39, align 8, !tbaa !9
  %856 = load ptr, ptr %7, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.MDBX_txn, ptr %856, i32 0, i32 9
  %858 = load ptr, ptr %857, align 8, !tbaa !20
  %859 = getelementptr inbounds %struct.MDBX_env, ptr %858, i32 0, i32 3
  %860 = getelementptr inbounds %struct.osal_mmap, ptr %859, i32 0, i32 1
  %861 = load i32, ptr %860, align 8, !tbaa !44
  %862 = call i32 @iov_init(ptr noundef %853, ptr noundef %41, i64 noundef %854, i64 noundef %855, i32 noundef %861, i1 noundef zeroext true)
  store i32 %862, ptr %12, align 4, !tbaa !21
  %863 = load i32, ptr %12, align 4, !tbaa !21
  %864 = icmp ne i32 %863, 0
  %865 = xor i1 %864, true
  %866 = xor i1 %865, true
  %867 = zext i1 %866 to i32
  %868 = sext i32 %867 to i64
  %869 = call i64 @llvm.expect.i64(i64 %868, i64 0)
  %870 = icmp ne i64 %869, 0
  br i1 %870, label %871, label %872

871:                                              ; preds = %852
  store i32 13, ptr %19, align 4
  br label %1366

872:                                              ; preds = %852
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #13
  store i64 0, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #13
  store i64 0, ptr %43, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #13
  store i32 0, ptr %44, align 4, !tbaa !21
  br label %873

873:                                              ; preds = %1073, %1071, %872
  %874 = load i64, ptr %42, align 8, !tbaa !9
  %875 = load ptr, ptr %20, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.dpl, ptr %875, i32 0, i32 1
  %877 = load i64, ptr %876, align 8, !tbaa !25
  %878 = icmp ult i64 %874, %877
  br i1 %878, label %879, label %891

879:                                              ; preds = %873
  %880 = load i32, ptr %34, align 4, !tbaa !21
  %881 = zext i32 %880 to i64
  %882 = load i64, ptr %15, align 8, !tbaa !9
  %883 = icmp ult i64 %881, %882
  br i1 %883, label %889, label %884

884:                                              ; preds = %879
  %885 = load i32, ptr %35, align 4, !tbaa !21
  %886 = zext i32 %885 to i64
  %887 = load i64, ptr %16, align 8, !tbaa !9
  %888 = icmp ult i64 %886, %887
  br label %889

889:                                              ; preds = %884, %879
  %890 = phi i1 [ true, %879 ], [ %888, %884 ]
  br label %891

891:                                              ; preds = %889, %873
  %892 = phi i1 [ false, %873 ], [ %890, %889 ]
  br i1 %892, label %893, label %1074

893:                                              ; preds = %891
  %894 = load ptr, ptr %20, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.dpl, ptr %894, i32 0, i32 4
  %896 = load i64, ptr %43, align 8, !tbaa !9
  %897 = add i64 %896, 1
  store i64 %897, ptr %43, align 8, !tbaa !9
  %898 = getelementptr inbounds [18 x %struct.dp], ptr %895, i64 0, i64 %897
  %899 = load ptr, ptr %20, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.dpl, ptr %899, i32 0, i32 4
  %901 = load i64, ptr %42, align 8, !tbaa !9
  %902 = add i64 %901, 1
  store i64 %902, ptr %42, align 8, !tbaa !9
  %903 = getelementptr inbounds [18 x %struct.dp], ptr %900, i64 0, i64 %902
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %898, ptr align 8 %903, i64 16, i1 false), !tbaa.struct !45
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #13
  %904 = load ptr, ptr %7, align 8, !tbaa !5
  %905 = load i64, ptr %43, align 8, !tbaa !9
  %906 = load i32, ptr %29, align 4, !tbaa !21
  %907 = call i32 @spill_prio(ptr noundef %904, i64 noundef %905, i32 noundef %906) #14
  store i32 %907, ptr %45, align 4, !tbaa !21
  %908 = load i32, ptr %45, align 4, !tbaa !21
  %909 = zext i32 %908 to i64
  %910 = load i64, ptr %36, align 8, !tbaa !9
  %911 = icmp ugt i64 %909, %910
  br i1 %911, label %912, label %927

912:                                              ; preds = %893
  %913 = load i32, ptr %45, align 4, !tbaa !21
  %914 = zext i32 %913 to i64
  %915 = load i64, ptr %37, align 8, !tbaa !9
  %916 = icmp uge i64 %914, %915
  br i1 %916, label %926, label %917

917:                                              ; preds = %912
  %918 = load i32, ptr %44, align 4, !tbaa !21
  %919 = load ptr, ptr %20, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.dpl, ptr %919, i32 0, i32 4
  %921 = load i64, ptr %43, align 8, !tbaa !9
  %922 = getelementptr inbounds [18 x %struct.dp], ptr %920, i64 0, i64 %921
  %923 = getelementptr inbounds %struct.dp, ptr %922, i32 0, i32 1
  %924 = load i32, ptr %923, align 8, !tbaa !40
  %925 = icmp ne i32 %918, %924
  br i1 %925, label %926, label %927

926:                                              ; preds = %917, %912
  store i32 57, ptr %19, align 4
  br label %1071, !llvm.loop !46

927:                                              ; preds = %917, %893
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #13
  %928 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %928, ptr %46, align 8, !tbaa !9
  %929 = load ptr, ptr %20, align 8, !tbaa !5
  %930 = load i64, ptr %43, align 8, !tbaa !9
  %931 = call i32 @dpl_endpgno(ptr noundef %929, i64 noundef %930) #14
  store i32 %931, ptr %44, align 4, !tbaa !21
  br label %932

932:                                              ; preds = %958, %927
  %933 = load i64, ptr %43, align 8, !tbaa !9
  %934 = add i64 %933, -1
  store i64 %934, ptr %43, align 8, !tbaa !9
  %935 = icmp ne i64 %934, 0
  br i1 %935, label %936, label %956

936:                                              ; preds = %932
  %937 = load ptr, ptr %20, align 8, !tbaa !5
  %938 = load i64, ptr %43, align 8, !tbaa !9
  %939 = call i32 @dpl_endpgno(ptr noundef %937, i64 noundef %938) #14
  %940 = load ptr, ptr %20, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.dpl, ptr %940, i32 0, i32 4
  %942 = load i64, ptr %43, align 8, !tbaa !9
  %943 = add i64 %942, 1
  %944 = getelementptr inbounds [18 x %struct.dp], ptr %941, i64 0, i64 %943
  %945 = getelementptr inbounds %struct.dp, ptr %944, i32 0, i32 1
  %946 = load i32, ptr %945, align 8, !tbaa !40
  %947 = icmp eq i32 %939, %946
  br i1 %947, label %948, label %956

948:                                              ; preds = %936
  %949 = load ptr, ptr %7, align 8, !tbaa !5
  %950 = load i64, ptr %43, align 8, !tbaa !9
  %951 = load i32, ptr %29, align 4, !tbaa !21
  %952 = call i32 @spill_prio(ptr noundef %949, i64 noundef %950, i32 noundef %951) #14
  %953 = zext i32 %952 to i64
  %954 = load i64, ptr %37, align 8, !tbaa !9
  %955 = icmp ult i64 %953, %954
  br label %956

956:                                              ; preds = %948, %936, %932
  %957 = phi i1 [ false, %936 ], [ false, %932 ], [ %955, %948 ]
  br i1 %957, label %958, label %959

958:                                              ; preds = %956
  br label %932, !llvm.loop !47

959:                                              ; preds = %956
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #13
  %960 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %960, ptr %47, align 8, !tbaa !9
  br label %961

961:                                              ; preds = %1066, %959
  %962 = load i64, ptr %47, align 8, !tbaa !9
  %963 = add i64 %962, 1
  store i64 %963, ptr %47, align 8, !tbaa !9
  %964 = load i64, ptr %46, align 8, !tbaa !9
  %965 = icmp ule i64 %963, %964
  br i1 %965, label %967, label %966

966:                                              ; preds = %961
  store i32 61, ptr %19, align 4
  br label %1067

967:                                              ; preds = %961
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #13
  %968 = load ptr, ptr %20, align 8, !tbaa !5
  %969 = load i64, ptr %47, align 8, !tbaa !9
  %970 = call i32 @dpl_npages(ptr noundef %968, i64 noundef %969) #14
  store i32 %970, ptr %48, align 4, !tbaa !21
  %971 = load ptr, ptr %7, align 8, !tbaa !5
  %972 = load i64, ptr %47, align 8, !tbaa !9
  %973 = load i32, ptr %29, align 4, !tbaa !21
  %974 = call i32 @spill_prio(ptr noundef %971, i64 noundef %972, i32 noundef %973) #14
  store i32 %974, ptr %45, align 4, !tbaa !21
  br label %975

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

985:                                              ; preds = %975
  %986 = load i32, ptr %45, align 4, !tbaa !21
  %987 = zext i32 %986 to i64
  %988 = load i64, ptr %36, align 8, !tbaa !9
  %989 = icmp ugt i64 %987, %988
  %990 = zext i1 %989 to i64
  %991 = select i1 %989, ptr @.str.20, ptr @.str.21
  %992 = load i64, ptr %47, align 8, !tbaa !9
  %993 = load i32, ptr %48, align 4, !tbaa !21
  %994 = load ptr, ptr %20, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.dpl, ptr %994, i32 0, i32 4
  %996 = load i64, ptr %47, align 8, !tbaa !9
  %997 = getelementptr inbounds [18 x %struct.dp], ptr %995, i64 0, i64 %996
  %998 = getelementptr inbounds %struct.dp, ptr %997, i32 0, i32 1
  %999 = load i32, ptr %998, align 8, !tbaa !40
  %1000 = load ptr, ptr %7, align 8, !tbaa !5
  %1001 = load i64, ptr %47, align 8, !tbaa !9
  %1002 = call i32 @dpl_age(ptr noundef %1000, i64 noundef %1001) #14
  %1003 = load i32, ptr %45, align 4, !tbaa !21
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.spill_slowpath, i32 noundef 375, ptr noundef @.str.19, ptr noundef %991, i64 noundef %992, i32 noundef %993, i32 noundef %999, i32 noundef %1002, i32 noundef %1003)
  br label %1004

1004:                                             ; preds = %985, %975
  br label %1005

1005:                                             ; preds = %1004
  br label %1006

1006:                                             ; preds = %1005
  br label %1007

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

1018:                                             ; preds = %1007
  br label %1019

1019:                                             ; preds = %1018
  %1020 = load i32, ptr %45, align 4, !tbaa !21
  %1021 = icmp ult i32 %1020, 256
  %1022 = xor i1 %1021, true
  %1023 = xor i1 %1022, true
  %1024 = xor i1 %1023, true
  %1025 = zext i1 %1024 to i32
  %1026 = sext i32 %1025 to i64
  %1027 = call i64 @llvm.expect.i64(i64 %1026, i64 0)
  %1028 = icmp ne i64 %1027, 0
  br i1 %1028, label %1029, label %1033

1029:                                             ; preds = %1019
  %1030 = load ptr, ptr %7, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.MDBX_txn, ptr %1030, i32 0, i32 9
  %1032 = load ptr, ptr %1031, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1032, ptr noundef @.str.22, ptr noundef @__func__.spill_slowpath, i32 noundef 376) #12
  unreachable

1033:                                             ; preds = %1019
  br label %1034

1034:                                             ; preds = %1033
  br label %1035

1035:                                             ; preds = %1034
  br label %1036

1036:                                             ; preds = %1035, %1007
  br label %1037

1037:                                             ; preds = %1036
  br label %1038

1038:                                             ; preds = %1037
  %1039 = load i32, ptr %34, align 4, !tbaa !21
  %1040 = add i32 %1039, 1
  store i32 %1040, ptr %34, align 4, !tbaa !21
  %1041 = load i32, ptr %48, align 4, !tbaa !21
  %1042 = load i32, ptr %35, align 4, !tbaa !21
  %1043 = add i32 %1042, %1041
  store i32 %1043, ptr %35, align 4, !tbaa !21
  %1044 = load ptr, ptr %7, align 8, !tbaa !5
  %1045 = load ptr, ptr %20, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.dpl, ptr %1045, i32 0, i32 4
  %1047 = load i64, ptr %47, align 8, !tbaa !9
  %1048 = getelementptr inbounds [18 x %struct.dp], ptr %1046, i64 0, i64 %1047
  %1049 = getelementptr inbounds %struct.dp, ptr %1048, i32 0, i32 0
  %1050 = load ptr, ptr %1049, align 8, !tbaa !38
  %1051 = load i32, ptr %48, align 4, !tbaa !21
  %1052 = zext i32 %1051 to i64
  %1053 = call i32 @spill_page(ptr noundef %1044, ptr noundef %41, ptr noundef %1050, i64 noundef %1052)
  store i32 %1053, ptr %12, align 4, !tbaa !21
  %1054 = load i32, ptr %12, align 4, !tbaa !21
  %1055 = icmp ne i32 %1054, 0
  %1056 = xor i1 %1055, true
  %1057 = xor i1 %1056, true
  %1058 = zext i1 %1057 to i32
  %1059 = sext i32 %1058 to i64
  %1060 = call i64 @llvm.expect.i64(i64 %1059, i64 0)
  %1061 = icmp ne i64 %1060, 0
  br i1 %1061, label %1062, label %1063

1062:                                             ; preds = %1038
  store i32 69, ptr %19, align 4
  br label %1064

1063:                                             ; preds = %1038
  store i32 0, ptr %19, align 4
  br label %1064

1064:                                             ; preds = %1063, %1062
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #13
  %1065 = load i32, ptr %19, align 4
  switch i32 %1065, label %1067 [
    i32 0, label %1066
  ]

1066:                                             ; preds = %1064
  br label %961, !llvm.loop !48

1067:                                             ; preds = %1064, %966
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #13
  %1068 = load i32, ptr %19, align 4
  switch i32 %1068, label %1070 [
    i32 61, label %1069
  ]

1069:                                             ; preds = %1067
  store i32 0, ptr %19, align 4
  br label %1070

1070:                                             ; preds = %1069, %1067
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #13
  br label %1071

1071:                                             ; preds = %1070, %926
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #13
  %1072 = load i32, ptr %19, align 4
  switch i32 %1072, label %1365 [
    i32 0, label %1073
    i32 57, label %873
    i32 69, label %1161
  ]

1073:                                             ; preds = %1071
  br label %873, !llvm.loop !46

1074:                                             ; preds = %891
  br label %1075

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

1085:                                             ; preds = %1075
  %1086 = load i32, ptr %34, align 4, !tbaa !21
  %1087 = load i32, ptr %35, align 4, !tbaa !21
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.spill_slowpath, i32 noundef 385, ptr noundef @.str.23, i32 noundef %1086, i32 noundef %1087)
  br label %1088

1088:                                             ; preds = %1085, %1075
  br label %1089

1089:                                             ; preds = %1088
  br label %1090

1090:                                             ; preds = %1089
  br label %1091

1091:                                             ; preds = %1090
  %1092 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1093 = zext i8 %1092 to i32
  %1094 = and i32 %1093, 1
  %1095 = icmp ne i32 %1094, 0
  %1096 = xor i1 %1095, true
  %1097 = xor i1 %1096, true
  %1098 = zext i1 %1097 to i32
  %1099 = sext i32 %1098 to i64
  %1100 = call i64 @llvm.expect.i64(i64 %1099, i64 1)
  %1101 = icmp ne i64 %1100, 0
  br i1 %1101, label %1102, label %1125

1102:                                             ; preds = %1091
  br label %1103

1103:                                             ; preds = %1102
  %1104 = load i64, ptr %27, align 8, !tbaa !9
  %1105 = icmp eq i64 %1104, 0
  br i1 %1105, label %1109, label %1106

1106:                                             ; preds = %1103
  %1107 = load i32, ptr %34, align 4, !tbaa !21
  %1108 = icmp ugt i32 %1107, 0
  br label %1109

1109:                                             ; preds = %1106, %1103
  %1110 = phi i1 [ true, %1103 ], [ %1108, %1106 ]
  %1111 = xor i1 %1110, true
  %1112 = xor i1 %1111, true
  %1113 = xor i1 %1112, true
  %1114 = zext i1 %1113 to i32
  %1115 = sext i32 %1114 to i64
  %1116 = call i64 @llvm.expect.i64(i64 %1115, i64 0)
  %1117 = icmp ne i64 %1116, 0
  br i1 %1117, label %1118, label %1122

1118:                                             ; preds = %1109
  %1119 = load ptr, ptr %7, align 8, !tbaa !5
  %1120 = getelementptr inbounds %struct.MDBX_txn, ptr %1119, i32 0, i32 9
  %1121 = load ptr, ptr %1120, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1121, ptr noundef @.str.24, ptr noundef @__func__.spill_slowpath, i32 noundef 386) #12
  unreachable

1122:                                             ; preds = %1109
  br label %1123

1123:                                             ; preds = %1122
  br label %1124

1124:                                             ; preds = %1123
  br label %1125

1125:                                             ; preds = %1124, %1091
  br label %1126

1126:                                             ; preds = %1125
  br label %1127

1127:                                             ; preds = %1126
  br label %1128

1128:                                             ; preds = %1127
  %1129 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1130 = zext i8 %1129 to i32
  %1131 = and i32 %1130, 1
  %1132 = icmp ne i32 %1131, 0
  %1133 = xor i1 %1132, true
  %1134 = xor i1 %1133, true
  %1135 = zext i1 %1134 to i32
  %1136 = sext i32 %1135 to i64
  %1137 = call i64 @llvm.expect.i64(i64 %1136, i64 1)
  %1138 = icmp ne i64 %1137, 0
  br i1 %1138, label %1139, label %1158

1139:                                             ; preds = %1128
  br label %1140

1140:                                             ; preds = %1139
  %1141 = load i32, ptr %35, align 4, !tbaa !21
  %1142 = load i32, ptr %34, align 4, !tbaa !21
  %1143 = icmp uge i32 %1141, %1142
  %1144 = xor i1 %1143, true
  %1145 = xor i1 %1144, true
  %1146 = xor i1 %1145, true
  %1147 = zext i1 %1146 to i32
  %1148 = sext i32 %1147 to i64
  %1149 = call i64 @llvm.expect.i64(i64 %1148, i64 0)
  %1150 = icmp ne i64 %1149, 0
  br i1 %1150, label %1151, label %1155

1151:                                             ; preds = %1140
  %1152 = load ptr, ptr %7, align 8, !tbaa !5
  %1153 = getelementptr inbounds %struct.MDBX_txn, ptr %1152, i32 0, i32 9
  %1154 = load ptr, ptr %1153, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1154, ptr noundef @.str.25, ptr noundef @__func__.spill_slowpath, i32 noundef 387) #12
  unreachable

1155:                                             ; preds = %1140
  br label %1156

1156:                                             ; preds = %1155
  br label %1157

1157:                                             ; preds = %1156
  br label %1158

1158:                                             ; preds = %1157, %1128
  br label %1159

1159:                                             ; preds = %1158
  br label %1160

1160:                                             ; preds = %1159
  br label %1161

1161:                                             ; preds = %1160, %1071
  br label %1162

1162:                                             ; preds = %1168, %1161
  %1163 = load i64, ptr %42, align 8, !tbaa !9
  %1164 = load ptr, ptr %20, align 8, !tbaa !5
  %1165 = getelementptr inbounds %struct.dpl, ptr %1164, i32 0, i32 1
  %1166 = load i64, ptr %1165, align 8, !tbaa !25
  %1167 = icmp ult i64 %1163, %1166
  br i1 %1167, label %1168, label %1179

1168:                                             ; preds = %1162
  %1169 = load ptr, ptr %20, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.dpl, ptr %1169, i32 0, i32 4
  %1171 = load i64, ptr %43, align 8, !tbaa !9
  %1172 = add i64 %1171, 1
  store i64 %1172, ptr %43, align 8, !tbaa !9
  %1173 = getelementptr inbounds [18 x %struct.dp], ptr %1170, i64 0, i64 %1172
  %1174 = load ptr, ptr %20, align 8, !tbaa !5
  %1175 = getelementptr inbounds %struct.dpl, ptr %1174, i32 0, i32 4
  %1176 = load i64, ptr %42, align 8, !tbaa !9
  %1177 = add i64 %1176, 1
  store i64 %1177, ptr %42, align 8, !tbaa !9
  %1178 = getelementptr inbounds [18 x %struct.dp], ptr %1175, i64 0, i64 %1177
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1173, ptr align 8 %1178, i64 16, i1 false), !tbaa.struct !45
  br label %1162, !llvm.loop !49

1179:                                             ; preds = %1162
  br label %1180

1180:                                             ; preds = %1179
  %1181 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1182 = zext i8 %1181 to i32
  %1183 = and i32 %1182, 1
  %1184 = icmp ne i32 %1183, 0
  %1185 = xor i1 %1184, true
  %1186 = xor i1 %1185, true
  %1187 = zext i1 %1186 to i32
  %1188 = sext i32 %1187 to i64
  %1189 = call i64 @llvm.expect.i64(i64 %1188, i64 1)
  %1190 = icmp ne i64 %1189, 0
  br i1 %1190, label %1191, label %1218

1191:                                             ; preds = %1180
  br label %1192

1192:                                             ; preds = %1191
  %1193 = load i64, ptr %42, align 8, !tbaa !9
  %1194 = load i64, ptr %43, align 8, !tbaa !9
  %1195 = sub i64 %1193, %1194
  %1196 = load i32, ptr %34, align 4, !tbaa !21
  %1197 = zext i32 %1196 to i64
  %1198 = icmp eq i64 %1195, %1197
  br i1 %1198, label %1202, label %1199

1199:                                             ; preds = %1192
  %1200 = load i32, ptr %12, align 4, !tbaa !21
  %1201 = icmp ne i32 %1200, 0
  br label %1202

1202:                                             ; preds = %1199, %1192
  %1203 = phi i1 [ true, %1192 ], [ %1201, %1199 ]
  %1204 = xor i1 %1203, true
  %1205 = xor i1 %1204, true
  %1206 = xor i1 %1205, true
  %1207 = zext i1 %1206 to i32
  %1208 = sext i32 %1207 to i64
  %1209 = call i64 @llvm.expect.i64(i64 %1208, i64 0)
  %1210 = icmp ne i64 %1209, 0
  br i1 %1210, label %1211, label %1215

1211:                                             ; preds = %1202
  %1212 = load ptr, ptr %7, align 8, !tbaa !5
  %1213 = getelementptr inbounds %struct.MDBX_txn, ptr %1212, i32 0, i32 9
  %1214 = load ptr, ptr %1213, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1214, ptr noundef @.str.26, ptr noundef @__func__.spill_slowpath, i32 noundef 392) #12
  unreachable

1215:                                             ; preds = %1202
  br label %1216

1216:                                             ; preds = %1215
  br label %1217

1217:                                             ; preds = %1216
  br label %1218

1218:                                             ; preds = %1217, %1180
  br label %1219

1219:                                             ; preds = %1218
  br label %1220

1220:                                             ; preds = %1219
  %1221 = load ptr, ptr %20, align 8, !tbaa !5
  %1222 = load i64, ptr %43, align 8, !tbaa !9
  %1223 = call i64 @dpl_setlen(ptr noundef %1221, i64 noundef %1222)
  %1224 = load ptr, ptr %20, align 8, !tbaa !5
  %1225 = getelementptr inbounds %struct.dpl, ptr %1224, i32 0, i32 0
  store i64 %1223, ptr %1225, align 8, !tbaa !50
  %1226 = load i32, ptr %34, align 4, !tbaa !21
  %1227 = zext i32 %1226 to i64
  %1228 = load ptr, ptr %7, align 8, !tbaa !5
  %1229 = getelementptr inbounds %struct.MDBX_txn, ptr %1228, i32 0, i32 17
  %1230 = getelementptr inbounds %struct.anon.4, ptr %1229, i32 0, i32 6
  %1231 = load i64, ptr %1230, align 8, !tbaa !22
  %1232 = add i64 %1231, %1227
  store i64 %1232, ptr %1230, align 8, !tbaa !22
  %1233 = load i32, ptr %35, align 4, !tbaa !21
  %1234 = zext i32 %1233 to i64
  %1235 = load ptr, ptr %7, align 8, !tbaa !5
  %1236 = getelementptr inbounds %struct.MDBX_txn, ptr %1235, i32 0, i32 17
  %1237 = getelementptr inbounds %struct.anon.4, ptr %1236, i32 0, i32 7
  %1238 = load ptr, ptr %1237, align 8, !tbaa !22
  %1239 = getelementptr inbounds %struct.dpl, ptr %1238, i32 0, i32 2
  %1240 = load i64, ptr %1239, align 8, !tbaa !23
  %1241 = sub i64 %1240, %1234
  store i64 %1241, ptr %1239, align 8, !tbaa !23
  br label %1242

1242:                                             ; preds = %1220
  %1243 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1244 = zext i8 %1243 to i32
  %1245 = and i32 %1244, 1
  %1246 = icmp ne i32 %1245, 0
  %1247 = xor i1 %1246, true
  %1248 = xor i1 %1247, true
  %1249 = zext i1 %1248 to i32
  %1250 = sext i32 %1249 to i64
  %1251 = call i64 @llvm.expect.i64(i64 %1250, i64 1)
  %1252 = icmp ne i64 %1251, 0
  br i1 %1252, label %1253, label %1271

1253:                                             ; preds = %1242
  br label %1254

1254:                                             ; preds = %1253
  %1255 = load ptr, ptr %7, align 8, !tbaa !5
  %1256 = call zeroext i1 @dpl_check(ptr noundef %1255)
  %1257 = xor i1 %1256, true
  %1258 = xor i1 %1257, true
  %1259 = xor i1 %1258, true
  %1260 = zext i1 %1259 to i32
  %1261 = sext i32 %1260 to i64
  %1262 = call i64 @llvm.expect.i64(i64 %1261, i64 0)
  %1263 = icmp ne i64 %1262, 0
  br i1 %1263, label %1264, label %1268

1264:                                             ; preds = %1254
  %1265 = load ptr, ptr %7, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.MDBX_txn, ptr %1265, i32 0, i32 9
  %1267 = load ptr, ptr %1266, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1267, ptr noundef @.str.27, ptr noundef @__func__.spill_slowpath, i32 noundef 397) #12
  unreachable

1268:                                             ; preds = %1254
  br label %1269

1269:                                             ; preds = %1268
  br label %1270

1270:                                             ; preds = %1269
  br label %1271

1271:                                             ; preds = %1270, %1242
  br label %1272

1272:                                             ; preds = %1271
  br label %1273

1273:                                             ; preds = %1272
  %1274 = call zeroext i1 @iov_empty(ptr noundef %41)
  br i1 %1274, label %1309, label %1275

1275:                                             ; preds = %1273
  br label %1276

1276:                                             ; preds = %1275
  %1277 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !11
  %1278 = zext i8 %1277 to i32
  %1279 = and i32 %1278, 1
  %1280 = icmp ne i32 %1279, 0
  %1281 = xor i1 %1280, true
  %1282 = xor i1 %1281, true
  %1283 = zext i1 %1282 to i32
  %1284 = sext i32 %1283 to i64
  %1285 = call i64 @llvm.expect.i64(i64 %1284, i64 1)
  %1286 = icmp ne i64 %1285, 0
  br i1 %1286, label %1287, label %1305

1287:                                             ; preds = %1276
  br label %1288

1288:                                             ; preds = %1287
  %1289 = load i32, ptr %12, align 4, !tbaa !21
  %1290 = icmp eq i32 %1289, 0
  %1291 = xor i1 %1290, true
  %1292 = xor i1 %1291, true
  %1293 = xor i1 %1292, true
  %1294 = zext i1 %1293 to i32
  %1295 = sext i32 %1294 to i64
  %1296 = call i64 @llvm.expect.i64(i64 %1295, i64 0)
  %1297 = icmp ne i64 %1296, 0
  br i1 %1297, label %1298, label %1302

1298:                                             ; preds = %1288
  %1299 = load ptr, ptr %7, align 8, !tbaa !5
  %1300 = getelementptr inbounds %struct.MDBX_txn, ptr %1299, i32 0, i32 9
  %1301 = load ptr, ptr %1300, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1301, ptr noundef @.str.28, ptr noundef @__func__.spill_slowpath, i32 noundef 400) #12
  unreachable

1302:                                             ; preds = %1288
  br label %1303

1303:                                             ; preds = %1302
  br label %1304

1304:                                             ; preds = %1303
  br label %1305

1305:                                             ; preds = %1304, %1276
  br label %1306

1306:                                             ; preds = %1305
  br label %1307

1307:                                             ; preds = %1306
  %1308 = call i32 @iov_write(ptr noundef %41)
  store i32 %1308, ptr %12, align 4, !tbaa !21
  br label %1309

1309:                                             ; preds = %1307, %1273
  %1310 = load i32, ptr %12, align 4, !tbaa !21
  %1311 = icmp ne i32 %1310, 0
  %1312 = xor i1 %1311, true
  %1313 = xor i1 %1312, true
  %1314 = zext i1 %1313 to i32
  %1315 = sext i32 %1314 to i64
  %1316 = call i64 @llvm.expect.i64(i64 %1315, i64 0)
  %1317 = icmp ne i64 %1316, 0
  br i1 %1317, label %1318, label %1319

1318:                                             ; preds = %1309
  store i32 13, ptr %19, align 4
  br label %1365

1319:                                             ; preds = %1309
  %1320 = load i32, ptr %35, align 4, !tbaa !21
  %1321 = zext i32 %1320 to i64
  %1322 = load ptr, ptr %7, align 8, !tbaa !5
  %1323 = getelementptr inbounds %struct.MDBX_txn, ptr %1322, i32 0, i32 9
  %1324 = load ptr, ptr %1323, align 8, !tbaa !20
  %1325 = getelementptr inbounds %struct.MDBX_env, ptr %1324, i32 0, i32 7
  %1326 = load ptr, ptr %1325, align 8, !tbaa !27
  %1327 = getelementptr inbounds %struct.shared_lck, ptr %1326, i32 0, i32 14
  %1328 = load volatile i64, ptr %1327, align 8, !tbaa !22
  %1329 = add i64 %1328, %1321
  store volatile i64 %1329, ptr %1327, align 8, !tbaa !22
  %1330 = load ptr, ptr %7, align 8, !tbaa !5
  %1331 = getelementptr inbounds %struct.MDBX_txn, ptr %1330, i32 0, i32 17
  %1332 = getelementptr inbounds %struct.anon.4, ptr %1331, i32 0, i32 11
  %1333 = getelementptr inbounds %struct.anon.7, ptr %1332, i32 0, i32 1
  %1334 = load ptr, ptr %1333, align 8, !tbaa !22
  %1335 = load ptr, ptr %7, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.MDBX_txn, ptr %1335, i32 0, i32 6
  %1337 = getelementptr inbounds %struct.geo, ptr %1336, i32 0, i32 5
  %1338 = load i32, ptr %1337, align 8, !tbaa !22
  %1339 = zext i32 %1338 to i64
  %1340 = shl i64 %1339, 1
  call void @pnl_sort(ptr noundef %1334, i64 noundef %1340)
  %1341 = load ptr, ptr %7, align 8, !tbaa !5
  %1342 = getelementptr inbounds %struct.MDBX_txn, ptr %1341, i32 0, i32 1
  %1343 = load i32, ptr %1342, align 4, !tbaa !15
  %1344 = or i32 %1343, 8
  store i32 %1344, ptr %1342, align 4, !tbaa !15
  br label %1345

1345:                                             ; preds = %1319
  %1346 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1347 = zext i8 %1346 to i32
  %1348 = icmp sle i32 3, %1347
  %1349 = xor i1 %1348, true
  %1350 = xor i1 %1349, true
  %1351 = zext i1 %1350 to i32
  %1352 = sext i32 %1351 to i64
  %1353 = call i64 @llvm.expect.i64(i64 %1352, i64 0)
  %1354 = icmp ne i64 %1353, 0
  br i1 %1354, label %1355, label %1362

1355:                                             ; preds = %1345
  %1356 = load i32, ptr %34, align 4, !tbaa !21
  %1357 = load i32, ptr %35, align 4, !tbaa !21
  %1358 = load ptr, ptr %7, align 8, !tbaa !5
  %1359 = getelementptr inbounds %struct.MDBX_txn, ptr %1358, i32 0, i32 17
  %1360 = getelementptr inbounds %struct.anon.4, ptr %1359, i32 0, i32 6
  %1361 = load i64, ptr %1360, align 8, !tbaa !22
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef @__func__.spill_slowpath, i32 noundef 410, ptr noundef @.str.29, i32 noundef %1356, i32 noundef %1357, i64 noundef %1361)
  br label %1362

1362:                                             ; preds = %1355, %1345
  br label %1363

1363:                                             ; preds = %1362
  br label %1364

1364:                                             ; preds = %1363
  store i32 0, ptr %19, align 4
  br label %1365

1365:                                             ; preds = %1364, %1318, %1071
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #13
  br label %1366

1366:                                             ; preds = %1365, %871
  call void @llvm.lifetime.end.p0(i64 40, ptr %41) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #13
  %1367 = load i32, ptr %19, align 4
  switch i32 %1367, label %1481 [
    i32 0, label %1368
    i32 13, label %492
  ]

1368:                                             ; preds = %1366
  br label %1452

1369:                                             ; preds = %708
  br label %1370

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

1381:                                             ; preds = %1370
  br label %1382

1382:                                             ; preds = %1381
  %1383 = load i32, ptr %12, align 4, !tbaa !21
  %1384 = icmp eq i32 %1383, 0
  %1385 = xor i1 %1384, true
  %1386 = xor i1 %1385, true
  %1387 = xor i1 %1386, true
  %1388 = zext i1 %1387 to i32
  %1389 = sext i32 %1388 to i64
  %1390 = call i64 @llvm.expect.i64(i64 %1389, i64 0)
  %1391 = icmp ne i64 %1390, 0
  br i1 %1391, label %1392, label %1396

1392:                                             ; preds = %1382
  %1393 = load ptr, ptr %7, align 8, !tbaa !5
  %1394 = getelementptr inbounds %struct.MDBX_txn, ptr %1393, i32 0, i32 9
  %1395 = load ptr, ptr %1394, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %1395, ptr noundef @.str.28, ptr noundef @__func__.spill_slowpath, i32 noundef 412) #12
  unreachable

1396:                                             ; preds = %1382
  br label %1397

1397:                                             ; preds = %1396
  br label %1398

1398:                                             ; preds = %1397
  br label %1399

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

1400:                                             ; preds = %1399
  br label %1401

1401:                                             ; preds = %1400
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #13
  store i64 1, ptr %49, align 8, !tbaa !9
  br label %1402

1402:                                             ; preds = %1448, %1401
  %1403 = load i64, ptr %49, align 8, !tbaa !9
  %1404 = load ptr, ptr %20, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct.dpl, ptr %1404, i32 0, i32 1
  %1406 = load i64, ptr %1405, align 8, !tbaa !25
  %1407 = icmp ule i64 %1403, %1406
  br i1 %1407, label %1409, label %1408

1408:                                             ; preds = %1402
  store i32 100, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #13
  br label %1451

1409:                                             ; preds = %1402
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #13
  %1410 = load ptr, ptr %20, align 8, !tbaa !5
  %1411 = getelementptr inbounds %struct.dpl, ptr %1410, i32 0, i32 4
  %1412 = load i64, ptr %49, align 8, !tbaa !9
  %1413 = getelementptr inbounds [18 x %struct.dp], ptr %1411, i64 0, i64 %1412
  %1414 = getelementptr inbounds %struct.dp, ptr %1413, i32 0, i32 0
  %1415 = load ptr, ptr %1414, align 8, !tbaa !38
  store ptr %1415, ptr %50, align 8, !tbaa !5
  br label %1416

1416:                                             ; preds = %1409
  %1417 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !26
  %1418 = zext i8 %1417 to i32
  %1419 = icmp sle i32 4, %1418
  %1420 = xor i1 %1419, true
  %1421 = xor i1 %1420, true
  %1422 = zext i1 %1421 to i32
  %1423 = sext i32 %1422 to i64
  %1424 = call i64 @llvm.expect.i64(i64 %1423, i64 0)
  %1425 = icmp ne i64 %1424, 0
  br i1 %1425, label %1426, label %1445

1426:                                             ; preds = %1416
  %1427 = load i64, ptr %49, align 8, !tbaa !9
  %1428 = load ptr, ptr %50, align 8, !tbaa !5
  %1429 = getelementptr inbounds %struct.page, ptr %1428, i32 0, i32 4
  %1430 = load i32, ptr %1429, align 1, !tbaa !21
  %1431 = load ptr, ptr %20, align 8, !tbaa !5
  %1432 = load i64, ptr %49, align 8, !tbaa !9
  %1433 = call i32 @dpl_npages(ptr noundef %1431, i64 noundef %1432) #14
  %1434 = load ptr, ptr %50, align 8, !tbaa !5
  %1435 = getelementptr inbounds %struct.page, ptr %1434, i32 0, i32 2
  %1436 = load i16, ptr %1435, align 1, !tbaa !51
  %1437 = zext i16 %1436 to i32
  %1438 = load ptr, ptr %7, align 8, !tbaa !5
  %1439 = load i64, ptr %49, align 8, !tbaa !9
  %1440 = call i32 @dpl_age(ptr noundef %1438, i64 noundef %1439) #14
  %1441 = load ptr, ptr %7, align 8, !tbaa !5
  %1442 = load i64, ptr %49, align 8, !tbaa !9
  %1443 = load i32, ptr %29, align 4, !tbaa !21
  %1444 = call i32 @spill_prio(ptr noundef %1441, i64 noundef %1442, i32 noundef %1443) #14
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.spill_slowpath, i32 noundef 416, ptr noundef @.str.30, i64 noundef %1427, i32 noundef %1430, i32 noundef %1433, i32 noundef %1437, i32 noundef %1440, i32 noundef %1444)
  br label %1445

1445:                                             ; preds = %1426, %1416
  br label %1446

1446:                                             ; preds = %1445
  br label %1447

1447:                                             ; preds = %1446
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #13
  br label %1448

1448:                                             ; preds = %1447
  %1449 = load i64, ptr %49, align 8, !tbaa !9
  %1450 = add i64 %1449, 1
  store i64 %1450, ptr %49, align 8, !tbaa !9
  br label %1402, !llvm.loop !52

1451:                                             ; preds = %1408
  br label %1452

1452:                                             ; preds = %1451, %1368
  br label %1453

1453:                                             ; preds = %1452, %540, %325, %183, %114
  %1454 = load ptr, ptr %7, align 8, !tbaa !5
  %1455 = getelementptr inbounds %struct.MDBX_txn, ptr %1454, i32 0, i32 17
  %1456 = getelementptr inbounds %struct.anon.4, ptr %1455, i32 0, i32 6
  %1457 = load i64, ptr %1456, align 8, !tbaa !22
  %1458 = load ptr, ptr %7, align 8, !tbaa !5
  %1459 = getelementptr inbounds %struct.MDBX_txn, ptr %1458, i32 0, i32 17
  %1460 = getelementptr inbounds %struct.anon.4, ptr %1459, i32 0, i32 10
  %1461 = load i64, ptr %1460, align 8, !tbaa !22
  %1462 = add i64 %1457, %1461
  %1463 = load i64, ptr %11, align 8, !tbaa !9
  %1464 = icmp ugt i64 %1463, 32
  br i1 %1464, label %1465, label %1466

1465:                                             ; preds = %1453
  br label %1468

1466:                                             ; preds = %1453
  %1467 = load i64, ptr %11, align 8, !tbaa !9
  br label %1468

1468:                                             ; preds = %1466, %1465
  %1469 = phi i64 [ 32, %1465 ], [ %1467, %1466 ]
  %1470 = icmp ugt i64 %1462, %1469
  %1471 = xor i1 %1470, true
  %1472 = xor i1 %1471, true
  %1473 = zext i1 %1472 to i32
  %1474 = sext i32 %1473 to i64
  %1475 = call i64 @llvm.expect.i64(i64 %1474, i64 1)
  %1476 = icmp ne i64 %1475, 0
  %1477 = zext i1 %1476 to i64
  %1478 = select i1 %1476, i32 0, i32 -30788
  store i32 %1478, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %1479

1479:                                             ; preds = %1468, %492, %325
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #13
  %1480 = load i32, ptr %6, align 4
  ret i32 %1480

1481:                                             ; preds = %1366
  unreachable
}

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

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

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

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

declare ptr @pnl_alloc(i64 noundef) #5

declare i32 @pnl_reserve(ptr noundef, i64 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @dpl_sort(ptr noundef) #7

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

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

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

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

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

declare i32 @iov_init(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, i1 noundef zeroext) #5

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @dpl_setlen(ptr noundef, i64 noundef) #7

declare zeroext i1 @dpl_check(ptr noundef) #5

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

declare i32 @iov_write(ptr noundef) #5

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

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

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

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


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

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

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@__func__.spill_slowpath = external hidden unnamed_addr constant [15 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [122 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [69 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @spill_purge(ptr noundef) local_unnamed_addr #2

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @spill_slowpath(ptr noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4) local_unnamed_addr #3 {
  %6 = alloca [256 x i32], align 16
  %7 = alloca [256 x i32], align 16
  %8 = alloca %struct.iov_ctx, align 8
  %9 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %10 = and i8 %9, 1
  %.not = icmp eq i8 %10, 0
  br i1 %.not, label %18, label %11, !prof !13

11:                                               ; preds = %5
  %12 = getelementptr inbounds i8, ptr %0, i64 4
  %13 = load i32, ptr %12, align 4, !tbaa !14
  %14 = and i32 %13, 131072
  %.not340 = icmp eq i32 %14, 0
  br i1 %.not340, label %18, label %15, !prof !19

15:                                               ; preds = %11
  %16 = getelementptr inbounds i8, ptr %0, i64 80
  %17 = load ptr, ptr %16, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %17, ptr noundef nonnull @.str.4, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 182) #12
  unreachable

18:                                               ; preds = %5, %11
  %19 = getelementptr inbounds i8, ptr %0, i64 520
  %20 = load i64, ptr %19, align 8, !tbaa !21
  %21 = getelementptr inbounds i8, ptr %0, i64 496
  %22 = load ptr, ptr %21, align 8, !tbaa !21
  %.not341 = icmp eq ptr %22, null
  %23 = getelementptr inbounds i8, ptr %22, i64 16
  %24 = getelementptr inbounds i8, ptr %0, i64 528
  %.in = select i1 %.not341, ptr %24, ptr %23
  %25 = load i64, ptr %.in, align 8, !tbaa !21
  %.not342 = icmp ult i64 %20, %25
  br i1 %.not342, label %26, label %.loopexit, !prof !19

26:                                               ; preds = %18
  br i1 %.not341, label %31, label %27

27:                                               ; preds = %26
  %28 = getelementptr inbounds i8, ptr %22, i64 8
  %29 = load i64, ptr %28, align 8, !tbaa !22
  %30 = sub i64 %29, %20
  br label %31

31:                                               ; preds = %26, %27
  %32 = phi i64 [ %30, %27 ], [ 1, %26 ]
  %33 = sub i64 %25, %20
  %34 = getelementptr inbounds i8, ptr %0, i64 80
  %35 = load ptr, ptr %34, align 8, !tbaa !20
  %36 = tail call i64 @spill_gate(ptr noundef %35, i64 noundef %2, i64 noundef %32)
  %37 = load ptr, ptr %34, align 8, !tbaa !20
  %38 = tail call i64 @spill_gate(ptr noundef %37, i64 noundef %3, i64 noundef %33)
  %39 = tail call i64 @llvm.umax.i64(i64 %36, i64 %38)
  %.not346 = icmp eq i64 %39, 0
  br i1 %.not346, label %.loopexit, label %40

40:                                               ; preds = %31
  %41 = getelementptr inbounds i8, ptr %0, i64 4
  %42 = load i32, ptr %41, align 4, !tbaa !14
  %43 = and i32 %42, 524288
  %.not347 = icmp eq i32 %43, 0
  %44 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %45 = icmp ugt i8 %44, 2
  br i1 %.not347, label %77, label %46

46:                                               ; preds = %40
  br i1 %45, label %47, label %48, !prof !13

47:                                               ; preds = %46
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 201, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, i64 noundef %32, i64 noundef %33) #13
  br label %48

48:                                               ; preds = %47, %46
  %49 = load ptr, ptr %34, align 8, !tbaa !20
  %50 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %51 = and i8 %50, 1
  %.not391 = icmp eq i8 %51, 0
  br i1 %.not391, label %56, label %52, !prof !13

52:                                               ; preds = %48
  %53 = getelementptr inbounds i8, ptr %0, i64 536
  %54 = load ptr, ptr %53, align 8, !tbaa !21
  %.not392 = icmp eq ptr %54, null
  br i1 %.not392, label %56, label %55, !prof !19

55:                                               ; preds = %52
  tail call void @mdbx_assert_fail(ptr noundef %49, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 203) #12
  unreachable

56:                                               ; preds = %52, %48
  %57 = getelementptr inbounds i8, ptr %49, i64 16
  %58 = getelementptr inbounds i8, ptr %0, i64 56
  %59 = load i32, ptr %58, align 8, !tbaa !21
  %60 = zext i32 %59 to i64
  %61 = tail call i64 @pgno_align2os_bytes(ptr noundef %49, i64 noundef %60) #14
  %62 = tail call i32 @osal_msync(ptr noundef nonnull %57, i64 noundef 0, i64 noundef %61, i32 noundef 1) #13
  %.not393 = icmp eq i32 %62, 0
  br i1 %.not393, label %63, label %.thread, !prof !19

63:                                               ; preds = %56
  %64 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %65 = and i8 %64, 1
  %.not394 = icmp eq i8 %65, 0
  br i1 %.not394, label %70, label %66, !prof !13

66:                                               ; preds = %63
  %67 = load ptr, ptr %21, align 8, !tbaa !21
  %.not395 = icmp eq ptr %67, null
  br i1 %.not395, label %70, label %68, !prof !19

68:                                               ; preds = %66
  %69 = load ptr, ptr %34, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %69, ptr noundef nonnull @.str.8, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 223) #12
  unreachable

70:                                               ; preds = %63, %66
  %71 = load i64, ptr %24, align 8, !tbaa !21
  %72 = getelementptr inbounds i8, ptr %49, i64 104
  %73 = load ptr, ptr %72, align 8, !tbaa !25
  %74 = getelementptr inbounds i8, ptr %73, i64 376
  %75 = load volatile i64, ptr %74, align 8, !tbaa !21
  %76 = add i64 %75, %71
  store volatile i64 %76, ptr %74, align 8, !tbaa !21
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %.loopexit

77:                                               ; preds = %40
  br i1 %45, label %78, label %79, !prof !13

78:                                               ; preds = %77
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 231, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.9, i64 noundef %36, i64 noundef %38) #13
  br label %79

79:                                               ; preds = %77, %78
  %80 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %81 = and i8 %80, 1
  %.not348 = icmp eq i8 %81, 0
  br i1 %.not348, label %.thread404, label %82, !prof !13

82:                                               ; preds = %79
  %83 = load ptr, ptr %21, align 8, !tbaa !21
  %.not349 = icmp eq ptr %83, null
  br i1 %.not349, label %84, label %85, !prof !13

84:                                               ; preds = %82
  tail call void @mdbx_assert_fail(ptr noundef null, ptr noundef nonnull @.str.10, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 232) #12
  unreachable

85:                                               ; preds = %82
  %86 = getelementptr inbounds i8, ptr %83, i64 8
  %87 = load i64, ptr %86, align 8, !tbaa !22
  %88 = load i64, ptr %19, align 8, !tbaa !21
  %.not351 = icmp eq i64 %87, %88
  br i1 %.not351, label %89, label %91, !prof !13

89:                                               ; preds = %85
  %90 = load ptr, ptr %34, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %90, ptr noundef nonnull @.str.11, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 233) #12
  unreachable

91:                                               ; preds = %85
  %92 = getelementptr inbounds i8, ptr %83, i64 16
  %93 = load i64, ptr %92, align 8, !tbaa !34
  %94 = sub i64 %93, %88
  %.not353 = icmp ult i64 %94, %38
  br i1 %.not353, label %95, label %.thread404, !prof !13

95:                                               ; preds = %91
  %96 = load ptr, ptr %34, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %96, ptr noundef nonnull @.str.12, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 234) #12
  unreachable

.thread404:                                       ; preds = %79, %91
  %97 = getelementptr inbounds i8, ptr %0, i64 536
  %98 = load ptr, ptr %97, align 8, !tbaa !21
  %.not354 = icmp eq ptr %98, null
  br i1 %.not354, label %99, label %103

99:                                               ; preds = %.thread404
  store i64 2147483647, ptr %24, align 8, !tbaa !21
  %100 = tail call ptr @pnl_alloc(i64 noundef %39) #13
  store ptr %100, ptr %97, align 8, !tbaa !21
  %.not355 = icmp eq ptr %100, null
  br i1 %.not355, label %.thread, label %106, !prof !13

.thread:                                          ; preds = %56, %.thread422, %99
  %.0284 = phi i32 [ 12, %99 ], [ %.9.ph, %.thread422 ], [ %62, %56 ]
  %101 = load i32, ptr %41, align 4, !tbaa !14
  %102 = or i32 %101, 2
  store i32 %102, ptr %41, align 4, !tbaa !14
  br label %377

103:                                              ; preds = %.thread404
  %104 = tail call ptr @spill_purge(ptr noundef nonnull %0)
  %105 = tail call i32 @pnl_reserve(ptr noundef nonnull %97, i64 noundef %39) #13
  br label %106

106:                                              ; preds = %99, %103
  %.1 = phi i32 [ %105, %103 ], [ 0, %99 ]
  %107 = tail call ptr @dpl_sort(ptr noundef nonnull %0)
  %108 = tail call i64 @spill_txn_keep(ptr noundef nonnull %0, ptr noundef %1)
  %109 = load i64, ptr %19, align 8, !tbaa !21
  %110 = add i64 %109, %108
  %111 = getelementptr inbounds i8, ptr %107, i64 8
  %112 = load i64, ptr %111, align 8, !tbaa !22
  %.not356 = icmp ult i64 %110, %112
  br i1 %.not356, label %.preheader429.preheader, label %114

.preheader429.preheader:                          ; preds = %106
  %113 = add i64 %112, 1
  %umax = tail call i64 @llvm.umax.i64(i64 %113, i64 2)
  br label %.preheader429

114:                                              ; preds = %106
  %115 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %.not390 = icmp eq i8 %115, 0
  br i1 %.not390, label %.loopexit, label %116, !prof !19

116:                                              ; preds = %114
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 266, ptr noundef nonnull @.str.13, i64 noundef %108) #13
  br label %.loopexit

117:                                              ; preds = %.preheader429
  %118 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %119 = icmp ugt i8 %118, 3
  br i1 %119, label %123, label %126, !prof !13

.preheader429:                                    ; preds = %.preheader429.preheader, %.preheader429
  %.0321454 = phi i32 [ %121, %.preheader429 ], [ 0, %.preheader429.preheader ]
  %.0322453 = phi i64 [ %122, %.preheader429 ], [ 1, %.preheader429.preheader ]
  %120 = tail call i32 @dpl_age(ptr noundef %0, i64 noundef %.0322453) #14
  %121 = tail call i32 @llvm.umax.i32(i32 %.0321454, i32 %120)
  %122 = add nuw i64 %.0322453, 1
  %exitcond = icmp eq i64 %122, %umax
  br i1 %exitcond, label %117, label %.preheader429, !llvm.loop !35

123:                                              ; preds = %117
  %124 = getelementptr inbounds i8, ptr %0, i64 480
  %125 = load i32, ptr %124, align 8, !tbaa !21
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 300, ptr noundef nonnull @.str.14, i32 noundef %125, i32 noundef %121) #13
  %.pre = load i64, ptr %111, align 8, !tbaa !22
  br label %126

126:                                              ; preds = %123, %117
  %127 = phi i64 [ %.pre, %123 ], [ 1, %117 ]
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %6, i8 0, i64 1024, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %7, i8 0, i64 1024, i1 false)
  %128 = add i32 %121, 1
  %129 = udiv i32 -16777216, %128
  %.not358455 = icmp eq i64 %127, 0
  br i1 %.not358455, label %.thread557, label %.lr.ph

.lr.ph:                                           ; preds = %126
  %130 = getelementptr inbounds i8, ptr %107, i64 32
  %.pre526 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  br label %133

._crit_edge:                                      ; preds = %167
  %131 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %132 = and i8 %131, 1
  %.not359 = icmp ne i8 %132, 0
  %.not360 = icmp ult i64 %.1327, %.1324
  %or.cond = select i1 %.not359, i1 %.not360, i1 false
  br i1 %or.cond, label %170, label %172, !prof !37

133:                                              ; preds = %.lr.ph, %167
  %134 = phi i8 [ %.pre526, %.lr.ph ], [ %153, %167 ]
  %.0323458 = phi i64 [ 0, %.lr.ph ], [ %.1324, %167 ]
  %.0325457 = phi i64 [ 1, %.lr.ph ], [ %168, %167 ]
  %.0326456 = phi i64 [ 0, %.lr.ph ], [ %.1327, %167 ]
  %135 = tail call i32 @spill_prio(ptr noundef %0, i64 noundef %.0325457, i32 noundef %129) #14
  %136 = icmp ugt i8 %134, 5
  br i1 %136, label %137, label %152, !prof !13

137:                                              ; preds = %133
  %138 = getelementptr inbounds [18 x %struct.dp], ptr %130, i64 0, i64 %.0325457
  %139 = load ptr, ptr %138, align 8, !tbaa !38
  %140 = ptrtoint ptr %139 to i64
  %141 = add nsw i64 %140, -8
  %142 = inttoptr i64 %141 to ptr
  %143 = getelementptr inbounds i8, ptr %138, i64 8
  %144 = load i32, ptr %143, align 8, !tbaa !40
  %145 = load i64, ptr %142, align 8, !tbaa !41
  %146 = getelementptr inbounds i8, ptr %138, i64 12
  %147 = load i32, ptr %146, align 4, !tbaa !42
  %148 = icmp ugt i32 %147, 1
  %149 = select i1 %148, i32 89, i32 78
  %150 = tail call i32 @dpl_npages(ptr noundef %107, i64 noundef %.0325457) #14
  %151 = tail call i32 @dpl_age(ptr noundef %0, i64 noundef %.0325457) #14
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 6, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 312, ptr noundef nonnull @.str.15, i32 noundef %144, i64 noundef %145, i32 noundef %149, i32 noundef %150, i32 noundef %151, i32 noundef %121, i32 noundef %135) #13
  %.pre525 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  br label %152

152:                                              ; preds = %137, %133
  %153 = phi i8 [ %.pre525, %137 ], [ %134, %133 ]
  %154 = icmp ult i32 %135, 256
  br i1 %154, label %155, label %167

155:                                              ; preds = %152
  %156 = zext nneg i32 %135 to i64
  %157 = getelementptr inbounds [256 x i32], ptr %6, i64 0, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !43
  %159 = add i32 %158, 1
  store i32 %159, ptr %157, align 4, !tbaa !43
  %160 = add i64 %.0323458, 1
  %161 = tail call i32 @dpl_npages(ptr noundef %107, i64 noundef %.0325457) #14
  %162 = getelementptr inbounds [256 x i32], ptr %7, i64 0, i64 %156
  %163 = load i32, ptr %162, align 4, !tbaa !43
  %164 = add i32 %163, %161
  store i32 %164, ptr %162, align 4, !tbaa !43
  %165 = zext i32 %161 to i64
  %166 = add i64 %.0326456, %165
  br label %167

167:                                              ; preds = %155, %152
  %.1327 = phi i64 [ %166, %155 ], [ %.0326456, %152 ]
  %.1324 = phi i64 [ %160, %155 ], [ %.0323458, %152 ]
  %168 = add i64 %.0325457, 1
  %169 = load i64, ptr %111, align 8, !tbaa !22
  %.not358 = icmp ugt i64 %168, %169
  br i1 %.not358, label %._crit_edge, label %133, !llvm.loop !44

170:                                              ; preds = %._crit_edge
  %171 = load ptr, ptr %34, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %171, ptr noundef nonnull @.str.16, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 322) #12
  unreachable

172:                                              ; preds = %._crit_edge
  %.not361 = icmp eq i64 %.1324, 0
  br i1 %.not361, label %345, label %173, !prof !45

173:                                              ; preds = %172
  %174 = load i32, ptr %6, align 16, !tbaa !43
  %175 = zext i32 %174 to i64
  %176 = load i32, ptr %7, align 16, !tbaa !43
  %177 = zext i32 %176 to i64
  %178 = add i64 %.1324, %36
  %179 = add i64 %.1327, %38
  br label %180

180:                                              ; preds = %173, %192
  %.0302464 = phi i64 [ 1, %173 ], [ %193, %192 ]
  %.0303463 = phi i64 [ %177, %173 ], [ %.1304, %192 ]
  %.0305462 = phi i64 [ %175, %173 ], [ %.1306, %192 ]
  %.0307461 = phi i64 [ 128, %173 ], [ %.1308, %192 ]
  %.0309460 = phi i64 [ 0, %173 ], [ %.1310, %192 ]
  %181 = icmp ult i64 %.0305462, %36
  %182 = icmp ult i64 %.0303463, %38
  %or.cond396 = select i1 %181, i1 true, i1 %182
  br i1 %or.cond396, label %183, label %187

183:                                              ; preds = %180
  %184 = sub nuw nsw i64 257, %.0302464
  %185 = lshr i64 %184, 1
  %186 = add nuw nsw i64 %185, %.0302464
  br label %192

187:                                              ; preds = %180
  %188 = shl i64 %.0305462, 1
  %189 = icmp ult i64 %188, %178
  %190 = shl i64 %.0303463, 1
  %191 = icmp ult i64 %190, %179
  %or.cond509 = select i1 %189, i1 true, i1 %191
  br i1 %or.cond509, label %192, label %194

192:                                              ; preds = %187, %183
  %.1310 = phi i64 [ %.0302464, %183 ], [ %.0309460, %187 ]
  %.1308 = phi i64 [ %186, %183 ], [ %.0302464, %187 ]
  %.pn388.in.in = getelementptr inbounds [256 x i32], ptr %7, i64 0, i64 %.0302464
  %.pn388.in = load i32, ptr %.pn388.in.in, align 4, !tbaa !43
  %.pn388 = zext i32 %.pn388.in to i64
  %.1304 = add i64 %.0303463, %.pn388
  %.pn.in.in = getelementptr inbounds [256 x i32], ptr %6, i64 0, i64 %.0302464
  %.pn.in = load i32, ptr %.pn.in.in, align 4, !tbaa !43
  %.pn = zext i32 %.pn.in to i64
  %.1306 = add i64 %.0305462, %.pn
  %193 = add nuw nsw i64 %.0302464, 1
  %exitcond524.not = icmp eq i64 %193, 256
  br i1 %exitcond524.not, label %194, label %180, !llvm.loop !46

194:                                              ; preds = %187, %192
  %.0309.lcssa = phi i64 [ %.1310, %192 ], [ %.0309460, %187 ]
  %.0307.lcssa = phi i64 [ %.1308, %192 ], [ %.0307461, %187 ]
  %.0305.lcssa = phi i64 [ %.1306, %192 ], [ %.0305462, %187 ]
  %.0303.lcssa = phi i64 [ %.1304, %192 ], [ %.0303463, %187 ]
  %195 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %196 = icmp ugt i8 %195, 3
  br i1 %196, label %197, label %198, !prof !13

197:                                              ; preds = %194
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 345, ptr noundef nonnull @.str.17, i64 noundef %.0309.lcssa, i64 noundef %.0307.lcssa, i64 noundef %.1324, i64 noundef %.1327, i64 noundef %36, i64 noundef %38, i64 noundef %.0305.lcssa, i64 noundef %.0303.lcssa) #13
  %.pre527 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %.pre531 = and i8 %.pre527, 1
  br label %198

198:                                              ; preds = %194, %197
  %.pre-phi = phi i8 [ %132, %194 ], [ %.pre531, %197 ]
  %.not365 = icmp eq i8 %.pre-phi, 0
  br i1 %.not365, label %204, label %199, !prof !13

199:                                              ; preds = %198
  %200 = icmp uge i64 %.0309.lcssa, %.0307.lcssa
  %201 = icmp ugt i64 %.0307.lcssa, 256
  %.not368 = or i1 %200, %201
  br i1 %.not368, label %202, label %204, !prof !13

202:                                              ; preds = %199
  %203 = load ptr, ptr %34, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %203, ptr noundef nonnull @.str.18, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 346) #12
  unreachable

204:                                              ; preds = %199, %198
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #13
  %205 = load ptr, ptr %34, align 8, !tbaa !20
  %206 = getelementptr inbounds i8, ptr %205, i64 24
  %207 = load i32, ptr %206, align 8, !tbaa !47
  %208 = call i32 @iov_init(ptr noundef %0, ptr noundef nonnull %8, i64 noundef %.0305.lcssa, i64 noundef %.0303.lcssa, i32 noundef %207, i1 noundef zeroext true) #13
  %.not369 = icmp eq i32 %208, 0
  br i1 %.not369, label %.preheader427, label %.thread422, !prof !19

.preheader427:                                    ; preds = %204
  %209 = load i64, ptr %111, align 8, !tbaa !22
  %.not510 = icmp eq i64 %209, 0
  br i1 %.not510, label %.critedge, label %.lr.ph486

.lr.ph486:                                        ; preds = %.preheader427
  %210 = getelementptr inbounds i8, ptr %107, i64 32
  %211 = trunc i64 %.0307.lcssa to i32
  br label %212

212:                                              ; preds = %.lr.ph486, %.backedge
  %.0292484 = phi i32 [ 0, %.lr.ph486 ], [ %.1293.ph, %.backedge ]
  %.0294483 = phi i64 [ 0, %.lr.ph486 ], [ %.2296.ph, %.backedge ]
  %.0299482 = phi i64 [ 0, %.lr.ph486 ], [ %221, %.backedge ]
  %.0311481 = phi i32 [ 0, %.lr.ph486 ], [ %.3314.ph, %.backedge ]
  %.0316480 = phi i32 [ 0, %.lr.ph486 ], [ %.3319.ph, %.backedge ]
  %213 = zext i32 %.0316480 to i64
  %214 = icmp ugt i64 %36, %213
  %215 = zext i32 %.0311481 to i64
  %216 = icmp ugt i64 %38, %215
  %217 = select i1 %214, i1 true, i1 %216
  br i1 %217, label %218, label %.critedge

218:                                              ; preds = %212
  %219 = add i64 %.0294483, 1
  %220 = getelementptr inbounds [18 x %struct.dp], ptr %210, i64 0, i64 %219
  %221 = add nuw i64 %.0299482, 1
  %222 = getelementptr inbounds [18 x %struct.dp], ptr %210, i64 0, i64 %221
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %220, ptr noundef nonnull align 8 dereferenceable(16) %222, i64 16, i1 false), !tbaa.struct !48
  %223 = call i32 @spill_prio(ptr noundef %0, i64 noundef %219, i32 noundef %129) #14
  %224 = zext i32 %223 to i64
  %225 = icmp ult i64 %.0309.lcssa, %224
  br i1 %225, label %226, label %230

226:                                              ; preds = %218
  %.not374 = icmp ugt i64 %.0307.lcssa, %224
  br i1 %.not374, label %227, label %.backedge, !llvm.loop !50

227:                                              ; preds = %226
  %228 = getelementptr inbounds i8, ptr %220, i64 8
  %229 = load i32, ptr %228, align 8, !tbaa !40
  %.not375 = icmp eq i32 %.0292484, %229
  br i1 %.not375, label %230, label %.backedge, !llvm.loop !50

230:                                              ; preds = %227, %218
  %231 = call i32 @dpl_endpgno(ptr noundef nonnull %107, i64 noundef %219) #14
  br label %232

232:                                              ; preds = %239, %230
  %.1295 = phi i64 [ %219, %230 ], [ %233, %239 ]
  %233 = add i64 %.1295, -1
  %.not376 = icmp eq i64 %233, 0
  br i1 %.not376, label %.critedge3, label %234

234:                                              ; preds = %232
  %235 = call i32 @dpl_endpgno(ptr noundef nonnull %107, i64 noundef %233) #14
  %236 = getelementptr inbounds [18 x %struct.dp], ptr %210, i64 0, i64 %.1295, i32 1
  %237 = load i32, ptr %236, align 8, !tbaa !40
  %238 = icmp eq i32 %235, %237
  br i1 %238, label %239, label %.critedge3

239:                                              ; preds = %234
  %240 = call i32 @spill_prio(ptr noundef %0, i64 noundef %233, i32 noundef %129) #14
  %241 = icmp ult i32 %240, %211
  br i1 %241, label %232, label %.critedge3, !llvm.loop !51

.critedge3:                                       ; preds = %234, %232, %239
  %.not377465 = icmp ugt i64 %.1295, %219
  br i1 %.not377465, label %.backedge, label %.lr.ph468

242:                                              ; preds = %262
  %243 = add i64 %244, 1
  %.not377 = icmp ugt i64 %243, %219
  br i1 %.not377, label %.backedge, label %.lr.ph468, !llvm.loop !52

.lr.ph468:                                        ; preds = %.critedge3, %242
  %244 = phi i64 [ %243, %242 ], [ %.1295, %.critedge3 ]
  %.1312467 = phi i32 [ %264, %242 ], [ %.0311481, %.critedge3 ]
  %.1317466 = phi i32 [ %263, %242 ], [ %.0316480, %.critedge3 ]
  %245 = call i32 @dpl_npages(ptr noundef %107, i64 noundef %244) #14
  %246 = call i32 @spill_prio(ptr noundef %0, i64 noundef %244, i32 noundef %129) #14
  %247 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %248 = icmp ugt i8 %247, 4
  br i1 %248, label %249, label %256, !prof !13

249:                                              ; preds = %.lr.ph468
  %250 = zext i32 %246 to i64
  %251 = icmp ult i64 %.0309.lcssa, %250
  %252 = select i1 %251, ptr @.str.20, ptr @.str.21
  %253 = getelementptr inbounds [18 x %struct.dp], ptr %210, i64 0, i64 %244, i32 1
  %254 = load i32, ptr %253, align 8, !tbaa !40
  %255 = call i32 @dpl_age(ptr noundef %0, i64 noundef %244) #14
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 375, ptr noundef nonnull @.str.19, ptr noundef nonnull %252, i64 noundef %244, i32 noundef %245, i32 noundef %254, i32 noundef %255, i32 noundef %246) #13
  br label %256

256:                                              ; preds = %.lr.ph468, %249
  %257 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %258 = and i8 %257, 1
  %.not378 = icmp ne i8 %258, 0
  %259 = icmp ugt i32 %246, 255
  %or.cond397 = select i1 %.not378, i1 %259, i1 false
  br i1 %or.cond397, label %260, label %262, !prof !53

260:                                              ; preds = %256
  %261 = load ptr, ptr %34, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %261, ptr noundef nonnull @.str.22, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 376) #12
  unreachable

262:                                              ; preds = %256
  %263 = add i32 %.1317466, 1
  %264 = add i32 %245, %.1312467
  %265 = getelementptr inbounds [18 x %struct.dp], ptr %210, i64 0, i64 %244
  %266 = load ptr, ptr %265, align 8, !tbaa !38
  %267 = zext i32 %245 to i64
  %268 = call i32 @spill_page(ptr noundef %0, ptr noundef nonnull %8, ptr noundef %266, i64 noundef %267)
  %.not379 = icmp eq i32 %268, 0
  br i1 %.not379, label %242, label %.loopexit428, !llvm.loop !52

.backedge:                                        ; preds = %242, %227, %226, %.critedge3
  %.3319.ph = phi i32 [ %.0316480, %.critedge3 ], [ %.0316480, %226 ], [ %.0316480, %227 ], [ %263, %242 ]
  %.3314.ph = phi i32 [ %.0311481, %.critedge3 ], [ %.0311481, %226 ], [ %.0311481, %227 ], [ %264, %242 ]
  %.2296.ph = phi i64 [ %233, %.critedge3 ], [ %219, %226 ], [ %219, %227 ], [ %233, %242 ]
  %.1293.ph = phi i32 [ %231, %.critedge3 ], [ %.0292484, %226 ], [ %.0292484, %227 ], [ %231, %242 ]
  %269 = load i64, ptr %111, align 8, !tbaa !22
  %270 = icmp ult i64 %221, %269
  br i1 %270, label %212, label %.critedge, !llvm.loop !50

.critedge:                                        ; preds = %.backedge, %212, %.preheader427
  %.0316.lcssa = phi i32 [ 0, %.preheader427 ], [ %.0316480, %212 ], [ %.3319.ph, %.backedge ]
  %.0311.lcssa = phi i32 [ 0, %.preheader427 ], [ %.0311481, %212 ], [ %.3314.ph, %.backedge ]
  %.0299.lcssa = phi i64 [ 0, %.preheader427 ], [ %.0299482, %212 ], [ %221, %.backedge ]
  %.0294.lcssa = phi i64 [ 0, %.preheader427 ], [ %.0294483, %212 ], [ %.2296.ph, %.backedge ]
  %271 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %272 = icmp ugt i8 %271, 3
  br i1 %272, label %273, label %274, !prof !13

273:                                              ; preds = %.critedge
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 385, ptr noundef nonnull @.str.23, i32 noundef %.0316.lcssa, i32 noundef %.0311.lcssa) #13
  br label %274

274:                                              ; preds = %.critedge, %273
  %275 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %276 = and i8 %275, 1
  %.not370 = icmp ne i8 %276, 0
  %.not371 = icmp eq i32 %.0316.lcssa, 0
  %or.cond398 = select i1 %.not370, i1 %.not371, i1 false
  br i1 %or.cond398, label %277, label %279, !prof !53

277:                                              ; preds = %274
  %278 = load ptr, ptr %34, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %278, ptr noundef nonnull @.str.24, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 386) #12
  unreachable

279:                                              ; preds = %274
  %.not373 = icmp ult i32 %.0311.lcssa, %.0316.lcssa
  %or.cond399 = select i1 %.not370, i1 %.not373, i1 false
  br i1 %or.cond399, label %280, label %.loopexit428, !prof !53

280:                                              ; preds = %279
  %281 = load ptr, ptr %34, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %281, ptr noundef nonnull @.str.25, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 387) #12
  unreachable

.loopexit428:                                     ; preds = %262, %279
  %.4320 = phi i32 [ %.0316.lcssa, %279 ], [ %263, %262 ]
  %.4315 = phi i32 [ %.0311.lcssa, %279 ], [ %264, %262 ]
  %.1300 = phi i64 [ %.0299.lcssa, %279 ], [ %221, %262 ]
  %.3297 = phi i64 [ %.0294.lcssa, %279 ], [ %233, %262 ]
  %.6 = phi i32 [ 0, %279 ], [ %268, %262 ]
  %282 = load i64, ptr %111, align 8, !tbaa !22
  %283 = icmp ult i64 %.1300, %282
  br i1 %283, label %.lr.ph501, label %._crit_edge502

.lr.ph501:                                        ; preds = %.loopexit428
  %284 = getelementptr inbounds i8, ptr %107, i64 32
  br label %285

285:                                              ; preds = %.lr.ph501, %285
  %.4298499 = phi i64 [ %.3297, %.lr.ph501 ], [ %286, %285 ]
  %.2301498 = phi i64 [ %.1300, %.lr.ph501 ], [ %288, %285 ]
  %286 = add i64 %.4298499, 1
  %287 = getelementptr inbounds [18 x %struct.dp], ptr %284, i64 0, i64 %286
  %288 = add nuw i64 %.2301498, 1
  %289 = getelementptr inbounds [18 x %struct.dp], ptr %284, i64 0, i64 %288
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %287, ptr noundef nonnull align 8 dereferenceable(16) %289, i64 16, i1 false), !tbaa.struct !48
  %290 = load i64, ptr %111, align 8, !tbaa !22
  %291 = icmp ult i64 %288, %290
  br i1 %291, label %285, label %._crit_edge502, !llvm.loop !54

._crit_edge502:                                   ; preds = %285, %.loopexit428
  %.2301.lcssa = phi i64 [ %.1300, %.loopexit428 ], [ %288, %285 ]
  %.4298.lcssa = phi i64 [ %.3297, %.loopexit428 ], [ %286, %285 ]
  %292 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %293 = and i8 %292, 1
  %.not380 = icmp eq i8 %293, 0
  br i1 %.not380, label %._crit_edge502._crit_edge, label %294, !prof !13

._crit_edge502._crit_edge:                        ; preds = %._crit_edge502
  %.pre532 = zext i32 %.4320 to i64
  br label %301

294:                                              ; preds = %._crit_edge502
  %295 = sub i64 %.2301.lcssa, %.4298.lcssa
  %296 = zext i32 %.4320 to i64
  %297 = icmp ne i64 %295, %296
  %298 = icmp eq i32 %.6, 0
  %.not383 = and i1 %297, %298
  br i1 %.not383, label %299, label %301, !prof !13

299:                                              ; preds = %294
  %300 = load ptr, ptr %34, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %300, ptr noundef nonnull @.str.26, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 392) #12
  unreachable

301:                                              ; preds = %._crit_edge502._crit_edge, %294
  %.pre-phi533 = phi i64 [ %.pre532, %._crit_edge502._crit_edge ], [ %296, %294 ]
  %302 = call i64 @dpl_setlen(ptr noundef nonnull %107, i64 noundef %.4298.lcssa)
  store i64 %302, ptr %107, align 8, !tbaa !55
  %303 = getelementptr inbounds i8, ptr %0, i64 488
  %304 = load i64, ptr %303, align 8, !tbaa !21
  %305 = add i64 %304, %.pre-phi533
  store i64 %305, ptr %303, align 8, !tbaa !21
  %306 = zext i32 %.4315 to i64
  %307 = load ptr, ptr %21, align 8, !tbaa !21
  %308 = getelementptr inbounds i8, ptr %307, i64 16
  %309 = load i64, ptr %308, align 8, !tbaa !34
  %310 = sub i64 %309, %306
  store i64 %310, ptr %308, align 8, !tbaa !34
  %311 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %312 = and i8 %311, 1
  %.not384 = icmp eq i8 %312, 0
  br i1 %.not384, label %317, label %313, !prof !13

313:                                              ; preds = %301
  %314 = call zeroext i1 @dpl_check(ptr noundef nonnull %0) #13
  br i1 %314, label %317, label %315, !prof !19

315:                                              ; preds = %313
  %316 = load ptr, ptr %34, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %316, ptr noundef nonnull @.str.27, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 397) #12
  unreachable

317:                                              ; preds = %313, %301
  %318 = call zeroext i1 @iov_empty(ptr noundef nonnull %8)
  br i1 %318, label %326, label %319

319:                                              ; preds = %317
  %320 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %321 = and i8 %320, 1
  %.not385 = icmp eq i8 %321, 0
  %.not386 = icmp eq i32 %.6, 0
  %or.cond400 = or i1 %.not385, %.not386
  br i1 %or.cond400, label %324, label %322, !prof !56

322:                                              ; preds = %319
  %323 = load ptr, ptr %34, align 8, !tbaa !20
  call void @mdbx_assert_fail(ptr noundef %323, ptr noundef nonnull @.str.28, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 400) #12
  unreachable

324:                                              ; preds = %319
  %325 = call i32 @iov_write(ptr noundef nonnull %8) #13
  br label %326

326:                                              ; preds = %324, %317
  %.7 = phi i32 [ %.6, %317 ], [ %325, %324 ]
  %.not387 = icmp eq i32 %.7, 0
  br i1 %.not387, label %327, label %.thread422, !prof !19

327:                                              ; preds = %326
  %328 = load ptr, ptr %34, align 8, !tbaa !20
  %329 = getelementptr inbounds i8, ptr %328, i64 104
  %330 = load ptr, ptr %329, align 8, !tbaa !25
  %331 = getelementptr inbounds i8, ptr %330, i64 376
  %332 = load volatile i64, ptr %331, align 8, !tbaa !21
  %333 = add i64 %332, %306
  store volatile i64 %333, ptr %331, align 8, !tbaa !21
  %334 = load ptr, ptr %97, align 8, !tbaa !21
  %335 = getelementptr inbounds i8, ptr %0, i64 56
  %336 = load i32, ptr %335, align 8, !tbaa !21
  %337 = zext i32 %336 to i64
  %338 = shl nuw nsw i64 %337, 1
  call void @pnl_sort(ptr noundef %334, i64 noundef %338)
  %339 = load i32, ptr %41, align 4, !tbaa !14
  %340 = or i32 %339, 8
  store i32 %340, ptr %41, align 4, !tbaa !14
  %341 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %342 = icmp ugt i8 %341, 2
  br i1 %342, label %343, label %.thread417, !prof !13

343:                                              ; preds = %327
  %344 = load i64, ptr %303, align 8, !tbaa !21
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 3, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 410, ptr noundef nonnull @.str.29, i32 noundef %.4320, i32 noundef %.4315, i64 noundef %344) #13
  br label %.thread417

.thread417:                                       ; preds = %343, %327
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #13
  br label %.loopexit

.thread422:                                       ; preds = %204, %326
  %.9.ph = phi i32 [ %.7, %326 ], [ %208, %204 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #13
  br label %.thread

345:                                              ; preds = %172
  %.not362 = icmp eq i8 %132, 0
  %.not363 = icmp eq i32 %.1, 0
  %or.cond401 = select i1 %.not362, i1 true, i1 %.not363
  br i1 %or.cond401, label %.preheader, label %349, !prof !56

.thread557:                                       ; preds = %126
  %346 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 25), align 1, !tbaa !5
  %347 = and i8 %346, 1
  %.not362558 = icmp eq i8 %347, 0
  %.not363559 = icmp eq i32 %.1, 0
  %or.cond401560 = select i1 %.not362558, i1 true, i1 %.not363559
  br i1 %or.cond401560, label %.loopexit, label %349, !prof !56

.preheader:                                       ; preds = %345
  %.not364505 = icmp eq i64 %169, 0
  br i1 %.not364505, label %.loopexit, label %.lr.ph507

.lr.ph507:                                        ; preds = %.preheader
  %348 = getelementptr inbounds i8, ptr %107, i64 32
  %.pre529 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  br label %351

349:                                              ; preds = %.thread557, %345
  %350 = load ptr, ptr %34, align 8, !tbaa !20
  tail call void @mdbx_assert_fail(ptr noundef %350, ptr noundef nonnull @.str.28, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 412) #12
  unreachable

351:                                              ; preds = %.lr.ph507, %366
  %352 = phi i64 [ %169, %.lr.ph507 ], [ %367, %366 ]
  %353 = phi i8 [ %.pre529, %.lr.ph507 ], [ %368, %366 ]
  %.0283506 = phi i64 [ 1, %.lr.ph507 ], [ %369, %366 ]
  %354 = icmp ugt i8 %353, 3
  br i1 %354, label %355, label %366, !prof !13

355:                                              ; preds = %351
  %356 = getelementptr inbounds [18 x %struct.dp], ptr %348, i64 0, i64 %.0283506
  %357 = load ptr, ptr %356, align 8, !tbaa !38
  %358 = getelementptr inbounds i8, ptr %357, i64 16
  %359 = load i32, ptr %358, align 1, !tbaa !43
  %360 = tail call i32 @dpl_npages(ptr noundef nonnull %107, i64 noundef %.0283506) #14
  %361 = getelementptr inbounds i8, ptr %357, i64 10
  %362 = load i16, ptr %361, align 1, !tbaa !57
  %363 = zext i16 %362 to i32
  %364 = tail call i32 @dpl_age(ptr noundef %0, i64 noundef %.0283506) #14
  %365 = tail call i32 @spill_prio(ptr noundef %0, i64 noundef %.0283506, i32 noundef %129) #14
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.spill_slowpath, i32 noundef 416, ptr noundef nonnull @.str.30, i64 noundef %.0283506, i32 noundef %359, i32 noundef %360, i32 noundef %363, i32 noundef %364, i32 noundef %365) #13
  %.pre528 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !24
  %.pre530 = load i64, ptr %111, align 8, !tbaa !22
  br label %366

366:                                              ; preds = %355, %351
  %367 = phi i64 [ %.pre530, %355 ], [ %352, %351 ]
  %368 = phi i8 [ %.pre528, %355 ], [ %353, %351 ]
  %369 = add i64 %.0283506, 1
  %.not364 = icmp ugt i64 %369, %367
  br i1 %.not364, label %.loopexit, label %351, !llvm.loop !58

.loopexit:                                        ; preds = %366, %.thread557, %.preheader, %.thread417, %70, %114, %116, %31, %18
  %370 = getelementptr inbounds i8, ptr %0, i64 488
  %371 = load i64, ptr %370, align 8, !tbaa !21
  %372 = load i64, ptr %19, align 8, !tbaa !21
  %373 = add i64 %372, %371
  %374 = call i64 @llvm.umin.i64(i64 %4, i64 32)
  %375 = icmp ugt i64 %373, %374
  %376 = select i1 %375, i32 0, i32 -30788, !prof !19
  br label %377

377:                                              ; preds = %.loopexit, %.thread
  %.0 = phi i32 [ %376, %.loopexit ], [ %.0284, %.thread ]
  ret i32 %.0
}

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

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

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

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

declare ptr @pnl_alloc(i64 noundef) local_unnamed_addr #4

declare i32 @pnl_reserve(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @dpl_sort(ptr noundef) local_unnamed_addr #6

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

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

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

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

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

declare i32 @iov_init(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #4

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @spill_page(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @dpl_setlen(ptr noundef, i64 noundef) local_unnamed_addr #6

declare zeroext i1 @dpl_check(ptr noundef) local_unnamed_addr #4

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

declare i32 @iov_write(ptr noundef) local_unnamed_addr #4

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

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

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

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

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

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

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


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