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

; 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.rlite = type { i64, i64, i32, ptr, i64, i64, i64, ptr, i32, i32, i32, i32, ptr, i64, i64, ptr, i64, i64, ptr, ptr, ptr, ptr }
%struct.rl_data_type = type { ptr, ptr, ptr, ptr }
%struct.rl_file_driver = type { ptr, ptr, i32 }
%struct.rl_memory_driver = type { ptr, i64 }
%struct.rl_page = type { i64, ptr, ptr }

@stderr = external global ptr, align 8
@.str.22 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [34 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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @rl_ensure_pages(ptr noundef) #4

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

31:                                               ; preds = %6
  %32 = load i32, ptr %13, align 4, !tbaa !11
  %33 = icmp ne i32 %32, 0
  br i1 %33, label %72, label %34

34:                                               ; preds = %31
  %35 = load ptr, ptr %8, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.rlite, ptr %35, i32 0, i32 6
  %37 = load i64, ptr %36, align 8, !tbaa !13
  %38 = mul i64 %37, 1
  %39 = call noalias ptr @malloc(i64 noundef %38) #7
  store ptr %39, ptr %16, align 8, !tbaa !5
  %40 = load ptr, ptr %16, align 8, !tbaa !5
  %41 = icmp ne ptr %40, null
  br i1 %41, label %43, label %42

42:                                               ; preds = %34
  store i32 4, ptr %15, align 4, !tbaa !11
  br label %309

43:                                               ; preds = %34
  %44 = load ptr, ptr %9, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.rl_data_type, ptr %44, i32 0, i32 1
  %46 = load ptr, ptr %45, align 8, !tbaa !15
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = load ptr, ptr %12, align 8, !tbaa !5
  %49 = load ptr, ptr %48, align 8, !tbaa !5
  %50 = load ptr, ptr %16, align 8, !tbaa !5
  %51 = call i32 %46(ptr noundef %47, ptr noundef %49, ptr noundef %50)
  store i32 %51, ptr %15, align 4, !tbaa !11
  %52 = load i32, ptr %15, align 4, !tbaa !11
  %53 = icmp ne i32 %52, 0
  br i1 %53, label %54, label %57

54:                                               ; preds = %43
  %55 = load ptr, ptr %16, align 8, !tbaa !5
  call void @free(ptr noundef %55) #6
  %56 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %56, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %312

57:                                               ; preds = %43
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.rl_data_type, ptr %58, i32 0, i32 2
  %60 = load ptr, ptr %59, align 8, !tbaa !17
  %61 = load ptr, ptr %8, align 8, !tbaa !5
  %62 = load ptr, ptr %12, align 8, !tbaa !5
  %63 = load ptr, ptr %11, align 8, !tbaa !5
  %64 = load ptr, ptr %16, align 8, !tbaa !5
  %65 = call i32 %60(ptr noundef %61, ptr noundef %62, ptr noundef %63, ptr noundef %64)
  store i32 %65, ptr %15, align 4, !tbaa !11
  %66 = load ptr, ptr %16, align 8, !tbaa !5
  call void @free(ptr noundef %66) #6
  %67 = load i32, ptr %15, align 4, !tbaa !11
  %68 = icmp ne i32 %67, 0
  br i1 %68, label %69, label %71

69:                                               ; preds = %57
  %70 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %70, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %312

71:                                               ; preds = %57
  store i32 2, ptr %15, align 4, !tbaa !11
  br label %72

72:                                               ; preds = %71, %31
  %73 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %73, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %312

74:                                               ; preds = %6
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.rlite, ptr %75, i32 0, i32 6
  %77 = load i64, ptr %76, align 8, !tbaa !13
  %78 = mul i64 %77, 1
  %79 = call noalias ptr @malloc(i64 noundef %78) #7
  store ptr %79, ptr %14, align 8, !tbaa !5
  %80 = load ptr, ptr %14, align 8, !tbaa !5
  %81 = icmp ne ptr %80, null
  br i1 %81, label %83, label %82

82:                                               ; preds = %74
  store i32 4, ptr %15, align 4, !tbaa !11
  br label %309

83:                                               ; preds = %74
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.rlite, ptr %84, i32 0, i32 8
  %86 = load i32, ptr %85, align 8, !tbaa !18
  %87 = icmp eq i32 %86, 1
  br i1 %87, label %88, label %133

88:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.rlite, ptr %89, i32 0, i32 7
  %91 = load ptr, ptr %90, align 8, !tbaa !19
  store ptr %91, ptr %18, align 8, !tbaa !5
  %92 = load ptr, ptr %8, align 8, !tbaa !5
  %93 = call i32 @file_driver_fp(ptr noundef %92)
  store i32 %93, ptr %15, align 4, !tbaa !11
  %94 = load i32, ptr %15, align 4, !tbaa !11
  %95 = icmp ne i32 0, %94
  br i1 %95, label %96, label %97

96:                                               ; preds = %88
  store i32 2, ptr %17, align 4
  br label %130

97:                                               ; preds = %88
  %98 = load ptr, ptr %18, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.rl_file_driver, ptr %98, i32 0, i32 0
  %100 = load ptr, ptr %99, align 8, !tbaa !20
  %101 = load i64, ptr %10, align 8, !tbaa !9
  %102 = load ptr, ptr %8, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.rlite, ptr %102, i32 0, i32 6
  %104 = load i64, ptr %103, align 8, !tbaa !13
  %105 = mul nsw i64 %101, %104
  %106 = call i32 @fseek(ptr noundef %100, i64 noundef %105, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %107 = load ptr, ptr %14, align 8, !tbaa !5
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.rlite, ptr %108, i32 0, i32 6
  %110 = load i64, ptr %109, align 8, !tbaa !13
  %111 = load ptr, ptr %18, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.rl_file_driver, ptr %111, i32 0, i32 0
  %113 = load ptr, ptr %112, align 8, !tbaa !20
  %114 = call i64 @fread(ptr noundef %107, i64 noundef 1, i64 noundef %110, ptr noundef %113)
  store i64 %114, ptr %19, align 8, !tbaa !9
  %115 = load i64, ptr %19, align 8, !tbaa !9
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.rlite, ptr %116, i32 0, i32 6
  %118 = load i64, ptr %117, align 8, !tbaa !13
  %119 = icmp ne i64 %115, %118
  br i1 %119, label %120, label %128

120:                                              ; preds = %97
  %121 = load i64, ptr %10, align 8, !tbaa !9
  %122 = icmp sgt i64 %121, 0
  br i1 %122, label %123, label %127

123:                                              ; preds = %120
  %124 = load ptr, ptr @stderr, align 8, !tbaa !5
  %125 = load i64, ptr %10, align 8, !tbaa !9
  %126 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef @.str.22, i64 noundef %125, i32 noundef 628) #6
  call void @perror(ptr noundef null)
  br label %127

127:                                              ; preds = %123, %120
  store i32 3, ptr %15, align 4, !tbaa !11
  store i32 2, ptr %17, align 4
  br label %129

128:                                              ; preds = %97
  store i32 0, ptr %17, align 4
  br label %129

129:                                              ; preds = %128, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %130

130:                                              ; preds = %129, %96
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  %131 = load i32, ptr %17, align 4
  switch i32 %131, label %312 [
    i32 0, label %132
    i32 2, label %309
  ]

132:                                              ; preds = %130
  br label %182

133:                                              ; preds = %83
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.rlite, ptr %134, i32 0, i32 8
  %136 = load i32, ptr %135, align 8, !tbaa !18
  %137 = icmp eq i32 %136, 0
  br i1 %137, label %138, label %174

138:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %139 = load ptr, ptr %8, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.rlite, ptr %139, i32 0, i32 7
  %141 = load ptr, ptr %140, align 8, !tbaa !19
  store ptr %141, ptr %20, align 8, !tbaa !5
  %142 = load i64, ptr %10, align 8, !tbaa !9
  %143 = add nsw i64 %142, 1
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.rlite, ptr %144, i32 0, i32 6
  %146 = load i64, ptr %145, align 8, !tbaa !13
  %147 = mul nsw i64 %143, %146
  %148 = load ptr, ptr %20, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.rl_memory_driver, ptr %148, i32 0, i32 1
  %150 = load i64, ptr %149, align 8, !tbaa !22
  %151 = icmp sgt i64 %147, %150
  br i1 %151, label %152, label %156

152:                                              ; preds = %138
  %153 = load ptr, ptr @stderr, align 8, !tbaa !5
  %154 = load i64, ptr %10, align 8, !tbaa !9
  %155 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef @.str.22, i64 noundef %154, i32 noundef 638) #6
  store i32 3, ptr %15, align 4, !tbaa !11
  store i32 2, ptr %17, align 4
  br label %171

156:                                              ; preds = %138
  %157 = load ptr, ptr %14, align 8, !tbaa !5
  %158 = load ptr, ptr %20, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.rl_memory_driver, ptr %158, i32 0, i32 0
  %160 = load ptr, ptr %159, align 8, !tbaa !24
  %161 = load i64, ptr %10, align 8, !tbaa !9
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.rlite, ptr %162, i32 0, i32 6
  %164 = load i64, ptr %163, align 8, !tbaa !13
  %165 = mul nsw i64 %161, %164
  %166 = getelementptr inbounds i8, ptr %160, i64 %165
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.rlite, ptr %167, i32 0, i32 6
  %169 = load i64, ptr %168, align 8, !tbaa !13
  %170 = mul i64 1, %169
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %157, ptr align 1 %166, i64 %170, i1 false)
  store i32 0, ptr %17, align 4
  br label %171

171:                                              ; preds = %156, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  %172 = load i32, ptr %17, align 4
  switch i32 %172, label %312 [
    i32 0, label %173
    i32 2, label %309
  ]

173:                                              ; preds = %171
  br label %181

174:                                              ; preds = %133
  %175 = load ptr, ptr @stderr, align 8, !tbaa !5
  %176 = load ptr, ptr %8, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.rlite, ptr %176, i32 0, i32 8
  %178 = load i32, ptr %177, align 8, !tbaa !18
  %179 = load i64, ptr %10, align 8, !tbaa !9
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef @.str.23, i32 noundef %178, i64 noundef %179) #6
  store i32 6, ptr %15, align 4, !tbaa !11
  br label %309

181:                                              ; preds = %173
  br label %182

182:                                              ; preds = %181, %132
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = load ptr, ptr %9, align 8, !tbaa !5
  %185 = load i64, ptr %10, align 8, !tbaa !9
  %186 = load ptr, ptr %11, align 8, !tbaa !5
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.rlite, ptr %187, i32 0, i32 15
  %189 = load ptr, ptr %188, align 8, !tbaa !25
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.rlite, ptr %190, i32 0, i32 14
  %192 = load i64, ptr %191, align 8, !tbaa !26
  %193 = call i32 @rl_search_cache(ptr noundef %183, ptr noundef %184, i64 noundef %185, ptr noundef null, ptr noundef %21, ptr noundef %186, ptr noundef %189, i64 noundef %192)
  store i32 %193, ptr %15, align 4, !tbaa !11
  %194 = load i32, ptr %15, align 4, !tbaa !11
  %195 = icmp ne i32 %194, 3
  br i1 %195, label %196, label %199

196:                                              ; preds = %182
  %197 = load ptr, ptr @stderr, align 8, !tbaa !5
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef @.str.24) #6
  store i32 6, ptr %15, align 4, !tbaa !11
  br label %309

199:                                              ; preds = %182
  %200 = load ptr, ptr %9, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.rl_data_type, ptr %200, i32 0, i32 2
  %202 = load ptr, ptr %201, align 8, !tbaa !17
  %203 = load ptr, ptr %8, align 8, !tbaa !5
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = load ptr, ptr %11, align 8, !tbaa !5
  %206 = icmp ne ptr %205, null
  br i1 %206, label %207, label %209

207:                                              ; preds = %199
  %208 = load ptr, ptr %11, align 8, !tbaa !5
  br label %211

209:                                              ; preds = %199
  %210 = load ptr, ptr %9, align 8, !tbaa !5
  br label %211

211:                                              ; preds = %209, %207
  %212 = phi ptr [ %208, %207 ], [ %210, %209 ]
  %213 = load ptr, ptr %14, align 8, !tbaa !5
  %214 = call i32 %202(ptr noundef %203, ptr noundef %204, ptr noundef %212, ptr noundef %213)
  store i32 %214, ptr %15, align 4, !tbaa !11
  %215 = load i32, ptr %15, align 4, !tbaa !11
  %216 = icmp ne i32 %215, 0
  br i1 %216, label %217, label %218

217:                                              ; preds = %211
  br label %309

218:                                              ; preds = %211
  %219 = load i32, ptr %13, align 4, !tbaa !11
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %221, label %304

221:                                              ; preds = %218
  %222 = load ptr, ptr %8, align 8, !tbaa !5
  %223 = call i32 @rl_ensure_pages(ptr noundef %222)
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %224 = call noalias ptr @malloc(i64 noundef 24) #7
  store ptr %224, ptr %22, align 8, !tbaa !5
  %225 = load ptr, ptr %22, align 8, !tbaa !5
  %226 = icmp ne ptr %225, null
  br i1 %226, label %250, label %227

227:                                              ; preds = %221
  %228 = load ptr, ptr %12, align 8, !tbaa !5
  %229 = icmp ne ptr %228, null
  br i1 %229, label %230, label %249

230:                                              ; preds = %227
  %231 = load ptr, ptr %9, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.rl_data_type, ptr %231, i32 0, i32 3
  %233 = load ptr, ptr %232, align 8, !tbaa !27
  %234 = icmp ne ptr %233, null
  br i1 %234, label %235, label %247

235:                                              ; preds = %230
  %236 = load ptr, ptr %12, align 8, !tbaa !5
  %237 = load ptr, ptr %236, align 8, !tbaa !5
  %238 = icmp ne ptr %237, null
  br i1 %238, label %239, label %247

239:                                              ; preds = %235
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.rl_data_type, ptr %240, i32 0, i32 3
  %242 = load ptr, ptr %241, align 8, !tbaa !27
  %243 = load ptr, ptr %8, align 8, !tbaa !5
  %244 = load ptr, ptr %12, align 8, !tbaa !5
  %245 = load ptr, ptr %244, align 8, !tbaa !5
  %246 = call i32 %242(ptr noundef %243, ptr noundef %245)
  br label %247

247:                                              ; preds = %239, %235, %230
  %248 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr null, ptr %248, align 8, !tbaa !5
  br label %249

249:                                              ; preds = %247, %227
  store i32 4, ptr %15, align 4, !tbaa !11
  store i32 2, ptr %17, align 4
  br label %301

250:                                              ; preds = %221
  %251 = load i64, ptr %10, align 8, !tbaa !9
  %252 = load ptr, ptr %22, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.rl_page, ptr %252, i32 0, i32 0
  store i64 %251, ptr %253, align 8, !tbaa !28
  %254 = load ptr, ptr %9, align 8, !tbaa !5
  %255 = load ptr, ptr %22, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.rl_page, ptr %255, i32 0, i32 1
  store ptr %254, ptr %256, align 8, !tbaa !30
  %257 = load ptr, ptr %12, align 8, !tbaa !5
  %258 = icmp ne ptr %257, null
  br i1 %258, label %259, label %262

259:                                              ; preds = %250
  %260 = load ptr, ptr %12, align 8, !tbaa !5
  %261 = load ptr, ptr %260, align 8, !tbaa !5
  br label %263

262:                                              ; preds = %250
  br label %263

