; LLVM IR from NOAA-PMEL/Ferret :: xgks/src/lib (gd)

; 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.gdImageStruct = type { ptr, i32, i32, i32, [256 x i32], [256 x i32], [256 x i32], [256 x i32], i32, ptr, i32, ptr, ptr, [256 x i32], [256 x i32], i32, i32, ptr, i32, i32, i32, i32, 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
declare dso_local i32 @gdImageColorClosest(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @gdImageColorExact(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @gdImageColorAllocate(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @gdImageGetPixel(ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @gdImageCopy(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7) #1 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca [256 x i32], align 16
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store i32 %2, ptr %11, align 4, !tbaa !9
  store i32 %3, ptr %12, align 4, !tbaa !9
  store i32 %4, ptr %13, align 4, !tbaa !9
  store i32 %5, ptr %14, align 4, !tbaa !9
  store i32 %6, ptr %15, align 4, !tbaa !9
  store i32 %7, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 1024, ptr %23) #2
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %26

26:                                               ; preds = %33, %8
  %27 = load i32, ptr %22, align 4, !tbaa !9
  %28 = icmp slt i32 %27, 256
  br i1 %28, label %29, label %36

29:                                               ; preds = %26
  %30 = load i32, ptr %22, align 4, !tbaa !9
  %31 = sext i32 %30 to i64
  %32 = getelementptr inbounds [256 x i32], ptr %23, i64 0, i64 %31
  store i32 -1, ptr %32, align 4, !tbaa !9
  br label %33

33:                                               ; preds = %29
  %34 = load i32, ptr %22, align 4, !tbaa !9
  %35 = add nsw i32 %34, 1
  store i32 %35, ptr %22, align 4, !tbaa !9
  br label %26, !llvm.loop !11

36:                                               ; preds = %26
  %37 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %37, ptr %21, align 4, !tbaa !9
  %38 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %38, ptr %19, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %172, %36
  %40 = load i32, ptr %19, align 4, !tbaa !9
  %41 = load i32, ptr %14, align 4, !tbaa !9
  %42 = load i32, ptr %16, align 4, !tbaa !9
  %43 = add nsw i32 %41, %42
  %44 = icmp slt i32 %40, %43
  br i1 %44, label %45, label %175

45:                                               ; preds = %39
  %46 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %46, ptr %20, align 4, !tbaa !9
  %47 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %47, ptr %18, align 4, !tbaa !9
  br label %48

48:                                               ; preds = %166, %45
  %49 = load i32, ptr %18, align 4, !tbaa !9
  %50 = load i32, ptr %13, align 4, !tbaa !9
  %51 = load i32, ptr %15, align 4, !tbaa !9
  %52 = add nsw i32 %50, %51
  %53 = icmp slt i32 %49, %52
  br i1 %53, label %54, label %169

54:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #2
  %55 = load ptr, ptr %10, align 8, !tbaa !5
  %56 = load i32, ptr %18, align 4, !tbaa !9
  %57 = load i32, ptr %19, align 4, !tbaa !9
  %58 = call i32 @gdImageGetPixel(ptr noundef %55, i32 noundef %56, i32 noundef %57)
  store i32 %58, ptr %17, align 4, !tbaa !9
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.gdImageStruct, ptr %59, i32 0, i32 8
  %61 = load i32, ptr %60, align 4, !tbaa !13
  %62 = load i32, ptr %17, align 4, !tbaa !9
  %63 = icmp eq i32 %61, %62
  br i1 %63, label %64, label %67

64:                                               ; preds = %54
  %65 = load i32, ptr %20, align 4, !tbaa !9
  %66 = add nsw i32 %65, 1
  store i32 %66, ptr %20, align 4, !tbaa !9
  store i32 10, ptr %25, align 4
  br label %163

67:                                               ; preds = %54
  %68 = load i32, ptr %17, align 4, !tbaa !9
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds [256 x i32], ptr %23, i64 0, i64 %69
  %71 = load i32, ptr %70, align 4, !tbaa !9
  %72 = icmp eq i32 %71, -1
  br i1 %72, label %73, label %153

73:                                               ; preds = %67
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = load ptr, ptr %10, align 8, !tbaa !5
  %76 = icmp eq ptr %74, %75
  br i1 %76, label %77, label %79

77:                                               ; preds = %73
  %78 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %78, ptr %24, align 4, !tbaa !9
  br label %100

79:                                               ; preds = %73
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = load ptr, ptr %10, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.gdImageStruct, ptr %81, i32 0, i32 4
  %83 = load i32, ptr %17, align 4, !tbaa !9
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [256 x i32], ptr %82, i64 0, i64 %84
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = load ptr, ptr %10, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.gdImageStruct, ptr %87, i32 0, i32 5
  %89 = load i32, ptr %17, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds [256 x i32], ptr %88, i64 0, i64 %90
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = load ptr, ptr %10, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.gdImageStruct, ptr %93, i32 0, i32 6
  %95 = load i32, ptr %17, align 4, !tbaa !9
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds [256 x i32], ptr %94, i64 0, i64 %96
  %98 = load i32, ptr %97, align 4, !tbaa !9
  %99 = call i32 @gdImageColorExact(ptr noundef %80, i32 noundef %86, i32 noundef %92, i32 noundef %98)
  store i32 %99, ptr %24, align 4, !tbaa !9
  br label %100

100:                                              ; preds = %79, %77
  %101 = load i32, ptr %24, align 4, !tbaa !9
  %102 = icmp eq i32 %101, -1
  br i1 %102, label %103, label %148

103:                                              ; preds = %100
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.gdImageStruct, ptr %105, i32 0, i32 4
  %107 = load i32, ptr %17, align 4, !tbaa !9
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [256 x i32], ptr %106, i64 0, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.gdImageStruct, ptr %111, i32 0, i32 5
  %113 = load i32, ptr %17, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds [256 x i32], ptr %112, i64 0, i64 %114
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.gdImageStruct, ptr %117, i32 0, i32 6
  %119 = load i32, ptr %17, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds [256 x i32], ptr %118, i64 0, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !9
  %123 = call i32 @gdImageColorAllocate(ptr noundef %104, i32 noundef %110, i32 noundef %116, i32 noundef %122)
  store i32 %123, ptr %24, align 4, !tbaa !9
  %124 = load i32, ptr %24, align 4, !tbaa !9
  %125 = icmp eq i32 %124, -1
  br i1 %125, label %126, label %147

126:                                              ; preds = %103
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.gdImageStruct, ptr %128, i32 0, i32 4
  %130 = load i32, ptr %17, align 4, !tbaa !9
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [256 x i32], ptr %129, i64 0, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !9
  %134 = load ptr, ptr %10, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.gdImageStruct, ptr %134, i32 0, i32 5
  %136 = load i32, ptr %17, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds [256 x i32], ptr %135, i64 0, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !9
  %140 = load ptr, ptr %10, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.gdImageStruct, ptr %140, i32 0, i32 6
  %142 = load i32, ptr %17, align 4, !tbaa !9
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [256 x i32], ptr %141, i64 0, i64 %143
  %145 = load i32, ptr %144, align 4, !tbaa !9
  %146 = call i32 @gdImageColorClosest(ptr noundef %127, i32 noundef %133, i32 noundef %139, i32 noundef %145)
  store i32 %146, ptr %24, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %126, %103
  br label %148

148:                                              ; preds = %147, %100
  %149 = load i32, ptr %24, align 4, !tbaa !9
  %150 = load i32, ptr %17, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [256 x i32], ptr %23, i64 0, i64 %151
  store i32 %149, ptr %152, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %148, %67
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = load i32, ptr %20, align 4, !tbaa !9
  %156 = load i32, ptr %21, align 4, !tbaa !9
  %157 = load i32, ptr %17, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [256 x i32], ptr %23, i64 0, i64 %158
  %160 = load i32, ptr %159, align 4, !tbaa !9
  call void @gdImageSetPixel(ptr noundef %154, i32 noundef %155, i32 noundef %156, i32 noundef %160)
  %161 = load i32, ptr %20, align 4, !tbaa !9
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %20, align 4, !tbaa !9
  store i32 0, ptr %25, align 4
  br label %163

163:                                              ; preds = %153, %64
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #2
  %164 = load i32, ptr %25, align 4
  switch i32 %164, label %176 [
    i32 0, label %165
    i32 10, label %166
  ]

165:                                              ; preds = %163
  br label %166

166:                                              ; preds = %165, %163
  %167 = load i32, ptr %18, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %18, align 4, !tbaa !9
  br label %48, !llvm.loop !15

169:                                              ; preds = %48
  %170 = load i32, ptr %21, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %21, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %169
  %173 = load i32, ptr %19, align 4, !tbaa !9
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %19, align 4, !tbaa !9
  br label %39, !llvm.loop !16

175:                                              ; preds = %39
  call void @llvm.lifetime.end.p0(i64 1024, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #2
  ret void

176:                                              ; preds = %163
  unreachable
}

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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 4116}
!14 = !{!"gdImageStruct", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 20, !7, i64 1044, !7, i64 2068, !7, i64 3092, !10, i64 4116, !6, i64 4120, !10, i64 4128, !6, i64 4136, !6, i64 4144, !7, i64 4152, !7, i64 5176, !10, i64 6200, !10, i64 6204, !6, i64 6208, !10, i64 6216, !10, i64 6220, !10, i64 6224, !10, i64 6228, !10, i64 6232}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}


; 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: 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
declare dso_local i32 @gdImageColorClosest(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @gdImageColorExact(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @gdImageColorAllocate(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @gdImageGetPixel(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @gdImageCopy(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7) local_unnamed_addr #1 {
.preheader65:
  %8 = alloca [256 x i32], align 16
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %8) #3
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(1024) %8, i8 -1, i64 1024, i1 false), !tbaa !5
  %9 = add nsw i32 %7, %5
  %10 = icmp sgt i32 %7, 0
  br i1 %10, label %.preheader.lr.ph, label %._crit_edge73

.preheader.lr.ph:                                 ; preds = %.preheader65
  %11 = add nsw i32 %6, %4
  %12 = icmp sgt i32 %6, 0
  %13 = getelementptr inbounds i8, ptr %1, i64 4116
  %14 = getelementptr inbounds i8, ptr %1, i64 20
  %15 = getelementptr inbounds i8, ptr %1, i64 1044
  %16 = getelementptr inbounds i8, ptr %1, i64 2068
  br i1 %12, label %.preheader.lr.ph.split.us, label %._crit_edge73

.preheader.lr.ph.split.us:                        ; preds = %.preheader.lr.ph
  %17 = icmp eq ptr %0, %1
  br i1 %17, label %.preheader.us.us, label %.preheader.us

.preheader.us.us:                                 ; preds = %.preheader.lr.ph.split.us, %._crit_edge.split.us.us.us
  %.05671.us.us = phi i32 [ %49, %._crit_edge.split.us.us.us ], [ %3, %.preheader.lr.ph.split.us ]
  %.05969.us.us = phi i32 [ %50, %._crit_edge.split.us.us.us ], [ %5, %.preheader.lr.ph.split.us ]
  br label %18

18:                                               ; preds = %46, %.preheader.us.us
  %.05768.us.us.us = phi i32 [ %2, %.preheader.us.us ], [ %.158.us.us.us, %46 ]
  %.06067.us.us.us = phi i32 [ %4, %.preheader.us.us ], [ %47, %46 ]
  %19 = tail call i32 @gdImageGetPixel(ptr noundef %1, i32 noundef %.06067.us.us.us, i32 noundef %.05969.us.us)
  %20 = load i32, ptr %13, align 4, !tbaa !9
  %21 = icmp eq i32 %20, %19
  br i1 %21, label %46, label %22

22:                                               ; preds = %18
  %23 = sext i32 %19 to i64
  %24 = getelementptr inbounds [256 x i32], ptr %8, i64 0, i64 %23
  %25 = load i32, ptr %24, align 4, !tbaa !5
  %26 = icmp eq i32 %25, -1
  br i1 %26, label %27, label %44

27:                                               ; preds = %22
  %28 = icmp eq i32 %19, -1
  br i1 %28, label %29, label %43

29:                                               ; preds = %27
  %30 = getelementptr inbounds [256 x i32], ptr %14, i64 0, i64 %23
  %31 = load i32, ptr %30, align 4, !tbaa !5
  %32 = getelementptr inbounds [256 x i32], ptr %15, i64 0, i64 %23
  %33 = load i32, ptr %32, align 4, !tbaa !5
  %34 = getelementptr inbounds [256 x i32], ptr %16, i64 0, i64 %23
  %35 = load i32, ptr %34, align 4, !tbaa !5
  %36 = tail call i32 @gdImageColorAllocate(ptr noundef %0, i32 noundef %31, i32 noundef %33, i32 noundef %35)
  %37 = icmp eq i32 %36, -1
  br i1 %37, label %38, label %43

38:                                               ; preds = %29
  %39 = load i32, ptr %30, align 4, !tbaa !5
  %40 = load i32, ptr %32, align 4, !tbaa !5
  %41 = load i32, ptr %34, align 4, !tbaa !5
  %42 = tail call i32 @gdImageColorClosest(ptr noundef %0, i32 noundef %39, i32 noundef %40, i32 noundef %41)
  br label %43

43:                                               ; preds = %38, %29, %27
  %.1.us.us.us = phi i32 [ %42, %38 ], [ %36, %29 ], [ %19, %27 ]
  store i32 %.1.us.us.us, ptr %24, align 4, !tbaa !5
  br label %44

44:                                               ; preds = %43, %22
  %45 = phi i32 [ %.1.us.us.us, %43 ], [ %25, %22 ]
  tail call void @gdImageSetPixel(ptr noundef %0, i32 noundef %.05768.us.us.us, i32 noundef %.05671.us.us, i32 noundef %45)
  br label %46

46:                                               ; preds = %44, %18
  %.158.us.us.us = add nsw i32 %.05768.us.us.us, 1
  %47 = add nsw i32 %.06067.us.us.us, 1
  %48 = icmp slt i32 %47, %11
  br i1 %48, label %18, label %._crit_edge.split.us.us.us, !llvm.loop !12

._crit_edge.split.us.us.us:                       ; preds = %46
  %49 = add nsw i32 %.05671.us.us, 1
  %50 = add nsw i32 %.05969.us.us, 1
  %51 = icmp slt i32 %50, %9
  br i1 %51, label %.preheader.us.us, label %._crit_edge73, !llvm.loop !14

.preheader.us:                                    ; preds = %.preheader.lr.ph.split.us, %._crit_edge.split.us78
  %.05671.us = phi i32 [ %87, %._crit_edge.split.us78 ], [ %3, %.preheader.lr.ph.split.us ]
  %.05969.us = phi i32 [ %88, %._crit_edge.split.us78 ], [ %5, %.preheader.lr.ph.split.us ]
  br label %52

52:                                               ; preds = %.preheader.us, %84
  %.05768.us74 = phi i32 [ %2, %.preheader.us ], [ %.158.us77, %84 ]
  %.06067.us75 = phi i32 [ %4, %.preheader.us ], [ %85, %84 ]
  %53 = tail call i32 @gdImageGetPixel(ptr noundef %1, i32 noundef %.06067.us75, i32 noundef %.05969.us)
  %54 = load i32, ptr %13, align 4, !tbaa !9
  %55 = icmp eq i32 %54, %53
  br i1 %55, label %84, label %56

56:                                               ; preds = %52
  %57 = sext i32 %53 to i64
  %58 = getelementptr inbounds [256 x i32], ptr %8, i64 0, i64 %57
  %59 = load i32, ptr %58, align 4, !tbaa !5
  %60 = icmp eq i32 %59, -1
  br i1 %60, label %61, label %82

61:                                               ; preds = %56
  %62 = getelementptr inbounds [256 x i32], ptr %14, i64 0, i64 %57
  %63 = load i32, ptr %62, align 4, !tbaa !5
  %64 = getelementptr inbounds [256 x i32], ptr %15, i64 0, i64 %57
  %65 = load i32, ptr %64, align 4, !tbaa !5
  %66 = getelementptr inbounds [256 x i32], ptr %16, i64 0, i64 %57
  %67 = load i32, ptr %66, align 4, !tbaa !5
  %68 = tail call i32 @gdImageColorExact(ptr noundef %0, i32 noundef %63, i32 noundef %65, i32 noundef %67)
  %69 = icmp eq i32 %68, -1
  br i1 %69, label %70, label %81

70:                                               ; preds = %61
  %71 = load i32, ptr %62, align 4, !tbaa !5
  %72 = load i32, ptr %64, align 4, !tbaa !5
  %73 = load i32, ptr %66, align 4, !tbaa !5
  %74 = tail call i32 @gdImageColorAllocate(ptr noundef %0, i32 noundef %71, i32 noundef %72, i32 noundef %73)
  %75 = icmp eq i32 %74, -1
  br i1 %75, label %76, label %81

76:                                               ; preds = %70
  %77 = load i32, ptr %62, align 4, !tbaa !5
  %78 = load i32, ptr %64, align 4, !tbaa !5
  %79 = load i32, ptr %66, align 4, !tbaa !5
  %80 = tail call i32 @gdImageColorClosest(ptr noundef %0, i32 noundef %77, i32 noundef %78, i32 noundef %79)
  br label %81

81:                                               ; preds = %76, %70, %61
  %.1.us76 = phi i32 [ %80, %76 ], [ %74, %70 ], [ %68, %61 ]
  store i32 %.1.us76, ptr %58, align 4, !tbaa !5
  br label %82

82:                                               ; preds = %81, %56
  %83 = phi i32 [ %.1.us76, %81 ], [ %59, %56 ]
  tail call void @gdImageSetPixel(ptr noundef %0, i32 noundef %.05768.us74, i32 noundef %.05671.us, i32 noundef %83)
  br label %84

84:                                               ; preds = %82, %52
  %.158.us77 = add nsw i32 %.05768.us74, 1
  %85 = add nsw i32 %.06067.us75, 1
  %86 = icmp slt i32 %85, %11
  br i1 %86, label %52, label %._crit_edge.split.us78, !llvm.loop !12

._crit_edge.split.us78:                           ; preds = %84
  %87 = add nsw i32 %.05671.us, 1
  %88 = add nsw i32 %.05969.us, 1
  %89 = icmp slt i32 %88, %9
  br i1 %89, label %.preheader.us, label %._crit_edge73, !llvm.loop !14

._crit_edge73:                                    ; preds = %._crit_edge.split.us78, %._crit_edge.split.us.us.us, %.preheader.lr.ph, %.preheader65
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %8) #3
  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

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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 4116}
!10 = !{!"gdImageStruct", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !7, i64 20, !7, i64 1044, !7, i64 2068, !7, i64 3092, !6, i64 4116, !11, i64 4120, !6, i64 4128, !11, i64 4136, !11, i64 4144, !7, i64 4152, !7, i64 5176, !6, i64 6200, !6, i64 6204, !11, i64 6208, !6, i64 6216, !6, i64 6220, !6, i64 6224, !6, i64 6228, !6, i64 6232}
!11 = !{!"any pointer", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass