; 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 }
%struct.gdPoint = type { 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: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #1

; 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 void @gdImageLine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @gdImageFilledPolygon(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %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 i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %27 = load i32, ptr %7, align 4, !tbaa !9
  %28 = icmp ne i32 %27, 0
  br i1 %28, label %30, label %29

29:                                               ; preds = %4
  store i32 1, ptr %14, align 4
  br label %390

30:                                               ; preds = %4
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.gdImageStruct, ptr %31, i32 0, i32 10
  %33 = load i32, ptr %32, align 8, !tbaa !11
  %34 = icmp ne i32 %33, 0
  br i1 %34, label %45, label %35

35:                                               ; preds = %30
  %36 = load i32, ptr %7, align 4, !tbaa !9
  %37 = sext i32 %36 to i64
  %38 = mul i64 4, %37
  %39 = call noalias ptr @malloc(i64 noundef %38) #6
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.gdImageStruct, ptr %40, i32 0, i32 9
  store ptr %39, ptr %41, align 8, !tbaa !13
  %42 = load i32, ptr %7, align 4, !tbaa !9
  %43 = load ptr, ptr %5, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.gdImageStruct, ptr %43, i32 0, i32 10
  store i32 %42, ptr %44, align 8, !tbaa !11
  br label %45

45:                                               ; preds = %35, %30
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.gdImageStruct, ptr %46, i32 0, i32 10
  %48 = load i32, ptr %47, align 8, !tbaa !11
  %49 = load i32, ptr %7, align 4, !tbaa !9
  %50 = icmp slt i32 %48, %49
  br i1 %50, label %51, label %75

51:                                               ; preds = %45
  br label %52

52:                                               ; preds = %58, %51
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.gdImageStruct, ptr %53, i32 0, i32 10
  %55 = load i32, ptr %54, align 8, !tbaa !11
  %56 = load i32, ptr %7, align 4, !tbaa !9
  %57 = icmp slt i32 %55, %56
  br i1 %57, label %58, label %63

58:                                               ; preds = %52
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.gdImageStruct, ptr %59, i32 0, i32 10
  %61 = load i32, ptr %60, align 8, !tbaa !11
  %62 = mul nsw i32 %61, 2
  store i32 %62, ptr %60, align 8, !tbaa !11
  br label %52, !llvm.loop !14

63:                                               ; preds = %52
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.gdImageStruct, ptr %64, i32 0, i32 9
  %66 = load ptr, ptr %65, align 8, !tbaa !13
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.gdImageStruct, ptr %67, i32 0, i32 10
  %69 = load i32, ptr %68, align 8, !tbaa !11
  %70 = sext i32 %69 to i64
  %71 = mul i64 4, %70
  %72 = call ptr @realloc(ptr noundef %66, i64 noundef %71) #7
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.gdImageStruct, ptr %73, i32 0, i32 9
  store ptr %72, ptr %74, align 8, !tbaa !13
  br label %75

75:                                               ; preds = %63, %45
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.gdPoint, ptr %76, i64 0
  %78 = getelementptr inbounds %struct.gdPoint, ptr %77, i32 0, i32 1
  %79 = load i32, ptr %78, align 4, !tbaa !16
  store i32 %79, ptr %11, align 4, !tbaa !9
  %80 = load ptr, ptr %6, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.gdPoint, ptr %80, i64 0
  %82 = getelementptr inbounds %struct.gdPoint, ptr %81, i32 0, i32 1
  %83 = load i32, ptr %82, align 4, !tbaa !16
  store i32 %83, ptr %12, align 4, !tbaa !9
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %121, %75
  %85 = load i32, ptr %9, align 4, !tbaa !9
  %86 = load i32, ptr %7, align 4, !tbaa !9
  %87 = icmp slt i32 %85, %86
  br i1 %87, label %88, label %124

88:                                               ; preds = %84
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = load i32, ptr %9, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds %struct.gdPoint, ptr %89, i64 %91
  %93 = getelementptr inbounds %struct.gdPoint, ptr %92, i32 0, i32 1
  %94 = load i32, ptr %93, align 4, !tbaa !16
  %95 = load i32, ptr %11, align 4, !tbaa !9
  %96 = icmp slt i32 %94, %95
  br i1 %96, label %97, label %104

97:                                               ; preds = %88
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = load i32, ptr %9, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds %struct.gdPoint, ptr %98, i64 %100
  %102 = getelementptr inbounds %struct.gdPoint, ptr %101, i32 0, i32 1
  %103 = load i32, ptr %102, align 4, !tbaa !16
  store i32 %103, ptr %11, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %97, %88
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = load i32, ptr %9, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds %struct.gdPoint, ptr %105, i64 %107
  %109 = getelementptr inbounds %struct.gdPoint, ptr %108, i32 0, i32 1
  %110 = load i32, ptr %109, align 4, !tbaa !16
  %111 = load i32, ptr %12, align 4, !tbaa !9
  %112 = icmp sgt i32 %110, %111
  br i1 %112, label %113, label %120

113:                                              ; preds = %104
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  %115 = load i32, ptr %9, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds %struct.gdPoint, ptr %114, i64 %116
  %118 = getelementptr inbounds %struct.gdPoint, ptr %117, i32 0, i32 1
  %119 = load i32, ptr %118, align 4, !tbaa !16
  store i32 %119, ptr %12, align 4, !tbaa !9
  br label %120

120:                                              ; preds = %113, %104
  br label %121

121:                                              ; preds = %120
  %122 = load i32, ptr %9, align 4, !tbaa !9
  %123 = add nsw i32 %122, 1
  store i32 %123, ptr %9, align 4, !tbaa !9
  br label %84, !llvm.loop !18

124:                                              ; preds = %84
  %125 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %125, ptr %10, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %386, %124
  %127 = load i32, ptr %10, align 4, !tbaa !9
  %128 = load i32, ptr %12, align 4, !tbaa !9
  %129 = icmp slt i32 %127, %128
  br i1 %129, label %130, label %389

130:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 1, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %13, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %131

131:                                              ; preds = %348, %130
  %132 = load i32, ptr %9, align 4, !tbaa !9
  %133 = load i32, ptr %7, align 4, !tbaa !9
  %134 = icmp sle i32 %132, %133
  br i1 %134, label %135, label %351

135:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  store i32 0, ptr %25, align 4, !tbaa !9
  %136 = load i32, ptr %9, align 4, !tbaa !9
  %137 = load i32, ptr %7, align 4, !tbaa !9
  %138 = icmp eq i32 %136, %137
  br i1 %138, label %142, label %139

139:                                              ; preds = %135
  %140 = load i32, ptr %9, align 4, !tbaa !9
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %145, label %142

142:                                              ; preds = %139, %135
  %143 = load i32, ptr %7, align 4, !tbaa !9
  %144 = sub nsw i32 %143, 1
  store i32 %144, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %149

145:                                              ; preds = %139
  %146 = load i32, ptr %9, align 4, !tbaa !9
  %147 = sub nsw i32 %146, 1
  store i32 %147, ptr %23, align 4, !tbaa !9
  %148 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %148, ptr %24, align 4, !tbaa !9
  br label %149

149:                                              ; preds = %145, %142
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = load i32, ptr %23, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds %struct.gdPoint, ptr %150, i64 %152
  %154 = getelementptr inbounds %struct.gdPoint, ptr %153, i32 0, i32 1
  %155 = load i32, ptr %154, align 4, !tbaa !16
  store i32 %155, ptr %20, align 4, !tbaa !9
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = load i32, ptr %24, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds %struct.gdPoint, ptr %156, i64 %158
  %160 = getelementptr inbounds %struct.gdPoint, ptr %159, i32 0, i32 1
  %161 = load i32, ptr %160, align 4, !tbaa !16
  store i32 %161, ptr %21, align 4, !tbaa !9
  %162 = load i32, ptr %20, align 4, !tbaa !9
  %163 = load i32, ptr %21, align 4, !tbaa !9
  %164 = icmp slt i32 %162, %163
  br i1 %164, label %165, label %190

165:                                              ; preds = %149
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = load i32, ptr %23, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds %struct.gdPoint, ptr %166, i64 %168
  %170 = getelementptr inbounds %struct.gdPoint, ptr %169, i32 0, i32 1
  %171 = load i32, ptr %170, align 4, !tbaa !16
  store i32 %171, ptr %20, align 4, !tbaa !9
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  %173 = load i32, ptr %24, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds %struct.gdPoint, ptr %172, i64 %174
  %176 = getelementptr inbounds %struct.gdPoint, ptr %175, i32 0, i32 1
  %177 = load i32, ptr %176, align 4, !tbaa !16
  store i32 %177, ptr %21, align 4, !tbaa !9
  %178 = load ptr, ptr %6, align 8, !tbaa !5
  %179 = load i32, ptr %23, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds %struct.gdPoint, ptr %178, i64 %180
  %182 = getelementptr inbounds %struct.gdPoint, ptr %181, i32 0, i32 0
  %183 = load i32, ptr %182, align 4, !tbaa !19
  store i32 %183, ptr %18, align 4, !tbaa !9
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = load i32, ptr %24, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds %struct.gdPoint, ptr %184, i64 %186
  %188 = getelementptr inbounds %struct.gdPoint, ptr %187, i32 0, i32 0
  %189 = load i32, ptr %188, align 4, !tbaa !19
  store i32 %189, ptr %19, align 4, !tbaa !9
  store i32 -1, ptr %22, align 4, !tbaa !9
  br label %237

190:                                              ; preds = %149
  %191 = load i32, ptr %20, align 4, !tbaa !9
  %192 = load i32, ptr %21, align 4, !tbaa !9
  %193 = icmp sgt i32 %191, %192
  br i1 %193, label %194, label %219

194:                                              ; preds = %190
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = load i32, ptr %23, align 4, !tbaa !9
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds %struct.gdPoint, ptr %195, i64 %197
  %199 = getelementptr inbounds %struct.gdPoint, ptr %198, i32 0, i32 1
  %200 = load i32, ptr %199, align 4, !tbaa !16
  store i32 %200, ptr %21, align 4, !tbaa !9
  %201 = load ptr, ptr %6, align 8, !tbaa !5
  %202 = load i32, ptr %24, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds %struct.gdPoint, ptr %201, i64 %203
  %205 = getelementptr inbounds %struct.gdPoint, ptr %204, i32 0, i32 1
  %206 = load i32, ptr %205, align 4, !tbaa !16
  store i32 %206, ptr %20, align 4, !tbaa !9
  %207 = load ptr, ptr %6, align 8, !tbaa !5
  %208 = load i32, ptr %23, align 4, !tbaa !9
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds %struct.gdPoint, ptr %207, i64 %209
  %211 = getelementptr inbounds %struct.gdPoint, ptr %210, i32 0, i32 0
  %212 = load i32, ptr %211, align 4, !tbaa !19
  store i32 %212, ptr %19, align 4, !tbaa !9
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = load i32, ptr %24, align 4, !tbaa !9
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds %struct.gdPoint, ptr %213, i64 %215
  %217 = getelementptr inbounds %struct.gdPoint, ptr %216, i32 0, i32 0
  %218 = load i32, ptr %217, align 4, !tbaa !19
  store i32 %218, ptr %18, align 4, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !9
  br label %236

219:                                              ; preds = %190
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = load i32, ptr %23, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds %struct.gdPoint, ptr %221, i64 %223
  %225 = getelementptr inbounds %struct.gdPoint, ptr %224, i32 0, i32 0
  %226 = load i32, ptr %225, align 4, !tbaa !19
  %227 = load i32, ptr %20, align 4, !tbaa !9
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = load i32, ptr %24, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds %struct.gdPoint, ptr %228, i64 %230
  %232 = getelementptr inbounds %struct.gdPoint, ptr %231, i32 0, i32 0
  %233 = load i32, ptr %232, align 4, !tbaa !19
  %234 = load i32, ptr %20, align 4, !tbaa !9
  %235 = load i32, ptr %8, align 4, !tbaa !9
  call void @gdImageLine(ptr noundef %220, i32 noundef %226, i32 noundef %227, i32 noundef %233, i32 noundef %234, i32 noundef %235)
  store i32 12, ptr %14, align 4
  br label %345

236:                                              ; preds = %194
  br label %237

237:                                              ; preds = %236, %165
  %238 = load i32, ptr %10, align 4, !tbaa !9
  %239 = load i32, ptr %20, align 4, !tbaa !9
  %240 = icmp sge i32 %238, %239
  br i1 %240, label %241, label %344

241:                                              ; preds = %237
  %242 = load i32, ptr %10, align 4, !tbaa !9
  %243 = load i32, ptr %21, align 4, !tbaa !9
  %244 = icmp sle i32 %242, %243
  br i1 %244, label %245, label %344

245:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %246 = load i32, ptr %10, align 4, !tbaa !9
  %247 = load i32, ptr %20, align 4, !tbaa !9
  %248 = sub nsw i32 %246, %247
  %249 = sitofp i32 %248 to double
  %250 = fmul double 1.000000e+00, %249
  %251 = load i32, ptr %19, align 4, !tbaa !9
  %252 = load i32, ptr %18, align 4, !tbaa !9
  %253 = sub nsw i32 %251, %252
  %254 = sitofp i32 %253 to double
  %255 = fmul double %250, %254
  %256 = load i32, ptr %21, align 4, !tbaa !9
  %257 = load i32, ptr %20, align 4, !tbaa !9
  %258 = sub nsw i32 %256, %257
  %259 = sitofp i32 %258 to double
  %260 = fdiv double %255, %259
  %261 = load i32, ptr %18, align 4, !tbaa !9
  %262 = sitofp i32 %261 to double
  %263 = fadd double %260, %262
  %264 = fptosi double %263 to i32
  store i32 %264, ptr %26, align 4, !tbaa !9
  %265 = load i32, ptr %17, align 4, !tbaa !9
  %266 = icmp ne i32 %265, 0
  br i1 %266, label %325, label %267

267:                                              ; preds = %245
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = load i32, ptr %23, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds %struct.gdPoint, ptr %268, i64 %270
  %272 = getelementptr inbounds %struct.gdPoint, ptr %271, i32 0, i32 1
  %273 = load i32, ptr %272, align 4, !tbaa !16
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = load i32, ptr %25, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds %struct.gdPoint, ptr %274, i64 %276
  %278 = getelementptr inbounds %struct.gdPoint, ptr %277, i32 0, i32 1
  %279 = load i32, ptr %278, align 4, !tbaa !16
  %280 = icmp eq i32 %273, %279
  br i1 %280, label %281, label %314

281:                                              ; preds = %267
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = load i32, ptr %23, align 4, !tbaa !9
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds %struct.gdPoint, ptr %282, i64 %284
  %286 = getelementptr inbounds %struct.gdPoint, ptr %285, i32 0, i32 0
  %287 = load i32, ptr %286, align 4, !tbaa !19
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = load i32, ptr %25, align 4, !tbaa !9
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds %struct.gdPoint, ptr %288, i64 %290
  %292 = getelementptr inbounds %struct.gdPoint, ptr %291, i32 0, i32 0
  %293 = load i32, ptr %292, align 4, !tbaa !19
  %294 = icmp ne i32 %287, %293
  br i1 %294, label %295, label %314

295:                                              ; preds = %281
  %296 = load i32, ptr %22, align 4, !tbaa !9
  %297 = load i32, ptr %16, align 4, !tbaa !9
  %298 = icmp eq i32 %296, %297
  br i1 %298, label %299, label %313

299:                                              ; preds = %295
  %300 = load i32, ptr %26, align 4, !tbaa !9
  %301 = load i32, ptr %15, align 4, !tbaa !9
  %302 = icmp sgt i32 %300, %301
  br i1 %302, label %303, label %311

303:                                              ; preds = %299
  %304 = load i32, ptr %26, align 4, !tbaa !9
  %305 = load ptr, ptr %5, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.gdImageStruct, ptr %305, i32 0, i32 9
  %307 = load ptr, ptr %306, align 8, !tbaa !13
  %308 = load i32, ptr %13, align 4, !tbaa !9
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %307, i64 %309
  store i32 %304, ptr %310, align 4, !tbaa !9
  br label %312

311:                                              ; preds = %299
  br label %312

312:                                              ; preds = %311, %303
  store i32 12, ptr %14, align 4
  br label %341

313:                                              ; preds = %295
  br label %314

314:                                              ; preds = %313, %281, %267
  %315 = load i32, ptr %26, align 4, !tbaa !9
  %316 = load i32, ptr %15, align 4, !tbaa !9
  %317 = icmp eq i32 %315, %316
  br i1 %317, label %318, label %324

318:                                              ; preds = %314
  %319 = load i32, ptr %22, align 4, !tbaa !9
  %320 = load i32, ptr %16, align 4, !tbaa !9
  %321 = icmp eq i32 %319, %320
  br i1 %321, label %322, label %323

322:                                              ; preds = %318
  store i32 12, ptr %14, align 4
  br label %341

323:                                              ; preds = %318
  br label %324

324:                                              ; preds = %323, %314
  br label %325

325:                                              ; preds = %324, %245
  %326 = load i32, ptr %9, align 4, !tbaa !9
  %327 = icmp sgt i32 %326, 0
  br i1 %327, label %328, label %337

328:                                              ; preds = %325
  %329 = load i32, ptr %26, align 4, !tbaa !9
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.gdImageStruct, ptr %330, i32 0, i32 9
  %332 = load ptr, ptr %331, align 8, !tbaa !13
  %333 = load i32, ptr %13, align 4, !tbaa !9
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %13, align 4, !tbaa !9
  %335 = sext i32 %333 to i64
  %336 = getelementptr inbounds i32, ptr %332, i64 %335
  store i32 %329, ptr %336, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %328, %325
  %338 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %338, ptr %25, align 4, !tbaa !9
  %339 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %339, ptr %16, align 4, !tbaa !9
  %340 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %340, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %14, align 4
  br label %341

341:                                              ; preds = %337, %322, %312
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  %342 = load i32, ptr %14, align 4
  switch i32 %342, label %345 [
    i32 0, label %343
  ]

343:                                              ; preds = %341
  br label %344

344:                                              ; preds = %343, %241, %237
  store i32 0, ptr %14, align 4
  br label %345

345:                                              ; preds = %344, %341, %219
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %346 = load i32, ptr %14, align 4
  switch i32 %346, label %393 [
    i32 0, label %347
    i32 12, label %348
  ]

347:                                              ; preds = %345
  br label %348

348:                                              ; preds = %347, %345
  %349 = load i32, ptr %9, align 4, !tbaa !9
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %9, align 4, !tbaa !9
  br label %131, !llvm.loop !20

351:                                              ; preds = %131
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.gdImageStruct, ptr %352, i32 0, i32 9
  %354 = load ptr, ptr %353, align 8, !tbaa !13
  %355 = load i32, ptr %13, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  call void @qsort(ptr noundef %354, i64 noundef %356, i64 noundef 4, ptr noundef @gdCompareInt)
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %357

357:                                              ; preds = %382, %351
  %358 = load i32, ptr %9, align 4, !tbaa !9
  %359 = load i32, ptr %13, align 4, !tbaa !9
  %360 = sub nsw i32 %359, 1
  %361 = icmp slt i32 %358, %360
  br i1 %361, label %362, label %385

362:                                              ; preds = %357
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = load ptr, ptr %5, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.gdImageStruct, ptr %364, i32 0, i32 9
  %366 = load ptr, ptr %365, align 8, !tbaa !13
  %367 = load i32, ptr %9, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i32, ptr %366, i64 %368
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = load i32, ptr %10, align 4, !tbaa !9
  %372 = load ptr, ptr %5, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.gdImageStruct, ptr %372, i32 0, i32 9
  %374 = load ptr, ptr %373, align 8, !tbaa !13
  %375 = load i32, ptr %9, align 4, !tbaa !9
  %376 = add nsw i32 %375, 1
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds i32, ptr %374, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !9
  %380 = load i32, ptr %10, align 4, !tbaa !9
  %381 = load i32, ptr %8, align 4, !tbaa !9
  call void @gdImageLine(ptr noundef %363, i32 noundef %370, i32 noundef %371, i32 noundef %379, i32 noundef %380, i32 noundef %381)
  br label %382

382:                                              ; preds = %362
  %383 = load i32, ptr %9, align 4, !tbaa !9
  %384 = add nsw i32 %383, 1
  store i32 %384, ptr %9, align 4, !tbaa !9
  br label %357, !llvm.loop !21

385:                                              ; preds = %357
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %386

386:                                              ; preds = %385
  %387 = load i32, ptr %10, align 4, !tbaa !9
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %10, align 4, !tbaa !9
  br label %126, !llvm.loop !22

389:                                              ; preds = %126
  store i32 0, ptr %14, align 4
  br label %390

390:                                              ; preds = %389, %29
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  %391 = load i32, ptr %14, align 4
  switch i32 %391, label %393 [
    i32 0, label %392
    i32 1, label %392
  ]

392:                                              ; preds = %390, %390
  ret void

393:                                              ; preds = %390, %345
  unreachable
}

; Function Attrs: nounwind allocsize(1)
declare ptr @realloc(ptr noundef, i64 noundef) #3

declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind allocsize(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 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 = { nounwind allocsize(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 #4 = { "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 #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }
attributes #7 = { nounwind allocsize(1) }

!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 = !{!12, !10, i64 4128}
!12 = !{!"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}
!13 = !{!12, !6, i64 4120}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!17, !10, i64 4}
!17 = !{!"", !10, i64 0, !10, i64 4}
!18 = distinct !{!18, !15}
!19 = !{!17, !10, i64 0}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}


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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local void @gdImageFilledPolygon(ptr noundef %0, ptr nocapture noundef readonly %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #1 {
  %.not = icmp eq i32 %2, 0
  br i1 %.not, label %.loopexit, label %5

5:                                                ; preds = %4
  %6 = getelementptr inbounds i8, ptr %0, i64 4128
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %.not164 = icmp eq i32 %7, 0
  br i1 %.not164, label %.thread, label %12

.thread:                                          ; preds = %5
  %8 = sext i32 %2 to i64
  %9 = shl nsw i64 %8, 2
  %10 = tail call noalias ptr @malloc(i64 noundef %9) #5
  %11 = getelementptr inbounds i8, ptr %0, i64 4120
  store ptr %10, ptr %11, align 8, !tbaa !11
  store i32 %2, ptr %6, align 8, !tbaa !5
  br label %23

12:                                               ; preds = %5
  %13 = icmp slt i32 %7, %2
  br i1 %13, label %.lr.ph, label %23

.lr.ph:                                           ; preds = %12, %.lr.ph
  %14 = phi i32 [ %15, %.lr.ph ], [ %7, %12 ]
  %15 = shl nsw i32 %14, 1
  %16 = icmp slt i32 %15, %2
  br i1 %16, label %.lr.ph, label %17, !llvm.loop !12

17:                                               ; preds = %.lr.ph
  store i32 %15, ptr %6, align 8, !tbaa !5
  %18 = getelementptr inbounds i8, ptr %0, i64 4120
  %19 = load ptr, ptr %18, align 8, !tbaa !11
  %20 = sext i32 %15 to i64
  %21 = shl nsw i64 %20, 2
  %22 = tail call ptr @realloc(ptr noundef %19, i64 noundef %21) #6
  store ptr %22, ptr %18, align 8, !tbaa !11
  br label %23

23:                                               ; preds = %.thread, %17, %12
  %24 = getelementptr inbounds i8, ptr %1, i64 4
  %25 = icmp sgt i32 %2, 1
  br i1 %25, label %.lr.ph184.preheader, label %.loopexit

.lr.ph184.preheader:                              ; preds = %23
  %26 = load i32, ptr %24, align 4, !tbaa !14
  %wide.trip.count = zext nneg i32 %2 to i64
  %min.iters.check = icmp ult i32 %2, 10
  br i1 %min.iters.check, label %.lr.ph184.preheader230, label %vector.ph

.lr.ph184.preheader230:                           ; preds = %middle.block, %.lr.ph184.preheader
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph184.preheader ], [ %ind.end, %middle.block ]
  %.0149181.ph = phi i32 [ %26, %.lr.ph184.preheader ], [ %38, %middle.block ]
  %.0151180.ph = phi i32 [ %26, %.lr.ph184.preheader ], [ %39, %middle.block ]
  br label %.lr.ph184

vector.ph:                                        ; preds = %.lr.ph184.preheader
  %27 = add nsw i64 %wide.trip.count, -1
  %n.mod.vf = and i64 %27, 7
  %28 = icmp eq i64 %n.mod.vf, 0
  %29 = select i1 %28, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %27, %29
  %ind.end = add nsw i64 %n.vec, 1
  %minmax.ident.splatinsert = insertelement <4 x i32> poison, i32 %26, i64 0
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %minmax.ident.splatinsert224 = insertelement <4 x i32> poison, i32 %26, i64 0
  %minmax.ident.splat225 = shufflevector <4 x i32> %minmax.ident.splatinsert224, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %35, %vector.body ]
  %vec.phi221 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %36, %vector.body ]
  %vec.phi222 = phi <4 x i32> [ %minmax.ident.splat225, %vector.ph ], [ %33, %vector.body ]
  %vec.phi223 = phi <4 x i32> [ %minmax.ident.splat225, %vector.ph ], [ %34, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %30 = or disjoint i64 %index, 5
  %31 = getelementptr inbounds %struct.gdPoint, ptr %1, i64 %offset.idx, i32 1
  %32 = getelementptr inbounds %struct.gdPoint, ptr %1, i64 %30, i32 1
  %wide.vec = load <8 x i32>, ptr %31, align 4, !tbaa !14
  %wide.vec226 = load <8 x i32>, ptr %32, align 4, !tbaa !14
  %strided.vec = shufflevector <8 x i32> %wide.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec227 = shufflevector <8 x i32> %wide.vec226, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %33 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %strided.vec, <4 x i32> %vec.phi222)
  %34 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %strided.vec227, <4 x i32> %vec.phi223)
  %35 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %strided.vec, <4 x i32> %vec.phi)
  %36 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %strided.vec227, <4 x i32> %vec.phi221)
  %index.next = add nuw i64 %index, 8
  %37 = icmp eq i64 %index.next, %n.vec
  br i1 %37, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  %rdx.minmax = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %35, <4 x i32> %36)
  %38 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax)
  %rdx.minmax228 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %33, <4 x i32> %34)
  %39 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax228)
  br label %.lr.ph184.preheader230

.preheader177:                                    ; preds = %.lr.ph184
  %40 = icmp slt i32 %spec.select, %.1150
  br i1 %40, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.preheader177
  %41 = getelementptr inbounds i8, ptr %0, i64 4120
  %42 = zext nneg i32 %2 to i64
  %43 = getelementptr %struct.gdPoint, ptr %1, i64 %42
  %44 = getelementptr i8, ptr %43, i64 -8
  %45 = getelementptr i8, ptr %43, i64 -4
  br label %.preheader

.lr.ph184:                                        ; preds = %.lr.ph184.preheader230, %.lr.ph184
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph184 ], [ %indvars.iv.ph, %.lr.ph184.preheader230 ]
  %.0149181 = phi i32 [ %.1150, %.lr.ph184 ], [ %.0149181.ph, %.lr.ph184.preheader230 ]
  %.0151180 = phi i32 [ %spec.select, %.lr.ph184 ], [ %.0151180.ph, %.lr.ph184.preheader230 ]
  %46 = getelementptr inbounds %struct.gdPoint, ptr %1, i64 %indvars.iv, i32 1
  %47 = load i32, ptr %46, align 4, !tbaa !14
  %spec.select = tail call i32 @llvm.smin.i32(i32 %47, i32 %.0151180)
  %.1150 = tail call i32 @llvm.smax.i32(i32 %47, i32 %.0149181)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader177, label %.lr.ph184, !llvm.loop !19

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge199
  %.0153200 = phi i32 [ %129, %._crit_edge199 ], [ %spec.select, %.preheader.lr.ph ]
  %48 = load i32, ptr %45, align 4, !tbaa !14
  %49 = load i32, ptr %24, align 4, !tbaa !14
  %50 = icmp slt i32 %48, %49
  br i1 %50, label %56, label %51

51:                                               ; preds = %.preheader
  %52 = icmp sgt i32 %48, %49
  br i1 %52, label %56, label %53

53:                                               ; preds = %51
  %54 = load i32, ptr %44, align 4, !tbaa !20
  %55 = load i32, ptr %1, align 4, !tbaa !20
  tail call void @gdImageLine(ptr noundef %0, i32 noundef %54, i32 noundef %48, i32 noundef %55, i32 noundef %48, i32 noundef %3)
  br label %.peel.next.preheader

56:                                               ; preds = %51, %.preheader
  %.0132.in.peel = phi ptr [ %44, %.preheader ], [ %1, %51 ]
  %.0131.in.peel = phi ptr [ %1, %.preheader ], [ %44, %51 ]
  %.0130.peel = phi i32 [ %48, %.preheader ], [ %49, %51 ]
  %.0129.peel = phi i32 [ %49, %.preheader ], [ %48, %51 ]
  %.0128.peel = phi i32 [ -1, %.preheader ], [ 1, %51 ]
  %.not166.peel = icmp slt i32 %.0153200, %.0130.peel
  %.not167.peel = icmp sgt i32 %.0153200, %.0129.peel
  %or.cond172.peel = or i1 %.not166.peel, %.not167.peel
  br i1 %or.cond172.peel, label %.peel.next.preheader, label %57

57:                                               ; preds = %56
  %58 = sub nsw i32 %.0153200, %.0130.peel
  %59 = sitofp i32 %58 to double
  %.0131.peel = load i32, ptr %.0131.in.peel, align 4, !tbaa !20
  %.0132.peel = load i32, ptr %.0132.in.peel, align 4, !tbaa !20
  %60 = sub nsw i32 %.0131.peel, %.0132.peel
  %61 = sitofp i32 %60 to double
  %62 = fmul double %59, %61
  %63 = sub nsw i32 %.0129.peel, %.0130.peel
  %64 = sitofp i32 %63 to double
  %65 = fdiv double %62, %64
  %66 = sitofp i32 %.0132.peel to double
  %67 = fadd double %65, %66
  %68 = fptosi double %67 to i32
  br label %.peel.next.preheader

.peel.next.preheader:                             ; preds = %53, %56, %57
  %.0133191.ph = phi i32 [ 0, %57 ], [ 1, %56 ], [ 1, %53 ]
  %.0136190.ph = phi i32 [ %.0128.peel, %57 ], [ 0, %56 ], [ 0, %53 ]
  %.0140189.ph = phi i32 [ %68, %57 ], [ 0, %56 ], [ 0, %53 ]
  br label %.peel.next

.peel.next:                                       ; preds = %.peel.next.preheader, %118
  %.1192 = phi i32 [ %119, %118 ], [ 1, %.peel.next.preheader ]
  %.0133191 = phi i32 [ %.3, %118 ], [ %.0133191.ph, %.peel.next.preheader ]
  %.0136190 = phi i32 [ %.3139, %118 ], [ %.0136190.ph, %.peel.next.preheader ]
  %.0140189 = phi i32 [ %.3143, %118 ], [ %.0140189.ph, %.peel.next.preheader ]
  %.0145188 = phi i32 [ %.4, %118 ], [ 0, %.peel.next.preheader ]
  %.not175 = icmp eq i32 %.1192, %2
  %.1.171 = select i1 %.not175, i32 0, i32 %.1192
  %69 = zext nneg i32 %.1192 to i64
  %70 = getelementptr %struct.gdPoint, ptr %1, i64 %69
  %71 = getelementptr i8, ptr %70, i64 -8
  %72 = getelementptr i8, ptr %70, i64 -4
  %73 = load i32, ptr %72, align 4, !tbaa !14
  %74 = zext nneg i32 %.1.171 to i64
  %75 = getelementptr inbounds %struct.gdPoint, ptr %1, i64 %74
  %76 = getelementptr inbounds i8, ptr %75, i64 4
  %77 = load i32, ptr %76, align 4, !tbaa !14
  %78 = icmp slt i32 %73, %77
  br i1 %78, label %84, label %79

79:                                               ; preds = %.peel.next
  %80 = icmp sgt i32 %73, %77
  br i1 %80, label %84, label %81

81:                                               ; preds = %79
  %82 = load i32, ptr %71, align 4, !tbaa !20
  %83 = load i32, ptr %75, align 4, !tbaa !20
  tail call void @gdImageLine(ptr noundef %0, i32 noundef %82, i32 noundef %73, i32 noundef %83, i32 noundef %73, i32 noundef %3)
  br label %118

84:                                               ; preds = %79, %.peel.next
  %.0132.in = phi ptr [ %71, %.peel.next ], [ %75, %79 ]
  %.0131.in = phi ptr [ %75, %.peel.next ], [ %71, %79 ]
  %.0130 = phi i32 [ %73, %.peel.next ], [ %77, %79 ]
  %.0129 = phi i32 [ %77, %.peel.next ], [ %73, %79 ]
  %.0128 = phi i32 [ -1, %.peel.next ], [ 1, %79 ]
  %.not166 = icmp slt i32 %.0153200, %.0130
  %.not167 = icmp sgt i32 %.0153200, %.0129
  %or.cond172 = or i1 %.not166, %.not167
  br i1 %or.cond172, label %118, label %85

85:                                               ; preds = %84
  %.0132 = load i32, ptr %.0132.in, align 4, !tbaa !20
  %.0131 = load i32, ptr %.0131.in, align 4, !tbaa !20
  %86 = sub nsw i32 %.0153200, %.0130
  %87 = sitofp i32 %86 to double
  %88 = sub nsw i32 %.0131, %.0132
  %89 = sitofp i32 %88 to double
  %90 = fmul double %87, %89
  %91 = sub nsw i32 %.0129, %.0130
  %92 = sitofp i32 %91 to double
  %93 = fdiv double %90, %92
  %94 = sitofp i32 %.0132 to double
  %95 = fadd double %93, %94
  %96 = fptosi double %95 to i32
  %.not168 = icmp eq i32 %.0133191, 0
  br i1 %.not168, label %97, label %113

97:                                               ; preds = %85
  %98 = load i32, ptr %24, align 4, !tbaa !14
  %99 = icmp eq i32 %73, %98
  br i1 %99, label %100, label %110

100:                                              ; preds = %97
  %101 = load i32, ptr %71, align 4, !tbaa !20
  %102 = load i32, ptr %1, align 4, !tbaa !20
  %.not169 = icmp ne i32 %101, %102
  %103 = icmp eq i32 %.0128, %.0136190
  %or.cond173 = select i1 %.not169, i1 %103, i1 false
  br i1 %or.cond173, label %104, label %110

104:                                              ; preds = %100
  %105 = icmp slt i32 %.0140189, %96
  br i1 %105, label %106, label %118

106:                                              ; preds = %104
  %107 = load ptr, ptr %41, align 8, !tbaa !11
  %108 = sext i32 %.0145188 to i64
  %109 = getelementptr inbounds i32, ptr %107, i64 %108
  store i32 %96, ptr %109, align 4, !tbaa !21
  br label %118

110:                                              ; preds = %100, %97
  %111 = icmp eq i32 %.0140189, %96
  %112 = icmp eq i32 %.0128, %.0136190
  %or.cond174 = select i1 %111, i1 %112, i1 false
  br i1 %or.cond174, label %118, label %113

113:                                              ; preds = %85, %110
  %114 = load ptr, ptr %41, align 8, !tbaa !11
  %115 = add nsw i32 %.0145188, 1
  %116 = sext i32 %.0145188 to i64
  %117 = getelementptr inbounds i32, ptr %114, i64 %116
  store i32 %96, ptr %117, align 4, !tbaa !21
  br label %118

118:                                              ; preds = %104, %106, %110, %113, %84, %81
  %.4 = phi i32 [ %.0145188, %81 ], [ %.0145188, %84 ], [ %.0145188, %104 ], [ %.0145188, %106 ], [ %.0145188, %110 ], [ %115, %113 ]
  %.3143 = phi i32 [ %.0140189, %81 ], [ %.0140189, %84 ], [ %.0140189, %104 ], [ %.0140189, %106 ], [ %.0140189, %110 ], [ %96, %113 ]
  %.3139 = phi i32 [ %.0136190, %81 ], [ %.0136190, %84 ], [ %.0136190, %104 ], [ %.0136190, %106 ], [ %.0136190, %110 ], [ %.0128, %113 ]
  %.3 = phi i32 [ %.0133191, %81 ], [ %.0133191, %84 ], [ 0, %104 ], [ 0, %106 ], [ 0, %110 ], [ 0, %113 ]
  %119 = add nuw i32 %.1192, 1
  %exitcond204.not = icmp eq i32 %.1192, %2
  br i1 %exitcond204.not, label %._crit_edge194, label %.peel.next, !llvm.loop !22

._crit_edge194:                                   ; preds = %118
  %120 = load ptr, ptr %41, align 8, !tbaa !11
  %121 = sext i32 %.4 to i64
  tail call void @qsort(ptr noundef %120, i64 noundef %121, i64 noundef 4, ptr noundef nonnull @gdCompareInt) #7
  %122 = icmp sgt i32 %.4, 1
  br i1 %122, label %.lr.ph198.preheader, label %._crit_edge199

.lr.ph198.preheader:                              ; preds = %._crit_edge194
  %123 = add nsw i32 %.4, -1
  %wide.trip.count209 = zext nneg i32 %123 to i64
  br label %.lr.ph198

.lr.ph198:                                        ; preds = %.lr.ph198.preheader, %.lr.ph198
  %indvars.iv206 = phi i64 [ 0, %.lr.ph198.preheader ], [ %indvars.iv.next207, %.lr.ph198 ]
  %124 = load ptr, ptr %41, align 8, !tbaa !11
  %125 = getelementptr inbounds i32, ptr %124, i64 %indvars.iv206
  %126 = load i32, ptr %125, align 4, !tbaa !21
  %indvars.iv.next207 = add nuw nsw i64 %indvars.iv206, 1
  %127 = getelementptr inbounds i32, ptr %124, i64 %indvars.iv.next207
  %128 = load i32, ptr %127, align 4, !tbaa !21
  tail call void @gdImageLine(ptr noundef nonnull %0, i32 noundef %126, i32 noundef %.0153200, i32 noundef %128, i32 noundef %.0153200, i32 noundef %3)
  %exitcond210.not = icmp eq i64 %indvars.iv.next207, %wide.trip.count209
  br i1 %exitcond210.not, label %._crit_edge199, label %.lr.ph198, !llvm.loop !24

._crit_edge199:                                   ; preds = %.lr.ph198, %._crit_edge194
  %129 = add i32 %.0153200, 1
  %exitcond211.not = icmp eq i32 %129, %.1150
  br i1 %exitcond211.not, label %.loopexit, label %.preheader, !llvm.loop !25

.loopexit:                                        ; preds = %._crit_edge199, %23, %.preheader177, %4
  ret void
}

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nofree
declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #3

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32>) #4

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 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 = { mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { nofree "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind allocsize(0) }
attributes #6 = { nounwind allocsize(1) }
attributes #7 = { 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 4128}
!6 = !{!"gdImageStruct", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !8, i64 20, !8, i64 1044, !8, i64 2068, !8, i64 3092, !10, i64 4116, !7, i64 4120, !10, i64 4128, !7, i64 4136, !7, i64 4144, !8, i64 4152, !8, i64 5176, !10, i64 6200, !10, i64 6204, !7, i64 6208, !10, i64 6216, !10, i64 6220, !10, i64 6224, !10, i64 6228, !10, i64 6232}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !7, i64 4120}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !10, i64 4}
!15 = !{!"", !10, i64 0, !10, i64 4}
!16 = distinct !{!16, !13, !17, !18}
!17 = !{!"llvm.loop.isvectorized", i32 1}
!18 = !{!"llvm.loop.unroll.runtime.disable"}
!19 = distinct !{!19, !13, !18, !17}
!20 = !{!15, !10, i64 0}
!21 = !{!10, !10, i64 0}
!22 = distinct !{!22, !13, !23}
!23 = !{!"llvm.loop.peeled.count", i32 1}
!24 = distinct !{!24, !13}
!25 = distinct !{!25, !13}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass