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

; 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.meta = type { [2 x i32], %union.anon.20, i16, i8, i8, %struct.geo, %union.anon.21, %struct.MDBX_canary, %union.anon.24, [2 x %union.mdbx_atomic_uint32_t], [2 x i32], %union.bin128, %union.bin128 }
%union.anon.20 = type { i64 }
%struct.geo = type { i16, i16, i32, i32, %union.anon.12, %union.anon.13 }
%union.anon.12 = type { i32 }
%union.anon.13 = type { i32 }
%union.anon.21 = type { %struct.anon.22 }
%struct.anon.22 = type { %struct.tree, %struct.tree }
%struct.tree = type { i16, i16, i32, i32, i32, i32, i32, i64, i64, i64 }
%struct.MDBX_canary = type { i64, i64, i64, i64 }
%union.anon.24 = type { i64 }
%union.mdbx_atomic_uint32_t = type { i32 }
%struct.page = type <{ i64, i16, i16, %union.anon.25, i32, [0 x i16] }>
%union.anon.25 = type { i32 }
%struct.anon.23 = type { i16, i16, 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.2, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i64, %struct.anon.3, %struct.anon.7, i8, ptr, ptr, ptr, %struct.anon.8, %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.1, i32, i64, i64, i64 }
%union.anon.1 = type { ptr }
%struct.anon.2 = type { ptr, ptr, ptr, ptr }
%struct.anon.3 = type { i32, i32, i32, i32, i64, i8, i8, i8, i8, i32, i32, i8, i8, i8, %struct.anon.4, %union.anon.5 }
%struct.anon.4 = type { i16, i16, i16, i16 }
%union.anon.5 = type { i32 }
%struct.anon.7 = type { i64, i64, i64, i64, i64 }
%struct.anon.8 = type { i64 }
%struct.osal_ioring = type { i32, i32, i32, ptr, ptr, ptr }
%union.mdbx_atomic_uint64_t = type { i64 }

@globals = external global %struct.libmdbx_globals, align 8
@__func__.meta_validate = external hidden unnamed_addr constant [14 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [119 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [50 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 @durable_caption(ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @meta_sign_get(ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @meta_sign_calculate(ptr noundef) #4

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @meta_validate(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4) #6 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i64, align 8
  %21 = alloca i32, align 4
  %22 = alloca i64, align 8
  %23 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %24 = load ptr, ptr %8, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.meta, ptr %24, i32 0, i32 0
  %26 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %25) #11
  store i64 %26, ptr %12, align 8, !tbaa !11
  %27 = load i64, ptr %12, align 8, !tbaa !11
  %28 = icmp ne i64 %27, 6441728281112482051
  br i1 %28, label %29, label %35

29:                                               ; preds = %5
  %30 = load i64, ptr %12, align 8, !tbaa !11
  %31 = icmp ne i64 %30, 6441728281112482050
  br i1 %31, label %32, label %35

32:                                               ; preds = %29
  %33 = load i64, ptr %12, align 8, !tbaa !11
  %34 = icmp ne i64 %33, 6441728281112482303
  br label %35

35:                                               ; preds = %32, %29, %5
  %36 = phi i1 [ false, %29 ], [ false, %5 ], [ %34, %32 ]
  %37 = xor i1 %36, true
  %38 = xor i1 %37, true
  %39 = zext i1 %38 to i32
  %40 = sext i32 %39 to i64
  %41 = call i64 @llvm.expect.i64(i64 %40, i64 0)
  %42 = icmp ne i64 %41, 0
  br i1 %42, label %43, label %65

43:                                               ; preds = %35
  br label %44

44:                                               ; preds = %43
  %45 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %46 = zext i8 %45 to i32
  %47 = icmp sle i32 1, %46
  %48 = xor i1 %47, true
  %49 = xor i1 %48, true
  %50 = zext i1 %49 to i32
  %51 = sext i32 %50 to i64
  %52 = call i64 @llvm.expect.i64(i64 %51, i64 0)
  %53 = icmp ne i64 %52, 0
  br i1 %53, label %54, label %57

54:                                               ; preds = %44
  %55 = load i32, ptr %10, align 4, !tbaa !9
  %56 = load i64, ptr %12, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.meta_validate, i32 noundef 444, ptr noundef @.str.18, i32 noundef %55, i64 noundef %56)
  br label %57

57:                                               ; preds = %54, %44
  br label %58

58:                                               ; preds = %57
  br label %59

59:                                               ; preds = %58
  %60 = load i64, ptr %12, align 8, !tbaa !11
  %61 = lshr i64 %60, 8
  %62 = icmp ne i64 %61, 25163001098095633
  %63 = zext i1 %62 to i64
  %64 = select i1 %62, i32 -30793, i32 -30794
  store i32 %64, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1278

65:                                               ; preds = %35
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.page, ptr %66, i32 0, i32 4
  %68 = load i32, ptr %67, align 1, !tbaa !9
  %69 = load i32, ptr %10, align 4, !tbaa !9
  %70 = icmp ne i32 %68, %69
  %71 = xor i1 %70, true
  %72 = xor i1 %71, true
  %73 = zext i1 %72 to i32
  %74 = sext i32 %73 to i64
  %75 = call i64 @llvm.expect.i64(i64 %74, i64 0)
  %76 = icmp ne i64 %75, 0
  br i1 %76, label %77, label %96

77:                                               ; preds = %65
  br label %78

78:                                               ; preds = %77
  %79 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %80 = zext i8 %79 to i32
  %81 = icmp sle i32 1, %80
  %82 = xor i1 %81, true
  %83 = xor i1 %82, true
  %84 = zext i1 %83 to i32
  %85 = sext i32 %84 to i64
  %86 = call i64 @llvm.expect.i64(i64 %85, i64 0)
  %87 = icmp ne i64 %86, 0
  br i1 %87, label %88, label %93

88:                                               ; preds = %78
  %89 = load i32, ptr %10, align 4, !tbaa !9
  %90 = load ptr, ptr %9, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.page, ptr %90, i32 0, i32 4
  %92 = load i32, ptr %91, align 1, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.meta_validate, i32 noundef 449, ptr noundef @.str.19, i32 noundef %89, i32 noundef %92)
  br label %93

93:                                               ; preds = %88, %78
  br label %94

94:                                               ; preds = %93
  br label %95

95:                                               ; preds = %94
  store i32 -30793, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1278

96:                                               ; preds = %65
  %97 = load ptr, ptr %9, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.page, ptr %97, i32 0, i32 2
  %99 = load i16, ptr %98, align 1, !tbaa !16
  %100 = zext i16 %99 to i32
  %101 = icmp ne i32 %100, 8
  %102 = xor i1 %101, true
  %103 = xor i1 %102, true
  %104 = zext i1 %103 to i32
  %105 = sext i32 %104 to i64
  %106 = call i64 @llvm.expect.i64(i64 %105, i64 0)
  %107 = icmp ne i64 %106, 0
  br i1 %107, label %108, label %124

108:                                              ; preds = %96
  br label %109

109:                                              ; preds = %108
  %110 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %111 = zext i8 %110 to i32
  %112 = icmp sle i32 1, %111
  %113 = xor i1 %112, true
  %114 = xor i1 %113, true
  %115 = zext i1 %114 to i32
  %116 = sext i32 %115 to i64
  %117 = call i64 @llvm.expect.i64(i64 %116, i64 0)
  %118 = icmp ne i64 %117, 0
  br i1 %118, label %119, label %121

119:                                              ; preds = %109
  %120 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef @__func__.meta_validate, i32 noundef 454, ptr noundef @.str.20, i32 noundef %120)
  br label %121

121:                                              ; preds = %119, %109
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122
  store i32 -30793, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1278

124:                                              ; preds = %96
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.meta, ptr %125, i32 0, i32 6
  %127 = getelementptr inbounds %struct.anon.23, ptr %126, i32 0, i32 2
  %128 = load i32, ptr %127, align 4, !tbaa !18
  %129 = zext i32 %128 to i64
  %130 = call zeroext i1 @is_powerof2(i64 noundef %129) #12
  br i1 %130, label %131, label %143

131:                                              ; preds = %124
  %132 = load ptr, ptr %8, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.meta, ptr %132, i32 0, i32 6
  %134 = getelementptr inbounds %struct.anon.23, ptr %133, i32 0, i32 2
  %135 = load i32, ptr %134, align 4, !tbaa !18
  %136 = icmp ult i32 %135, 256
  br i1 %136, label %143, label %137

137:                                              ; preds = %131
  %138 = load ptr, ptr %8, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.meta, ptr %138, i32 0, i32 6
  %140 = getelementptr inbounds %struct.anon.23, ptr %139, i32 0, i32 2
  %141 = load i32, ptr %140, align 4, !tbaa !18
  %142 = icmp ugt i32 %141, 65536
  br label %143

143:                                              ; preds = %137, %131, %124
  %144 = phi i1 [ true, %131 ], [ true, %124 ], [ %142, %137 ]
  %145 = xor i1 %144, true
  %146 = xor i1 %145, true
  %147 = zext i1 %146 to i32
  %148 = sext i32 %147 to i64
  %149 = call i64 @llvm.expect.i64(i64 %148, i64 0)
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %179

151:                                              ; preds = %143
  br label %152

152:                                              ; preds = %151
  %153 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %154 = zext i8 %153 to i32
  %155 = icmp sle i32 2, %154
  %156 = xor i1 %155, true
  %157 = xor i1 %156, true
  %158 = zext i1 %157 to i32
  %159 = sext i32 %158 to i64
  %160 = call i64 @llvm.expect.i64(i64 %159, i64 0)
  %161 = icmp ne i64 %160, 0
  br i1 %161, label %162, label %168

162:                                              ; preds = %152
  %163 = load i32, ptr %10, align 4, !tbaa !9
  %164 = load ptr, ptr %8, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.meta, ptr %164, i32 0, i32 6
  %166 = getelementptr inbounds %struct.anon.23, ptr %165, i32 0, i32 2
  %167 = load i32, ptr %166, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 460, ptr noundef @.str.21, i32 noundef %163, i32 noundef %167)
  br label %168

168:                                              ; preds = %162, %152
  br label %169

169:                                              ; preds = %168
  br label %170

170:                                              ; preds = %169
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.meta, ptr %171, i32 0, i32 6
  %173 = getelementptr inbounds %struct.anon.23, ptr %172, i32 0, i32 2
  %174 = load i32, ptr %173, align 4, !tbaa !18
  %175 = zext i32 %174 to i64
  %176 = call zeroext i1 @is_powerof2(i64 noundef %175) #12
  %177 = zext i1 %176 to i64
  %178 = select i1 %176, i32 -30794, i32 -30793
  store i32 %178, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1278

179:                                              ; preds = %143
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = icmp ne ptr %180, null
  br i1 %181, label %182, label %215

182:                                              ; preds = %179
  %183 = load ptr, ptr %11, align 8, !tbaa !5
  %184 = load i32, ptr %183, align 4, !tbaa !9
  %185 = load ptr, ptr %8, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.meta, ptr %185, i32 0, i32 6
  %187 = getelementptr inbounds %struct.anon.23, ptr %186, i32 0, i32 2
  %188 = load i32, ptr %187, align 4, !tbaa !18
  %189 = icmp ne i32 %184, %188
  br i1 %189, label %190, label %215

190:                                              ; preds = %182
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.meta, ptr %191, i32 0, i32 6
  %193 = getelementptr inbounds %struct.anon.23, ptr %192, i32 0, i32 2
  %194 = load i32, ptr %193, align 4, !tbaa !18
  %195 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %194, ptr %195, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %190
  %197 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %198 = zext i8 %197 to i32
  %199 = icmp sle i32 4, %198
  %200 = xor i1 %199, true
  %201 = xor i1 %200, true
  %202 = zext i1 %201 to i32
  %203 = sext i32 %202 to i64
  %204 = call i64 @llvm.expect.i64(i64 %203, i64 0)
  %205 = icmp ne i64 %204, 0
  br i1 %205, label %206, label %212

206:                                              ; preds = %196
  %207 = load i32, ptr %10, align 4, !tbaa !9
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.meta, ptr %208, i32 0, i32 6
  %210 = getelementptr inbounds %struct.anon.23, ptr %209, i32 0, i32 2
  %211 = load i32, ptr %210, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef @__func__.meta_validate, i32 noundef 466, ptr noundef @.str.22, i32 noundef %207, i32 noundef %211)
  br label %212

212:                                              ; preds = %206, %196
  br label %213

213:                                              ; preds = %212
  br label %214

214:                                              ; preds = %213
  br label %215

215:                                              ; preds = %214, %182, %179
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  %216 = load ptr, ptr %8, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.meta, ptr %216, i32 0, i32 1
  %218 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %217) #11
  store i64 %218, ptr %14, align 8, !tbaa !11
  %219 = load i64, ptr %14, align 8, !tbaa !11
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.meta, ptr %220, i32 0, i32 9
  %222 = call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %221) #11
  %223 = icmp ne i64 %219, %222
  %224 = xor i1 %223, true
  %225 = xor i1 %224, true
  %226 = zext i1 %225 to i32
  %227 = sext i32 %226 to i64
  %228 = call i64 @llvm.expect.i64(i64 %227, i64 0)
  %229 = icmp ne i64 %228, 0
  br i1 %229, label %230, label %246

