; LLVM IR from seppo0010/rlite :: src (page_btree)

; 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.rl_btree = type { ptr, i64, i64, ptr, i64, i64 }
%struct.rl_btree_node = type { ptr, ptr, ptr, i64 }
%struct.rl_btree_type = type { ptr, ptr, i32, i32, ptr }
%struct.rlite = type { i64, i64, i32, ptr, i64, i64, i64, ptr, i32, i32, i32, i32, ptr, i64, i64, ptr, i64, i64, ptr, ptr, ptr, ptr }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [47 x i8], align 1

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

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @rl_btree_add_element(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4) #2 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, 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 i64 %2, ptr %9, align 8, !tbaa !9
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %24 = load ptr, ptr %8, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.rl_btree, ptr %24, i32 0, i32 2
  %26 = load i64, ptr %25, align 8, !tbaa !11
  %27 = mul i64 8, %26
  %28 = call noalias ptr @malloc(i64 noundef %27) #7
  store ptr %28, ptr %15, align 8, !tbaa !5
  %29 = load ptr, ptr %15, align 8, !tbaa !5
  %30 = icmp ne ptr %29, null
  br i1 %30, label %32, label %31

31:                                               ; preds = %5
  store i32 4, ptr %12, align 4, !tbaa !13
  br label %874

32:                                               ; preds = %5
  %33 = load ptr, ptr %8, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.rl_btree, ptr %33, i32 0, i32 2
  %35 = load i64, ptr %34, align 8, !tbaa !11
  %36 = mul i64 8, %35
  %37 = call noalias ptr @malloc(i64 noundef %36) #7
  store ptr %37, ptr %13, align 8, !tbaa !5
  %38 = load ptr, ptr %13, align 8, !tbaa !5
  %39 = icmp ne ptr %38, null
  br i1 %39, label %41, label %40

40:                                               ; preds = %32
  store i32 4, ptr %12, align 4, !tbaa !13
  br label %874

41:                                               ; preds = %32
  store i64 0, ptr %19, align 8, !tbaa !9
  store i64 -1, ptr %20, align 8, !tbaa !9
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = load ptr, ptr %10, align 8, !tbaa !5
  %45 = load ptr, ptr %15, align 8, !tbaa !5
  %46 = load ptr, ptr %13, align 8, !tbaa !5
  %47 = call i32 @rl_btree_find_score(ptr noundef %42, ptr noundef %43, ptr noundef %44, ptr noundef null, ptr noundef %45, ptr noundef %46)
  store i32 %47, ptr %12, align 4, !tbaa !13
  %48 = load i32, ptr %12, align 4, !tbaa !13
  %49 = icmp ne i32 3, %48
  br i1 %49, label %50, label %51

50:                                               ; preds = %41
  br label %874

51:                                               ; preds = %41
  store i32 0, ptr %12, align 4, !tbaa !13
  store ptr null, ptr %21, align 8, !tbaa !5
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.rl_btree, ptr %52, i32 0, i32 2
  %54 = load i64, ptr %53, align 8, !tbaa !11
  %55 = sub nsw i64 %54, 1
  store i64 %55, ptr %17, align 8, !tbaa !9
  br label %56

56:                                               ; preds = %728, %51
  %57 = load i64, ptr %17, align 8, !tbaa !9
  %58 = icmp sge i64 %57, 0
  br i1 %58, label %59, label %731

59:                                               ; preds = %56
  %60 = load i64, ptr %17, align 8, !tbaa !9
  %61 = icmp eq i64 %60, 0
  br i1 %61, label %62, label %66

62:                                               ; preds = %59
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.rl_btree, ptr %63, i32 0, i32 4
  %65 = load i64, ptr %64, align 8, !tbaa !15
  store i64 %65, ptr %19, align 8, !tbaa !9
  br label %81

66:                                               ; preds = %59
  %67 = load ptr, ptr %15, align 8, !tbaa !5
  %68 = load i64, ptr %17, align 8, !tbaa !9
  %69 = sub nsw i64 %68, 1
  %70 = getelementptr inbounds ptr, ptr %67, i64 %69
  %71 = load ptr, ptr %70, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.rl_btree_node, ptr %71, i32 0, i32 1
  %73 = load ptr, ptr %72, align 8, !tbaa !16
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = load i64, ptr %17, align 8, !tbaa !9
  %76 = sub nsw i64 %75, 1
  %77 = getelementptr inbounds i64, ptr %74, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !9
  %79 = getelementptr inbounds i64, ptr %73, i64 %78
  %80 = load i64, ptr %79, align 8, !tbaa !9
  store i64 %80, ptr %19, align 8, !tbaa !9
  br label %81

81:                                               ; preds = %66, %62
  %82 = load ptr, ptr %15, align 8, !tbaa !5
  %83 = load i64, ptr %17, align 8, !tbaa !9
  %84 = getelementptr inbounds ptr, ptr %82, i64 %83
  %85 = load ptr, ptr %84, align 8, !tbaa !5
  store ptr %85, ptr %21, align 8, !tbaa !5
  %86 = load ptr, ptr %21, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.rl_btree_node, ptr %86, i32 0, i32 3
  %88 = load i64, ptr %87, align 8, !tbaa !18
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.rl_btree, ptr %89, i32 0, i32 1
  %91 = load i64, ptr %90, align 8, !tbaa !19
  %92 = icmp slt i64 %88, %91
  br i1 %92, label %93, label %236

93:                                               ; preds = %81
  %94 = load ptr, ptr %21, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.rl_btree_node, ptr %94, i32 0, i32 0
  %96 = load ptr, ptr %95, align 8, !tbaa !20
  %97 = load ptr, ptr %13, align 8, !tbaa !5
  %98 = load i64, ptr %17, align 8, !tbaa !9
  %99 = getelementptr inbounds i64, ptr %97, i64 %98
  %100 = load i64, ptr %99, align 8, !tbaa !9
  %101 = add nsw i64 %100, 1
  %102 = getelementptr inbounds ptr, ptr %96, i64 %101
  %103 = load ptr, ptr %21, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.rl_btree_node, ptr %103, i32 0, i32 0
  %105 = load ptr, ptr %104, align 8, !tbaa !20
  %106 = load ptr, ptr %13, align 8, !tbaa !5
  %107 = load i64, ptr %17, align 8, !tbaa !9
  %108 = getelementptr inbounds i64, ptr %106, i64 %107
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = getelementptr inbounds ptr, ptr %105, i64 %109
  %111 = load ptr, ptr %21, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.rl_btree_node, ptr %111, i32 0, i32 3
  %113 = load i64, ptr %112, align 8, !tbaa !18
  %114 = load ptr, ptr %13, align 8, !tbaa !5
  %115 = load i64, ptr %17, align 8, !tbaa !9
  %116 = getelementptr inbounds i64, ptr %114, i64 %115
  %117 = load i64, ptr %116, align 8, !tbaa !9
  %118 = sub nsw i64 %113, %117
  %119 = mul i64 8, %118
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %102, ptr align 8 %110, i64 %119, i1 false)
  %120 = load ptr, ptr %21, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.rl_btree_node, ptr %120, i32 0, i32 2
  %122 = load ptr, ptr %121, align 8, !tbaa !21
  %123 = load ptr, ptr %13, align 8, !tbaa !5
  %124 = load i64, ptr %17, align 8, !tbaa !9
  %125 = getelementptr inbounds i64, ptr %123, i64 %124
  %126 = load i64, ptr %125, align 8, !tbaa !9
  %127 = add nsw i64 %126, 1
  %128 = getelementptr inbounds ptr, ptr %122, i64 %127
  %129 = load ptr, ptr %21, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.rl_btree_node, ptr %129, i32 0, i32 2
  %131 = load ptr, ptr %130, align 8, !tbaa !21
  %132 = load ptr, ptr %13, align 8, !tbaa !5
  %133 = load i64, ptr %17, align 8, !tbaa !9
  %134 = getelementptr inbounds i64, ptr %132, i64 %133
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = getelementptr inbounds ptr, ptr %131, i64 %135
  %137 = load ptr, ptr %21, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.rl_btree_node, ptr %137, i32 0, i32 3
  %139 = load i64, ptr %138, align 8, !tbaa !18
  %140 = load ptr, ptr %13, align 8, !tbaa !5
  %141 = load i64, ptr %17, align 8, !tbaa !9
  %142 = getelementptr inbounds i64, ptr %140, i64 %141
  %143 = load i64, ptr %142, align 8, !tbaa !9
  %144 = sub nsw i64 %139, %143
  %145 = mul i64 8, %144
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %128, ptr align 8 %136, i64 %145, i1 false)
  %146 = load ptr, ptr %21, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.rl_btree_node, ptr %146, i32 0, i32 1
  %148 = load ptr, ptr %147, align 8, !tbaa !16
  %149 = icmp ne ptr %148, null
  br i1 %149, label %150, label %178

150:                                              ; preds = %93
  %151 = load ptr, ptr %21, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.rl_btree_node, ptr %151, i32 0, i32 1
  %153 = load ptr, ptr %152, align 8, !tbaa !16
  %154 = load ptr, ptr %13, align 8, !tbaa !5
  %155 = load i64, ptr %17, align 8, !tbaa !9
  %156 = getelementptr inbounds i64, ptr %154, i64 %155
  %157 = load i64, ptr %156, align 8, !tbaa !9
  %158 = add nsw i64 %157, 2
  %159 = getelementptr inbounds i64, ptr %153, i64 %158
  %160 = load ptr, ptr %21, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.rl_btree_node, ptr %160, i32 0, i32 1
  %162 = load ptr, ptr %161, align 8, !tbaa !16
  %163 = load ptr, ptr %13, align 8, !tbaa !5
  %164 = load i64, ptr %17, align 8, !tbaa !9
  %165 = getelementptr inbounds i64, ptr %163, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !9
  %167 = add nsw i64 %166, 1
  %168 = getelementptr inbounds i64, ptr %162, i64 %167
  %169 = load ptr, ptr %21, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.rl_btree_node, ptr %169, i32 0, i32 3
  %171 = load i64, ptr %170, align 8, !tbaa !18
  %172 = load ptr, ptr %13, align 8, !tbaa !5
  %173 = load i64, ptr %17, align 8, !tbaa !9
  %174 = getelementptr inbounds i64, ptr %172, i64 %173
  %175 = load i64, ptr %174, align 8, !tbaa !9
  %176 = sub nsw i64 %171, %175
  %177 = mul i64 8, %176
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %159, ptr align 8 %168, i64 %177, i1 false)
  br label %178

178:                                              ; preds = %150, %93
  %179 = load ptr, ptr %10, align 8, !tbaa !5
  %180 = load ptr, ptr %21, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.rl_btree_node, ptr %180, i32 0, i32 0
  %182 = load ptr, ptr %181, align 8, !tbaa !20
  %183 = load ptr, ptr %13, align 8, !tbaa !5
  %184 = load i64, ptr %17, align 8, !tbaa !9
  %185 = getelementptr inbounds i64, ptr %183, i64 %184
  %186 = load i64, ptr %185, align 8, !tbaa !9
  %187 = getelementptr inbounds ptr, ptr %182, i64 %186
  store ptr %179, ptr %187, align 8, !tbaa !5
  %188 = load ptr, ptr %11, align 8, !tbaa !5
  %189 = load ptr, ptr %21, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.rl_btree_node, ptr %189, i32 0, i32 2
  %191 = load ptr, ptr %190, align 8, !tbaa !21
  %192 = load ptr, ptr %13, align 8, !tbaa !5
  %193 = load i64, ptr %17, align 8, !tbaa !9
  %194 = getelementptr inbounds i64, ptr %192, i64 %193
  %195 = load i64, ptr %194, align 8, !tbaa !9
  %196 = getelementptr inbounds ptr, ptr %191, i64 %195
  store ptr %188, ptr %196, align 8, !tbaa !5
  %197 = load i64, ptr %20, align 8, !tbaa !9
  %198 = icmp ne i64 %197, -1
  br i1 %198, label %199, label %218

199:                                              ; preds = %178
  %200 = load ptr, ptr %21, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.rl_btree_node, ptr %200, i32 0, i32 1
  %202 = load ptr, ptr %201, align 8, !tbaa !16
  %203 = icmp ne ptr %202, null
  br i1 %203, label %207, label %204

204:                                              ; preds = %199
  %205 = load ptr, ptr @stderr, align 8, !tbaa !5
  %206 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef @.str) #6
  br label %207

207:                                              ; preds = %204, %199
  %208 = load i64, ptr %20, align 8, !tbaa !9
  %209 = load ptr, ptr %21, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.rl_btree_node, ptr %209, i32 0, i32 1
  %211 = load ptr, ptr %210, align 8, !tbaa !16
  %212 = load ptr, ptr %13, align 8, !tbaa !5
  %213 = load i64, ptr %17, align 8, !tbaa !9
  %214 = getelementptr inbounds i64, ptr %212, i64 %213
  %215 = load i64, ptr %214, align 8, !tbaa !9
  %216 = add nsw i64 %215, 1
  %217 = getelementptr inbounds i64, ptr %211, i64 %216
  store i64 %208, ptr %217, align 8, !tbaa !9
  br label %218

218:                                              ; preds = %207, %178
  %219 = load ptr, ptr %21, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.rl_btree_node, ptr %219, i32 0, i32 3
  %221 = load i64, ptr %220, align 8, !tbaa !18
  %222 = add nsw i64 %221, 1
  store i64 %222, ptr %220, align 8, !tbaa !18
  store ptr null, ptr %10, align 8, !tbaa !5
  store ptr null, ptr %11, align 8, !tbaa !5
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = load ptr, ptr %8, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.rl_btree, ptr %224, i32 0, i32 3
  %226 = load ptr, ptr %225, align 8, !tbaa !22
  %227 = getelementptr inbounds %struct.rl_btree_type, ptr %226, i32 0, i32 1
  %228 = load ptr, ptr %227, align 8, !tbaa !23
  %229 = load i64, ptr %19, align 8, !tbaa !9
  %230 = load ptr, ptr %21, align 8, !tbaa !5
  %231 = call i32 @rl_write(ptr noundef %223, ptr noundef %228, i64 noundef %229, ptr noundef %230)
  store i32 %231, ptr %12, align 4, !tbaa !13
  %232 = load i32, ptr %12, align 4, !tbaa !13
  %233 = icmp ne i32 0, %232
  br i1 %233, label %234, label %235

234:                                              ; preds = %218
  br label %874

235:                                              ; preds = %218
  br label %731

236:                                              ; preds = %81
  %237 = load ptr, ptr %13, align 8, !tbaa !5
  %238 = load i64, ptr %17, align 8, !tbaa !9
  %239 = getelementptr inbounds i64, ptr %237, i64 %238
  %240 = load i64, ptr %239, align 8, !tbaa !9
  store i64 %240, ptr %18, align 8, !tbaa !9
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = call i32 @rl_btree_node_create(ptr noundef %241, ptr noundef %242, ptr noundef %14)
  store i32 %243, ptr %12, align 4, !tbaa !13
  %244 = load i32, ptr %12, align 4, !tbaa !13
  %245 = icmp ne i32 0, %244
  br i1 %245, label %246, label %247

246:                                              ; preds = %236
  br label %874

247:                                              ; preds = %236
  %248 = load i64, ptr %20, align 8, !tbaa !9
  %249 = icmp ne i64 %248, -1
  br i1 %249, label %250, label %268

250:                                              ; preds = %247
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.rl_btree, ptr %251, i32 0, i32 1
  %253 = load i64, ptr %252, align 8, !tbaa !19
  %254 = add nsw i64 %253, 1
  %255 = mul i64 8, %254
  %256 = call noalias ptr @malloc(i64 noundef %255) #7
  %257 = load ptr, ptr %14, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.rl_btree_node, ptr %257, i32 0, i32 1
  store ptr %256, ptr %258, align 8, !tbaa !16
  %259 = load ptr, ptr %14, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.rl_btree_node, ptr %259, i32 0, i32 1
  %261 = load ptr, ptr %260, align 8, !tbaa !16
  %262 = icmp ne ptr %261, null
  br i1 %262, label %267, label %263

263:                                              ; preds = %250
  %264 = load ptr, ptr %7, align 8, !tbaa !5
  %265 = load ptr, ptr %14, align 8, !tbaa !5
  %266 = call i32 @rl_btree_node_destroy(ptr noundef %264, ptr noundef %265)
  store i32 4, ptr %12, align 4, !tbaa !13
  br label %874

267:                                              ; preds = %250
  br label %268

268:                                              ; preds = %267, %247
  %269 = load i64, ptr %18, align 8, !tbaa !9
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.rl_btree, ptr %270, i32 0, i32 1
  %272 = load i64, ptr %271, align 8, !tbaa !19
  %273 = sdiv i64 %272, 2
  %274 = icmp slt i64 %269, %273
  br i1 %274, label %275, label %428

275:                                              ; preds = %268
  %276 = load i64, ptr %20, align 8, !tbaa !9
  %277 = icmp ne i64 %276, -1
  br i1 %277, label %278, label %323

278:                                              ; preds = %275
  %279 = load ptr, ptr %14, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.rl_btree_node, ptr %279, i32 0, i32 1
  %281 = load ptr, ptr %280, align 8, !tbaa !16
  %282 = load ptr, ptr %21, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.rl_btree_node, ptr %282, i32 0, i32 1
  %284 = load ptr, ptr %283, align 8, !tbaa !16
  %285 = load ptr, ptr %8, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.rl_btree, ptr %285, i32 0, i32 1
  %287 = load i64, ptr %286, align 8, !tbaa !19
  %288 = sdiv i64 %287, 2
  %289 = getelementptr inbounds i64, ptr %284, i64 %288
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.rl_btree, ptr %290, i32 0, i32 1
  %292 = load i64, ptr %291, align 8, !tbaa !19
  %293 = sdiv i64 %292, 2
  %294 = add nsw i64 %293, 1
  %295 = mul i64 8, %294
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %281, ptr align 8 %289, i64 %295, i1 false)
  %296 = load ptr, ptr %21, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.rl_btree_node, ptr %296, i32 0, i32 1
  %298 = load ptr, ptr %297, align 8, !tbaa !16
  %299 = load i64, ptr %18, align 8, !tbaa !9
  %300 = add nsw i64 %299, 2
  %301 = getelementptr inbounds i64, ptr %298, i64 %300
  %302 = load ptr, ptr %21, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.rl_btree_node, ptr %302, i32 0, i32 1
  %304 = load ptr, ptr %303, align 8, !tbaa !16
  %305 = load i64, ptr %18, align 8, !tbaa !9
  %306 = add nsw i64 %305, 1
  %307 = getelementptr inbounds i64, ptr %304, i64 %306
  %308 = load ptr, ptr %8, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.rl_btree, ptr %308, i32 0, i32 1
  %310 = load i64, ptr %309, align 8, !tbaa !19
  %311 = sdiv i64 %310, 2
  %312 = sub nsw i64 %311, 1
  %313 = load i64, ptr %18, align 8, !tbaa !9
  %314 = sub nsw i64 %312, %313
  %315 = mul i64 8, %314
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %301, ptr align 8 %307, i64 %315, i1 false)
  %316 = load i64, ptr %20, align 8, !tbaa !9
  %317 = load ptr, ptr %21, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.rl_btree_node, ptr %317, i32 0, i32 1
  %319 = load ptr, ptr %318, align 8, !tbaa !16
  %320 = load i64, ptr %18, align 8, !tbaa !9
  %321 = add nsw i64 %320, 1
  %322 = getelementptr inbounds i64, ptr %319, i64 %321
  store i64 %316, ptr %322, align 8, !tbaa !9
  br label %323

323:                                              ; preds = %278, %275
  %324 = load ptr, ptr %21, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.rl_btree_node, ptr %324, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !20
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.rl_btree, ptr %327, i32 0, i32 1
  %329 = load i64, ptr %328, align 8, !tbaa !19
  %330 = sdiv i64 %329, 2
  %331 = sub nsw i64 %330, 1
  %332 = getelementptr inbounds ptr, ptr %326, i64 %331
  %333 = load ptr, ptr %332, align 8, !tbaa !5
  store ptr %333, ptr %16, align 8, !tbaa !5
  %334 = load ptr, ptr %21, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.rl_btree_node, ptr %334, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !20
  %337 = load i64, ptr %18, align 8, !tbaa !9
  %338 = add nsw i64 %337, 1
  %339 = getelementptr inbounds ptr, ptr %336, i64 %338
  %340 = load ptr, ptr %21, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.rl_btree_node, ptr %340, i32 0, i32 0
  %342 = load ptr, ptr %341, align 8, !tbaa !20
  %343 = load i64, ptr %18, align 8, !tbaa !9
  %344 = getelementptr inbounds ptr, ptr %342, i64 %343
  %345 = load ptr, ptr %8, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.rl_btree, ptr %345, i32 0, i32 1
  %347 = load i64, ptr %346, align 8, !tbaa !19
  %348 = sdiv i64 %347, 2
  %349 = sub nsw i64 %348, 1
  %350 = load i64, ptr %18, align 8, !tbaa !9
  %351 = sub nsw i64 %349, %350
  %352 = mul i64 8, %351
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %339, ptr align 8 %344, i64 %352, i1 false)
  %353 = load ptr, ptr %10, align 8, !tbaa !5
  %354 = load ptr, ptr %21, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.rl_btree_node, ptr %354, i32 0, i32 0
  %356 = load ptr, ptr %355, align 8, !tbaa !20
  %357 = load i64, ptr %18, align 8, !tbaa !9
  %358 = getelementptr inbounds ptr, ptr %356, i64 %357
  store ptr %353, ptr %358, align 8, !tbaa !5
  %359 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %359, ptr %10, align 8, !tbaa !5
  %360 = load ptr, ptr %14, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.rl_btree_node, ptr %360, i32 0, i32 0
  %362 = load ptr, ptr %361, align 8, !tbaa !20
  %363 = load ptr, ptr %21, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.rl_btree_node, ptr %363, i32 0, i32 0
  %365 = load ptr, ptr %364, align 8, !tbaa !20
  %366 = load ptr, ptr %8, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.rl_btree, ptr %366, i32 0, i32 1
  %368 = load i64, ptr %367, align 8, !tbaa !19
  %369 = sdiv i64 %368, 2
  %370 = getelementptr inbounds ptr, ptr %365, i64 %369
  %371 = load ptr, ptr %8, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.rl_btree, ptr %371, i32 0, i32 1
  %373 = load i64, ptr %372, align 8, !tbaa !19
  %374 = mul i64 8, %373
  %375 = udiv i64 %374, 2
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %362, ptr align 8 %370, i64 %375, i1 false)
  %376 = load ptr, ptr %21, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.rl_btree_node, ptr %376, i32 0, i32 2
  %378 = load ptr, ptr %377, align 8, !tbaa !21
  %379 = load ptr, ptr %8, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.rl_btree, ptr %379, i32 0, i32 1
  %381 = load i64, ptr %380, align 8, !tbaa !19
  %382 = sdiv i64 %381, 2
  %383 = sub nsw i64 %382, 1
  %384 = getelementptr inbounds ptr, ptr %378, i64 %383
  %385 = load ptr, ptr %384, align 8, !tbaa !5
  store ptr %385, ptr %16, align 8, !tbaa !5
  %386 = load ptr, ptr %21, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.rl_btree_node, ptr %386, i32 0, i32 2
  %388 = load ptr, ptr %387, align 8, !tbaa !21
  %389 = load i64, ptr %18, align 8, !tbaa !9
  %390 = add nsw i64 %389, 1
  %391 = getelementptr inbounds ptr, ptr %388, i64 %390
  %392 = load ptr, ptr %21, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.rl_btree_node, ptr %392, i32 0, i32 2
  %394 = load ptr, ptr %393, align 8, !tbaa !21
  %395 = load i64, ptr %18, align 8, !tbaa !9
  %396 = getelementptr inbounds ptr, ptr %394, i64 %395
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.rl_btree, ptr %397, i32 0, i32 1
  %399 = load i64, ptr %398, align 8, !tbaa !19
  %400 = sdiv i64 %399, 2
  %401 = sub nsw i64 %400, 1
  %402 = load i64, ptr %18, align 8, !tbaa !9
  %403 = sub nsw i64 %401, %402
  %404 = mul i64 8, %403
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %391, ptr align 8 %396, i64 %404, i1 false)
  %405 = load ptr, ptr %11, align 8, !tbaa !5
  %406 = load ptr, ptr %21, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.rl_btree_node, ptr %406, i32 0, i32 2
  %408 = load ptr, ptr %407, align 8, !tbaa !21
  %409 = load i64, ptr %18, align 8, !tbaa !9
  %410 = getelementptr inbounds ptr, ptr %408, i64 %409
  store ptr %405, ptr %410, align 8, !tbaa !5
  %411 = load ptr, ptr %14, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.rl_btree_node, ptr %411, i32 0, i32 2
  %413 = load ptr, ptr %412, align 8, !tbaa !21
  %414 = load ptr, ptr %21, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.rl_btree_node, ptr %414, i32 0, i32 2
  %416 = load ptr, ptr %415, align 8, !tbaa !21
  %417 = load ptr, ptr %8, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.rl_btree, ptr %417, i32 0, i32 1
  %419 = load i64, ptr %418, align 8, !tbaa !19
  %420 = sdiv i64 %419, 2
  %421 = getelementptr inbounds ptr, ptr %416, i64 %420
  %422 = load ptr, ptr %8, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.rl_btree, ptr %422, i32 0, i32 1
  %424 = load i64, ptr %423, align 8, !tbaa !19
  %425 = mul i64 8, %424
  %426 = udiv i64 %425, 2
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %413, ptr align 8 %421, i64 %426, i1 false)
  %427 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %427, ptr %11, align 8, !tbaa !5
  br label %428