263:                                              ; preds = %262, %259
  %264 = phi ptr [ %261, %259 ], [ null, %262 ]
  %265 = load ptr, ptr %22, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.rl_page, ptr %265, i32 0, i32 2
  store ptr %264, ptr %266, align 8, !tbaa !31
  %267 = load i64, ptr %21, align 8, !tbaa !9
  %268 = load ptr, ptr %8, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.rlite, ptr %268, i32 0, i32 14
  %270 = load i64, ptr %269, align 8, !tbaa !26
  %271 = icmp slt i64 %267, %270
  br i1 %271, label %272, label %290

272:                                              ; preds = %263
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.rlite, ptr %273, i32 0, i32 15
  %275 = load ptr, ptr %274, align 8, !tbaa !25
  %276 = load i64, ptr %21, align 8, !tbaa !9
  %277 = add nsw i64 %276, 1
  %278 = getelementptr inbounds ptr, ptr %275, i64 %277
  %279 = load ptr, ptr %8, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.rlite, ptr %279, i32 0, i32 15
  %281 = load ptr, ptr %280, align 8, !tbaa !25
  %282 = load i64, ptr %21, align 8, !tbaa !9
  %283 = getelementptr inbounds ptr, ptr %281, i64 %282
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.rlite, ptr %284, i32 0, i32 14
  %286 = load i64, ptr %285, align 8, !tbaa !26
  %287 = load i64, ptr %21, align 8, !tbaa !9
  %288 = sub nsw i64 %286, %287
  %289 = mul i64 8, %288
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %278, ptr align 8 %283, i64 %289, i1 false)
  br label %290

290:                                              ; preds = %272, %263
  %291 = load ptr, ptr %22, align 8, !tbaa !5
  %292 = load ptr, ptr %8, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.rlite, ptr %292, i32 0, i32 15
  %294 = load ptr, ptr %293, align 8, !tbaa !25
  %295 = load i64, ptr %21, align 8, !tbaa !9
  %296 = getelementptr inbounds ptr, ptr %294, i64 %295
  store ptr %291, ptr %296, align 8, !tbaa !5
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.rlite, ptr %297, i32 0, i32 14
  %299 = load i64, ptr %298, align 8, !tbaa !26
  %300 = add nsw i64 %299, 1
  store i64 %300, ptr %298, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %301

301:                                              ; preds = %290, %249
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  %302 = load i32, ptr %17, align 4
  switch i32 %302, label %312 [
    i32 0, label %303
    i32 2, label %309
  ]

303:                                              ; preds = %301
  br label %304

304:                                              ; preds = %303, %218
  %305 = load i32, ptr %15, align 4, !tbaa !11
  %306 = icmp eq i32 %305, 0
  br i1 %306, label %307, label %308

307:                                              ; preds = %304
  store i32 2, ptr %15, align 4, !tbaa !11
  br label %308

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

309:                                              ; preds = %308, %301, %217, %196, %174, %171, %130, %82, %42
  %310 = load ptr, ptr %14, align 8, !tbaa !5
  call void @free(ptr noundef %310) #6
  %311 = load i32, ptr %15, align 4, !tbaa !11
  store i32 %311, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %312

312:                                              ; preds = %309, %301, %171, %130, %72, %69, %54
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  %313 = load i32, ptr %7, align 4
  ret i32 %313
}

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @rl_read_from_cache(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

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

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

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #5

declare void @perror(ptr noundef) #5

; 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) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !10, i64 48}
!14 = !{!"rlite", !10, i64 0, !10, i64 8, !12, i64 16, !6, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !12, i64 64, !12, i64 68, !12, i64 72, !12, 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}
!15 = !{!16, !6, i64 8}
!16 = !{!"rl_data_type", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!16, !6, i64 16}
!18 = !{!14, !12, i64 64}
!19 = !{!14, !6, i64 56}
!20 = !{!21, !6, i64 0}
!21 = !{!"", !6, i64 0, !6, i64 8, !12, i64 16}
!22 = !{!23, !10, i64 8}
!23 = !{!"", !6, i64 0, !10, i64 8}
!24 = !{!23, !6, i64 0}
!25 = !{!14, !6, i64 104}
!26 = !{!14, !10, i64 96}
!27 = !{!16, !6, i64 24}
!28 = !{!29, !10, i64 0}
!29 = !{!"", !10, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!29, !6, i64 8}
!31 = !{!29, !6, i64 16}


; 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.22 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @rl_ensure_pages(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local i32 @rl_read(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5) local_unnamed_addr #4 {
  %7 = alloca i64, align 8
  %8 = tail call i32 @rl_read_from_cache(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4)
  %.not = icmp eq i32 %8, 3
  br i1 %.not, label %24, label %9

9:                                                ; preds = %6
  %.not137 = icmp eq i32 %5, 0
  br i1 %.not137, label %10, label %115

10:                                               ; preds = %9
  %11 = getelementptr inbounds i8, ptr %0, i64 48
  %12 = load i64, ptr %11, align 8, !tbaa !5
  %13 = tail call noalias ptr @malloc(i64 noundef %12) #5
  %.not138 = icmp eq ptr %13, null
  br i1 %.not138, label %.thread, label %14

14:                                               ; preds = %10
  %15 = getelementptr inbounds i8, ptr %1, i64 8
  %16 = load ptr, ptr %15, align 8, !tbaa !12
  %17 = load ptr, ptr %4, align 8, !tbaa !14
  %18 = tail call i32 %16(ptr noundef nonnull %0, ptr noundef %17, ptr noundef nonnull %13) #6
  %.not139 = icmp eq i32 %18, 0
  br i1 %.not139, label %20, label %19

19:                                               ; preds = %14
  tail call void @free(ptr noundef nonnull %13) #6
  br label %115

20:                                               ; preds = %14
  %21 = getelementptr inbounds i8, ptr %1, i64 16
  %22 = load ptr, ptr %21, align 8, !tbaa !15
  %23 = tail call i32 %22(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %3, ptr noundef nonnull %13) #6
  tail call void @free(ptr noundef nonnull %13) #6
  %.not140 = icmp eq i32 %23, 0
  %spec.select = select i1 %.not140, i32 2, i32 %23
  br label %115

24:                                               ; preds = %6
  %25 = getelementptr inbounds i8, ptr %0, i64 48
  %26 = load i64, ptr %25, align 8, !tbaa !5
  %27 = tail call noalias ptr @malloc(i64 noundef %26) #5
  %.not125 = icmp eq ptr %27, null
  br i1 %.not125, label %.thread, label %28

28:                                               ; preds = %24
  %29 = getelementptr inbounds i8, ptr %0, i64 64
  %30 = load i32, ptr %29, align 8, !tbaa !16
  switch i32 %30, label %63 [
    i32 1, label %31
    i32 0, label %49
  ]

31:                                               ; preds = %28
  %32 = getelementptr inbounds i8, ptr %0, i64 56
  %33 = load ptr, ptr %32, align 8, !tbaa !17
  %34 = tail call i32 @file_driver_fp(ptr noundef nonnull %0)
  %.not126 = icmp eq i32 %34, 0
  br i1 %.not126, label %35, label %.thread

35:                                               ; preds = %31
  %36 = load ptr, ptr %33, align 8, !tbaa !18
  %37 = load i64, ptr %25, align 8, !tbaa !5
  %38 = mul nsw i64 %37, %2
  %39 = tail call i32 @fseek(ptr noundef %36, i64 noundef %38, i32 noundef 0)
  %40 = load i64, ptr %25, align 8, !tbaa !5
  %41 = load ptr, ptr %33, align 8, !tbaa !18
  %42 = tail call i64 @fread(ptr noundef nonnull %27, i64 noundef 1, i64 noundef %40, ptr noundef %41)
  %43 = load i64, ptr %25, align 8, !tbaa !5
  %.not127 = icmp eq i64 %42, %43
  br i1 %.not127, label %66, label %44

44:                                               ; preds = %35
  %45 = icmp sgt i64 %2, 0
  br i1 %45, label %46, label %.thread

46:                                               ; preds = %44
  %47 = load ptr, ptr @stderr, align 8, !tbaa !14
  %48 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %47, ptr noundef nonnull @.str.22, i64 noundef %2, i32 noundef 628) #7
  tail call void @perror(ptr noundef null) #8
  br label %.thread

49:                                               ; preds = %28
  %50 = getelementptr inbounds i8, ptr %0, i64 56
  %51 = load ptr, ptr %50, align 8, !tbaa !17
  %52 = add nsw i64 %2, 1
  %53 = mul nsw i64 %26, %52
  %54 = getelementptr inbounds i8, ptr %51, i64 8
  %55 = load i64, ptr %54, align 8, !tbaa !20
  %56 = icmp sgt i64 %53, %55
  br i1 %56, label %60, label %.thread151

.thread151:                                       ; preds = %49
  %57 = load ptr, ptr %51, align 8, !tbaa !22
  %58 = mul nsw i64 %26, %2
  %59 = getelementptr inbounds i8, ptr %57, i64 %58
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %27, ptr align 1 %59, i64 %26, i1 false)
  br label %66

60:                                               ; preds = %49
  %61 = load ptr, ptr @stderr, align 8, !tbaa !14
  %62 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef nonnull @.str.22, i64 noundef %2, i32 noundef 638) #7
  br label %.thread

63:                                               ; preds = %28
  %64 = load ptr, ptr @stderr, align 8, !tbaa !14
  %65 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %64, ptr noundef nonnull @.str.23, i32 noundef %30, i64 noundef %2) #7
  br label %.thread

66:                                               ; preds = %.thread151, %35
  %67 = getelementptr inbounds i8, ptr %0, i64 104
  %68 = load ptr, ptr %67, align 8, !tbaa !23
  %69 = getelementptr inbounds i8, ptr %0, i64 96
  %70 = load i64, ptr %69, align 8, !tbaa !24
  %71 = call i32 @rl_search_cache(ptr noundef nonnull %0, ptr noundef %1, i64 noundef %2, ptr noundef null, ptr noundef nonnull %7, ptr noundef %3, ptr noundef %68, i64 noundef %70)
  %.not128 = icmp eq i32 %71, 3
  br i1 %.not128, label %75, label %72

72:                                               ; preds = %66
  %73 = load ptr, ptr @stderr, align 8, !tbaa !14
  %74 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %73, ptr noundef nonnull @.str.24) #7
  br label %.thread

75:                                               ; preds = %66
  %76 = getelementptr inbounds i8, ptr %1, i64 16
  %77 = load ptr, ptr %76, align 8, !tbaa !15
  %.not129 = icmp eq ptr %3, null
  %78 = select i1 %.not129, ptr %1, ptr %3
  %79 = call i32 %77(ptr noundef nonnull %0, ptr noundef %4, ptr noundef %78, ptr noundef nonnull %27) #6
  %.not130 = icmp eq i32 %79, 0
  br i1 %.not130, label %80, label %.thread

80:                                               ; preds = %75
  %.not131 = icmp eq i32 %5, 0
  br i1 %.not131, label %.thread, label %81

81:                                               ; preds = %80
  %82 = call i32 @rl_ensure_pages(ptr noundef nonnull %0)
  %83 = call noalias dereferenceable_or_null(24) ptr @malloc(i64 noundef 24) #5
  %.not132 = icmp eq ptr %83, null
  br i1 %.not132, label %84, label %93

84:                                               ; preds = %81
  %.not133 = icmp eq ptr %4, null
  br i1 %.not133, label %.thread, label %85

85:                                               ; preds = %84
  %86 = getelementptr inbounds i8, ptr %1, i64 24
  %87 = load ptr, ptr %86, align 8, !tbaa !25
  %.not134 = icmp eq ptr %87, null
  br i1 %.not134, label %92, label %88

88:                                               ; preds = %85
  %89 = load ptr, ptr %4, align 8, !tbaa !14
  %.not135 = icmp eq ptr %89, null
  br i1 %.not135, label %92, label %90

90:                                               ; preds = %88
  %91 = call i32 %87(ptr noundef nonnull %0, ptr noundef nonnull %89) #6
  br label %92

92:                                               ; preds = %90, %88, %85
  store ptr null, ptr %4, align 8, !tbaa !14
  br label %.thread

93:                                               ; preds = %81
  store i64 %2, ptr %83, align 8, !tbaa !26
  %94 = getelementptr inbounds i8, ptr %83, i64 8
  store ptr %1, ptr %94, align 8, !tbaa !28
  %.not136 = icmp eq ptr %4, null
  br i1 %.not136, label %97, label %95

95:                                               ; preds = %93
  %96 = load ptr, ptr %4, align 8, !tbaa !14
  br label %97

97:                                               ; preds = %93, %95
  %98 = phi ptr [ %96, %95 ], [ null, %93 ]
  %99 = getelementptr inbounds i8, ptr %83, i64 16
  store ptr %98, ptr %99, align 8, !tbaa !29
  %100 = load i64, ptr %7, align 8, !tbaa !30
  %101 = load i64, ptr %69, align 8, !tbaa !24
  %102 = icmp slt i64 %100, %101
  br i1 %102, label %103, label %109

103:                                              ; preds = %97
  %104 = load ptr, ptr %67, align 8, !tbaa !23
  %105 = getelementptr ptr, ptr %104, i64 %100
  %106 = getelementptr i8, ptr %105, i64 8
  %107 = sub nsw i64 %101, %100
  %108 = shl i64 %107, 3
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %106, ptr align 8 %105, i64 %108, i1 false)
  %.pre = load i64, ptr %7, align 8, !tbaa !30
  %.pre159 = load i64, ptr %69, align 8, !tbaa !24
  br label %109

109:                                              ; preds = %97, %103
  %110 = phi i64 [ %101, %97 ], [ %.pre159, %103 ]
  %111 = phi i64 [ %100, %97 ], [ %.pre, %103 ]
  %112 = load ptr, ptr %67, align 8, !tbaa !23
  %113 = getelementptr inbounds ptr, ptr %112, i64 %111
  store ptr %83, ptr %113, align 8, !tbaa !14
  %114 = add nsw i64 %110, 1
  store i64 %114, ptr %69, align 8, !tbaa !24
  br label %.thread

.thread:                                          ; preds = %84, %92, %44, %46, %31, %80, %109, %60, %24, %10, %75, %72, %63
  %.6 = phi i32 [ 6, %72 ], [ %79, %75 ], [ 3, %60 ], [ 6, %63 ], [ 4, %10 ], [ 4, %24 ], [ 2, %109 ], [ 2, %80 ], [ 3, %44 ], [ 3, %46 ], [ %34, %31 ], [ 4, %92 ], [ 4, %84 ]
  %.099 = phi ptr [ %27, %72 ], [ %27, %75 ], [ %27, %60 ], [ %27, %63 ], [ null, %10 ], [ null, %24 ], [ %27, %109 ], [ %27, %80 ], [ %27, %44 ], [ %27, %46 ], [ %27, %31 ], [ %27, %92 ], [ %27, %84 ]
  call void @free(ptr noundef %.099) #6
  br label %115

115:                                              ; preds = %20, %9, %.thread, %19
  %.0 = phi i32 [ %18, %19 ], [ %.6, %.thread ], [ %8, %9 ], [ %spec.select, %20 ]
  ret i32 %.0
}

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @rl_read_from_cache(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: nofree nounwind
declare noundef i32 @fseek(ptr nocapture noundef, i64 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare void @perror(ptr nocapture noundef readonly) local_unnamed_addr #1

; 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) #0

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

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

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


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