230:                                              ; preds = %215
  br label %231

231:                                              ; preds = %230
  %232 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %233 = zext i8 %232 to i32
  %234 = icmp sle i32 2, %233
  %235 = xor i1 %234, true
  %236 = xor i1 %235, true
  %237 = zext i1 %236 to i32
  %238 = sext i32 %237 to i64
  %239 = call i64 @llvm.expect.i64(i64 %238, i64 0)
  %240 = icmp ne i64 %239, 0
  br i1 %240, label %241, label %243

241:                                              ; preds = %231
  %242 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 471, ptr noundef @.str.23, i32 noundef %242)
  br label %243

243:                                              ; preds = %241, %231
  br label %244

244:                                              ; preds = %243
  br label %245

245:                                              ; preds = %244
  store i32 -1, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1277

246:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %247 = load ptr, ptr %8, align 8, !tbaa !5
  %248 = call i64 @meta_sign_get(ptr noundef %247)
  store i64 %248, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = call i64 @meta_sign_calculate(ptr noundef %249)
  store i64 %250, ptr %16, align 8, !tbaa !11
  %251 = load i64, ptr %15, align 8, !tbaa !11
  %252 = icmp ugt i64 %251, 1
  br i1 %252, label %253, label %281

253:                                              ; preds = %246
  %254 = load i64, ptr %15, align 8, !tbaa !11
  %255 = load i64, ptr %16, align 8, !tbaa !11
  %256 = icmp ne i64 %254, %255
  %257 = xor i1 %256, true
  %258 = xor i1 %257, true
  %259 = zext i1 %258 to i32
  %260 = sext i32 %259 to i64
  %261 = call i64 @llvm.expect.i64(i64 %260, i64 0)
  %262 = icmp ne i64 %261, 0
  br i1 %262, label %263, label %281

263:                                              ; preds = %253
  br label %264

264:                                              ; preds = %263
  %265 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %266 = zext i8 %265 to i32
  %267 = icmp sle i32 2, %266
  %268 = xor i1 %267, true
  %269 = xor i1 %268, true
  %270 = zext i1 %269 to i32
  %271 = sext i32 %270 to i64
  %272 = call i64 @llvm.expect.i64(i64 %271, i64 0)
  %273 = icmp ne i64 %272, 0
  br i1 %273, label %274, label %278

274:                                              ; preds = %264
  %275 = load i32, ptr %10, align 4, !tbaa !9
  %276 = load i64, ptr %15, align 8, !tbaa !11
  %277 = load i64, ptr %16, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 480, ptr noundef @.str.24, i32 noundef %275, i64 noundef %276, i64 noundef %277)
  br label %278

278:                                              ; preds = %274, %264
  br label %279

279:                                              ; preds = %278
  br label %280

280:                                              ; preds = %279
  store i32 -1, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

281:                                              ; preds = %253, %246
  %282 = load ptr, ptr %8, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.meta, ptr %282, i32 0, i32 6
  %284 = getelementptr inbounds %struct.anon.22, ptr %283, i32 0, i32 0
  %285 = getelementptr inbounds %struct.tree, ptr %284, i32 0, i32 0
  %286 = load i16, ptr %285, align 4, !tbaa !18
  %287 = zext i16 %286 to i32
  %288 = icmp ne i32 %287, 8
  %289 = xor i1 %288, true
  %290 = xor i1 %289, true
  %291 = zext i1 %290 to i32
  %292 = sext i32 %291 to i64
  %293 = call i64 @llvm.expect.i64(i64 %292, i64 0)
  %294 = icmp ne i64 %293, 0
  br i1 %294, label %295, label %329

295:                                              ; preds = %281
  %296 = load ptr, ptr %8, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.meta, ptr %296, i32 0, i32 6
  %298 = getelementptr inbounds %struct.anon.22, ptr %297, i32 0, i32 0
  %299 = getelementptr inbounds %struct.tree, ptr %298, i32 0, i32 0
  %300 = load i16, ptr %299, align 4, !tbaa !18
  %301 = zext i16 %300 to i32
  %302 = and i32 %301, 126
  %303 = icmp ne i32 %302, 8
  br i1 %303, label %307, label %304

304:                                              ; preds = %295
  %305 = load i64, ptr %12, align 8, !tbaa !11
  %306 = icmp eq i64 %305, 6441728281112482051
  br i1 %306, label %307, label %329

307:                                              ; preds = %304, %295
  br label %308

308:                                              ; preds = %307
  %309 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %310 = zext i8 %309 to i32
  %311 = icmp sle i32 2, %310
  %312 = xor i1 %311, true
  %313 = xor i1 %312, true
  %314 = zext i1 %313 to i32
  %315 = sext i32 %314 to i64
  %316 = call i64 @llvm.expect.i64(i64 %315, i64 0)
  %317 = icmp ne i64 %316, 0
  br i1 %317, label %318, label %326

318:                                              ; preds = %308
  %319 = load i32, ptr %10, align 4, !tbaa !9
  %320 = load ptr, ptr %8, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.meta, ptr %320, i32 0, i32 6
  %322 = getelementptr inbounds %struct.anon.22, ptr %321, i32 0, i32 0
  %323 = getelementptr inbounds %struct.tree, ptr %322, i32 0, i32 0
  %324 = load i16, ptr %323, align 4, !tbaa !18
  %325 = zext i16 %324 to i32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 486, ptr noundef @.str.25, i32 noundef %319, ptr noundef @.str.26, i32 noundef %325)
  br label %326

326:                                              ; preds = %318, %308
  br label %327

327:                                              ; preds = %326
  br label %328

328:                                              ; preds = %327
  store i32 -30784, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

329:                                              ; preds = %304, %281
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.meta, ptr %330, i32 0, i32 6
  %332 = getelementptr inbounds %struct.anon.22, ptr %331, i32 0, i32 1
  %333 = getelementptr inbounds %struct.tree, ptr %332, i32 0, i32 0
  %334 = load i16, ptr %333, align 4, !tbaa !18
  %335 = zext i16 %334 to i32
  %336 = call zeroext i1 @check_table_flags(i32 noundef %335)
  %337 = xor i1 %336, true
  %338 = xor i1 %337, true
  %339 = xor i1 %338, true
  %340 = zext i1 %339 to i32
  %341 = sext i32 %340 to i64
  %342 = call i64 @llvm.expect.i64(i64 %341, i64 0)
  %343 = icmp ne i64 %342, 0
  br i1 %343, label %344, label %366

344:                                              ; preds = %329
  br label %345

345:                                              ; preds = %344
  %346 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %347 = zext i8 %346 to i32
  %348 = icmp sle i32 2, %347
  %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 0)
  %354 = icmp ne i64 %353, 0
  br i1 %354, label %355, label %363

355:                                              ; preds = %345
  %356 = load i32, ptr %10, align 4, !tbaa !9
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.meta, ptr %357, i32 0, i32 6
  %359 = getelementptr inbounds %struct.anon.22, ptr %358, i32 0, i32 1
  %360 = getelementptr inbounds %struct.tree, ptr %359, i32 0, i32 0
  %361 = load i16, ptr %360, align 4, !tbaa !18
  %362 = zext i16 %361 to i32
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 491, ptr noundef @.str.25, i32 noundef %356, ptr noundef @.str.27, i32 noundef %362)
  br label %363

363:                                              ; preds = %355, %345
  br label %364

364:                                              ; preds = %363
  br label %365

365:                                              ; preds = %364
  store i32 -30784, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

366:                                              ; preds = %329
  br label %367

367:                                              ; preds = %366
  %368 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %369 = zext i8 %368 to i32
  %370 = icmp sle i32 5, %369
  %371 = xor i1 %370, true
  %372 = xor i1 %371, true
  %373 = zext i1 %372 to i32
  %374 = sext i32 %373 to i64
  %375 = call i64 @llvm.expect.i64(i64 %374, i64 0)
  %376 = icmp ne i64 %375, 0
  br i1 %376, label %377, label %420

377:                                              ; preds = %367
  %378 = load ptr, ptr %9, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.page, ptr %378, i32 0, i32 4
  %380 = load i32, ptr %379, align 1, !tbaa !9
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.meta, ptr %381, i32 0, i32 6
  %383 = getelementptr inbounds %struct.anon.22, ptr %382, i32 0, i32 1
  %384 = getelementptr inbounds %struct.tree, ptr %383, i32 0, i32 3
  %385 = load i32, ptr %384, align 4, !tbaa !18
  %386 = load ptr, ptr %8, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.meta, ptr %386, i32 0, i32 6
  %388 = getelementptr inbounds %struct.anon.22, ptr %387, i32 0, i32 0
  %389 = getelementptr inbounds %struct.tree, ptr %388, i32 0, i32 3
  %390 = load i32, ptr %389, align 4, !tbaa !18
  %391 = load ptr, ptr %8, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.meta, ptr %391, i32 0, i32 5
  %393 = getelementptr inbounds %struct.geo, ptr %392, i32 0, i32 2
  %394 = load i32, ptr %393, align 4, !tbaa !19
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.meta, ptr %395, i32 0, i32 5
  %397 = getelementptr inbounds %struct.geo, ptr %396, i32 0, i32 5
  %398 = load i32, ptr %397, align 4, !tbaa !18
  %399 = load ptr, ptr %8, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.meta, ptr %399, i32 0, i32 5
  %401 = getelementptr inbounds %struct.geo, ptr %400, i32 0, i32 4
  %402 = load i32, ptr %401, align 4, !tbaa !18
  %403 = load ptr, ptr %8, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.meta, ptr %403, i32 0, i32 5
  %405 = getelementptr inbounds %struct.geo, ptr %404, i32 0, i32 3
  %406 = load i32, ptr %405, align 4, !tbaa !23
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.meta, ptr %407, i32 0, i32 5
  %409 = getelementptr inbounds %struct.geo, ptr %408, i32 0, i32 0
  %410 = load i16, ptr %409, align 4, !tbaa !24
  %411 = call i32 @pv2pages(i16 noundef zeroext %410) #12
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.meta, ptr %412, i32 0, i32 5
  %414 = getelementptr inbounds %struct.geo, ptr %413, i32 0, i32 1
  %415 = load i16, ptr %414, align 2, !tbaa !25
  %416 = call i32 @pv2pages(i16 noundef zeroext %415) #12
  %417 = load i64, ptr %14, align 8, !tbaa !11
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  %419 = call ptr @durable_caption(ptr noundef %418)
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef @__func__.meta_validate, i32 noundef 499, ptr noundef @.str.28, i32 noundef %380, i32 noundef %385, i32 noundef %390, i32 noundef %394, i32 noundef %398, i32 noundef %402, i32 noundef %406, i32 noundef %411, i32 noundef %416, i64 noundef %417, ptr noundef %419)
  br label %420

420:                                              ; preds = %377, %367
  br label %421

421:                                              ; preds = %420
  br label %422

422:                                              ; preds = %421
  %423 = load i64, ptr %14, align 8, !tbaa !11
  %424 = icmp ult i64 %423, 1
  br i1 %424, label %428, label %425

425:                                              ; preds = %422
  %426 = load i64, ptr %14, align 8, !tbaa !11
  %427 = icmp ugt i64 %426, -4294967297
  br label %428

428:                                              ; preds = %425, %422
  %429 = phi i1 [ true, %422 ], [ %427, %425 ]
  %430 = xor i1 %429, true
  %431 = xor i1 %430, true
  %432 = zext i1 %431 to i32
  %433 = sext i32 %432 to i64
  %434 = call i64 @llvm.expect.i64(i64 %433, i64 0)
  %435 = icmp ne i64 %434, 0
  br i1 %435, label %436, label %453

436:                                              ; preds = %428
  br label %437

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

447:                                              ; preds = %437
  %448 = load i32, ptr %10, align 4, !tbaa !9
  %449 = load i64, ptr %14, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 502, ptr noundef @.str.29, i32 noundef %448, i64 noundef %449)
  br label %450

450:                                              ; preds = %447, %437
  br label %451

451:                                              ; preds = %450
  br label %452

452:                                              ; preds = %451
  store i32 -1, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

453:                                              ; preds = %428
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.meta, ptr %454, i32 0, i32 5
  %456 = getelementptr inbounds %struct.geo, ptr %455, i32 0, i32 2
  %457 = load i32, ptr %456, align 4, !tbaa !19
  %458 = icmp ult i32 %457, 3
  br i1 %458, label %465, label %459

459:                                              ; preds = %453
  %460 = load ptr, ptr %8, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.meta, ptr %460, i32 0, i32 5
  %462 = getelementptr inbounds %struct.geo, ptr %461, i32 0, i32 2
  %463 = load i32, ptr %462, align 4, !tbaa !19
  %464 = icmp ugt i32 %463, -2147483648
  br label %465

465:                                              ; preds = %459, %453
  %466 = phi i1 [ true, %453 ], [ %464, %459 ]
  %467 = xor i1 %466, true
  %468 = xor i1 %467, true
  %469 = zext i1 %468 to i32
  %470 = sext i32 %469 to i64
  %471 = call i64 @llvm.expect.i64(i64 %470, i64 0)
  %472 = icmp ne i64 %471, 0
  br i1 %472, label %473, label %493

473:                                              ; preds = %465
  br label %474

474:                                              ; preds = %473
  %475 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %476 = zext i8 %475 to i32
  %477 = icmp sle i32 2, %476
  %478 = xor i1 %477, true
  %479 = xor i1 %478, true
  %480 = zext i1 %479 to i32
  %481 = sext i32 %480 to i64
  %482 = call i64 @llvm.expect.i64(i64 %481, i64 0)
  %483 = icmp ne i64 %482, 0
  br i1 %483, label %484, label %490

484:                                              ; preds = %474
  %485 = load i32, ptr %10, align 4, !tbaa !9
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.meta, ptr %486, i32 0, i32 5
  %488 = getelementptr inbounds %struct.geo, ptr %487, i32 0, i32 2
  %489 = load i32, ptr %488, align 4, !tbaa !19
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 507, ptr noundef @.str.30, i32 noundef %485, i32 noundef %489)
  br label %490

490:                                              ; preds = %484, %474
  br label %491

491:                                              ; preds = %490
  br label %492

492:                                              ; preds = %491
  store i32 -30793, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

493:                                              ; preds = %465
  %494 = load ptr, ptr %8, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.meta, ptr %494, i32 0, i32 5
  %496 = getelementptr inbounds %struct.geo, ptr %495, i32 0, i32 3
  %497 = load i32, ptr %496, align 4, !tbaa !23
  %498 = icmp ult i32 %497, 3
  br i1 %498, label %515, label %499

499:                                              ; preds = %493
  %500 = load ptr, ptr %8, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.meta, ptr %500, i32 0, i32 5
  %502 = getelementptr inbounds %struct.geo, ptr %501, i32 0, i32 3
  %503 = load i32, ptr %502, align 4, !tbaa !23
  %504 = icmp ugt i32 %503, -2147483648
  br i1 %504, label %515, label %505

505:                                              ; preds = %499
  %506 = load ptr, ptr %8, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.meta, ptr %506, i32 0, i32 5
  %508 = getelementptr inbounds %struct.geo, ptr %507, i32 0, i32 3
  %509 = load i32, ptr %508, align 4, !tbaa !23
  %510 = load ptr, ptr %8, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.meta, ptr %510, i32 0, i32 5
  %512 = getelementptr inbounds %struct.geo, ptr %511, i32 0, i32 2
  %513 = load i32, ptr %512, align 4, !tbaa !19
  %514 = icmp ult i32 %509, %513
  br label %515

515:                                              ; preds = %505, %499, %493
  %516 = phi i1 [ true, %499 ], [ true, %493 ], [ %514, %505 ]
  %517 = xor i1 %516, true
  %518 = xor i1 %517, true
  %519 = zext i1 %518 to i32
  %520 = sext i32 %519 to i64
  %521 = call i64 @llvm.expect.i64(i64 %520, i64 0)
  %522 = icmp ne i64 %521, 0
  br i1 %522, label %523, label %543

523:                                              ; preds = %515
  br label %524

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

534:                                              ; preds = %524
  %535 = load i32, ptr %10, align 4, !tbaa !9
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.meta, ptr %536, i32 0, i32 5
  %538 = getelementptr inbounds %struct.geo, ptr %537, i32 0, i32 3
  %539 = load i32, ptr %538, align 4, !tbaa !23
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 513, ptr noundef @.str.31, i32 noundef %535, i32 noundef %539)
  br label %540

540:                                              ; preds = %534, %524
  br label %541

541:                                              ; preds = %540
  br label %542

542:                                              ; preds = %541
  store i32 -30793, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

543:                                              ; preds = %515
  %544 = load ptr, ptr %8, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.meta, ptr %544, i32 0, i32 5
  %546 = getelementptr inbounds %struct.geo, ptr %545, i32 0, i32 5
  %547 = load i32, ptr %546, align 4, !tbaa !18
  %548 = icmp ult i32 %547, 3
  br i1 %548, label %556, label %549

549:                                              ; preds = %543
  %550 = load ptr, ptr %8, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.meta, ptr %550, i32 0, i32 5
  %552 = getelementptr inbounds %struct.geo, ptr %551, i32 0, i32 5
  %553 = load i32, ptr %552, align 4, !tbaa !18
  %554 = sub i32 %553, 1
  %555 = icmp ugt i32 %554, 2147483647
  br label %556

556:                                              ; preds = %549, %543
  %557 = phi i1 [ true, %543 ], [ %555, %549 ]
  %558 = xor i1 %557, true
  %559 = xor i1 %558, true
  %560 = zext i1 %559 to i32
  %561 = sext i32 %560 to i64
  %562 = call i64 @llvm.expect.i64(i64 %561, i64 0)
  %563 = icmp ne i64 %562, 0
  br i1 %563, label %564, label %584

564:                                              ; preds = %556
  br label %565

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

575:                                              ; preds = %565
  %576 = load i32, ptr %10, align 4, !tbaa !9
  %577 = load ptr, ptr %8, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.meta, ptr %577, i32 0, i32 5
  %579 = getelementptr inbounds %struct.geo, ptr %578, i32 0, i32 5
  %580 = load i32, ptr %579, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 518, ptr noundef @.str.32, i32 noundef %576, i32 noundef %580)
  br label %581

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

582:                                              ; preds = %581
  br label %583

583:                                              ; preds = %582
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1276

584:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %585 = load ptr, ptr %8, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.meta, ptr %585, i32 0, i32 5
  %587 = getelementptr inbounds %struct.geo, ptr %586, i32 0, i32 5
  %588 = load i32, ptr %587, align 4, !tbaa !18
  %589 = zext i32 %588 to i64
  %590 = load ptr, ptr %8, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.meta, ptr %590, i32 0, i32 6
  %592 = getelementptr inbounds %struct.anon.23, ptr %591, i32 0, i32 2
  %593 = load i32, ptr %592, align 4, !tbaa !18
  %594 = zext i32 %593 to i64
  %595 = mul i64 %589, %594
  store i64 %595, ptr %17, align 8, !tbaa !11
  %596 = load i64, ptr %17, align 8, !tbaa !11
  %597 = load ptr, ptr %7, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.MDBX_env, ptr %597, i32 0, i32 3
  %599 = getelementptr inbounds %struct.osal_mmap, ptr %598, i32 0, i32 4
  %600 = load i64, ptr %599, align 8, !tbaa !26
  %601 = icmp ugt i64 %596, %600
  %602 = xor i1 %601, true
  %603 = xor i1 %602, true
  %604 = zext i1 %603 to i32
  %605 = sext i32 %604 to i64
  %606 = call i64 @llvm.expect.i64(i64 %605, i64 0)
  %607 = icmp ne i64 %606, 0
  br i1 %607, label %608, label %665

608:                                              ; preds = %584
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  %609 = load ptr, ptr %7, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.MDBX_env, ptr %609, i32 0, i32 3
  %611 = getelementptr inbounds %struct.osal_mmap, ptr %610, i32 0, i32 1
  %612 = load i32, ptr %611, align 8, !tbaa !35
  %613 = load ptr, ptr %7, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.MDBX_env, ptr %613, i32 0, i32 3
  %615 = getelementptr inbounds %struct.osal_mmap, ptr %614, i32 0, i32 4
  %616 = call i32 @osal_filesize(i32 noundef %612, ptr noundef %615)
  store i32 %616, ptr %18, align 4, !tbaa !9
  %617 = load i32, ptr %18, align 4, !tbaa !9
  %618 = icmp ne i32 %617, 0
  %619 = xor i1 %618, true
  %620 = xor i1 %619, true
  %621 = zext i1 %620 to i32
  %622 = sext i32 %621 to i64
  %623 = call i64 @llvm.expect.i64(i64 %622, i64 0)
  %624 = icmp ne i64 %623, 0
  br i1 %624, label %625, label %627

625:                                              ; preds = %608
  %626 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %626, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %662

627:                                              ; preds = %608
  %628 = load i64, ptr %17, align 8, !tbaa !11
  %629 = load ptr, ptr %7, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.MDBX_env, ptr %629, i32 0, i32 3
  %631 = getelementptr inbounds %struct.osal_mmap, ptr %630, i32 0, i32 4
  %632 = load i64, ptr %631, align 8, !tbaa !26
  %633 = icmp ugt i64 %628, %632
  %634 = xor i1 %633, true
  %635 = xor i1 %634, true
  %636 = zext i1 %635 to i32
  %637 = sext i32 %636 to i64
  %638 = call i64 @llvm.expect.i64(i64 %637, i64 0)
  %639 = icmp ne i64 %638, 0
  br i1 %639, label %640, label %661

640:                                              ; preds = %627
  br label %641

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

651:                                              ; preds = %641
  %652 = load i32, ptr %10, align 4, !tbaa !9
  %653 = load i64, ptr %17, align 8, !tbaa !11
  %654 = load ptr, ptr %7, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.MDBX_env, ptr %654, i32 0, i32 3
  %656 = getelementptr inbounds %struct.osal_mmap, ptr %655, i32 0, i32 4
  %657 = load i64, ptr %656, align 8, !tbaa !26
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 530, ptr noundef @.str.33, i32 noundef %652, i64 noundef %653, i64 noundef %657)
  br label %658

658:                                              ; preds = %651, %641
  br label %659

659:                                              ; preds = %658
  br label %660

660:                                              ; preds = %659
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %662

661:                                              ; preds = %627
  store i32 0, ptr %13, align 4
  br label %662

662:                                              ; preds = %661, %660, %625
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  %663 = load i32, ptr %13, align 4
  switch i32 %663, label %1275 [
    i32 0, label %664
  ]

664:                                              ; preds = %662
  br label %665

665:                                              ; preds = %664, %584
  %666 = load ptr, ptr %8, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.meta, ptr %666, i32 0, i32 5
  %668 = getelementptr inbounds %struct.geo, ptr %667, i32 0, i32 5
  %669 = load i32, ptr %668, align 4, !tbaa !18
  %670 = sub i32 %669, 1
  %671 = icmp ugt i32 %670, 2147483647
  br i1 %671, label %675, label %672

672:                                              ; preds = %665
  %673 = load i64, ptr %17, align 8, !tbaa !11
  %674 = icmp ugt i64 %673, 140737488355328
  br label %675

675:                                              ; preds = %672, %665
  %676 = phi i1 [ true, %665 ], [ %674, %672 ]
  %677 = xor i1 %676, true
  %678 = xor i1 %677, true
  %679 = zext i1 %678 to i32
  %680 = sext i32 %679 to i64
  %681 = call i64 @llvm.expect.i64(i64 %680, i64 0)
  %682 = icmp ne i64 %681, 0
  br i1 %682, label %683, label %700

683:                                              ; preds = %675
  br label %684

684:                                              ; preds = %683
  %685 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %686 = zext i8 %685 to i32
  %687 = icmp sle i32 2, %686
  %688 = xor i1 %687, true
  %689 = xor i1 %688, true
  %690 = zext i1 %689 to i32
  %691 = sext i32 %690 to i64
  %692 = call i64 @llvm.expect.i64(i64 %691, i64 0)
  %693 = icmp ne i64 %692, 0
  br i1 %693, label %694, label %697

694:                                              ; preds = %684
  %695 = load i32, ptr %10, align 4, !tbaa !9
  %696 = load i64, ptr %17, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 535, ptr noundef @.str.34, i32 noundef %695, i64 noundef %696)
  br label %697

697:                                              ; preds = %694, %684
  br label %698

698:                                              ; preds = %697
  br label %699

699:                                              ; preds = %698
  store i32 -30417, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1275

700:                                              ; preds = %675
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  %701 = load ptr, ptr %8, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.meta, ptr %701, i32 0, i32 5
  %703 = getelementptr inbounds %struct.geo, ptr %702, i32 0, i32 2
  %704 = load i32, ptr %703, align 4, !tbaa !19
  store i32 %704, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %705 = load i32, ptr %19, align 4, !tbaa !9
  %706 = zext i32 %705 to i64
  %707 = load ptr, ptr %8, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.meta, ptr %707, i32 0, i32 6
  %709 = getelementptr inbounds %struct.anon.23, ptr %708, i32 0, i32 2
  %710 = load i32, ptr %709, align 4, !tbaa !18
  %711 = zext i32 %710 to i64
  %712 = mul i64 %706, %711
  store i64 %712, ptr %20, align 8, !tbaa !11
  %713 = load i64, ptr %20, align 8, !tbaa !11
  %714 = icmp ult i64 %713, 768
  br i1 %714, label %718, label %715

715:                                              ; preds = %700
  %716 = load i64, ptr %20, align 8, !tbaa !11
  %717 = icmp ugt i64 %716, 140737488355328
  br label %718

718:                                              ; preds = %715, %700
  %719 = phi i1 [ true, %700 ], [ %717, %715 ]
  %720 = xor i1 %719, true
  %721 = xor i1 %720, true
  %722 = zext i1 %721 to i32
  %723 = sext i32 %722 to i64
  %724 = call i64 @llvm.expect.i64(i64 %723, i64 0)
  %725 = icmp ne i64 %724, 0
  br i1 %725, label %726, label %743

726:                                              ; preds = %718
  br label %727

727:                                              ; preds = %726
  %728 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %729 = zext i8 %728 to i32
  %730 = icmp sle i32 2, %729
  %731 = xor i1 %730, true
  %732 = xor i1 %731, true
  %733 = zext i1 %732 to i32
  %734 = sext i32 %733 to i64
  %735 = call i64 @llvm.expect.i64(i64 %734, i64 0)
  %736 = icmp ne i64 %735, 0
  br i1 %736, label %737, label %740

737:                                              ; preds = %727
  %738 = load i32, ptr %10, align 4, !tbaa !9
  %739 = load i64, ptr %20, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 560, ptr noundef @.str.35, i32 noundef %738, i64 noundef %739)
  br label %740

740:                                              ; preds = %737, %727
  br label %741

741:                                              ; preds = %740
  br label %742

742:                                              ; preds = %741
  store i32 -30794, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1274

743:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %744 = load ptr, ptr %8, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.meta, ptr %744, i32 0, i32 5
  %746 = getelementptr inbounds %struct.geo, ptr %745, i32 0, i32 3
  %747 = load i32, ptr %746, align 4, !tbaa !23
  store i32 %747, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %748 = load i32, ptr %21, align 4, !tbaa !9
  %749 = zext i32 %748 to i64
  %750 = load ptr, ptr %8, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.meta, ptr %750, i32 0, i32 6
  %752 = getelementptr inbounds %struct.anon.23, ptr %751, i32 0, i32 2
  %753 = load i32, ptr %752, align 4, !tbaa !18
  %754 = zext i32 %753 to i64
  %755 = mul i64 %749, %754
  store i64 %755, ptr %22, align 8, !tbaa !11
  %756 = load i64, ptr %22, align 8, !tbaa !11
  %757 = icmp ugt i64 %756, 140737488355328
  br i1 %757, label %770, label %758

758:                                              ; preds = %743
  %759 = load i64, ptr %22, align 8, !tbaa !11
  %760 = load i32, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 1), align 8, !tbaa !36
  %761 = zext i32 %760 to i64
  %762 = call i64 @ceil_powerof2(i64 noundef %759, i64 noundef %761) #12
  %763 = load ptr, ptr %8, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.meta, ptr %763, i32 0, i32 6
  %765 = getelementptr inbounds %struct.anon.23, ptr %764, i32 0, i32 2
  %766 = load i32, ptr %765, align 4, !tbaa !18
  %767 = zext i32 %766 to i64
  %768 = udiv i64 %762, %767
  %769 = icmp ult i64 2147483648, %768
  br label %770

770:                                              ; preds = %758, %743
  %771 = phi i1 [ true, %743 ], [ %769, %758 ]
  %772 = xor i1 %771, true
  %773 = xor i1 %772, true
  %774 = zext i1 %773 to i32
  %775 = sext i32 %774 to i64
  %776 = call i64 @llvm.expect.i64(i64 %775, i64 0)
  %777 = icmp ne i64 %776, 0
  br i1 %777, label %778, label %898

778:                                              ; preds = %770
  %779 = load i64, ptr %22, align 8, !tbaa !11
  %780 = icmp ugt i64 %779, 140737488355328
  br i1 %780, label %781, label %798

781:                                              ; preds = %778
  br label %782

782:                                              ; preds = %781
  %783 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %784 = zext i8 %783 to i32
  %785 = icmp sle i32 2, %784
  %786 = xor i1 %785, true
  %787 = xor i1 %786, true
  %788 = zext i1 %787 to i32
  %789 = sext i32 %788 to i64
  %790 = call i64 @llvm.expect.i64(i64 %789, i64 0)
  %791 = icmp ne i64 %790, 0
  br i1 %791, label %792, label %795

792:                                              ; preds = %782
  %793 = load i32, ptr %10, align 4, !tbaa !9
  %794 = load i64, ptr %22, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 571, ptr noundef @.str.36, i32 noundef %793, i64 noundef %794)
  br label %795

795:                                              ; preds = %792, %782
  br label %796

796:                                              ; preds = %795
  br label %797

797:                                              ; preds = %796
  store i32 -30794, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1273

798:                                              ; preds = %778
  br label %799

799:                                              ; preds = %798
  %800 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 4), align 1, !tbaa !37
  %801 = zext i8 %800 to i32
  %802 = and i32 %801, 1
  %803 = icmp ne i32 %802, 0
  %804 = xor i1 %803, true
  %805 = xor i1 %804, true
  %806 = zext i1 %805 to i32
  %807 = sext i32 %806 to i64
  %808 = call i64 @llvm.expect.i64(i64 %807, i64 1)
  %809 = icmp ne i64 %808, 0
  br i1 %809, label %810, label %835

810:                                              ; preds = %799
  br label %811

811:                                              ; preds = %810
  %812 = load ptr, ptr %8, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.meta, ptr %812, i32 0, i32 5
  %814 = getelementptr inbounds %struct.geo, ptr %813, i32 0, i32 5
  %815 = load i32, ptr %814, align 4, !tbaa !18
  %816 = sub i32 %815, 1
  %817 = icmp ule i32 %816, 2147483647
  br i1 %817, label %818, label %821

818:                                              ; preds = %811
  %819 = load i64, ptr %17, align 8, !tbaa !11
  %820 = icmp ule i64 %819, 140737488355328
  br label %821

821:                                              ; preds = %818, %811
  %822 = phi i1 [ false, %811 ], [ %820, %818 ]
  %823 = xor i1 %822, true
  %824 = xor i1 %823, true
  %825 = xor i1 %824, true
  %826 = zext i1 %825 to i32
  %827 = sext i32 %826 to i64
  %828 = call i64 @llvm.expect.i64(i64 %827, i64 0)
  %829 = icmp ne i64 %828, 0
  br i1 %829, label %830, label %832

830:                                              ; preds = %821
  %831 = load ptr, ptr %7, align 8, !tbaa !5
  call void @mdbx_assert_fail(ptr noundef %831, ptr noundef @.str.37, ptr noundef @__func__.meta_validate, i32 noundef 575) #13
  unreachable

832:                                              ; preds = %821
  br label %833

833:                                              ; preds = %832
  br label %834

834:                                              ; preds = %833
  br label %835

835:                                              ; preds = %834, %799
  br label %836

836:                                              ; preds = %835
  br label %837

837:                                              ; preds = %836
  br label %838

838:                                              ; preds = %837
  %839 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %840 = zext i8 %839 to i32
  %841 = icmp sle i32 2, %840
  %842 = xor i1 %841, true
  %843 = xor i1 %842, true
  %844 = zext i1 %843 to i32
  %845 = sext i32 %844 to i64
  %846 = call i64 @llvm.expect.i64(i64 %845, i64 0)
  %847 = icmp ne i64 %846, 0
  br i1 %847, label %848, label %852

848:                                              ; preds = %838
  %849 = load i32, ptr %10, align 4, !tbaa !9
  %850 = load i64, ptr %22, align 8, !tbaa !11
  %851 = load i64, ptr %17, align 8, !tbaa !11
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 578, ptr noundef @.str.38, i32 noundef %849, i64 noundef %850, i64 noundef %851)
  br label %852

852:                                              ; preds = %848, %838
  br label %853

853:                                              ; preds = %852
  br label %854

854:                                              ; preds = %853
  store i64 140737488355328, ptr %22, align 8, !tbaa !11
  %855 = load ptr, ptr %8, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.meta, ptr %855, i32 0, i32 6
  %857 = getelementptr inbounds %struct.anon.23, ptr %856, i32 0, i32 2
  %858 = load i32, ptr %857, align 4, !tbaa !18
  %859 = zext i32 %858 to i64
  %860 = udiv i64 140737488355328, %859
  %861 = trunc i64 %860 to i32
  store i32 %861, ptr %21, align 4, !tbaa !9
  %862 = load i32, ptr %21, align 4, !tbaa !9
  %863 = icmp ugt i32 %862, -2147483648
  br i1 %863, label %864, label %873

864:                                              ; preds = %854
  store i32 -2147483648, ptr %21, align 4, !tbaa !9
  %865 = load i32, ptr %21, align 4, !tbaa !9
  %866 = zext i32 %865 to i64
  %867 = load ptr, ptr %8, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.meta, ptr %867, i32 0, i32 6
  %869 = getelementptr inbounds %struct.anon.23, ptr %868, i32 0, i32 2
  %870 = load i32, ptr %869, align 4, !tbaa !18
  %871 = zext i32 %870 to i64
  %872 = mul i64 %866, %871
  store i64 %872, ptr %22, align 8, !tbaa !11
  br label %873

873:                                              ; preds = %864, %854
  br label %874

874:                                              ; preds = %873
  %875 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %876 = zext i8 %875 to i32
  %877 = icmp sle i32 2, %876
  %878 = xor i1 %877, true
  %879 = xor i1 %878, true
  %880 = zext i1 %879 to i32
  %881 = sext i32 %880 to i64
  %882 = call i64 @llvm.expect.i64(i64 %881, i64 0)
  %883 = icmp ne i64 %882, 0
  br i1 %883, label %884, label %891

884:                                              ; preds = %874
  %885 = load i32, ptr %10, align 4, !tbaa !9
  %886 = load i32, ptr %21, align 4, !tbaa !9
  %887 = load ptr, ptr %8, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.meta, ptr %887, i32 0, i32 5
  %889 = getelementptr inbounds %struct.geo, ptr %888, i32 0, i32 3
  %890 = load i32, ptr %889, align 4, !tbaa !23
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 586, ptr noundef @.str.39, i32 noundef %885, ptr noundef @.str.40, i32 noundef %886, i32 noundef %890)
  br label %891

891:                                              ; preds = %884, %874
  br label %892

892:                                              ; preds = %891
  br label %893

893:                                              ; preds = %892
  %894 = load i32, ptr %21, align 4, !tbaa !9
  %895 = load ptr, ptr %8, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.meta, ptr %895, i32 0, i32 5
  %897 = getelementptr inbounds %struct.geo, ptr %896, i32 0, i32 3
  store i32 %894, ptr %897, align 4, !tbaa !23
  br label %898

898:                                              ; preds = %893, %770
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  %899 = load ptr, ptr %8, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.meta, ptr %899, i32 0, i32 5
  %901 = getelementptr inbounds %struct.geo, ptr %900, i32 0, i32 4
  %902 = load i32, ptr %901, align 4, !tbaa !18
  store i32 %902, ptr %23, align 4, !tbaa !9
  %903 = load i32, ptr %23, align 4, !tbaa !9
  %904 = load i32, ptr %19, align 4, !tbaa !9
  %905 = icmp ult i32 %903, %904
  br i1 %905, label %906, label %908

906:                                              ; preds = %898
  %907 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %907, ptr %23, align 4, !tbaa !9
  br label %908

908:                                              ; preds = %906, %898
  %909 = load i32, ptr %23, align 4, !tbaa !9
  %910 = load i32, ptr %21, align 4, !tbaa !9
  %911 = icmp ugt i32 %909, %910
  br i1 %911, label %912, label %921

912:                                              ; preds = %908
  %913 = load ptr, ptr %8, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.meta, ptr %913, i32 0, i32 5
  %915 = getelementptr inbounds %struct.geo, ptr %914, i32 0, i32 5
  %916 = load i32, ptr %915, align 4, !tbaa !18
  %917 = load i32, ptr %21, align 4, !tbaa !9
  %918 = icmp ule i32 %916, %917
  br i1 %918, label %919, label %921

919:                                              ; preds = %912
  %920 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %920, ptr %23, align 4, !tbaa !9
  br label %921

921:                                              ; preds = %919, %912, %908
  %922 = load ptr, ptr %8, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.meta, ptr %922, i32 0, i32 5
  %924 = getelementptr inbounds %struct.geo, ptr %923, i32 0, i32 5
  %925 = load i32, ptr %924, align 4, !tbaa !18
  %926 = load i32, ptr %23, align 4, !tbaa !9
  %927 = icmp ugt i32 %925, %926
  %928 = xor i1 %927, true
  %929 = xor i1 %928, true
  %930 = zext i1 %929 to i32
  %931 = sext i32 %930 to i64
  %932 = call i64 @llvm.expect.i64(i64 %931, i64 0)
  %933 = icmp ne i64 %932, 0
  br i1 %933, label %934, label %955

934:                                              ; preds = %921
  br label %935

935:                                              ; preds = %934
  %936 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %937 = zext i8 %936 to i32
  %938 = icmp sle i32 2, %937
  %939 = xor i1 %938, true
  %940 = xor i1 %939, true
  %941 = zext i1 %940 to i32
  %942 = sext i32 %941 to i64
  %943 = call i64 @llvm.expect.i64(i64 %942, i64 0)
  %944 = icmp ne i64 %943, 0
  br i1 %944, label %945, label %952

945:                                              ; preds = %935
  %946 = load i32, ptr %10, align 4, !tbaa !9
  %947 = load ptr, ptr %8, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.meta, ptr %947, i32 0, i32 5
  %949 = getelementptr inbounds %struct.geo, ptr %948, i32 0, i32 5
  %950 = load i32, ptr %949, align 4, !tbaa !18
  %951 = load i32, ptr %23, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 605, ptr noundef @.str.41, i32 noundef %946, i32 noundef %950, i32 noundef %951)
  br label %952

952:                                              ; preds = %945, %935
  br label %953

953:                                              ; preds = %952
  br label %954

954:                                              ; preds = %953
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

955:                                              ; preds = %921
  %956 = load ptr, ptr %8, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.meta, ptr %956, i32 0, i32 5
  %958 = getelementptr inbounds %struct.geo, ptr %957, i32 0, i32 4
  %959 = load i32, ptr %958, align 4, !tbaa !18
  %960 = load i32, ptr %23, align 4, !tbaa !9
  %961 = icmp ne i32 %959, %960
  br i1 %961, label %962, label %987

962:                                              ; preds = %955
  br label %963

963:                                              ; preds = %962
  %964 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %965 = zext i8 %964 to i32
  %966 = icmp sle i32 2, %965
  %967 = xor i1 %966, true
  %968 = xor i1 %967, true
  %969 = zext i1 %968 to i32
  %970 = sext i32 %969 to i64
  %971 = call i64 @llvm.expect.i64(i64 %970, i64 0)
  %972 = icmp ne i64 %971, 0
  br i1 %972, label %973, label %980

973:                                              ; preds = %963
  %974 = load i32, ptr %10, align 4, !tbaa !9
  %975 = load i32, ptr %23, align 4, !tbaa !9
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.meta, ptr %976, i32 0, i32 5
  %978 = getelementptr inbounds %struct.geo, ptr %977, i32 0, i32 4
  %979 = load i32, ptr %978, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 611, ptr noundef @.str.42, i32 noundef %974, ptr noundef @.str.43, i32 noundef %975, i32 noundef %979)
  br label %980

980:                                              ; preds = %973, %963
  br label %981

981:                                              ; preds = %980
  br label %982

982:                                              ; preds = %981
  %983 = load i32, ptr %23, align 4, !tbaa !9
  %984 = load ptr, ptr %8, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct.meta, ptr %984, i32 0, i32 5
  %986 = getelementptr inbounds %struct.geo, ptr %985, i32 0, i32 4
  store i32 %983, ptr %986, align 4, !tbaa !18
  br label %987

987:                                              ; preds = %982, %955
  %988 = load ptr, ptr %8, align 8, !tbaa !5
  %989 = getelementptr inbounds %struct.meta, ptr %988, i32 0, i32 6
  %990 = getelementptr inbounds %struct.anon.22, ptr %989, i32 0, i32 0
  %991 = getelementptr inbounds %struct.tree, ptr %990, i32 0, i32 3
  %992 = load i32, ptr %991, align 4, !tbaa !18
  %993 = icmp eq i32 %992, -1
  br i1 %993, label %994, label %1055

994:                                              ; preds = %987
  %995 = load ptr, ptr %8, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.meta, ptr %995, i32 0, i32 6
  %997 = getelementptr inbounds %struct.anon.22, ptr %996, i32 0, i32 0
  %998 = getelementptr inbounds %struct.tree, ptr %997, i32 0, i32 4
  %999 = load i32, ptr %998, align 4, !tbaa !18
  %1000 = icmp ne i32 %999, 0
  br i1 %1000, label %1030, label %1001

1001:                                             ; preds = %994
  %1002 = load ptr, ptr %8, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.meta, ptr %1002, i32 0, i32 6
  %1004 = getelementptr inbounds %struct.anon.22, ptr %1003, i32 0, i32 0
  %1005 = getelementptr inbounds %struct.tree, ptr %1004, i32 0, i32 1
  %1006 = load i16, ptr %1005, align 2, !tbaa !18
  %1007 = zext i16 %1006 to i32
  %1008 = icmp ne i32 %1007, 0
  br i1 %1008, label %1030, label %1009

1009:                                             ; preds = %1001
  %1010 = load ptr, ptr %8, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.meta, ptr %1010, i32 0, i32 6
  %1012 = getelementptr inbounds %struct.anon.22, ptr %1011, i32 0, i32 0
  %1013 = getelementptr inbounds %struct.tree, ptr %1012, i32 0, i32 8
  %1014 = load i64, ptr %1013, align 4, !tbaa !18
  %1015 = icmp ne i64 %1014, 0
  br i1 %1015, label %1030, label %1016

1016:                                             ; preds = %1009
  %1017 = load ptr, ptr %8, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.meta, ptr %1017, i32 0, i32 6
  %1019 = getelementptr inbounds %struct.anon.22, ptr %1018, i32 0, i32 0
  %1020 = getelementptr inbounds %struct.tree, ptr %1019, i32 0, i32 5
  %1021 = load i32, ptr %1020, align 4, !tbaa !18
  %1022 = icmp ne i32 %1021, 0
  br i1 %1022, label %1030, label %1023

1023:                                             ; preds = %1016
  %1024 = load ptr, ptr %8, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.meta, ptr %1024, i32 0, i32 6
  %1026 = getelementptr inbounds %struct.anon.22, ptr %1025, i32 0, i32 0
  %1027 = getelementptr inbounds %struct.tree, ptr %1026, i32 0, i32 6
  %1028 = load i32, ptr %1027, align 4, !tbaa !18
  %1029 = icmp ne i32 %1028, 0
  br label %1030

1030:                                             ; preds = %1023, %1016, %1009, %1001, %994
  %1031 = phi i1 [ true, %1016 ], [ true, %1009 ], [ true, %1001 ], [ true, %994 ], [ %1029, %1023 ]
  %1032 = xor i1 %1031, true
  %1033 = xor i1 %1032, true
  %1034 = zext i1 %1033 to i32
  %1035 = sext i32 %1034 to i64
  %1036 = call i64 @llvm.expect.i64(i64 %1035, i64 0)
  %1037 = icmp ne i64 %1036, 0
  br i1 %1037, label %1038, label %1054

1038:                                             ; preds = %1030
  br label %1039

1039:                                             ; preds = %1038
  %1040 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %1041 = zext i8 %1040 to i32
  %1042 = icmp sle i32 2, %1041
  %1043 = xor i1 %1042, true
  %1044 = xor i1 %1043, true
  %1045 = zext i1 %1044 to i32
  %1046 = sext i32 %1045 to i64
  %1047 = call i64 @llvm.expect.i64(i64 %1046, i64 0)
  %1048 = icmp ne i64 %1047, 0
  br i1 %1048, label %1049, label %1051

1049:                                             ; preds = %1039
  %1050 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 619, ptr noundef @.str.44, i32 noundef %1050, ptr noundef @.str.45)
  br label %1051

1051:                                             ; preds = %1049, %1039
  br label %1052

1052:                                             ; preds = %1051
  br label %1053

1053:                                             ; preds = %1052
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1054:                                             ; preds = %1030
  br label %1094

1055:                                             ; preds = %987
  %1056 = load ptr, ptr %8, align 8, !tbaa !5
  %1057 = getelementptr inbounds %struct.meta, ptr %1056, i32 0, i32 6
  %1058 = getelementptr inbounds %struct.anon.22, ptr %1057, i32 0, i32 0
  %1059 = getelementptr inbounds %struct.tree, ptr %1058, i32 0, i32 3
  %1060 = load i32, ptr %1059, align 4, !tbaa !18
  %1061 = load ptr, ptr %8, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.meta, ptr %1061, i32 0, i32 5
  %1063 = getelementptr inbounds %struct.geo, ptr %1062, i32 0, i32 5
  %1064 = load i32, ptr %1063, align 4, !tbaa !18
  %1065 = icmp uge i32 %1060, %1064
  %1066 = xor i1 %1065, true
  %1067 = xor i1 %1066, true
  %1068 = zext i1 %1067 to i32
  %1069 = sext i32 %1068 to i64
  %1070 = call i64 @llvm.expect.i64(i64 %1069, i64 0)
  %1071 = icmp ne i64 %1070, 0
  br i1 %1071, label %1072, label %1093

1072:                                             ; preds = %1055
  br label %1073

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

1083:                                             ; preds = %1073
  %1084 = load i32, ptr %10, align 4, !tbaa !9
  %1085 = load ptr, ptr %8, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.meta, ptr %1085, i32 0, i32 6
  %1087 = getelementptr inbounds %struct.anon.22, ptr %1086, i32 0, i32 0
  %1088 = getelementptr inbounds %struct.tree, ptr %1087, i32 0, i32 3
  %1089 = load i32, ptr %1088, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 623, ptr noundef @.str.46, i32 noundef %1084, ptr noundef @.str.45, i32 noundef %1089)
  br label %1090

1090:                                             ; preds = %1083, %1073
  br label %1091

1091:                                             ; preds = %1090
  br label %1092

1092:                                             ; preds = %1091
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1093:                                             ; preds = %1055
  br label %1094

1094:                                             ; preds = %1093, %1054
  %1095 = load ptr, ptr %8, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.meta, ptr %1095, i32 0, i32 6
  %1097 = getelementptr inbounds %struct.anon.22, ptr %1096, i32 0, i32 1
  %1098 = getelementptr inbounds %struct.tree, ptr %1097, i32 0, i32 3
  %1099 = load i32, ptr %1098, align 4, !tbaa !18
  %1100 = icmp eq i32 %1099, -1
  br i1 %1100, label %1101, label %1162

1101:                                             ; preds = %1094
  %1102 = load ptr, ptr %8, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.meta, ptr %1102, i32 0, i32 6
  %1104 = getelementptr inbounds %struct.anon.22, ptr %1103, i32 0, i32 1
  %1105 = getelementptr inbounds %struct.tree, ptr %1104, i32 0, i32 4
  %1106 = load i32, ptr %1105, align 4, !tbaa !18
  %1107 = icmp ne i32 %1106, 0
  br i1 %1107, label %1137, label %1108

1108:                                             ; preds = %1101
  %1109 = load ptr, ptr %8, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct.meta, ptr %1109, i32 0, i32 6
  %1111 = getelementptr inbounds %struct.anon.22, ptr %1110, i32 0, i32 1
  %1112 = getelementptr inbounds %struct.tree, ptr %1111, i32 0, i32 1
  %1113 = load i16, ptr %1112, align 2, !tbaa !18
  %1114 = zext i16 %1113 to i32
  %1115 = icmp ne i32 %1114, 0
  br i1 %1115, label %1137, label %1116

1116:                                             ; preds = %1108
  %1117 = load ptr, ptr %8, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.meta, ptr %1117, i32 0, i32 6
  %1119 = getelementptr inbounds %struct.anon.22, ptr %1118, i32 0, i32 1
  %1120 = getelementptr inbounds %struct.tree, ptr %1119, i32 0, i32 8
  %1121 = load i64, ptr %1120, align 4, !tbaa !18
  %1122 = icmp ne i64 %1121, 0
  br i1 %1122, label %1137, label %1123

1123:                                             ; preds = %1116
  %1124 = load ptr, ptr %8, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.meta, ptr %1124, i32 0, i32 6
  %1126 = getelementptr inbounds %struct.anon.22, ptr %1125, i32 0, i32 1
  %1127 = getelementptr inbounds %struct.tree, ptr %1126, i32 0, i32 5
  %1128 = load i32, ptr %1127, align 4, !tbaa !18
  %1129 = icmp ne i32 %1128, 0
  br i1 %1129, label %1137, label %1130

1130:                                             ; preds = %1123
  %1131 = load ptr, ptr %8, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.meta, ptr %1131, i32 0, i32 6
  %1133 = getelementptr inbounds %struct.anon.22, ptr %1132, i32 0, i32 1
  %1134 = getelementptr inbounds %struct.tree, ptr %1133, i32 0, i32 6
  %1135 = load i32, ptr %1134, align 4, !tbaa !18
  %1136 = icmp ne i32 %1135, 0
  br label %1137

1137:                                             ; preds = %1130, %1123, %1116, %1108, %1101
  %1138 = phi i1 [ true, %1123 ], [ true, %1116 ], [ true, %1108 ], [ true, %1101 ], [ %1136, %1130 ]
  %1139 = xor i1 %1138, true
  %1140 = xor i1 %1139, true
  %1141 = zext i1 %1140 to i32
  %1142 = sext i32 %1141 to i64
  %1143 = call i64 @llvm.expect.i64(i64 %1142, i64 0)
  %1144 = icmp ne i64 %1143, 0
  br i1 %1144, label %1145, label %1161

1145:                                             ; preds = %1137
  br label %1146

1146:                                             ; preds = %1145
  %1147 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %1148 = zext i8 %1147 to i32
  %1149 = icmp sle i32 2, %1148
  %1150 = xor i1 %1149, true
  %1151 = xor i1 %1150, true
  %1152 = zext i1 %1151 to i32
  %1153 = sext i32 %1152 to i64
  %1154 = call i64 @llvm.expect.i64(i64 %1153, i64 0)
  %1155 = icmp ne i64 %1154, 0
  br i1 %1155, label %1156, label %1158

1156:                                             ; preds = %1146
  %1157 = load i32, ptr %10, align 4, !tbaa !9
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 631, ptr noundef @.str.47, i32 noundef %1157, ptr noundef @.str.27)
  br label %1158

1158:                                             ; preds = %1156, %1146
  br label %1159

1159:                                             ; preds = %1158
  br label %1160

1160:                                             ; preds = %1159
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1161:                                             ; preds = %1137
  br label %1201

1162:                                             ; preds = %1094
  %1163 = load ptr, ptr %8, align 8, !tbaa !5
  %1164 = getelementptr inbounds %struct.meta, ptr %1163, i32 0, i32 6
  %1165 = getelementptr inbounds %struct.anon.22, ptr %1164, i32 0, i32 1
  %1166 = getelementptr inbounds %struct.tree, ptr %1165, i32 0, i32 3
  %1167 = load i32, ptr %1166, align 4, !tbaa !18
  %1168 = load ptr, ptr %8, align 8, !tbaa !5
  %1169 = getelementptr inbounds %struct.meta, ptr %1168, i32 0, i32 5
  %1170 = getelementptr inbounds %struct.geo, ptr %1169, i32 0, i32 5
  %1171 = load i32, ptr %1170, align 4, !tbaa !18
  %1172 = icmp uge i32 %1167, %1171
  %1173 = xor i1 %1172, true
  %1174 = xor i1 %1173, true
  %1175 = zext i1 %1174 to i32
  %1176 = sext i32 %1175 to i64
  %1177 = call i64 @llvm.expect.i64(i64 %1176, i64 0)
  %1178 = icmp ne i64 %1177, 0
  br i1 %1178, label %1179, label %1200

1179:                                             ; preds = %1162
  br label %1180

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

1190:                                             ; preds = %1180
  %1191 = load i32, ptr %10, align 4, !tbaa !9
  %1192 = load ptr, ptr %8, align 8, !tbaa !5
  %1193 = getelementptr inbounds %struct.meta, ptr %1192, i32 0, i32 6
  %1194 = getelementptr inbounds %struct.anon.22, ptr %1193, i32 0, i32 1
  %1195 = getelementptr inbounds %struct.tree, ptr %1194, i32 0, i32 3
  %1196 = load i32, ptr %1195, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 635, ptr noundef @.str.46, i32 noundef %1191, ptr noundef @.str.27, i32 noundef %1196)
  br label %1197

1197:                                             ; preds = %1190, %1180
  br label %1198

1198:                                             ; preds = %1197
  br label %1199

1199:                                             ; preds = %1198
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1200:                                             ; preds = %1162
  br label %1201

1201:                                             ; preds = %1200, %1161
  %1202 = load ptr, ptr %8, align 8, !tbaa !5
  %1203 = getelementptr inbounds %struct.meta, ptr %1202, i32 0, i32 6
  %1204 = getelementptr inbounds %struct.anon.22, ptr %1203, i32 0, i32 0
  %1205 = getelementptr inbounds %struct.tree, ptr %1204, i32 0, i32 9
  %1206 = load i64, ptr %1205, align 4, !tbaa !18
  %1207 = load i64, ptr %14, align 8, !tbaa !11
  %1208 = icmp ugt i64 %1206, %1207
  %1209 = xor i1 %1208, true
  %1210 = xor i1 %1209, true
  %1211 = zext i1 %1210 to i32
  %1212 = sext i32 %1211 to i64
  %1213 = call i64 @llvm.expect.i64(i64 %1212, i64 0)
  %1214 = icmp ne i64 %1213, 0
  br i1 %1214, label %1215, label %1236

1215:                                             ; preds = %1201
  br label %1216

1216:                                             ; preds = %1215
  %1217 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %1218 = zext i8 %1217 to i32
  %1219 = icmp sle i32 2, %1218
  %1220 = xor i1 %1219, true
  %1221 = xor i1 %1220, true
  %1222 = zext i1 %1221 to i32
  %1223 = sext i32 %1222 to i64
  %1224 = call i64 @llvm.expect.i64(i64 %1223, i64 0)
  %1225 = icmp ne i64 %1224, 0
  br i1 %1225, label %1226, label %1233

1226:                                             ; preds = %1216
  %1227 = load i32, ptr %10, align 4, !tbaa !9
  %1228 = load ptr, ptr %8, align 8, !tbaa !5
  %1229 = getelementptr inbounds %struct.meta, ptr %1228, i32 0, i32 6
  %1230 = getelementptr inbounds %struct.anon.22, ptr %1229, i32 0, i32 0
  %1231 = getelementptr inbounds %struct.tree, ptr %1230, i32 0, i32 9
  %1232 = load i64, ptr %1231, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 640, ptr noundef @.str.48, i32 noundef %1227, i64 noundef %1232, ptr noundef @.str.45)
  br label %1233

1233:                                             ; preds = %1226, %1216
  br label %1234

1234:                                             ; preds = %1233
  br label %1235

1235:                                             ; preds = %1234
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1236:                                             ; preds = %1201
  %1237 = load ptr, ptr %8, align 8, !tbaa !5
  %1238 = getelementptr inbounds %struct.meta, ptr %1237, i32 0, i32 6
  %1239 = getelementptr inbounds %struct.anon.22, ptr %1238, i32 0, i32 1
  %1240 = getelementptr inbounds %struct.tree, ptr %1239, i32 0, i32 9
  %1241 = load i64, ptr %1240, align 4, !tbaa !18
  %1242 = load i64, ptr %14, align 8, !tbaa !11
  %1243 = icmp ugt i64 %1241, %1242
  %1244 = xor i1 %1243, true
  %1245 = xor i1 %1244, true
  %1246 = zext i1 %1245 to i32
  %1247 = sext i32 %1246 to i64
  %1248 = call i64 @llvm.expect.i64(i64 %1247, i64 0)
  %1249 = icmp ne i64 %1248, 0
  br i1 %1249, label %1250, label %1271

1250:                                             ; preds = %1236
  br label %1251

1251:                                             ; preds = %1250
  %1252 = load i8, ptr getelementptr inbounds (%struct.libmdbx_globals, ptr @globals, i32 0, i32 5), align 2, !tbaa !13
  %1253 = zext i8 %1252 to i32
  %1254 = icmp sle i32 2, %1253
  %1255 = xor i1 %1254, true
  %1256 = xor i1 %1255, true
  %1257 = zext i1 %1256 to i32
  %1258 = sext i32 %1257 to i64
  %1259 = call i64 @llvm.expect.i64(i64 %1258, i64 0)
  %1260 = icmp ne i64 %1259, 0
  br i1 %1260, label %1261, label %1268

1261:                                             ; preds = %1251
  %1262 = load i32, ptr %10, align 4, !tbaa !9
  %1263 = load ptr, ptr %8, align 8, !tbaa !5
  %1264 = getelementptr inbounds %struct.meta, ptr %1263, i32 0, i32 6
  %1265 = getelementptr inbounds %struct.anon.22, ptr %1264, i32 0, i32 1
  %1266 = getelementptr inbounds %struct.tree, ptr %1265, i32 0, i32 9
  %1267 = load i64, ptr %1266, align 4, !tbaa !18
  call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef @__func__.meta_validate, i32 noundef 646, ptr noundef @.str.48, i32 noundef %1262, i64 noundef %1267, ptr noundef @.str.27)
  br label %1268

1268:                                             ; preds = %1261, %1251
  br label %1269

1269:                                             ; preds = %1268
  br label %1270

1270:                                             ; preds = %1269
  store i32 -30796, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1271:                                             ; preds = %1236
  store i32 0, ptr %6, align 4
  store i32 1, ptr %13, align 4
  br label %1272

1272:                                             ; preds = %1271, %1270, %1235, %1199, %1160, %1092, %1053, %954
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %1273

1273:                                             ; preds = %1272, %797
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  br label %1274

1274:                                             ; preds = %1273, %742
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  br label %1275

1275:                                             ; preds = %1274, %699, %662
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  br label %1276

1276:                                             ; preds = %1275, %583, %542, %492, %452, %365, %328, %280
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %1277

1277:                                             ; preds = %1276, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  br label %1278

1278:                                             ; preds = %1277, %170, %123, %95, %59
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  %1279 = load i32, ptr %6, align 4
  ret i32 %1279
}

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !7, i64 26}
!14 = !{!"libmdbx_globals", !7, i64 0, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !15, i64 27, !10, i64 28, !7, i64 32, !7, i64 40, !12, i64 80, !6, i64 88}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !10, i64 24}
!20 = !{!"meta", !7, i64 0, !7, i64 8, !17, i64 16, !7, i64 18, !7, i64 19, !21, i64 20, !7, i64 40, !22, i64 136, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 208}
!21 = !{!"geo", !17, i64 0, !17, i64 2, !10, i64 4, !10, i64 8, !7, i64 12, !7, i64 16}
!22 = !{!"MDBX_canary", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!23 = !{!20, !10, i64 28}
!24 = !{!20, !17, i64 20}
!25 = !{!20, !17, i64 22}
!26 = !{!27, !12, i64 48}
!27 = !{!"MDBX_env", !7, i64 0, !10, i64 4, !10, i64 8, !28, i64 16, !10, i64 56, !10, i64 60, !28, i64 64, !6, 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, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !29, i64 152, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !10, i64 224, !10, i64 228, !10, i64 232, !6, i64 240, !6, i64 248, !12, i64 256, !30, i64 264, !32, i64 320, !15, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !33, i64 392, !7, i64 400, !10, i64 440, !10, i64 444, !6, i64 448, !34, i64 456, !7, i64 496, !7, i64 536}
!28 = !{!"osal_mmap", !7, i64 0, !10, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!29 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!30 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !12, i64 16, !7, i64 24, !7, i64 25, !7, i64 26, !7, i64 27, !10, i64 28, !10, i64 32, !15, i64 36, !15, i64 37, !15, i64 38, !31, i64 40, !7, i64 48}
!31 = !{!"", !17, i64 0, !17, i64 2, !17, i64 4, !17, i64 6}
!32 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!33 = !{!"", !12, i64 0}
!34 = !{!"osal_ioring", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!35 = !{!27, !10, i64 24}
!36 = !{!14, !10, i64 16}
!37 = !{!14, !7, i64 25}


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

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

@globals = external local_unnamed_addr global %struct.libmdbx_globals, align 8
@__func__.meta_validate = external hidden unnamed_addr constant [14 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [89 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [96 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [50 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @durable_caption(ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @meta_sign_get(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @meta_sign_calculate(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: cold nounwind optsize uwtable
define dso_local i32 @meta_validate(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, i32 noundef %3, ptr noundef %4) local_unnamed_addr #3 {
  %6 = tail call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef %1) #8
  switch i64 %6, label %7 [
    i64 6441728281112482303, label %12
    i64 6441728281112482051, label %12
    i64 6441728281112482050, label %12
  ]

7:                                                ; preds = %5
  %8 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %.not235 = icmp eq i8 %8, 0
  br i1 %.not235, label %10, label %9, !prof !13

9:                                                ; preds = %7
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.meta_validate, i32 noundef 444, ptr noundef nonnull @.str.18, i32 noundef %3, i64 noundef %6) #9
  br label %10

10:                                               ; preds = %9, %7
  %.mask = and i64 %6, -256
  %.not236 = icmp eq i64 %.mask, 6441728281112482048
  %11 = select i1 %.not236, i32 -30794, i32 -30793
  br label %.thread

12:                                               ; preds = %5, %5, %5
  %13 = getelementptr inbounds i8, ptr %2, i64 16
  %14 = load i32, ptr %13, align 1, !tbaa !14
  %.not = icmp eq i32 %14, %3
  br i1 %.not, label %18, label %15, !prof !13

15:                                               ; preds = %12
  %16 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %.not234 = icmp eq i8 %16, 0
  br i1 %.not234, label %.thread, label %17, !prof !13

17:                                               ; preds = %15
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.meta_validate, i32 noundef 449, ptr noundef nonnull @.str.19, i32 noundef %3, i32 noundef %14) #9
  br label %.thread

18:                                               ; preds = %12
  %19 = getelementptr inbounds i8, ptr %2, i64 10
  %20 = load i16, ptr %19, align 1, !tbaa !15
  %.not213 = icmp eq i16 %20, 8
  br i1 %.not213, label %24, label %21, !prof !13

21:                                               ; preds = %18
  %22 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %.not233 = icmp eq i8 %22, 0
  br i1 %.not233, label %.thread, label %23, !prof !13

23:                                               ; preds = %21
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 1, ptr noundef nonnull @__func__.meta_validate, i32 noundef 454, ptr noundef nonnull @.str.20, i32 noundef %3) #9
  br label %.thread

24:                                               ; preds = %18
  %25 = getelementptr inbounds i8, ptr %1, i64 40
  %26 = getelementptr inbounds i8, ptr %1, i64 44
  %27 = load i32, ptr %26, align 4, !tbaa !17
  %28 = zext i32 %27 to i64
  %29 = tail call zeroext i1 @is_powerof2(i64 noundef %28) #10
  %30 = add i32 %27, -256
  %31 = icmp ult i32 %30, 65281
  %or.cond.not = and i1 %29, %31
  br i1 %or.cond.not, label %37, label %.critedge, !prof !18

.critedge:                                        ; preds = %24
  %32 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %33 = icmp ugt i8 %32, 1
  br i1 %33, label %34, label %35, !prof !19

34:                                               ; preds = %.critedge
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 460, ptr noundef nonnull @.str.21, i32 noundef %3, i32 noundef %27) #9
  %.pre = load i32, ptr %26, align 4, !tbaa !17
  %.pre266 = zext i32 %.pre to i64
  %.pre267 = tail call zeroext i1 @is_powerof2(i64 noundef %.pre266) #10
  br label %35

35:                                               ; preds = %34, %.critedge
  %.pre-phi268 = phi i1 [ %.pre267, %34 ], [ %29, %.critedge ]
  %36 = select i1 %.pre-phi268, i32 -30794, i32 -30793
  br label %.thread

37:                                               ; preds = %24
  %.not214 = icmp eq ptr %4, null
  br i1 %.not214, label %45, label %38

38:                                               ; preds = %37
  %39 = load i32, ptr %4, align 4, !tbaa !14
  %.not215 = icmp eq i32 %39, %27
  br i1 %.not215, label %45, label %40

40:                                               ; preds = %38
  store i32 %27, ptr %4, align 4, !tbaa !14
  %41 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %42 = icmp ugt i8 %41, 3
  br i1 %42, label %43, label %45, !prof !19

43:                                               ; preds = %40
  %44 = load i32, ptr %26, align 4, !tbaa !17
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 4, ptr noundef nonnull @__func__.meta_validate, i32 noundef 466, ptr noundef nonnull @.str.22, i32 noundef %3, i32 noundef %44) #9
  br label %45

45:                                               ; preds = %40, %43, %38, %37
  %46 = getelementptr inbounds i8, ptr %1, i64 8
  %47 = tail call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef nonnull %46) #8
  %48 = getelementptr inbounds i8, ptr %1, i64 176
  %49 = tail call i64 @unaligned_peek_u64(i64 noundef 4, ptr noundef nonnull %48) #8
  %.not216 = icmp eq i64 %47, %49
  br i1 %.not216, label %54, label %50, !prof !13

50:                                               ; preds = %45
  %51 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %52 = icmp ugt i8 %51, 1
  br i1 %52, label %53, label %.thread, !prof !19

53:                                               ; preds = %50
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 471, ptr noundef nonnull @.str.23, i32 noundef %3) #9
  br label %.thread

54:                                               ; preds = %45
  %55 = tail call i64 @meta_sign_get(ptr noundef nonnull %1)
  %56 = tail call i64 @meta_sign_calculate(ptr noundef nonnull %1)
  %57 = icmp ult i64 %55, 2
  %.not217 = icmp eq i64 %55, %56
  %or.cond239 = select i1 %57, i1 true, i1 %.not217
  br i1 %or.cond239, label %62, label %58, !prof !20

58:                                               ; preds = %54
  %59 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %60 = icmp ugt i8 %59, 1
  br i1 %60, label %61, label %.thread, !prof !19

61:                                               ; preds = %58
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 480, ptr noundef nonnull @.str.24, i32 noundef %3, i64 noundef %55, i64 noundef %56) #9
  br label %.thread

62:                                               ; preds = %54
  %63 = load i16, ptr %25, align 4, !tbaa !17
  %64 = zext i16 %63 to i32
  %.not218 = icmp eq i16 %63, 8
  br i1 %.not218, label %73, label %65, !prof !13

65:                                               ; preds = %62
  %66 = and i32 %64, 126
  %67 = icmp ne i32 %66, 8
  %68 = icmp eq i64 %6, 6441728281112482051
  %or.cond3 = or i1 %68, %67
  br i1 %or.cond3, label %69, label %73

69:                                               ; preds = %65
  %70 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %71 = icmp ugt i8 %70, 1
  br i1 %71, label %72, label %.thread, !prof !19

72:                                               ; preds = %69
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 486, ptr noundef nonnull @.str.25, i32 noundef %3, ptr noundef nonnull @.str.26, i32 noundef %64) #9
  br label %.thread

73:                                               ; preds = %65, %62
  %74 = getelementptr inbounds i8, ptr %1, i64 88
  %75 = load i16, ptr %74, align 4, !tbaa !17
  %76 = zext i16 %75 to i32
  %77 = tail call zeroext i1 @check_table_flags(i32 noundef %76)
  %78 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  br i1 %77, label %84, label %79, !prof !13

79:                                               ; preds = %73
  %80 = icmp ugt i8 %78, 1
  br i1 %80, label %81, label %.thread, !prof !19

81:                                               ; preds = %79
  %82 = load i16, ptr %74, align 4, !tbaa !17
  %83 = zext i16 %82 to i32
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 491, ptr noundef nonnull @.str.25, i32 noundef %3, ptr noundef nonnull @.str.27, i32 noundef %83) #9
  br label %.thread

84:                                               ; preds = %73
  %85 = icmp ugt i8 %78, 4
  br i1 %85, label %86, label %107, !prof !19

86:                                               ; preds = %84
  %87 = load i32, ptr %13, align 1, !tbaa !14
  %88 = getelementptr inbounds i8, ptr %1, i64 96
  %89 = load i32, ptr %88, align 4, !tbaa !17
  %90 = getelementptr inbounds i8, ptr %1, i64 48
  %91 = load i32, ptr %90, align 4, !tbaa !17
  %92 = getelementptr inbounds i8, ptr %1, i64 20
  %93 = getelementptr inbounds i8, ptr %1, i64 24
  %94 = load i32, ptr %93, align 4, !tbaa !21
  %95 = getelementptr inbounds i8, ptr %1, i64 36
  %96 = load i32, ptr %95, align 4, !tbaa !17
  %97 = getelementptr inbounds i8, ptr %1, i64 32
  %98 = load i32, ptr %97, align 4, !tbaa !17
  %99 = getelementptr inbounds i8, ptr %1, i64 28
  %100 = load i32, ptr %99, align 4, !tbaa !25
  %101 = load i16, ptr %92, align 4, !tbaa !26
  %102 = tail call i32 @pv2pages(i16 noundef zeroext %101) #10
  %103 = getelementptr inbounds i8, ptr %1, i64 22
  %104 = load i16, ptr %103, align 2, !tbaa !27
  %105 = tail call i32 @pv2pages(i16 noundef zeroext %104) #10
  %106 = tail call ptr @durable_caption(ptr noundef nonnull %1)
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 5, ptr noundef nonnull @__func__.meta_validate, i32 noundef 499, ptr noundef nonnull @.str.28, i32 noundef %87, i32 noundef %89, i32 noundef %91, i32 noundef %94, i32 noundef %96, i32 noundef %98, i32 noundef %100, i32 noundef %102, i32 noundef %105, i64 noundef %47, ptr noundef %106) #9
  br label %107

107:                                              ; preds = %86, %84
  %108 = add i64 %47, 4294967296
  %109 = icmp ult i64 %108, 4294967297
  br i1 %109, label %110, label %114, !prof !19

110:                                              ; preds = %107
  %111 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %112 = icmp ugt i8 %111, 1
  br i1 %112, label %113, label %.thread, !prof !19

113:                                              ; preds = %110
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 502, ptr noundef nonnull @.str.29, i32 noundef %3, i64 noundef %47) #9
  br label %.thread

114:                                              ; preds = %107
  %115 = getelementptr inbounds i8, ptr %1, i64 24
  %116 = load i32, ptr %115, align 4, !tbaa !21
  %117 = add i32 %116, 2147483647
  %spec.select240 = icmp ult i32 %117, -2147483646
  br i1 %spec.select240, label %118, label %122, !prof !19

118:                                              ; preds = %114
  %119 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %120 = icmp ugt i8 %119, 1
  br i1 %120, label %121, label %.thread, !prof !19

121:                                              ; preds = %118
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 507, ptr noundef nonnull @.str.30, i32 noundef %3, i32 noundef %116) #9
  br label %.thread

122:                                              ; preds = %114
  %123 = getelementptr inbounds i8, ptr %1, i64 28
  %124 = load i32, ptr %123, align 4, !tbaa !25
  %125 = add i32 %124, 2147483647
  %or.cond241 = icmp ult i32 %125, -2147483646
  %126 = icmp ult i32 %124, %116
  %or.cond259 = or i1 %126, %or.cond241
  br i1 %or.cond259, label %.critedge243, label %130, !prof !28

.critedge243:                                     ; preds = %122
  %127 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %128 = icmp ugt i8 %127, 1
  br i1 %128, label %129, label %.thread, !prof !19

129:                                              ; preds = %.critedge243
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 513, ptr noundef nonnull @.str.31, i32 noundef %3, i32 noundef %124) #9
  br label %.thread

130:                                              ; preds = %122
  %131 = getelementptr inbounds i8, ptr %1, i64 36
  %132 = load i32, ptr %131, align 4, !tbaa !17
  %133 = add i32 %132, 2147483647
  %134 = icmp ult i32 %133, -2147483646
  br i1 %134, label %135, label %139, !prof !19

135:                                              ; preds = %130
  %136 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %137 = icmp ugt i8 %136, 1
  br i1 %137, label %138, label %.thread, !prof !19

138:                                              ; preds = %135
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 518, ptr noundef nonnull @.str.32, i32 noundef %3, i32 noundef %132) #9
  br label %.thread

139:                                              ; preds = %130
  %140 = zext i32 %132 to i64
  %141 = load i32, ptr %26, align 4, !tbaa !17
  %142 = zext i32 %141 to i64
  %143 = mul nuw nsw i64 %142, %140
  %144 = getelementptr inbounds i8, ptr %0, i64 48
  %145 = load i64, ptr %144, align 8, !tbaa !29
  %146 = icmp ugt i64 %143, %145
  br i1 %146, label %147, label %158, !prof !19

147:                                              ; preds = %139
  %148 = getelementptr inbounds i8, ptr %0, i64 24
  %149 = load i32, ptr %148, align 8, !tbaa !38
  %150 = tail call i32 @osal_filesize(i32 noundef %149, ptr noundef nonnull %144) #9
  %.not219 = icmp eq i32 %150, 0
  br i1 %.not219, label %151, label %.thread, !prof !13

151:                                              ; preds = %147
  %152 = load i64, ptr %144, align 8, !tbaa !29
  %153 = icmp ugt i64 %143, %152
  br i1 %153, label %154, label %._crit_edge, !prof !19

._crit_edge:                                      ; preds = %151
  %.pre263 = load i32, ptr %131, align 4, !tbaa !17
  br label %158

154:                                              ; preds = %151
  %155 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %156 = icmp ugt i8 %155, 1
  br i1 %156, label %157, label %.thread, !prof !19

157:                                              ; preds = %154
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 530, ptr noundef nonnull @.str.33, i32 noundef %3, i64 noundef %143, i64 noundef %152) #9
  br label %.thread

158:                                              ; preds = %._crit_edge, %139
  %159 = phi i32 [ %.pre263, %._crit_edge ], [ %132, %139 ]
  %160 = add i32 %159, -1
  %161 = icmp slt i32 %160, 0
  %162 = icmp ugt i64 %143, 140737488355328
  %163 = or i1 %162, %161
  br i1 %163, label %164, label %168, !prof !19

164:                                              ; preds = %158
  %165 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %166 = icmp ugt i8 %165, 1
  br i1 %166, label %167, label %.thread, !prof !19

167:                                              ; preds = %164
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 535, ptr noundef nonnull @.str.34, i32 noundef %3, i64 noundef %143) #9
  br label %.thread

168:                                              ; preds = %158
  %169 = load i32, ptr %115, align 4, !tbaa !21
  %170 = zext i32 %169 to i64
  %171 = load i32, ptr %26, align 4, !tbaa !17
  %172 = zext i32 %171 to i64
  %173 = mul nuw i64 %172, %170
  %174 = add i64 %173, -140737488355329
  %175 = icmp ult i64 %174, -140737488354561
  br i1 %175, label %176, label %180, !prof !19

176:                                              ; preds = %168
  %177 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %178 = icmp ugt i8 %177, 1
  br i1 %178, label %179, label %.thread, !prof !19

179:                                              ; preds = %176
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 560, ptr noundef nonnull @.str.35, i32 noundef %3, i64 noundef %173) #9
  br label %.thread

180:                                              ; preds = %168
  %181 = load i32, ptr %123, align 4, !tbaa !25
  %182 = zext i32 %181 to i64
  %183 = mul nuw i64 %182, %172
  %184 = icmp ugt i64 %183, 140737488355328
  br i1 %184, label %.critedge253, label %185, !prof !19

185:                                              ; preds = %180
  %186 = load i32, ptr getelementptr inbounds (i8, ptr @globals, i64 16), align 8, !tbaa !39
  %187 = zext i32 %186 to i64
  %188 = tail call i64 @ceil_powerof2(i64 noundef %183, i64 noundef %187) #10
  %189 = udiv i64 %188, %172
  %190 = icmp ugt i64 %189, 2147483648
  br i1 %190, label %.critedge245, label %207, !prof !19

.critedge253:                                     ; preds = %180
  %191 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %192 = icmp ugt i8 %191, 1
  br i1 %192, label %193, label %.thread, !prof !19

193:                                              ; preds = %.critedge253
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 571, ptr noundef nonnull @.str.36, i32 noundef %3, i64 noundef %183) #9
  br label %.thread

.critedge245:                                     ; preds = %185
  %194 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %195 = icmp ugt i8 %194, 1
  br i1 %195, label %198, label %.thread256, !prof !19

.thread256:                                       ; preds = %.critedge245
  %196 = udiv i64 140737488355328, %172
  %197 = trunc i64 %196 to i32
  %spec.select246257 = tail call i32 @llvm.umin.i32(i32 %197, i32 -2147483648)
  br label %206

198:                                              ; preds = %.critedge245
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 578, ptr noundef nonnull @.str.38, i32 noundef %3, i64 noundef %183, i64 noundef %143) #9
  %.pr = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %199 = load i32, ptr %26, align 4, !tbaa !17
  %200 = zext i32 %199 to i64
  %201 = udiv i64 140737488355328, %200
  %202 = trunc i64 %201 to i32
  %spec.select246 = tail call i32 @llvm.umin.i32(i32 %202, i32 -2147483648)
  %203 = icmp ugt i8 %.pr, 1
  br i1 %203, label %204, label %206, !prof !40