428:                                              ; preds = %323, %268
  %429 = load i64, ptr %18, align 8, !tbaa !9
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.rl_btree, ptr %430, i32 0, i32 1
  %432 = load i64, ptr %431, align 8, !tbaa !19
  %433 = sdiv i64 %432, 2
  %434 = icmp eq i64 %429, %433
  br i1 %434, label %435, label %495

435:                                              ; preds = %428
  %436 = load i64, ptr %20, align 8, !tbaa !9
  %437 = icmp ne i64 %436, -1
  br i1 %437, label %438, label %462

438:                                              ; preds = %435
  %439 = load ptr, ptr %14, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.rl_btree_node, ptr %439, i32 0, i32 1
  %441 = load ptr, ptr %440, align 8, !tbaa !16
  %442 = getelementptr inbounds i64, ptr %441, i64 1
  %443 = load ptr, ptr %21, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.rl_btree_node, ptr %443, i32 0, i32 1
  %445 = load ptr, ptr %444, align 8, !tbaa !16
  %446 = load ptr, ptr %8, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.rl_btree, ptr %446, i32 0, i32 1
  %448 = load i64, ptr %447, align 8, !tbaa !19
  %449 = sdiv i64 %448, 2
  %450 = add nsw i64 %449, 1
  %451 = getelementptr inbounds i64, ptr %445, i64 %450
  %452 = load ptr, ptr %8, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.rl_btree, ptr %452, i32 0, i32 1
  %454 = load i64, ptr %453, align 8, !tbaa !19
  %455 = sdiv i64 %454, 2
  %456 = mul i64 8, %455
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %442, ptr align 8 %451, i64 %456, i1 false)
  %457 = load i64, ptr %20, align 8, !tbaa !9
  %458 = load ptr, ptr %14, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.rl_btree_node, ptr %458, i32 0, i32 1
  %460 = load ptr, ptr %459, align 8, !tbaa !16
  %461 = getelementptr inbounds i64, ptr %460, i64 0
  store i64 %457, ptr %461, align 8, !tbaa !9
  br label %462

462:                                              ; preds = %438, %435
  %463 = load ptr, ptr %14, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.rl_btree_node, ptr %463, i32 0, i32 0
  %465 = load ptr, ptr %464, align 8, !tbaa !20
  %466 = load ptr, ptr %21, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.rl_btree_node, ptr %466, i32 0, i32 0
  %468 = load ptr, ptr %467, align 8, !tbaa !20
  %469 = load ptr, ptr %8, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.rl_btree, ptr %469, i32 0, i32 1
  %471 = load i64, ptr %470, align 8, !tbaa !19
  %472 = sdiv i64 %471, 2
  %473 = getelementptr inbounds ptr, ptr %468, i64 %472
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.rl_btree, ptr %474, i32 0, i32 1
  %476 = load i64, ptr %475, align 8, !tbaa !19
  %477 = mul i64 8, %476
  %478 = udiv i64 %477, 2
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %465, ptr align 8 %473, i64 %478, i1 false)
  %479 = load ptr, ptr %14, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.rl_btree_node, ptr %479, i32 0, i32 2
  %481 = load ptr, ptr %480, align 8, !tbaa !21
  %482 = load ptr, ptr %21, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.rl_btree_node, ptr %482, i32 0, i32 2
  %484 = load ptr, ptr %483, align 8, !tbaa !21
  %485 = load ptr, ptr %8, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.rl_btree, ptr %485, i32 0, i32 1
  %487 = load i64, ptr %486, align 8, !tbaa !19
  %488 = sdiv i64 %487, 2
  %489 = getelementptr inbounds ptr, ptr %484, i64 %488
  %490 = load ptr, ptr %8, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.rl_btree, ptr %490, i32 0, i32 1
  %492 = load i64, ptr %491, align 8, !tbaa !19
  %493 = mul i64 8, %492
  %494 = udiv i64 %493, 2
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %481, ptr align 8 %489, i64 %494, i1 false)
  br label %495

495:                                              ; preds = %462, %428
  %496 = load i64, ptr %18, align 8, !tbaa !9
  %497 = load ptr, ptr %8, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.rl_btree, ptr %497, i32 0, i32 1
  %499 = load i64, ptr %498, align 8, !tbaa !19
  %500 = sdiv i64 %499, 2
  %501 = icmp sgt i64 %496, %500
  br i1 %501, label %502, label %686

502:                                              ; preds = %495
  %503 = load i64, ptr %20, align 8, !tbaa !9
  %504 = icmp ne i64 %503, -1
  br i1 %504, label %505, label %559

505:                                              ; preds = %502
  %506 = load ptr, ptr %14, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.rl_btree_node, ptr %506, i32 0, i32 1
  %508 = load ptr, ptr %507, align 8, !tbaa !16
  %509 = load ptr, ptr %21, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.rl_btree_node, ptr %509, i32 0, i32 1
  %511 = load ptr, ptr %510, align 8, !tbaa !16
  %512 = load ptr, ptr %8, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.rl_btree, ptr %512, i32 0, i32 1
  %514 = load i64, ptr %513, align 8, !tbaa !19
  %515 = sdiv i64 %514, 2
  %516 = add nsw i64 %515, 1
  %517 = getelementptr inbounds i64, ptr %511, i64 %516
  %518 = load i64, ptr %18, align 8, !tbaa !9
  %519 = load ptr, ptr %8, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.rl_btree, ptr %519, i32 0, i32 1
  %521 = load i64, ptr %520, align 8, !tbaa !19
  %522 = sdiv i64 %521, 2
  %523 = sub nsw i64 %518, %522
  %524 = mul i64 8, %523
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %508, ptr align 8 %517, i64 %524, i1 false)
  %525 = load i64, ptr %20, align 8, !tbaa !9
  %526 = load ptr, ptr %14, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.rl_btree_node, ptr %526, i32 0, i32 1
  %528 = load ptr, ptr %527, align 8, !tbaa !16
  %529 = load i64, ptr %18, align 8, !tbaa !9
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.rl_btree, ptr %530, i32 0, i32 1
  %532 = load i64, ptr %531, align 8, !tbaa !19
  %533 = sdiv i64 %532, 2
  %534 = sub nsw i64 %529, %533
  %535 = getelementptr inbounds i64, ptr %528, i64 %534
  store i64 %525, ptr %535, align 8, !tbaa !9
  %536 = load ptr, ptr %14, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.rl_btree_node, ptr %536, i32 0, i32 1
  %538 = load ptr, ptr %537, align 8, !tbaa !16
  %539 = load i64, ptr %18, align 8, !tbaa !9
  %540 = load ptr, ptr %8, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.rl_btree, ptr %540, i32 0, i32 1
  %542 = load i64, ptr %541, align 8, !tbaa !19
  %543 = sdiv i64 %542, 2
  %544 = sub nsw i64 %539, %543
  %545 = add nsw i64 %544, 1
  %546 = getelementptr inbounds i64, ptr %538, i64 %545
  %547 = load ptr, ptr %21, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.rl_btree_node, ptr %547, i32 0, i32 1
  %549 = load ptr, ptr %548, align 8, !tbaa !16
  %550 = load i64, ptr %18, align 8, !tbaa !9
  %551 = add nsw i64 %550, 1
  %552 = getelementptr inbounds i64, ptr %549, i64 %551
  %553 = load ptr, ptr %8, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.rl_btree, ptr %553, i32 0, i32 1
  %555 = load i64, ptr %554, align 8, !tbaa !19
  %556 = load i64, ptr %18, align 8, !tbaa !9
  %557 = sub nsw i64 %555, %556
  %558 = mul i64 8, %557
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %546, ptr align 8 %552, i64 %558, i1 false)
  br label %559

