; LLVM IR from CactiLab/Sherloc-Cortex-M-CFVD :: Sherloc_runtime/evaluation/src/picojpeg (libpicojpeg)

; 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.pjpeg_image_info_t = type { i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr }

@gCallbackStatus = external hidden global i8, align 1
@g_pNeedBytesCallback = external hidden global ptr, align 8
@g_pCallback_data = external hidden global ptr, align 8
@gReduce = external hidden global i8, align 1
@gImageXSize = external hidden global i16, align 2
@gImageYSize = external hidden global i16, align 2
@gCompsInFrame = external hidden global i8, align 1
@gScanType = external hidden global i32, align 4
@gMaxMCUSPerRow = external hidden global i16, align 2
@gMaxMCUSPerCol = external hidden global i16, align 2
@gMaxMCUXSize = external hidden global i8, align 1
@gMaxMCUYSize = external hidden global i8, align 1
@gMCUBufR = external hidden global [256 x i8], align 16
@gMCUBufG = external hidden global [256 x i8], align 16
@gMCUBufB = external hidden global [256 x i8], align 16

; 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 zeroext i8 @pjpeg_decode_init(ptr noundef %0, ptr noundef %1, ptr noundef %2, i8 noundef zeroext %3) #1 {
  %5 = alloca i8, align 1
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i8 %3, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #2
  %12 = load ptr, ptr %6, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %12, i32 0, i32 0
  store i32 0, ptr %13, align 8, !tbaa !10
  %14 = load ptr, ptr %6, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %14, i32 0, i32 1
  store i32 0, ptr %15, align 4, !tbaa !13
  %16 = load ptr, ptr %6, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %16, i32 0, i32 2
  store i32 0, ptr %17, align 8, !tbaa !14
  %18 = load ptr, ptr %6, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %18, i32 0, i32 3
  store i32 0, ptr %19, align 4, !tbaa !15
  %20 = load ptr, ptr %6, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %20, i32 0, i32 4
  store i32 0, ptr %21, align 8, !tbaa !16
  %22 = load ptr, ptr %6, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %22, i32 0, i32 5
  store i32 0, ptr %23, align 4, !tbaa !17
  %24 = load ptr, ptr %6, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %24, i32 0, i32 6
  store i32 0, ptr %25, align 8, !tbaa !18
  %26 = load ptr, ptr %6, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %26, i32 0, i32 7
  store i32 0, ptr %27, align 4, !tbaa !19
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %28, i32 0, i32 8
  store ptr null, ptr %29, align 8, !tbaa !20
  %30 = load ptr, ptr %6, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %30, i32 0, i32 9
  store ptr null, ptr %31, align 8, !tbaa !21
  %32 = load ptr, ptr %6, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %32, i32 0, i32 10
  store ptr null, ptr %33, align 8, !tbaa !22
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %34, ptr @g_pNeedBytesCallback, align 8, !tbaa !5
  %35 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %35, ptr @g_pCallback_data, align 8, !tbaa !5
  store i8 0, ptr @gCallbackStatus, align 1, !tbaa !9
  %36 = load i8, ptr %9, align 1, !tbaa !9
  store i8 %36, ptr @gReduce, align 1, !tbaa !9
  %37 = call zeroext i8 @init()
  store i8 %37, ptr %10, align 1, !tbaa !9
  %38 = load i8, ptr %10, align 1, !tbaa !9
  %39 = zext i8 %38 to i32
  %40 = icmp ne i32 %39, 0
  br i1 %40, label %45, label %41

41:                                               ; preds = %4
  %42 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %43 = zext i8 %42 to i32
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %45, label %58

45:                                               ; preds = %41, %4
  %46 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %47 = zext i8 %46 to i32
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %49, label %52

49:                                               ; preds = %45
  %50 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %51 = zext i8 %50 to i32
  br label %55

52:                                               ; preds = %45
  %53 = load i8, ptr %10, align 1, !tbaa !9
  %54 = zext i8 %53 to i32
  br label %55

55:                                               ; preds = %52, %49
  %56 = phi i32 [ %51, %49 ], [ %54, %52 ]
  %57 = trunc i32 %56 to i8
  store i8 %57, ptr %5, align 1
  store i32 1, ptr %11, align 4
  br label %162

58:                                               ; preds = %41
  %59 = call zeroext i8 @locateSOFMarker()
  store i8 %59, ptr %10, align 1, !tbaa !9
  %60 = load i8, ptr %10, align 1, !tbaa !9
  %61 = zext i8 %60 to i32
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %67, label %63

63:                                               ; preds = %58
  %64 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %65 = zext i8 %64 to i32
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %80

67:                                               ; preds = %63, %58
  %68 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %69 = zext i8 %68 to i32
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %71, label %74

71:                                               ; preds = %67
  %72 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %73 = zext i8 %72 to i32
  br label %77

74:                                               ; preds = %67
  %75 = load i8, ptr %10, align 1, !tbaa !9
  %76 = zext i8 %75 to i32
  br label %77

77:                                               ; preds = %74, %71
  %78 = phi i32 [ %73, %71 ], [ %76, %74 ]
  %79 = trunc i32 %78 to i8
  store i8 %79, ptr %5, align 1
  store i32 1, ptr %11, align 4
  br label %162

80:                                               ; preds = %63
  %81 = call zeroext i8 @initFrame()
  store i8 %81, ptr %10, align 1, !tbaa !9
  %82 = load i8, ptr %10, align 1, !tbaa !9
  %83 = zext i8 %82 to i32
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %89, label %85

85:                                               ; preds = %80
  %86 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %87 = zext i8 %86 to i32
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %89, label %102

89:                                               ; preds = %85, %80
  %90 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %91 = zext i8 %90 to i32
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %93, label %96

93:                                               ; preds = %89
  %94 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %95 = zext i8 %94 to i32
  br label %99

96:                                               ; preds = %89
  %97 = load i8, ptr %10, align 1, !tbaa !9
  %98 = zext i8 %97 to i32
  br label %99

99:                                               ; preds = %96, %93
  %100 = phi i32 [ %95, %93 ], [ %98, %96 ]
  %101 = trunc i32 %100 to i8
  store i8 %101, ptr %5, align 1
  store i32 1, ptr %11, align 4
  br label %162

102:                                              ; preds = %85
  %103 = call zeroext i8 @initScan()
  store i8 %103, ptr %10, align 1, !tbaa !9
  %104 = load i8, ptr %10, align 1, !tbaa !9
  %105 = zext i8 %104 to i32
  %106 = icmp ne i32 %105, 0
  br i1 %106, label %111, label %107

107:                                              ; preds = %102
  %108 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %109 = zext i8 %108 to i32
  %110 = icmp ne i32 %109, 0
  br i1 %110, label %111, label %124

111:                                              ; preds = %107, %102
  %112 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %113 = zext i8 %112 to i32
  %114 = icmp ne i32 %113, 0
  br i1 %114, label %115, label %118

115:                                              ; preds = %111
  %116 = load i8, ptr @gCallbackStatus, align 1, !tbaa !9
  %117 = zext i8 %116 to i32
  br label %121

118:                                              ; preds = %111
  %119 = load i8, ptr %10, align 1, !tbaa !9
  %120 = zext i8 %119 to i32
  br label %121

121:                                              ; preds = %118, %115
  %122 = phi i32 [ %117, %115 ], [ %120, %118 ]
  %123 = trunc i32 %122 to i8
  store i8 %123, ptr %5, align 1
  store i32 1, ptr %11, align 4
  br label %162

124:                                              ; preds = %107
  %125 = load i16, ptr @gImageXSize, align 2, !tbaa !23
  %126 = zext i16 %125 to i32
  %127 = load ptr, ptr %6, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %127, i32 0, i32 0
  store i32 %126, ptr %128, align 8, !tbaa !10
  %129 = load i16, ptr @gImageYSize, align 2, !tbaa !23
  %130 = zext i16 %129 to i32
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %131, i32 0, i32 1
  store i32 %130, ptr %132, align 4, !tbaa !13
  %133 = load i8, ptr @gCompsInFrame, align 1, !tbaa !9
  %134 = zext i8 %133 to i32
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %135, i32 0, i32 2
  store i32 %134, ptr %136, align 8, !tbaa !14
  %137 = load i32, ptr @gScanType, align 4, !tbaa !25
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %138, i32 0, i32 5
  store i32 %137, ptr %139, align 4, !tbaa !17
  %140 = load i16, ptr @gMaxMCUSPerRow, align 2, !tbaa !23
  %141 = zext i16 %140 to i32
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %142, i32 0, i32 3
  store i32 %141, ptr %143, align 4, !tbaa !15
  %144 = load i16, ptr @gMaxMCUSPerCol, align 2, !tbaa !23
  %145 = zext i16 %144 to i32
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %146, i32 0, i32 4
  store i32 %145, ptr %147, align 8, !tbaa !16
  %148 = load i8, ptr @gMaxMCUXSize, align 1, !tbaa !9
  %149 = zext i8 %148 to i32
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %150, i32 0, i32 6
  store i32 %149, ptr %151, align 8, !tbaa !18
  %152 = load i8, ptr @gMaxMCUYSize, align 1, !tbaa !9
  %153 = zext i8 %152 to i32
  %154 = load ptr, ptr %6, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %154, i32 0, i32 7
  store i32 %153, ptr %155, align 4, !tbaa !19
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %156, i32 0, i32 8
  store ptr @gMCUBufR, ptr %157, align 8, !tbaa !20
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %158, i32 0, i32 9
  store ptr @gMCUBufG, ptr %159, align 8, !tbaa !21
  %160 = load ptr, ptr %6, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.pjpeg_image_info_t, ptr %160, i32 0, i32 10
  store ptr @gMCUBufB, ptr %161, align 8, !tbaa !22
  store i8 0, ptr %5, align 1
  store i32 1, ptr %11, align 4
  br label %162

162:                                              ; preds = %124, %121, %99, %77, %55
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #2
  %163 = load i8, ptr %5, align 1
  ret i8 %163
}

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @init() #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @locateSOFMarker() #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @initFrame() #1

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @initScan() #1

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 }

!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 = !{!7, !7, i64 0}
!10 = !{!11, !12, i64 0}
!11 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !6, i64 32, !6, i64 40, !6, i64 48}
!12 = !{!"int", !7, i64 0}
!13 = !{!11, !12, i64 4}
!14 = !{!11, !12, i64 8}
!15 = !{!11, !12, i64 12}
!16 = !{!11, !12, i64 16}
!17 = !{!11, !12, i64 20}
!18 = !{!11, !12, i64 24}
!19 = !{!11, !12, i64 28}
!20 = !{!11, !6, i64 32}
!21 = !{!11, !6, i64 40}
!22 = !{!11, !6, i64 48}
!23 = !{!24, !24, i64 0}
!24 = !{!"short", !7, i64 0}
!25 = !{!12, !12, i64 0}


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

@gCallbackStatus = external hidden local_unnamed_addr global i8, align 1
@g_pNeedBytesCallback = external hidden local_unnamed_addr global ptr, align 8
@g_pCallback_data = external hidden local_unnamed_addr global ptr, align 8
@gReduce = external hidden local_unnamed_addr global i8, align 1
@gImageXSize = external hidden local_unnamed_addr global i16, align 2
@gImageYSize = external hidden local_unnamed_addr global i16, align 2
@gCompsInFrame = external hidden local_unnamed_addr global i8, align 1
@gScanType = external hidden local_unnamed_addr global i32, align 4
@gMaxMCUSPerRow = external hidden local_unnamed_addr global i16, align 2
@gMaxMCUSPerCol = external hidden local_unnamed_addr global i16, align 2
@gMaxMCUXSize = external hidden local_unnamed_addr global i8, align 1
@gMaxMCUYSize = external hidden local_unnamed_addr global i8, align 1
@gMCUBufR = external hidden global [256 x i8], align 16
@gMCUBufG = external hidden global [256 x i8], align 16
@gMCUBufB = external hidden global [256 x i8], align 16

; Function Attrs: nounwind uwtable
define dso_local zeroext i8 @pjpeg_decode_init(ptr nocapture noundef writeonly %0, ptr noundef %1, ptr noundef %2, i8 noundef zeroext %3) local_unnamed_addr #0 {
  %5 = getelementptr inbounds i8, ptr %0, i64 4
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  %7 = getelementptr inbounds i8, ptr %0, i64 12
  %8 = getelementptr inbounds i8, ptr %0, i64 16
  %9 = getelementptr inbounds i8, ptr %0, i64 20
  %10 = getelementptr inbounds i8, ptr %0, i64 24
  %11 = getelementptr inbounds i8, ptr %0, i64 28
  %12 = getelementptr inbounds i8, ptr %0, i64 32
  %13 = getelementptr inbounds i8, ptr %0, i64 40
  %14 = getelementptr inbounds i8, ptr %0, i64 48
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, i8 0, i64 56, i1 false)
  store ptr %1, ptr @g_pNeedBytesCallback, align 8, !tbaa !5
  store ptr %2, ptr @g_pCallback_data, align 8, !tbaa !5
  store i8 0, ptr @gCallbackStatus, align 1, !tbaa !9
  store i8 %3, ptr @gReduce, align 1, !tbaa !9
  %15 = tail call zeroext i8 @init()
  %16 = icmp ne i8 %15, 0
  %17 = load i8, ptr @gCallbackStatus, align 1
  %18 = icmp ne i8 %17, 0
  %or.cond = select i1 %16, i1 true, i1 %18
  br i1 %or.cond, label %19, label %20

19:                                               ; preds = %4
  %.v46 = select i1 %18, i8 %17, i8 %15
  br label %54

20:                                               ; preds = %4
  %21 = tail call zeroext i8 @locateSOFMarker()
  %22 = icmp ne i8 %21, 0
  %23 = load i8, ptr @gCallbackStatus, align 1
  %24 = icmp ne i8 %23, 0
  %or.cond5 = select i1 %22, i1 true, i1 %24
  br i1 %or.cond5, label %25, label %26

25:                                               ; preds = %20
  %.v45 = select i1 %24, i8 %23, i8 %21
  br label %54

26:                                               ; preds = %20
  %27 = tail call zeroext i8 @initFrame()
  %28 = icmp ne i8 %27, 0
  %29 = load i8, ptr @gCallbackStatus, align 1
  %30 = icmp ne i8 %29, 0
  %or.cond8 = select i1 %28, i1 true, i1 %30
  br i1 %or.cond8, label %31, label %32

31:                                               ; preds = %26
  %.v44 = select i1 %30, i8 %29, i8 %27
  br label %54

32:                                               ; preds = %26
  %33 = tail call zeroext i8 @initScan()
  %34 = icmp ne i8 %33, 0
  %35 = load i8, ptr @gCallbackStatus, align 1
  %36 = icmp ne i8 %35, 0
  %or.cond11 = select i1 %34, i1 true, i1 %36
  br i1 %or.cond11, label %37, label %38

37:                                               ; preds = %32
  %.v = select i1 %36, i8 %35, i8 %33
  br label %54

38:                                               ; preds = %32
  %39 = load i16, ptr @gImageXSize, align 2, !tbaa !10
  %40 = zext i16 %39 to i32
  store i32 %40, ptr %0, align 8, !tbaa !12
  %41 = load i16, ptr @gImageYSize, align 2, !tbaa !10
  %42 = zext i16 %41 to i32
  store i32 %42, ptr %5, align 4, !tbaa !15
  %43 = load i8, ptr @gCompsInFrame, align 1, !tbaa !9
  %44 = zext i8 %43 to i32
  store i32 %44, ptr %6, align 8, !tbaa !16
  %45 = load i32, ptr @gScanType, align 4, !tbaa !17
  store i32 %45, ptr %9, align 4, !tbaa !18
  %46 = load i16, ptr @gMaxMCUSPerRow, align 2, !tbaa !10
  %47 = zext i16 %46 to i32
  store i32 %47, ptr %7, align 4, !tbaa !19
  %48 = load i16, ptr @gMaxMCUSPerCol, align 2, !tbaa !10
  %49 = zext i16 %48 to i32
  store i32 %49, ptr %8, align 8, !tbaa !20
  %50 = load i8, ptr @gMaxMCUXSize, align 1, !tbaa !9
  %51 = zext i8 %50 to i32
  store i32 %51, ptr %10, align 8, !tbaa !21
  %52 = load i8, ptr @gMaxMCUYSize, align 1, !tbaa !9
  %53 = zext i8 %52 to i32
  store i32 %53, ptr %11, align 4, !tbaa !22
  store ptr @gMCUBufR, ptr %12, align 8, !tbaa !23
  store ptr @gMCUBufG, ptr %13, align 8, !tbaa !24
  store ptr @gMCUBufB, ptr %14, align 8, !tbaa !25
  br label %54

54:                                               ; preds = %38, %37, %31, %25, %19
  %.0 = phi i8 [ %.v46, %19 ], [ %.v45, %25 ], [ %.v44, %31 ], [ %.v, %37 ], [ 0, %38 ]
  ret i8 %.0
}

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @init() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @locateSOFMarker() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @initFrame() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @initScan() local_unnamed_addr #0

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

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 nounwind willreturn memory(argmem: write) }

!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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"short", !7, i64 0}
!12 = !{!13, !14, i64 0}
!13 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !6, i64 32, !6, i64 40, !6, i64 48}
!14 = !{!"int", !7, i64 0}
!15 = !{!13, !14, i64 4}
!16 = !{!13, !14, i64 8}
!17 = !{!14, !14, i64 0}
!18 = !{!13, !14, i64 20}
!19 = !{!13, !14, i64 12}
!20 = !{!13, !14, i64 16}
!21 = !{!13, !14, i64 24}
!22 = !{!13, !14, i64 28}
!23 = !{!13, !6, i64 32}
!24 = !{!13, !6, i64 40}
!25 = !{!13, !6, i64 48}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,MemCpyOptPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass