; LLVM IR from jspd-group/pegit :: src (delta)

; 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.delta_options = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, ptr, ptr, ptr }
%struct.anon = type { %struct.delta_stat, ptr, i8, i8, i8, %struct.pack_file_cache, ptr }
%struct.delta_stat = type { i64, i64 }
%struct.pack_file_cache = type { ptr, %struct.strbuf }
%struct.strbuf = type { i64, i64, ptr }

@d_opts = external dso_local global %struct.delta_options, align 8
@stderr = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [2 x i8], align 1
@directory_delta_var = external hidden global %struct.anon, align 8
@.str.72 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [20 x i8], align 1

declare i32 @printf(ptr noundef, ...) #0

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @commit_delta(ptr noundef, ptr noundef, i1 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare dso_local void @do_single_commit_delta(ptr noundef, i1 noundef zeroext, i1 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare dso_local void @do_single_file_delta(ptr noundef, i1 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare dso_local void @do_directory_delta(ptr noundef, i1 noundef zeroext, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @delta_parse_options(ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @delta_main(i32 noundef %0, ptr noundef %1) #3 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  store i32 %0, ptr %3, align 4, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !9
  store i8 0, ptr getelementptr inbounds (%struct.anon, ptr @directory_delta_var, i32 0, i32 3), align 1, !tbaa !11
  %5 = load i32, ptr %3, align 4, !tbaa !5
  %6 = load ptr, ptr %4, align 8, !tbaa !9
  call void @delta_parse_options(ptr noundef @d_opts, i32 noundef %5, ptr noundef %6)
  %7 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 5), align 1, !tbaa !18, !range !20, !noundef !21
  %8 = trunc i8 %7 to i1
  br i1 %8, label %9, label %14

9:                                                ; preds = %2
  %10 = call i32 (ptr, ...) @printf(ptr noundef @.str.73)
  %11 = call i32 (ptr, ...) @printf(ptr noundef @.str.40)
  %12 = call i32 (ptr, ...) @printf(ptr noundef @.str.74)
  %13 = call i32 (ptr, ...) @printf(ptr noundef @.str.75)
  call void @exit(i32 noundef -1) #4
  unreachable

14:                                               ; preds = %2
  %15 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 3), align 1, !tbaa !22, !range !20, !noundef !21
  %16 = trunc i8 %15 to i1
  br i1 %16, label %17, label %78

17:                                               ; preds = %14
  %18 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 2), align 2, !tbaa !23, !range !20, !noundef !21
  %19 = trunc i8 %18 to i1
  br i1 %19, label %78, label %20

20:                                               ; preds = %17
  %21 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 10), align 8, !tbaa !24
  %22 = icmp ne ptr %21, null
  br i1 %22, label %23, label %31

23:                                               ; preds = %20
  %24 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 11), align 8, !tbaa !25
  %25 = icmp ne ptr %24, null
  br i1 %25, label %26, label %31

26:                                               ; preds = %23
  %27 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 10), align 8, !tbaa !24
  %28 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 11), align 8, !tbaa !25
  %29 = load i8, ptr @d_opts, align 8, !tbaa !26, !range !20, !noundef !21
  %30 = trunc i8 %29 to i1
  call void @commit_delta(ptr noundef %27, ptr noundef %28, i1 noundef zeroext %30)
  br label %77

31:                                               ; preds = %23, %20
  %32 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 10), align 8, !tbaa !24
  %33 = icmp ne ptr %32, null
  br i1 %33, label %34, label %38

34:                                               ; preds = %31
  %35 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 10), align 8, !tbaa !24
  %36 = load i8, ptr @d_opts, align 8, !tbaa !26, !range !20, !noundef !21
  %37 = trunc i8 %36 to i1
  call void @do_single_commit_delta(ptr noundef %35, i1 noundef zeroext %37, i1 noundef zeroext true)
  br label %76

38:                                               ; preds = %31
  %39 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 11), align 8, !tbaa !25
  %40 = icmp ne ptr %39, null
  br i1 %40, label %41, label %45

41:                                               ; preds = %38
  %42 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 11), align 8, !tbaa !25
  %43 = load i8, ptr @d_opts, align 8, !tbaa !26, !range !20, !noundef !21
  %44 = trunc i8 %43 to i1
  call void @do_single_commit_delta(ptr noundef %42, i1 noundef zeroext %44, i1 noundef zeroext true)
  br label %75

45:                                               ; preds = %38
  %46 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 6), align 2, !tbaa !27, !range !20, !noundef !21
  %47 = trunc i8 %46 to i1
  br i1 %47, label %48, label %61

48:                                               ; preds = %45
  br label %49

49:                                               ; preds = %48
  %50 = load ptr, ptr @stderr, align 8, !tbaa !9
  %51 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %50, ptr noundef @.str.2) #5
  %52 = load ptr, ptr @stderr, align 8, !tbaa !9
  %53 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %52, ptr noundef @.str.3) #5
  %54 = load ptr, ptr @stderr, align 8, !tbaa !9
  %55 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %54, ptr noundef @.str.4) #5
  %56 = load ptr, ptr @stderr, align 8, !tbaa !9
  %57 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef @.str.5) #5
  %58 = load ptr, ptr @stderr, align 8, !tbaa !9
  %59 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %58, ptr noundef @.str.76) #5
  call void @exit(i32 noundef 1) #4
  unreachable

60:                                               ; No predecessors!
  br label %74

61:                                               ; preds = %45
  br label %62

62:                                               ; preds = %61
  %63 = load ptr, ptr @stderr, align 8, !tbaa !9
  %64 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %63, ptr noundef @.str.2) #5
  %65 = load ptr, ptr @stderr, align 8, !tbaa !9
  %66 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %65, ptr noundef @.str.3) #5
  %67 = load ptr, ptr @stderr, align 8, !tbaa !9
  %68 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef @.str.4) #5
  %69 = load ptr, ptr @stderr, align 8, !tbaa !9
  %70 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str.5) #5
  %71 = load ptr, ptr @stderr, align 8, !tbaa !9
  %72 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %71, ptr noundef @.str.77) #5
  call void @exit(i32 noundef 1) #4
  unreachable

73:                                               ; No predecessors!
  br label %74

74:                                               ; preds = %73, %60
  br label %75

75:                                               ; preds = %74, %41
  br label %76

76:                                               ; preds = %75, %34
  br label %77

77:                                               ; preds = %76, %26
  br label %140

78:                                               ; preds = %17, %14
  %79 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 3), align 1, !tbaa !22, !range !20, !noundef !21
  %80 = trunc i8 %79 to i1
  br i1 %80, label %136, label %81

81:                                               ; preds = %78
  %82 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 2), align 2, !tbaa !23, !range !20, !noundef !21
  %83 = trunc i8 %82 to i1
  br i1 %83, label %84, label %136

84:                                               ; preds = %81
  %85 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 1), align 1, !tbaa !28, !range !20, !noundef !21
  %86 = trunc i8 %85 to i1
  br i1 %86, label %87, label %91

87:                                               ; preds = %84
  %88 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 12), align 8, !tbaa !29
  %89 = load i8, ptr @d_opts, align 8, !tbaa !26, !range !20, !noundef !21
  %90 = trunc i8 %89 to i1
  call void @do_directory_delta(ptr noundef %88, i1 noundef zeroext %90, ptr noundef @d_opts)
  br label %135

91:                                               ; preds = %84
  %92 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 12), align 8, !tbaa !29
  %93 = icmp ne ptr %92, null
  br i1 %93, label %110, label %94

94:                                               ; preds = %91
  %95 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 6), align 2, !tbaa !27, !range !20, !noundef !21
  %96 = trunc i8 %95 to i1
  br i1 %96, label %97, label %110

97:                                               ; preds = %94
  br label %98

98:                                               ; preds = %97
  %99 = load ptr, ptr @stderr, align 8, !tbaa !9
  %100 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %99, ptr noundef @.str.2) #5
  %101 = load ptr, ptr @stderr, align 8, !tbaa !9
  %102 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %101, ptr noundef @.str.3) #5
  %103 = load ptr, ptr @stderr, align 8, !tbaa !9
  %104 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %103, ptr noundef @.str.4) #5
  %105 = load ptr, ptr @stderr, align 8, !tbaa !9
  %106 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %105, ptr noundef @.str.5) #5
  %107 = load ptr, ptr @stderr, align 8, !tbaa !9
  %108 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %107, ptr noundef @.str.76) #5
  call void @exit(i32 noundef 1) #4
  unreachable

109:                                              ; No predecessors!
  br label %134

110:                                              ; preds = %94, %91
  %111 = load i8, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 6), align 2, !tbaa !27, !range !20, !noundef !21
  %112 = trunc i8 %111 to i1
  br i1 %112, label %116, label %113

113:                                              ; preds = %110
  %114 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 12), align 8, !tbaa !29
  %115 = icmp ne ptr %114, null
  br i1 %115, label %116, label %120

116:                                              ; preds = %113, %110
  %117 = load ptr, ptr getelementptr inbounds (%struct.delta_options, ptr @d_opts, i32 0, i32 12), align 8, !tbaa !29
  %118 = load i8, ptr @d_opts, align 8, !tbaa !26, !range !20, !noundef !21
  %119 = trunc i8 %118 to i1
  call void @do_single_file_delta(ptr noundef %117, i1 noundef zeroext %119)
  br label %133

120:                                              ; preds = %113
  br label %121

121:                                              ; preds = %120
  %122 = load ptr, ptr @stderr, align 8, !tbaa !9
  %123 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %122, ptr noundef @.str.2) #5
  %124 = load ptr, ptr @stderr, align 8, !tbaa !9
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef @.str.3) #5
  %126 = load ptr, ptr @stderr, align 8, !tbaa !9
  %127 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %126, ptr noundef @.str.4) #5
  %128 = load ptr, ptr @stderr, align 8, !tbaa !9
  %129 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %128, ptr noundef @.str.5) #5
  %130 = load ptr, ptr @stderr, align 8, !tbaa !9
  %131 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %130, ptr noundef @.str.78) #5
  call void @exit(i32 noundef 1) #4
  unreachable

132:                                              ; No predecessors!
  br label %133

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

134:                                              ; preds = %133, %109
  br label %135

135:                                              ; preds = %134, %87
  br label %139

136:                                              ; preds = %81, %78
  %137 = load i8, ptr @d_opts, align 8, !tbaa !26, !range !20, !noundef !21
  %138 = trunc i8 %137 to i1
  call void @do_directory_delta(ptr noundef @.str.72, i1 noundef zeroext %138, ptr noundef @d_opts)
  br label %139

139:                                              ; preds = %136, %135
  br label %140

140:                                              ; preds = %139, %77
  ret i32 0
}

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 = { noreturn 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 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 = { noreturn nounwind }
attributes #5 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !15, i64 25}
!12 = !{!"", !13, i64 0, !10, i64 16, !15, i64 24, !15, i64 25, !15, i64 26, !16, i64 32, !10, i64 64}
!13 = !{!"delta_stat", !14, i64 0, !14, i64 8}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!"pack_file_cache", !10, i64 0, !17, i64 8}
!17 = !{!"strbuf", !14, i64 0, !14, i64 8, !10, i64 16}
!18 = !{!19, !15, i64 5}
!19 = !{!"delta_options", !15, i64 0, !15, i64 1, !15, i64 2, !15, i64 3, !15, i64 4, !15, i64 5, !15, i64 6, !15, i64 7, !15, i64 8, !15, i64 9, !10, i64 16, !10, i64 24, !10, i64 32}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!19, !15, i64 3}
!23 = !{!19, !15, i64 2}
!24 = !{!19, !10, i64 16}
!25 = !{!19, !10, i64 24}
!26 = !{!19, !15, i64 0}
!27 = !{!19, !15, i64 6}
!28 = !{!19, !15, i64 1}
!29 = !{!19, !10, i64 32}


; 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.delta_options = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, ptr, ptr, ptr }
%struct.anon = type { %struct.delta_stat, ptr, i8, i8, i8, %struct.pack_file_cache, ptr }
%struct.delta_stat = type { i64, i64 }
%struct.pack_file_cache = type { ptr, %struct.strbuf }
%struct.strbuf = type { i64, i64, ptr }

@d_opts = external dso_local global %struct.delta_options, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [2 x i8], align 1
@directory_delta_var = external hidden local_unnamed_addr global %struct.anon, align 8
@.str.72 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [20 x i8], align 1

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

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @commit_delta(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @do_single_commit_delta(ptr noundef, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @do_single_file_delta(ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @do_directory_delta(ptr noundef, i1 noundef zeroext, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @delta_main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  store i8 0, ptr getelementptr inbounds (i8, ptr @directory_delta_var, i64 25), align 1, !tbaa !5
  tail call void @delta_parse_options(ptr noundef nonnull @d_opts, i32 noundef %0, ptr noundef %1)
  %3 = load i8, ptr getelementptr inbounds (i8, ptr @d_opts, i64 5), align 1, !tbaa !15, !range !17, !noundef !18
  %4 = trunc nuw i8 %3 to i1
  br i1 %4, label %5, label %10

5:                                                ; preds = %2
  %6 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.73)
  %7 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40)
  %8 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.74)
  %9 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.75)
  tail call void @exit(i32 noundef -1) #3
  unreachable

10:                                               ; preds = %2
  %11 = load i8, ptr getelementptr inbounds (i8, ptr @d_opts, i64 3), align 1, !tbaa !19, !range !17, !noundef !18
  %12 = trunc nuw i8 %11 to i1
  %13 = load i8, ptr getelementptr inbounds (i8, ptr @d_opts, i64 2), align 2, !tbaa !20, !range !17, !noundef !18
  %14 = trunc nuw i8 %13 to i1
  br i1 %12, label %15, label %48

15:                                               ; preds = %10
  br i1 %14, label %.thread, label %16

16:                                               ; preds = %15
  %17 = load ptr, ptr getelementptr inbounds (i8, ptr @d_opts, i64 16), align 8, !tbaa !21
  %18 = icmp ne ptr %17, null
  %19 = load ptr, ptr getelementptr inbounds (i8, ptr @d_opts, i64 24), align 8
  %20 = icmp ne ptr %19, null
  %or.cond = select i1 %18, i1 %20, i1 false
  br i1 %or.cond, label %21, label %24

21:                                               ; preds = %16
  %22 = load i8, ptr @d_opts, align 8, !tbaa !22, !range !17, !noundef !18
  %23 = trunc nuw i8 %22 to i1
  tail call void @commit_delta(ptr noundef nonnull %17, ptr noundef nonnull %19, i1 noundef zeroext %23)
  br label %77

24:                                               ; preds = %16
  br i1 %18, label %25, label %28

25:                                               ; preds = %24
  %26 = load i8, ptr @d_opts, align 8, !tbaa !22, !range !17, !noundef !18
  %27 = trunc nuw i8 %26 to i1
  tail call void @do_single_commit_delta(ptr noundef nonnull %17, i1 noundef zeroext %27, i1 noundef zeroext true)
  br label %77

28:                                               ; preds = %24
  br i1 %20, label %29, label %32

29:                                               ; preds = %28
  %30 = load i8, ptr @d_opts, align 8, !tbaa !22, !range !17, !noundef !18
  %31 = trunc nuw i8 %30 to i1
  tail call void @do_single_commit_delta(ptr noundef nonnull %19, i1 noundef zeroext %31, i1 noundef zeroext true)
  br label %77

32:                                               ; preds = %28
  %33 = load i8, ptr getelementptr inbounds (i8, ptr @d_opts, i64 6), align 2, !tbaa !23, !range !17, !noundef !18
  %34 = trunc nuw i8 %33 to i1
  %35 = load ptr, ptr @stderr, align 8, !tbaa !24
  %36 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %35, ptr noundef nonnull @.str.2) #4
  %37 = load ptr, ptr @stderr, align 8, !tbaa !24
  %38 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %37, ptr noundef nonnull @.str.3) #4
  %39 = load ptr, ptr @stderr, align 8, !tbaa !24
  %40 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %39, ptr noundef nonnull @.str.4) #4
  %41 = load ptr, ptr @stderr, align 8, !tbaa !24
  %42 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %41, ptr noundef nonnull @.str.5) #4
  %43 = load ptr, ptr @stderr, align 8, !tbaa !24
  br i1 %34, label %44, label %46

44:                                               ; preds = %32
  %45 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef nonnull @.str.76) #4
  tail call void @exit(i32 noundef 1) #3
  unreachable

46:                                               ; preds = %32
  %47 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef nonnull @.str.77) #4
  tail call void @exit(i32 noundef 1) #3
  unreachable

48:                                               ; preds = %10
  br i1 %14, label %49, label %.thread

49:                                               ; preds = %48
  %50 = load i8, ptr getelementptr inbounds (i8, ptr @d_opts, i64 1), align 1, !tbaa !25, !range !17, !noundef !18
  %51 = trunc nuw i8 %50 to i1
  %52 = load ptr, ptr getelementptr inbounds (i8, ptr @d_opts, i64 32), align 8
  br i1 %51, label %53, label %56

53:                                               ; preds = %49
  %54 = load i8, ptr @d_opts, align 8, !tbaa !22, !range !17, !noundef !18
  %55 = trunc nuw i8 %54 to i1
  tail call void @do_directory_delta(ptr noundef %52, i1 noundef zeroext %55, ptr noundef nonnull @d_opts)
  br label %77

56:                                               ; preds = %49
  %.not = icmp eq ptr %52, null
  br i1 %.not, label %57, label %.thread6

57:                                               ; preds = %56
  %58 = load i8, ptr getelementptr inbounds (i8, ptr @d_opts, i64 6), align 2, !tbaa !23, !range !17, !noundef !18
  %59 = trunc nuw i8 %58 to i1
  %60 = load ptr, ptr @stderr, align 8, !tbaa !24
  %61 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %60, ptr noundef nonnull @.str.2) #4
  %62 = load ptr, ptr @stderr, align 8, !tbaa !24
  %63 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef nonnull @.str.3) #4
  %64 = load ptr, ptr @stderr, align 8, !tbaa !24
  %65 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %64, ptr noundef nonnull @.str.4) #4
  %66 = load ptr, ptr @stderr, align 8, !tbaa !24
  %67 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef nonnull @.str.5) #4
  %68 = load ptr, ptr @stderr, align 8, !tbaa !24
  br i1 %59, label %69, label %73

69:                                               ; preds = %57
  %70 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str.76) #4
  tail call void @exit(i32 noundef 1) #3
  unreachable

.thread6:                                         ; preds = %56
  %71 = load i8, ptr @d_opts, align 8, !tbaa !22, !range !17, !noundef !18
  %72 = trunc nuw i8 %71 to i1
  tail call void @do_single_file_delta(ptr noundef nonnull %52, i1 noundef zeroext %72)
  br label %77

73:                                               ; preds = %57
  %74 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str.78) #4
  tail call void @exit(i32 noundef 1) #3
  unreachable

.thread:                                          ; preds = %15, %48
  %75 = load i8, ptr @d_opts, align 8, !tbaa !22, !range !17, !noundef !18
  %76 = trunc nuw i8 %75 to i1
  tail call void @do_directory_delta(ptr noundef nonnull @.str.72, i1 noundef zeroext %76, ptr noundef nonnull @d_opts)
  br label %77

77:                                               ; preds = %.thread, %.thread6, %53, %21, %29, %25
  ret i32 0
}

attributes #0 = { 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 #1 = { noreturn 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 = { 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 = { noreturn nounwind }
attributes #4 = { 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, !12, i64 25}
!6 = !{!"", !7, i64 0, !11, i64 16, !12, i64 24, !12, i64 25, !12, i64 26, !13, i64 32, !11, i64 64}
!7 = !{!"delta_stat", !8, i64 0, !8, i64 8}
!8 = !{!"long", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"any pointer", !9, i64 0}
!12 = !{!"_Bool", !9, i64 0}
!13 = !{!"pack_file_cache", !11, i64 0, !14, i64 8}
!14 = !{!"strbuf", !8, i64 0, !8, i64 8, !11, i64 16}
!15 = !{!16, !12, i64 5}
!16 = !{!"delta_options", !12, i64 0, !12, i64 1, !12, i64 2, !12, i64 3, !12, i64 4, !12, i64 5, !12, i64 6, !12, i64 7, !12, i64 8, !12, i64 9, !11, i64 16, !11, i64 24, !11, i64 32}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!16, !12, i64 3}
!20 = !{!16, !12, i64 2}
!21 = !{!16, !11, i64 16}
!22 = !{!16, !12, i64 0}
!23 = !{!16, !12, i64 6}
!24 = !{!11, !11, i64 0}
!25 = !{!16, !12, i64 1}


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