; LLVM IR from LiuYuguang/supersimplefiledatabase :: filedb (db_checker)

; 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.stat = type { i64, i64, i64, i32, i32, i32, i32, i64, i64, i64, i64, %struct.timespec, %struct.timespec, %struct.timespec, [3 x i64] }
%struct.timespec = type { i64, i64 }
%struct.db_s = type { i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, ptr }
%struct.btree_node = type { i64, i64, i64, i32 }

; 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 uwtable
define dso_local i32 @db_checker(ptr noundef %0) #1 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca %struct.stat, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 144, ptr %4) #4
  %12 = load ptr, ptr %3, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.db_s, ptr %12, i32 0, i32 0
  %14 = load i32, ptr %13, align 8, !tbaa !9
  %15 = call i32 @fstat(i32 noundef %14, ptr noundef %4) #4
  %16 = icmp eq i32 %15, -1
  br i1 %16, label %17, label %18

17:                                               ; preds = %1
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

18:                                               ; preds = %1
  %19 = getelementptr inbounds %struct.stat, ptr %4, i32 0, i32 8
  %20 = load i64, ptr %19, align 8, !tbaa !13
  %21 = icmp ult i64 %20, 12288
  br i1 %21, label %28, label %22

22:                                               ; preds = %18
  %23 = getelementptr inbounds %struct.stat, ptr %4, i32 0, i32 8
  %24 = load i64, ptr %23, align 8, !tbaa !13
  %25 = sub i64 %24, 4096
  %26 = urem i64 %25, 8192
  %27 = icmp ne i64 %26, 0
  br i1 %27, label %28, label %29

28:                                               ; preds = %22, %18
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

29:                                               ; preds = %22
  %30 = load ptr, ptr %3, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.db_s, ptr %30, i32 0, i32 1
  %32 = load i32, ptr %31, align 4, !tbaa !16
  switch i32 %32, label %59 [
    i32 0, label %33
    i32 1, label %33
    i32 2, label %45
    i32 3, label %52
  ]

33:                                               ; preds = %29, %29
  %34 = load ptr, ptr %3, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.db_s, ptr %34, i32 0, i32 2
  %36 = load i64, ptr %35, align 8, !tbaa !17
  %37 = icmp ult i64 %36, 4
  br i1 %37, label %43, label %38

38:                                               ; preds = %33
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.db_s, ptr %39, i32 0, i32 2
  %41 = load i64, ptr %40, align 8, !tbaa !17
  %42 = icmp ugt i64 %41, 128
  br i1 %42, label %43, label %44

43:                                               ; preds = %38, %33
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

44:                                               ; preds = %38
  br label %60

45:                                               ; preds = %29
  %46 = load ptr, ptr %3, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.db_s, ptr %46, i32 0, i32 2
  %48 = load i64, ptr %47, align 8, !tbaa !17
  %49 = icmp ne i64 %48, 4
  br i1 %49, label %50, label %51

50:                                               ; preds = %45
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

51:                                               ; preds = %45
  br label %60

52:                                               ; preds = %29
  %53 = load ptr, ptr %3, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.db_s, ptr %53, i32 0, i32 2
  %55 = load i64, ptr %54, align 8, !tbaa !17
  %56 = icmp ne i64 %55, 8
  br i1 %56, label %57, label %58

57:                                               ; preds = %52
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

58:                                               ; preds = %52
  br label %60

59:                                               ; preds = %29
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

60:                                               ; preds = %58, %51, %44
  %61 = load ptr, ptr %3, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.db_s, ptr %61, i32 0, i32 3
  %63 = load i64, ptr %62, align 8, !tbaa !18
  %64 = load ptr, ptr %3, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.db_s, ptr %64, i32 0, i32 2
  %66 = load i64, ptr %65, align 8, !tbaa !17
  %67 = add i64 16, %66
  %68 = add i64 %67, 15
  %69 = and i64 %68, -16
  %70 = icmp ne i64 %63, %69
  br i1 %70, label %71, label %72

71:                                               ; preds = %60
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

72:                                               ; preds = %60
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.db_s, ptr %73, i32 0, i32 4
  %75 = load i64, ptr %74, align 8, !tbaa !19
  %76 = load ptr, ptr %3, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.db_s, ptr %76, i32 0, i32 3
  %78 = load i64, ptr %77, align 8, !tbaa !18
  %79 = udiv i64 8160, %78
  %80 = sub i64 %79, 1
  %81 = icmp ne i64 %75, %80
  br i1 %81, label %82, label %83

82:                                               ; preds = %72
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %162

83:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %84, i64 4096
  %86 = getelementptr inbounds i8, ptr %85, i64 0
  store ptr %86, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  store i64 0, ptr %8, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  store i64 0, ptr %9, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  store i64 0, ptr %10, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store i64 0, ptr %11, align 8, !tbaa !20
  store i64 4096, ptr %7, align 8, !tbaa !20
  br label %87

87:                                               ; preds = %134, %83
  %88 = load i64, ptr %7, align 8, !tbaa !20
  %89 = getelementptr inbounds %struct.stat, ptr %4, i32 0, i32 8
  %90 = load i64, ptr %89, align 8, !tbaa !13
  %91 = icmp slt i64 %88, %90
  br i1 %91, label %92, label %137

92:                                               ; preds = %87
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = load i64, ptr %7, align 8, !tbaa !20
  %96 = call i64 @node_seek(ptr noundef %93, ptr noundef %94, i64 noundef %95)
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.btree_node, ptr %97, i32 0, i32 0
  %99 = load i64, ptr %98, align 8, !tbaa !21
  %100 = load i64, ptr %7, align 8, !tbaa !20
  %101 = icmp ne i64 %99, %100
  br i1 %101, label %102, label %103

102:                                              ; preds = %92
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %161

103:                                              ; preds = %92
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.btree_node, ptr %104, i32 0, i32 3
  %106 = load i32, ptr %105, align 8
  %107 = and i32 %106, 1
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %109, label %133

109:                                              ; preds = %103
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.btree_node, ptr %110, i32 0, i32 3
  %112 = load i32, ptr %111, align 8
  %113 = lshr i32 %112, 1
  %114 = and i32 %113, 1
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %124

116:                                              ; preds = %109
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.btree_node, ptr %117, i32 0, i32 1
  %119 = load i64, ptr %118, align 8, !tbaa !23
  %120 = load i64, ptr %8, align 8, !tbaa !20
  %121 = add i64 %120, %119
  store i64 %121, ptr %8, align 8, !tbaa !20
  %122 = load i64, ptr %10, align 8, !tbaa !20
  %123 = add i64 %122, 1
  store i64 %123, ptr %10, align 8, !tbaa !20
  br label %132

124:                                              ; preds = %109
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.btree_node, ptr %125, i32 0, i32 1
  %127 = load i64, ptr %126, align 8, !tbaa !23
  %128 = load i64, ptr %9, align 8, !tbaa !20
  %129 = add i64 %128, %127
  store i64 %129, ptr %9, align 8, !tbaa !20
  %130 = load i64, ptr %11, align 8, !tbaa !20
  %131 = add i64 %130, 1
  store i64 %131, ptr %11, align 8, !tbaa !20
  br label %132

132:                                              ; preds = %124, %116
  br label %133

133:                                              ; preds = %132, %103
  br label %134

134:                                              ; preds = %133
  %135 = load i64, ptr %7, align 8, !tbaa !20
  %136 = add i64 %135, 8192
  store i64 %136, ptr %7, align 8, !tbaa !20
  br label %87, !llvm.loop !24

137:                                              ; preds = %87
  %138 = load i64, ptr %8, align 8, !tbaa !20
  %139 = load i64, ptr %9, align 8, !tbaa !20
  %140 = icmp ne i64 %138, %139
  br i1 %140, label %159, label %141

141:                                              ; preds = %137
  %142 = load i64, ptr %8, align 8, !tbaa !20
  %143 = load ptr, ptr %3, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.db_s, ptr %143, i32 0, i32 5
  %145 = load i64, ptr %144, align 8, !tbaa !26
  %146 = icmp ne i64 %142, %145
  br i1 %146, label %159, label %147

147:                                              ; preds = %141
  %148 = load i64, ptr %10, align 8, !tbaa !20
  %149 = load ptr, ptr %3, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.db_s, ptr %149, i32 0, i32 6
  %151 = load i64, ptr %150, align 8, !tbaa !27
  %152 = icmp ne i64 %148, %151
  br i1 %152, label %159, label %153

153:                                              ; preds = %147
  %154 = load i64, ptr %11, align 8, !tbaa !20
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.db_s, ptr %155, i32 0, i32 7
  %157 = load i64, ptr %156, align 8, !tbaa !28
  %158 = icmp ne i64 %154, %157
  br i1 %158, label %159, label %160

159:                                              ; preds = %153, %147, %141, %137
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %161

160:                                              ; preds = %153
  store i32 0, ptr %2, align 4
  store i32 1, ptr %5, align 4
  br label %161

161:                                              ; preds = %160, %159, %102
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  br label %162

162:                                              ; preds = %161, %82, %71, %59, %57, %50, %43, %28, %17
  call void @llvm.lifetime.end.p0(i64 144, ptr %4) #4
  %163 = load i32, ptr %2, align 4
  ret i32 %163
}

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"db_s", !11, i64 0, !11, i64 4, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !6, i64 72}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !12, i64 48}
!14 = !{!"stat", !12, i64 0, !12, i64 8, !12, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !15, i64 72, !15, i64 88, !15, i64 104, !7, i64 120}
!15 = !{!"timespec", !12, i64 0, !12, i64 8}
!16 = !{!10, !11, i64 4}
!17 = !{!10, !12, i64 8}
!18 = !{!10, !12, i64 16}
!19 = !{!10, !12, i64 24}
!20 = !{!12, !12, i64 0}
!21 = !{!22, !12, i64 0}
!22 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !11, i64 24, !11, i64 24, !11, i64 24, !11, i64 24}
!23 = !{!22, !12, i64 8}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!10, !12, i64 32}
!27 = !{!10, !12, i64 40}
!28 = !{!10, !12, i64 48}


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

%struct.stat = type { i64, i64, i64, i32, i32, i32, i32, i64, i64, i64, i64, %struct.timespec, %struct.timespec, %struct.timespec, [3 x i64] }
%struct.timespec = type { i64, i64 }

; 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: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @db_checker(ptr noundef %0) local_unnamed_addr #1 {
  %2 = alloca %struct.stat, align 8
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %2) #4
  %3 = load i32, ptr %0, align 8, !tbaa !5
  %4 = call i32 @fstat(i32 noundef %3, ptr noundef nonnull %2) #4
  %5 = icmp eq i32 %4, -1
  br i1 %5, label %.loopexit, label %6

6:                                                ; preds = %1
  %7 = getelementptr inbounds i8, ptr %2, i64 48
  %8 = load i64, ptr %7, align 8, !tbaa !12
  %9 = icmp ugt i64 %8, 12287
  %10 = and i64 %8, 8191
  %.not = icmp eq i64 %10, 4096
  %or.cond = and i1 %9, %.not
  br i1 %or.cond, label %11, label %.loopexit

11:                                               ; preds = %6
  %12 = getelementptr inbounds i8, ptr %0, i64 4
  %13 = load i32, ptr %12, align 4, !tbaa !15
  switch i32 %13, label %.loopexit [
    i32 0, label %14
    i32 1, label %14
    i32 2, label %18
    i32 3, label %21
  ]

14:                                               ; preds = %11, %11
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = load i64, ptr %15, align 8, !tbaa !16
  %17 = add i64 %16, -129
  %or.cond56 = icmp ult i64 %17, -125
  br i1 %or.cond56, label %.loopexit, label %24

18:                                               ; preds = %11
  %19 = getelementptr inbounds i8, ptr %0, i64 8
  %20 = load i64, ptr %19, align 8, !tbaa !16
  %.not47 = icmp eq i64 %20, 4
  br i1 %.not47, label %24, label %.loopexit

21:                                               ; preds = %11
  %22 = getelementptr inbounds i8, ptr %0, i64 8
  %23 = load i64, ptr %22, align 8, !tbaa !16
  %.not46 = icmp eq i64 %23, 8
  br i1 %.not46, label %24, label %.loopexit

24:                                               ; preds = %14, %21, %18
  %25 = phi i64 [ %16, %14 ], [ 8, %21 ], [ 4, %18 ]
  %26 = getelementptr inbounds i8, ptr %0, i64 16
  %27 = load i64, ptr %26, align 8, !tbaa !17
  %28 = add nuw nsw i64 %25, 31
  %29 = and i64 %28, -16
  %.not48 = icmp eq i64 %27, %29
  br i1 %.not48, label %30, label %.loopexit

30:                                               ; preds = %24
  %31 = getelementptr inbounds i8, ptr %0, i64 24
  %32 = load i64, ptr %31, align 8, !tbaa !18
  %.rhs.trunc = trunc i64 %27 to i16
  %33 = udiv i16 8160, %.rhs.trunc
  %.zext = zext nneg i16 %33 to i64
  %34 = add nsw i64 %.zext, -1
  %.not49 = icmp eq i64 %32, %34
  br i1 %.not49, label %35, label %.loopexit

35:                                               ; preds = %30
  %36 = getelementptr inbounds i8, ptr %0, i64 4096
  %37 = icmp sgt i64 %8, 4096
  br i1 %37, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %35
  %38 = getelementptr inbounds i8, ptr %0, i64 4120
  %39 = getelementptr inbounds i8, ptr %0, i64 4104
  br label %40

40:                                               ; preds = %.lr.ph, %56
  %.065 = phi i64 [ 0, %.lr.ph ], [ %.1, %56 ]
  %.03464 = phi i64 [ 0, %.lr.ph ], [ %.135, %56 ]
  %.03663 = phi i64 [ 0, %.lr.ph ], [ %.137, %56 ]
  %.03862 = phi i64 [ 0, %.lr.ph ], [ %.139, %56 ]
  %.04061 = phi i64 [ 4096, %.lr.ph ], [ %57, %56 ]
  %41 = tail call i64 @node_seek(ptr noundef nonnull %0, ptr noundef nonnull %36, i64 noundef %.04061)
  %42 = load i64, ptr %36, align 8, !tbaa !19
  %.not54 = icmp eq i64 %42, %.04061
  br i1 %.not54, label %43, label %.loopexit

43:                                               ; preds = %40
  %44 = load i32, ptr %38, align 8
  %45 = and i32 %44, 1
  %.not55 = icmp eq i32 %45, 0
  br i1 %.not55, label %56, label %46

46:                                               ; preds = %43
  %47 = and i32 %44, 2
  %48 = icmp eq i32 %47, 0
  %49 = load i64, ptr %39, align 8, !tbaa !21
  br i1 %48, label %50, label %53

50:                                               ; preds = %46
  %51 = add i64 %49, %.03862
  %52 = add i64 %.03464, 1
  br label %56

53:                                               ; preds = %46
  %54 = add i64 %49, %.03663
  %55 = add i64 %.065, 1
  br label %56

56:                                               ; preds = %43, %53, %50
  %.139 = phi i64 [ %51, %50 ], [ %.03862, %53 ], [ %.03862, %43 ]
  %.137 = phi i64 [ %.03663, %50 ], [ %54, %53 ], [ %.03663, %43 ]
  %.135 = phi i64 [ %52, %50 ], [ %.03464, %53 ], [ %.03464, %43 ]
  %.1 = phi i64 [ %.065, %50 ], [ %55, %53 ], [ %.065, %43 ]
  %57 = add i64 %.04061, 8192
  %58 = icmp slt i64 %57, %8
  br i1 %58, label %40, label %._crit_edge, !llvm.loop !22

._crit_edge:                                      ; preds = %56
  %.not50 = icmp eq i64 %.139, %.137
  br i1 %.not50, label %._crit_edge.thread, label %.loopexit

._crit_edge.thread:                               ; preds = %35, %._crit_edge
  %.0.lcssa76 = phi i64 [ %.1, %._crit_edge ], [ 0, %35 ]
  %.034.lcssa75 = phi i64 [ %.135, %._crit_edge ], [ 0, %35 ]
  %.038.lcssa74 = phi i64 [ %.139, %._crit_edge ], [ 0, %35 ]
  %59 = getelementptr inbounds i8, ptr %0, i64 32
  %60 = load i64, ptr %59, align 8, !tbaa !24
  %.not51 = icmp eq i64 %.038.lcssa74, %60
  br i1 %.not51, label %61, label %.loopexit

61:                                               ; preds = %._crit_edge.thread
  %62 = getelementptr inbounds i8, ptr %0, i64 40
  %63 = load i64, ptr %62, align 8, !tbaa !25
  %.not52 = icmp eq i64 %.034.lcssa75, %63
  br i1 %.not52, label %64, label %.loopexit

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %0, i64 48
  %66 = load i64, ptr %65, align 8, !tbaa !26
  %.not53 = icmp ne i64 %.0.lcssa76, %66
  %spec.select = sext i1 %.not53 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %40, %64, %61, %._crit_edge.thread, %._crit_edge, %30, %24, %11, %21, %18, %14, %6, %1
  %.142 = phi i32 [ -1, %1 ], [ -1, %6 ], [ -1, %14 ], [ -1, %18 ], [ -1, %21 ], [ -1, %11 ], [ -1, %24 ], [ -1, %30 ], [ -1, %61 ], [ -1, %._crit_edge.thread ], [ -1, %._crit_edge ], [ %spec.select, %64 ], [ -1, %40 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %2) #4
  ret i32 %.142
}

; Function Attrs: nofree nounwind
declare noundef i32 @fstat(i32 noundef, ptr nocapture noundef) local_unnamed_addr #2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !7, i64 0}
!6 = !{!"db_s", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !11, i64 72}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!13, !10, i64 48}
!13 = !{!"stat", !10, i64 0, !10, i64 8, !10, i64 16, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !14, i64 72, !14, i64 88, !14, i64 104, !8, i64 120}
!14 = !{!"timespec", !10, i64 0, !10, i64 8}
!15 = !{!6, !7, i64 4}
!16 = !{!6, !10, i64 8}
!17 = !{!6, !10, i64 16}
!18 = !{!6, !10, i64 24}
!19 = !{!20, !10, i64 0}
!20 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !7, i64 24, !7, i64 24, !7, i64 24, !7, i64 24}
!21 = !{!20, !10, i64 8}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!6, !10, i64 32}
!25 = !{!6, !10, i64 40}
!26 = !{!6, !10, i64 48}


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