559:                                              ; preds = %505, %502
  %560 = load ptr, ptr %21, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.rl_btree_node, ptr %560, i32 0, i32 0
  %562 = load ptr, ptr %561, align 8, !tbaa !20
  %563 = load ptr, ptr %8, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.rl_btree, ptr %563, i32 0, i32 1
  %565 = load i64, ptr %564, align 8, !tbaa !19
  %566 = sdiv i64 %565, 2
  %567 = getelementptr inbounds ptr, ptr %562, i64 %566
  %568 = load ptr, ptr %567, align 8, !tbaa !5
  store ptr %568, ptr %16, align 8, !tbaa !5
  %569 = load ptr, ptr %14, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.rl_btree_node, ptr %569, i32 0, i32 0
  %571 = load ptr, ptr %570, align 8, !tbaa !20
  %572 = load ptr, ptr %21, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.rl_btree_node, ptr %572, i32 0, i32 0
  %574 = load ptr, ptr %573, align 8, !tbaa !20
  %575 = load ptr, ptr %8, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.rl_btree, ptr %575, i32 0, i32 1
  %577 = load i64, ptr %576, align 8, !tbaa !19
  %578 = sdiv i64 %577, 2
  %579 = add nsw i64 %578, 1
  %580 = getelementptr inbounds ptr, ptr %574, i64 %579
  %581 = load i64, ptr %18, align 8, !tbaa !9
  %582 = load ptr, ptr %8, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.rl_btree, ptr %582, i32 0, i32 1
  %584 = load i64, ptr %583, align 8, !tbaa !19
  %585 = sdiv i64 %584, 2
  %586 = sub nsw i64 %581, %585
  %587 = sub nsw i64 %586, 1
  %588 = mul i64 8, %587
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %571, ptr align 8 %580, i64 %588, i1 false)
  %589 = load ptr, ptr %10, align 8, !tbaa !5
  %590 = load ptr, ptr %14, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.rl_btree_node, ptr %590, i32 0, i32 0
  %592 = load ptr, ptr %591, align 8, !tbaa !20
  %593 = load i64, ptr %18, align 8, !tbaa !9
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.rl_btree, ptr %594, i32 0, i32 1
  %596 = load i64, ptr %595, align 8, !tbaa !19
  %597 = sdiv i64 %596, 2
  %598 = sub nsw i64 %593, %597
  %599 = sub nsw i64 %598, 1
  %600 = getelementptr inbounds ptr, ptr %592, i64 %599
  store ptr %589, ptr %600, align 8, !tbaa !5
  %601 = load ptr, ptr %14, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.rl_btree_node, ptr %601, i32 0, i32 0
  %603 = load ptr, ptr %602, align 8, !tbaa !20
  %604 = load i64, ptr %18, align 8, !tbaa !9
  %605 = load ptr, ptr %8, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.rl_btree, ptr %605, i32 0, i32 1
  %607 = load i64, ptr %606, align 8, !tbaa !19
  %608 = sdiv i64 %607, 2
  %609 = sub nsw i64 %604, %608
  %610 = getelementptr inbounds ptr, ptr %603, i64 %609
  %611 = load ptr, ptr %21, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.rl_btree_node, ptr %611, i32 0, i32 0
  %613 = load ptr, ptr %612, align 8, !tbaa !20
  %614 = load i64, ptr %18, align 8, !tbaa !9
  %615 = getelementptr inbounds ptr, ptr %613, i64 %614
  %616 = load ptr, ptr %8, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.rl_btree, ptr %616, i32 0, i32 1
  %618 = load i64, ptr %617, align 8, !tbaa !19
  %619 = load i64, ptr %18, align 8, !tbaa !9
  %620 = sub nsw i64 %618, %619
  %621 = mul i64 8, %620
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %610, ptr align 8 %615, i64 %621, i1 false)
  %622 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %622, ptr %10, align 8, !tbaa !5
  %623 = load ptr, ptr %21, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.rl_btree_node, ptr %623, i32 0, i32 2
  %625 = load ptr, ptr %624, align 8, !tbaa !21
  %626 = load ptr, ptr %8, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.rl_btree, ptr %626, i32 0, i32 1
  %628 = load i64, ptr %627, align 8, !tbaa !19
  %629 = sdiv i64 %628, 2
  %630 = getelementptr inbounds ptr, ptr %625, i64 %629
  %631 = load ptr, ptr %630, align 8, !tbaa !5
  store ptr %631, ptr %16, align 8, !tbaa !5
  %632 = load ptr, ptr %14, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.rl_btree_node, ptr %632, i32 0, i32 2
  %634 = load ptr, ptr %633, align 8, !tbaa !21
  %635 = load ptr, ptr %21, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.rl_btree_node, ptr %635, i32 0, i32 2
  %637 = load ptr, ptr %636, align 8, !tbaa !21
  %638 = load ptr, ptr %8, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.rl_btree, ptr %638, i32 0, i32 1
  %640 = load i64, ptr %639, align 8, !tbaa !19
  %641 = sdiv i64 %640, 2
  %642 = add nsw i64 %641, 1
  %643 = getelementptr inbounds ptr, ptr %637, i64 %642
  %644 = load i64, ptr %18, align 8, !tbaa !9
  %645 = load ptr, ptr %8, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.rl_btree, ptr %645, i32 0, i32 1
  %647 = load i64, ptr %646, align 8, !tbaa !19
  %648 = sdiv i64 %647, 2
  %649 = sub nsw i64 %644, %648
  %650 = sub nsw i64 %649, 1
  %651 = mul i64 8, %650
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %634, ptr align 8 %643, i64 %651, i1 false)
  %652 = load ptr, ptr %11, align 8, !tbaa !5
  %653 = load ptr, ptr %14, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.rl_btree_node, ptr %653, i32 0, i32 2
  %655 = load ptr, ptr %654, align 8, !tbaa !21
  %656 = load i64, ptr %18, align 8, !tbaa !9
  %657 = load ptr, ptr %8, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.rl_btree, ptr %657, i32 0, i32 1
  %659 = load i64, ptr %658, align 8, !tbaa !19
  %660 = sdiv i64 %659, 2
  %661 = sub nsw i64 %656, %660
  %662 = sub nsw i64 %661, 1
  %663 = getelementptr inbounds ptr, ptr %655, i64 %662
  store ptr %652, ptr %663, align 8, !tbaa !5
  %664 = load ptr, ptr %14, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.rl_btree_node, ptr %664, i32 0, i32 2
  %666 = load ptr, ptr %665, align 8, !tbaa !21
  %667 = load i64, ptr %18, align 8, !tbaa !9
  %668 = load ptr, ptr %8, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.rl_btree, ptr %668, i32 0, i32 1
  %670 = load i64, ptr %669, align 8, !tbaa !19
  %671 = sdiv i64 %670, 2
  %672 = sub nsw i64 %667, %671
  %673 = getelementptr inbounds ptr, ptr %666, i64 %672
  %674 = load ptr, ptr %21, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.rl_btree_node, ptr %674, i32 0, i32 2
  %676 = load ptr, ptr %675, align 8, !tbaa !21
  %677 = load i64, ptr %18, align 8, !tbaa !9
  %678 = getelementptr inbounds ptr, ptr %676, i64 %677
  %679 = load ptr, ptr %8, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.rl_btree, ptr %679, i32 0, i32 1
  %681 = load i64, ptr %680, align 8, !tbaa !19
  %682 = load i64, ptr %18, align 8, !tbaa !9
  %683 = sub nsw i64 %681, %682
  %684 = mul i64 8, %683
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %673, ptr align 8 %678, i64 %684, i1 false)
  %685 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %685, ptr %11, align 8, !tbaa !5
  br label %686

686:                                              ; preds = %559, %495
  %687 = load ptr, ptr %8, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.rl_btree, ptr %687, i32 0, i32 1
  %689 = load i64, ptr %688, align 8, !tbaa !19
  %690 = sdiv i64 %689, 2
  %691 = load ptr, ptr %14, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.rl_btree_node, ptr %691, i32 0, i32 3
  store i64 %690, ptr %692, align 8, !tbaa !18
  %693 = load ptr, ptr %21, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.rl_btree_node, ptr %693, i32 0, i32 3
  store i64 %690, ptr %694, align 8, !tbaa !18
  %695 = load ptr, ptr %7, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.rlite, ptr %695, i32 0, i32 5
  %697 = load i64, ptr %696, align 8, !tbaa !25
  store i64 %697, ptr %20, align 8, !tbaa !9
  %698 = load ptr, ptr %7, align 8, !tbaa !5
  %699 = load ptr, ptr %8, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.rl_btree, ptr %699, i32 0, i32 3
  %701 = load ptr, ptr %700, align 8, !tbaa !22
  %702 = getelementptr inbounds %struct.rl_btree_type, ptr %701, i32 0, i32 1
  %703 = load ptr, ptr %702, align 8, !tbaa !23
  %704 = load i64, ptr %19, align 8, !tbaa !9
  %705 = load ptr, ptr %21, align 8, !tbaa !5
  %706 = call i32 @rl_write(ptr noundef %698, ptr noundef %703, i64 noundef %704, ptr noundef %705)
  store i32 %706, ptr %12, align 4, !tbaa !13
  %707 = load i32, ptr %12, align 4, !tbaa !13
  %708 = icmp ne i32 %707, 0
  br i1 %708, label %709, label %713

709:                                              ; preds = %686
  %710 = load ptr, ptr %7, align 8, !tbaa !5
  %711 = load ptr, ptr %14, align 8, !tbaa !5
  %712 = call i32 @rl_btree_node_destroy(ptr noundef %710, ptr noundef %711)
  br label %874

713:                                              ; preds = %686
  %714 = load ptr, ptr %7, align 8, !tbaa !5
  %715 = load ptr, ptr %8, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.rl_btree, ptr %715, i32 0, i32 3
  %717 = load ptr, ptr %716, align 8, !tbaa !22
  %718 = getelementptr inbounds %struct.rl_btree_type, ptr %717, i32 0, i32 1
  %719 = load ptr, ptr %718, align 8, !tbaa !23
  %720 = load i64, ptr %20, align 8, !tbaa !9
  %721 = load ptr, ptr %14, align 8, !tbaa !5
  %722 = call i32 @rl_write(ptr noundef %714, ptr noundef %719, i64 noundef %720, ptr noundef %721)
  store i32 %722, ptr %12, align 4, !tbaa !13
  %723 = load i32, ptr %12, align 4, !tbaa !13
  %724 = icmp ne i32 0, %723
  br i1 %724, label %725, label %726

725:                                              ; preds = %713
  br label %874

726:                                              ; preds = %713
  br label %727

727:                                              ; preds = %726
  br label %728

728:                                              ; preds = %727
  %729 = load i64, ptr %17, align 8, !tbaa !9
  %730 = add nsw i64 %729, -1
  store i64 %730, ptr %17, align 8, !tbaa !9
  br label %56, !llvm.loop !27

731:                                              ; preds = %235, %56
  %732 = load ptr, ptr %10, align 8, !tbaa !5
  %733 = icmp ne ptr %732, null
  br i1 %733, label %734, label %856

734:                                              ; preds = %731
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %735 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %735, ptr %22, align 8, !tbaa !5
  %736 = load ptr, ptr %7, align 8, !tbaa !5
  %737 = load ptr, ptr %8, align 8, !tbaa !5
  %738 = call i32 @rl_btree_node_create(ptr noundef %736, ptr noundef %737, ptr noundef %21)
  store i32 %738, ptr %12, align 4, !tbaa !13
  %739 = load i32, ptr %12, align 4, !tbaa !13
  %740 = icmp ne i32 0, %739
  br i1 %740, label %741, label %742

741:                                              ; preds = %734
  store i32 2, ptr %23, align 4
  br label %853

742:                                              ; preds = %734
  %743 = load ptr, ptr %21, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.rl_btree_node, ptr %743, i32 0, i32 3
  store i64 1, ptr %744, align 8, !tbaa !18
  %745 = load ptr, ptr %10, align 8, !tbaa !5
  %746 = load ptr, ptr %21, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.rl_btree_node, ptr %746, i32 0, i32 0
  %748 = load ptr, ptr %747, align 8, !tbaa !20
  %749 = getelementptr inbounds ptr, ptr %748, i64 0
  store ptr %745, ptr %749, align 8, !tbaa !5
  %750 = load ptr, ptr %11, align 8, !tbaa !5
  %751 = load ptr, ptr %21, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.rl_btree_node, ptr %751, i32 0, i32 2
  %753 = load ptr, ptr %752, align 8, !tbaa !21
  %754 = getelementptr inbounds ptr, ptr %753, i64 0
  store ptr %750, ptr %754, align 8, !tbaa !5
  store ptr null, ptr %11, align 8, !tbaa !5
  store ptr null, ptr %10, align 8, !tbaa !5
  %755 = load ptr, ptr %22, align 8, !tbaa !5
  %756 = icmp ne ptr %755, null
  br i1 %756, label %757, label %812

757:                                              ; preds = %742
  %758 = load ptr, ptr %8, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.rl_btree, ptr %758, i32 0, i32 1
  %760 = load i64, ptr %759, align 8, !tbaa !19
  %761 = add nsw i64 %760, 1
  %762 = mul i64 8, %761
  %763 = call noalias ptr @malloc(i64 noundef %762) #7
  %764 = load ptr, ptr %21, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.rl_btree_node, ptr %764, i32 0, i32 1
  store ptr %763, ptr %765, align 8, !tbaa !16
  %766 = load ptr, ptr %21, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.rl_btree_node, ptr %766, i32 0, i32 1
  %768 = load ptr, ptr %767, align 8, !tbaa !16
  %769 = icmp ne ptr %768, null
  br i1 %769, label %774, label %770