204:                                              ; preds = %198
  %205 = load i32, ptr %123, align 4, !tbaa !25
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 586, ptr noundef nonnull @.str.39, i32 noundef %3, ptr noundef nonnull @.str.40, i32 noundef %spec.select246, i32 noundef %205) #9
  br label %206

206:                                              ; preds = %.thread256, %204, %198
  %spec.select246258 = phi i32 [ %spec.select246257, %.thread256 ], [ %spec.select246, %204 ], [ %spec.select246, %198 ]
  store i32 %spec.select246258, ptr %123, align 4, !tbaa !25
  %.pre264.pre = load i32, ptr %131, align 4, !tbaa !17
  br label %207

207:                                              ; preds = %206, %185
  %.pre264 = phi i32 [ %.pre264.pre, %206 ], [ %159, %185 ]
  %.1179 = phi i32 [ %spec.select246258, %206 ], [ %181, %185 ]
  %208 = getelementptr inbounds i8, ptr %1, i64 32
  %209 = load i32, ptr %208, align 4, !tbaa !17
  %spec.select247 = tail call i32 @llvm.umax.i32(i32 %209, i32 %169)
  %210 = icmp ugt i32 %spec.select247, %.1179
  %.not221 = icmp ugt i32 %.pre264, %.1179
  %spec.select248 = select i1 %.not221, i32 %spec.select247, i32 %.1179
  %.1 = select i1 %210, i32 %spec.select248, i32 %spec.select247
  %211 = icmp ugt i32 %.pre264, %.1
  br i1 %211, label %212, label %216, !prof !19

212:                                              ; preds = %207
  %213 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %214 = icmp ugt i8 %213, 1
  br i1 %214, label %215, label %.thread, !prof !19

215:                                              ; preds = %212
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 605, ptr noundef nonnull @.str.41, i32 noundef %3, i32 noundef %.pre264, i32 noundef %.1) #9
  br label %.thread

216:                                              ; preds = %207
  %.not222 = icmp eq i32 %209, %.1
  br i1 %.not222, label %222, label %217

217:                                              ; preds = %216
  %218 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %219 = icmp ugt i8 %218, 1
  br i1 %219, label %220, label %221, !prof !19

220:                                              ; preds = %217
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 611, ptr noundef nonnull @.str.42, i32 noundef %3, ptr noundef nonnull @.str.43, i32 noundef %.1, i32 noundef %209) #9
  br label %221

221:                                              ; preds = %220, %217
  store i32 %.1, ptr %208, align 4, !tbaa !17
  br label %222

222:                                              ; preds = %221, %216
  %223 = getelementptr inbounds i8, ptr %1, i64 48
  %224 = load i32, ptr %223, align 4, !tbaa !17
  %225 = icmp eq i32 %224, -1
  br i1 %225, label %226, label %244

226:                                              ; preds = %222
  %227 = getelementptr inbounds i8, ptr %1, i64 52
  %228 = load i32, ptr %227, align 4, !tbaa !17
  %.not224 = icmp eq i32 %228, 0
  br i1 %.not224, label %229, label %.critedge250, !prof !13

229:                                              ; preds = %226
  %230 = getelementptr inbounds i8, ptr %1, i64 42
  %231 = load i16, ptr %230, align 2, !tbaa !17
  %.not225 = icmp eq i16 %231, 0
  br i1 %.not225, label %232, label %.critedge250, !prof !13

232:                                              ; preds = %229
  %233 = getelementptr inbounds i8, ptr %1, i64 72
  %234 = load i64, ptr %233, align 4, !tbaa !17
  %.not226 = icmp eq i64 %234, 0
  br i1 %.not226, label %235, label %.critedge250, !prof !13

235:                                              ; preds = %232
  %236 = getelementptr inbounds i8, ptr %1, i64 56
  %237 = load i32, ptr %236, align 4, !tbaa !17
  %.not227 = icmp eq i32 %237, 0
  br i1 %.not227, label %238, label %.critedge250, !prof !13

238:                                              ; preds = %235
  %239 = getelementptr inbounds i8, ptr %1, i64 60
  %240 = load i32, ptr %239, align 4, !tbaa !17
  %.not261 = icmp eq i32 %240, 0
  br i1 %.not261, label %250, label %.critedge250, !prof !13

.critedge250:                                     ; preds = %235, %232, %229, %226, %238
  %241 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %242 = icmp ugt i8 %241, 1
  br i1 %242, label %243, label %.thread, !prof !19

243:                                              ; preds = %.critedge250
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 619, ptr noundef nonnull @.str.44, i32 noundef %3, ptr noundef nonnull @.str.45) #9
  br label %.thread

244:                                              ; preds = %222
  %245 = load i32, ptr %131, align 4, !tbaa !17
  %.not223 = icmp ult i32 %224, %245
  br i1 %.not223, label %250, label %246, !prof !13

246:                                              ; preds = %244
  %247 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %248 = icmp ugt i8 %247, 1
  br i1 %248, label %249, label %.thread, !prof !19

249:                                              ; preds = %246
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 623, ptr noundef nonnull @.str.46, i32 noundef %3, ptr noundef nonnull @.str.45, i32 noundef %224) #9
  br label %.thread

250:                                              ; preds = %244, %238
  %251 = getelementptr inbounds i8, ptr %1, i64 96
  %252 = load i32, ptr %251, align 4, !tbaa !17
  %253 = icmp eq i32 %252, -1
  br i1 %253, label %254, label %272

254:                                              ; preds = %250
  %255 = getelementptr inbounds i8, ptr %1, i64 100
  %256 = load i32, ptr %255, align 4, !tbaa !17
  %.not229 = icmp eq i32 %256, 0
  br i1 %.not229, label %257, label %.critedge252, !prof !13

257:                                              ; preds = %254
  %258 = getelementptr inbounds i8, ptr %1, i64 90
  %259 = load i16, ptr %258, align 2, !tbaa !17
  %.not230 = icmp eq i16 %259, 0
  br i1 %.not230, label %260, label %.critedge252, !prof !13

260:                                              ; preds = %257
  %261 = getelementptr inbounds i8, ptr %1, i64 120
  %262 = load i64, ptr %261, align 4, !tbaa !17
  %.not231 = icmp eq i64 %262, 0
  br i1 %.not231, label %263, label %.critedge252, !prof !13

263:                                              ; preds = %260
  %264 = getelementptr inbounds i8, ptr %1, i64 104
  %265 = load i32, ptr %264, align 4, !tbaa !17
  %.not232 = icmp eq i32 %265, 0
  br i1 %.not232, label %266, label %.critedge252, !prof !13

266:                                              ; preds = %263
  %267 = getelementptr inbounds i8, ptr %1, i64 108
  %268 = load i32, ptr %267, align 4, !tbaa !17
  %.not262 = icmp eq i32 %268, 0
  br i1 %.not262, label %278, label %.critedge252, !prof !13

.critedge252:                                     ; preds = %263, %260, %257, %254, %266
  %269 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %270 = icmp ugt i8 %269, 1
  br i1 %270, label %271, label %.thread, !prof !19

271:                                              ; preds = %.critedge252
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 631, ptr noundef nonnull @.str.47, i32 noundef %3, ptr noundef nonnull @.str.27) #9
  br label %.thread

272:                                              ; preds = %250
  %273 = load i32, ptr %131, align 4, !tbaa !17
  %.not228 = icmp ult i32 %252, %273
  br i1 %.not228, label %278, label %274, !prof !13

274:                                              ; preds = %272
  %275 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %276 = icmp ugt i8 %275, 1
  br i1 %276, label %277, label %.thread, !prof !19

277:                                              ; preds = %274
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 635, ptr noundef nonnull @.str.46, i32 noundef %3, ptr noundef nonnull @.str.27, i32 noundef %252) #9
  br label %.thread

278:                                              ; preds = %272, %266
  %279 = getelementptr inbounds i8, ptr %1, i64 80
  %280 = load i64, ptr %279, align 4, !tbaa !17
  %281 = icmp ugt i64 %280, %47
  br i1 %281, label %282, label %286, !prof !19

282:                                              ; preds = %278
  %283 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %284 = icmp ugt i8 %283, 1
  br i1 %284, label %285, label %.thread, !prof !19

285:                                              ; preds = %282
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 640, ptr noundef nonnull @.str.48, i32 noundef %3, i64 noundef %280, ptr noundef nonnull @.str.45) #9
  br label %.thread

286:                                              ; preds = %278
  %287 = getelementptr inbounds i8, ptr %1, i64 128
  %288 = load i64, ptr %287, align 4, !tbaa !17
  %289 = icmp ugt i64 %288, %47
  br i1 %289, label %290, label %.thread, !prof !19

290:                                              ; preds = %286
  %291 = load i8, ptr getelementptr inbounds (i8, ptr @globals, i64 26), align 2, !tbaa !5
  %292 = icmp ugt i8 %291, 1
  br i1 %292, label %293, label %.thread, !prof !19

293:                                              ; preds = %290
  tail call void (i32, ptr, i32, ptr, ...) @debug_log(i32 noundef 2, ptr noundef nonnull @__func__.meta_validate, i32 noundef 646, ptr noundef nonnull @.str.48, i32 noundef %3, i64 noundef %288, ptr noundef nonnull @.str.27) #9
  br label %.thread

.thread:                                          ; preds = %154, %157, %147, %53, %50, %167, %164, %193, %.critedge253, %286, %290, %293, %282, %285, %274, %277, %.critedge252, %271, %246, %249, %.critedge250, %243, %212, %215, %176, %179, %135, %138, %.critedge243, %129, %118, %121, %110, %113, %79, %81, %69, %72, %58, %61, %21, %23, %15, %17, %35, %10
  %.7 = phi i32 [ %11, %10 ], [ %36, %35 ], [ -30793, %17 ], [ -30793, %15 ], [ -30793, %23 ], [ -30793, %21 ], [ -1, %53 ], [ -1, %50 ], [ -1, %61 ], [ -1, %58 ], [ -30784, %72 ], [ -30784, %69 ], [ -30784, %81 ], [ -30784, %79 ], [ -1, %113 ], [ -1, %110 ], [ -30793, %121 ], [ -30793, %118 ], [ -30793, %129 ], [ -30793, %.critedge243 ], [ -30796, %138 ], [ -30796, %135 ], [ -30417, %167 ], [ -30417, %164 ], [ -30794, %179 ], [ -30794, %176 ], [ -30794, %193 ], [ -30794, %.critedge253 ], [ -30796, %215 ], [ -30796, %212 ], [ -30796, %243 ], [ -30796, %.critedge250 ], [ -30796, %249 ], [ -30796, %246 ], [ -30796, %271 ], [ -30796, %.critedge252 ], [ -30796, %277 ], [ -30796, %274 ], [ -30796, %285 ], [ -30796, %282 ], [ -30796, %293 ], [ -30796, %290 ], [ 0, %286 ], [ -30796, %154 ], [ -30796, %157 ], [ %150, %147 ]
  ret i32 %.7
}

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

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

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

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

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

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

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

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

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

!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 26}
!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 2000, i32 1}
!14 = !{!9, !9, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!"branch_weights", i32 -294967296, i32 6003000}
!19 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!20 = !{!"branch_weights", i32 4001, i32 1}
!21 = !{!22, !9, i64 24}
!22 = !{!"meta", !7, i64 0, !7, i64 8, !16, i64 16, !7, i64 18, !7, i64 19, !23, i64 20, !7, i64 40, !24, i64 136, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 208}
!23 = !{!"geo", !16, i64 0, !16, i64 2, !9, i64 4, !9, i64 8, !7, i64 12, !7, i64 16}
!24 = !{!"MDBX_canary", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!25 = !{!22, !9, i64 28}
!26 = !{!22, !16, i64 20}
!27 = !{!22, !16, i64 22}
!28 = !{!"branch_weights", i32 6003000, i32 -294967296}
!29 = !{!30, !11, i64 48}
!30 = !{!"MDBX_env", !7, i64 0, !9, i64 4, !9, i64 8, !31, i64 16, !9, i64 56, !9, i64 60, !31, i64 64, !12, i64 104, !16, i64 112, !16, i64 114, !16, i64 116, !16, i64 118, !16, i64 120, !16, i64 122, !7, i64 124, !7, i64 128, !7, i64 129, !16, i64 130, !9, i64 132, !9, i64 136, !9, i64 140, !9, i64 144, !32, 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, !33, i64 264, !35, i64 320, !10, i64 360, !12, i64 368, !12, i64 376, !12, i64 384, !36, i64 392, !7, i64 400, !9, i64 440, !9, i64 444, !12, i64 448, !37, i64 456, !7, i64 496, !7, i64 536}
!31 = !{!"osal_mmap", !7, i64 0, !9, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!32 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!33 = !{!"", !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, !34, i64 40, !7, i64 48}
!34 = !{!"", !16, i64 0, !16, i64 2, !16, i64 4, !16, i64 6}
!35 = !{!"", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!36 = !{!"", !11, i64 0}
!37 = !{!"osal_ioring", !9, i64 0, !9, i64 4, !9, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!38 = !{!30, !9, i64 24}
!39 = !{!6, !9, i64 16}
!40 = !{!"branch_weights", !"expected", i32 -2147483648, i32 0}


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