; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/MdePkg/Library (ReadCLen)

; 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.SCRATCH_DATA = type { ptr, ptr, i32, i32, i16, i32, i32, i16, i32, i32, i16, [1019 x i16], [1019 x i16], [510 x i8], [31 x i8], [4096 x i16], [256 x i16], i8 }

; Function Attrs: nounwind uwtable
declare dso_local void @FillBuf(ptr noundef, i16 noundef zeroext) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @GetBits(ptr noundef, i16 noundef zeroext) #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local zeroext i16 @MakeTable(ptr noundef, i16 noundef zeroext, ptr noundef, i16 noundef zeroext, ptr noundef) #0

declare ptr @SetMem16(ptr noundef, i64 noundef, i16 noundef zeroext) #2

declare ptr @SetMem(ptr noundef, i64 noundef, i8 noundef zeroext) #2

; Function Attrs: nounwind uwtable
define dso_local void @ReadCLen(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca i16, align 2
  %4 = alloca i16, align 2
  %5 = alloca i16, align 2
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %3) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  %8 = load ptr, ptr %2, align 8, !tbaa !5
  %9 = call i32 @GetBits(ptr noundef %8, i16 noundef zeroext 9)
  %10 = trunc i32 %9 to i16
  store i16 %10, ptr %3, align 2, !tbaa !9
  %11 = load i16, ptr %3, align 2, !tbaa !9
  %12 = zext i16 %11 to i32
  %13 = icmp eq i32 %12, 0
  br i1 %13, label %14, label %27

14:                                               ; preds = %1
  %15 = load ptr, ptr %2, align 8, !tbaa !5
  %16 = call i32 @GetBits(ptr noundef %15, i16 noundef zeroext 9)
  %17 = trunc i32 %16 to i16
  store i16 %17, ptr %4, align 2, !tbaa !9
  %18 = load ptr, ptr %2, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %18, i32 0, i32 13
  %20 = getelementptr inbounds [510 x i8], ptr %19, i64 0, i64 0
  %21 = call ptr @SetMem(ptr noundef %20, i64 noundef 510, i8 noundef zeroext 0)
  %22 = load ptr, ptr %2, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %22, i32 0, i32 15
  %24 = getelementptr inbounds [4096 x i16], ptr %23, i64 0, i64 0
  %25 = load i16, ptr %4, align 2, !tbaa !9
  %26 = call ptr @SetMem16(ptr noundef %24, i64 noundef 8192, i16 noundef zeroext %25)
  store i32 1, ptr %7, align 4
  br label %173

27:                                               ; preds = %1
  store i16 0, ptr %5, align 2, !tbaa !9
  br label %28

28:                                               ; preds = %151, %27
  %29 = load i16, ptr %5, align 2, !tbaa !9
  %30 = zext i16 %29 to i32
  %31 = load i16, ptr %3, align 2, !tbaa !9
  %32 = zext i16 %31 to i32
  %33 = icmp slt i32 %30, %32
  br i1 %33, label %34, label %38

34:                                               ; preds = %28
  %35 = load i16, ptr %5, align 2, !tbaa !9
  %36 = zext i16 %35 to i32
  %37 = icmp slt i32 %36, 510
  br label %38

38:                                               ; preds = %34, %28
  %39 = phi i1 [ false, %28 ], [ %37, %34 ]
  br i1 %39, label %40, label %152

40:                                               ; preds = %38
  %41 = load ptr, ptr %2, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %41, i32 0, i32 16
  %43 = load ptr, ptr %2, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %43, i32 0, i32 5
  %45 = load i32, ptr %44, align 4, !tbaa !11
  %46 = lshr i32 %45, 24
  %47 = zext i32 %46 to i64
  %48 = getelementptr inbounds [256 x i16], ptr %42, i64 0, i64 %47
  %49 = load i16, ptr %48, align 2, !tbaa !9
  store i16 %49, ptr %4, align 2, !tbaa !9
  %50 = load i16, ptr %4, align 2, !tbaa !9
  %51 = zext i16 %50 to i32
  %52 = icmp sge i32 %51, 19
  br i1 %52, label %53, label %83

53:                                               ; preds = %40
  store i32 8388608, ptr %6, align 4, !tbaa !14
  br label %54

54:                                               ; preds = %78, %53
  %55 = load i32, ptr %6, align 4, !tbaa !14
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %56, i32 0, i32 5
  %58 = load i32, ptr %57, align 4, !tbaa !11
  %59 = and i32 %55, %58
  %60 = icmp ne i32 %59, 0
  br i1 %60, label %61, label %68

61:                                               ; preds = %54
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %62, i32 0, i32 12
  %64 = load i16, ptr %4, align 2, !tbaa !9
  %65 = zext i16 %64 to i64
  %66 = getelementptr inbounds [1019 x i16], ptr %63, i64 0, i64 %65
  %67 = load i16, ptr %66, align 2, !tbaa !9
  store i16 %67, ptr %4, align 2, !tbaa !9
  br label %75

68:                                               ; preds = %54
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %69, i32 0, i32 11
  %71 = load i16, ptr %4, align 2, !tbaa !9
  %72 = zext i16 %71 to i64
  %73 = getelementptr inbounds [1019 x i16], ptr %70, i64 0, i64 %72
  %74 = load i16, ptr %73, align 2, !tbaa !9
  store i16 %74, ptr %4, align 2, !tbaa !9
  br label %75

75:                                               ; preds = %68, %61
  %76 = load i32, ptr %6, align 4, !tbaa !14
  %77 = lshr i32 %76, 1
  store i32 %77, ptr %6, align 4, !tbaa !14
  br label %78

78:                                               ; preds = %75
  %79 = load i16, ptr %4, align 2, !tbaa !9
  %80 = zext i16 %79 to i32
  %81 = icmp sge i32 %80, 19
  br i1 %81, label %54, label %82, !llvm.loop !15

82:                                               ; preds = %78
  br label %83

83:                                               ; preds = %82, %40
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %85, i32 0, i32 14
  %87 = load i16, ptr %4, align 2, !tbaa !9
  %88 = zext i16 %87 to i64
  %89 = getelementptr inbounds [31 x i8], ptr %86, i64 0, i64 %88
  %90 = load i8, ptr %89, align 1, !tbaa !17
  %91 = zext i8 %90 to i16
  call void @FillBuf(ptr noundef %84, i16 noundef zeroext %91)
  %92 = load i16, ptr %4, align 2, !tbaa !9
  %93 = zext i16 %92 to i32
  %94 = icmp sle i32 %93, 2
  br i1 %94, label %95, label %140

95:                                               ; preds = %83
  %96 = load i16, ptr %4, align 2, !tbaa !9
  %97 = zext i16 %96 to i32
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %95
  store i16 1, ptr %4, align 2, !tbaa !9
  br label %120

100:                                              ; preds = %95
  %101 = load i16, ptr %4, align 2, !tbaa !9
  %102 = zext i16 %101 to i32
  %103 = icmp eq i32 %102, 1
  br i1 %103, label %104, label %109

104:                                              ; preds = %100
  %105 = load ptr, ptr %2, align 8, !tbaa !5
  %106 = call i32 @GetBits(ptr noundef %105, i16 noundef zeroext 4)
  %107 = add i32 %106, 3
  %108 = trunc i32 %107 to i16
  store i16 %108, ptr %4, align 2, !tbaa !9
  br label %119

109:                                              ; preds = %100
  %110 = load i16, ptr %4, align 2, !tbaa !9
  %111 = zext i16 %110 to i32
  %112 = icmp eq i32 %111, 2
  br i1 %112, label %113, label %118

113:                                              ; preds = %109
  %114 = load ptr, ptr %2, align 8, !tbaa !5
  %115 = call i32 @GetBits(ptr noundef %114, i16 noundef zeroext 9)
  %116 = add i32 %115, 20
  %117 = trunc i32 %116 to i16
  store i16 %117, ptr %4, align 2, !tbaa !9
  br label %118

118:                                              ; preds = %113, %109
  br label %119

119:                                              ; preds = %118, %104
  br label %120

120:                                              ; preds = %119, %99
  br label %121

121:                                              ; preds = %132, %120
  %122 = load i16, ptr %4, align 2, !tbaa !9
  %123 = add i16 %122, -1
  store i16 %123, ptr %4, align 2, !tbaa !9
  %124 = sext i16 %123 to i32
  %125 = icmp sge i32 %124, 0
  br i1 %125, label %126, label %130

126:                                              ; preds = %121
  %127 = load i16, ptr %5, align 2, !tbaa !9
  %128 = zext i16 %127 to i32
  %129 = icmp slt i32 %128, 510
  br label %130

130:                                              ; preds = %126, %121
  %131 = phi i1 [ false, %121 ], [ %129, %126 ]
  br i1 %131, label %132, label %139

132:                                              ; preds = %130
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %133, i32 0, i32 13
  %135 = load i16, ptr %5, align 2, !tbaa !9
  %136 = add i16 %135, 1
  store i16 %136, ptr %5, align 2, !tbaa !9
  %137 = zext i16 %135 to i64
  %138 = getelementptr inbounds [510 x i8], ptr %134, i64 0, i64 %137
  store i8 0, ptr %138, align 1, !tbaa !17
  br label %121, !llvm.loop !18

139:                                              ; preds = %130
  br label %151

140:                                              ; preds = %83
  %141 = load i16, ptr %4, align 2, !tbaa !9
  %142 = zext i16 %141 to i32
  %143 = sub nsw i32 %142, 2
  %144 = trunc i32 %143 to i8
  %145 = load ptr, ptr %2, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %145, i32 0, i32 13
  %147 = load i16, ptr %5, align 2, !tbaa !9
  %148 = add i16 %147, 1
  store i16 %148, ptr %5, align 2, !tbaa !9
  %149 = zext i16 %147 to i64
  %150 = getelementptr inbounds [510 x i8], ptr %146, i64 0, i64 %149
  store i8 %144, ptr %150, align 1, !tbaa !17
  br label %151

151:                                              ; preds = %140, %139
  br label %28, !llvm.loop !19

152:                                              ; preds = %38
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %153, i32 0, i32 13
  %155 = getelementptr inbounds [510 x i8], ptr %154, i64 0, i64 0
  %156 = load i16, ptr %5, align 2, !tbaa !9
  %157 = zext i16 %156 to i32
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds i8, ptr %155, i64 %158
  %160 = load i16, ptr %5, align 2, !tbaa !9
  %161 = zext i16 %160 to i32
  %162 = sub nsw i32 510, %161
  %163 = sext i32 %162 to i64
  %164 = call ptr @SetMem(ptr noundef %159, i64 noundef %163, i8 noundef zeroext 0)
  %165 = load ptr, ptr %2, align 8, !tbaa !5
  %166 = load ptr, ptr %2, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %166, i32 0, i32 13
  %168 = getelementptr inbounds [510 x i8], ptr %167, i64 0, i64 0
  %169 = load ptr, ptr %2, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.SCRATCH_DATA, ptr %169, i32 0, i32 15
  %171 = getelementptr inbounds [4096 x i16], ptr %170, i64 0, i64 0
  %172 = call zeroext i16 @MakeTable(ptr noundef %165, i16 noundef zeroext 510, ptr noundef %168, i16 noundef zeroext 12, ptr noundef %171)
  store i32 1, ptr %7, align 4
  br label %173

173:                                              ; preds = %152, %14
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %3) #3
  ret void
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!12, !13, i64 28}
!12 = !{!"", !6, i64 0, !6, i64 8, !13, i64 16, !13, i64 20, !10, i64 24, !13, i64 28, !13, i64 32, !10, i64 36, !13, i64 40, !13, i64 44, !10, i64 48, !7, i64 50, !7, i64 2088, !7, i64 4126, !7, i64 4636, !7, i64 4668, !7, i64 12860, !7, i64 13372}
!13 = !{!"int", !7, i64 0}
!14 = !{!13, !13, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !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"

; Function Attrs: nounwind uwtable
declare dso_local void @FillBuf(ptr noundef, i16 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @GetBits(ptr noundef, i16 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local zeroext i16 @MakeTable(ptr noundef, i16 noundef zeroext, ptr noundef, i16 noundef zeroext, ptr noundef) local_unnamed_addr #0

declare ptr @SetMem16(ptr noundef, i64 noundef, i16 noundef zeroext) local_unnamed_addr #1

declare ptr @SetMem(ptr noundef, i64 noundef, i8 noundef zeroext) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @ReadCLen(ptr noundef %0) local_unnamed_addr #0 {
  %2 = tail call i32 @GetBits(ptr noundef %0, i16 noundef zeroext 9)
  %3 = and i32 %2, 65535
  %4 = icmp eq i32 %3, 0
  br i1 %4, label %11, label %.preheader49

.preheader49:                                     ; preds = %1
  %5 = getelementptr inbounds i8, ptr %0, i64 12860
  %6 = getelementptr inbounds i8, ptr %0, i64 28
  %7 = getelementptr inbounds i8, ptr %0, i64 2088
  %8 = getelementptr inbounds i8, ptr %0, i64 50
  %9 = getelementptr inbounds i8, ptr %0, i64 4636
  %10 = getelementptr i8, ptr %0, i64 4126
  br label %18

11:                                               ; preds = %1
  %12 = tail call i32 @GetBits(ptr noundef %0, i16 noundef zeroext 9)
  %13 = trunc i32 %12 to i16
  %14 = getelementptr inbounds i8, ptr %0, i64 4126
  %15 = tail call ptr @SetMem(ptr noundef nonnull %14, i64 noundef 510, i8 noundef zeroext 0) #4
  %16 = getelementptr inbounds i8, ptr %0, i64 4668
  %17 = tail call ptr @SetMem16(ptr noundef nonnull %16, i64 noundef 8192, i16 noundef zeroext %13) #4
  br label %74

18:                                               ; preds = %.preheader49, %.loopexit
  %.04151 = phi i16 [ 0, %.preheader49 ], [ %.2, %.loopexit ]
  %19 = load i32, ptr %6, align 4, !tbaa !5
  %20 = lshr i32 %19, 24
  %21 = zext nneg i32 %20 to i64
  %22 = getelementptr inbounds [256 x i16], ptr %5, i64 0, i64 %21
  %23 = load i16, ptr %22, align 2, !tbaa !12
  %24 = icmp ugt i16 %23, 18
  br i1 %24, label %.preheader, label %.loopexit48

.preheader:                                       ; preds = %18, %.preheader
  %.042 = phi i16 [ %.143, %.preheader ], [ %23, %18 ]
  %.0 = phi i32 [ %29, %.preheader ], [ 8388608, %18 ]
  %25 = and i32 %.0, %19
  %.not = icmp eq i32 %25, 0
  %26 = zext i16 %.042 to i64
  %27 = getelementptr inbounds [1019 x i16], ptr %7, i64 0, i64 %26
  %28 = getelementptr inbounds [1019 x i16], ptr %8, i64 0, i64 %26
  %.143.in = select i1 %.not, ptr %28, ptr %27
  %.143 = load i16, ptr %.143.in, align 2, !tbaa !12
  %29 = lshr i32 %.0, 1
  %30 = icmp ugt i16 %.143, 18
  br i1 %30, label %.preheader, label %.loopexit48, !llvm.loop !13

.loopexit48:                                      ; preds = %.preheader, %18
  %.244 = phi i16 [ %23, %18 ], [ %.143, %.preheader ]
  %31 = zext nneg i16 %.244 to i64
  %32 = getelementptr inbounds [31 x i8], ptr %9, i64 0, i64 %31
  %33 = load i8, ptr %32, align 1, !tbaa !15
  %34 = zext i8 %33 to i16
  tail call void @FillBuf(ptr noundef %0, i16 noundef zeroext %34)
  %35 = icmp ult i16 %.244, 3
  br i1 %35, label %36, label %55

36:                                               ; preds = %.loopexit48
  switch i16 %.244, label %37 [
    i16 0, label %41
    i16 1, label %.sink.split
  ]

37:                                               ; preds = %36
  br label %.sink.split

.sink.split:                                      ; preds = %36, %37
  %.sink = phi i16 [ 9, %37 ], [ 4, %36 ]
  %.sink55 = phi i16 [ 20, %37 ], [ 3, %36 ]
  %38 = tail call i32 @GetBits(ptr noundef nonnull %0, i16 noundef zeroext %.sink)
  %39 = trunc i32 %38 to i16
  %40 = add i16 %.sink55, %39
  br label %41

41:                                               ; preds = %.sink.split, %36
  %.3 = phi i16 [ 1, %36 ], [ %40, %.sink.split ]
  %42 = add i16 %.3, -1
  %43 = icmp sgt i16 %42, -1
  %44 = icmp ult i16 %.04151, 510
  %45 = and i1 %43, %44
  br i1 %45, label %.lr.ph.preheader, label %.loopexit

.lr.ph.preheader:                                 ; preds = %41
  %46 = zext nneg i16 %.04151 to i64
  %scevgep53 = getelementptr i8, ptr %10, i64 %46
  %47 = sub nuw nsw i16 509, %.04151
  %48 = tail call i16 @llvm.umin.i16(i16 %42, i16 %47)
  %narrow = add nuw nsw i16 %48, 1
  %49 = zext nneg i16 %narrow to i64
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %scevgep53, i8 0, i64 %49, i1 false), !tbaa !15
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ %46, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %50 = phi i16 [ %42, %.lr.ph.preheader ], [ %51, %.lr.ph ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %51 = add nsw i16 %50, -1
  %52 = icmp ne i16 %50, 0
  %53 = icmp ult i64 %indvars.iv, 509
  %54 = and i1 %52, %53
  br i1 %54, label %.lr.ph, label %.loopexit.loopexit, !llvm.loop !16

55:                                               ; preds = %.loopexit48
  %56 = trunc nuw i16 %.244 to i8
  %57 = add nsw i8 %56, -2
  %58 = add nuw nsw i16 %.04151, 1
  %59 = zext nneg i16 %.04151 to i64
  %60 = getelementptr inbounds [510 x i8], ptr %10, i64 0, i64 %59
  store i8 %57, ptr %60, align 1, !tbaa !15
  br label %.loopexit

.loopexit.loopexit:                               ; preds = %.lr.ph
  %61 = trunc nuw nsw i64 %indvars.iv.next to i16
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %41, %55
  %.2 = phi i16 [ %58, %55 ], [ %.04151, %41 ], [ %61, %.loopexit.loopexit ]
  %62 = zext i16 %.2 to i32
  %63 = icmp ugt i32 %3, %62
  %64 = icmp ult i16 %.2, 510
  %65 = and i1 %64, %63
  br i1 %65, label %18, label %66, !llvm.loop !17

66:                                               ; preds = %.loopexit
  %67 = zext i16 %.2 to i64
  %68 = getelementptr inbounds i8, ptr %10, i64 %67
  %69 = sub nsw i32 510, %62
  %70 = sext i32 %69 to i64
  %71 = tail call ptr @SetMem(ptr noundef nonnull %68, i64 noundef %70, i8 noundef zeroext 0) #4
  %72 = getelementptr inbounds i8, ptr %0, i64 4668
  %73 = tail call zeroext i16 @MakeTable(ptr noundef %0, i16 noundef zeroext 510, ptr noundef nonnull %10, i16 noundef zeroext 12, ptr noundef nonnull %72)
  br label %74

74:                                               ; preds = %66, %11
  ret void
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !10, i64 28}
!6 = !{!"", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !11, i64 24, !10, i64 28, !10, i64 32, !11, i64 36, !10, i64 40, !10, i64 44, !11, i64 48, !8, i64 50, !8, i64 2088, !8, i64 4126, !8, i64 4636, !8, i64 4668, !8, i64 12860, !8, i64 13372}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = !{!11, !11, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!8, !8, i64 0}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}


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