770:                                              ; preds = %757
  store i32 4, ptr %12, align 4, !tbaa !13
  %771 = load ptr, ptr %7, align 8, !tbaa !5
  %772 = load ptr, ptr %21, align 8, !tbaa !5
  %773 = call i32 @rl_btree_node_destroy(ptr noundef %771, ptr noundef %772)
  store i32 2, ptr %23, align 4
  br label %853

774:                                              ; preds = %757
  %775 = load i64, ptr %19, align 8, !tbaa !9
  %776 = icmp eq i64 %775, 0
  br i1 %776, label %777, label %781

777:                                              ; preds = %774
  %778 = load ptr, ptr %7, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.rlite, ptr %778, i32 0, i32 5
  %780 = load i64, ptr %779, align 8, !tbaa !25
  store i64 %780, ptr %19, align 8, !tbaa !9
  br label %781

781:                                              ; preds = %777, %774
  %782 = load i64, ptr %19, align 8, !tbaa !9
  %783 = load ptr, ptr %21, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.rl_btree_node, ptr %783, i32 0, i32 1
  %785 = load ptr, ptr %784, align 8, !tbaa !16
  %786 = getelementptr inbounds i64, ptr %785, i64 0
  store i64 %782, ptr %786, align 8, !tbaa !9
  %787 = load ptr, ptr %7, align 8, !tbaa !5
  %788 = load ptr, ptr %8, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.rl_btree, ptr %788, i32 0, i32 3
  %790 = load ptr, ptr %789, align 8, !tbaa !22
  %791 = getelementptr inbounds %struct.rl_btree_type, ptr %790, i32 0, i32 1
  %792 = load ptr, ptr %791, align 8, !tbaa !23
  %793 = load ptr, ptr %21, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.rl_btree_node, ptr %793, i32 0, i32 1
  %795 = load ptr, ptr %794, align 8, !tbaa !16
  %796 = getelementptr inbounds i64, ptr %795, i64 0
  %797 = load i64, ptr %796, align 8, !tbaa !9
  %798 = load ptr, ptr %22, align 8, !tbaa !5
  %799 = call i32 @rl_write(ptr noundef %787, ptr noundef %792, i64 noundef %797, ptr noundef %798)
  store i32 %799, ptr %12, align 4, !tbaa !13
  %800 = load i32, ptr %12, align 4, !tbaa !13
  %801 = icmp ne i32 %800, 0
  br i1 %801, label %802, label %806

802:                                              ; preds = %781
  %803 = load ptr, ptr %7, align 8, !tbaa !5
  %804 = load ptr, ptr %21, align 8, !tbaa !5
  %805 = call i32 @rl_btree_node_destroy(ptr noundef %803, ptr noundef %804)
  store i32 2, ptr %23, align 4
  br label %853

806:                                              ; preds = %781
  %807 = load i64, ptr %20, align 8, !tbaa !9
  %808 = load ptr, ptr %21, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.rl_btree_node, ptr %808, i32 0, i32 1
  %810 = load ptr, ptr %809, align 8, !tbaa !16
  %811 = getelementptr inbounds i64, ptr %810, i64 1
  store i64 %807, ptr %811, align 8, !tbaa !9
  br label %828

812:                                              ; preds = %742
  %813 = load ptr, ptr %8, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.rl_btree, ptr %813, i32 0, i32 4
  %815 = load i64, ptr %814, align 8, !tbaa !15
  %816 = icmp ne i64 %815, 0
  br i1 %816, label %817, label %827

817:                                              ; preds = %812
  %818 = load ptr, ptr %7, align 8, !tbaa !5
  %819 = load ptr, ptr %8, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.rl_btree, ptr %819, i32 0, i32 4
  %821 = load i64, ptr %820, align 8, !tbaa !15
  %822 = call i32 @rl_delete(ptr noundef %818, i64 noundef %821)
  store i32 %822, ptr %12, align 4, !tbaa !13
  %823 = load i32, ptr %12, align 4, !tbaa !13
  %824 = icmp ne i32 0, %823
  br i1 %824, label %825, label %826

825:                                              ; preds = %817
  store i32 2, ptr %23, align 4
  br label %853

826:                                              ; preds = %817
  br label %827

827:                                              ; preds = %826, %812
  br label %828

828:                                              ; preds = %827, %806
  %829 = load ptr, ptr %7, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.rlite, ptr %829, i32 0, i32 5
  %831 = load i64, ptr %830, align 8, !tbaa !25
  %832 = load ptr, ptr %8, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.rl_btree, ptr %832, i32 0, i32 4
  store i64 %831, ptr %833, align 8, !tbaa !15
  %834 = load ptr, ptr %7, align 8, !tbaa !5
  %835 = load ptr, ptr %8, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.rl_btree, ptr %835, i32 0, i32 3
  %837 = load ptr, ptr %836, align 8, !tbaa !22
  %838 = getelementptr inbounds %struct.rl_btree_type, ptr %837, i32 0, i32 1
  %839 = load ptr, ptr %838, align 8, !tbaa !23
  %840 = load ptr, ptr %8, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.rl_btree, ptr %840, i32 0, i32 4
  %842 = load i64, ptr %841, align 8, !tbaa !15
  %843 = load ptr, ptr %21, align 8, !tbaa !5
  %844 = call i32 @rl_write(ptr noundef %834, ptr noundef %839, i64 noundef %842, ptr noundef %843)
  store i32 %844, ptr %12, align 4, !tbaa !13
  %845 = load i32, ptr %12, align 4, !tbaa !13
  %846 = icmp ne i32 0, %845
  br i1 %846, label %847, label %848

847:                                              ; preds = %828
  store i32 2, ptr %23, align 4
  br label %853

848:                                              ; preds = %828
  %849 = load ptr, ptr %8, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.rl_btree, ptr %849, i32 0, i32 2
  %851 = load i64, ptr %850, align 8, !tbaa !11
  %852 = add nsw i64 %851, 1
  store i64 %852, ptr %850, align 8, !tbaa !11
  store i32 0, ptr %23, align 4
  br label %853

853:                                              ; preds = %848, %847, %825, %802, %770, %741
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  %854 = load i32, ptr %23, align 4
  switch i32 %854, label %884 [
    i32 0, label %855
    i32 2, label %874
  ]

855:                                              ; preds = %853
  br label %856

856:                                              ; preds = %855, %731
  %857 = load ptr, ptr %8, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.rl_btree, ptr %857, i32 0, i32 5
  %859 = load i64, ptr %858, align 8, !tbaa !29
  %860 = add nsw i64 %859, 1
  store i64 %860, ptr %858, align 8, !tbaa !29
  %861 = load ptr, ptr %7, align 8, !tbaa !5
  %862 = load ptr, ptr %8, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.rl_btree, ptr %862, i32 0, i32 3
  %864 = load ptr, ptr %863, align 8, !tbaa !22
  %865 = getelementptr inbounds %struct.rl_btree_type, ptr %864, i32 0, i32 0
  %866 = load ptr, ptr %865, align 8, !tbaa !30
  %867 = load i64, ptr %9, align 8, !tbaa !9
  %868 = load ptr, ptr %8, align 8, !tbaa !5
  %869 = call i32 @rl_write(ptr noundef %861, ptr noundef %866, i64 noundef %867, ptr noundef %868)
  store i32 %869, ptr %12, align 4, !tbaa !13
  %870 = load i32, ptr %12, align 4, !tbaa !13
  %871 = icmp ne i32 0, %870
  br i1 %871, label %872, label %873

872:                                              ; preds = %856
  br label %874

873:                                              ; preds = %856
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %874

874:                                              ; preds = %873, %872, %853, %725, %709, %263, %246, %234, %50, %40, %31
  %875 = load i32, ptr %12, align 4, !tbaa !13
  %876 = icmp ne i32 %875, 0
  br i1 %876, label %877, label %880

877:                                              ; preds = %874
  %878 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %878) #6
  %879 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %879) #6
  br label %880

880:                                              ; preds = %877, %874
  %881 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %881) #6
  %882 = load ptr, ptr %13, align 8, !tbaa !5
  call void @free(ptr noundef %882) #6
  %883 = load i32, ptr %12, align 4, !tbaa !13
  store i32 %883, ptr %6, align 4
  store i32 1, ptr %23, align 4
  br label %884

884:                                              ; preds = %880, %853
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  %885 = load i32, ptr %6, align 4
  ret i32 %885
}

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"rl_btree", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !10, i64 40}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!12, !10, i64 32}
!16 = !{!17, !6, i64 8}
!17 = !{!"rl_btree_node", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24}
!18 = !{!17, !10, i64 24}
!19 = !{!12, !10, i64 8}
!20 = !{!17, !6, i64 0}
!21 = !{!17, !6, i64 16}
!22 = !{!12, !6, i64 24}
!23 = !{!24, !6, i64 8}
!24 = !{!"", !6, i64 0, !6, i64 8, !14, i64 16, !14, i64 20, !6, i64 24}
!25 = !{!26, !10, i64 40}
!26 = !{!"rlite", !10, i64 0, !10, i64 8, !14, i64 16, !6, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !14, i64 64, !14, i64 68, !14, i64 72, !14, i64 76, !6, i64 80, !10, i64 88, !10, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!12, !10, i64 40}
!30 = !{!24, !6, i64 0}


; 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"

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [47 x i8], align 1

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

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @rl_btree_add_element(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  %8 = getelementptr inbounds i8, ptr %1, i64 16
  %9 = load i64, ptr %8, align 8, !tbaa !5
  %10 = shl i64 %9, 3
  %11 = tail call noalias ptr @malloc(i64 noundef %10) #8
  %.not = icmp eq ptr %11, null
  br i1 %.not, label %.thread301, label %12

12:                                               ; preds = %5
  %13 = tail call noalias ptr @malloc(i64 noundef %10) #8
  %.not236 = icmp eq ptr %13, null
  br i1 %.not236, label %.thread301, label %14

14:                                               ; preds = %12
  %15 = tail call i32 @rl_btree_find_score(ptr noundef %0, ptr noundef nonnull %1, ptr noundef %3, ptr noundef null, ptr noundef nonnull %11, ptr noundef nonnull %13)
  %.not237 = icmp eq i32 %15, 3
  br i1 %.not237, label %16, label %360

16:                                               ; preds = %14
  store ptr null, ptr %7, align 8, !tbaa !11
  %17 = load i64, ptr %8, align 8, !tbaa !5
  %18 = icmp sgt i64 %17, 0
  br i1 %18, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %16
  %19 = getelementptr inbounds i8, ptr %1, i64 32
  %20 = getelementptr inbounds i8, ptr %1, i64 8
  %21 = getelementptr inbounds i8, ptr %0, i64 40
  %22 = getelementptr inbounds i8, ptr %1, i64 24
  br label %25

23:                                               ; preds = %291
  %24 = icmp ugt i64 %.0203.in347, 1
  br i1 %24, label %25, label %._crit_edge, !llvm.loop !12

25:                                               ; preds = %.lr.ph, %23
  %.0197349 = phi i64 [ -1, %.lr.ph ], [ %283, %23 ]
  %.0199348 = phi ptr [ %3, %.lr.ph ], [ %.2201, %23 ]
  %.0203.in347 = phi i64 [ %17, %.lr.ph ], [ %.0203350, %23 ]
  %.0204346 = phi ptr [ %4, %.lr.ph ], [ %.2206, %23 ]
  %.0203350 = add nsw i64 %.0203.in347, -1
  %26 = icmp eq i64 %.0203350, 0
  br i1 %26, label %36, label %27

27:                                               ; preds = %25
  %28 = add nsw i64 %.0203.in347, -2
  %29 = getelementptr inbounds ptr, ptr %11, i64 %28
  %30 = load ptr, ptr %29, align 8, !tbaa !11
  %31 = getelementptr inbounds i8, ptr %30, i64 8
  %32 = load ptr, ptr %31, align 8, !tbaa !14
  %33 = getelementptr inbounds i64, ptr %13, i64 %28
  %34 = load i64, ptr %33, align 8, !tbaa !16
  %35 = getelementptr inbounds i64, ptr %32, i64 %34
  br label %36

36:                                               ; preds = %25, %27
  %.1.in = phi ptr [ %35, %27 ], [ %19, %25 ]
  %.1 = load i64, ptr %.1.in, align 8, !tbaa !16
  %37 = getelementptr inbounds ptr, ptr %11, i64 %.0203350
  %38 = load ptr, ptr %37, align 8, !tbaa !11
  store ptr %38, ptr %7, align 8, !tbaa !11
  %39 = getelementptr inbounds i8, ptr %38, i64 24
  %40 = load i64, ptr %39, align 8, !tbaa !17
  %41 = load i64, ptr %20, align 8, !tbaa !18
  %42 = icmp slt i64 %40, %41
  br i1 %42, label %43, label %92

43:                                               ; preds = %36
  %44 = load ptr, ptr %38, align 8, !tbaa !19
  %45 = getelementptr inbounds i64, ptr %13, i64 %.0203350
  %46 = load i64, ptr %45, align 8, !tbaa !16
  %47 = getelementptr ptr, ptr %44, i64 %46
  %48 = getelementptr i8, ptr %47, i64 8
  %49 = sub nsw i64 %40, %46
  %50 = shl i64 %49, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %48, ptr align 8 %47, i64 %50, i1 false)
  %51 = getelementptr inbounds i8, ptr %38, i64 16
  %52 = load ptr, ptr %51, align 8, !tbaa !20
  %53 = load i64, ptr %45, align 8, !tbaa !16
  %54 = getelementptr ptr, ptr %52, i64 %53
  %55 = getelementptr i8, ptr %54, i64 8
  %56 = load i64, ptr %39, align 8, !tbaa !17
  %57 = sub nsw i64 %56, %53
  %58 = shl i64 %57, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %55, ptr align 8 %54, i64 %58, i1 false)
  %59 = getelementptr inbounds i8, ptr %38, i64 8
  %60 = load ptr, ptr %59, align 8, !tbaa !14
  %.not248 = icmp eq ptr %60, null
  br i1 %.not248, label %69, label %61

61:                                               ; preds = %43
  %62 = load i64, ptr %45, align 8, !tbaa !16
  %63 = getelementptr i64, ptr %60, i64 %62
  %64 = getelementptr i8, ptr %63, i64 16
  %65 = getelementptr i8, ptr %63, i64 8
  %66 = load i64, ptr %39, align 8, !tbaa !17
  %67 = sub nsw i64 %66, %62
  %68 = shl i64 %67, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %64, ptr align 8 %65, i64 %68, i1 false)
  br label %69

69:                                               ; preds = %61, %43
  %70 = load ptr, ptr %38, align 8, !tbaa !19
  %71 = load i64, ptr %45, align 8, !tbaa !16
  %72 = getelementptr inbounds ptr, ptr %70, i64 %71
  store ptr %.0199348, ptr %72, align 8, !tbaa !11
  %73 = load ptr, ptr %51, align 8, !tbaa !20
  %74 = getelementptr inbounds ptr, ptr %73, i64 %71
  store ptr %.0204346, ptr %74, align 8, !tbaa !11
  %.not249 = icmp eq i64 %.0197349, -1
  br i1 %.not249, label %85, label %75

75:                                               ; preds = %69
  %76 = load ptr, ptr %59, align 8, !tbaa !14
  %.not250 = icmp eq ptr %76, null
  br i1 %.not250, label %77, label %80

77:                                               ; preds = %75
  %78 = load ptr, ptr @stderr, align 8, !tbaa !11
  %79 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %78, ptr noundef nonnull @.str) #9
  %.pre401 = load ptr, ptr %59, align 8, !tbaa !14
  %.pre402 = load i64, ptr %45, align 8, !tbaa !16
  br label %80

80:                                               ; preds = %77, %75
  %81 = phi i64 [ %.pre402, %77 ], [ %71, %75 ]
  %82 = phi ptr [ %.pre401, %77 ], [ %76, %75 ]
  %83 = getelementptr i64, ptr %82, i64 %81
  %84 = getelementptr i8, ptr %83, i64 8
  store i64 %.0197349, ptr %84, align 8, !tbaa !16
  br label %85

85:                                               ; preds = %80, %69
  %86 = load i64, ptr %39, align 8, !tbaa !17
  %87 = add nsw i64 %86, 1
  store i64 %87, ptr %39, align 8, !tbaa !17
  %88 = load ptr, ptr %22, align 8, !tbaa !21
  %89 = getelementptr inbounds i8, ptr %88, i64 8
  %90 = load ptr, ptr %89, align 8, !tbaa !22
  %91 = call i32 @rl_write(ptr noundef %0, ptr noundef %90, i64 noundef %.1, ptr noundef nonnull %38) #7
  %.not251 = icmp eq i32 %91, 0
  br i1 %.not251, label %.thread289, label %.thread301

92:                                               ; preds = %36
  %93 = getelementptr inbounds i64, ptr %13, i64 %.0203350
  %94 = load i64, ptr %93, align 8, !tbaa !16
  %95 = call i32 @rl_btree_node_create(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %6)
  %.not238 = icmp eq i32 %95, 0
  br i1 %.not238, label %96, label %.thread301

96:                                               ; preds = %92
  %.not239 = icmp eq i64 %.0197349, -1
  %97 = load i64, ptr %20, align 8, !tbaa !18
  br i1 %.not239, label %106, label %98

98:                                               ; preds = %96
  %99 = shl i64 %97, 3
  %100 = add i64 %99, 8
  %101 = call noalias ptr @malloc(i64 noundef %100) #8
  %102 = load ptr, ptr %6, align 8, !tbaa !11
  %103 = getelementptr inbounds i8, ptr %102, i64 8
  store ptr %101, ptr %103, align 8, !tbaa !14
  %.not240 = icmp eq ptr %101, null
  br i1 %.not240, label %104, label %.thread

104:                                              ; preds = %98
  %105 = call i32 @rl_btree_node_destroy(ptr noundef %0, ptr noundef nonnull %102)
  br label %.thread301

106:                                              ; preds = %96
  %107 = sdiv i64 %97, 2
  %108 = icmp slt i64 %94, %107
  br i1 %108, label %._crit_edge414, label %.thread417

._crit_edge414:                                   ; preds = %106
  %.pre415 = add nsw i64 %94, 1
  br label %127

.thread:                                          ; preds = %98
  %109 = sdiv i64 %97, 2
  %110 = icmp slt i64 %94, %109
  br i1 %110, label %111, label %.thread263

111:                                              ; preds = %.thread
  %112 = getelementptr inbounds i8, ptr %38, i64 8
  %113 = load ptr, ptr %112, align 8, !tbaa !14
  %114 = getelementptr inbounds i64, ptr %113, i64 %109
  %115 = shl i64 %109, 3
  %116 = add i64 %115, 8
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %101, ptr align 8 %114, i64 %116, i1 false)
  %117 = load ptr, ptr %112, align 8, !tbaa !14
  %118 = getelementptr i64, ptr %117, i64 %94
  %119 = getelementptr i8, ptr %118, i64 16
  %120 = add nsw i64 %94, 1
  %121 = getelementptr inbounds i64, ptr %117, i64 %120
  %122 = xor i64 %94, -1
  %123 = add i64 %109, %122
  %124 = shl i64 %123, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %119, ptr align 8 %121, i64 %124, i1 false)
  %125 = load ptr, ptr %112, align 8, !tbaa !14
  %126 = getelementptr inbounds i64, ptr %125, i64 %120
  store i64 %.0197349, ptr %126, align 8, !tbaa !16
  %.pre = load i64, ptr %20, align 8, !tbaa !18
  %.pre404 = sdiv i64 %.pre, 2
  br label %127

127:                                              ; preds = %111, %._crit_edge414
  %.pre-phi416 = phi i64 [ %.pre415, %._crit_edge414 ], [ %120, %111 ]
  %.pre-phi405 = phi i64 [ %107, %._crit_edge414 ], [ %.pre404, %111 ]
  %128 = load ptr, ptr %38, align 8, !tbaa !19
  %129 = add nsw i64 %.pre-phi405, -1
  %130 = getelementptr inbounds ptr, ptr %128, i64 %129
  %131 = load ptr, ptr %130, align 8, !tbaa !11
  %132 = getelementptr inbounds ptr, ptr %128, i64 %.pre-phi416
  %133 = getelementptr inbounds ptr, ptr %128, i64 %94
  %134 = sub nsw i64 %129, %94
  %135 = shl i64 %134, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %132, ptr align 8 %133, i64 %135, i1 false)
  %136 = load ptr, ptr %38, align 8, !tbaa !19
  %137 = getelementptr inbounds ptr, ptr %136, i64 %94
  store ptr %.0199348, ptr %137, align 8, !tbaa !11
  %138 = load ptr, ptr %6, align 8, !tbaa !11
  %139 = load ptr, ptr %138, align 8, !tbaa !19
  %140 = load ptr, ptr %38, align 8, !tbaa !19
  %141 = load i64, ptr %20, align 8, !tbaa !18
  %142 = sdiv i64 %141, 2
  %143 = getelementptr inbounds ptr, ptr %140, i64 %142
  %144 = shl i64 %141, 2
  %145 = and i64 %144, 9223372036854775804
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %139, ptr align 8 %143, i64 %145, i1 false)
  %146 = getelementptr inbounds i8, ptr %38, i64 16
  %147 = load ptr, ptr %146, align 8, !tbaa !20
  %148 = load i64, ptr %20, align 8, !tbaa !18
  %149 = sdiv i64 %148, 2
  %150 = add nsw i64 %149, -1
  %151 = getelementptr inbounds ptr, ptr %147, i64 %150
  %152 = load ptr, ptr %151, align 8, !tbaa !11
  %153 = getelementptr inbounds ptr, ptr %147, i64 %.pre-phi416
  %154 = getelementptr inbounds ptr, ptr %147, i64 %94
  %155 = sub nsw i64 %150, %94
  %156 = shl i64 %155, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %153, ptr align 8 %154, i64 %156, i1 false)
  %157 = load ptr, ptr %146, align 8, !tbaa !20
  %158 = getelementptr inbounds ptr, ptr %157, i64 %94
  store ptr %.0204346, ptr %158, align 8, !tbaa !11
  %159 = load ptr, ptr %6, align 8, !tbaa !11
  %160 = getelementptr inbounds i8, ptr %159, i64 16
  %161 = load ptr, ptr %160, align 8, !tbaa !20
  %162 = load ptr, ptr %146, align 8, !tbaa !20
  %163 = load i64, ptr %20, align 8, !tbaa !18
  %164 = sdiv i64 %163, 2
  %165 = getelementptr inbounds ptr, ptr %162, i64 %164
  %166 = shl i64 %163, 2
  %167 = and i64 %166, 9223372036854775804
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %161, ptr align 8 %165, i64 %167, i1 false)
  %.pre390 = load i64, ptr %20, align 8, !tbaa !18
  %.pre406 = sdiv i64 %.pre390, 2
  %168 = icmp eq i64 %94, %.pre406
  br i1 %168, label %171, label %200

.thread417:                                       ; preds = %106
  %169 = icmp eq i64 %94, %107
  br i1 %169, label %.thread424, label %.thread429

.thread424:                                       ; preds = %.thread417
  %.pre393428 = load ptr, ptr %6, align 8, !tbaa !11
  br label %182

.thread263:                                       ; preds = %.thread
  %170 = icmp eq i64 %94, %109
  br i1 %170, label %.thread270, label %.thread277

171:                                              ; preds = %127
  %.pre393 = load ptr, ptr %6, align 8, !tbaa !11
  br i1 %.not239, label %182, label %..thread270_crit_edge

..thread270_crit_edge:                            ; preds = %171
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.pre393, i64 8
  %.pre392 = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !14
  br label %.thread270

.thread270:                                       ; preds = %..thread270_crit_edge, %.thread263
  %172 = phi ptr [ %.pre392, %..thread270_crit_edge ], [ %101, %.thread263 ]
  %173 = phi ptr [ %.pre393, %..thread270_crit_edge ], [ %102, %.thread263 ]
  %.1205267275 = phi ptr [ %152, %..thread270_crit_edge ], [ %.0204346, %.thread263 ]
  %.1200269273 = phi ptr [ %131, %..thread270_crit_edge ], [ %.0199348, %.thread263 ]
  %174 = getelementptr inbounds i8, ptr %173, i64 8
  %175 = getelementptr inbounds i8, ptr %172, i64 8
  %176 = getelementptr inbounds i8, ptr %38, i64 8
  %177 = load ptr, ptr %176, align 8, !tbaa !14
  %178 = getelementptr i64, ptr %177, i64 %94
  %179 = getelementptr i8, ptr %178, i64 8
  %180 = shl i64 %94, 3
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %175, ptr align 8 %179, i64 %180, i1 false)
  %181 = load ptr, ptr %174, align 8, !tbaa !14
  store i64 %.0197349, ptr %181, align 8, !tbaa !16
  %.pre394 = load i64, ptr %20, align 8, !tbaa !18
  %.pre408 = sdiv i64 %.pre394, 2
  br label %182

182:                                              ; preds = %.thread424, %.thread270, %171
  %.pre-phi409 = phi i64 [ %.pre408, %.thread270 ], [ %.pre406, %171 ], [ %107, %.thread424 ]
  %183 = phi i64 [ %.pre394, %.thread270 ], [ %.pre390, %171 ], [ %97, %.thread424 ]
  %184 = phi ptr [ %173, %.thread270 ], [ %.pre393, %171 ], [ %.pre393428, %.thread424 ]
  %.1205267276 = phi ptr [ %.1205267275, %.thread270 ], [ %152, %171 ], [ %.0204346, %.thread424 ]
  %.1200269274 = phi ptr [ %.1200269273, %.thread270 ], [ %131, %171 ], [ %.0199348, %.thread424 ]
  %185 = load ptr, ptr %184, align 8, !tbaa !19
  %186 = load ptr, ptr %38, align 8, !tbaa !19
  %187 = getelementptr inbounds ptr, ptr %186, i64 %.pre-phi409
  %188 = shl i64 %183, 2
  %189 = and i64 %188, 9223372036854775804
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %185, ptr align 8 %187, i64 %189, i1 false)
  %190 = load ptr, ptr %6, align 8, !tbaa !11
  %191 = getelementptr inbounds i8, ptr %190, i64 16
  %192 = load ptr, ptr %191, align 8, !tbaa !20
  %193 = getelementptr inbounds i8, ptr %38, i64 16
  %194 = load ptr, ptr %193, align 8, !tbaa !20
  %195 = load i64, ptr %20, align 8, !tbaa !18
  %196 = sdiv i64 %195, 2
  %197 = getelementptr inbounds ptr, ptr %194, i64 %196
  %198 = shl i64 %195, 2
  %199 = and i64 %198, 9223372036854775804
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %192, ptr align 8 %197, i64 %199, i1 false)
  %.pre395 = load i64, ptr %20, align 8, !tbaa !18
  %.pre410 = sdiv i64 %.pre395, 2
  br label %200

200:                                              ; preds = %182, %127
  %.pre-phi411 = phi i64 [ %.pre410, %182 ], [ %.pre406, %127 ]
  %.1200268 = phi ptr [ %.1200269274, %182 ], [ %131, %127 ]
  %.1205266 = phi ptr [ %.1205267276, %182 ], [ %152, %127 ]
  %201 = icmp sgt i64 %94, %.pre-phi411
  br i1 %201, label %204, label %280

.thread429:                                       ; preds = %.thread417
  %202 = icmp sgt i64 %94, %107
  br i1 %202, label %.thread436, label %280

.thread277:                                       ; preds = %.thread263
  %203 = icmp sgt i64 %94, %109
  br i1 %203, label %.thread282, label %280

204:                                              ; preds = %200
  br i1 %.not239, label %.thread436, label %..thread282_crit_edge

..thread282_crit_edge:                            ; preds = %204
  %.pre396 = load ptr, ptr %6, align 8, !tbaa !11
  %.phi.trans.insert397 = getelementptr inbounds i8, ptr %.pre396, i64 8
  %.pre398 = load ptr, ptr %.phi.trans.insert397, align 8, !tbaa !14
  br label %.thread282

.thread282:                                       ; preds = %..thread282_crit_edge, %.thread277
  %205 = phi ptr [ %.pre398, %..thread282_crit_edge ], [ %101, %.thread277 ]
  %.1200268280287 = phi ptr [ %.1200268, %..thread282_crit_edge ], [ %.0199348, %.thread277 ]
  %.1205266281285 = phi ptr [ %.1205266, %..thread282_crit_edge ], [ %.0204346, %.thread277 ]
  %206 = phi i64 [ %.pre-phi411, %..thread282_crit_edge ], [ %109, %.thread277 ]
  %207 = getelementptr inbounds i8, ptr %38, i64 8
  %208 = load ptr, ptr %207, align 8, !tbaa !14
  %209 = getelementptr i64, ptr %208, i64 %206
  %210 = getelementptr i8, ptr %209, i64 8
  %211 = sub nsw i64 %94, %206
  %212 = shl i64 %211, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %205, ptr align 8 %210, i64 %212, i1 false)
  %213 = load ptr, ptr %6, align 8, !tbaa !11
  %214 = getelementptr inbounds i8, ptr %213, i64 8
  %215 = load ptr, ptr %214, align 8, !tbaa !14
  %216 = load i64, ptr %20, align 8, !tbaa !18
  %.neg = sdiv i64 %216, -2
  %217 = getelementptr i64, ptr %215, i64 %.neg
  %218 = getelementptr i64, ptr %217, i64 %94
  store i64 %.0197349, ptr %218, align 8, !tbaa !16
  %219 = load i64, ptr %20, align 8, !tbaa !18
  %.neg241 = sdiv i64 %219, -2
  %220 = getelementptr i64, ptr %215, i64 %.neg241
  %221 = getelementptr i64, ptr %220, i64 %94
  %222 = getelementptr i8, ptr %221, i64 8
  %223 = load ptr, ptr %207, align 8, !tbaa !14
  %224 = getelementptr i64, ptr %223, i64 %94
  %225 = getelementptr i8, ptr %224, i64 8
  %226 = sub nsw i64 %219, %94
  %227 = shl i64 %226, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %222, ptr align 8 %225, i64 %227, i1 false)
  %.pre399 = load i64, ptr %20, align 8, !tbaa !18
  %.pre403 = sdiv i64 %.pre399, 2
  br label %.thread436

.thread436:                                       ; preds = %.thread429, %.thread282, %204
  %.pre-phi = phi i64 [ %.pre403, %.thread282 ], [ %.pre-phi411, %204 ], [ %107, %.thread429 ]
  %.1200268280288 = phi ptr [ %.1200268280287, %.thread282 ], [ %.1200268, %204 ], [ %.0199348, %.thread429 ]
  %.1205266281286 = phi ptr [ %.1205266281285, %.thread282 ], [ %.1205266, %204 ], [ %.0204346, %.thread429 ]
  %228 = load ptr, ptr %38, align 8, !tbaa !19
  %229 = getelementptr inbounds ptr, ptr %228, i64 %.pre-phi
  %230 = load ptr, ptr %229, align 8, !tbaa !11
  %231 = load ptr, ptr %6, align 8, !tbaa !11
  %232 = load ptr, ptr %231, align 8, !tbaa !19
  %233 = getelementptr i8, ptr %229, i64 8
  %234 = xor i64 %.pre-phi, -1
  %235 = add i64 %94, %234
  %236 = shl i64 %235, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %232, ptr align 8 %233, i64 %236, i1 false)
  %237 = load ptr, ptr %6, align 8, !tbaa !11
  %238 = load ptr, ptr %237, align 8, !tbaa !19
  %239 = load i64, ptr %20, align 8, !tbaa !18
  %.neg242 = sdiv i64 %239, -2
  %240 = getelementptr ptr, ptr %238, i64 %.neg242
  %241 = getelementptr ptr, ptr %240, i64 %94
  %242 = getelementptr i8, ptr %241, i64 -8
  store ptr %.1200268280288, ptr %242, align 8, !tbaa !11
  %243 = load ptr, ptr %6, align 8, !tbaa !11
  %244 = load ptr, ptr %243, align 8, !tbaa !19
  %245 = getelementptr ptr, ptr %244, i64 %.neg242
  %246 = getelementptr ptr, ptr %245, i64 %94
  %247 = load ptr, ptr %38, align 8, !tbaa !19
  %248 = getelementptr inbounds ptr, ptr %247, i64 %94
  %249 = sub nsw i64 %239, %94
  %250 = shl i64 %249, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %246, ptr align 8 %248, i64 %250, i1 false)
  %251 = getelementptr inbounds i8, ptr %38, i64 16
  %252 = load ptr, ptr %251, align 8, !tbaa !20
  %253 = load i64, ptr %20, align 8, !tbaa !18
  %254 = sdiv i64 %253, 2
  %255 = getelementptr inbounds ptr, ptr %252, i64 %254
  %256 = load ptr, ptr %255, align 8, !tbaa !11
  %257 = load ptr, ptr %6, align 8, !tbaa !11
  %258 = getelementptr inbounds i8, ptr %257, i64 16
  %259 = load ptr, ptr %258, align 8, !tbaa !20
  %260 = getelementptr i8, ptr %255, i64 8
  %261 = xor i64 %254, -1
  %262 = add i64 %94, %261
  %263 = shl i64 %262, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %259, ptr align 8 %260, i64 %263, i1 false)
  %264 = load ptr, ptr %6, align 8, !tbaa !11
  %265 = getelementptr inbounds i8, ptr %264, i64 16
  %266 = load ptr, ptr %265, align 8, !tbaa !20
  %267 = load i64, ptr %20, align 8, !tbaa !18
  %.neg244 = sdiv i64 %267, -2
  %268 = getelementptr ptr, ptr %266, i64 %.neg244
  %269 = getelementptr ptr, ptr %268, i64 %94
  %270 = getelementptr i8, ptr %269, i64 -8
  store ptr %.1205266281286, ptr %270, align 8, !tbaa !11
  %271 = load ptr, ptr %6, align 8, !tbaa !11
  %272 = getelementptr inbounds i8, ptr %271, i64 16
  %273 = load ptr, ptr %272, align 8, !tbaa !20
  %274 = getelementptr ptr, ptr %273, i64 %.neg244
  %275 = getelementptr ptr, ptr %274, i64 %94
  %276 = load ptr, ptr %251, align 8, !tbaa !20
  %277 = getelementptr inbounds ptr, ptr %276, i64 %94
  %278 = sub nsw i64 %267, %94
  %279 = shl i64 %278, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %275, ptr align 8 %277, i64 %279, i1 false)
  %.pre400 = load i64, ptr %20, align 8, !tbaa !18
  %.pre412 = sdiv i64 %.pre400, 2
  br label %280

280:                                              ; preds = %.thread429, %.thread277, %.thread436, %200
  %.pre-phi413 = phi i64 [ %109, %.thread277 ], [ %.pre412, %.thread436 ], [ %.pre-phi411, %200 ], [ %107, %.thread429 ]
  %.2206 = phi ptr [ %.0204346, %.thread277 ], [ %256, %.thread436 ], [ %.1205266, %200 ], [ %.0204346, %.thread429 ]
  %.2201 = phi ptr [ %.0199348, %.thread277 ], [ %230, %.thread436 ], [ %.1200268, %200 ], [ %.0199348, %.thread429 ]
  %281 = load ptr, ptr %6, align 8, !tbaa !11
  %282 = getelementptr inbounds i8, ptr %281, i64 24
  store i64 %.pre-phi413, ptr %282, align 8, !tbaa !17
  store i64 %.pre-phi413, ptr %39, align 8, !tbaa !17
  %283 = load i64, ptr %21, align 8, !tbaa !25
  %284 = load ptr, ptr %22, align 8, !tbaa !21
  %285 = getelementptr inbounds i8, ptr %284, i64 8
  %286 = load ptr, ptr %285, align 8, !tbaa !22
  %287 = call i32 @rl_write(ptr noundef %0, ptr noundef %286, i64 noundef %.1, ptr noundef nonnull %38) #7
  %.not246 = icmp eq i32 %287, 0
  br i1 %.not246, label %291, label %288

288:                                              ; preds = %280
  %289 = load ptr, ptr %6, align 8, !tbaa !11
  %290 = call i32 @rl_btree_node_destroy(ptr noundef nonnull %0, ptr noundef %289)
  br label %.thread301

291:                                              ; preds = %280
  %292 = load ptr, ptr %22, align 8, !tbaa !21
  %293 = getelementptr inbounds i8, ptr %292, i64 8
  %294 = load ptr, ptr %293, align 8, !tbaa !22
  %295 = load ptr, ptr %6, align 8, !tbaa !11
  %296 = call i32 @rl_write(ptr noundef nonnull %0, ptr noundef %294, i64 noundef %283, ptr noundef %295) #7
  %.not247 = icmp eq i32 %296, 0
  br i1 %.not247, label %23, label %.thread301, !llvm.loop !12

._crit_edge:                                      ; preds = %23, %16
  %297 = phi ptr [ null, %16 ], [ %38, %23 ]
  %.0204.lcssa = phi ptr [ %4, %16 ], [ %.2206, %23 ]
  %.0199.lcssa = phi ptr [ %3, %16 ], [ %.2201, %23 ]
  %.0198.lcssa = phi i64 [ 0, %16 ], [ %.1, %23 ]
  %.0197.lcssa = phi i64 [ -1, %16 ], [ %283, %23 ]
  %.not252 = icmp eq ptr %.0199.lcssa, null
  br i1 %.not252, label %.thread289, label %298

298:                                              ; preds = %._crit_edge
  %299 = call i32 @rl_btree_node_create(ptr noundef %0, ptr noundef nonnull %1, ptr noundef nonnull %7)
  %.not253 = icmp eq i32 %299, 0
  br i1 %.not253, label %300, label %.thread301

300:                                              ; preds = %298
  %301 = load ptr, ptr %7, align 8, !tbaa !11
  %302 = getelementptr inbounds i8, ptr %301, i64 24
  store i64 1, ptr %302, align 8, !tbaa !17
  %303 = load ptr, ptr %301, align 8, !tbaa !19
  store ptr %.0199.lcssa, ptr %303, align 8, !tbaa !11
  %304 = load ptr, ptr %7, align 8, !tbaa !11
  %305 = getelementptr inbounds i8, ptr %304, i64 16
  %306 = load ptr, ptr %305, align 8, !tbaa !20
  store ptr %.0204.lcssa, ptr %306, align 8, !tbaa !11
  %.not254 = icmp eq ptr %297, null
  br i1 %.not254, label %335, label %307

307:                                              ; preds = %300
  %308 = getelementptr inbounds i8, ptr %1, i64 8
  %309 = load i64, ptr %308, align 8, !tbaa !18
  %310 = shl i64 %309, 3
  %311 = add i64 %310, 8
  %312 = call noalias ptr @malloc(i64 noundef %311) #8
  %313 = load ptr, ptr %7, align 8, !tbaa !11
  %314 = getelementptr inbounds i8, ptr %313, i64 8
  store ptr %312, ptr %314, align 8, !tbaa !14
  %.not257 = icmp eq ptr %312, null
  br i1 %.not257, label %315, label %317

315:                                              ; preds = %307
  %316 = call i32 @rl_btree_node_destroy(ptr noundef %0, ptr noundef nonnull %313)
  br label %.thread301

317:                                              ; preds = %307
  %318 = icmp eq i64 %.0198.lcssa, 0
  br i1 %318, label %319, label %322

319:                                              ; preds = %317
  %320 = getelementptr inbounds i8, ptr %0, i64 40
  %321 = load i64, ptr %320, align 8, !tbaa !25
  br label %322

322:                                              ; preds = %319, %317
  %.3 = phi i64 [ %321, %319 ], [ %.0198.lcssa, %317 ]
  store i64 %.3, ptr %312, align 8, !tbaa !16
  %323 = getelementptr inbounds i8, ptr %1, i64 24
  %324 = load ptr, ptr %323, align 8, !tbaa !21
  %325 = getelementptr inbounds i8, ptr %324, i64 8
  %326 = load ptr, ptr %325, align 8, !tbaa !22
  %327 = call i32 @rl_write(ptr noundef %0, ptr noundef %326, i64 noundef %.3, ptr noundef nonnull %297) #7
  %.not258 = icmp eq i32 %327, 0
  %328 = load ptr, ptr %7, align 8, !tbaa !11
  br i1 %.not258, label %331, label %329

329:                                              ; preds = %322
  %330 = call i32 @rl_btree_node_destroy(ptr noundef %0, ptr noundef %328)
  br label %.thread301

331:                                              ; preds = %322
  %332 = getelementptr inbounds i8, ptr %328, i64 8
  %333 = load ptr, ptr %332, align 8, !tbaa !14
  %334 = getelementptr inbounds i8, ptr %333, i64 8
  store i64 %.0197.lcssa, ptr %334, align 8, !tbaa !16
  br label %340

335:                                              ; preds = %300
  %336 = getelementptr inbounds i8, ptr %1, i64 32
  %337 = load i64, ptr %336, align 8, !tbaa !27
  %.not255 = icmp eq i64 %337, 0
  br i1 %.not255, label %340, label %338

338:                                              ; preds = %335
  %339 = call i32 @rl_delete(ptr noundef %0, i64 noundef %337) #7
  %.not256 = icmp eq i32 %339, 0
  br i1 %.not256, label %340, label %.thread301

340:                                              ; preds = %335, %338, %331
  %341 = getelementptr inbounds i8, ptr %0, i64 40
  %342 = load i64, ptr %341, align 8, !tbaa !25
  %343 = getelementptr inbounds i8, ptr %1, i64 32
  store i64 %342, ptr %343, align 8, !tbaa !27
  %344 = getelementptr inbounds i8, ptr %1, i64 24
  %345 = load ptr, ptr %344, align 8, !tbaa !21
  %346 = getelementptr inbounds i8, ptr %345, i64 8
  %347 = load ptr, ptr %346, align 8, !tbaa !22
  %348 = load ptr, ptr %7, align 8, !tbaa !11
  %349 = call i32 @rl_write(ptr noundef %0, ptr noundef %347, i64 noundef %342, ptr noundef %348) #7
  %.not259 = icmp eq i32 %349, 0
  br i1 %.not259, label %350, label %.thread301

350:                                              ; preds = %340
  %351 = load i64, ptr %8, align 8, !tbaa !5
  %352 = add nsw i64 %351, 1
  store i64 %352, ptr %8, align 8, !tbaa !5
  br label %.thread289

.thread289:                                       ; preds = %85, %350, %._crit_edge
  %.5209 = phi ptr [ null, %350 ], [ %.0204.lcssa, %._crit_edge ], [ null, %85 ]
  %353 = getelementptr inbounds i8, ptr %1, i64 40
  %354 = load i64, ptr %353, align 8, !tbaa !28
  %355 = add nsw i64 %354, 1
  store i64 %355, ptr %353, align 8, !tbaa !28
  %356 = getelementptr inbounds i8, ptr %1, i64 24
  %357 = load ptr, ptr %356, align 8, !tbaa !21
  %358 = load ptr, ptr %357, align 8, !tbaa !29
  %359 = call i32 @rl_write(ptr noundef %0, ptr noundef %358, i64 noundef %2, ptr noundef nonnull %1) #7
  br label %360

360:                                              ; preds = %.thread289, %14
  %.1213 = phi i32 [ %15, %14 ], [ %359, %.thread289 ]
  %.6210 = phi ptr [ %4, %14 ], [ %.5209, %.thread289 ]
  %.6 = phi ptr [ %3, %14 ], [ null, %.thread289 ]
  %.not260 = icmp eq i32 %.1213, 0
  br i1 %.not260, label %361, label %.thread301

.thread301:                                       ; preds = %291, %92, %340, %338, %298, %315, %329, %12, %5, %104, %288, %85, %360
  %.6312 = phi ptr [ %.6, %360 ], [ %3, %12 ], [ %3, %5 ], [ %.0199348, %104 ], [ %.2201, %288 ], [ null, %85 ], [ null, %340 ], [ null, %338 ], [ %.0199.lcssa, %298 ], [ null, %315 ], [ null, %329 ], [ %.0199348, %92 ], [ %.2201, %291 ]
  %.6210311 = phi ptr [ %.6210, %360 ], [ %4, %12 ], [ %4, %5 ], [ %.0204346, %104 ], [ %.2206, %288 ], [ null, %85 ], [ null, %340 ], [ null, %338 ], [ %.0204.lcssa, %298 ], [ null, %315 ], [ null, %329 ], [ %.0204346, %92 ], [ %.2206, %291 ]
  %.0211309 = phi ptr [ %13, %360 ], [ null, %12 ], [ null, %5 ], [ %13, %104 ], [ %13, %288 ], [ %13, %85 ], [ %13, %340 ], [ %13, %338 ], [ %13, %298 ], [ %13, %315 ], [ %13, %329 ], [ %13, %92 ], [ %13, %291 ]
  %.1213307 = phi i32 [ %.1213, %360 ], [ 4, %12 ], [ 4, %5 ], [ 4, %104 ], [ %287, %288 ], [ %91, %85 ], [ %349, %340 ], [ %339, %338 ], [ %299, %298 ], [ 4, %315 ], [ %327, %329 ], [ %95, %92 ], [ %296, %291 ]
  call void @free(ptr noundef %.6210311) #7
  call void @free(ptr noundef %.6312) #7
  br label %361

361:                                              ; preds = %.thread301, %360
  %.0211310 = phi ptr [ %.0211309, %.thread301 ], [ %13, %360 ]
  %.1213308 = phi i32 [ %.1213307, %.thread301 ], [ 0, %360 ]
  call void @free(ptr noundef %11) #7
  call void @free(ptr noundef %.0211310) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  ret i32 %.1213308
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #6

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }
attributes #9 = { cold nounwind }

!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, !10, i64 16}
!6 = !{!"rl_btree", !7, i64 0, !10, i64 8, !10, i64 16, !7, i64 24, !10, i64 32, !10, i64 40}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !7, i64 8}
!15 = !{!"rl_btree_node", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24}
!16 = !{!10, !10, i64 0}
!17 = !{!15, !10, i64 24}
!18 = !{!6, !10, i64 8}
!19 = !{!15, !7, i64 0}
!20 = !{!15, !7, i64 16}
!21 = !{!6, !7, i64 24}
!22 = !{!23, !7, i64 8}
!23 = !{!"", !7, i64 0, !7, i64 8, !24, i64 16, !24, i64 20, !7, i64 24}
!24 = !{!"int", !8, i64 0}
!25 = !{!26, !10, i64 40}
!26 = !{!"rlite", !10, i64 0, !10, i64 8, !24, i64 16, !7, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !7, i64 56, !24, i64 64, !24, i64 68, !24, i64 72, !24, i64 76, !7, i64 80, !10, i64 88, !10, i64 96, !7, i64 104, !10, i64 112, !10, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152}
!27 = !{!6, !10, i64 32}
!28 = !{!6, !10, i64 40}
!29 = !{!23, !7, i64 0}


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