; LLVM IR from BrunoLevy/learn-fpga :: LiteX/software/Tagl/Lib (peng_24)

; 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"

%class.GPolygon = type { i32, [100 x ptr] }
%class.Mug = type { %class.GVertex, %class.GVertex }
%class.GVertex = type { %class.GVertexAttributes, i32, i32, %class.GVector, %class.GVector, %class.GVector, %class.GVector, %class.GVector, %class.Flags }
%class.GVertexAttributes = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%class.GVector = type { [4 x %class.GCoord] }
%class.GCoord = type { float }
%class.Flags = type { i32 }
%struct.PixelValue = type { i8, i8, i8 }

@_ZN13PolygonEngine3_p1E = external global %class.GPolygon, align 8
@_ZN13PolygonEngine4_mugE = external global [1024 x %class.Mug], align 16
@_ZN16GraphicComponent10_graph_memE = external global ptr, align 8
@_ZN16GraphicComponent15_bytes_per_lineE = external global i32, align 4
@_ZN16GraphicComponent6_z_memE = external global ptr, align 8
@_ZN16GraphicComponent6_widthE = external global i32, align 4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16PolygonEngine_2414FillPoly_RGB_ZEP17GVertexAttributes(ptr noundef %0) #0 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %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
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 1000, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 -1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  %56 = call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %57 = icmp slt i32 %56, 2
  br i1 %57, label %58, label %59

58:                                               ; preds = %1
  store i32 1, ptr %48, align 4
  br label %949

59:                                               ; preds = %1
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %60

60:                                               ; preds = %154, %59
  %61 = load i32, ptr %5, align 4, !tbaa !9
  %62 = call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %63 = icmp slt i32 %61, %62
  br i1 %63, label %64, label %157

64:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  %65 = load i32, ptr %5, align 4, !tbaa !9
  %66 = add nsw i32 %65, 1
  store i32 %66, ptr %49, align 4, !tbaa !9
  %67 = load i32, ptr %49, align 4, !tbaa !9
  %68 = call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %69 = icmp eq i32 %67, %68
  br i1 %69, label %70, label %71

70:                                               ; preds = %64
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %71

71:                                               ; preds = %70, %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %72 = load i32, ptr %49, align 4, !tbaa !9
  %73 = add nsw i32 %72, 1
  store i32 %73, ptr %50, align 4, !tbaa !9
  %74 = load i32, ptr %50, align 4, !tbaa !9
  %75 = call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %76 = icmp eq i32 %74, %75
  br i1 %76, label %77, label %78

77:                                               ; preds = %71
  store i32 0, ptr %50, align 4, !tbaa !9
  br label %78

78:                                               ; preds = %77, %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #4
  %79 = load i32, ptr %5, align 4, !tbaa !9
  %80 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %79)
  %81 = getelementptr inbounds %class.GVertex, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !11
  %83 = load i32, ptr %49, align 4, !tbaa !9
  %84 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %83)
  %85 = getelementptr inbounds %class.GVertex, ptr %84, i32 0, i32 1
  %86 = load i32, ptr %85, align 4, !tbaa !11
  %87 = sub nsw i32 %82, %86
  store i32 %87, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  %88 = load i32, ptr %5, align 4, !tbaa !9
  %89 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %88)
  %90 = getelementptr inbounds %class.GVertex, ptr %89, i32 0, i32 2
  %91 = load i32, ptr %90, align 4, !tbaa !16
  %92 = load i32, ptr %49, align 4, !tbaa !9
  %93 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %92)
  %94 = getelementptr inbounds %class.GVertex, ptr %93, i32 0, i32 2
  %95 = load i32, ptr %94, align 4, !tbaa !16
  %96 = sub nsw i32 %91, %95
  store i32 %96, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %97 = load i32, ptr %50, align 4, !tbaa !9
  %98 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %97)
  %99 = getelementptr inbounds %class.GVertex, ptr %98, i32 0, i32 1
  %100 = load i32, ptr %99, align 4, !tbaa !11
  %101 = load i32, ptr %49, align 4, !tbaa !9
  %102 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %101)
  %103 = getelementptr inbounds %class.GVertex, ptr %102, i32 0, i32 1
  %104 = load i32, ptr %103, align 4, !tbaa !11
  %105 = sub nsw i32 %100, %104
  store i32 %105, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  %106 = load i32, ptr %50, align 4, !tbaa !9
  %107 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %106)
  %108 = getelementptr inbounds %class.GVertex, ptr %107, i32 0, i32 2
  %109 = load i32, ptr %108, align 4, !tbaa !16
  %110 = load i32, ptr %49, align 4, !tbaa !9
  %111 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %110)
  %112 = getelementptr inbounds %class.GVertex, ptr %111, i32 0, i32 2
  %113 = load i32, ptr %112, align 4, !tbaa !16
  %114 = sub nsw i32 %109, %113
  store i32 %114, ptr %54, align 4, !tbaa !9
  %115 = load i32, ptr %51, align 4, !tbaa !9
  %116 = load i32, ptr %54, align 4, !tbaa !9
  %117 = mul nsw i32 %115, %116
  %118 = load i32, ptr %53, align 4, !tbaa !9
  %119 = load i32, ptr %52, align 4, !tbaa !9
  %120 = mul nsw i32 %118, %119
  %121 = sub nsw i32 %117, %120
  %122 = load i32, ptr %10, align 4, !tbaa !9
  %123 = add nsw i32 %122, %121
  store i32 %123, ptr %10, align 4, !tbaa !9
  %124 = load i32, ptr %3, align 4, !tbaa !9
  %125 = load i32, ptr %5, align 4, !tbaa !9
  %126 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %125)
  %127 = getelementptr inbounds %class.GVertex, ptr %126, i32 0, i32 2
  %128 = load i32, ptr %127, align 4, !tbaa !16
  %129 = icmp slt i32 %124, %128
  br i1 %129, label %130, label %132

130:                                              ; preds = %78
  %131 = load i32, ptr %3, align 4, !tbaa !9
  br label %137

132:                                              ; preds = %78
  %133 = load i32, ptr %5, align 4, !tbaa !9
  %134 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %133)
  %135 = getelementptr inbounds %class.GVertex, ptr %134, i32 0, i32 2
  %136 = load i32, ptr %135, align 4, !tbaa !16
  br label %137

137:                                              ; preds = %132, %130
  %138 = phi i32 [ %131, %130 ], [ %136, %132 ]
  store i32 %138, ptr %3, align 4, !tbaa !9
  %139 = load i32, ptr %4, align 4, !tbaa !9
  %140 = load i32, ptr %5, align 4, !tbaa !9
  %141 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %140)
  %142 = getelementptr inbounds %class.GVertex, ptr %141, i32 0, i32 2
  %143 = load i32, ptr %142, align 4, !tbaa !16
  %144 = icmp sgt i32 %139, %143
  br i1 %144, label %145, label %147

145:                                              ; preds = %137
  %146 = load i32, ptr %4, align 4, !tbaa !9
  br label %152

147:                                              ; preds = %137
  %148 = load i32, ptr %5, align 4, !tbaa !9
  %149 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %148)
  %150 = getelementptr inbounds %class.GVertex, ptr %149, i32 0, i32 2
  %151 = load i32, ptr %150, align 4, !tbaa !16
  br label %152

152:                                              ; preds = %147, %145
  %153 = phi i32 [ %146, %145 ], [ %151, %147 ]
  store i32 %153, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  br label %154

154:                                              ; preds = %152
  %155 = load i32, ptr %5, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %5, align 4, !tbaa !9
  br label %60, !llvm.loop !17

157:                                              ; preds = %60
  %158 = load i32, ptr %10, align 4, !tbaa !9
  %159 = icmp sgt i32 %158, 0
  %160 = zext i1 %159 to i32
  store i32 %160, ptr %10, align 4, !tbaa !9
  %161 = load i32, ptr %3, align 4, !tbaa !9
  %162 = load i32, ptr %4, align 4, !tbaa !9
  %163 = icmp eq i32 %161, %162
  br i1 %163, label %164, label %165

164:                                              ; preds = %157
  store i32 1, ptr %48, align 4
  br label %949

165:                                              ; preds = %157
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %166

166:                                              ; preds = %661, %165
  %167 = load i32, ptr %5, align 4, !tbaa !9
  %168 = call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %169 = icmp slt i32 %167, %168
  br i1 %169, label %170, label %664

170:                                              ; preds = %166
  %171 = load i32, ptr %5, align 4, !tbaa !9
  %172 = add nsw i32 %171, 1
  store i32 %172, ptr %6, align 4, !tbaa !9
  %173 = load i32, ptr %6, align 4, !tbaa !9
  %174 = call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %175 = icmp eq i32 %173, %174
  br i1 %175, label %176, label %177

176:                                              ; preds = %170
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %177

177:                                              ; preds = %176, %170
  %178 = load i32, ptr %5, align 4, !tbaa !9
  %179 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %178)
  %180 = getelementptr inbounds %class.GVertex, ptr %179, i32 0, i32 2
  %181 = load i32, ptr %180, align 4, !tbaa !16
  %182 = load i32, ptr %6, align 4, !tbaa !9
  %183 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %182)
  %184 = getelementptr inbounds %class.GVertex, ptr %183, i32 0, i32 2
  %185 = load i32, ptr %184, align 4, !tbaa !16
  %186 = icmp eq i32 %181, %185
  br i1 %186, label %187, label %188

187:                                              ; preds = %177
  br label %661

188:                                              ; preds = %177
  %189 = load i32, ptr %5, align 4, !tbaa !9
  %190 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %189)
  %191 = getelementptr inbounds %class.GVertex, ptr %190, i32 0, i32 2
  %192 = load i32, ptr %191, align 4, !tbaa !16
  store i32 %192, ptr %14, align 4, !tbaa !9
  %193 = load i32, ptr %6, align 4, !tbaa !9
  %194 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %193)
  %195 = getelementptr inbounds %class.GVertex, ptr %194, i32 0, i32 2
  %196 = load i32, ptr %195, align 4, !tbaa !16
  store i32 %196, ptr %15, align 4, !tbaa !9
  %197 = load i32, ptr %15, align 4, !tbaa !9
  %198 = load i32, ptr %14, align 4, !tbaa !9
  %199 = sub nsw i32 %197, %198
  store i32 %199, ptr %16, align 4, !tbaa !9
  %200 = load i32, ptr %16, align 4, !tbaa !9
  %201 = icmp sgt i32 %200, 0
  br i1 %201, label %202, label %203

202:                                              ; preds = %188
  br label %208

203:                                              ; preds = %188
  %204 = load i32, ptr %16, align 4, !tbaa !9
  %205 = icmp ne i32 %204, 0
  %206 = zext i1 %205 to i64
  %207 = select i1 %205, i32 -1, i32 0
  br label %208

208:                                              ; preds = %203, %202
  %209 = phi i32 [ 1, %202 ], [ %207, %203 ]
  store i32 %209, ptr %17, align 4, !tbaa !9
  %210 = load i32, ptr %17, align 4, !tbaa !9
  %211 = load i32, ptr %16, align 4, !tbaa !9
  %212 = mul nsw i32 %211, %210
  store i32 %212, ptr %16, align 4, !tbaa !9
  %213 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %213, ptr %13, align 4, !tbaa !9
  %214 = load i32, ptr %5, align 4, !tbaa !9
  %215 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %214)
  %216 = getelementptr inbounds %class.GVertex, ptr %215, i32 0, i32 1
  %217 = load i32, ptr %216, align 4, !tbaa !11
  store i32 %217, ptr %19, align 4, !tbaa !9
  %218 = load i32, ptr %6, align 4, !tbaa !9
  %219 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %218)
  %220 = getelementptr inbounds %class.GVertex, ptr %219, i32 0, i32 1
  %221 = load i32, ptr %220, align 4, !tbaa !11
  store i32 %221, ptr %20, align 4, !tbaa !9
  %222 = load i32, ptr %20, align 4, !tbaa !9
  %223 = load i32, ptr %19, align 4, !tbaa !9
  %224 = sub nsw i32 %222, %223
  store i32 %224, ptr %21, align 4, !tbaa !9
  %225 = load i32, ptr %21, align 4, !tbaa !9
  %226 = icmp sgt i32 %225, 0
  br i1 %226, label %227, label %228

227:                                              ; preds = %208
  br label %233

228:                                              ; preds = %208
  %229 = load i32, ptr %21, align 4, !tbaa !9
  %230 = icmp ne i32 %229, 0
  %231 = zext i1 %230 to i64
  %232 = select i1 %230, i32 -1, i32 0
  br label %233

233:                                              ; preds = %228, %227
  %234 = phi i32 [ 1, %227 ], [ %232, %228 ]
  store i32 %234, ptr %22, align 4, !tbaa !9
  %235 = load i32, ptr %22, align 4, !tbaa !9
  %236 = load i32, ptr %21, align 4, !tbaa !9
  %237 = mul nsw i32 %236, %235
  store i32 %237, ptr %21, align 4, !tbaa !9
  %238 = load i32, ptr %21, align 4, !tbaa !9
  %239 = shl i32 %238, 1
  %240 = load i32, ptr %16, align 4, !tbaa !9
  %241 = sub nsw i32 %239, %240
  store i32 %241, ptr %23, align 4, !tbaa !9
  %242 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %242, ptr %18, align 4, !tbaa !9
  %243 = load i32, ptr %5, align 4, !tbaa !9
  %244 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %243)
  %245 = getelementptr inbounds %class.GVertexAttributes, ptr %244, i32 0, i32 2
  %246 = load i32, ptr %245, align 4, !tbaa !19
  store i32 %246, ptr %25, align 4, !tbaa !9
  %247 = load i32, ptr %6, align 4, !tbaa !9
  %248 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %247)
  %249 = getelementptr inbounds %class.GVertexAttributes, ptr %248, i32 0, i32 2
  %250 = load i32, ptr %249, align 4, !tbaa !19
  store i32 %250, ptr %26, align 4, !tbaa !9
  %251 = load i32, ptr %5, align 4, !tbaa !9
  %252 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %251)
  %253 = getelementptr inbounds %class.GVertexAttributes, ptr %252, i32 0, i32 3
  %254 = load i32, ptr %253, align 4, !tbaa !20
  store i32 %254, ptr %31, align 4, !tbaa !9
  %255 = load i32, ptr %6, align 4, !tbaa !9
  %256 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %255)
  %257 = getelementptr inbounds %class.GVertexAttributes, ptr %256, i32 0, i32 3
  %258 = load i32, ptr %257, align 4, !tbaa !20
  store i32 %258, ptr %32, align 4, !tbaa !9
  %259 = load i32, ptr %5, align 4, !tbaa !9
  %260 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %259)
  %261 = getelementptr inbounds %class.GVertexAttributes, ptr %260, i32 0, i32 4
  %262 = load i32, ptr %261, align 4, !tbaa !21
  store i32 %262, ptr %37, align 4, !tbaa !9
  %263 = load i32, ptr %6, align 4, !tbaa !9
  %264 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %263)
  %265 = getelementptr inbounds %class.GVertexAttributes, ptr %264, i32 0, i32 4
  %266 = load i32, ptr %265, align 4, !tbaa !21
  store i32 %266, ptr %38, align 4, !tbaa !9
  %267 = load i32, ptr %25, align 4, !tbaa !9
  %268 = icmp slt i32 %267, 255
  br i1 %268, label %269, label %271

269:                                              ; preds = %233
  %270 = load i32, ptr %25, align 4, !tbaa !9
  br label %272

271:                                              ; preds = %233
  br label %272

272:                                              ; preds = %271, %269
  %273 = phi i32 [ %270, %269 ], [ 255, %271 ]
  %274 = ashr i32 %273, 0
  store i32 %274, ptr %25, align 4, !tbaa !9
  %275 = load i32, ptr %26, align 4, !tbaa !9
  %276 = icmp slt i32 %275, 255
  br i1 %276, label %277, label %279

277:                                              ; preds = %272
  %278 = load i32, ptr %26, align 4, !tbaa !9
  br label %280

279:                                              ; preds = %272
  br label %280

280:                                              ; preds = %279, %277
  %281 = phi i32 [ %278, %277 ], [ 255, %279 ]
  %282 = ashr i32 %281, 0
  store i32 %282, ptr %26, align 4, !tbaa !9
  %283 = load i32, ptr %31, align 4, !tbaa !9
  %284 = icmp slt i32 %283, 255
  br i1 %284, label %285, label %287

285:                                              ; preds = %280
  %286 = load i32, ptr %31, align 4, !tbaa !9
  br label %288

287:                                              ; preds = %280
  br label %288

288:                                              ; preds = %287, %285
  %289 = phi i32 [ %286, %285 ], [ 255, %287 ]
  %290 = ashr i32 %289, 0
  store i32 %290, ptr %31, align 4, !tbaa !9
  %291 = load i32, ptr %32, align 4, !tbaa !9
  %292 = icmp slt i32 %291, 255
  br i1 %292, label %293, label %295

293:                                              ; preds = %288
  %294 = load i32, ptr %32, align 4, !tbaa !9
  br label %296

295:                                              ; preds = %288
  br label %296

296:                                              ; preds = %295, %293
  %297 = phi i32 [ %294, %293 ], [ 255, %295 ]
  %298 = ashr i32 %297, 0
  store i32 %298, ptr %32, align 4, !tbaa !9
  %299 = load i32, ptr %37, align 4, !tbaa !9
  %300 = icmp slt i32 %299, 255
  br i1 %300, label %301, label %303

301:                                              ; preds = %296
  %302 = load i32, ptr %37, align 4, !tbaa !9
  br label %304

303:                                              ; preds = %296
  br label %304

304:                                              ; preds = %303, %301
  %305 = phi i32 [ %302, %301 ], [ 255, %303 ]
  %306 = ashr i32 %305, 0
  store i32 %306, ptr %37, align 4, !tbaa !9
  %307 = load i32, ptr %38, align 4, !tbaa !9
  %308 = icmp slt i32 %307, 255
  br i1 %308, label %309, label %311

309:                                              ; preds = %304
  %310 = load i32, ptr %38, align 4, !tbaa !9
  br label %312

311:                                              ; preds = %304
  br label %312

312:                                              ; preds = %311, %309
  %313 = phi i32 [ %310, %309 ], [ 255, %311 ]
  %314 = ashr i32 %313, 0
  store i32 %314, ptr %38, align 4, !tbaa !9
  %315 = load i32, ptr %26, align 4, !tbaa !9
  %316 = load i32, ptr %25, align 4, !tbaa !9
  %317 = sub nsw i32 %315, %316
  store i32 %317, ptr %27, align 4, !tbaa !9
  %318 = load i32, ptr %27, align 4, !tbaa !9
  %319 = icmp sgt i32 %318, 0
  br i1 %319, label %320, label %321

320:                                              ; preds = %312
  br label %326

321:                                              ; preds = %312
  %322 = load i32, ptr %27, align 4, !tbaa !9
  %323 = icmp ne i32 %322, 0
  %324 = zext i1 %323 to i64
  %325 = select i1 %323, i32 -1, i32 0
  br label %326

326:                                              ; preds = %321, %320
  %327 = phi i32 [ 1, %320 ], [ %325, %321 ]
  store i32 %327, ptr %28, align 4, !tbaa !9
  %328 = load i32, ptr %28, align 4, !tbaa !9
  %329 = load i32, ptr %27, align 4, !tbaa !9
  %330 = mul nsw i32 %329, %328
  store i32 %330, ptr %27, align 4, !tbaa !9
  %331 = load i32, ptr %27, align 4, !tbaa !9
  %332 = shl i32 %331, 1
  %333 = load i32, ptr %16, align 4, !tbaa !9
  %334 = sub nsw i32 %332, %333
  store i32 %334, ptr %29, align 4, !tbaa !9
  %335 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %335, ptr %24, align 4, !tbaa !9
  %336 = load i32, ptr %32, align 4, !tbaa !9
  %337 = load i32, ptr %31, align 4, !tbaa !9
  %338 = sub nsw i32 %336, %337
  store i32 %338, ptr %33, align 4, !tbaa !9
  %339 = load i32, ptr %33, align 4, !tbaa !9
  %340 = icmp sgt i32 %339, 0
  br i1 %340, label %341, label %342

341:                                              ; preds = %326
  br label %347

342:                                              ; preds = %326
  %343 = load i32, ptr %33, align 4, !tbaa !9
  %344 = icmp ne i32 %343, 0
  %345 = zext i1 %344 to i64
  %346 = select i1 %344, i32 -1, i32 0
  br label %347

347:                                              ; preds = %342, %341
  %348 = phi i32 [ 1, %341 ], [ %346, %342 ]
  store i32 %348, ptr %34, align 4, !tbaa !9
  %349 = load i32, ptr %34, align 4, !tbaa !9
  %350 = load i32, ptr %33, align 4, !tbaa !9
  %351 = mul nsw i32 %350, %349
  store i32 %351, ptr %33, align 4, !tbaa !9
  %352 = load i32, ptr %33, align 4, !tbaa !9
  %353 = shl i32 %352, 1
  %354 = load i32, ptr %16, align 4, !tbaa !9
  %355 = sub nsw i32 %353, %354
  store i32 %355, ptr %35, align 4, !tbaa !9
  %356 = load i32, ptr %31, align 4, !tbaa !9
  store i32 %356, ptr %30, align 4, !tbaa !9
  %357 = load i32, ptr %38, align 4, !tbaa !9
  %358 = load i32, ptr %37, align 4, !tbaa !9
  %359 = sub nsw i32 %357, %358
  store i32 %359, ptr %39, align 4, !tbaa !9
  %360 = load i32, ptr %39, align 4, !tbaa !9
  %361 = icmp sgt i32 %360, 0
  br i1 %361, label %362, label %363

362:                                              ; preds = %347
  br label %368

363:                                              ; preds = %347
  %364 = load i32, ptr %39, align 4, !tbaa !9
  %365 = icmp ne i32 %364, 0
  %366 = zext i1 %365 to i64
  %367 = select i1 %365, i32 -1, i32 0
  br label %368

368:                                              ; preds = %363, %362
  %369 = phi i32 [ 1, %362 ], [ %367, %363 ]
  store i32 %369, ptr %40, align 4, !tbaa !9
  %370 = load i32, ptr %40, align 4, !tbaa !9
  %371 = load i32, ptr %39, align 4, !tbaa !9
  %372 = mul nsw i32 %371, %370
  store i32 %372, ptr %39, align 4, !tbaa !9
  %373 = load i32, ptr %39, align 4, !tbaa !9
  %374 = shl i32 %373, 1
  %375 = load i32, ptr %16, align 4, !tbaa !9
  %376 = sub nsw i32 %374, %375
  store i32 %376, ptr %41, align 4, !tbaa !9
  %377 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %377, ptr %36, align 4, !tbaa !9
  %378 = load i32, ptr %5, align 4, !tbaa !9
  %379 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %378)
  %380 = getelementptr inbounds %class.GVertexAttributes, ptr %379, i32 0, i32 0
  %381 = load i32, ptr %380, align 4, !tbaa !22
  store i32 %381, ptr %43, align 4, !tbaa !9
  %382 = load i32, ptr %6, align 4, !tbaa !9
  %383 = call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %382)
  %384 = getelementptr inbounds %class.GVertexAttributes, ptr %383, i32 0, i32 0
  %385 = load i32, ptr %384, align 4, !tbaa !22
  store i32 %385, ptr %44, align 4, !tbaa !9
  %386 = load i32, ptr %44, align 4, !tbaa !9
  %387 = load i32, ptr %43, align 4, !tbaa !9
  %388 = sub nsw i32 %386, %387
  store i32 %388, ptr %45, align 4, !tbaa !9
  %389 = load i32, ptr %45, align 4, !tbaa !9
  %390 = icmp sgt i32 %389, 0
  br i1 %390, label %391, label %392

391:                                              ; preds = %368
  br label %397

392:                                              ; preds = %368
  %393 = load i32, ptr %45, align 4, !tbaa !9
  %394 = icmp ne i32 %393, 0
  %395 = zext i1 %394 to i64
  %396 = select i1 %394, i32 -1, i32 0
  br label %397

397:                                              ; preds = %392, %391
  %398 = phi i32 [ 1, %391 ], [ %396, %392 ]
  store i32 %398, ptr %46, align 4, !tbaa !9
  %399 = load i32, ptr %46, align 4, !tbaa !9
  %400 = load i32, ptr %45, align 4, !tbaa !9
  %401 = mul nsw i32 %400, %399
  store i32 %401, ptr %45, align 4, !tbaa !9
  %402 = load i32, ptr %45, align 4, !tbaa !9
  %403 = shl i32 %402, 1
  %404 = load i32, ptr %16, align 4, !tbaa !9
  %405 = sub nsw i32 %403, %404
  store i32 %405, ptr %47, align 4, !tbaa !9
  %406 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %406, ptr %42, align 4, !tbaa !9
  %407 = load i32, ptr %10, align 4, !tbaa !9
  %408 = load i32, ptr %15, align 4, !tbaa !9
  %409 = load i32, ptr %14, align 4, !tbaa !9
  %410 = icmp sgt i32 %408, %409
  %411 = zext i1 %410 to i32
  %412 = xor i32 %407, %411
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %414, label %537

414:                                              ; preds = %397
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %533, %414
  %416 = load i32, ptr %7, align 4, !tbaa !9
  %417 = load i32, ptr %16, align 4, !tbaa !9
  %418 = icmp sle i32 %416, %417
  br i1 %418, label %419, label %536

419:                                              ; preds = %415
  %420 = load i32, ptr %18, align 4, !tbaa !9
  %421 = load i32, ptr %13, align 4, !tbaa !9
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %422
  %424 = getelementptr inbounds %class.Mug, ptr %423, i32 0, i32 1
  %425 = getelementptr inbounds %class.GVertex, ptr %424, i32 0, i32 1
  store i32 %420, ptr %425, align 4, !tbaa !23
  %426 = load i32, ptr %24, align 4, !tbaa !9
  %427 = load i32, ptr %13, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %428
  %430 = getelementptr inbounds %class.Mug, ptr %429, i32 0, i32 1
  %431 = getelementptr inbounds %class.GVertexAttributes, ptr %430, i32 0, i32 2
  store i32 %426, ptr %431, align 8, !tbaa !19
  %432 = load i32, ptr %30, align 4, !tbaa !9
  %433 = load i32, ptr %13, align 4, !tbaa !9
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %434
  %436 = getelementptr inbounds %class.Mug, ptr %435, i32 0, i32 1
  %437 = getelementptr inbounds %class.GVertexAttributes, ptr %436, i32 0, i32 3
  store i32 %432, ptr %437, align 4, !tbaa !20
  %438 = load i32, ptr %36, align 4, !tbaa !9
  %439 = load i32, ptr %13, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %440
  %442 = getelementptr inbounds %class.Mug, ptr %441, i32 0, i32 1
  %443 = getelementptr inbounds %class.GVertexAttributes, ptr %442, i32 0, i32 4
  store i32 %438, ptr %443, align 16, !tbaa !21
  %444 = load i32, ptr %42, align 4, !tbaa !9
  %445 = load i32, ptr %13, align 4, !tbaa !9
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %446
  %448 = getelementptr inbounds %class.Mug, ptr %447, i32 0, i32 1
  %449 = getelementptr inbounds %class.GVertexAttributes, ptr %448, i32 0, i32 0
  store i32 %444, ptr %449, align 16, !tbaa !22
  %450 = load i32, ptr %17, align 4, !tbaa !9
  %451 = load i32, ptr %13, align 4, !tbaa !9
  %452 = add nsw i32 %451, %450
  store i32 %452, ptr %13, align 4, !tbaa !9
  br label %453

453:                                              ; preds = %456, %419
  %454 = load i32, ptr %23, align 4, !tbaa !9
  %455 = icmp sge i32 %454, 0
  br i1 %455, label %456, label %464

456:                                              ; preds = %453
  %457 = load i32, ptr %22, align 4, !tbaa !9
  %458 = load i32, ptr %18, align 4, !tbaa !9
  %459 = add nsw i32 %458, %457
  store i32 %459, ptr %18, align 4, !tbaa !9
  %460 = load i32, ptr %16, align 4, !tbaa !9
  %461 = shl i32 %460, 1
  %462 = load i32, ptr %23, align 4, !tbaa !9
  %463 = sub nsw i32 %462, %461
  store i32 %463, ptr %23, align 4, !tbaa !9
  br label %453, !llvm.loop !25

464:                                              ; preds = %453
  %465 = load i32, ptr %21, align 4, !tbaa !9
  %466 = shl i32 %465, 1
  %467 = load i32, ptr %23, align 4, !tbaa !9
  %468 = add nsw i32 %467, %466
  store i32 %468, ptr %23, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %472, %464
  %470 = load i32, ptr %29, align 4, !tbaa !9
  %471 = icmp sge i32 %470, 0
  br i1 %471, label %472, label %480

472:                                              ; preds = %469
  %473 = load i32, ptr %28, align 4, !tbaa !9
  %474 = load i32, ptr %24, align 4, !tbaa !9
  %475 = add nsw i32 %474, %473
  store i32 %475, ptr %24, align 4, !tbaa !9
  %476 = load i32, ptr %16, align 4, !tbaa !9
  %477 = shl i32 %476, 1
  %478 = load i32, ptr %29, align 4, !tbaa !9
  %479 = sub nsw i32 %478, %477
  store i32 %479, ptr %29, align 4, !tbaa !9
  br label %469, !llvm.loop !26

480:                                              ; preds = %469
  %481 = load i32, ptr %27, align 4, !tbaa !9
  %482 = shl i32 %481, 1
  %483 = load i32, ptr %29, align 4, !tbaa !9
  %484 = add nsw i32 %483, %482
  store i32 %484, ptr %29, align 4, !tbaa !9
  br label %485

485:                                              ; preds = %488, %480
  %486 = load i32, ptr %35, align 4, !tbaa !9
  %487 = icmp sge i32 %486, 0
  br i1 %487, label %488, label %496

488:                                              ; preds = %485
  %489 = load i32, ptr %34, align 4, !tbaa !9
  %490 = load i32, ptr %30, align 4, !tbaa !9
  %491 = add nsw i32 %490, %489
  store i32 %491, ptr %30, align 4, !tbaa !9
  %492 = load i32, ptr %16, align 4, !tbaa !9
  %493 = shl i32 %492, 1
  %494 = load i32, ptr %35, align 4, !tbaa !9
  %495 = sub nsw i32 %494, %493
  store i32 %495, ptr %35, align 4, !tbaa !9
  br label %485, !llvm.loop !27

496:                                              ; preds = %485
  %497 = load i32, ptr %33, align 4, !tbaa !9
  %498 = shl i32 %497, 1
  %499 = load i32, ptr %35, align 4, !tbaa !9
  %500 = add nsw i32 %499, %498
  store i32 %500, ptr %35, align 4, !tbaa !9
  br label %501

501:                                              ; preds = %504, %496
  %502 = load i32, ptr %41, align 4, !tbaa !9
  %503 = icmp sge i32 %502, 0
  br i1 %503, label %504, label %512

504:                                              ; preds = %501
  %505 = load i32, ptr %40, align 4, !tbaa !9
  %506 = load i32, ptr %36, align 4, !tbaa !9
  %507 = add nsw i32 %506, %505
  store i32 %507, ptr %36, align 4, !tbaa !9
  %508 = load i32, ptr %16, align 4, !tbaa !9
  %509 = shl i32 %508, 1
  %510 = load i32, ptr %41, align 4, !tbaa !9
  %511 = sub nsw i32 %510, %509
  store i32 %511, ptr %41, align 4, !tbaa !9
  br label %501, !llvm.loop !28

512:                                              ; preds = %501
  %513 = load i32, ptr %39, align 4, !tbaa !9
  %514 = shl i32 %513, 1
  %515 = load i32, ptr %41, align 4, !tbaa !9
  %516 = add nsw i32 %515, %514
  store i32 %516, ptr %41, align 4, !tbaa !9
  br label %517

517:                                              ; preds = %520, %512
  %518 = load i32, ptr %47, align 4, !tbaa !9
  %519 = icmp sge i32 %518, 0
  br i1 %519, label %520, label %528

520:                                              ; preds = %517
  %521 = load i32, ptr %46, align 4, !tbaa !9
  %522 = load i32, ptr %42, align 4, !tbaa !9
  %523 = add nsw i32 %522, %521
  store i32 %523, ptr %42, align 4, !tbaa !9
  %524 = load i32, ptr %16, align 4, !tbaa !9
  %525 = shl i32 %524, 1
  %526 = load i32, ptr %47, align 4, !tbaa !9
  %527 = sub nsw i32 %526, %525
  store i32 %527, ptr %47, align 4, !tbaa !9
  br label %517, !llvm.loop !29

528:                                              ; preds = %517
  %529 = load i32, ptr %45, align 4, !tbaa !9
  %530 = shl i32 %529, 1
  %531 = load i32, ptr %47, align 4, !tbaa !9
  %532 = add nsw i32 %531, %530
  store i32 %532, ptr %47, align 4, !tbaa !9
  br label %533

533:                                              ; preds = %528
  %534 = load i32, ptr %7, align 4, !tbaa !9
  %535 = add nsw i32 %534, 1
  store i32 %535, ptr %7, align 4, !tbaa !9
  br label %415, !llvm.loop !30

536:                                              ; preds = %415
  br label %660

537:                                              ; preds = %397
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %538

538:                                              ; preds = %656, %537
  %539 = load i32, ptr %7, align 4, !tbaa !9
  %540 = load i32, ptr %16, align 4, !tbaa !9
  %541 = icmp sle i32 %539, %540
  br i1 %541, label %542, label %659

542:                                              ; preds = %538
  %543 = load i32, ptr %18, align 4, !tbaa !9
  %544 = load i32, ptr %13, align 4, !tbaa !9
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %545
  %547 = getelementptr inbounds %class.Mug, ptr %546, i32 0, i32 0
  %548 = getelementptr inbounds %class.GVertex, ptr %547, i32 0, i32 1
  store i32 %543, ptr %548, align 4, !tbaa !31
  %549 = load i32, ptr %24, align 4, !tbaa !9
  %550 = load i32, ptr %13, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %551
  %553 = getelementptr inbounds %class.Mug, ptr %552, i32 0, i32 0
  %554 = getelementptr inbounds %class.GVertexAttributes, ptr %553, i32 0, i32 2
  store i32 %549, ptr %554, align 8, !tbaa !19
  %555 = load i32, ptr %30, align 4, !tbaa !9
  %556 = load i32, ptr %13, align 4, !tbaa !9
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %557
  %559 = getelementptr inbounds %class.Mug, ptr %558, i32 0, i32 0
  %560 = getelementptr inbounds %class.GVertexAttributes, ptr %559, i32 0, i32 3
  store i32 %555, ptr %560, align 4, !tbaa !20
  %561 = load i32, ptr %36, align 4, !tbaa !9
  %562 = load i32, ptr %13, align 4, !tbaa !9
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %563
  %565 = getelementptr inbounds %class.Mug, ptr %564, i32 0, i32 0
  %566 = getelementptr inbounds %class.GVertexAttributes, ptr %565, i32 0, i32 4
  store i32 %561, ptr %566, align 16, !tbaa !21
  %567 = load i32, ptr %42, align 4, !tbaa !9
  %568 = load i32, ptr %13, align 4, !tbaa !9
  %569 = sext i32 %568 to i64
  %570 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %569
  %571 = getelementptr inbounds %class.Mug, ptr %570, i32 0, i32 0
  %572 = getelementptr inbounds %class.GVertexAttributes, ptr %571, i32 0, i32 0
  store i32 %567, ptr %572, align 16, !tbaa !22
  %573 = load i32, ptr %17, align 4, !tbaa !9
  %574 = load i32, ptr %13, align 4, !tbaa !9
  %575 = add nsw i32 %574, %573
  store i32 %575, ptr %13, align 4, !tbaa !9
  br label %576

576:                                              ; preds = %579, %542
  %577 = load i32, ptr %23, align 4, !tbaa !9
  %578 = icmp sge i32 %577, 0
  br i1 %578, label %579, label %587

579:                                              ; preds = %576
  %580 = load i32, ptr %22, align 4, !tbaa !9
  %581 = load i32, ptr %18, align 4, !tbaa !9
  %582 = add nsw i32 %581, %580
  store i32 %582, ptr %18, align 4, !tbaa !9
  %583 = load i32, ptr %16, align 4, !tbaa !9
  %584 = shl i32 %583, 1
  %585 = load i32, ptr %23, align 4, !tbaa !9
  %586 = sub nsw i32 %585, %584
  store i32 %586, ptr %23, align 4, !tbaa !9
  br label %576, !llvm.loop !32

587:                                              ; preds = %576
  %588 = load i32, ptr %21, align 4, !tbaa !9
  %589 = shl i32 %588, 1
  %590 = load i32, ptr %23, align 4, !tbaa !9
  %591 = add nsw i32 %590, %589
  store i32 %591, ptr %23, align 4, !tbaa !9
  br label %592

592:                                              ; preds = %595, %587
  %593 = load i32, ptr %29, align 4, !tbaa !9
  %594 = icmp sge i32 %593, 0
  br i1 %594, label %595, label %603

595:                                              ; preds = %592
  %596 = load i32, ptr %28, align 4, !tbaa !9
  %597 = load i32, ptr %24, align 4, !tbaa !9
  %598 = add nsw i32 %597, %596
  store i32 %598, ptr %24, align 4, !tbaa !9
  %599 = load i32, ptr %16, align 4, !tbaa !9
  %600 = shl i32 %599, 1
  %601 = load i32, ptr %29, align 4, !tbaa !9
  %602 = sub nsw i32 %601, %600
  store i32 %602, ptr %29, align 4, !tbaa !9
  br label %592, !llvm.loop !33

603:                                              ; preds = %592
  %604 = load i32, ptr %27, align 4, !tbaa !9
  %605 = shl i32 %604, 1
  %606 = load i32, ptr %29, align 4, !tbaa !9
  %607 = add nsw i32 %606, %605
  store i32 %607, ptr %29, align 4, !tbaa !9
  br label %608

608:                                              ; preds = %611, %603
  %609 = load i32, ptr %35, align 4, !tbaa !9
  %610 = icmp sge i32 %609, 0
  br i1 %610, label %611, label %619

611:                                              ; preds = %608
  %612 = load i32, ptr %34, align 4, !tbaa !9
  %613 = load i32, ptr %30, align 4, !tbaa !9
  %614 = add nsw i32 %613, %612
  store i32 %614, ptr %30, align 4, !tbaa !9
  %615 = load i32, ptr %16, align 4, !tbaa !9
  %616 = shl i32 %615, 1
  %617 = load i32, ptr %35, align 4, !tbaa !9
  %618 = sub nsw i32 %617, %616
  store i32 %618, ptr %35, align 4, !tbaa !9
  br label %608, !llvm.loop !34

619:                                              ; preds = %608
  %620 = load i32, ptr %33, align 4, !tbaa !9
  %621 = shl i32 %620, 1
  %622 = load i32, ptr %35, align 4, !tbaa !9
  %623 = add nsw i32 %622, %621
  store i32 %623, ptr %35, align 4, !tbaa !9
  br label %624

624:                                              ; preds = %627, %619
  %625 = load i32, ptr %41, align 4, !tbaa !9
  %626 = icmp sge i32 %625, 0
  br i1 %626, label %627, label %635

627:                                              ; preds = %624
  %628 = load i32, ptr %40, align 4, !tbaa !9
  %629 = load i32, ptr %36, align 4, !tbaa !9
  %630 = add nsw i32 %629, %628
  store i32 %630, ptr %36, align 4, !tbaa !9
  %631 = load i32, ptr %16, align 4, !tbaa !9
  %632 = shl i32 %631, 1
  %633 = load i32, ptr %41, align 4, !tbaa !9
  %634 = sub nsw i32 %633, %632
  store i32 %634, ptr %41, align 4, !tbaa !9
  br label %624, !llvm.loop !35

635:                                              ; preds = %624
  %636 = load i32, ptr %39, align 4, !tbaa !9
  %637 = shl i32 %636, 1
  %638 = load i32, ptr %41, align 4, !tbaa !9
  %639 = add nsw i32 %638, %637
  store i32 %639, ptr %41, align 4, !tbaa !9
  br label %640

640:                                              ; preds = %643, %635
  %641 = load i32, ptr %47, align 4, !tbaa !9
  %642 = icmp sge i32 %641, 0
  br i1 %642, label %643, label %651

643:                                              ; preds = %640
  %644 = load i32, ptr %46, align 4, !tbaa !9
  %645 = load i32, ptr %42, align 4, !tbaa !9
  %646 = add nsw i32 %645, %644
  store i32 %646, ptr %42, align 4, !tbaa !9
  %647 = load i32, ptr %16, align 4, !tbaa !9
  %648 = shl i32 %647, 1
  %649 = load i32, ptr %47, align 4, !tbaa !9
  %650 = sub nsw i32 %649, %648
  store i32 %650, ptr %47, align 4, !tbaa !9
  br label %640, !llvm.loop !36

651:                                              ; preds = %640
  %652 = load i32, ptr %45, align 4, !tbaa !9
  %653 = shl i32 %652, 1
  %654 = load i32, ptr %47, align 4, !tbaa !9
  %655 = add nsw i32 %654, %653
  store i32 %655, ptr %47, align 4, !tbaa !9
  br label %656

656:                                              ; preds = %651
  %657 = load i32, ptr %7, align 4, !tbaa !9
  %658 = add nsw i32 %657, 1
  store i32 %658, ptr %7, align 4, !tbaa !9
  br label %538, !llvm.loop !37

659:                                              ; preds = %538
  br label %660

660:                                              ; preds = %659, %536
  br label %661

661:                                              ; preds = %660, %187
  %662 = load i32, ptr %5, align 4, !tbaa !9
  %663 = add nsw i32 %662, 1
  store i32 %663, ptr %5, align 4, !tbaa !9
  br label %166, !llvm.loop !38

664:                                              ; preds = %166
  %665 = load ptr, ptr @_ZN16GraphicComponent10_graph_memE, align 8, !tbaa !5
  %666 = load i32, ptr %3, align 4, !tbaa !9
  %667 = load i32, ptr @_ZN16GraphicComponent15_bytes_per_lineE, align 4, !tbaa !9
  %668 = mul nsw i32 %666, %667
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i8, ptr %665, i64 %669
  store ptr %670, ptr %9, align 8, !tbaa !5
  %671 = load ptr, ptr @_ZN16GraphicComponent6_z_memE, align 8, !tbaa !5
  %672 = load i32, ptr %3, align 4, !tbaa !9
  %673 = load i32, ptr @_ZN16GraphicComponent6_widthE, align 4, !tbaa !9
  %674 = mul nsw i32 %672, %673
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i16, ptr %671, i64 %675
  store ptr %676, ptr %12, align 8, !tbaa !5
  %677 = load i32, ptr %3, align 4, !tbaa !9
  store i32 %677, ptr %13, align 4, !tbaa !9
  br label %678

678:                                              ; preds = %945, %664
  %679 = load i32, ptr %13, align 4, !tbaa !9
  %680 = load i32, ptr %4, align 4, !tbaa !9
  %681 = icmp sle i32 %679, %680
  br i1 %681, label %682, label %948

682:                                              ; preds = %678
  %683 = load i32, ptr %13, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %684
  %686 = getelementptr inbounds %class.Mug, ptr %685, i32 0, i32 0
  %687 = getelementptr inbounds %class.GVertex, ptr %686, i32 0, i32 1
  %688 = load i32, ptr %687, align 4, !tbaa !31
  store i32 %688, ptr %19, align 4, !tbaa !9
  %689 = load i32, ptr %13, align 4, !tbaa !9
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %690
  %692 = getelementptr inbounds %class.Mug, ptr %691, i32 0, i32 1
  %693 = getelementptr inbounds %class.GVertex, ptr %692, i32 0, i32 1
  %694 = load i32, ptr %693, align 4, !tbaa !23
  store i32 %694, ptr %20, align 4, !tbaa !9
  %695 = load i32, ptr %20, align 4, !tbaa !9
  %696 = load i32, ptr %19, align 4, !tbaa !9
  %697 = sub nsw i32 %695, %696
  %698 = add nsw i32 %697, 1
  store i32 %698, ptr %21, align 4, !tbaa !9
  %699 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %699, ptr %18, align 4, !tbaa !9
  %700 = load i32, ptr %13, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %701
  %703 = getelementptr inbounds %class.Mug, ptr %702, i32 0, i32 0
  %704 = getelementptr inbounds %class.GVertexAttributes, ptr %703, i32 0, i32 2
  %705 = load i32, ptr %704, align 8, !tbaa !19
  store i32 %705, ptr %25, align 4, !tbaa !9
  %706 = load i32, ptr %13, align 4, !tbaa !9
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %707
  %709 = getelementptr inbounds %class.Mug, ptr %708, i32 0, i32 1
  %710 = getelementptr inbounds %class.GVertexAttributes, ptr %709, i32 0, i32 2
  %711 = load i32, ptr %710, align 8, !tbaa !19
  store i32 %711, ptr %26, align 4, !tbaa !9
  %712 = load i32, ptr %26, align 4, !tbaa !9
  %713 = load i32, ptr %25, align 4, !tbaa !9
  %714 = sub nsw i32 %712, %713
  store i32 %714, ptr %27, align 4, !tbaa !9
  %715 = load i32, ptr %27, align 4, !tbaa !9
  %716 = icmp sgt i32 %715, 0
  br i1 %716, label %717, label %718

717:                                              ; preds = %682
  br label %723

718:                                              ; preds = %682
  %719 = load i32, ptr %27, align 4, !tbaa !9
  %720 = icmp ne i32 %719, 0
  %721 = zext i1 %720 to i64
  %722 = select i1 %720, i32 -1, i32 0
  br label %723

723:                                              ; preds = %718, %717
  %724 = phi i32 [ 1, %717 ], [ %722, %718 ]
  store i32 %724, ptr %28, align 4, !tbaa !9
  %725 = load i32, ptr %28, align 4, !tbaa !9
  %726 = load i32, ptr %27, align 4, !tbaa !9
  %727 = mul nsw i32 %726, %725
  store i32 %727, ptr %27, align 4, !tbaa !9
  %728 = load i32, ptr %27, align 4, !tbaa !9
  %729 = shl i32 %728, 1
  %730 = load i32, ptr %21, align 4, !tbaa !9
  %731 = sub nsw i32 %729, %730
  store i32 %731, ptr %29, align 4, !tbaa !9
  %732 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %732, ptr %24, align 4, !tbaa !9
  %733 = load i32, ptr %13, align 4, !tbaa !9
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %734
  %736 = getelementptr inbounds %class.Mug, ptr %735, i32 0, i32 0
  %737 = getelementptr inbounds %class.GVertexAttributes, ptr %736, i32 0, i32 3
  %738 = load i32, ptr %737, align 4, !tbaa !20
  store i32 %738, ptr %31, align 4, !tbaa !9
  %739 = load i32, ptr %13, align 4, !tbaa !9
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %740
  %742 = getelementptr inbounds %class.Mug, ptr %741, i32 0, i32 1
  %743 = getelementptr inbounds %class.GVertexAttributes, ptr %742, i32 0, i32 3
  %744 = load i32, ptr %743, align 4, !tbaa !20
  store i32 %744, ptr %32, align 4, !tbaa !9
  %745 = load i32, ptr %32, align 4, !tbaa !9
  %746 = load i32, ptr %31, align 4, !tbaa !9
  %747 = sub nsw i32 %745, %746
  store i32 %747, ptr %33, align 4, !tbaa !9
  %748 = load i32, ptr %33, align 4, !tbaa !9
  %749 = icmp sgt i32 %748, 0
  br i1 %749, label %750, label %751

750:                                              ; preds = %723
  br label %756

751:                                              ; preds = %723
  %752 = load i32, ptr %33, align 4, !tbaa !9
  %753 = icmp ne i32 %752, 0
  %754 = zext i1 %753 to i64
  %755 = select i1 %753, i32 -1, i32 0
  br label %756

756:                                              ; preds = %751, %750
  %757 = phi i32 [ 1, %750 ], [ %755, %751 ]
  store i32 %757, ptr %34, align 4, !tbaa !9
  %758 = load i32, ptr %34, align 4, !tbaa !9
  %759 = load i32, ptr %33, align 4, !tbaa !9
  %760 = mul nsw i32 %759, %758
  store i32 %760, ptr %33, align 4, !tbaa !9
  %761 = load i32, ptr %33, align 4, !tbaa !9
  %762 = shl i32 %761, 1
  %763 = load i32, ptr %21, align 4, !tbaa !9
  %764 = sub nsw i32 %762, %763
  store i32 %764, ptr %35, align 4, !tbaa !9
  %765 = load i32, ptr %31, align 4, !tbaa !9
  store i32 %765, ptr %30, align 4, !tbaa !9
  %766 = load i32, ptr %13, align 4, !tbaa !9
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %767
  %769 = getelementptr inbounds %class.Mug, ptr %768, i32 0, i32 0
  %770 = getelementptr inbounds %class.GVertexAttributes, ptr %769, i32 0, i32 4
  %771 = load i32, ptr %770, align 16, !tbaa !21
  store i32 %771, ptr %37, align 4, !tbaa !9
  %772 = load i32, ptr %13, align 4, !tbaa !9
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %773
  %775 = getelementptr inbounds %class.Mug, ptr %774, i32 0, i32 1
  %776 = getelementptr inbounds %class.GVertexAttributes, ptr %775, i32 0, i32 4
  %777 = load i32, ptr %776, align 16, !tbaa !21
  store i32 %777, ptr %38, align 4, !tbaa !9
  %778 = load i32, ptr %38, align 4, !tbaa !9
  %779 = load i32, ptr %37, align 4, !tbaa !9
  %780 = sub nsw i32 %778, %779
  store i32 %780, ptr %39, align 4, !tbaa !9
  %781 = load i32, ptr %39, align 4, !tbaa !9
  %782 = icmp sgt i32 %781, 0
  br i1 %782, label %783, label %784

783:                                              ; preds = %756
  br label %789

784:                                              ; preds = %756
  %785 = load i32, ptr %39, align 4, !tbaa !9
  %786 = icmp ne i32 %785, 0
  %787 = zext i1 %786 to i64
  %788 = select i1 %786, i32 -1, i32 0
  br label %789

789:                                              ; preds = %784, %783
  %790 = phi i32 [ 1, %783 ], [ %788, %784 ]
  store i32 %790, ptr %40, align 4, !tbaa !9
  %791 = load i32, ptr %40, align 4, !tbaa !9
  %792 = load i32, ptr %39, align 4, !tbaa !9
  %793 = mul nsw i32 %792, %791
  store i32 %793, ptr %39, align 4, !tbaa !9
  %794 = load i32, ptr %39, align 4, !tbaa !9
  %795 = shl i32 %794, 1
  %796 = load i32, ptr %21, align 4, !tbaa !9
  %797 = sub nsw i32 %795, %796
  store i32 %797, ptr %41, align 4, !tbaa !9
  %798 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %798, ptr %36, align 4, !tbaa !9
  %799 = load i32, ptr %13, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %800
  %802 = getelementptr inbounds %class.Mug, ptr %801, i32 0, i32 0
  %803 = getelementptr inbounds %class.GVertexAttributes, ptr %802, i32 0, i32 0
  %804 = load i32, ptr %803, align 16, !tbaa !22
  store i32 %804, ptr %43, align 4, !tbaa !9
  %805 = load i32, ptr %13, align 4, !tbaa !9
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %806
  %808 = getelementptr inbounds %class.Mug, ptr %807, i32 0, i32 1
  %809 = getelementptr inbounds %class.GVertexAttributes, ptr %808, i32 0, i32 0
  %810 = load i32, ptr %809, align 16, !tbaa !22
  store i32 %810, ptr %44, align 4, !tbaa !9
  %811 = load i32, ptr %44, align 4, !tbaa !9
  %812 = load i32, ptr %43, align 4, !tbaa !9
  %813 = sub nsw i32 %811, %812
  store i32 %813, ptr %45, align 4, !tbaa !9
  %814 = load i32, ptr %45, align 4, !tbaa !9
  %815 = icmp sgt i32 %814, 0
  br i1 %815, label %816, label %817

816:                                              ; preds = %789
  br label %822

817:                                              ; preds = %789
  %818 = load i32, ptr %45, align 4, !tbaa !9
  %819 = icmp ne i32 %818, 0
  %820 = zext i1 %819 to i64
  %821 = select i1 %819, i32 -1, i32 0
  br label %822

822:                                              ; preds = %817, %816
  %823 = phi i32 [ 1, %816 ], [ %821, %817 ]
  store i32 %823, ptr %46, align 4, !tbaa !9
  %824 = load i32, ptr %46, align 4, !tbaa !9
  %825 = load i32, ptr %45, align 4, !tbaa !9
  %826 = mul nsw i32 %825, %824
  store i32 %826, ptr %45, align 4, !tbaa !9
  %827 = load i32, ptr %45, align 4, !tbaa !9
  %828 = shl i32 %827, 1
  %829 = load i32, ptr %21, align 4, !tbaa !9
  %830 = sub nsw i32 %828, %829
  store i32 %830, ptr %47, align 4, !tbaa !9
  %831 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %831, ptr %42, align 4, !tbaa !9
  %832 = load ptr, ptr %9, align 8, !tbaa !5
  %833 = load i32, ptr %19, align 4, !tbaa !9
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds %struct.PixelValue, ptr %832, i64 %834
  store ptr %835, ptr %8, align 8, !tbaa !5
  %836 = load ptr, ptr %12, align 8, !tbaa !5
  %837 = load i32, ptr %19, align 4, !tbaa !9
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds i16, ptr %836, i64 %838
  store ptr %839, ptr %11, align 8, !tbaa !5
  %840 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %840, ptr %18, align 4, !tbaa !9
  br label %841

841:                                              ; preds = %933, %822
  %842 = load i32, ptr %18, align 4, !tbaa !9
  %843 = load i32, ptr %20, align 4, !tbaa !9
  %844 = icmp sle i32 %842, %843
  br i1 %844, label %845, label %936

845:                                              ; preds = %841
  %846 = load i32, ptr %42, align 4, !tbaa !9
  %847 = load ptr, ptr %11, align 8, !tbaa !5
  %848 = load i16, ptr %847, align 2, !tbaa !39
  %849 = zext i16 %848 to i32
  %850 = icmp slt i32 %846, %849
  br i1 %850, label %851, label %864

851:                                              ; preds = %845
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  %852 = load i32, ptr %36, align 4, !tbaa !9
  %853 = shl i32 %852, 0
  %854 = load i32, ptr %30, align 4, !tbaa !9
  %855 = shl i32 %854, 8
  %856 = or i32 %853, %855
  %857 = load i32, ptr %24, align 4, !tbaa !9
  %858 = shl i32 %857, 16
  %859 = or i32 %856, %858
  store i32 %859, ptr %55, align 4, !tbaa !9
  %860 = load i32, ptr %42, align 4, !tbaa !9
  %861 = trunc i32 %860 to i16
  %862 = load ptr, ptr %11, align 8, !tbaa !5
  store i16 %861, ptr %862, align 2, !tbaa !39
  %863 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %863, ptr align 4 %55, i64 3, i1 false), !tbaa.struct !41
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  br label %864

864:                                              ; preds = %851, %845
  br label %865

865:                                              ; preds = %868, %864
  %866 = load i32, ptr %29, align 4, !tbaa !9
  %867 = icmp sge i32 %866, 0
  br i1 %867, label %868, label %876

868:                                              ; preds = %865
  %869 = load i32, ptr %28, align 4, !tbaa !9
  %870 = load i32, ptr %24, align 4, !tbaa !9
  %871 = add nsw i32 %870, %869
  store i32 %871, ptr %24, align 4, !tbaa !9
  %872 = load i32, ptr %21, align 4, !tbaa !9
  %873 = shl i32 %872, 1
  %874 = load i32, ptr %29, align 4, !tbaa !9
  %875 = sub nsw i32 %874, %873
  store i32 %875, ptr %29, align 4, !tbaa !9
  br label %865, !llvm.loop !43

876:                                              ; preds = %865
  %877 = load i32, ptr %27, align 4, !tbaa !9
  %878 = shl i32 %877, 1
  %879 = load i32, ptr %29, align 4, !tbaa !9
  %880 = add nsw i32 %879, %878
  store i32 %880, ptr %29, align 4, !tbaa !9
  br label %881

881:                                              ; preds = %884, %876
  %882 = load i32, ptr %35, align 4, !tbaa !9
  %883 = icmp sge i32 %882, 0
  br i1 %883, label %884, label %892

884:                                              ; preds = %881
  %885 = load i32, ptr %34, align 4, !tbaa !9
  %886 = load i32, ptr %30, align 4, !tbaa !9
  %887 = add nsw i32 %886, %885
  store i32 %887, ptr %30, align 4, !tbaa !9
  %888 = load i32, ptr %21, align 4, !tbaa !9
  %889 = shl i32 %888, 1
  %890 = load i32, ptr %35, align 4, !tbaa !9
  %891 = sub nsw i32 %890, %889
  store i32 %891, ptr %35, align 4, !tbaa !9
  br label %881, !llvm.loop !44

892:                                              ; preds = %881
  %893 = load i32, ptr %33, align 4, !tbaa !9
  %894 = shl i32 %893, 1
  %895 = load i32, ptr %35, align 4, !tbaa !9
  %896 = add nsw i32 %895, %894
  store i32 %896, ptr %35, align 4, !tbaa !9
  br label %897

897:                                              ; preds = %900, %892
  %898 = load i32, ptr %41, align 4, !tbaa !9
  %899 = icmp sge i32 %898, 0
  br i1 %899, label %900, label %908

900:                                              ; preds = %897
  %901 = load i32, ptr %40, align 4, !tbaa !9
  %902 = load i32, ptr %36, align 4, !tbaa !9
  %903 = add nsw i32 %902, %901
  store i32 %903, ptr %36, align 4, !tbaa !9
  %904 = load i32, ptr %21, align 4, !tbaa !9
  %905 = shl i32 %904, 1
  %906 = load i32, ptr %41, align 4, !tbaa !9
  %907 = sub nsw i32 %906, %905
  store i32 %907, ptr %41, align 4, !tbaa !9
  br label %897, !llvm.loop !45

908:                                              ; preds = %897
  %909 = load i32, ptr %39, align 4, !tbaa !9
  %910 = shl i32 %909, 1
  %911 = load i32, ptr %41, align 4, !tbaa !9
  %912 = add nsw i32 %911, %910
  store i32 %912, ptr %41, align 4, !tbaa !9
  br label %913

913:                                              ; preds = %916, %908
  %914 = load i32, ptr %47, align 4, !tbaa !9
  %915 = icmp sge i32 %914, 0
  br i1 %915, label %916, label %924

916:                                              ; preds = %913
  %917 = load i32, ptr %46, align 4, !tbaa !9
  %918 = load i32, ptr %42, align 4, !tbaa !9
  %919 = add nsw i32 %918, %917
  store i32 %919, ptr %42, align 4, !tbaa !9
  %920 = load i32, ptr %21, align 4, !tbaa !9
  %921 = shl i32 %920, 1
  %922 = load i32, ptr %47, align 4, !tbaa !9
  %923 = sub nsw i32 %922, %921
  store i32 %923, ptr %47, align 4, !tbaa !9
  br label %913, !llvm.loop !46

924:                                              ; preds = %913
  %925 = load i32, ptr %45, align 4, !tbaa !9
  %926 = shl i32 %925, 1
  %927 = load i32, ptr %47, align 4, !tbaa !9
  %928 = add nsw i32 %927, %926
  store i32 %928, ptr %47, align 4, !tbaa !9
  %929 = load ptr, ptr %8, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.PixelValue, ptr %929, i32 1
  store ptr %930, ptr %8, align 8, !tbaa !5
  %931 = load ptr, ptr %11, align 8, !tbaa !5
  %932 = getelementptr inbounds i16, ptr %931, i32 1
  store ptr %932, ptr %11, align 8, !tbaa !5
  br label %933

933:                                              ; preds = %924
  %934 = load i32, ptr %18, align 4, !tbaa !9
  %935 = add nsw i32 %934, 1
  store i32 %935, ptr %18, align 4, !tbaa !9
  br label %841, !llvm.loop !47

936:                                              ; preds = %841
  %937 = load ptr, ptr %9, align 8, !tbaa !5
  %938 = load i32, ptr @_ZN16GraphicComponent15_bytes_per_lineE, align 4, !tbaa !9
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i8, ptr %937, i64 %939
  store ptr %940, ptr %9, align 8, !tbaa !5
  %941 = load i32, ptr @_ZN16GraphicComponent6_widthE, align 4, !tbaa !9
  %942 = load ptr, ptr %12, align 8, !tbaa !5
  %943 = sext i32 %941 to i64
  %944 = getelementptr inbounds i16, ptr %942, i64 %943
  store ptr %944, ptr %12, align 8, !tbaa !5
  br label %945

945:                                              ; preds = %936
  %946 = load i32, ptr %13, align 4, !tbaa !9
  %947 = add nsw i32 %946, 1
  store i32 %947, ptr %13, align 4, !tbaa !9
  br label %678, !llvm.loop !48

948:                                              ; preds = %678
  store i32 0, ptr %48, align 4
  br label %949

949:                                              ; preds = %948, %164, %58
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  %950 = load i32, ptr %48, align 4
  switch i32 %950, label %952 [
    i32 0, label %951
    i32 1, label %951
  ]

951:                                              ; preds = %949, %949
  ret void

952:                                              ; preds = %949
  unreachable
}

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808), i32 noundef) #2 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress 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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 36}
!12 = !{!"_ZTS7GVertex", !13, i64 0, !10, i64 36, !10, i64 40, !14, i64 44, !14, i64 60, !14, i64 76, !14, i64 92, !14, i64 108, !15, i64 124}
!13 = !{!"_ZTS17GVertexAttributes", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32}
!14 = !{!"_ZTS7GVector", !7, i64 0}
!15 = !{!"_ZTS5Flags", !10, i64 0}
!16 = !{!12, !10, i64 40}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!13, !10, i64 8}
!20 = !{!13, !10, i64 12}
!21 = !{!13, !10, i64 16}
!22 = !{!13, !10, i64 0}
!23 = !{!24, !10, i64 164}
!24 = !{!"_ZTS3Mug", !12, i64 0, !12, i64 128}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = !{!24, !10, i64 36}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = distinct !{!37, !18}
!38 = distinct !{!38, !18}
!39 = !{!40, !40, i64 0}
!40 = !{!"short", !7, i64 0}
!41 = !{i64 0, i64 1, !42, i64 1, i64 1, !42, i64 2, i64 1, !42}
!42 = !{!7, !7, i64 0}
!43 = distinct !{!43, !18}
!44 = distinct !{!44, !18}
!45 = distinct !{!45, !18}
!46 = distinct !{!46, !18}
!47 = distinct !{!47, !18}
!48 = distinct !{!48, !18}


; 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"

%class.GPolygon = type { i32, [100 x ptr] }
%class.Mug = type { %class.GVertex, %class.GVertex }
%class.GVertex = type { %class.GVertexAttributes, i32, i32, %class.GVector, %class.GVector, %class.GVector, %class.GVector, %class.GVector, %class.Flags }
%class.GVertexAttributes = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%class.GVector = type { [4 x %class.GCoord] }
%class.GCoord = type { float }
%class.Flags = type { i32 }
%struct.PixelValue = type { i8, i8, i8 }

@_ZN13PolygonEngine3_p1E = external global %class.GPolygon, align 8
@_ZN13PolygonEngine4_mugE = external local_unnamed_addr global [1024 x %class.Mug], align 16
@_ZN16GraphicComponent10_graph_memE = external local_unnamed_addr global ptr, align 8
@_ZN16GraphicComponent15_bytes_per_lineE = external local_unnamed_addr global i32, align 4
@_ZN16GraphicComponent6_z_memE = external local_unnamed_addr global ptr, align 8
@_ZN16GraphicComponent6_widthE = external local_unnamed_addr global i32, align 4

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN16PolygonEngine_2414FillPoly_RGB_ZEP17GVertexAttributes(ptr nocapture noundef readnone %0) local_unnamed_addr #0 align 2 {
  %2 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %3 = icmp slt i32 %2, 2
  br i1 %3, label %.loopexit, label %.preheader429

.preheader429:                                    ; preds = %1
  %4 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %5 = icmp sgt i32 %4, 0
  br i1 %5, label %.lr.ph, label %.preheader428

.lr.ph:                                           ; preds = %.preheader429, %60
  %.0433 = phi i32 [ %51, %60 ], [ 1000, %.preheader429 ]
  %.0318432 = phi i32 [ %61, %60 ], [ -1, %.preheader429 ]
  %.0319431 = phi i32 [ %6, %60 ], [ 0, %.preheader429 ]
  %.0380430 = phi i32 [ %41, %60 ], [ 0, %.preheader429 ]
  %6 = add nuw nsw i32 %.0319431, 1
  %7 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %8 = icmp eq i32 %6, %7
  %spec.select = select i1 %8, i32 0, i32 %6
  %9 = add nuw nsw i32 %spec.select, 1
  %10 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %11 = icmp eq i32 %9, %10
  %.0323 = select i1 %11, i32 0, i32 %9
  %12 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0319431)
  %13 = getelementptr inbounds i8, ptr %12, i64 36
  %14 = load i32, ptr %13, align 4, !tbaa !5
  %15 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select)
  %16 = getelementptr inbounds i8, ptr %15, i64 36
  %17 = load i32, ptr %16, align 4, !tbaa !5
  %18 = sub nsw i32 %14, %17
  %19 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0319431)
  %20 = getelementptr inbounds i8, ptr %19, i64 40
  %21 = load i32, ptr %20, align 4, !tbaa !13
  %22 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select)
  %23 = getelementptr inbounds i8, ptr %22, i64 40
  %24 = load i32, ptr %23, align 4, !tbaa !13
  %.neg = sub i32 %24, %21
  %25 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0323)
  %26 = getelementptr inbounds i8, ptr %25, i64 36
  %27 = load i32, ptr %26, align 4, !tbaa !5
  %28 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select)
  %29 = getelementptr inbounds i8, ptr %28, i64 36
  %30 = load i32, ptr %29, align 4, !tbaa !5
  %31 = sub nsw i32 %27, %30
  %32 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0323)
  %33 = getelementptr inbounds i8, ptr %32, i64 40
  %34 = load i32, ptr %33, align 4, !tbaa !13
  %35 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select)
  %36 = getelementptr inbounds i8, ptr %35, i64 40
  %37 = load i32, ptr %36, align 4, !tbaa !13
  %38 = sub nsw i32 %34, %37
  %39 = mul nsw i32 %38, %18
  %.neg414 = mul i32 %31, %.neg
  %40 = add i32 %.neg414, %.0380430
  %41 = add i32 %40, %39
  %42 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0319431)
  %43 = getelementptr inbounds i8, ptr %42, i64 40
  %44 = load i32, ptr %43, align 4, !tbaa !13
  %45 = icmp slt i32 %.0433, %44
  br i1 %45, label %50, label %46

46:                                               ; preds = %.lr.ph
  %47 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0319431)
  %48 = getelementptr inbounds i8, ptr %47, i64 40
  %49 = load i32, ptr %48, align 4, !tbaa !13
  br label %50

50:                                               ; preds = %.lr.ph, %46
  %51 = phi i32 [ %49, %46 ], [ %.0433, %.lr.ph ]
  %52 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0319431)
  %53 = getelementptr inbounds i8, ptr %52, i64 40
  %54 = load i32, ptr %53, align 4, !tbaa !13
  %55 = icmp sgt i32 %.0318432, %54
  br i1 %55, label %60, label %56

56:                                               ; preds = %50
  %57 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.0319431)
  %58 = getelementptr inbounds i8, ptr %57, i64 40
  %59 = load i32, ptr %58, align 4, !tbaa !13
  br label %60

60:                                               ; preds = %50, %56
  %61 = phi i32 [ %59, %56 ], [ %.0318432, %50 ]
  %62 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %63 = icmp slt i32 %6, %62
  br i1 %63, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %60
  %64 = icmp sgt i32 %41, 0
  %65 = icmp eq i32 %51, %61
  br i1 %65, label %.loopexit, label %.preheader428

.preheader428:                                    ; preds = %.preheader429, %._crit_edge
  %.0.lcssa633 = phi i32 [ %51, %._crit_edge ], [ 1000, %.preheader429 ]
  %.0318.lcssa632 = phi i32 [ %61, %._crit_edge ], [ -1, %.preheader429 ]
  %.0380.lcssa631 = phi i1 [ %64, %._crit_edge ], [ false, %.preheader429 ]
  %66 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %67 = icmp sgt i32 %66, 0
  br i1 %67, label %.lr.ph535, label %._crit_edge536

.lr.ph535:                                        ; preds = %.preheader428, %.loopexit425
  %.1534 = phi i32 [ %68, %.loopexit425 ], [ 0, %.preheader428 ]
  %68 = add nuw nsw i32 %.1534, 1
  %69 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %70 = icmp eq i32 %68, %69
  %spec.select415 = select i1 %70, i32 0, i32 %68
  %71 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %72 = getelementptr inbounds i8, ptr %71, i64 40
  %73 = load i32, ptr %72, align 4, !tbaa !13
  %74 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %75 = getelementptr inbounds i8, ptr %74, i64 40
  %76 = load i32, ptr %75, align 4, !tbaa !13
  %77 = icmp eq i32 %73, %76
  br i1 %77, label %.loopexit425, label %78

78:                                               ; preds = %.lr.ph535
  %79 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %80 = getelementptr inbounds i8, ptr %79, i64 40
  %81 = load i32, ptr %80, align 4, !tbaa !13
  %82 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %83 = getelementptr inbounds i8, ptr %82, i64 40
  %84 = load i32, ptr %83, align 4, !tbaa !13
  %85 = sub i32 %84, %81
  %.not406 = icmp ne i32 %84, %81
  %86 = sext i1 %.not406 to i32
  %.inv419 = icmp slt i32 %85, 1
  %87 = select i1 %.inv419, i32 %86, i32 1
  %88 = mul i32 %87, %85
  %89 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %90 = getelementptr inbounds i8, ptr %89, i64 36
  %91 = load i32, ptr %90, align 4, !tbaa !5
  %92 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %93 = getelementptr inbounds i8, ptr %92, i64 36
  %94 = load i32, ptr %93, align 4, !tbaa !5
  %95 = sub nsw i32 %94, %91
  %.not407 = icmp ne i32 %94, %91
  %96 = sext i1 %.not407 to i32
  %.inv420 = icmp slt i32 %95, 1
  %97 = select i1 %.inv420, i32 %96, i32 1
  %98 = shl i32 %95, 1
  %99 = mul i32 %98, %97
  %100 = sub nsw i32 %99, %88
  %101 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %102 = getelementptr inbounds i8, ptr %101, i64 8
  %103 = load i32, ptr %102, align 4, !tbaa !16
  %104 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %105 = getelementptr inbounds i8, ptr %104, i64 8
  %106 = load i32, ptr %105, align 4, !tbaa !16
  %107 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %108 = getelementptr inbounds i8, ptr %107, i64 12
  %109 = load i32, ptr %108, align 4, !tbaa !17
  %110 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %111 = getelementptr inbounds i8, ptr %110, i64 12
  %112 = load i32, ptr %111, align 4, !tbaa !17
  %113 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %114 = getelementptr inbounds i8, ptr %113, i64 16
  %115 = load i32, ptr %114, align 4, !tbaa !18
  %116 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %117 = getelementptr inbounds i8, ptr %116, i64 16
  %118 = load i32, ptr %117, align 4, !tbaa !18
  %119 = tail call i32 @llvm.smin.i32(i32 %103, i32 255)
  %120 = tail call i32 @llvm.smin.i32(i32 %106, i32 255)
  %121 = tail call i32 @llvm.smin.i32(i32 %109, i32 255)
  %122 = tail call i32 @llvm.smin.i32(i32 %112, i32 255)
  %123 = tail call i32 @llvm.smin.i32(i32 %115, i32 255)
  %124 = tail call i32 @llvm.smin.i32(i32 %118, i32 255)
  %125 = sub nsw i32 %120, %119
  %.not408 = icmp ne i32 %120, %119
  %126 = sext i1 %.not408 to i32
  %.inv421 = icmp slt i32 %125, 1
  %127 = select i1 %.inv421, i32 %126, i32 1
  %128 = shl i32 %125, 1
  %129 = mul i32 %128, %127
  %130 = sub nsw i32 %129, %88
  %131 = sub nsw i32 %122, %121
  %.not409 = icmp ne i32 %122, %121
  %132 = sext i1 %.not409 to i32
  %.inv422 = icmp slt i32 %131, 1
  %133 = select i1 %.inv422, i32 %132, i32 1
  %134 = shl i32 %131, 1
  %135 = mul i32 %134, %133
  %136 = sub nsw i32 %135, %88
  %137 = sub nsw i32 %124, %123
  %.not410 = icmp ne i32 %124, %123
  %138 = sext i1 %.not410 to i32
  %.inv423 = icmp slt i32 %137, 1
  %139 = select i1 %.inv423, i32 %138, i32 1
  %140 = shl i32 %137, 1
  %141 = mul i32 %140, %139
  %142 = sub nsw i32 %141, %88
  %143 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %.1534)
  %144 = load i32, ptr %143, align 4, !tbaa !19
  %145 = tail call noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E, i32 noundef %spec.select415)
  %146 = load i32, ptr %145, align 4, !tbaa !19
  %147 = sub nsw i32 %146, %144
  %.not411 = icmp ne i32 %146, %144
  %148 = sext i1 %.not411 to i32
  %.inv424 = icmp slt i32 %147, 1
  %149 = select i1 %.inv424, i32 %148, i32 1
  %150 = shl i32 %147, 1
  %151 = mul i32 %150, %149
  %152 = sub nsw i32 %151, %88
  %153 = icmp sgt i32 %84, %81
  %154 = xor i1 %.0380.lcssa631, %153
  %.not413520 = icmp slt i32 %88, 0
  br i1 %154, label %.preheader, label %.preheader426

.preheader426:                                    ; preds = %78
  br i1 %.not413520, label %.loopexit425, label %.lr.ph484

.lr.ph484:                                        ; preds = %.preheader426
  %155 = shl nuw i32 %88, 1
  %156 = sext i32 %81 to i64
  %157 = sext i32 %87 to i64
  br label %193

.preheader:                                       ; preds = %78
  br i1 %.not413520, label %.loopexit425, label %.lr.ph533

.lr.ph533:                                        ; preds = %.preheader
  %158 = shl nuw i32 %88, 1
  %159 = sext i32 %81 to i64
  %160 = sext i32 %87 to i64
  br label %161

161:                                              ; preds = %.lr.ph533, %._crit_edge517
  %indvars.iv618 = phi i64 [ %159, %.lr.ph533 ], [ %indvars.iv.next619, %._crit_edge517 ]
  %.0321532 = phi i32 [ 0, %.lr.ph533 ], [ %192, %._crit_edge517 ]
  %.0325531 = phi i32 [ %152, %.lr.ph533 ], [ %191, %._crit_edge517 ]
  %.0327530 = phi i32 [ %144, %.lr.ph533 ], [ %.1328.lcssa, %._crit_edge517 ]
  %.0333529 = phi i32 [ %142, %.lr.ph533 ], [ %186, %._crit_edge517 ]
  %.0339528 = phi i32 [ %123, %.lr.ph533 ], [ %.1340.lcssa, %._crit_edge517 ]
  %.0345527 = phi i32 [ %136, %.lr.ph533 ], [ %181, %._crit_edge517 ]
  %.0351526 = phi i32 [ %121, %.lr.ph533 ], [ %.1352.lcssa, %._crit_edge517 ]
  %.0357525 = phi i32 [ %130, %.lr.ph533 ], [ %176, %._crit_edge517 ]
  %.0363524 = phi i32 [ %119, %.lr.ph533 ], [ %.1364.lcssa, %._crit_edge517 ]
  %.0369523 = phi i32 [ %100, %.lr.ph533 ], [ %171, %._crit_edge517 ]
  %.0374522 = phi i32 [ %91, %.lr.ph533 ], [ %.1375.lcssa, %._crit_edge517 ]
  %162 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %indvars.iv618, i32 1
  %163 = getelementptr inbounds i8, ptr %162, i64 36
  store i32 %.0374522, ptr %163, align 4, !tbaa !20
  %164 = getelementptr inbounds i8, ptr %162, i64 8
  store i32 %.0363524, ptr %164, align 8, !tbaa !16
  %165 = getelementptr inbounds i8, ptr %162, i64 12
  store i32 %.0351526, ptr %165, align 4, !tbaa !17
  %166 = getelementptr inbounds i8, ptr %162, i64 16
  store i32 %.0339528, ptr %166, align 16, !tbaa !18
  store i32 %.0327530, ptr %162, align 16, !tbaa !19
  %indvars.iv.next619 = add nsw i64 %indvars.iv618, %160
  %167 = icmp sgt i32 %.0369523, -1
  br i1 %167, label %.lr.ph488, label %._crit_edge489

.lr.ph488:                                        ; preds = %161, %.lr.ph488
  %.1370486 = phi i32 [ %169, %.lr.ph488 ], [ %.0369523, %161 ]
  %.1375485 = phi i32 [ %168, %.lr.ph488 ], [ %.0374522, %161 ]
  %168 = add nsw i32 %.1375485, %97
  %169 = sub nsw i32 %.1370486, %158
  %170 = icmp sgt i32 %169, -1
  br i1 %170, label %.lr.ph488, label %._crit_edge489, !llvm.loop !22

._crit_edge489:                                   ; preds = %.lr.ph488, %161
  %.1375.lcssa = phi i32 [ %.0374522, %161 ], [ %168, %.lr.ph488 ]
  %.1370.lcssa = phi i32 [ %.0369523, %161 ], [ %169, %.lr.ph488 ]
  %171 = add nsw i32 %.1370.lcssa, %99
  %172 = icmp sgt i32 %.0357525, -1
  br i1 %172, label %.lr.ph495, label %._crit_edge496

.lr.ph495:                                        ; preds = %._crit_edge489, %.lr.ph495
  %.1358493 = phi i32 [ %174, %.lr.ph495 ], [ %.0357525, %._crit_edge489 ]
  %.1364492 = phi i32 [ %173, %.lr.ph495 ], [ %.0363524, %._crit_edge489 ]
  %173 = add nsw i32 %.1364492, %127
  %174 = sub nsw i32 %.1358493, %158
  %175 = icmp sgt i32 %174, -1
  br i1 %175, label %.lr.ph495, label %._crit_edge496, !llvm.loop !23

._crit_edge496:                                   ; preds = %.lr.ph495, %._crit_edge489
  %.1364.lcssa = phi i32 [ %.0363524, %._crit_edge489 ], [ %173, %.lr.ph495 ]
  %.1358.lcssa = phi i32 [ %.0357525, %._crit_edge489 ], [ %174, %.lr.ph495 ]
  %176 = add nsw i32 %.1358.lcssa, %129
  %177 = icmp sgt i32 %.0345527, -1
  br i1 %177, label %.lr.ph502, label %._crit_edge503

.lr.ph502:                                        ; preds = %._crit_edge496, %.lr.ph502
  %.1346500 = phi i32 [ %179, %.lr.ph502 ], [ %.0345527, %._crit_edge496 ]
  %.1352499 = phi i32 [ %178, %.lr.ph502 ], [ %.0351526, %._crit_edge496 ]
  %178 = add nsw i32 %.1352499, %133
  %179 = sub nsw i32 %.1346500, %158
  %180 = icmp sgt i32 %179, -1
  br i1 %180, label %.lr.ph502, label %._crit_edge503, !llvm.loop !24

._crit_edge503:                                   ; preds = %.lr.ph502, %._crit_edge496
  %.1352.lcssa = phi i32 [ %.0351526, %._crit_edge496 ], [ %178, %.lr.ph502 ]
  %.1346.lcssa = phi i32 [ %.0345527, %._crit_edge496 ], [ %179, %.lr.ph502 ]
  %181 = add nsw i32 %.1346.lcssa, %135
  %182 = icmp sgt i32 %.0333529, -1
  br i1 %182, label %.lr.ph509, label %._crit_edge510

.lr.ph509:                                        ; preds = %._crit_edge503, %.lr.ph509
  %.1334507 = phi i32 [ %184, %.lr.ph509 ], [ %.0333529, %._crit_edge503 ]
  %.1340506 = phi i32 [ %183, %.lr.ph509 ], [ %.0339528, %._crit_edge503 ]
  %183 = add nsw i32 %.1340506, %139
  %184 = sub nsw i32 %.1334507, %158
  %185 = icmp sgt i32 %184, -1
  br i1 %185, label %.lr.ph509, label %._crit_edge510, !llvm.loop !25

._crit_edge510:                                   ; preds = %.lr.ph509, %._crit_edge503
  %.1340.lcssa = phi i32 [ %.0339528, %._crit_edge503 ], [ %183, %.lr.ph509 ]
  %.1334.lcssa = phi i32 [ %.0333529, %._crit_edge503 ], [ %184, %.lr.ph509 ]
  %186 = add nsw i32 %.1334.lcssa, %141
  %187 = icmp sgt i32 %.0325531, -1
  br i1 %187, label %.lr.ph516, label %._crit_edge517

.lr.ph516:                                        ; preds = %._crit_edge510, %.lr.ph516
  %.1326514 = phi i32 [ %189, %.lr.ph516 ], [ %.0325531, %._crit_edge510 ]
  %.1328513 = phi i32 [ %188, %.lr.ph516 ], [ %.0327530, %._crit_edge510 ]
  %188 = add nsw i32 %.1328513, %149
  %189 = sub nsw i32 %.1326514, %158
  %190 = icmp sgt i32 %189, -1
  br i1 %190, label %.lr.ph516, label %._crit_edge517, !llvm.loop !26

._crit_edge517:                                   ; preds = %.lr.ph516, %._crit_edge510
  %.1328.lcssa = phi i32 [ %.0327530, %._crit_edge510 ], [ %188, %.lr.ph516 ]
  %.1326.lcssa = phi i32 [ %.0325531, %._crit_edge510 ], [ %189, %.lr.ph516 ]
  %191 = add nsw i32 %.1326.lcssa, %151
  %192 = add nuw i32 %.0321532, 1
  %exitcond621.not = icmp eq i32 %.0321532, %88
  br i1 %exitcond621.not, label %.loopexit425, label %161, !llvm.loop !27

193:                                              ; preds = %.lr.ph484, %._crit_edge468
  %indvars.iv = phi i64 [ %156, %.lr.ph484 ], [ %indvars.iv.next, %._crit_edge468 ]
  %.1322483 = phi i32 [ 0, %.lr.ph484 ], [ %224, %._crit_edge468 ]
  %.2482 = phi i32 [ %152, %.lr.ph484 ], [ %223, %._crit_edge468 ]
  %.2329481 = phi i32 [ %144, %.lr.ph484 ], [ %.3330.lcssa, %._crit_edge468 ]
  %.2335480 = phi i32 [ %142, %.lr.ph484 ], [ %218, %._crit_edge468 ]
  %.2341479 = phi i32 [ %123, %.lr.ph484 ], [ %.3342.lcssa, %._crit_edge468 ]
  %.2347478 = phi i32 [ %136, %.lr.ph484 ], [ %213, %._crit_edge468 ]
  %.2353477 = phi i32 [ %121, %.lr.ph484 ], [ %.3354.lcssa, %._crit_edge468 ]
  %.2359476 = phi i32 [ %130, %.lr.ph484 ], [ %208, %._crit_edge468 ]
  %.2365475 = phi i32 [ %119, %.lr.ph484 ], [ %.3366.lcssa, %._crit_edge468 ]
  %.2371474 = phi i32 [ %100, %.lr.ph484 ], [ %203, %._crit_edge468 ]
  %.2376473 = phi i32 [ %91, %.lr.ph484 ], [ %.3377.lcssa, %._crit_edge468 ]
  %194 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %indvars.iv
  %195 = getelementptr inbounds i8, ptr %194, i64 36
  store i32 %.2376473, ptr %195, align 4, !tbaa !28
  %196 = getelementptr inbounds i8, ptr %194, i64 8
  store i32 %.2365475, ptr %196, align 8, !tbaa !16
  %197 = getelementptr inbounds i8, ptr %194, i64 12
  store i32 %.2353477, ptr %197, align 4, !tbaa !17
  %198 = getelementptr inbounds i8, ptr %194, i64 16
  store i32 %.2341479, ptr %198, align 16, !tbaa !18
  store i32 %.2329481, ptr %194, align 16, !tbaa !19
  %indvars.iv.next = add nsw i64 %indvars.iv, %157
  %199 = icmp sgt i32 %.2371474, -1
  br i1 %199, label %.lr.ph439, label %._crit_edge440

.lr.ph439:                                        ; preds = %193, %.lr.ph439
  %.3372437 = phi i32 [ %201, %.lr.ph439 ], [ %.2371474, %193 ]
  %.3377436 = phi i32 [ %200, %.lr.ph439 ], [ %.2376473, %193 ]
  %200 = add nsw i32 %.3377436, %97
  %201 = sub nsw i32 %.3372437, %155
  %202 = icmp sgt i32 %201, -1
  br i1 %202, label %.lr.ph439, label %._crit_edge440, !llvm.loop !29

._crit_edge440:                                   ; preds = %.lr.ph439, %193
  %.3377.lcssa = phi i32 [ %.2376473, %193 ], [ %200, %.lr.ph439 ]
  %.3372.lcssa = phi i32 [ %.2371474, %193 ], [ %201, %.lr.ph439 ]
  %203 = add nsw i32 %.3372.lcssa, %99
  %204 = icmp sgt i32 %.2359476, -1
  br i1 %204, label %.lr.ph446, label %._crit_edge447

.lr.ph446:                                        ; preds = %._crit_edge440, %.lr.ph446
  %.3360444 = phi i32 [ %206, %.lr.ph446 ], [ %.2359476, %._crit_edge440 ]
  %.3366443 = phi i32 [ %205, %.lr.ph446 ], [ %.2365475, %._crit_edge440 ]
  %205 = add nsw i32 %.3366443, %127
  %206 = sub nsw i32 %.3360444, %155
  %207 = icmp sgt i32 %206, -1
  br i1 %207, label %.lr.ph446, label %._crit_edge447, !llvm.loop !30

._crit_edge447:                                   ; preds = %.lr.ph446, %._crit_edge440
  %.3366.lcssa = phi i32 [ %.2365475, %._crit_edge440 ], [ %205, %.lr.ph446 ]
  %.3360.lcssa = phi i32 [ %.2359476, %._crit_edge440 ], [ %206, %.lr.ph446 ]
  %208 = add nsw i32 %.3360.lcssa, %129
  %209 = icmp sgt i32 %.2347478, -1
  br i1 %209, label %.lr.ph453, label %._crit_edge454

.lr.ph453:                                        ; preds = %._crit_edge447, %.lr.ph453
  %.3348451 = phi i32 [ %211, %.lr.ph453 ], [ %.2347478, %._crit_edge447 ]
  %.3354450 = phi i32 [ %210, %.lr.ph453 ], [ %.2353477, %._crit_edge447 ]
  %210 = add nsw i32 %.3354450, %133
  %211 = sub nsw i32 %.3348451, %155
  %212 = icmp sgt i32 %211, -1
  br i1 %212, label %.lr.ph453, label %._crit_edge454, !llvm.loop !31

._crit_edge454:                                   ; preds = %.lr.ph453, %._crit_edge447
  %.3354.lcssa = phi i32 [ %.2353477, %._crit_edge447 ], [ %210, %.lr.ph453 ]
  %.3348.lcssa = phi i32 [ %.2347478, %._crit_edge447 ], [ %211, %.lr.ph453 ]
  %213 = add nsw i32 %.3348.lcssa, %135
  %214 = icmp sgt i32 %.2335480, -1
  br i1 %214, label %.lr.ph460, label %._crit_edge461

.lr.ph460:                                        ; preds = %._crit_edge454, %.lr.ph460
  %.3336458 = phi i32 [ %216, %.lr.ph460 ], [ %.2335480, %._crit_edge454 ]
  %.3342457 = phi i32 [ %215, %.lr.ph460 ], [ %.2341479, %._crit_edge454 ]
  %215 = add nsw i32 %.3342457, %139
  %216 = sub nsw i32 %.3336458, %155
  %217 = icmp sgt i32 %216, -1
  br i1 %217, label %.lr.ph460, label %._crit_edge461, !llvm.loop !32

._crit_edge461:                                   ; preds = %.lr.ph460, %._crit_edge454
  %.3342.lcssa = phi i32 [ %.2341479, %._crit_edge454 ], [ %215, %.lr.ph460 ]
  %.3336.lcssa = phi i32 [ %.2335480, %._crit_edge454 ], [ %216, %.lr.ph460 ]
  %218 = add nsw i32 %.3336.lcssa, %141
  %219 = icmp sgt i32 %.2482, -1
  br i1 %219, label %.lr.ph467, label %._crit_edge468

.lr.ph467:                                        ; preds = %._crit_edge461, %.lr.ph467
  %.3465 = phi i32 [ %221, %.lr.ph467 ], [ %.2482, %._crit_edge461 ]
  %.3330464 = phi i32 [ %220, %.lr.ph467 ], [ %.2329481, %._crit_edge461 ]
  %220 = add nsw i32 %.3330464, %149
  %221 = sub nsw i32 %.3465, %155
  %222 = icmp sgt i32 %221, -1
  br i1 %222, label %.lr.ph467, label %._crit_edge468, !llvm.loop !33

._crit_edge468:                                   ; preds = %.lr.ph467, %._crit_edge461
  %.3330.lcssa = phi i32 [ %.2329481, %._crit_edge461 ], [ %220, %.lr.ph467 ]
  %.3.lcssa = phi i32 [ %.2482, %._crit_edge461 ], [ %221, %.lr.ph467 ]
  %223 = add nsw i32 %.3.lcssa, %151
  %224 = add nuw i32 %.1322483, 1
  %exitcond.not = icmp eq i32 %.1322483, %88
  br i1 %exitcond.not, label %.loopexit425, label %193, !llvm.loop !34

.loopexit425:                                     ; preds = %._crit_edge468, %._crit_edge517, %.preheader426, %.preheader, %.lr.ph535
  %225 = tail call noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808) @_ZN13PolygonEngine3_p1E)
  %226 = icmp slt i32 %68, %225
  br i1 %226, label %.lr.ph535, label %._crit_edge536, !llvm.loop !35

._crit_edge536:                                   ; preds = %.loopexit425, %.preheader428
  %.not580 = icmp sgt i32 %.0.lcssa633, %.0318.lcssa632
  br i1 %.not580, label %.loopexit, label %.lr.ph585.preheader

.lr.ph585.preheader:                              ; preds = %._crit_edge536
  %227 = load ptr, ptr @_ZN16GraphicComponent6_z_memE, align 8, !tbaa !36
  %228 = load i32, ptr @_ZN16GraphicComponent6_widthE, align 4, !tbaa !38
  %229 = mul nsw i32 %228, %.0.lcssa633
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i16, ptr %227, i64 %230
  %232 = load ptr, ptr @_ZN16GraphicComponent10_graph_memE, align 8, !tbaa !36
  %233 = load i32, ptr @_ZN16GraphicComponent15_bytes_per_lineE, align 4, !tbaa !38
  %234 = mul nsw i32 %233, %.0.lcssa633
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i8, ptr %232, i64 %235
  %237 = sext i32 %.0.lcssa633 to i64
  %238 = add i32 %.0318.lcssa632, 1
  br label %.lr.ph585

.lr.ph585:                                        ; preds = %.lr.ph585.preheader, %._crit_edge579
  %239 = phi i32 [ %228, %.lr.ph585.preheader ], [ %325, %._crit_edge579 ]
  %240 = phi i32 [ %233, %.lr.ph585.preheader ], [ %326, %._crit_edge579 ]
  %indvars.iv623 = phi i64 [ %237, %.lr.ph585.preheader ], [ %indvars.iv.next624, %._crit_edge579 ]
  %.0379583 = phi ptr [ %236, %.lr.ph585.preheader ], [ %328, %._crit_edge579 ]
  %.0385581 = phi ptr [ %231, %.lr.ph585.preheader ], [ %330, %._crit_edge579 ]
  %241 = getelementptr inbounds [1024 x %class.Mug], ptr @_ZN13PolygonEngine4_mugE, i64 0, i64 %indvars.iv623
  %242 = getelementptr inbounds i8, ptr %241, i64 36
  %243 = load i32, ptr %242, align 4, !tbaa !28
  %244 = getelementptr inbounds i8, ptr %241, i64 128
  %245 = getelementptr inbounds i8, ptr %241, i64 164
  %246 = load i32, ptr %245, align 4, !tbaa !20
  %247 = getelementptr inbounds i8, ptr %241, i64 8
  %248 = load i32, ptr %247, align 8, !tbaa !16
  %249 = getelementptr inbounds i8, ptr %241, i64 136
  %250 = load i32, ptr %249, align 8, !tbaa !16
  %251 = sub nsw i32 %250, %248
  %.not401 = icmp ne i32 %250, %248
  %252 = sext i1 %.not401 to i32
  %.inv = icmp slt i32 %251, 1
  %253 = select i1 %.inv, i32 %252, i32 1
  %254 = shl i32 %251, 1
  %255 = mul i32 %254, %253
  %256 = getelementptr inbounds i8, ptr %241, i64 12
  %257 = load i32, ptr %256, align 4, !tbaa !17
  %258 = getelementptr inbounds i8, ptr %241, i64 140
  %259 = load i32, ptr %258, align 4, !tbaa !17
  %260 = sub nsw i32 %259, %257
  %.not402 = icmp ne i32 %259, %257
  %261 = sext i1 %.not402 to i32
  %.inv416 = icmp slt i32 %260, 1
  %262 = select i1 %.inv416, i32 %261, i32 1
  %263 = shl i32 %260, 1
  %264 = mul i32 %263, %262
  %265 = getelementptr inbounds i8, ptr %241, i64 16
  %266 = load i32, ptr %265, align 16, !tbaa !18
  %267 = getelementptr inbounds i8, ptr %241, i64 144
  %268 = load i32, ptr %267, align 16, !tbaa !18
  %269 = sub nsw i32 %268, %266
  %.not403 = icmp ne i32 %268, %266
  %270 = sext i1 %.not403 to i32
  %.inv417 = icmp slt i32 %269, 1
  %271 = select i1 %.inv417, i32 %270, i32 1
  %272 = shl i32 %269, 1
  %273 = mul i32 %272, %271
  %274 = load i32, ptr %241, align 16, !tbaa !19
  %275 = load i32, ptr %244, align 16, !tbaa !19
  %276 = sub nsw i32 %275, %274
  %.not404 = icmp ne i32 %275, %274
  %277 = sext i1 %.not404 to i32
  %.inv418 = icmp slt i32 %276, 1
  %278 = select i1 %.inv418, i32 %277, i32 1
  %279 = shl i32 %276, 1
  %280 = mul i32 %279, %278
  %.not405565 = icmp sgt i32 %243, %246
  br i1 %.not405565, label %._crit_edge579, label %.lr.ph578

.lr.ph578:                                        ; preds = %.lr.ph585
  %281 = sext i32 %243 to i64
  %282 = getelementptr inbounds i16, ptr %.0385581, i64 %281
  %283 = getelementptr inbounds %struct.PixelValue, ptr %.0379583, i64 %281
  %284 = sub nsw i32 %246, %243
  %285 = add nsw i32 %284, 1
  %286 = sub nsw i32 %280, %285
  %287 = sub nsw i32 %273, %285
  %288 = sub nsw i32 %264, %285
  %289 = sub nsw i32 %255, %285
  %290 = shl i32 %285, 1
  br label %291

291:                                              ; preds = %.lr.ph578, %._crit_edge562
  %.4576 = phi i32 [ %286, %.lr.ph578 ], [ %321, %._crit_edge562 ]
  %.4331575 = phi i32 [ %274, %.lr.ph578 ], [ %.5332.lcssa, %._crit_edge562 ]
  %.4337574 = phi i32 [ %287, %.lr.ph578 ], [ %316, %._crit_edge562 ]
  %.4343573 = phi i32 [ %266, %.lr.ph578 ], [ %.5344.lcssa, %._crit_edge562 ]
  %.4349572 = phi i32 [ %288, %.lr.ph578 ], [ %311, %._crit_edge562 ]
  %.4355571 = phi i32 [ %257, %.lr.ph578 ], [ %.5356.lcssa, %._crit_edge562 ]
  %.4361570 = phi i32 [ %289, %.lr.ph578 ], [ %306, %._crit_edge562 ]
  %.4367569 = phi i32 [ %248, %.lr.ph578 ], [ %.5368.lcssa, %._crit_edge562 ]
  %.0373568 = phi ptr [ %283, %.lr.ph578 ], [ %322, %._crit_edge562 ]
  %.4378567 = phi i32 [ %243, %.lr.ph578 ], [ %324, %._crit_edge562 ]
  %.0381566 = phi ptr [ %282, %.lr.ph578 ], [ %323, %._crit_edge562 ]
  %292 = load i16, ptr %.0381566, align 2, !tbaa !39
  %293 = zext i16 %292 to i32
  %294 = icmp slt i32 %.4331575, %293
  br i1 %294, label %295, label %301

295:                                              ; preds = %291
  %296 = shl i32 %.4355571, 8
  %297 = shl i32 %.4367569, 16
  %298 = or i32 %296, %297
  %299 = or i32 %298, %.4343573
  %300 = trunc i32 %.4331575 to i16
  store i16 %300, ptr %.0381566, align 2, !tbaa !39
  %.0.extract.trunc = trunc i32 %299 to i24
  store i24 %.0.extract.trunc, ptr %.0373568, align 1
  br label %301

301:                                              ; preds = %295, %291
  %302 = icmp sgt i32 %.4361570, -1
  br i1 %302, label %.lr.ph540, label %._crit_edge541

.lr.ph540:                                        ; preds = %301, %.lr.ph540
  %.5362538 = phi i32 [ %304, %.lr.ph540 ], [ %.4361570, %301 ]
  %.5368537 = phi i32 [ %303, %.lr.ph540 ], [ %.4367569, %301 ]
  %303 = add nsw i32 %.5368537, %253
  %304 = sub nsw i32 %.5362538, %290
  %305 = icmp sgt i32 %304, -1
  br i1 %305, label %.lr.ph540, label %._crit_edge541, !llvm.loop !41

._crit_edge541:                                   ; preds = %.lr.ph540, %301
  %.5368.lcssa = phi i32 [ %.4367569, %301 ], [ %303, %.lr.ph540 ]
  %.5362.lcssa = phi i32 [ %.4361570, %301 ], [ %304, %.lr.ph540 ]
  %306 = add nsw i32 %.5362.lcssa, %255
  %307 = icmp sgt i32 %.4349572, -1
  br i1 %307, label %.lr.ph547, label %._crit_edge548

.lr.ph547:                                        ; preds = %._crit_edge541, %.lr.ph547
  %.5350545 = phi i32 [ %309, %.lr.ph547 ], [ %.4349572, %._crit_edge541 ]
  %.5356544 = phi i32 [ %308, %.lr.ph547 ], [ %.4355571, %._crit_edge541 ]
  %308 = add nsw i32 %.5356544, %262
  %309 = sub nsw i32 %.5350545, %290
  %310 = icmp sgt i32 %309, -1
  br i1 %310, label %.lr.ph547, label %._crit_edge548, !llvm.loop !42

._crit_edge548:                                   ; preds = %.lr.ph547, %._crit_edge541
  %.5356.lcssa = phi i32 [ %.4355571, %._crit_edge541 ], [ %308, %.lr.ph547 ]
  %.5350.lcssa = phi i32 [ %.4349572, %._crit_edge541 ], [ %309, %.lr.ph547 ]
  %311 = add nsw i32 %.5350.lcssa, %264
  %312 = icmp sgt i32 %.4337574, -1
  br i1 %312, label %.lr.ph554, label %._crit_edge555

.lr.ph554:                                        ; preds = %._crit_edge548, %.lr.ph554
  %.5338552 = phi i32 [ %314, %.lr.ph554 ], [ %.4337574, %._crit_edge548 ]
  %.5344551 = phi i32 [ %313, %.lr.ph554 ], [ %.4343573, %._crit_edge548 ]
  %313 = add nsw i32 %.5344551, %271
  %314 = sub nsw i32 %.5338552, %290
  %315 = icmp sgt i32 %314, -1
  br i1 %315, label %.lr.ph554, label %._crit_edge555, !llvm.loop !43

._crit_edge555:                                   ; preds = %.lr.ph554, %._crit_edge548
  %.5344.lcssa = phi i32 [ %.4343573, %._crit_edge548 ], [ %313, %.lr.ph554 ]
  %.5338.lcssa = phi i32 [ %.4337574, %._crit_edge548 ], [ %314, %.lr.ph554 ]
  %316 = add nsw i32 %.5338.lcssa, %273
  %317 = icmp sgt i32 %.4576, -1
  br i1 %317, label %.lr.ph561, label %._crit_edge562

.lr.ph561:                                        ; preds = %._crit_edge555, %.lr.ph561
  %.5559 = phi i32 [ %319, %.lr.ph561 ], [ %.4576, %._crit_edge555 ]
  %.5332558 = phi i32 [ %318, %.lr.ph561 ], [ %.4331575, %._crit_edge555 ]
  %318 = add nsw i32 %.5332558, %278
  %319 = sub nsw i32 %.5559, %290
  %320 = icmp sgt i32 %319, -1
  br i1 %320, label %.lr.ph561, label %._crit_edge562, !llvm.loop !44

._crit_edge562:                                   ; preds = %.lr.ph561, %._crit_edge555
  %.5332.lcssa = phi i32 [ %.4331575, %._crit_edge555 ], [ %318, %.lr.ph561 ]
  %.5.lcssa = phi i32 [ %.4576, %._crit_edge555 ], [ %319, %.lr.ph561 ]
  %321 = add nsw i32 %.5.lcssa, %280
  %322 = getelementptr inbounds i8, ptr %.0373568, i64 3
  %323 = getelementptr inbounds i8, ptr %.0381566, i64 2
  %324 = add i32 %.4378567, 1
  %exitcond622.not = icmp eq i32 %.4378567, %246
  br i1 %exitcond622.not, label %._crit_edge579.loopexit, label %291, !llvm.loop !45

._crit_edge579.loopexit:                          ; preds = %._crit_edge562
  %.pre = load i32, ptr @_ZN16GraphicComponent15_bytes_per_lineE, align 4, !tbaa !38
  %.pre627 = load i32, ptr @_ZN16GraphicComponent6_widthE, align 4, !tbaa !38
  br label %._crit_edge579

._crit_edge579:                                   ; preds = %._crit_edge579.loopexit, %.lr.ph585
  %325 = phi i32 [ %.pre627, %._crit_edge579.loopexit ], [ %239, %.lr.ph585 ]
  %326 = phi i32 [ %.pre, %._crit_edge579.loopexit ], [ %240, %.lr.ph585 ]
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i8, ptr %.0379583, i64 %327
  %329 = sext i32 %325 to i64
  %330 = getelementptr inbounds i16, ptr %.0385581, i64 %329
  %indvars.iv.next624 = add nsw i64 %indvars.iv623, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next624 to i32
  %exitcond626.not = icmp eq i32 %238, %lftr.wideiv
  br i1 %exitcond626.not, label %.loopexit, label %.lr.ph585, !llvm.loop !46

.loopexit:                                        ; preds = %._crit_edge579, %._crit_edge536, %._crit_edge, %1
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN8GPolygon4SizeEv(ptr noundef nonnull align 8 dereferenceable(808)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN8GPolygonixEi(ptr noundef nonnull align 8 dereferenceable(808), i32 noundef) local_unnamed_addr #1 align 2

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

attributes #0 = { mustprogress 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 = { inlinehint mustprogress 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 nosync nounwind speculatable willreturn memory(none) }

!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, !8, i64 36}
!6 = !{!"_ZTS7GVertex", !7, i64 0, !8, i64 36, !8, i64 40, !11, i64 44, !11, i64 60, !11, i64 76, !11, i64 92, !11, i64 108, !12, i64 124}
!7 = !{!"_ZTS17GVertexAttributes", !8, i64 0, !8, i64 4, !8, i64 8, !8, i64 12, !8, i64 16, !8, i64 20, !8, i64 24, !8, i64 28, !8, i64 32}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"_ZTS7GVector", !9, i64 0}
!12 = !{!"_ZTS5Flags", !8, i64 0}
!13 = !{!6, !8, i64 40}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!7, !8, i64 8}
!17 = !{!7, !8, i64 12}
!18 = !{!7, !8, i64 16}
!19 = !{!7, !8, i64 0}
!20 = !{!21, !8, i64 164}
!21 = !{!"_ZTS3Mug", !6, i64 0, !6, i64 128}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = !{!21, !8, i64 36}
!29 = distinct !{!29, !15}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}
!34 = distinct !{!34, !15}
!35 = distinct !{!35, !15}
!36 = !{!37, !37, i64 0}
!37 = !{!"any pointer", !9, i64 0}
!38 = !{!8, !8, i64 0}
!39 = !{!40, !40, i64 0}
!40 = !{!"short", !9, i64 0}
!41 = distinct !{!41, !15}
!42 = distinct !{!42, !15}
!43 = distinct !{!43, !15}
!44 = distinct !{!44, !15}
!45 = distinct !{!45, !15}
!46 = distinct !{!46, !15}


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