; LLVM IR from simbody/simbody :: Simbody/Visualizer/simbody-visualizer (lodepng)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.LodePNG_InfoColor = type { i32, i32, ptr, i64, i32, i32, i32, i32 }

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z24LodePNG_InfoColor_getBppPK17LodePNG_InfoColor(ptr noundef) #1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z15LodePNG_convertPhPKhP17LodePNG_InfoColorS3_jj(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) #1 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store i32 %4, ptr %12, align 4, !tbaa !9
  store i32 %5, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %26 = load i32, ptr %12, align 4, !tbaa !9
  %27 = load i32, ptr %13, align 4, !tbaa !9
  %28 = mul i32 %26, %27
  %29 = zext i32 %28 to i64
  store i64 %29, ptr %14, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %30 = load ptr, ptr %10, align 8, !tbaa !5
  %31 = call noundef i32 @_Z24LodePNG_InfoColor_getBppPK17LodePNG_InfoColor(ptr noundef %30)
  %32 = udiv i32 %31, 8
  store i32 %32, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %33 = load ptr, ptr %10, align 8, !tbaa !5
  %34 = call noundef i32 @_Z29LodePNG_InfoColor_isAlphaTypePK17LodePNG_InfoColor(ptr noundef %33)
  store i32 %34, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  store i64 0, ptr %19, align 8, !tbaa !11
  %35 = load ptr, ptr %11, align 8, !tbaa !5
  %36 = load ptr, ptr %10, align 8, !tbaa !5
  %37 = call noundef i32 @_Z23LodePNG_InfoColor_equalPK17LodePNG_InfoColorS1_(ptr noundef %35, ptr noundef %36)
  %38 = icmp ne i32 %37, 0
  br i1 %38, label %39, label %65

39:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %40 = load i32, ptr %12, align 4, !tbaa !9
  %41 = load i32, ptr %13, align 4, !tbaa !9
  %42 = mul i32 %40, %41
  %43 = load ptr, ptr %11, align 8, !tbaa !5
  %44 = call noundef i32 @_Z24LodePNG_InfoColor_getBppPK17LodePNG_InfoColor(ptr noundef %43)
  %45 = mul i32 %42, %44
  %46 = add i32 %45, 7
  %47 = udiv i32 %46, 8
  %48 = zext i32 %47 to i64
  store i64 %48, ptr %21, align 8, !tbaa !11
  store i64 0, ptr %20, align 8, !tbaa !11
  br label %49

49:                                               ; preds = %61, %39
  %50 = load i64, ptr %20, align 8, !tbaa !11
  %51 = load i64, ptr %21, align 8, !tbaa !11
  %52 = icmp ult i64 %50, %51
  br i1 %52, label %53, label %64

53:                                               ; preds = %49
  %54 = load ptr, ptr %9, align 8, !tbaa !5
  %55 = load i64, ptr %20, align 8, !tbaa !11
  %56 = getelementptr inbounds i8, ptr %54, i64 %55
  %57 = load i8, ptr %56, align 1, !tbaa !13
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = load i64, ptr %20, align 8, !tbaa !11
  %60 = getelementptr inbounds i8, ptr %58, i64 %59
  store i8 %57, ptr %60, align 1, !tbaa !13
  br label %61

61:                                               ; preds = %53
  %62 = load i64, ptr %20, align 8, !tbaa !11
  %63 = add i64 %62, 1
  store i64 %63, ptr %20, align 8, !tbaa !11
  br label %49, !llvm.loop !14

64:                                               ; preds = %49
  store i32 0, ptr %7, align 4
  store i32 1, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  br label %1256

65:                                               ; preds = %6
  %66 = load ptr, ptr %10, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %66, i32 0, i32 0
  %68 = load i32, ptr %67, align 8, !tbaa !16
  %69 = icmp eq i32 %68, 2
  br i1 %69, label %75, label %70

70:                                               ; preds = %65
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %71, i32 0, i32 0
  %73 = load i32, ptr %72, align 8, !tbaa !16
  %74 = icmp eq i32 %73, 6
  br i1 %74, label %75, label %929

75:                                               ; preds = %70, %65
  %76 = load ptr, ptr %10, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %76, i32 0, i32 1
  %78 = load i32, ptr %77, align 4, !tbaa !18
  %79 = icmp eq i32 %78, 8
  br i1 %79, label %80, label %929

80:                                               ; preds = %75
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %81, i32 0, i32 1
  %83 = load i32, ptr %82, align 4, !tbaa !18
  %84 = icmp eq i32 %83, 8
  br i1 %84, label %85, label %432

85:                                               ; preds = %80
  %86 = load ptr, ptr %11, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %86, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !16
  switch i32 %88, label %430 [
    i32 0, label %89
    i32 2, label %169
    i32 3, label %265
    i32 4, label %329
    i32 6, label %395
  ]

89:                                               ; preds = %85
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %90

90:                                               ; preds = %165, %89
  %91 = load i64, ptr %17, align 8, !tbaa !11
  %92 = load i64, ptr %14, align 8, !tbaa !11
  %93 = icmp ult i64 %91, %92
  br i1 %93, label %94, label %168

94:                                               ; preds = %90
  %95 = load i32, ptr %16, align 4, !tbaa !9
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %97, label %105

97:                                               ; preds = %94
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = load i32, ptr %15, align 4, !tbaa !9
  %100 = zext i32 %99 to i64
  %101 = load i64, ptr %17, align 8, !tbaa !11
  %102 = mul i64 %100, %101
  %103 = add i64 %102, 3
  %104 = getelementptr inbounds i8, ptr %98, i64 %103
  store i8 -1, ptr %104, align 1, !tbaa !13
  br label %105

105:                                              ; preds = %97, %94
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = load i64, ptr %17, align 8, !tbaa !11
  %108 = getelementptr inbounds i8, ptr %106, i64 %107
  %109 = load i8, ptr %108, align 1, !tbaa !13
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = load i32, ptr %15, align 4, !tbaa !9
  %112 = zext i32 %111 to i64
  %113 = load i64, ptr %17, align 8, !tbaa !11
  %114 = mul i64 %112, %113
  %115 = add i64 %114, 0
  %116 = getelementptr inbounds i8, ptr %110, i64 %115
  store i8 %109, ptr %116, align 1, !tbaa !13
  %117 = load ptr, ptr %9, align 8, !tbaa !5
  %118 = load i64, ptr %17, align 8, !tbaa !11
  %119 = getelementptr inbounds i8, ptr %117, i64 %118
  %120 = load i8, ptr %119, align 1, !tbaa !13
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = load i32, ptr %15, align 4, !tbaa !9
  %123 = zext i32 %122 to i64
  %124 = load i64, ptr %17, align 8, !tbaa !11
  %125 = mul i64 %123, %124
  %126 = add i64 %125, 1
  %127 = getelementptr inbounds i8, ptr %121, i64 %126
  store i8 %120, ptr %127, align 1, !tbaa !13
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = load i64, ptr %17, align 8, !tbaa !11
  %130 = getelementptr inbounds i8, ptr %128, i64 %129
  %131 = load i8, ptr %130, align 1, !tbaa !13
  %132 = load ptr, ptr %8, align 8, !tbaa !5
  %133 = load i32, ptr %15, align 4, !tbaa !9
  %134 = zext i32 %133 to i64
  %135 = load i64, ptr %17, align 8, !tbaa !11
  %136 = mul i64 %134, %135
  %137 = add i64 %136, 2
  %138 = getelementptr inbounds i8, ptr %132, i64 %137
  store i8 %131, ptr %138, align 1, !tbaa !13
  %139 = load i32, ptr %16, align 4, !tbaa !9
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %141, label %164

141:                                              ; preds = %105
  %142 = load ptr, ptr %11, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %142, i32 0, i32 4
  %144 = load i32, ptr %143, align 8, !tbaa !19
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %146, label %164

146:                                              ; preds = %141
  %147 = load ptr, ptr %9, align 8, !tbaa !5
  %148 = load i64, ptr %17, align 8, !tbaa !11
  %149 = getelementptr inbounds i8, ptr %147, i64 %148
  %150 = load i8, ptr %149, align 1, !tbaa !13
  %151 = zext i8 %150 to i32
  %152 = load ptr, ptr %11, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %152, i32 0, i32 5
  %154 = load i32, ptr %153, align 4, !tbaa !20
  %155 = icmp eq i32 %151, %154
  br i1 %155, label %156, label %164

156:                                              ; preds = %146
  %157 = load ptr, ptr %8, align 8, !tbaa !5
  %158 = load i32, ptr %15, align 4, !tbaa !9
  %159 = zext i32 %158 to i64
  %160 = load i64, ptr %17, align 8, !tbaa !11
  %161 = mul i64 %159, %160
  %162 = add i64 %161, 3
  %163 = getelementptr inbounds i8, ptr %157, i64 %162
  store i8 0, ptr %163, align 1, !tbaa !13
  br label %164

164:                                              ; preds = %156, %146, %141, %105
  br label %165

165:                                              ; preds = %164
  %166 = load i64, ptr %17, align 8, !tbaa !11
  %167 = add i64 %166, 1
  store i64 %167, ptr %17, align 8, !tbaa !11
  br label %90, !llvm.loop !21

168:                                              ; preds = %90
  br label %431

169:                                              ; preds = %85
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %170

170:                                              ; preds = %261, %169
  %171 = load i64, ptr %17, align 8, !tbaa !11
  %172 = load i64, ptr %14, align 8, !tbaa !11
  %173 = icmp ult i64 %171, %172
  br i1 %173, label %174, label %264

174:                                              ; preds = %170
  %175 = load i32, ptr %16, align 4, !tbaa !9
  %176 = icmp ne i32 %175, 0
  br i1 %176, label %177, label %185

177:                                              ; preds = %174
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = load i32, ptr %15, align 4, !tbaa !9
  %180 = zext i32 %179 to i64
  %181 = load i64, ptr %17, align 8, !tbaa !11
  %182 = mul i64 %180, %181
  %183 = add i64 %182, 3
  %184 = getelementptr inbounds i8, ptr %178, i64 %183
  store i8 -1, ptr %184, align 1, !tbaa !13
  br label %185

185:                                              ; preds = %177, %174
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %186

186:                                              ; preds = %205, %185
  %187 = load i64, ptr %18, align 8, !tbaa !11
  %188 = icmp ult i64 %187, 3
  br i1 %188, label %189, label %208

189:                                              ; preds = %186
  %190 = load ptr, ptr %9, align 8, !tbaa !5
  %191 = load i64, ptr %17, align 8, !tbaa !11
  %192 = mul i64 3, %191
  %193 = load i64, ptr %18, align 8, !tbaa !11
  %194 = add i64 %192, %193
  %195 = getelementptr inbounds i8, ptr %190, i64 %194
  %196 = load i8, ptr %195, align 1, !tbaa !13
  %197 = load ptr, ptr %8, align 8, !tbaa !5
  %198 = load i32, ptr %15, align 4, !tbaa !9
  %199 = zext i32 %198 to i64
  %200 = load i64, ptr %17, align 8, !tbaa !11
  %201 = mul i64 %199, %200
  %202 = load i64, ptr %18, align 8, !tbaa !11
  %203 = add i64 %201, %202
  %204 = getelementptr inbounds i8, ptr %197, i64 %203
  store i8 %196, ptr %204, align 1, !tbaa !13
  br label %205

205:                                              ; preds = %189
  %206 = load i64, ptr %18, align 8, !tbaa !11
  %207 = add i64 %206, 1
  store i64 %207, ptr %18, align 8, !tbaa !11
  br label %186, !llvm.loop !22

208:                                              ; preds = %186
  %209 = load i32, ptr %16, align 4, !tbaa !9
  %210 = icmp ne i32 %209, 0
  br i1 %210, label %211, label %260

211:                                              ; preds = %208
  %212 = load ptr, ptr %11, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %212, i32 0, i32 4
  %214 = load i32, ptr %213, align 8, !tbaa !19
  %215 = icmp eq i32 %214, 1
  br i1 %215, label %216, label %260

216:                                              ; preds = %211
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = load i64, ptr %17, align 8, !tbaa !11
  %219 = mul i64 3, %218
  %220 = add i64 %219, 0
  %221 = getelementptr inbounds i8, ptr %217, i64 %220
  %222 = load i8, ptr %221, align 1, !tbaa !13
  %223 = zext i8 %222 to i32
  %224 = load ptr, ptr %11, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %224, i32 0, i32 5
  %226 = load i32, ptr %225, align 4, !tbaa !20
  %227 = icmp eq i32 %223, %226
  br i1 %227, label %228, label %260

228:                                              ; preds = %216
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = load i64, ptr %17, align 8, !tbaa !11
  %231 = mul i64 3, %230
  %232 = add i64 %231, 1
  %233 = getelementptr inbounds i8, ptr %229, i64 %232
  %234 = load i8, ptr %233, align 1, !tbaa !13
  %235 = zext i8 %234 to i32
  %236 = load ptr, ptr %11, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %236, i32 0, i32 6
  %238 = load i32, ptr %237, align 8, !tbaa !23
  %239 = icmp eq i32 %235, %238
  br i1 %239, label %240, label %260

240:                                              ; preds = %228
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  %242 = load i64, ptr %17, align 8, !tbaa !11
  %243 = mul i64 3, %242
  %244 = add i64 %243, 2
  %245 = getelementptr inbounds i8, ptr %241, i64 %244
  %246 = load i8, ptr %245, align 1, !tbaa !13
  %247 = zext i8 %246 to i32
  %248 = load ptr, ptr %11, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %248, i32 0, i32 7
  %250 = load i32, ptr %249, align 4, !tbaa !24
  %251 = icmp eq i32 %247, %250
  br i1 %251, label %252, label %260

252:                                              ; preds = %240
  %253 = load ptr, ptr %8, align 8, !tbaa !5
  %254 = load i32, ptr %15, align 4, !tbaa !9
  %255 = zext i32 %254 to i64
  %256 = load i64, ptr %17, align 8, !tbaa !11
  %257 = mul i64 %255, %256
  %258 = add i64 %257, 3
  %259 = getelementptr inbounds i8, ptr %253, i64 %258
  store i8 0, ptr %259, align 1, !tbaa !13
  br label %260

260:                                              ; preds = %252, %240, %228, %216, %211, %208
  br label %261

261:                                              ; preds = %260
  %262 = load i64, ptr %17, align 8, !tbaa !11
  %263 = add i64 %262, 1
  store i64 %263, ptr %17, align 8, !tbaa !11
  br label %170, !llvm.loop !25

264:                                              ; preds = %170
  br label %431

265:                                              ; preds = %85
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %266

266:                                              ; preds = %325, %265
  %267 = load i64, ptr %17, align 8, !tbaa !11
  %268 = load i64, ptr %14, align 8, !tbaa !11
  %269 = icmp ult i64 %267, %268
  br i1 %269, label %270, label %328

270:                                              ; preds = %266
  %271 = load i32, ptr %16, align 4, !tbaa !9
  %272 = icmp ne i32 %271, 0
  br i1 %272, label %273, label %281

273:                                              ; preds = %270
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = load i32, ptr %15, align 4, !tbaa !9
  %276 = zext i32 %275 to i64
  %277 = load i64, ptr %17, align 8, !tbaa !11
  %278 = mul i64 %276, %277
  %279 = add i64 %278, 3
  %280 = getelementptr inbounds i8, ptr %274, i64 %279
  store i8 -1, ptr %280, align 1, !tbaa !13
  br label %281

281:                                              ; preds = %273, %270
  %282 = load ptr, ptr %9, align 8, !tbaa !5
  %283 = load i64, ptr %17, align 8, !tbaa !11
  %284 = getelementptr inbounds i8, ptr %282, i64 %283
  %285 = load i8, ptr %284, align 1, !tbaa !13
  %286 = zext i8 %285 to i64
  %287 = load ptr, ptr %11, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %287, i32 0, i32 3
  %289 = load i64, ptr %288, align 8, !tbaa !26
  %290 = icmp uge i64 %286, %289
  br i1 %290, label %291, label %292

291:                                              ; preds = %281
  store i32 46, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

292:                                              ; preds = %281
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %293

293:                                              ; preds = %321, %292
  %294 = load i64, ptr %18, align 8, !tbaa !11
  %295 = load i32, ptr %15, align 4, !tbaa !9
  %296 = zext i32 %295 to i64
  %297 = icmp ult i64 %294, %296
  br i1 %297, label %298, label %324

298:                                              ; preds = %293
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %299, i32 0, i32 2
  %301 = load ptr, ptr %300, align 8, !tbaa !27
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = load i64, ptr %17, align 8, !tbaa !11
  %304 = getelementptr inbounds i8, ptr %302, i64 %303
  %305 = load i8, ptr %304, align 1, !tbaa !13
  %306 = zext i8 %305 to i32
  %307 = mul nsw i32 4, %306
  %308 = sext i32 %307 to i64
  %309 = load i64, ptr %18, align 8, !tbaa !11
  %310 = add i64 %308, %309
  %311 = getelementptr inbounds i8, ptr %301, i64 %310
  %312 = load i8, ptr %311, align 1, !tbaa !13
  %313 = load ptr, ptr %8, align 8, !tbaa !5
  %314 = load i32, ptr %15, align 4, !tbaa !9
  %315 = zext i32 %314 to i64
  %316 = load i64, ptr %17, align 8, !tbaa !11
  %317 = mul i64 %315, %316
  %318 = load i64, ptr %18, align 8, !tbaa !11
  %319 = add i64 %317, %318
  %320 = getelementptr inbounds i8, ptr %313, i64 %319
  store i8 %312, ptr %320, align 1, !tbaa !13
  br label %321

321:                                              ; preds = %298
  %322 = load i64, ptr %18, align 8, !tbaa !11
  %323 = add i64 %322, 1
  store i64 %323, ptr %18, align 8, !tbaa !11
  br label %293, !llvm.loop !28

324:                                              ; preds = %293
  br label %325

325:                                              ; preds = %324
  %326 = load i64, ptr %17, align 8, !tbaa !11
  %327 = add i64 %326, 1
  store i64 %327, ptr %17, align 8, !tbaa !11
  br label %266, !llvm.loop !29

328:                                              ; preds = %266
  br label %431

329:                                              ; preds = %85
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %330

330:                                              ; preds = %391, %329
  %331 = load i64, ptr %17, align 8, !tbaa !11
  %332 = load i64, ptr %14, align 8, !tbaa !11
  %333 = icmp ult i64 %331, %332
  br i1 %333, label %334, label %394

334:                                              ; preds = %330
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  %336 = load i64, ptr %17, align 8, !tbaa !11
  %337 = mul i64 2, %336
  %338 = add i64 %337, 0
  %339 = getelementptr inbounds i8, ptr %335, i64 %338
  %340 = load i8, ptr %339, align 1, !tbaa !13
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = load i32, ptr %15, align 4, !tbaa !9
  %343 = zext i32 %342 to i64
  %344 = load i64, ptr %17, align 8, !tbaa !11
  %345 = mul i64 %343, %344
  %346 = add i64 %345, 0
  %347 = getelementptr inbounds i8, ptr %341, i64 %346
  store i8 %340, ptr %347, align 1, !tbaa !13
  %348 = load ptr, ptr %9, align 8, !tbaa !5
  %349 = load i64, ptr %17, align 8, !tbaa !11
  %350 = mul i64 2, %349
  %351 = add i64 %350, 0
  %352 = getelementptr inbounds i8, ptr %348, i64 %351
  %353 = load i8, ptr %352, align 1, !tbaa !13
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = load i32, ptr %15, align 4, !tbaa !9
  %356 = zext i32 %355 to i64
  %357 = load i64, ptr %17, align 8, !tbaa !11
  %358 = mul i64 %356, %357
  %359 = add i64 %358, 1
  %360 = getelementptr inbounds i8, ptr %354, i64 %359
  store i8 %353, ptr %360, align 1, !tbaa !13
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = load i64, ptr %17, align 8, !tbaa !11
  %363 = mul i64 2, %362
  %364 = add i64 %363, 0
  %365 = getelementptr inbounds i8, ptr %361, i64 %364
  %366 = load i8, ptr %365, align 1, !tbaa !13
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = load i32, ptr %15, align 4, !tbaa !9
  %369 = zext i32 %368 to i64
  %370 = load i64, ptr %17, align 8, !tbaa !11
  %371 = mul i64 %369, %370
  %372 = add i64 %371, 2
  %373 = getelementptr inbounds i8, ptr %367, i64 %372
  store i8 %366, ptr %373, align 1, !tbaa !13
  %374 = load i32, ptr %16, align 4, !tbaa !9
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %390

376:                                              ; preds = %334
  %377 = load ptr, ptr %9, align 8, !tbaa !5
  %378 = load i64, ptr %17, align 8, !tbaa !11
  %379 = mul i64 2, %378
  %380 = add i64 %379, 1
  %381 = getelementptr inbounds i8, ptr %377, i64 %380
  %382 = load i8, ptr %381, align 1, !tbaa !13
  %383 = load ptr, ptr %8, align 8, !tbaa !5
  %384 = load i32, ptr %15, align 4, !tbaa !9
  %385 = zext i32 %384 to i64
  %386 = load i64, ptr %17, align 8, !tbaa !11
  %387 = mul i64 %385, %386
  %388 = add i64 %387, 3
  %389 = getelementptr inbounds i8, ptr %383, i64 %388
  store i8 %382, ptr %389, align 1, !tbaa !13
  br label %390

390:                                              ; preds = %376, %334
  br label %391

391:                                              ; preds = %390
  %392 = load i64, ptr %17, align 8, !tbaa !11
  %393 = add i64 %392, 1
  store i64 %393, ptr %17, align 8, !tbaa !11
  br label %330, !llvm.loop !30

394:                                              ; preds = %330
  br label %431

395:                                              ; preds = %85
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %396

396:                                              ; preds = %426, %395
  %397 = load i64, ptr %17, align 8, !tbaa !11
  %398 = load i64, ptr %14, align 8, !tbaa !11
  %399 = icmp ult i64 %397, %398
  br i1 %399, label %400, label %429

400:                                              ; preds = %396
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %401

401:                                              ; preds = %422, %400
  %402 = load i64, ptr %18, align 8, !tbaa !11
  %403 = load i32, ptr %15, align 4, !tbaa !9
  %404 = zext i32 %403 to i64
  %405 = icmp ult i64 %402, %404
  br i1 %405, label %406, label %425

406:                                              ; preds = %401
  %407 = load ptr, ptr %9, align 8, !tbaa !5
  %408 = load i64, ptr %17, align 8, !tbaa !11
  %409 = mul i64 4, %408
  %410 = load i64, ptr %18, align 8, !tbaa !11
  %411 = add i64 %409, %410
  %412 = getelementptr inbounds i8, ptr %407, i64 %411
  %413 = load i8, ptr %412, align 1, !tbaa !13
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = load i32, ptr %15, align 4, !tbaa !9
  %416 = zext i32 %415 to i64
  %417 = load i64, ptr %17, align 8, !tbaa !11
  %418 = mul i64 %416, %417
  %419 = load i64, ptr %18, align 8, !tbaa !11
  %420 = add i64 %418, %419
  %421 = getelementptr inbounds i8, ptr %414, i64 %420
  store i8 %413, ptr %421, align 1, !tbaa !13
  br label %422

422:                                              ; preds = %406
  %423 = load i64, ptr %18, align 8, !tbaa !11
  %424 = add i64 %423, 1
  store i64 %424, ptr %18, align 8, !tbaa !11
  br label %401, !llvm.loop !31

425:                                              ; preds = %401
  br label %426

426:                                              ; preds = %425
  %427 = load i64, ptr %17, align 8, !tbaa !11
  %428 = add i64 %427, 1
  store i64 %428, ptr %17, align 8, !tbaa !11
  br label %396, !llvm.loop !32

429:                                              ; preds = %396
  br label %431

430:                                              ; preds = %85
  br label %431

431:                                              ; preds = %430, %429, %394, %328, %264, %168
  br label %928

432:                                              ; preds = %80
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %433, i32 0, i32 1
  %435 = load i32, ptr %434, align 4, !tbaa !18
  %436 = icmp eq i32 %435, 16
  br i1 %436, label %437, label %757

437:                                              ; preds = %432
  %438 = load ptr, ptr %11, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %438, i32 0, i32 0
  %440 = load i32, ptr %439, align 8, !tbaa !16
  switch i32 %440, label %755 [
    i32 0, label %441
    i32 2, label %532
    i32 4, label %656
    i32 6, label %719
  ]

441:                                              ; preds = %437
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %442

442:                                              ; preds = %528, %441
  %443 = load i64, ptr %17, align 8, !tbaa !11
  %444 = load i64, ptr %14, align 8, !tbaa !11
  %445 = icmp ult i64 %443, %444
  br i1 %445, label %446, label %531

446:                                              ; preds = %442
  %447 = load i32, ptr %16, align 4, !tbaa !9
  %448 = icmp ne i32 %447, 0
  br i1 %448, label %449, label %457

449:                                              ; preds = %446
  %450 = load ptr, ptr %8, align 8, !tbaa !5
  %451 = load i32, ptr %15, align 4, !tbaa !9
  %452 = zext i32 %451 to i64
  %453 = load i64, ptr %17, align 8, !tbaa !11
  %454 = mul i64 %452, %453
  %455 = add i64 %454, 3
  %456 = getelementptr inbounds i8, ptr %450, i64 %455
  store i8 -1, ptr %456, align 1, !tbaa !13
  br label %457

457:                                              ; preds = %449, %446
  %458 = load ptr, ptr %9, align 8, !tbaa !5
  %459 = load i64, ptr %17, align 8, !tbaa !11
  %460 = mul i64 2, %459
  %461 = getelementptr inbounds i8, ptr %458, i64 %460
  %462 = load i8, ptr %461, align 1, !tbaa !13
  %463 = load ptr, ptr %8, align 8, !tbaa !5
  %464 = load i32, ptr %15, align 4, !tbaa !9
  %465 = zext i32 %464 to i64
  %466 = load i64, ptr %17, align 8, !tbaa !11
  %467 = mul i64 %465, %466
  %468 = add i64 %467, 0
  %469 = getelementptr inbounds i8, ptr %463, i64 %468
  store i8 %462, ptr %469, align 1, !tbaa !13
  %470 = load ptr, ptr %9, align 8, !tbaa !5
  %471 = load i64, ptr %17, align 8, !tbaa !11
  %472 = mul i64 2, %471
  %473 = getelementptr inbounds i8, ptr %470, i64 %472
  %474 = load i8, ptr %473, align 1, !tbaa !13
  %475 = load ptr, ptr %8, align 8, !tbaa !5
  %476 = load i32, ptr %15, align 4, !tbaa !9
  %477 = zext i32 %476 to i64
  %478 = load i64, ptr %17, align 8, !tbaa !11
  %479 = mul i64 %477, %478
  %480 = add i64 %479, 1
  %481 = getelementptr inbounds i8, ptr %475, i64 %480
  store i8 %474, ptr %481, align 1, !tbaa !13
  %482 = load ptr, ptr %9, align 8, !tbaa !5
  %483 = load i64, ptr %17, align 8, !tbaa !11
  %484 = mul i64 2, %483
  %485 = getelementptr inbounds i8, ptr %482, i64 %484
  %486 = load i8, ptr %485, align 1, !tbaa !13
  %487 = load ptr, ptr %8, align 8, !tbaa !5
  %488 = load i32, ptr %15, align 4, !tbaa !9
  %489 = zext i32 %488 to i64
  %490 = load i64, ptr %17, align 8, !tbaa !11
  %491 = mul i64 %489, %490
  %492 = add i64 %491, 2
  %493 = getelementptr inbounds i8, ptr %487, i64 %492
  store i8 %486, ptr %493, align 1, !tbaa !13
  %494 = load i32, ptr %16, align 4, !tbaa !9
  %495 = icmp ne i32 %494, 0
  br i1 %495, label %496, label %527

496:                                              ; preds = %457
  %497 = load ptr, ptr %11, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %497, i32 0, i32 4
  %499 = load i32, ptr %498, align 8, !tbaa !19
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %501, label %527

501:                                              ; preds = %496
  %502 = load ptr, ptr %9, align 8, !tbaa !5
  %503 = load i64, ptr %17, align 8, !tbaa !11
  %504 = getelementptr inbounds i8, ptr %502, i64 %503
  %505 = load i8, ptr %504, align 1, !tbaa !13
  %506 = zext i8 %505 to i32
  %507 = mul i32 256, %506
  %508 = load ptr, ptr %9, align 8, !tbaa !5
  %509 = load i64, ptr %17, align 8, !tbaa !11
  %510 = add i64 %509, 1
  %511 = getelementptr inbounds i8, ptr %508, i64 %510
  %512 = load i8, ptr %511, align 1, !tbaa !13
  %513 = zext i8 %512 to i32
  %514 = add i32 %507, %513
  %515 = load ptr, ptr %11, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %515, i32 0, i32 5
  %517 = load i32, ptr %516, align 4, !tbaa !20
  %518 = icmp eq i32 %514, %517
  br i1 %518, label %519, label %527

519:                                              ; preds = %501
  %520 = load ptr, ptr %8, align 8, !tbaa !5
  %521 = load i32, ptr %15, align 4, !tbaa !9
  %522 = zext i32 %521 to i64
  %523 = load i64, ptr %17, align 8, !tbaa !11
  %524 = mul i64 %522, %523
  %525 = add i64 %524, 3
  %526 = getelementptr inbounds i8, ptr %520, i64 %525
  store i8 0, ptr %526, align 1, !tbaa !13
  br label %527

527:                                              ; preds = %519, %501, %496, %457
  br label %528

528:                                              ; preds = %527
  %529 = load i64, ptr %17, align 8, !tbaa !11
  %530 = add i64 %529, 1
  store i64 %530, ptr %17, align 8, !tbaa !11
  br label %442, !llvm.loop !33

531:                                              ; preds = %442
  br label %756

532:                                              ; preds = %437
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %533

533:                                              ; preds = %652, %532
  %534 = load i64, ptr %17, align 8, !tbaa !11
  %535 = load i64, ptr %14, align 8, !tbaa !11
  %536 = icmp ult i64 %534, %535
  br i1 %536, label %537, label %655

537:                                              ; preds = %533
  %538 = load i32, ptr %16, align 4, !tbaa !9
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %548

540:                                              ; preds = %537
  %541 = load ptr, ptr %8, align 8, !tbaa !5
  %542 = load i32, ptr %15, align 4, !tbaa !9
  %543 = zext i32 %542 to i64
  %544 = load i64, ptr %17, align 8, !tbaa !11
  %545 = mul i64 %543, %544
  %546 = add i64 %545, 3
  %547 = getelementptr inbounds i8, ptr %541, i64 %546
  store i8 -1, ptr %547, align 1, !tbaa !13
  br label %548

548:                                              ; preds = %540, %537
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %549

549:                                              ; preds = %569, %548
  %550 = load i64, ptr %18, align 8, !tbaa !11
  %551 = icmp ult i64 %550, 3
  br i1 %551, label %552, label %572

552:                                              ; preds = %549
  %553 = load ptr, ptr %9, align 8, !tbaa !5
  %554 = load i64, ptr %17, align 8, !tbaa !11
  %555 = mul i64 6, %554
  %556 = load i64, ptr %18, align 8, !tbaa !11
  %557 = mul i64 2, %556
  %558 = add i64 %555, %557
  %559 = getelementptr inbounds i8, ptr %553, i64 %558
  %560 = load i8, ptr %559, align 1, !tbaa !13
  %561 = load ptr, ptr %8, align 8, !tbaa !5
  %562 = load i32, ptr %15, align 4, !tbaa !9
  %563 = zext i32 %562 to i64
  %564 = load i64, ptr %17, align 8, !tbaa !11
  %565 = mul i64 %563, %564
  %566 = load i64, ptr %18, align 8, !tbaa !11
  %567 = add i64 %565, %566
  %568 = getelementptr inbounds i8, ptr %561, i64 %567
  store i8 %560, ptr %568, align 1, !tbaa !13
  br label %569

569:                                              ; preds = %552
  %570 = load i64, ptr %18, align 8, !tbaa !11
  %571 = add i64 %570, 1
  store i64 %571, ptr %18, align 8, !tbaa !11
  br label %549, !llvm.loop !34

572:                                              ; preds = %549
  %573 = load i32, ptr %16, align 4, !tbaa !9
  %574 = icmp ne i32 %573, 0
  br i1 %574, label %575, label %651

575:                                              ; preds = %572
  %576 = load ptr, ptr %11, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %576, i32 0, i32 4
  %578 = load i32, ptr %577, align 8, !tbaa !19
  %579 = icmp ne i32 %578, 0
  br i1 %579, label %580, label %651

580:                                              ; preds = %575
  %581 = load ptr, ptr %9, align 8, !tbaa !5
  %582 = load i64, ptr %17, align 8, !tbaa !11
  %583 = mul i64 6, %582
  %584 = add i64 %583, 0
  %585 = getelementptr inbounds i8, ptr %581, i64 %584
  %586 = load i8, ptr %585, align 1, !tbaa !13
  %587 = zext i8 %586 to i32
  %588 = mul i32 256, %587
  %589 = load ptr, ptr %9, align 8, !tbaa !5
  %590 = load i64, ptr %17, align 8, !tbaa !11
  %591 = mul i64 6, %590
  %592 = add i64 %591, 1
  %593 = getelementptr inbounds i8, ptr %589, i64 %592
  %594 = load i8, ptr %593, align 1, !tbaa !13
  %595 = zext i8 %594 to i32
  %596 = add i32 %588, %595
  %597 = load ptr, ptr %11, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %597, i32 0, i32 5
  %599 = load i32, ptr %598, align 4, !tbaa !20
  %600 = icmp eq i32 %596, %599
  br i1 %600, label %601, label %651

601:                                              ; preds = %580
  %602 = load ptr, ptr %9, align 8, !tbaa !5
  %603 = load i64, ptr %17, align 8, !tbaa !11
  %604 = mul i64 6, %603
  %605 = add i64 %604, 2
  %606 = getelementptr inbounds i8, ptr %602, i64 %605
  %607 = load i8, ptr %606, align 1, !tbaa !13
  %608 = zext i8 %607 to i32
  %609 = mul i32 256, %608
  %610 = load ptr, ptr %9, align 8, !tbaa !5
  %611 = load i64, ptr %17, align 8, !tbaa !11
  %612 = mul i64 6, %611
  %613 = add i64 %612, 3
  %614 = getelementptr inbounds i8, ptr %610, i64 %613
  %615 = load i8, ptr %614, align 1, !tbaa !13
  %616 = zext i8 %615 to i32
  %617 = add i32 %609, %616
  %618 = load ptr, ptr %11, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %618, i32 0, i32 6
  %620 = load i32, ptr %619, align 8, !tbaa !23
  %621 = icmp eq i32 %617, %620
  br i1 %621, label %622, label %651

622:                                              ; preds = %601
  %623 = load ptr, ptr %9, align 8, !tbaa !5
  %624 = load i64, ptr %17, align 8, !tbaa !11
  %625 = mul i64 6, %624
  %626 = add i64 %625, 4
  %627 = getelementptr inbounds i8, ptr %623, i64 %626
  %628 = load i8, ptr %627, align 1, !tbaa !13
  %629 = zext i8 %628 to i32
  %630 = mul i32 256, %629
  %631 = load ptr, ptr %9, align 8, !tbaa !5
  %632 = load i64, ptr %17, align 8, !tbaa !11
  %633 = mul i64 6, %632
  %634 = add i64 %633, 5
  %635 = getelementptr inbounds i8, ptr %631, i64 %634
  %636 = load i8, ptr %635, align 1, !tbaa !13
  %637 = zext i8 %636 to i32
  %638 = add i32 %630, %637
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %639, i32 0, i32 7
  %641 = load i32, ptr %640, align 4, !tbaa !24
  %642 = icmp eq i32 %638, %641
  br i1 %642, label %643, label %651

643:                                              ; preds = %622
  %644 = load ptr, ptr %8, align 8, !tbaa !5
  %645 = load i32, ptr %15, align 4, !tbaa !9
  %646 = zext i32 %645 to i64
  %647 = load i64, ptr %17, align 8, !tbaa !11
  %648 = mul i64 %646, %647
  %649 = add i64 %648, 3
  %650 = getelementptr inbounds i8, ptr %644, i64 %649
  store i8 0, ptr %650, align 1, !tbaa !13
  br label %651

651:                                              ; preds = %643, %622, %601, %580, %575, %572
  br label %652

652:                                              ; preds = %651
  %653 = load i64, ptr %17, align 8, !tbaa !11
  %654 = add i64 %653, 1
  store i64 %654, ptr %17, align 8, !tbaa !11
  br label %533, !llvm.loop !35

655:                                              ; preds = %533
  br label %756

656:                                              ; preds = %437
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %657

657:                                              ; preds = %715, %656
  %658 = load i64, ptr %17, align 8, !tbaa !11
  %659 = load i64, ptr %14, align 8, !tbaa !11
  %660 = icmp ult i64 %658, %659
  br i1 %660, label %661, label %718

661:                                              ; preds = %657
  %662 = load ptr, ptr %9, align 8, !tbaa !5
  %663 = load i64, ptr %17, align 8, !tbaa !11
  %664 = mul i64 4, %663
  %665 = getelementptr inbounds i8, ptr %662, i64 %664
  %666 = load i8, ptr %665, align 1, !tbaa !13
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = load i32, ptr %15, align 4, !tbaa !9
  %669 = zext i32 %668 to i64
  %670 = load i64, ptr %17, align 8, !tbaa !11
  %671 = mul i64 %669, %670
  %672 = add i64 %671, 0
  %673 = getelementptr inbounds i8, ptr %667, i64 %672
  store i8 %666, ptr %673, align 1, !tbaa !13
  %674 = load ptr, ptr %9, align 8, !tbaa !5
  %675 = load i64, ptr %17, align 8, !tbaa !11
  %676 = mul i64 4, %675
  %677 = getelementptr inbounds i8, ptr %674, i64 %676
  %678 = load i8, ptr %677, align 1, !tbaa !13
  %679 = load ptr, ptr %8, align 8, !tbaa !5
  %680 = load i32, ptr %15, align 4, !tbaa !9
  %681 = zext i32 %680 to i64
  %682 = load i64, ptr %17, align 8, !tbaa !11
  %683 = mul i64 %681, %682
  %684 = add i64 %683, 1
  %685 = getelementptr inbounds i8, ptr %679, i64 %684
  store i8 %678, ptr %685, align 1, !tbaa !13
  %686 = load ptr, ptr %9, align 8, !tbaa !5
  %687 = load i64, ptr %17, align 8, !tbaa !11
  %688 = mul i64 4, %687
  %689 = getelementptr inbounds i8, ptr %686, i64 %688
  %690 = load i8, ptr %689, align 1, !tbaa !13
  %691 = load ptr, ptr %8, align 8, !tbaa !5
  %692 = load i32, ptr %15, align 4, !tbaa !9
  %693 = zext i32 %692 to i64
  %694 = load i64, ptr %17, align 8, !tbaa !11
  %695 = mul i64 %693, %694
  %696 = add i64 %695, 2
  %697 = getelementptr inbounds i8, ptr %691, i64 %696
  store i8 %690, ptr %697, align 1, !tbaa !13
  %698 = load i32, ptr %16, align 4, !tbaa !9
  %699 = icmp ne i32 %698, 0
  br i1 %699, label %700, label %714

700:                                              ; preds = %661
  %701 = load ptr, ptr %9, align 8, !tbaa !5
  %702 = load i64, ptr %17, align 8, !tbaa !11
  %703 = mul i64 4, %702
  %704 = add i64 %703, 2
  %705 = getelementptr inbounds i8, ptr %701, i64 %704
  %706 = load i8, ptr %705, align 1, !tbaa !13
  %707 = load ptr, ptr %8, align 8, !tbaa !5
  %708 = load i32, ptr %15, align 4, !tbaa !9
  %709 = zext i32 %708 to i64
  %710 = load i64, ptr %17, align 8, !tbaa !11
  %711 = mul i64 %709, %710
  %712 = add i64 %711, 3
  %713 = getelementptr inbounds i8, ptr %707, i64 %712
  store i8 %706, ptr %713, align 1, !tbaa !13
  br label %714

714:                                              ; preds = %700, %661
  br label %715

715:                                              ; preds = %714
  %716 = load i64, ptr %17, align 8, !tbaa !11
  %717 = add i64 %716, 1
  store i64 %717, ptr %17, align 8, !tbaa !11
  br label %657, !llvm.loop !36

718:                                              ; preds = %657
  br label %756

719:                                              ; preds = %437
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %720

720:                                              ; preds = %751, %719
  %721 = load i64, ptr %17, align 8, !tbaa !11
  %722 = load i64, ptr %14, align 8, !tbaa !11
  %723 = icmp ult i64 %721, %722
  br i1 %723, label %724, label %754

724:                                              ; preds = %720
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %725

725:                                              ; preds = %747, %724
  %726 = load i64, ptr %18, align 8, !tbaa !11
  %727 = load i32, ptr %15, align 4, !tbaa !9
  %728 = zext i32 %727 to i64
  %729 = icmp ult i64 %726, %728
  br i1 %729, label %730, label %750

730:                                              ; preds = %725
  %731 = load ptr, ptr %9, align 8, !tbaa !5
  %732 = load i64, ptr %17, align 8, !tbaa !11
  %733 = mul i64 8, %732
  %734 = load i64, ptr %18, align 8, !tbaa !11
  %735 = mul i64 2, %734
  %736 = add i64 %733, %735
  %737 = getelementptr inbounds i8, ptr %731, i64 %736
  %738 = load i8, ptr %737, align 1, !tbaa !13
  %739 = load ptr, ptr %8, align 8, !tbaa !5
  %740 = load i32, ptr %15, align 4, !tbaa !9
  %741 = zext i32 %740 to i64
  %742 = load i64, ptr %17, align 8, !tbaa !11
  %743 = mul i64 %741, %742
  %744 = load i64, ptr %18, align 8, !tbaa !11
  %745 = add i64 %743, %744
  %746 = getelementptr inbounds i8, ptr %739, i64 %745
  store i8 %738, ptr %746, align 1, !tbaa !13
  br label %747

747:                                              ; preds = %730
  %748 = load i64, ptr %18, align 8, !tbaa !11
  %749 = add i64 %748, 1
  store i64 %749, ptr %18, align 8, !tbaa !11
  br label %725, !llvm.loop !37

750:                                              ; preds = %725
  br label %751

751:                                              ; preds = %750
  %752 = load i64, ptr %17, align 8, !tbaa !11
  %753 = add i64 %752, 1
  store i64 %753, ptr %17, align 8, !tbaa !11
  br label %720, !llvm.loop !38

754:                                              ; preds = %720
  br label %756

755:                                              ; preds = %437
  br label %756

756:                                              ; preds = %755, %754, %718, %655, %531
  br label %927

757:                                              ; preds = %432
  %758 = load ptr, ptr %11, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %758, i32 0, i32 0
  %760 = load i32, ptr %759, align 8, !tbaa !16
  switch i32 %760, label %925 [
    i32 0, label %761
    i32 3, label %859
  ]

761:                                              ; preds = %757
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %762

762:                                              ; preds = %855, %761
  %763 = load i64, ptr %17, align 8, !tbaa !11
  %764 = load i64, ptr %14, align 8, !tbaa !11
  %765 = icmp ult i64 %763, %764
  br i1 %765, label %766, label %858

766:                                              ; preds = %762
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %767 = load ptr, ptr %9, align 8, !tbaa !5
  %768 = load ptr, ptr %11, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %768, i32 0, i32 1
  %770 = load i32, ptr %769, align 4, !tbaa !18
  %771 = zext i32 %770 to i64
  %772 = call noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef %19, ptr noundef %767, i64 noundef %771)
  store i32 %772, ptr %23, align 4, !tbaa !9
  %773 = load i32, ptr %16, align 4, !tbaa !9
  %774 = icmp ne i32 %773, 0
  br i1 %774, label %775, label %783

775:                                              ; preds = %766
  %776 = load ptr, ptr %8, align 8, !tbaa !5
  %777 = load i32, ptr %15, align 4, !tbaa !9
  %778 = zext i32 %777 to i64
  %779 = load i64, ptr %17, align 8, !tbaa !11
  %780 = mul i64 %778, %779
  %781 = add i64 %780, 3
  %782 = getelementptr inbounds i8, ptr %776, i64 %781
  store i8 -1, ptr %782, align 1, !tbaa !13
  br label %783

783:                                              ; preds = %775, %766
  %784 = load i32, ptr %16, align 4, !tbaa !9
  %785 = icmp ne i32 %784, 0
  br i1 %785, label %786, label %819

786:                                              ; preds = %783
  %787 = load ptr, ptr %11, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %787, i32 0, i32 4
  %789 = load i32, ptr %788, align 8, !tbaa !19
  %790 = icmp ne i32 %789, 0
  br i1 %790, label %791, label %819

791:                                              ; preds = %786
  %792 = load i32, ptr %23, align 4, !tbaa !9
  %793 = icmp ne i32 %792, 0
  br i1 %793, label %794, label %819

794:                                              ; preds = %791
  %795 = load ptr, ptr %11, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %795, i32 0, i32 1
  %797 = load i32, ptr %796, align 4, !tbaa !18
  %798 = shl i32 1, %797
  %799 = sub i32 %798, 1
  %800 = load ptr, ptr %11, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %800, i32 0, i32 5
  %802 = load i32, ptr %801, align 4, !tbaa !20
  %803 = icmp eq i32 %799, %802
  br i1 %803, label %804, label %819

804:                                              ; preds = %794
  %805 = load ptr, ptr %11, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %805, i32 0, i32 1
  %807 = load i32, ptr %806, align 4, !tbaa !18
  %808 = shl i32 1, %807
  %809 = sub i32 %808, 1
  %810 = icmp ne i32 %809, 0
  br i1 %810, label %811, label %819

811:                                              ; preds = %804
  %812 = load ptr, ptr %8, align 8, !tbaa !5
  %813 = load i32, ptr %15, align 4, !tbaa !9
  %814 = zext i32 %813 to i64
  %815 = load i64, ptr %17, align 8, !tbaa !11
  %816 = mul i64 %814, %815
  %817 = add i64 %816, 3
  %818 = getelementptr inbounds i8, ptr %812, i64 %817
  store i8 0, ptr %818, align 1, !tbaa !13
  br label %819

819:                                              ; preds = %811, %804, %794, %791, %786, %783
  %820 = load i32, ptr %23, align 4, !tbaa !9
  %821 = mul i32 %820, 255
  %822 = load ptr, ptr %11, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %822, i32 0, i32 1
  %824 = load i32, ptr %823, align 4, !tbaa !18
  %825 = shl i32 1, %824
  %826 = sub nsw i32 %825, 1
  %827 = udiv i32 %821, %826
  store i32 %827, ptr %23, align 4, !tbaa !9
  %828 = load i32, ptr %23, align 4, !tbaa !9
  %829 = trunc i32 %828 to i8
  %830 = load ptr, ptr %8, align 8, !tbaa !5
  %831 = load i32, ptr %15, align 4, !tbaa !9
  %832 = zext i32 %831 to i64
  %833 = load i64, ptr %17, align 8, !tbaa !11
  %834 = mul i64 %832, %833
  %835 = add i64 %834, 0
  %836 = getelementptr inbounds i8, ptr %830, i64 %835
  store i8 %829, ptr %836, align 1, !tbaa !13
  %837 = load i32, ptr %23, align 4, !tbaa !9
  %838 = trunc i32 %837 to i8
  %839 = load ptr, ptr %8, align 8, !tbaa !5
  %840 = load i32, ptr %15, align 4, !tbaa !9
  %841 = zext i32 %840 to i64
  %842 = load i64, ptr %17, align 8, !tbaa !11
  %843 = mul i64 %841, %842
  %844 = add i64 %843, 1
  %845 = getelementptr inbounds i8, ptr %839, i64 %844
  store i8 %838, ptr %845, align 1, !tbaa !13
  %846 = load i32, ptr %23, align 4, !tbaa !9
  %847 = trunc i32 %846 to i8
  %848 = load ptr, ptr %8, align 8, !tbaa !5
  %849 = load i32, ptr %15, align 4, !tbaa !9
  %850 = zext i32 %849 to i64
  %851 = load i64, ptr %17, align 8, !tbaa !11
  %852 = mul i64 %850, %851
  %853 = add i64 %852, 2
  %854 = getelementptr inbounds i8, ptr %848, i64 %853
  store i8 %847, ptr %854, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %855

855:                                              ; preds = %819
  %856 = load i64, ptr %17, align 8, !tbaa !11
  %857 = add i64 %856, 1
  store i64 %857, ptr %17, align 8, !tbaa !11
  br label %762, !llvm.loop !39

858:                                              ; preds = %762
  br label %926

859:                                              ; preds = %757
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %860

860:                                              ; preds = %921, %859
  %861 = load i64, ptr %17, align 8, !tbaa !11
  %862 = load i64, ptr %14, align 8, !tbaa !11
  %863 = icmp ult i64 %861, %862
  br i1 %863, label %864, label %924

864:                                              ; preds = %860
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %865 = load ptr, ptr %9, align 8, !tbaa !5
  %866 = load ptr, ptr %11, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %866, i32 0, i32 1
  %868 = load i32, ptr %867, align 4, !tbaa !18
  %869 = zext i32 %868 to i64
  %870 = call noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef %19, ptr noundef %865, i64 noundef %869)
  store i32 %870, ptr %24, align 4, !tbaa !9
  %871 = load i32, ptr %16, align 4, !tbaa !9
  %872 = icmp ne i32 %871, 0
  br i1 %872, label %873, label %881

873:                                              ; preds = %864
  %874 = load ptr, ptr %8, align 8, !tbaa !5
  %875 = load i32, ptr %15, align 4, !tbaa !9
  %876 = zext i32 %875 to i64
  %877 = load i64, ptr %17, align 8, !tbaa !11
  %878 = mul i64 %876, %877
  %879 = add i64 %878, 3
  %880 = getelementptr inbounds i8, ptr %874, i64 %879
  store i8 -1, ptr %880, align 1, !tbaa !13
  br label %881

881:                                              ; preds = %873, %864
  %882 = load i32, ptr %24, align 4, !tbaa !9
  %883 = zext i32 %882 to i64
  %884 = load ptr, ptr %11, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %884, i32 0, i32 3
  %886 = load i64, ptr %885, align 8, !tbaa !26
  %887 = icmp uge i64 %883, %886
  br i1 %887, label %888, label %889

888:                                              ; preds = %881
  store i32 47, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %918

889:                                              ; preds = %881
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %890

890:                                              ; preds = %914, %889
  %891 = load i64, ptr %18, align 8, !tbaa !11
  %892 = load i32, ptr %15, align 4, !tbaa !9
  %893 = zext i32 %892 to i64
  %894 = icmp ult i64 %891, %893
  br i1 %894, label %895, label %917

895:                                              ; preds = %890
  %896 = load ptr, ptr %11, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %896, i32 0, i32 2
  %898 = load ptr, ptr %897, align 8, !tbaa !27
  %899 = load i32, ptr %24, align 4, !tbaa !9
  %900 = mul i32 4, %899
  %901 = zext i32 %900 to i64
  %902 = load i64, ptr %18, align 8, !tbaa !11
  %903 = add i64 %901, %902
  %904 = getelementptr inbounds i8, ptr %898, i64 %903
  %905 = load i8, ptr %904, align 1, !tbaa !13
  %906 = load ptr, ptr %8, align 8, !tbaa !5
  %907 = load i32, ptr %15, align 4, !tbaa !9
  %908 = zext i32 %907 to i64
  %909 = load i64, ptr %17, align 8, !tbaa !11
  %910 = mul i64 %908, %909
  %911 = load i64, ptr %18, align 8, !tbaa !11
  %912 = add i64 %910, %911
  %913 = getelementptr inbounds i8, ptr %906, i64 %912
  store i8 %905, ptr %913, align 1, !tbaa !13
  br label %914

914:                                              ; preds = %895
  %915 = load i64, ptr %18, align 8, !tbaa !11
  %916 = add i64 %915, 1
  store i64 %916, ptr %18, align 8, !tbaa !11
  br label %890, !llvm.loop !40

917:                                              ; preds = %890
  store i32 0, ptr %22, align 4
  br label %918

918:                                              ; preds = %917, %888
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  %919 = load i32, ptr %22, align 4
  switch i32 %919, label %1256 [
    i32 0, label %920
  ]

920:                                              ; preds = %918
  br label %921

921:                                              ; preds = %920
  %922 = load i64, ptr %17, align 8, !tbaa !11
  %923 = add i64 %922, 1
  store i64 %923, ptr %17, align 8, !tbaa !11
  br label %860, !llvm.loop !41

924:                                              ; preds = %860
  br label %926

925:                                              ; preds = %757
  br label %926

926:                                              ; preds = %925, %924, %858
  br label %927

927:                                              ; preds = %926, %756
  br label %928

928:                                              ; preds = %927, %431
  br label %1255

929:                                              ; preds = %75, %70
  %930 = load ptr, ptr %10, align 8, !tbaa !5
  %931 = call noundef i32 @_Z33LodePNG_InfoColor_isGreyscaleTypePK17LodePNG_InfoColor(ptr noundef %930)
  %932 = icmp ne i32 %931, 0
  br i1 %932, label %933, label %1253

933:                                              ; preds = %929
  %934 = load ptr, ptr %10, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %934, i32 0, i32 1
  %936 = load i32, ptr %935, align 4, !tbaa !18
  %937 = icmp eq i32 %936, 8
  br i1 %937, label %938, label %1253

938:                                              ; preds = %933
  %939 = load ptr, ptr %11, align 8, !tbaa !5
  %940 = call noundef i32 @_Z33LodePNG_InfoColor_isGreyscaleTypePK17LodePNG_InfoColor(ptr noundef %939)
  %941 = icmp ne i32 %940, 0
  br i1 %941, label %943, label %942

942:                                              ; preds = %938
  store i32 62, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

943:                                              ; preds = %938
  %944 = load ptr, ptr %11, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %944, i32 0, i32 1
  %946 = load i32, ptr %945, align 4, !tbaa !18
  %947 = icmp eq i32 %946, 8
  br i1 %947, label %948, label %1051

948:                                              ; preds = %943
  %949 = load ptr, ptr %11, align 8, !tbaa !5
  %950 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %949, i32 0, i32 0
  %951 = load i32, ptr %950, align 8, !tbaa !16
  switch i32 %951, label %1049 [
    i32 0, label %952
    i32 4, label %1009
  ]

952:                                              ; preds = %948
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %953

953:                                              ; preds = %1005, %952
  %954 = load i64, ptr %17, align 8, !tbaa !11
  %955 = load i64, ptr %14, align 8, !tbaa !11
  %956 = icmp ult i64 %954, %955
  br i1 %956, label %957, label %1008

957:                                              ; preds = %953
  %958 = load i32, ptr %16, align 4, !tbaa !9
  %959 = icmp ne i32 %958, 0
  br i1 %959, label %960, label %968

960:                                              ; preds = %957
  %961 = load ptr, ptr %8, align 8, !tbaa !5
  %962 = load i32, ptr %15, align 4, !tbaa !9
  %963 = zext i32 %962 to i64
  %964 = load i64, ptr %17, align 8, !tbaa !11
  %965 = mul i64 %963, %964
  %966 = add i64 %965, 1
  %967 = getelementptr inbounds i8, ptr %961, i64 %966
  store i8 -1, ptr %967, align 1, !tbaa !13
  br label %968

968:                                              ; preds = %960, %957
  %969 = load ptr, ptr %9, align 8, !tbaa !5
  %970 = load i64, ptr %17, align 8, !tbaa !11
  %971 = getelementptr inbounds i8, ptr %969, i64 %970
  %972 = load i8, ptr %971, align 1, !tbaa !13
  %973 = load ptr, ptr %8, align 8, !tbaa !5
  %974 = load i32, ptr %15, align 4, !tbaa !9
  %975 = zext i32 %974 to i64
  %976 = load i64, ptr %17, align 8, !tbaa !11
  %977 = mul i64 %975, %976
  %978 = getelementptr inbounds i8, ptr %973, i64 %977
  store i8 %972, ptr %978, align 1, !tbaa !13
  %979 = load i32, ptr %16, align 4, !tbaa !9
  %980 = icmp ne i32 %979, 0
  br i1 %980, label %981, label %1004

981:                                              ; preds = %968
  %982 = load ptr, ptr %11, align 8, !tbaa !5
  %983 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %982, i32 0, i32 4
  %984 = load i32, ptr %983, align 8, !tbaa !19
  %985 = icmp ne i32 %984, 0
  br i1 %985, label %986, label %1004

986:                                              ; preds = %981
  %987 = load ptr, ptr %9, align 8, !tbaa !5
  %988 = load i64, ptr %17, align 8, !tbaa !11
  %989 = getelementptr inbounds i8, ptr %987, i64 %988
  %990 = load i8, ptr %989, align 1, !tbaa !13
  %991 = zext i8 %990 to i32
  %992 = load ptr, ptr %11, align 8, !tbaa !5
  %993 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %992, i32 0, i32 5
  %994 = load i32, ptr %993, align 4, !tbaa !20
  %995 = icmp eq i32 %991, %994
  br i1 %995, label %996, label %1004

996:                                              ; preds = %986
  %997 = load ptr, ptr %8, align 8, !tbaa !5
  %998 = load i32, ptr %15, align 4, !tbaa !9
  %999 = zext i32 %998 to i64
  %1000 = load i64, ptr %17, align 8, !tbaa !11
  %1001 = mul i64 %999, %1000
  %1002 = add i64 %1001, 1
  %1003 = getelementptr inbounds i8, ptr %997, i64 %1002
  store i8 0, ptr %1003, align 1, !tbaa !13
  br label %1004

1004:                                             ; preds = %996, %986, %981, %968
  br label %1005

1005:                                             ; preds = %1004
  %1006 = load i64, ptr %17, align 8, !tbaa !11
  %1007 = add i64 %1006, 1
  store i64 %1007, ptr %17, align 8, !tbaa !11
  br label %953, !llvm.loop !42

1008:                                             ; preds = %953
  br label %1050

1009:                                             ; preds = %948
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %1010

1010:                                             ; preds = %1045, %1009
  %1011 = load i64, ptr %17, align 8, !tbaa !11
  %1012 = load i64, ptr %14, align 8, !tbaa !11
  %1013 = icmp ult i64 %1011, %1012
  br i1 %1013, label %1014, label %1048

1014:                                             ; preds = %1010
  %1015 = load ptr, ptr %9, align 8, !tbaa !5
  %1016 = load i64, ptr %17, align 8, !tbaa !11
  %1017 = mul i64 2, %1016
  %1018 = add i64 %1017, 0
  %1019 = getelementptr inbounds i8, ptr %1015, i64 %1018
  %1020 = load i8, ptr %1019, align 1, !tbaa !13
  %1021 = load ptr, ptr %8, align 8, !tbaa !5
  %1022 = load i32, ptr %15, align 4, !tbaa !9
  %1023 = zext i32 %1022 to i64
  %1024 = load i64, ptr %17, align 8, !tbaa !11
  %1025 = mul i64 %1023, %1024
  %1026 = add i64 %1025, 0
  %1027 = getelementptr inbounds i8, ptr %1021, i64 %1026
  store i8 %1020, ptr %1027, align 1, !tbaa !13
  %1028 = load i32, ptr %16, align 4, !tbaa !9
  %1029 = icmp ne i32 %1028, 0
  br i1 %1029, label %1030, label %1044

1030:                                             ; preds = %1014
  %1031 = load ptr, ptr %9, align 8, !tbaa !5
  %1032 = load i64, ptr %17, align 8, !tbaa !11
  %1033 = mul i64 2, %1032
  %1034 = add i64 %1033, 1
  %1035 = getelementptr inbounds i8, ptr %1031, i64 %1034
  %1036 = load i8, ptr %1035, align 1, !tbaa !13
  %1037 = load ptr, ptr %8, align 8, !tbaa !5
  %1038 = load i32, ptr %15, align 4, !tbaa !9
  %1039 = zext i32 %1038 to i64
  %1040 = load i64, ptr %17, align 8, !tbaa !11
  %1041 = mul i64 %1039, %1040
  %1042 = add i64 %1041, 1
  %1043 = getelementptr inbounds i8, ptr %1037, i64 %1042
  store i8 %1036, ptr %1043, align 1, !tbaa !13
  br label %1044

1044:                                             ; preds = %1030, %1014
  br label %1045

1045:                                             ; preds = %1044
  %1046 = load i64, ptr %17, align 8, !tbaa !11
  %1047 = add i64 %1046, 1
  store i64 %1047, ptr %17, align 8, !tbaa !11
  br label %1010, !llvm.loop !43

1048:                                             ; preds = %1010
  br label %1050

1049:                                             ; preds = %948
  store i32 31, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

1050:                                             ; preds = %1048, %1008
  br label %1252

1051:                                             ; preds = %943
  %1052 = load ptr, ptr %11, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1052, i32 0, i32 1
  %1054 = load i32, ptr %1053, align 4, !tbaa !18
  %1055 = icmp eq i32 %1054, 16
  br i1 %1055, label %1056, label %1166

1056:                                             ; preds = %1051
  %1057 = load ptr, ptr %11, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1057, i32 0, i32 0
  %1059 = load i32, ptr %1058, align 8, !tbaa !16
  switch i32 %1059, label %1164 [
    i32 0, label %1060
    i32 4, label %1126
  ]

1060:                                             ; preds = %1056
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %1061

1061:                                             ; preds = %1122, %1060
  %1062 = load i64, ptr %17, align 8, !tbaa !11
  %1063 = load i64, ptr %14, align 8, !tbaa !11
  %1064 = icmp ult i64 %1062, %1063
  br i1 %1064, label %1065, label %1125

1065:                                             ; preds = %1061
  %1066 = load i32, ptr %16, align 4, !tbaa !9
  %1067 = icmp ne i32 %1066, 0
  br i1 %1067, label %1068, label %1076

1068:                                             ; preds = %1065
  %1069 = load ptr, ptr %8, align 8, !tbaa !5
  %1070 = load i32, ptr %15, align 4, !tbaa !9
  %1071 = zext i32 %1070 to i64
  %1072 = load i64, ptr %17, align 8, !tbaa !11
  %1073 = mul i64 %1071, %1072
  %1074 = add i64 %1073, 1
  %1075 = getelementptr inbounds i8, ptr %1069, i64 %1074
  store i8 -1, ptr %1075, align 1, !tbaa !13
  br label %1076

1076:                                             ; preds = %1068, %1065
  %1077 = load ptr, ptr %9, align 8, !tbaa !5
  %1078 = load i64, ptr %17, align 8, !tbaa !11
  %1079 = mul i64 2, %1078
  %1080 = getelementptr inbounds i8, ptr %1077, i64 %1079
  %1081 = load i8, ptr %1080, align 1, !tbaa !13
  %1082 = load ptr, ptr %8, align 8, !tbaa !5
  %1083 = load i32, ptr %15, align 4, !tbaa !9
  %1084 = zext i32 %1083 to i64
  %1085 = load i64, ptr %17, align 8, !tbaa !11
  %1086 = mul i64 %1084, %1085
  %1087 = getelementptr inbounds i8, ptr %1082, i64 %1086
  store i8 %1081, ptr %1087, align 1, !tbaa !13
  %1088 = load i32, ptr %16, align 4, !tbaa !9
  %1089 = icmp ne i32 %1088, 0
  br i1 %1089, label %1090, label %1121

1090:                                             ; preds = %1076
  %1091 = load ptr, ptr %11, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1091, i32 0, i32 4
  %1093 = load i32, ptr %1092, align 8, !tbaa !19
  %1094 = icmp ne i32 %1093, 0
  br i1 %1094, label %1095, label %1121

1095:                                             ; preds = %1090
  %1096 = load ptr, ptr %9, align 8, !tbaa !5
  %1097 = load i64, ptr %17, align 8, !tbaa !11
  %1098 = getelementptr inbounds i8, ptr %1096, i64 %1097
  %1099 = load i8, ptr %1098, align 1, !tbaa !13
  %1100 = zext i8 %1099 to i32
  %1101 = mul i32 256, %1100
  %1102 = load ptr, ptr %9, align 8, !tbaa !5
  %1103 = load i64, ptr %17, align 8, !tbaa !11
  %1104 = add i64 %1103, 1
  %1105 = getelementptr inbounds i8, ptr %1102, i64 %1104
  %1106 = load i8, ptr %1105, align 1, !tbaa !13
  %1107 = zext i8 %1106 to i32
  %1108 = add i32 %1101, %1107
  %1109 = load ptr, ptr %11, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1109, i32 0, i32 5
  %1111 = load i32, ptr %1110, align 4, !tbaa !20
  %1112 = icmp eq i32 %1108, %1111
  br i1 %1112, label %1113, label %1121

1113:                                             ; preds = %1095
  %1114 = load ptr, ptr %8, align 8, !tbaa !5
  %1115 = load i32, ptr %15, align 4, !tbaa !9
  %1116 = zext i32 %1115 to i64
  %1117 = load i64, ptr %17, align 8, !tbaa !11
  %1118 = mul i64 %1116, %1117
  %1119 = add i64 %1118, 1
  %1120 = getelementptr inbounds i8, ptr %1114, i64 %1119
  store i8 0, ptr %1120, align 1, !tbaa !13
  br label %1121

1121:                                             ; preds = %1113, %1095, %1090, %1076
  br label %1122

1122:                                             ; preds = %1121
  %1123 = load i64, ptr %17, align 8, !tbaa !11
  %1124 = add i64 %1123, 1
  store i64 %1124, ptr %17, align 8, !tbaa !11
  br label %1061, !llvm.loop !44

1125:                                             ; preds = %1061
  br label %1165

1126:                                             ; preds = %1056
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %1127

1127:                                             ; preds = %1160, %1126
  %1128 = load i64, ptr %17, align 8, !tbaa !11
  %1129 = load i64, ptr %14, align 8, !tbaa !11
  %1130 = icmp ult i64 %1128, %1129
  br i1 %1130, label %1131, label %1163

1131:                                             ; preds = %1127
  %1132 = load ptr, ptr %9, align 8, !tbaa !5
  %1133 = load i64, ptr %17, align 8, !tbaa !11
  %1134 = mul i64 4, %1133
  %1135 = getelementptr inbounds i8, ptr %1132, i64 %1134
  %1136 = load i8, ptr %1135, align 1, !tbaa !13
  %1137 = load ptr, ptr %8, align 8, !tbaa !5
  %1138 = load i32, ptr %15, align 4, !tbaa !9
  %1139 = zext i32 %1138 to i64
  %1140 = load i64, ptr %17, align 8, !tbaa !11
  %1141 = mul i64 %1139, %1140
  %1142 = getelementptr inbounds i8, ptr %1137, i64 %1141
  store i8 %1136, ptr %1142, align 1, !tbaa !13
  %1143 = load i32, ptr %16, align 4, !tbaa !9
  %1144 = icmp ne i32 %1143, 0
  br i1 %1144, label %1145, label %1159

1145:                                             ; preds = %1131
  %1146 = load ptr, ptr %9, align 8, !tbaa !5
  %1147 = load i64, ptr %17, align 8, !tbaa !11
  %1148 = mul i64 4, %1147
  %1149 = add i64 %1148, 2
  %1150 = getelementptr inbounds i8, ptr %1146, i64 %1149
  %1151 = load i8, ptr %1150, align 1, !tbaa !13
  %1152 = load ptr, ptr %8, align 8, !tbaa !5
  %1153 = load i32, ptr %15, align 4, !tbaa !9
  %1154 = zext i32 %1153 to i64
  %1155 = load i64, ptr %17, align 8, !tbaa !11
  %1156 = mul i64 %1154, %1155
  %1157 = add i64 %1156, 1
  %1158 = getelementptr inbounds i8, ptr %1152, i64 %1157
  store i8 %1151, ptr %1158, align 1, !tbaa !13
  br label %1159

1159:                                             ; preds = %1145, %1131
  br label %1160

1160:                                             ; preds = %1159
  %1161 = load i64, ptr %17, align 8, !tbaa !11
  %1162 = add i64 %1161, 1
  store i64 %1162, ptr %17, align 8, !tbaa !11
  br label %1127, !llvm.loop !45

1163:                                             ; preds = %1127
  br label %1165

1164:                                             ; preds = %1056
  store i32 31, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

1165:                                             ; preds = %1163, %1125
  br label %1251

1166:                                             ; preds = %1051
  %1167 = load ptr, ptr %11, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1167, i32 0, i32 0
  %1169 = load i32, ptr %1168, align 8, !tbaa !16
  %1170 = icmp ne i32 %1169, 0
  br i1 %1170, label %1171, label %1172

1171:                                             ; preds = %1166
  store i32 31, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

1172:                                             ; preds = %1166
  store i64 0, ptr %17, align 8, !tbaa !11
  br label %1173

1173:                                             ; preds = %1247, %1172
  %1174 = load i64, ptr %17, align 8, !tbaa !11
  %1175 = load i64, ptr %14, align 8, !tbaa !11
  %1176 = icmp ult i64 %1174, %1175
  br i1 %1176, label %1177, label %1250

1177:                                             ; preds = %1173
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %1178 = load ptr, ptr %9, align 8, !tbaa !5
  %1179 = load ptr, ptr %11, align 8, !tbaa !5
  %1180 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1179, i32 0, i32 1
  %1181 = load i32, ptr %1180, align 4, !tbaa !18
  %1182 = zext i32 %1181 to i64
  %1183 = call noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef %19, ptr noundef %1178, i64 noundef %1182)
  store i32 %1183, ptr %25, align 4, !tbaa !9
  %1184 = load i32, ptr %16, align 4, !tbaa !9
  %1185 = icmp ne i32 %1184, 0
  br i1 %1185, label %1186, label %1194

1186:                                             ; preds = %1177
  %1187 = load ptr, ptr %8, align 8, !tbaa !5
  %1188 = load i32, ptr %15, align 4, !tbaa !9
  %1189 = zext i32 %1188 to i64
  %1190 = load i64, ptr %17, align 8, !tbaa !11
  %1191 = mul i64 %1189, %1190
  %1192 = add i64 %1191, 1
  %1193 = getelementptr inbounds i8, ptr %1187, i64 %1192
  store i8 -1, ptr %1193, align 1, !tbaa !13
  br label %1194

1194:                                             ; preds = %1186, %1177
  %1195 = load i32, ptr %16, align 4, !tbaa !9
  %1196 = icmp ne i32 %1195, 0
  br i1 %1196, label %1197, label %1230

1197:                                             ; preds = %1194
  %1198 = load ptr, ptr %11, align 8, !tbaa !5
  %1199 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1198, i32 0, i32 4
  %1200 = load i32, ptr %1199, align 8, !tbaa !19
  %1201 = icmp ne i32 %1200, 0
  br i1 %1201, label %1202, label %1230

1202:                                             ; preds = %1197
  %1203 = load i32, ptr %25, align 4, !tbaa !9
  %1204 = icmp ne i32 %1203, 0
  br i1 %1204, label %1205, label %1230

1205:                                             ; preds = %1202
  %1206 = load ptr, ptr %11, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1206, i32 0, i32 1
  %1208 = load i32, ptr %1207, align 4, !tbaa !18
  %1209 = shl i32 1, %1208
  %1210 = sub i32 %1209, 1
  %1211 = load ptr, ptr %11, align 8, !tbaa !5
  %1212 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1211, i32 0, i32 5
  %1213 = load i32, ptr %1212, align 4, !tbaa !20
  %1214 = icmp eq i32 %1210, %1213
  br i1 %1214, label %1215, label %1230

1215:                                             ; preds = %1205
  %1216 = load ptr, ptr %11, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1216, i32 0, i32 1
  %1218 = load i32, ptr %1217, align 4, !tbaa !18
  %1219 = shl i32 1, %1218
  %1220 = sub i32 %1219, 1
  %1221 = icmp ne i32 %1220, 0
  br i1 %1221, label %1222, label %1230

1222:                                             ; preds = %1215
  %1223 = load ptr, ptr %8, align 8, !tbaa !5
  %1224 = load i32, ptr %15, align 4, !tbaa !9
  %1225 = zext i32 %1224 to i64
  %1226 = load i64, ptr %17, align 8, !tbaa !11
  %1227 = mul i64 %1225, %1226
  %1228 = add i64 %1227, 1
  %1229 = getelementptr inbounds i8, ptr %1223, i64 %1228
  store i8 0, ptr %1229, align 1, !tbaa !13
  br label %1230

1230:                                             ; preds = %1222, %1215, %1205, %1202, %1197, %1194
  %1231 = load i32, ptr %25, align 4, !tbaa !9
  %1232 = mul i32 %1231, 255
  %1233 = load ptr, ptr %11, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct.LodePNG_InfoColor, ptr %1233, i32 0, i32 1
  %1235 = load i32, ptr %1234, align 4, !tbaa !18
  %1236 = shl i32 1, %1235
  %1237 = sub nsw i32 %1236, 1
  %1238 = udiv i32 %1232, %1237
  store i32 %1238, ptr %25, align 4, !tbaa !9
  %1239 = load i32, ptr %25, align 4, !tbaa !9
  %1240 = trunc i32 %1239 to i8
  %1241 = load ptr, ptr %8, align 8, !tbaa !5
  %1242 = load i32, ptr %15, align 4, !tbaa !9
  %1243 = zext i32 %1242 to i64
  %1244 = load i64, ptr %17, align 8, !tbaa !11
  %1245 = mul i64 %1243, %1244
  %1246 = getelementptr inbounds i8, ptr %1241, i64 %1245
  store i8 %1240, ptr %1246, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  br label %1247

1247:                                             ; preds = %1230
  %1248 = load i64, ptr %17, align 8, !tbaa !11
  %1249 = add i64 %1248, 1
  store i64 %1249, ptr %17, align 8, !tbaa !11
  br label %1173, !llvm.loop !46

1250:                                             ; preds = %1173
  br label %1251

1251:                                             ; preds = %1250, %1165
  br label %1252

1252:                                             ; preds = %1251, %1050
  br label %1254

1253:                                             ; preds = %933, %929
  store i32 59, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

1254:                                             ; preds = %1252
  br label %1255

1255:                                             ; preds = %1254, %928
  store i32 0, ptr %7, align 4
  store i32 1, ptr %22, align 4
  br label %1256

1256:                                             ; preds = %1255, %1253, %1171, %1164, %1049, %942, %918, %291, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  %1257 = load i32, ptr %7, align 4
  ret i32 %1257
}

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef, ptr noundef, i64 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 = { 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, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!17, !10, i64 0}
!17 = !{!"_ZTS17LodePNG_InfoColor", !10, i64 0, !10, i64 4, !6, i64 8, !12, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36}
!18 = !{!17, !10, i64 4}
!19 = !{!17, !10, i64 24}
!20 = !{!17, !10, i64 28}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = !{!17, !10, i64 32}
!24 = !{!17, !10, i64 36}
!25 = distinct !{!25, !15}
!26 = !{!17, !12, i64 16}
!27 = !{!17, !6, i64 8}
!28 = distinct !{!28, !15}
!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 = distinct !{!36, !15}
!37 = distinct !{!37, !15}
!38 = distinct !{!38, !15}
!39 = distinct !{!39, !15}
!40 = distinct !{!40, !15}
!41 = distinct !{!41, !15}
!42 = distinct !{!42, !15}
!43 = distinct !{!43, !15}
!44 = distinct !{!44, !15}
!45 = distinct !{!45, !15}
!46 = distinct !{!46, !15}


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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z24LodePNG_InfoColor_getBppPK17LodePNG_InfoColor(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z33LodePNG_InfoColor_isGreyscaleTypePK17LodePNG_InfoColor(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z29LodePNG_InfoColor_isAlphaTypePK17LodePNG_InfoColor(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z15LodePNG_convertPhPKhP17LodePNG_InfoColorS3_jj(ptr noundef writeonly %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5) local_unnamed_addr #1 {
  %7 = ptrtoint ptr %1 to i64
  %8 = ptrtoint ptr %0 to i64
  %9 = alloca i64, align 8
  %10 = mul i32 %5, %4
  %11 = zext i32 %10 to i64
  %12 = tail call noundef i32 @_Z24LodePNG_InfoColor_getBppPK17LodePNG_InfoColor(ptr noundef %2)
  %13 = lshr i32 %12, 3
  %14 = tail call noundef i32 @_Z29LodePNG_InfoColor_isAlphaTypePK17LodePNG_InfoColor(ptr noundef %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  store i64 0, ptr %9, align 8, !tbaa !5
  %15 = tail call noundef i32 @_Z23LodePNG_InfoColor_equalPK17LodePNG_InfoColorS1_(ptr noundef %3, ptr noundef %2)
  %.not = icmp eq i32 %15, 0
  br i1 %.not, label %52, label %16

16:                                               ; preds = %6
  %17 = tail call noundef i32 @_Z24LodePNG_InfoColor_getBppPK17LodePNG_InfoColor(ptr noundef %3)
  %18 = mul i32 %17, %10
  %19 = add i32 %18, 7
  %.not568 = icmp ult i32 %19, 8
  br i1 %.not568, label %.critedge457, label %iter.check

iter.check:                                       ; preds = %16
  %20 = lshr i32 %19, 3
  %umax = zext nneg i32 %20 to i64
  %min.iters.check = icmp ult i32 %19, 64
  %21 = sub i64 %8, %7
  %diff.check = icmp ult i64 %21, 32
  %or.cond764 = or i1 %min.iters.check, %diff.check
  br i1 %or.cond764, label %.lr.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check691 = icmp ult i32 %19, 256
  br i1 %min.iters.check691, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %umax, 536870880
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %22 = getelementptr inbounds i8, ptr %1, i64 %index
  %23 = getelementptr inbounds i8, ptr %22, i64 16
  %wide.load = load <16 x i8>, ptr %22, align 1, !tbaa !9
  %wide.load692 = load <16 x i8>, ptr %23, align 1, !tbaa !9
  %24 = getelementptr inbounds i8, ptr %0, i64 %index
  %25 = getelementptr inbounds i8, ptr %24, i64 16
  store <16 x i8> %wide.load, ptr %24, align 1, !tbaa !9
  store <16 x i8> %wide.load692, ptr %25, align 1, !tbaa !9
  %index.next = add nuw i64 %index, 32
  %26 = icmp eq i64 %index.next, %n.vec
  br i1 %26, label %middle.block, label %vector.body, !llvm.loop !10

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %umax
  br i1 %cmp.n, label %.critedge457, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %n.vec.remaining = and i64 %umax, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec694 = and i64 %umax, 536870904
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index695 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next697, %vec.epilog.vector.body ]
  %27 = getelementptr inbounds i8, ptr %1, i64 %index695
  %wide.load696 = load <8 x i8>, ptr %27, align 1, !tbaa !9
  %28 = getelementptr inbounds i8, ptr %0, i64 %index695
  store <8 x i8> %wide.load696, ptr %28, align 1, !tbaa !9
  %index.next697 = add nuw i64 %index695, 8
  %29 = icmp eq i64 %index.next697, %n.vec694
  br i1 %29, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !14

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n698 = icmp eq i64 %n.vec694, %umax
  br i1 %cmp.n698, label %.critedge457, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.0410498.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec694, %vec.epilog.middle.block ]
  %xtraiter = and i64 %umax, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader, %.lr.ph.prol
  %.0410498.prol = phi i64 [ %33, %.lr.ph.prol ], [ %.0410498.ph, %.lr.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader ]
  %30 = getelementptr inbounds i8, ptr %1, i64 %.0410498.prol
  %31 = load i8, ptr %30, align 1, !tbaa !9
  %32 = getelementptr inbounds i8, ptr %0, i64 %.0410498.prol
  store i8 %31, ptr %32, align 1, !tbaa !9
  %33 = add nuw nsw i64 %.0410498.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !15

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader
  %.0410498.unr = phi i64 [ %.0410498.ph, %.lr.ph.preheader ], [ %33, %.lr.ph.prol ]
  %34 = sub nsw i64 %.0410498.ph, %umax
  %35 = icmp ugt i64 %34, -4
  br i1 %35, label %.critedge457, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.0410498 = phi i64 [ %51, %.lr.ph ], [ %.0410498.unr, %.lr.ph.prol.loopexit ]
  %36 = getelementptr inbounds i8, ptr %1, i64 %.0410498
  %37 = load i8, ptr %36, align 1, !tbaa !9
  %38 = getelementptr inbounds i8, ptr %0, i64 %.0410498
  store i8 %37, ptr %38, align 1, !tbaa !9
  %39 = add nuw nsw i64 %.0410498, 1
  %40 = getelementptr inbounds i8, ptr %1, i64 %39
  %41 = load i8, ptr %40, align 1, !tbaa !9
  %42 = getelementptr inbounds i8, ptr %0, i64 %39
  store i8 %41, ptr %42, align 1, !tbaa !9
  %43 = add nuw nsw i64 %.0410498, 2
  %44 = getelementptr inbounds i8, ptr %1, i64 %43
  %45 = load i8, ptr %44, align 1, !tbaa !9
  %46 = getelementptr inbounds i8, ptr %0, i64 %43
  store i8 %45, ptr %46, align 1, !tbaa !9
  %47 = add nuw nsw i64 %.0410498, 3
  %48 = getelementptr inbounds i8, ptr %1, i64 %47
  %49 = load i8, ptr %48, align 1, !tbaa !9
  %50 = getelementptr inbounds i8, ptr %0, i64 %47
  store i8 %49, ptr %50, align 1, !tbaa !9
  %51 = add nuw nsw i64 %.0410498, 4
  %exitcond.not.3 = icmp eq i64 %51, %umax
  br i1 %exitcond.not.3, label %.critedge457, label %.lr.ph, !llvm.loop !17

52:                                               ; preds = %6
  %53 = load i32, ptr %2, align 8, !tbaa !18
  switch i32 %53, label %456 [
    i32 2, label %54
    i32 6, label %54
  ]

54:                                               ; preds = %52, %52
  %55 = getelementptr inbounds i8, ptr %2, i64 4
  %56 = load i32, ptr %55, align 4, !tbaa !22
  %57 = icmp eq i32 %56, 8
  br i1 %57, label %58, label %456

58:                                               ; preds = %54
  %59 = getelementptr inbounds i8, ptr %3, i64 4
  %60 = load i32, ptr %59, align 4, !tbaa !22
  %61 = load i32, ptr %3, align 8, !tbaa !18
  switch i32 %60, label %380 [
    i32 8, label %62
    i32 16, label %224
  ]

62:                                               ; preds = %58
  switch i32 %61, label %.critedge457 [
    i32 0, label %.preheader475
    i32 2, label %.preheader477
    i32 3, label %.preheader480
    i32 4, label %.preheader483
    i32 6, label %.preheader486
  ]

.preheader486:                                    ; preds = %62
  %.not574 = icmp eq i32 %10, 0
  br i1 %.not574, label %.critedge457, label %.preheader485.lr.ph

.preheader485.lr.ph:                              ; preds = %.preheader486
  %63 = zext nneg i32 %13 to i64
  %.not575 = icmp ult i32 %12, 8
  br i1 %.not575, label %.critedge457, label %.preheader485.us.preheader

.preheader485.us.preheader:                       ; preds = %.preheader485.lr.ph
  %64 = mul nuw nsw i64 %63, %11
  %scevgep729 = getelementptr i8, ptr %0, i64 %64
  %65 = shl nuw nsw i64 %11, 2
  %66 = getelementptr i8, ptr %1, i64 %65
  %67 = getelementptr i8, ptr %66, i64 %63
  %scevgep730 = getelementptr i8, ptr %67, i64 -4
  %min.iters.check735 = icmp ult i32 %12, 64
  %bound0731 = icmp ugt ptr %scevgep730, %0
  %bound1732 = icmp ugt ptr %scevgep729, %1
  %found.conflict733 = and i1 %bound0731, %bound1732
  %min.iters.check738 = icmp ult i32 %12, 256
  %n.vec742 = and i64 %63, 536870880
  %cmp.n748 = icmp eq i64 %n.vec742, %63
  %n.vec.remaining753 = and i64 %63, 24
  %min.epilog.iters.check754 = icmp eq i64 %n.vec.remaining753, 0
  %n.vec757 = and i64 %63, 536870904
  %cmp.n763 = icmp eq i64 %n.vec757, %63
  %xtraiter787 = and i64 %63, 3
  %lcmp.mod788.not = icmp eq i64 %xtraiter787, 0
  br label %iter.check737

iter.check737:                                    ; preds = %.preheader485.us.preheader, %._crit_edge.us516
  %.4515.us = phi i64 [ %102, %._crit_edge.us516 ], [ 0, %.preheader485.us.preheader ]
  %68 = shl nuw nsw i64 %.4515.us, 2
  %69 = getelementptr inbounds i8, ptr %1, i64 %68
  %70 = mul nuw nsw i64 %.4515.us, %63
  %71 = getelementptr inbounds i8, ptr %0, i64 %70
  %brmerge = select i1 %min.iters.check735, i1 true, i1 %found.conflict733
  br i1 %brmerge, label %vec.epilog.scalar.ph750.preheader, label %vector.main.loop.iter.check739

vector.main.loop.iter.check739:                   ; preds = %iter.check737
  br i1 %min.iters.check738, label %vec.epilog.ph751, label %vector.body743

vector.body743:                                   ; preds = %vector.main.loop.iter.check739, %vector.body743
  %index744 = phi i64 [ %index.next747, %vector.body743 ], [ 0, %vector.main.loop.iter.check739 ]
  %72 = getelementptr inbounds i8, ptr %69, i64 %index744
  %73 = getelementptr inbounds i8, ptr %72, i64 16
  %wide.load745 = load <16 x i8>, ptr %72, align 1, !tbaa !9, !alias.scope !23
  %wide.load746 = load <16 x i8>, ptr %73, align 1, !tbaa !9, !alias.scope !23
  %74 = getelementptr inbounds i8, ptr %71, i64 %index744
  %75 = getelementptr inbounds i8, ptr %74, i64 16
  store <16 x i8> %wide.load745, ptr %74, align 1, !tbaa !9, !alias.scope !26, !noalias !23
  store <16 x i8> %wide.load746, ptr %75, align 1, !tbaa !9, !alias.scope !26, !noalias !23
  %index.next747 = add nuw i64 %index744, 32
  %76 = icmp eq i64 %index.next747, %n.vec742
  br i1 %76, label %middle.block734, label %vector.body743, !llvm.loop !28

middle.block734:                                  ; preds = %vector.body743
  br i1 %cmp.n748, label %._crit_edge.us516, label %vec.epilog.iter.check752

vec.epilog.iter.check752:                         ; preds = %middle.block734
  br i1 %min.epilog.iters.check754, label %vec.epilog.scalar.ph750.preheader, label %vec.epilog.ph751

vec.epilog.ph751:                                 ; preds = %vector.main.loop.iter.check739, %vec.epilog.iter.check752
  %vec.epilog.resume.val755 = phi i64 [ %n.vec742, %vec.epilog.iter.check752 ], [ 0, %vector.main.loop.iter.check739 ]
  br label %vec.epilog.vector.body759

vec.epilog.vector.body759:                        ; preds = %vec.epilog.vector.body759, %vec.epilog.ph751
  %index760 = phi i64 [ %vec.epilog.resume.val755, %vec.epilog.ph751 ], [ %index.next762, %vec.epilog.vector.body759 ]
  %77 = getelementptr inbounds i8, ptr %69, i64 %index760
  %wide.load761 = load <8 x i8>, ptr %77, align 1, !tbaa !9, !alias.scope !29
  %78 = getelementptr inbounds i8, ptr %71, i64 %index760
  store <8 x i8> %wide.load761, ptr %78, align 1, !tbaa !9, !alias.scope !32, !noalias !29
  %index.next762 = add nuw i64 %index760, 8
  %79 = icmp eq i64 %index.next762, %n.vec757
  br i1 %79, label %vec.epilog.middle.block749, label %vec.epilog.vector.body759, !llvm.loop !34

vec.epilog.middle.block749:                       ; preds = %vec.epilog.vector.body759
  br i1 %cmp.n763, label %._crit_edge.us516, label %vec.epilog.scalar.ph750.preheader

vec.epilog.scalar.ph750.preheader:                ; preds = %iter.check737, %vec.epilog.middle.block749, %vec.epilog.iter.check752
  %.2413513.us.ph = phi i64 [ 0, %iter.check737 ], [ %n.vec742, %vec.epilog.iter.check752 ], [ %n.vec757, %vec.epilog.middle.block749 ]
  br i1 %lcmp.mod788.not, label %vec.epilog.scalar.ph750.prol.loopexit, label %vec.epilog.scalar.ph750.prol

vec.epilog.scalar.ph750.prol:                     ; preds = %vec.epilog.scalar.ph750.preheader, %vec.epilog.scalar.ph750.prol
  %.2413513.us.prol = phi i64 [ %83, %vec.epilog.scalar.ph750.prol ], [ %.2413513.us.ph, %vec.epilog.scalar.ph750.preheader ]
  %prol.iter789 = phi i64 [ %prol.iter789.next, %vec.epilog.scalar.ph750.prol ], [ 0, %vec.epilog.scalar.ph750.preheader ]
  %80 = getelementptr inbounds i8, ptr %69, i64 %.2413513.us.prol
  %81 = load i8, ptr %80, align 1, !tbaa !9
  %82 = getelementptr inbounds i8, ptr %71, i64 %.2413513.us.prol
  store i8 %81, ptr %82, align 1, !tbaa !9
  %83 = add nuw nsw i64 %.2413513.us.prol, 1
  %prol.iter789.next = add i64 %prol.iter789, 1
  %prol.iter789.cmp.not = icmp eq i64 %prol.iter789.next, %xtraiter787
  br i1 %prol.iter789.cmp.not, label %vec.epilog.scalar.ph750.prol.loopexit, label %vec.epilog.scalar.ph750.prol, !llvm.loop !35

vec.epilog.scalar.ph750.prol.loopexit:            ; preds = %vec.epilog.scalar.ph750.prol, %vec.epilog.scalar.ph750.preheader
  %.2413513.us.unr = phi i64 [ %.2413513.us.ph, %vec.epilog.scalar.ph750.preheader ], [ %83, %vec.epilog.scalar.ph750.prol ]
  %84 = sub nsw i64 %.2413513.us.ph, %63
  %85 = icmp ugt i64 %84, -4
  br i1 %85, label %._crit_edge.us516, label %vec.epilog.scalar.ph750

vec.epilog.scalar.ph750:                          ; preds = %vec.epilog.scalar.ph750.prol.loopexit, %vec.epilog.scalar.ph750
  %.2413513.us = phi i64 [ %101, %vec.epilog.scalar.ph750 ], [ %.2413513.us.unr, %vec.epilog.scalar.ph750.prol.loopexit ]
  %86 = getelementptr inbounds i8, ptr %69, i64 %.2413513.us
  %87 = load i8, ptr %86, align 1, !tbaa !9
  %88 = getelementptr inbounds i8, ptr %71, i64 %.2413513.us
  store i8 %87, ptr %88, align 1, !tbaa !9
  %89 = add nuw nsw i64 %.2413513.us, 1
  %90 = getelementptr inbounds i8, ptr %69, i64 %89
  %91 = load i8, ptr %90, align 1, !tbaa !9
  %92 = getelementptr inbounds i8, ptr %71, i64 %89
  store i8 %91, ptr %92, align 1, !tbaa !9
  %93 = add nuw nsw i64 %.2413513.us, 2
  %94 = getelementptr inbounds i8, ptr %69, i64 %93
  %95 = load i8, ptr %94, align 1, !tbaa !9
  %96 = getelementptr inbounds i8, ptr %71, i64 %93
  store i8 %95, ptr %96, align 1, !tbaa !9
  %97 = add nuw nsw i64 %.2413513.us, 3
  %98 = getelementptr inbounds i8, ptr %69, i64 %97
  %99 = load i8, ptr %98, align 1, !tbaa !9
  %100 = getelementptr inbounds i8, ptr %71, i64 %97
  store i8 %99, ptr %100, align 1, !tbaa !9
  %101 = add nuw nsw i64 %.2413513.us, 4
  %exitcond617.not.3 = icmp eq i64 %101, %63
  br i1 %exitcond617.not.3, label %._crit_edge.us516, label %vec.epilog.scalar.ph750, !llvm.loop !36

._crit_edge.us516:                                ; preds = %vec.epilog.scalar.ph750.prol.loopexit, %vec.epilog.scalar.ph750, %vec.epilog.middle.block749, %middle.block734
  %102 = add nuw nsw i64 %.4515.us, 1
  %exitcond618.not = icmp eq i64 %102, %11
  br i1 %exitcond618.not, label %.critedge457, label %iter.check737, !llvm.loop !37

.preheader483:                                    ; preds = %62
  %.not576 = icmp eq i32 %10, 0
  br i1 %.not576, label %.critedge457, label %.lr.ph518

.lr.ph518:                                        ; preds = %.preheader483
  %103 = zext nneg i32 %13 to i64
  %.not449 = icmp eq i32 %14, 0
  br label %208

.preheader480:                                    ; preds = %62
  %invariant.gep521 = getelementptr inbounds i8, ptr %0, i64 3
  %.not577 = icmp eq i32 %10, 0
  br i1 %.not577, label %.critedge457, label %.lr.ph524

.lr.ph524:                                        ; preds = %.preheader480
  %.not450 = icmp eq i32 %14, 0
  %104 = zext nneg i32 %13 to i64
  %105 = getelementptr inbounds i8, ptr %3, i64 16
  %.not578 = icmp ult i32 %12, 8
  %106 = getelementptr inbounds i8, ptr %3, i64 8
  %xtraiter790 = and i64 %104, 1
  %107 = icmp eq i32 %13, 1
  %unroll_iter = and i64 %104, 536870910
  %lcmp.mod791.not = icmp eq i64 %xtraiter790, 0
  br label %171

.preheader477:                                    ; preds = %62
  %invariant.gep528 = getelementptr inbounds i8, ptr %0, i64 3
  %.not579 = icmp eq i32 %10, 0
  br i1 %.not579, label %.critedge457, label %.lr.ph533

.lr.ph533:                                        ; preds = %.preheader477
  %.not452 = icmp eq i32 %14, 0
  %108 = zext nneg i32 %13 to i64
  %109 = getelementptr inbounds i8, ptr %3, i64 24
  %110 = getelementptr inbounds i8, ptr %3, i64 28
  %111 = getelementptr inbounds i8, ptr %3, i64 32
  %112 = getelementptr inbounds i8, ptr %3, i64 36
  br label %139

.preheader475:                                    ; preds = %62
  %invariant.gep534 = getelementptr inbounds i8, ptr %0, i64 3
  %.not580 = icmp eq i32 %10, 0
  br i1 %.not580, label %.critedge457, label %.lr.ph537

.lr.ph537:                                        ; preds = %.preheader475
  %.not453 = icmp eq i32 %14, 0
  %113 = zext nneg i32 %13 to i64
  %114 = getelementptr inbounds i8, ptr %3, i64 24
  %115 = getelementptr inbounds i8, ptr %3, i64 28
  br label %116

116:                                              ; preds = %.lr.ph537, %137
  %.0407536 = phi i64 [ 0, %.lr.ph537 ], [ %138, %137 ]
  %.pre642 = mul nuw nsw i64 %.0407536, %113
  br i1 %.not453, label %.thread, label %123

.thread:                                          ; preds = %116
  %117 = getelementptr inbounds i8, ptr %1, i64 %.0407536
  %118 = load i8, ptr %117, align 1, !tbaa !9
  %119 = getelementptr inbounds i8, ptr %0, i64 %.pre642
  store i8 %118, ptr %119, align 1, !tbaa !9
  %120 = getelementptr inbounds i8, ptr %119, i64 1
  store i8 %118, ptr %120, align 1, !tbaa !9
  %121 = load i8, ptr %117, align 1, !tbaa !9
  %122 = getelementptr inbounds i8, ptr %119, i64 2
  store i8 %121, ptr %122, align 1, !tbaa !9
  br label %137

123:                                              ; preds = %116
  %gep535 = getelementptr inbounds i8, ptr %invariant.gep534, i64 %.pre642
  store i8 -1, ptr %gep535, align 1, !tbaa !9
  %124 = getelementptr inbounds i8, ptr %1, i64 %.0407536
  %125 = load i8, ptr %124, align 1, !tbaa !9
  %126 = getelementptr inbounds i8, ptr %0, i64 %.pre642
  store i8 %125, ptr %126, align 1, !tbaa !9
  %127 = getelementptr inbounds i8, ptr %126, i64 1
  store i8 %125, ptr %127, align 1, !tbaa !9
  %128 = load i8, ptr %124, align 1, !tbaa !9
  %129 = getelementptr inbounds i8, ptr %126, i64 2
  store i8 %128, ptr %129, align 1, !tbaa !9
  %130 = load i32, ptr %114, align 8, !tbaa !38
  %.not454 = icmp eq i32 %130, 0
  br i1 %.not454, label %137, label %131

131:                                              ; preds = %123
  %132 = zext i8 %128 to i32
  %133 = load i32, ptr %115, align 4, !tbaa !39
  %134 = icmp eq i32 %133, %132
  br i1 %134, label %135, label %137

135:                                              ; preds = %131
  %136 = getelementptr inbounds i8, ptr %126, i64 3
  store i8 0, ptr %136, align 1, !tbaa !9
  br label %137

137:                                              ; preds = %.thread, %123, %131, %135
  %138 = add nuw nsw i64 %.0407536, 1
  %exitcond625.not = icmp eq i64 %138, %11
  br i1 %exitcond625.not, label %.critedge457, label %116, !llvm.loop !40

139:                                              ; preds = %.lr.ph533, %169
  %.1408532 = phi i64 [ 0, %.lr.ph533 ], [ %170, %169 ]
  %.pre644 = mul nuw nsw i64 %.1408532, %108
  br i1 %.not452, label %._crit_edge638, label %140

140:                                              ; preds = %139
  %gep529 = getelementptr inbounds i8, ptr %invariant.gep528, i64 %.pre644
  store i8 -1, ptr %gep529, align 1, !tbaa !9
  br label %._crit_edge638

._crit_edge638:                                   ; preds = %139, %140
  %141 = mul nuw nsw i64 %.1408532, 3
  %142 = getelementptr inbounds i8, ptr %1, i64 %141
  %143 = getelementptr inbounds i8, ptr %0, i64 %.pre644
  %144 = load i8, ptr %142, align 1, !tbaa !9
  store i8 %144, ptr %143, align 1, !tbaa !9
  %145 = getelementptr inbounds i8, ptr %142, i64 1
  %146 = load i8, ptr %145, align 1, !tbaa !9
  %147 = getelementptr inbounds i8, ptr %143, i64 1
  store i8 %146, ptr %147, align 1, !tbaa !9
  %148 = getelementptr inbounds i8, ptr %142, i64 2
  %149 = load i8, ptr %148, align 1, !tbaa !9
  %150 = getelementptr inbounds i8, ptr %143, i64 2
  store i8 %149, ptr %150, align 1, !tbaa !9
  br i1 %.not452, label %169, label %151

151:                                              ; preds = %._crit_edge638
  %152 = load i32, ptr %109, align 8, !tbaa !38
  %153 = icmp eq i32 %152, 1
  br i1 %153, label %154, label %169

154:                                              ; preds = %151
  %155 = load i8, ptr %142, align 1, !tbaa !9
  %156 = zext i8 %155 to i32
  %157 = load i32, ptr %110, align 4, !tbaa !39
  %158 = icmp eq i32 %157, %156
  br i1 %158, label %159, label %169

159:                                              ; preds = %154
  %160 = load i8, ptr %145, align 1, !tbaa !9
  %161 = zext i8 %160 to i32
  %162 = load i32, ptr %111, align 8, !tbaa !41
  %163 = icmp eq i32 %162, %161
  br i1 %163, label %164, label %169

164:                                              ; preds = %159
  %165 = zext i8 %149 to i32
  %166 = load i32, ptr %112, align 4, !tbaa !42
  %167 = icmp eq i32 %166, %165
  br i1 %167, label %168, label %169

168:                                              ; preds = %164
  %gep531 = getelementptr inbounds i8, ptr %invariant.gep528, i64 %.pre644
  store i8 0, ptr %gep531, align 1, !tbaa !9
  br label %169

169:                                              ; preds = %._crit_edge638, %151, %154, %159, %164, %168
  %170 = add nuw nsw i64 %.1408532, 1
  %exitcond624.not = icmp eq i64 %170, %11
  br i1 %exitcond624.not, label %.critedge457, label %139, !llvm.loop !43

171:                                              ; preds = %.lr.ph524, %._crit_edge
  %.2409523 = phi i64 [ 0, %.lr.ph524 ], [ %207, %._crit_edge ]
  br i1 %.not450, label %174, label %172

172:                                              ; preds = %171
  %173 = mul nuw nsw i64 %.2409523, %104
  %gep522 = getelementptr inbounds i8, ptr %invariant.gep521, i64 %173
  store i8 -1, ptr %gep522, align 1, !tbaa !9
  br label %174

174:                                              ; preds = %172, %171
  %175 = getelementptr inbounds i8, ptr %1, i64 %.2409523
  %176 = load i8, ptr %175, align 1, !tbaa !9
  %177 = zext i8 %176 to i64
  %178 = load i64, ptr %105, align 8, !tbaa !44
  %.not451 = icmp ugt i64 %178, %177
  br i1 %.not451, label %.preheader479, label %.critedge457

.preheader479:                                    ; preds = %174
  br i1 %.not578, label %._crit_edge, label %.lr.ph520

.lr.ph520:                                        ; preds = %.preheader479
  %179 = mul nuw nsw i64 %.2409523, %104
  %180 = getelementptr inbounds i8, ptr %0, i64 %179
  br i1 %107, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph520.new

.lr.ph520.new:                                    ; preds = %.lr.ph520, %.lr.ph520.new
  %.1412519 = phi i64 [ %198, %.lr.ph520.new ], [ 0, %.lr.ph520 ]
  %niter = phi i64 [ %niter.next.1, %.lr.ph520.new ], [ 0, %.lr.ph520 ]
  %181 = load ptr, ptr %106, align 8, !tbaa !45
  %182 = load i8, ptr %175, align 1, !tbaa !9
  %183 = zext i8 %182 to i64
  %184 = shl nuw nsw i64 %183, 2
  %185 = getelementptr i8, ptr %181, i64 %184
  %186 = getelementptr i8, ptr %185, i64 %.1412519
  %187 = load i8, ptr %186, align 1, !tbaa !9
  %188 = getelementptr inbounds i8, ptr %180, i64 %.1412519
  store i8 %187, ptr %188, align 1, !tbaa !9
  %189 = or disjoint i64 %.1412519, 1
  %190 = load ptr, ptr %106, align 8, !tbaa !45
  %191 = load i8, ptr %175, align 1, !tbaa !9
  %192 = zext i8 %191 to i64
  %193 = shl nuw nsw i64 %192, 2
  %194 = getelementptr i8, ptr %190, i64 %193
  %195 = getelementptr i8, ptr %194, i64 %189
  %196 = load i8, ptr %195, align 1, !tbaa !9
  %197 = getelementptr inbounds i8, ptr %180, i64 %189
  store i8 %196, ptr %197, align 1, !tbaa !9
  %198 = add nuw nsw i64 %.1412519, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph520.new, !llvm.loop !46

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph520.new, %.lr.ph520
  %.1412519.unr = phi i64 [ 0, %.lr.ph520 ], [ %198, %.lr.ph520.new ]
  br i1 %lcmp.mod791.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %199 = load ptr, ptr %106, align 8, !tbaa !45
  %200 = load i8, ptr %175, align 1, !tbaa !9
  %201 = zext i8 %200 to i64
  %202 = shl nuw nsw i64 %201, 2
  %203 = getelementptr i8, ptr %199, i64 %202
  %204 = getelementptr i8, ptr %203, i64 %.1412519.unr
  %205 = load i8, ptr %204, align 1, !tbaa !9
  %206 = getelementptr inbounds i8, ptr %180, i64 %.1412519.unr
  store i8 %205, ptr %206, align 1, !tbaa !9
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %.preheader479
  %207 = add nuw nsw i64 %.2409523, 1
  %exitcond621.not = icmp eq i64 %207, %11
  br i1 %exitcond621.not, label %.critedge457, label %171, !llvm.loop !47

208:                                              ; preds = %.lr.ph518, %222
  %.3517 = phi i64 [ 0, %.lr.ph518 ], [ %223, %222 ]
  %209 = shl nuw nsw i64 %.3517, 1
  %210 = getelementptr inbounds i8, ptr %1, i64 %209
  %211 = load i8, ptr %210, align 1, !tbaa !9
  %212 = mul nuw nsw i64 %.3517, %103
  %213 = getelementptr inbounds i8, ptr %0, i64 %212
  store i8 %211, ptr %213, align 1, !tbaa !9
  %214 = getelementptr inbounds i8, ptr %213, i64 1
  store i8 %211, ptr %214, align 1, !tbaa !9
  %215 = load i8, ptr %210, align 1, !tbaa !9
  %216 = getelementptr inbounds i8, ptr %213, i64 2
  store i8 %215, ptr %216, align 1, !tbaa !9
  br i1 %.not449, label %222, label %217

217:                                              ; preds = %208
  %218 = or disjoint i64 %209, 1
  %219 = getelementptr inbounds i8, ptr %1, i64 %218
  %220 = load i8, ptr %219, align 1, !tbaa !9
  %221 = getelementptr inbounds i8, ptr %213, i64 3
  store i8 %220, ptr %221, align 1, !tbaa !9
  br label %222

222:                                              ; preds = %208, %217
  %223 = add nuw nsw i64 %.3517, 1
  %exitcond619.not = icmp eq i64 %223, %11
  br i1 %exitcond619.not, label %.critedge457, label %208, !llvm.loop !48

224:                                              ; preds = %58
  switch i32 %61, label %.critedge457 [
    i32 0, label %.preheader488
    i32 2, label %.preheader490
    i32 4, label %.preheader492
    i32 6, label %.preheader495
  ]

.preheader495:                                    ; preds = %224
  %.not569 = icmp eq i32 %10, 0
  br i1 %.not569, label %.critedge457, label %.preheader494.lr.ph

.preheader494.lr.ph:                              ; preds = %.preheader495
  %225 = zext nneg i32 %13 to i64
  %.not570 = icmp ult i32 %12, 8
  br i1 %.not570, label %.critedge457, label %.preheader494.us.preheader

.preheader494.us.preheader:                       ; preds = %.preheader494.lr.ph
  %226 = mul nuw nsw i64 %225, %11
  %scevgep = getelementptr i8, ptr %0, i64 %226
  %227 = shl nuw nsw i64 %11, 3
  %228 = shl nuw nsw i64 %225, 1
  %229 = getelementptr i8, ptr %1, i64 %227
  %230 = getelementptr i8, ptr %229, i64 %228
  %scevgep700 = getelementptr i8, ptr %230, i64 -9
  %min.iters.check702 = icmp ult i32 %12, 72
  %bound0 = icmp ugt ptr %scevgep700, %0
  %bound1 = icmp ugt ptr %scevgep, %1
  %found.conflict = and i1 %bound0, %bound1
  %min.iters.check705 = icmp ult i32 %12, 136
  %n.mod.vf708 = and i64 %225, 15
  %231 = icmp eq i64 %n.mod.vf708, 0
  %232 = select i1 %231, i64 16, i64 %n.mod.vf708
  %n.vec709 = sub nsw i64 %225, %232
  %min.epilog.iters.check718 = icmp ult i64 %232, 9
  %n.mod.vf720 = and i64 %225, 7
  %233 = icmp eq i64 %n.mod.vf720, 0
  %234 = select i1 %233, i64 8, i64 %n.mod.vf720
  %n.vec721 = sub nsw i64 %225, %234
  br label %iter.check704

iter.check704:                                    ; preds = %.preheader494.us.preheader, %._crit_edge.us
  %.8501.us = phi i64 [ %275, %._crit_edge.us ], [ 0, %.preheader494.us.preheader ]
  %235 = shl nuw nsw i64 %.8501.us, 3
  %236 = getelementptr inbounds i8, ptr %1, i64 %235
  %237 = mul nuw nsw i64 %.8501.us, %225
  %238 = getelementptr inbounds i8, ptr %0, i64 %237
  %brmerge827 = select i1 %min.iters.check702, i1 true, i1 %found.conflict
  br i1 %brmerge827, label %vec.epilog.scalar.ph714.preheader, label %vector.main.loop.iter.check706

vector.main.loop.iter.check706:                   ; preds = %iter.check704
  br i1 %min.iters.check705, label %vec.epilog.ph715, label %vector.body710

vector.body710:                                   ; preds = %vector.main.loop.iter.check706, %vector.body710
  %index711 = phi i64 [ %index.next712, %vector.body710 ], [ 0, %vector.main.loop.iter.check706 ]
  %239 = shl nuw nsw i64 %index711, 1
  %240 = getelementptr inbounds i8, ptr %236, i64 %239
  %wide.vec = load <32 x i8>, ptr %240, align 1, !tbaa !9
  %strided.vec = shufflevector <32 x i8> %wide.vec, <32 x i8> poison, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
  %241 = getelementptr inbounds i8, ptr %238, i64 %index711
  store <16 x i8> %strided.vec, ptr %241, align 1, !tbaa !9, !alias.scope !49, !noalias !52
  %index.next712 = add nuw i64 %index711, 16
  %242 = icmp eq i64 %index.next712, %n.vec709
  br i1 %242, label %vec.epilog.iter.check716, label %vector.body710, !llvm.loop !54

vec.epilog.iter.check716:                         ; preds = %vector.body710
  br i1 %min.epilog.iters.check718, label %vec.epilog.scalar.ph714.preheader, label %vec.epilog.ph715

vec.epilog.ph715:                                 ; preds = %vector.main.loop.iter.check706, %vec.epilog.iter.check716
  %vec.epilog.resume.val719 = phi i64 [ %n.vec709, %vec.epilog.iter.check716 ], [ 0, %vector.main.loop.iter.check706 ]
  br label %vec.epilog.vector.body723

vec.epilog.vector.body723:                        ; preds = %vec.epilog.vector.body723, %vec.epilog.ph715
  %index724 = phi i64 [ %vec.epilog.resume.val719, %vec.epilog.ph715 ], [ %index.next727, %vec.epilog.vector.body723 ]
  %243 = shl nuw nsw i64 %index724, 1
  %244 = getelementptr inbounds i8, ptr %236, i64 %243
  %wide.vec725 = load <16 x i8>, ptr %244, align 1, !tbaa !9
  %strided.vec726 = shufflevector <16 x i8> %wide.vec725, <16 x i8> poison, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
  %245 = getelementptr inbounds i8, ptr %238, i64 %index724
  store <8 x i8> %strided.vec726, ptr %245, align 1, !tbaa !9, !alias.scope !55, !noalias !58
  %index.next727 = add nuw i64 %index724, 8
  %246 = icmp eq i64 %index.next727, %n.vec721
  br i1 %246, label %vec.epilog.scalar.ph714.preheader, label %vec.epilog.vector.body723, !llvm.loop !60

vec.epilog.scalar.ph714.preheader:                ; preds = %vec.epilog.vector.body723, %iter.check704, %vec.epilog.iter.check716
  %.4415499.us.ph = phi i64 [ 0, %iter.check704 ], [ %n.vec709, %vec.epilog.iter.check716 ], [ %n.vec721, %vec.epilog.vector.body723 ]
  %247 = sub nsw i64 %225, %.4415499.us.ph
  %xtraiter784 = and i64 %247, 3
  %lcmp.mod785.not = icmp eq i64 %xtraiter784, 0
  br i1 %lcmp.mod785.not, label %vec.epilog.scalar.ph714.prol.loopexit, label %vec.epilog.scalar.ph714.prol

vec.epilog.scalar.ph714.prol:                     ; preds = %vec.epilog.scalar.ph714.preheader, %vec.epilog.scalar.ph714.prol
  %.4415499.us.prol = phi i64 [ %252, %vec.epilog.scalar.ph714.prol ], [ %.4415499.us.ph, %vec.epilog.scalar.ph714.preheader ]
  %prol.iter786 = phi i64 [ %prol.iter786.next, %vec.epilog.scalar.ph714.prol ], [ 0, %vec.epilog.scalar.ph714.preheader ]
  %248 = shl nuw nsw i64 %.4415499.us.prol, 1
  %249 = getelementptr inbounds i8, ptr %236, i64 %248
  %250 = load i8, ptr %249, align 1, !tbaa !9
  %251 = getelementptr inbounds i8, ptr %238, i64 %.4415499.us.prol
  store i8 %250, ptr %251, align 1, !tbaa !9
  %252 = add nuw nsw i64 %.4415499.us.prol, 1
  %prol.iter786.next = add i64 %prol.iter786, 1
  %prol.iter786.cmp.not = icmp eq i64 %prol.iter786.next, %xtraiter784
  br i1 %prol.iter786.cmp.not, label %vec.epilog.scalar.ph714.prol.loopexit, label %vec.epilog.scalar.ph714.prol, !llvm.loop !61

vec.epilog.scalar.ph714.prol.loopexit:            ; preds = %vec.epilog.scalar.ph714.prol, %vec.epilog.scalar.ph714.preheader
  %.4415499.us.unr = phi i64 [ %.4415499.us.ph, %vec.epilog.scalar.ph714.preheader ], [ %252, %vec.epilog.scalar.ph714.prol ]
  %253 = sub nsw i64 %.4415499.us.ph, %225
  %254 = icmp ugt i64 %253, -4
  br i1 %254, label %._crit_edge.us, label %vec.epilog.scalar.ph714

vec.epilog.scalar.ph714:                          ; preds = %vec.epilog.scalar.ph714.prol.loopexit, %vec.epilog.scalar.ph714
  %.4415499.us = phi i64 [ %274, %vec.epilog.scalar.ph714 ], [ %.4415499.us.unr, %vec.epilog.scalar.ph714.prol.loopexit ]
  %255 = shl nuw nsw i64 %.4415499.us, 1
  %256 = getelementptr inbounds i8, ptr %236, i64 %255
  %257 = load i8, ptr %256, align 1, !tbaa !9
  %258 = getelementptr inbounds i8, ptr %238, i64 %.4415499.us
  store i8 %257, ptr %258, align 1, !tbaa !9
  %259 = add nuw nsw i64 %.4415499.us, 1
  %260 = shl nuw nsw i64 %259, 1
  %261 = getelementptr inbounds i8, ptr %236, i64 %260
  %262 = load i8, ptr %261, align 1, !tbaa !9
  %263 = getelementptr inbounds i8, ptr %238, i64 %259
  store i8 %262, ptr %263, align 1, !tbaa !9
  %264 = add nuw nsw i64 %.4415499.us, 2
  %265 = shl nuw nsw i64 %264, 1
  %266 = getelementptr inbounds i8, ptr %236, i64 %265
  %267 = load i8, ptr %266, align 1, !tbaa !9
  %268 = getelementptr inbounds i8, ptr %238, i64 %264
  store i8 %267, ptr %268, align 1, !tbaa !9
  %269 = add nuw nsw i64 %.4415499.us, 3
  %270 = shl nuw nsw i64 %269, 1
  %271 = getelementptr inbounds i8, ptr %236, i64 %270
  %272 = load i8, ptr %271, align 1, !tbaa !9
  %273 = getelementptr inbounds i8, ptr %238, i64 %269
  store i8 %272, ptr %273, align 1, !tbaa !9
  %274 = add nuw nsw i64 %.4415499.us, 4
  %exitcond610.not.3 = icmp eq i64 %274, %225
  br i1 %exitcond610.not.3, label %._crit_edge.us, label %vec.epilog.scalar.ph714, !llvm.loop !62

._crit_edge.us:                                   ; preds = %vec.epilog.scalar.ph714, %vec.epilog.scalar.ph714.prol.loopexit
  %275 = add nuw nsw i64 %.8501.us, 1
  %exitcond611.not = icmp eq i64 %275, %11
  br i1 %exitcond611.not, label %.critedge457, label %iter.check704, !llvm.loop !63

.preheader492:                                    ; preds = %224
  %.not571 = icmp eq i32 %10, 0
  br i1 %.not571, label %.critedge457, label %.lr.ph503

.lr.ph503:                                        ; preds = %.preheader492
  %276 = zext nneg i32 %13 to i64
  %.not444 = icmp eq i32 %14, 0
  br label %364

.preheader490:                                    ; preds = %224
  %invariant.gep = getelementptr inbounds i8, ptr %0, i64 3
  %.not572 = icmp eq i32 %10, 0
  br i1 %.not572, label %.critedge457, label %.lr.ph508

.lr.ph508:                                        ; preds = %.preheader490
  %.not445 = icmp eq i32 %14, 0
  %277 = zext nneg i32 %13 to i64
  %278 = getelementptr inbounds i8, ptr %3, i64 24
  %279 = getelementptr inbounds i8, ptr %3, i64 28
  %280 = getelementptr inbounds i8, ptr %3, i64 32
  %281 = getelementptr inbounds i8, ptr %3, i64 36
  br label %317

.preheader488:                                    ; preds = %224
  %invariant.gep509 = getelementptr inbounds i8, ptr %0, i64 3
  %.not573 = icmp eq i32 %10, 0
  br i1 %.not573, label %.critedge457, label %.lr.ph512

.lr.ph512:                                        ; preds = %.preheader488
  %.not447 = icmp eq i32 %14, 0
  %282 = zext nneg i32 %13 to i64
  %283 = getelementptr inbounds i8, ptr %3, i64 24
  %284 = getelementptr inbounds i8, ptr %3, i64 28
  br label %285

285:                                              ; preds = %.lr.ph512, %315
  %.5511 = phi i64 [ 0, %.lr.ph512 ], [ %316, %315 ]
  %.pre646 = mul nuw nsw i64 %.5511, %282
  br i1 %.not447, label %.thread651, label %293

.thread651:                                       ; preds = %285
  %286 = shl nuw nsw i64 %.5511, 1
  %287 = getelementptr inbounds i8, ptr %1, i64 %286
  %288 = load i8, ptr %287, align 1, !tbaa !9
  %289 = getelementptr inbounds i8, ptr %0, i64 %.pre646
  store i8 %288, ptr %289, align 1, !tbaa !9
  %290 = getelementptr inbounds i8, ptr %289, i64 1
  store i8 %288, ptr %290, align 1, !tbaa !9
  %291 = load i8, ptr %287, align 1, !tbaa !9
  %292 = getelementptr inbounds i8, ptr %289, i64 2
  store i8 %291, ptr %292, align 1, !tbaa !9
  br label %315

293:                                              ; preds = %285
  %gep510 = getelementptr inbounds i8, ptr %invariant.gep509, i64 %.pre646
  store i8 -1, ptr %gep510, align 1, !tbaa !9
  %294 = shl nuw nsw i64 %.5511, 1
  %295 = getelementptr inbounds i8, ptr %1, i64 %294
  %296 = load i8, ptr %295, align 1, !tbaa !9
  %297 = getelementptr inbounds i8, ptr %0, i64 %.pre646
  store i8 %296, ptr %297, align 1, !tbaa !9
  %298 = getelementptr inbounds i8, ptr %297, i64 1
  store i8 %296, ptr %298, align 1, !tbaa !9
  %299 = load i8, ptr %295, align 1, !tbaa !9
  %300 = getelementptr inbounds i8, ptr %297, i64 2
  store i8 %299, ptr %300, align 1, !tbaa !9
  %301 = load i32, ptr %283, align 8, !tbaa !38
  %.not448 = icmp eq i32 %301, 0
  br i1 %.not448, label %315, label %302

302:                                              ; preds = %293
  %303 = getelementptr inbounds i8, ptr %1, i64 %.5511
  %304 = load i8, ptr %303, align 1, !tbaa !9
  %305 = zext i8 %304 to i32
  %306 = shl nuw nsw i32 %305, 8
  %307 = getelementptr inbounds i8, ptr %303, i64 1
  %308 = load i8, ptr %307, align 1, !tbaa !9
  %309 = zext i8 %308 to i32
  %310 = or disjoint i32 %306, %309
  %311 = load i32, ptr %284, align 4, !tbaa !39
  %312 = icmp eq i32 %310, %311
  br i1 %312, label %313, label %315

313:                                              ; preds = %302
  %314 = getelementptr inbounds i8, ptr %297, i64 3
  store i8 0, ptr %314, align 1, !tbaa !9
  br label %315

315:                                              ; preds = %.thread651, %293, %302, %313
  %316 = add nuw nsw i64 %.5511, 1
  %exitcond615.not = icmp eq i64 %316, %11
  br i1 %exitcond615.not, label %.critedge457, label %285, !llvm.loop !64

317:                                              ; preds = %.lr.ph508, %362
  %.6507 = phi i64 [ 0, %.lr.ph508 ], [ %363, %362 ]
  %.pre648 = mul nuw nsw i64 %.6507, %277
  br i1 %.not445, label %._crit_edge636, label %318

318:                                              ; preds = %317
  %gep = getelementptr inbounds i8, ptr %invariant.gep, i64 %.pre648
  store i8 -1, ptr %gep, align 1, !tbaa !9
  br label %._crit_edge636

._crit_edge636:                                   ; preds = %317, %318
  %319 = mul nuw nsw i64 %.6507, 6
  %320 = getelementptr inbounds i8, ptr %1, i64 %319
  %321 = getelementptr inbounds i8, ptr %0, i64 %.pre648
  %322 = load i8, ptr %320, align 1, !tbaa !9
  store i8 %322, ptr %321, align 1, !tbaa !9
  %323 = getelementptr inbounds i8, ptr %320, i64 2
  %324 = load i8, ptr %323, align 1, !tbaa !9
  %325 = getelementptr inbounds i8, ptr %321, i64 1
  store i8 %324, ptr %325, align 1, !tbaa !9
  %326 = getelementptr inbounds i8, ptr %320, i64 4
  %327 = load i8, ptr %326, align 1, !tbaa !9
  %328 = getelementptr inbounds i8, ptr %321, i64 2
  store i8 %327, ptr %328, align 1, !tbaa !9
  br i1 %.not445, label %362, label %329

329:                                              ; preds = %._crit_edge636
  %330 = load i32, ptr %278, align 8, !tbaa !38
  %.not446 = icmp eq i32 %330, 0
  br i1 %.not446, label %362, label %331

331:                                              ; preds = %329
  %332 = load i8, ptr %320, align 1, !tbaa !9
  %333 = zext i8 %332 to i32
  %334 = shl nuw nsw i32 %333, 8
  %335 = or disjoint i64 %319, 1
  %336 = getelementptr inbounds i8, ptr %1, i64 %335
  %337 = load i8, ptr %336, align 1, !tbaa !9
  %338 = zext i8 %337 to i32
  %339 = or disjoint i32 %334, %338
  %340 = load i32, ptr %279, align 4, !tbaa !39
  %341 = icmp eq i32 %339, %340
  br i1 %341, label %342, label %362

342:                                              ; preds = %331
  %343 = load i8, ptr %323, align 1, !tbaa !9
  %344 = zext i8 %343 to i32
  %345 = shl nuw nsw i32 %344, 8
  %346 = getelementptr inbounds i8, ptr %320, i64 3
  %347 = load i8, ptr %346, align 1, !tbaa !9
  %348 = zext i8 %347 to i32
  %349 = or disjoint i32 %345, %348
  %350 = load i32, ptr %280, align 8, !tbaa !41
  %351 = icmp eq i32 %349, %350
  br i1 %351, label %352, label %362

352:                                              ; preds = %342
  %353 = zext i8 %327 to i32
  %354 = shl nuw nsw i32 %353, 8
  %355 = getelementptr inbounds i8, ptr %320, i64 5
  %356 = load i8, ptr %355, align 1, !tbaa !9
  %357 = zext i8 %356 to i32
  %358 = or disjoint i32 %354, %357
  %359 = load i32, ptr %281, align 4, !tbaa !42
  %360 = icmp eq i32 %358, %359
  br i1 %360, label %361, label %362

361:                                              ; preds = %352
  %gep506 = getelementptr inbounds i8, ptr %invariant.gep, i64 %.pre648
  store i8 0, ptr %gep506, align 1, !tbaa !9
  br label %362

362:                                              ; preds = %._crit_edge636, %329, %331, %342, %352, %361
  %363 = add nuw nsw i64 %.6507, 1
  %exitcond614.not = icmp eq i64 %363, %11
  br i1 %exitcond614.not, label %.critedge457, label %317, !llvm.loop !65

364:                                              ; preds = %.lr.ph503, %378
  %.7502 = phi i64 [ 0, %.lr.ph503 ], [ %379, %378 ]
  %365 = shl nuw nsw i64 %.7502, 2
  %366 = getelementptr inbounds i8, ptr %1, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !9
  %368 = mul nuw nsw i64 %.7502, %276
  %369 = getelementptr inbounds i8, ptr %0, i64 %368
  store i8 %367, ptr %369, align 1, !tbaa !9
  %370 = getelementptr inbounds i8, ptr %369, i64 1
  store i8 %367, ptr %370, align 1, !tbaa !9
  %371 = load i8, ptr %366, align 1, !tbaa !9
  %372 = getelementptr inbounds i8, ptr %369, i64 2
  store i8 %371, ptr %372, align 1, !tbaa !9
  br i1 %.not444, label %378, label %373

373:                                              ; preds = %364
  %374 = or disjoint i64 %365, 2
  %375 = getelementptr inbounds i8, ptr %1, i64 %374
  %376 = load i8, ptr %375, align 1, !tbaa !9
  %377 = getelementptr inbounds i8, ptr %369, i64 3
  store i8 %376, ptr %377, align 1, !tbaa !9
  br label %378

378:                                              ; preds = %364, %373
  %379 = add nuw nsw i64 %.7502, 1
  %exitcond612.not = icmp eq i64 %379, %11
  br i1 %exitcond612.not, label %.critedge457, label %364, !llvm.loop !66

380:                                              ; preds = %58
  switch i32 %61, label %.critedge457 [
    i32 0, label %.preheader470
    i32 3, label %.preheader473
  ]

.preheader473:                                    ; preds = %380
  %invariant.gep541 = getelementptr inbounds i8, ptr %0, i64 3
  %.not581 = icmp eq i32 %10, 0
  br i1 %.not581, label %.critedge457, label %.lr.ph544

.lr.ph544:                                        ; preds = %.preheader473
  %.not438 = icmp eq i32 %14, 0
  %381 = zext nneg i32 %13 to i64
  %382 = getelementptr inbounds i8, ptr %3, i64 16
  %.not582 = icmp ult i32 %12, 8
  %383 = getelementptr inbounds i8, ptr %3, i64 8
  %384 = add nsw i64 %381, -1
  %xtraiter793 = and i64 %381, 3
  %385 = icmp ult i64 %384, 3
  %unroll_iter795 = and i64 %381, 536870908
  %lcmp.mod794.not = icmp eq i64 %xtraiter793, 0
  br label %412

.preheader470:                                    ; preds = %380
  %invariant.gep548 = getelementptr inbounds i8, ptr %0, i64 3
  %.not583 = icmp eq i32 %10, 0
  br i1 %.not583, label %.critedge457, label %.lr.ph551

.lr.ph551:                                        ; preds = %.preheader470
  %.not440 = icmp eq i32 %14, 0
  %386 = zext nneg i32 %13 to i64
  %387 = getelementptr inbounds i8, ptr %3, i64 24
  %388 = getelementptr inbounds i8, ptr %3, i64 28
  br label %389

389:                                              ; preds = %.lr.ph551, %.critedge
  %.9550 = phi i64 [ 0, %.lr.ph551 ], [ %411, %.critedge ]
  %390 = load i32, ptr %59, align 4, !tbaa !22
  %391 = zext i32 %390 to i64
  %392 = call noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef nonnull %9, ptr noundef %1, i64 noundef %391)
  %.pre640 = mul nuw nsw i64 %.9550, %386
  br i1 %.not440, label %.critedge, label %393

393:                                              ; preds = %389
  %gep549 = getelementptr inbounds i8, ptr %invariant.gep548, i64 %.pre640
  store i8 -1, ptr %gep549, align 1, !tbaa !9
  %394 = load i32, ptr %387, align 8, !tbaa !38
  %395 = icmp ne i32 %394, 0
  %396 = icmp ne i32 %392, 0
  %or.cond = and i1 %396, %395
  br i1 %or.cond, label %397, label %.critedge

397:                                              ; preds = %393
  %398 = load i32, ptr %59, align 4, !tbaa !22
  %notmask441 = shl nsw i32 -1, %398
  %399 = load i32, ptr %388, align 4, !tbaa !39
  %400 = xor i32 %notmask441, %399
  %401 = icmp ne i32 %400, -1
  %.not442 = icmp eq i32 %398, 0
  %or.cond455 = or i1 %.not442, %401
  br i1 %or.cond455, label %.critedge, label %402

402:                                              ; preds = %397
  store i8 0, ptr %gep549, align 1, !tbaa !9
  br label %.critedge

.critedge:                                        ; preds = %389, %402, %397, %393
  %403 = mul i32 %392, 255
  %404 = load i32, ptr %59, align 4, !tbaa !22
  %notmask443 = shl nsw i32 -1, %404
  %405 = xor i32 %notmask443, -1
  %406 = udiv i32 %403, %405
  %407 = trunc i32 %406 to i8
  %408 = getelementptr inbounds i8, ptr %0, i64 %.pre640
  store i8 %407, ptr %408, align 1, !tbaa !9
  %409 = getelementptr inbounds i8, ptr %408, i64 1
  store i8 %407, ptr %409, align 1, !tbaa !9
  %410 = getelementptr inbounds i8, ptr %408, i64 2
  store i8 %407, ptr %410, align 1, !tbaa !9
  %411 = add nuw nsw i64 %.9550, 1
  %exitcond628.not = icmp eq i64 %411, %11
  br i1 %exitcond628.not, label %.critedge457, label %389, !llvm.loop !67

412:                                              ; preds = %.lr.ph544, %._crit_edge540
  %.10543 = phi i64 [ 0, %.lr.ph544 ], [ %455, %._crit_edge540 ]
  %413 = load i32, ptr %59, align 4, !tbaa !22
  %414 = zext i32 %413 to i64
  %415 = call noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef nonnull %9, ptr noundef %1, i64 noundef %414)
  br i1 %.not438, label %418, label %416

416:                                              ; preds = %412
  %417 = mul nuw nsw i64 %.10543, %381
  %gep542 = getelementptr inbounds i8, ptr %invariant.gep541, i64 %417
  store i8 -1, ptr %gep542, align 1, !tbaa !9
  br label %418

418:                                              ; preds = %416, %412
  %419 = zext i32 %415 to i64
  %420 = load i64, ptr %382, align 8, !tbaa !44
  %.not439 = icmp ugt i64 %420, %419
  br i1 %.not439, label %.preheader472, label %.critedge457

.preheader472:                                    ; preds = %418
  br i1 %.not582, label %._crit_edge540, label %.lr.ph539

.lr.ph539:                                        ; preds = %.preheader472
  %421 = shl i32 %415, 2
  %422 = zext i32 %421 to i64
  %423 = mul nuw nsw i64 %.10543, %381
  %424 = getelementptr inbounds i8, ptr %0, i64 %423
  br i1 %385, label %._crit_edge540.loopexit.unr-lcssa, label %.lr.ph539.new

.lr.ph539.new:                                    ; preds = %.lr.ph539, %.lr.ph539.new
  %.5416538 = phi i64 [ %448, %.lr.ph539.new ], [ 0, %.lr.ph539 ]
  %niter796 = phi i64 [ %niter796.next.3, %.lr.ph539.new ], [ 0, %.lr.ph539 ]
  %425 = load ptr, ptr %383, align 8, !tbaa !45
  %426 = getelementptr inbounds i8, ptr %425, i64 %.5416538
  %427 = getelementptr inbounds i8, ptr %426, i64 %422
  %428 = load i8, ptr %427, align 1, !tbaa !9
  %429 = getelementptr inbounds i8, ptr %424, i64 %.5416538
  store i8 %428, ptr %429, align 1, !tbaa !9
  %430 = or disjoint i64 %.5416538, 1
  %431 = load ptr, ptr %383, align 8, !tbaa !45
  %432 = getelementptr inbounds i8, ptr %431, i64 %430
  %433 = getelementptr inbounds i8, ptr %432, i64 %422
  %434 = load i8, ptr %433, align 1, !tbaa !9
  %435 = getelementptr inbounds i8, ptr %424, i64 %430
  store i8 %434, ptr %435, align 1, !tbaa !9
  %436 = or disjoint i64 %.5416538, 2
  %437 = load ptr, ptr %383, align 8, !tbaa !45
  %438 = getelementptr inbounds i8, ptr %437, i64 %436
  %439 = getelementptr inbounds i8, ptr %438, i64 %422
  %440 = load i8, ptr %439, align 1, !tbaa !9
  %441 = getelementptr inbounds i8, ptr %424, i64 %436
  store i8 %440, ptr %441, align 1, !tbaa !9
  %442 = or disjoint i64 %.5416538, 3
  %443 = load ptr, ptr %383, align 8, !tbaa !45
  %444 = getelementptr inbounds i8, ptr %443, i64 %442
  %445 = getelementptr inbounds i8, ptr %444, i64 %422
  %446 = load i8, ptr %445, align 1, !tbaa !9
  %447 = getelementptr inbounds i8, ptr %424, i64 %442
  store i8 %446, ptr %447, align 1, !tbaa !9
  %448 = add nuw nsw i64 %.5416538, 4
  %niter796.next.3 = add i64 %niter796, 4
  %niter796.ncmp.3 = icmp eq i64 %niter796.next.3, %unroll_iter795
  br i1 %niter796.ncmp.3, label %._crit_edge540.loopexit.unr-lcssa, label %.lr.ph539.new, !llvm.loop !68

._crit_edge540.loopexit.unr-lcssa:                ; preds = %.lr.ph539.new, %.lr.ph539
  %.5416538.unr = phi i64 [ 0, %.lr.ph539 ], [ %448, %.lr.ph539.new ]
  br i1 %lcmp.mod794.not, label %._crit_edge540, label %.epil.preheader792

.epil.preheader792:                               ; preds = %._crit_edge540.loopexit.unr-lcssa, %.epil.preheader792
  %.5416538.epil = phi i64 [ %454, %.epil.preheader792 ], [ %.5416538.unr, %._crit_edge540.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader792 ], [ 0, %._crit_edge540.loopexit.unr-lcssa ]
  %449 = load ptr, ptr %383, align 8, !tbaa !45
  %450 = getelementptr inbounds i8, ptr %449, i64 %.5416538.epil
  %451 = getelementptr inbounds i8, ptr %450, i64 %422
  %452 = load i8, ptr %451, align 1, !tbaa !9
  %453 = getelementptr inbounds i8, ptr %424, i64 %.5416538.epil
  store i8 %452, ptr %453, align 1, !tbaa !9
  %454 = add nuw nsw i64 %.5416538.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter793
  br i1 %epil.iter.cmp.not, label %._crit_edge540, label %.epil.preheader792, !llvm.loop !69

._crit_edge540:                                   ; preds = %._crit_edge540.loopexit.unr-lcssa, %.epil.preheader792, %.preheader472
  %455 = add nuw nsw i64 %.10543, 1
  %exitcond627.not = icmp eq i64 %455, %11
  br i1 %exitcond627.not, label %.critedge457, label %412, !llvm.loop !70

456:                                              ; preds = %52, %54
  %457 = tail call noundef i32 @_Z33LodePNG_InfoColor_isGreyscaleTypePK17LodePNG_InfoColor(ptr noundef nonnull %2)
  %.not426 = icmp eq i32 %457, 0
  br i1 %.not426, label %.critedge457, label %458

458:                                              ; preds = %456
  %459 = getelementptr inbounds i8, ptr %2, i64 4
  %460 = load i32, ptr %459, align 4, !tbaa !22
  %461 = icmp eq i32 %460, 8
  br i1 %461, label %462, label %.critedge457

462:                                              ; preds = %458
  %463 = tail call noundef i32 @_Z33LodePNG_InfoColor_isGreyscaleTypePK17LodePNG_InfoColor(ptr noundef %3)
  %.not427 = icmp eq i32 %463, 0
  br i1 %.not427, label %.critedge457, label %464

464:                                              ; preds = %462
  %465 = getelementptr inbounds i8, ptr %3, i64 4
  %466 = load i32, ptr %465, align 4, !tbaa !22
  %467 = load i32, ptr %3, align 8, !tbaa !18
  switch i32 %466, label %610 [
    i32 8, label %468
    i32 16, label %533
  ]

468:                                              ; preds = %464
  switch i32 %467, label %.critedge457 [
    i32 0, label %.preheader462
    i32 4, label %.preheader464
  ]

.preheader464:                                    ; preds = %468
  %.not586 = icmp eq i32 %10, 0
  br i1 %.not586, label %.critedge457, label %.lr.ph559

.lr.ph559:                                        ; preds = %.preheader464
  %469 = zext nneg i32 %13 to i64
  %.not435 = icmp eq i32 %14, 0
  %xtraiter809 = and i64 %11, 1
  %470 = icmp eq i32 %10, 1
  br i1 %470, label %.critedge457.loopexit767.unr-lcssa, label %.lr.ph559.new

.lr.ph559.new:                                    ; preds = %.lr.ph559
  %unroll_iter812 = and i64 %11, 4294967294
  br label %508

.preheader462:                                    ; preds = %468
  %invariant.gep560 = getelementptr inbounds i8, ptr %0, i64 1
  %.not587 = icmp eq i32 %10, 0
  br i1 %.not587, label %.critedge457, label %.lr.ph563

.lr.ph563:                                        ; preds = %.preheader462
  %.not436 = icmp eq i32 %14, 0
  %471 = zext nneg i32 %13 to i64
  %472 = getelementptr inbounds i8, ptr %3, i64 24
  %473 = getelementptr inbounds i8, ptr %3, i64 28
  br i1 %.not436, label %.thread.us.preheader, label %.lr.ph563.split

.thread.us.preheader:                             ; preds = %.lr.ph563
  %xtraiter814 = and i64 %11, 3
  %474 = icmp ult i32 %10, 4
  br i1 %474, label %.critedge457.loopexit765.unr-lcssa, label %.thread.us.preheader.new

.thread.us.preheader.new:                         ; preds = %.thread.us.preheader
  %unroll_iter817 = and i64 %11, 4294967292
  br label %.thread.us

.thread.us:                                       ; preds = %.thread.us, %.thread.us.preheader.new
  %.11562.us = phi i64 [ 0, %.thread.us.preheader.new ], [ %494, %.thread.us ]
  %niter818 = phi i64 [ 0, %.thread.us.preheader.new ], [ %niter818.next.3, %.thread.us ]
  %475 = getelementptr inbounds i8, ptr %1, i64 %.11562.us
  %476 = load i8, ptr %475, align 1, !tbaa !9
  %477 = mul nuw nsw i64 %.11562.us, %471
  %478 = getelementptr inbounds i8, ptr %0, i64 %477
  store i8 %476, ptr %478, align 1, !tbaa !9
  %479 = or disjoint i64 %.11562.us, 1
  %480 = getelementptr inbounds i8, ptr %1, i64 %479
  %481 = load i8, ptr %480, align 1, !tbaa !9
  %482 = mul nuw nsw i64 %479, %471
  %483 = getelementptr inbounds i8, ptr %0, i64 %482
  store i8 %481, ptr %483, align 1, !tbaa !9
  %484 = or disjoint i64 %.11562.us, 2
  %485 = getelementptr inbounds i8, ptr %1, i64 %484
  %486 = load i8, ptr %485, align 1, !tbaa !9
  %487 = mul nuw nsw i64 %484, %471
  %488 = getelementptr inbounds i8, ptr %0, i64 %487
  store i8 %486, ptr %488, align 1, !tbaa !9
  %489 = or disjoint i64 %.11562.us, 3
  %490 = getelementptr inbounds i8, ptr %1, i64 %489
  %491 = load i8, ptr %490, align 1, !tbaa !9
  %492 = mul nuw nsw i64 %489, %471
  %493 = getelementptr inbounds i8, ptr %0, i64 %492
  store i8 %491, ptr %493, align 1, !tbaa !9
  %494 = add nuw nsw i64 %.11562.us, 4
  %niter818.next.3 = add i64 %niter818, 4
  %niter818.ncmp.3 = icmp eq i64 %niter818.next.3, %unroll_iter817
  br i1 %niter818.ncmp.3, label %.critedge457.loopexit765.unr-lcssa, label %.thread.us, !llvm.loop !71

.lr.ph563.split:                                  ; preds = %.lr.ph563, %506
  %.11562 = phi i64 [ %507, %506 ], [ 0, %.lr.ph563 ]
  %495 = mul nuw nsw i64 %.11562, %471
  %gep561 = getelementptr inbounds i8, ptr %invariant.gep560, i64 %495
  store i8 -1, ptr %gep561, align 1, !tbaa !9
  %496 = getelementptr inbounds i8, ptr %1, i64 %.11562
  %497 = load i8, ptr %496, align 1, !tbaa !9
  %498 = getelementptr inbounds i8, ptr %0, i64 %495
  store i8 %497, ptr %498, align 1, !tbaa !9
  %499 = load i32, ptr %472, align 8, !tbaa !38
  %.not437 = icmp eq i32 %499, 0
  br i1 %.not437, label %506, label %500

500:                                              ; preds = %.lr.ph563.split
  %501 = zext i8 %497 to i32
  %502 = load i32, ptr %473, align 4, !tbaa !39
  %503 = icmp eq i32 %502, %501
  br i1 %503, label %504, label %506

504:                                              ; preds = %500
  %505 = getelementptr inbounds i8, ptr %498, i64 1
  store i8 0, ptr %505, align 1, !tbaa !9
  br label %506

506:                                              ; preds = %.lr.ph563.split, %500, %504
  %507 = add nuw nsw i64 %.11562, 1
  %exitcond633.not = icmp eq i64 %507, %11
  br i1 %exitcond633.not, label %.critedge457, label %.lr.ph563.split, !llvm.loop !71

508:                                              ; preds = %531, %.lr.ph559.new
  %.12558 = phi i64 [ 0, %.lr.ph559.new ], [ %532, %531 ]
  %niter813 = phi i64 [ 0, %.lr.ph559.new ], [ %niter813.next.1, %531 ]
  %509 = shl nuw nsw i64 %.12558, 1
  %510 = getelementptr inbounds i8, ptr %1, i64 %509
  %511 = load i8, ptr %510, align 1, !tbaa !9
  %512 = mul nuw nsw i64 %.12558, %469
  %513 = getelementptr inbounds i8, ptr %0, i64 %512
  store i8 %511, ptr %513, align 1, !tbaa !9
  br i1 %.not435, label %519, label %514

514:                                              ; preds = %508
  %515 = or disjoint i64 %509, 1
  %516 = getelementptr inbounds i8, ptr %1, i64 %515
  %517 = load i8, ptr %516, align 1, !tbaa !9
  %518 = getelementptr inbounds i8, ptr %513, i64 1
  store i8 %517, ptr %518, align 1, !tbaa !9
  br label %519

519:                                              ; preds = %508, %514
  %520 = or disjoint i64 %.12558, 1
  %521 = shl nuw nsw i64 %520, 1
  %522 = getelementptr inbounds i8, ptr %1, i64 %521
  %523 = load i8, ptr %522, align 1, !tbaa !9
  %524 = mul nuw nsw i64 %520, %469
  %525 = getelementptr inbounds i8, ptr %0, i64 %524
  store i8 %523, ptr %525, align 1, !tbaa !9
  br i1 %.not435, label %531, label %526

526:                                              ; preds = %519
  %527 = or disjoint i64 %521, 1
  %528 = getelementptr inbounds i8, ptr %1, i64 %527
  %529 = load i8, ptr %528, align 1, !tbaa !9
  %530 = getelementptr inbounds i8, ptr %525, i64 1
  store i8 %529, ptr %530, align 1, !tbaa !9
  br label %531

531:                                              ; preds = %526, %519
  %532 = add nuw nsw i64 %.12558, 2
  %niter813.next.1 = add i64 %niter813, 2
  %niter813.ncmp.1 = icmp eq i64 %niter813.next.1, %unroll_iter812
  br i1 %niter813.ncmp.1, label %.critedge457.loopexit767.unr-lcssa, label %508, !llvm.loop !72

533:                                              ; preds = %464
  switch i32 %467, label %.critedge457 [
    i32 0, label %.preheader466
    i32 4, label %.preheader468
  ]

.preheader468:                                    ; preds = %533
  %.not584 = icmp eq i32 %10, 0
  br i1 %.not584, label %.critedge457, label %.lr.ph553

.lr.ph553:                                        ; preds = %.preheader468
  %534 = zext nneg i32 %13 to i64
  %.not432 = icmp eq i32 %14, 0
  %xtraiter798 = and i64 %11, 1
  %535 = icmp eq i32 %10, 1
  br i1 %535, label %.critedge457.loopexit770.unr-lcssa, label %.lr.ph553.new

.lr.ph553.new:                                    ; preds = %.lr.ph553
  %unroll_iter801 = and i64 %11, 4294967294
  br label %585

.preheader466:                                    ; preds = %533
  %invariant.gep554 = getelementptr inbounds i8, ptr %0, i64 1
  %.not585 = icmp eq i32 %10, 0
  br i1 %.not585, label %.critedge457, label %.lr.ph557

.lr.ph557:                                        ; preds = %.preheader466
  %.not433 = icmp eq i32 %14, 0
  %536 = zext nneg i32 %13 to i64
  %537 = getelementptr inbounds i8, ptr %3, i64 24
  %538 = getelementptr inbounds i8, ptr %3, i64 28
  br i1 %.not433, label %.thread461.us.preheader, label %.lr.ph557.split

.thread461.us.preheader:                          ; preds = %.lr.ph557
  %xtraiter803 = and i64 %11, 3
  %539 = icmp ult i32 %10, 4
  br i1 %539, label %.critedge457.loopexit768.unr-lcssa, label %.thread461.us.preheader.new

.thread461.us.preheader.new:                      ; preds = %.thread461.us.preheader
  %unroll_iter806 = and i64 %11, 4294967292
  br label %.thread461.us

.thread461.us:                                    ; preds = %.thread461.us, %.thread461.us.preheader.new
  %.13556.us = phi i64 [ 0, %.thread461.us.preheader.new ], [ %563, %.thread461.us ]
  %niter807 = phi i64 [ 0, %.thread461.us.preheader.new ], [ %niter807.next.3, %.thread461.us ]
  %540 = shl nuw nsw i64 %.13556.us, 1
  %541 = getelementptr inbounds i8, ptr %1, i64 %540
  %542 = load i8, ptr %541, align 1, !tbaa !9
  %543 = mul nuw nsw i64 %.13556.us, %536
  %544 = getelementptr inbounds i8, ptr %0, i64 %543
  store i8 %542, ptr %544, align 1, !tbaa !9
  %545 = or disjoint i64 %.13556.us, 1
  %546 = shl nuw nsw i64 %545, 1
  %547 = getelementptr inbounds i8, ptr %1, i64 %546
  %548 = load i8, ptr %547, align 1, !tbaa !9
  %549 = mul nuw nsw i64 %545, %536
  %550 = getelementptr inbounds i8, ptr %0, i64 %549
  store i8 %548, ptr %550, align 1, !tbaa !9
  %551 = or disjoint i64 %.13556.us, 2
  %552 = shl nuw nsw i64 %551, 1
  %553 = getelementptr inbounds i8, ptr %1, i64 %552
  %554 = load i8, ptr %553, align 1, !tbaa !9
  %555 = mul nuw nsw i64 %551, %536
  %556 = getelementptr inbounds i8, ptr %0, i64 %555
  store i8 %554, ptr %556, align 1, !tbaa !9
  %557 = or disjoint i64 %.13556.us, 3
  %558 = shl nuw nsw i64 %557, 1
  %559 = getelementptr inbounds i8, ptr %1, i64 %558
  %560 = load i8, ptr %559, align 1, !tbaa !9
  %561 = mul nuw nsw i64 %557, %536
  %562 = getelementptr inbounds i8, ptr %0, i64 %561
  store i8 %560, ptr %562, align 1, !tbaa !9
  %563 = add nuw nsw i64 %.13556.us, 4
  %niter807.next.3 = add i64 %niter807, 4
  %niter807.ncmp.3 = icmp eq i64 %niter807.next.3, %unroll_iter806
  br i1 %niter807.ncmp.3, label %.critedge457.loopexit768.unr-lcssa, label %.thread461.us, !llvm.loop !73

.lr.ph557.split:                                  ; preds = %.lr.ph557, %583
  %.13556 = phi i64 [ %584, %583 ], [ 0, %.lr.ph557 ]
  %564 = mul nuw nsw i64 %.13556, %536
  %gep555 = getelementptr inbounds i8, ptr %invariant.gep554, i64 %564
  store i8 -1, ptr %gep555, align 1, !tbaa !9
  %565 = shl nuw nsw i64 %.13556, 1
  %566 = getelementptr inbounds i8, ptr %1, i64 %565
  %567 = load i8, ptr %566, align 1, !tbaa !9
  %568 = getelementptr inbounds i8, ptr %0, i64 %564
  store i8 %567, ptr %568, align 1, !tbaa !9
  %569 = load i32, ptr %537, align 8, !tbaa !38
  %.not434 = icmp eq i32 %569, 0
  br i1 %.not434, label %583, label %570

570:                                              ; preds = %.lr.ph557.split
  %571 = getelementptr inbounds i8, ptr %1, i64 %.13556
  %572 = load i8, ptr %571, align 1, !tbaa !9
  %573 = zext i8 %572 to i32
  %574 = shl nuw nsw i32 %573, 8
  %575 = getelementptr inbounds i8, ptr %571, i64 1
  %576 = load i8, ptr %575, align 1, !tbaa !9
  %577 = zext i8 %576 to i32
  %578 = or disjoint i32 %574, %577
  %579 = load i32, ptr %538, align 4, !tbaa !39
  %580 = icmp eq i32 %578, %579
  br i1 %580, label %581, label %583

581:                                              ; preds = %570
  %582 = getelementptr inbounds i8, ptr %568, i64 1
  store i8 0, ptr %582, align 1, !tbaa !9
  br label %583

583:                                              ; preds = %.lr.ph557.split, %570, %581
  %584 = add nuw nsw i64 %.13556, 1
  %exitcond630.not = icmp eq i64 %584, %11
  br i1 %exitcond630.not, label %.critedge457, label %.lr.ph557.split, !llvm.loop !73

585:                                              ; preds = %608, %.lr.ph553.new
  %.14552 = phi i64 [ 0, %.lr.ph553.new ], [ %609, %608 ]
  %niter802 = phi i64 [ 0, %.lr.ph553.new ], [ %niter802.next.1, %608 ]
  %586 = shl nuw nsw i64 %.14552, 2
  %587 = getelementptr inbounds i8, ptr %1, i64 %586
  %588 = load i8, ptr %587, align 1, !tbaa !9
  %589 = mul nuw nsw i64 %.14552, %534
  %590 = getelementptr inbounds i8, ptr %0, i64 %589
  store i8 %588, ptr %590, align 1, !tbaa !9
  br i1 %.not432, label %596, label %591

591:                                              ; preds = %585
  %592 = or disjoint i64 %586, 2
  %593 = getelementptr inbounds i8, ptr %1, i64 %592
  %594 = load i8, ptr %593, align 1, !tbaa !9
  %595 = getelementptr inbounds i8, ptr %590, i64 1
  store i8 %594, ptr %595, align 1, !tbaa !9
  br label %596

596:                                              ; preds = %585, %591
  %597 = or disjoint i64 %.14552, 1
  %598 = shl nuw nsw i64 %597, 2
  %599 = getelementptr inbounds i8, ptr %1, i64 %598
  %600 = load i8, ptr %599, align 1, !tbaa !9
  %601 = mul nuw nsw i64 %597, %534
  %602 = getelementptr inbounds i8, ptr %0, i64 %601
  store i8 %600, ptr %602, align 1, !tbaa !9
  br i1 %.not432, label %608, label %603

603:                                              ; preds = %596
  %604 = or disjoint i64 %598, 2
  %605 = getelementptr inbounds i8, ptr %1, i64 %604
  %606 = load i8, ptr %605, align 1, !tbaa !9
  %607 = getelementptr inbounds i8, ptr %602, i64 1
  store i8 %606, ptr %607, align 1, !tbaa !9
  br label %608

608:                                              ; preds = %603, %596
  %609 = add nuw nsw i64 %.14552, 2
  %niter802.next.1 = add i64 %niter802, 2
  %niter802.ncmp.1 = icmp eq i64 %niter802.next.1, %unroll_iter801
  br i1 %niter802.ncmp.1, label %.critedge457.loopexit770.unr-lcssa, label %585, !llvm.loop !74

610:                                              ; preds = %464
  %.not428 = icmp eq i32 %467, 0
  br i1 %.not428, label %.preheader, label %.critedge457

.preheader:                                       ; preds = %610
  %invariant.gep564 = getelementptr inbounds i8, ptr %0, i64 1
  %.not588 = icmp eq i32 %10, 0
  br i1 %.not588, label %.critedge457, label %.lr.ph567

.lr.ph567:                                        ; preds = %.preheader
  %.not429 = icmp eq i32 %14, 0
  %611 = zext nneg i32 %13 to i64
  %612 = getelementptr inbounds i8, ptr %3, i64 24
  %613 = getelementptr inbounds i8, ptr %3, i64 28
  br label %614

614:                                              ; preds = %.lr.ph567, %.critedge459
  %.15566 = phi i64 [ 0, %.lr.ph567 ], [ %634, %.critedge459 ]
  %615 = load i32, ptr %465, align 4, !tbaa !22
  %616 = zext i32 %615 to i64
  %617 = call noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef nonnull %9, ptr noundef %1, i64 noundef %616)
  %.pre = mul nuw nsw i64 %.15566, %611
  br i1 %.not429, label %.critedge459, label %618

618:                                              ; preds = %614
  %gep565 = getelementptr inbounds i8, ptr %invariant.gep564, i64 %.pre
  store i8 -1, ptr %gep565, align 1, !tbaa !9
  %619 = load i32, ptr %612, align 8, !tbaa !38
  %620 = icmp ne i32 %619, 0
  %621 = icmp ne i32 %617, 0
  %or.cond3 = and i1 %621, %620
  br i1 %or.cond3, label %622, label %.critedge459

622:                                              ; preds = %618
  %623 = load i32, ptr %465, align 4, !tbaa !22
  %notmask = shl nsw i32 -1, %623
  %624 = load i32, ptr %613, align 4, !tbaa !39
  %625 = xor i32 %notmask, %624
  %626 = icmp ne i32 %625, -1
  %.not430 = icmp eq i32 %623, 0
  %or.cond460 = or i1 %.not430, %626
  br i1 %or.cond460, label %.critedge459, label %627

627:                                              ; preds = %622
  store i8 0, ptr %gep565, align 1, !tbaa !9
  br label %.critedge459

.critedge459:                                     ; preds = %614, %627, %622, %618
  %628 = mul i32 %617, 255
  %629 = load i32, ptr %465, align 4, !tbaa !22
  %notmask431 = shl nsw i32 -1, %629
  %630 = xor i32 %notmask431, -1
  %631 = udiv i32 %628, %630
  %632 = trunc i32 %631 to i8
  %633 = getelementptr inbounds i8, ptr %0, i64 %.pre
  store i8 %632, ptr %633, align 1, !tbaa !9
  %634 = add nuw nsw i64 %.15566, 1
  %exitcond635.not = icmp eq i64 %634, %11
  br i1 %exitcond635.not, label %.critedge457, label %614, !llvm.loop !75

.critedge457.loopexit765.unr-lcssa:               ; preds = %.thread.us, %.thread.us.preheader
  %.11562.us.unr = phi i64 [ 0, %.thread.us.preheader ], [ %494, %.thread.us ]
  %lcmp.mod816.not = icmp eq i64 %xtraiter814, 0
  br i1 %lcmp.mod816.not, label %.critedge457, label %.thread.us.epil

.thread.us.epil:                                  ; preds = %.critedge457.loopexit765.unr-lcssa, %.thread.us.epil
  %.11562.us.epil = phi i64 [ %639, %.thread.us.epil ], [ %.11562.us.unr, %.critedge457.loopexit765.unr-lcssa ]
  %epil.iter815 = phi i64 [ %epil.iter815.next, %.thread.us.epil ], [ 0, %.critedge457.loopexit765.unr-lcssa ]
  %635 = getelementptr inbounds i8, ptr %1, i64 %.11562.us.epil
  %636 = load i8, ptr %635, align 1, !tbaa !9
  %637 = mul nuw nsw i64 %.11562.us.epil, %471
  %638 = getelementptr inbounds i8, ptr %0, i64 %637
  store i8 %636, ptr %638, align 1, !tbaa !9
  %639 = add nuw nsw i64 %.11562.us.epil, 1
  %epil.iter815.next = add i64 %epil.iter815, 1
  %epil.iter815.cmp.not = icmp eq i64 %epil.iter815.next, %xtraiter814
  br i1 %epil.iter815.cmp.not, label %.critedge457, label %.thread.us.epil, !llvm.loop !76

.critedge457.loopexit767.unr-lcssa:               ; preds = %531, %.lr.ph559
  %.12558.unr = phi i64 [ 0, %.lr.ph559 ], [ %532, %531 ]
  %lcmp.mod811.not = icmp eq i64 %xtraiter809, 0
  br i1 %lcmp.mod811.not, label %.critedge457, label %.epil.preheader808

.epil.preheader808:                               ; preds = %.critedge457.loopexit767.unr-lcssa
  %640 = shl nuw nsw i64 %.12558.unr, 1
  %641 = getelementptr inbounds i8, ptr %1, i64 %640
  %642 = load i8, ptr %641, align 1, !tbaa !9
  %643 = mul nuw nsw i64 %.12558.unr, %469
  %644 = getelementptr inbounds i8, ptr %0, i64 %643
  store i8 %642, ptr %644, align 1, !tbaa !9
  br i1 %.not435, label %.critedge457, label %645

645:                                              ; preds = %.epil.preheader808
  %646 = or disjoint i64 %640, 1
  %647 = getelementptr inbounds i8, ptr %1, i64 %646
  %648 = load i8, ptr %647, align 1, !tbaa !9
  %649 = getelementptr inbounds i8, ptr %644, i64 1
  store i8 %648, ptr %649, align 1, !tbaa !9
  br label %.critedge457

.critedge457.loopexit768.unr-lcssa:               ; preds = %.thread461.us, %.thread461.us.preheader
  %.13556.us.unr = phi i64 [ 0, %.thread461.us.preheader ], [ %563, %.thread461.us ]
  %lcmp.mod805.not = icmp eq i64 %xtraiter803, 0
  br i1 %lcmp.mod805.not, label %.critedge457, label %.thread461.us.epil

.thread461.us.epil:                               ; preds = %.critedge457.loopexit768.unr-lcssa, %.thread461.us.epil
  %.13556.us.epil = phi i64 [ %655, %.thread461.us.epil ], [ %.13556.us.unr, %.critedge457.loopexit768.unr-lcssa ]
  %epil.iter804 = phi i64 [ %epil.iter804.next, %.thread461.us.epil ], [ 0, %.critedge457.loopexit768.unr-lcssa ]
  %650 = shl nuw nsw i64 %.13556.us.epil, 1
  %651 = getelementptr inbounds i8, ptr %1, i64 %650
  %652 = load i8, ptr %651, align 1, !tbaa !9
  %653 = mul nuw nsw i64 %.13556.us.epil, %536
  %654 = getelementptr inbounds i8, ptr %0, i64 %653
  store i8 %652, ptr %654, align 1, !tbaa !9
  %655 = add nuw nsw i64 %.13556.us.epil, 1
  %epil.iter804.next = add i64 %epil.iter804, 1
  %epil.iter804.cmp.not = icmp eq i64 %epil.iter804.next, %xtraiter803
  br i1 %epil.iter804.cmp.not, label %.critedge457, label %.thread461.us.epil, !llvm.loop !77

.critedge457.loopexit770.unr-lcssa:               ; preds = %608, %.lr.ph553
  %.14552.unr = phi i64 [ 0, %.lr.ph553 ], [ %609, %608 ]
  %lcmp.mod800.not = icmp eq i64 %xtraiter798, 0
  br i1 %lcmp.mod800.not, label %.critedge457, label %.epil.preheader797

.epil.preheader797:                               ; preds = %.critedge457.loopexit770.unr-lcssa
  %656 = shl nuw nsw i64 %.14552.unr, 2
  %657 = getelementptr inbounds i8, ptr %1, i64 %656
  %658 = load i8, ptr %657, align 1, !tbaa !9
  %659 = mul nuw nsw i64 %.14552.unr, %534
  %660 = getelementptr inbounds i8, ptr %0, i64 %659
  store i8 %658, ptr %660, align 1, !tbaa !9
  br i1 %.not432, label %.critedge457, label %661

661:                                              ; preds = %.epil.preheader797
  %662 = or disjoint i64 %656, 2
  %663 = getelementptr inbounds i8, ptr %1, i64 %662
  %664 = load i8, ptr %663, align 1, !tbaa !9
  %665 = getelementptr inbounds i8, ptr %660, i64 1
  store i8 %664, ptr %665, align 1, !tbaa !9
  br label %.critedge457

.critedge457:                                     ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %._crit_edge.us, %378, %362, %315, %._crit_edge.us516, %222, %174, %._crit_edge, %169, %137, %._crit_edge540, %418, %.critedge, %.critedge457.loopexit770.unr-lcssa, %661, %.epil.preheader797, %583, %.critedge457.loopexit768.unr-lcssa, %.thread461.us.epil, %.critedge457.loopexit767.unr-lcssa, %645, %.epil.preheader808, %506, %.critedge457.loopexit765.unr-lcssa, %.thread.us.epil, %.critedge459, %middle.block, %vec.epilog.middle.block, %.preheader494.lr.ph, %.preheader485.lr.ph, %16, %.preheader495, %.preheader492, %.preheader490, %.preheader488, %.preheader486, %.preheader483, %.preheader480, %.preheader477, %.preheader475, %.preheader473, %.preheader470, %.preheader468, %.preheader466, %.preheader464, %.preheader462, %.preheader, %224, %380, %62, %456, %458, %610, %533, %468, %462
  %.2 = phi i32 [ 62, %462 ], [ 31, %468 ], [ 31, %533 ], [ 31, %610 ], [ 59, %458 ], [ 59, %456 ], [ 0, %62 ], [ 0, %380 ], [ 0, %224 ], [ 0, %.preheader ], [ 0, %.preheader462 ], [ 0, %.preheader464 ], [ 0, %.preheader466 ], [ 0, %.preheader468 ], [ 0, %.preheader470 ], [ 0, %.preheader473 ], [ 0, %.preheader475 ], [ 0, %.preheader477 ], [ 0, %.preheader480 ], [ 0, %.preheader483 ], [ 0, %.preheader486 ], [ 0, %.preheader488 ], [ 0, %.preheader490 ], [ 0, %.preheader492 ], [ 0, %.preheader495 ], [ 0, %16 ], [ 0, %.preheader485.lr.ph ], [ 0, %.preheader494.lr.ph ], [ 0, %vec.epilog.middle.block ], [ 0, %middle.block ], [ 0, %.critedge459 ], [ 0, %.thread.us.epil ], [ 0, %.critedge457.loopexit765.unr-lcssa ], [ 0, %506 ], [ 0, %.epil.preheader808 ], [ 0, %645 ], [ 0, %.critedge457.loopexit767.unr-lcssa ], [ 0, %.thread461.us.epil ], [ 0, %.critedge457.loopexit768.unr-lcssa ], [ 0, %583 ], [ 0, %.epil.preheader797 ], [ 0, %661 ], [ 0, %.critedge457.loopexit770.unr-lcssa ], [ 0, %.critedge ], [ 0, %._crit_edge540 ], [ 47, %418 ], [ 0, %137 ], [ 0, %169 ], [ 46, %174 ], [ 0, %._crit_edge ], [ 0, %222 ], [ 0, %._crit_edge.us516 ], [ 0, %315 ], [ 0, %362 ], [ 0, %378 ], [ 0, %._crit_edge.us ], [ 0, %.lr.ph ], [ 0, %.lr.ph.prol.loopexit ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  ret i32 %.2
}

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL26readBitsFromReversedStreamPmPKhm(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 = { 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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11, !12, !13}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!"llvm.loop.isvectorized", i32 1}
!13 = !{!"llvm.loop.unroll.runtime.disable"}
!14 = distinct !{!14, !11, !12, !13}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.unroll.disable"}
!17 = distinct !{!17, !11, !12}
!18 = !{!19, !20, i64 0}
!19 = !{!"_ZTS17LodePNG_InfoColor", !20, i64 0, !20, i64 4, !21, i64 8, !6, i64 16, !20, i64 24, !20, i64 28, !20, i64 32, !20, i64 36}
!20 = !{!"int", !7, i64 0}
!21 = !{!"any pointer", !7, i64 0}
!22 = !{!19, !20, i64 4}
!23 = !{!24}
!24 = distinct !{!24, !25}
!25 = distinct !{!25, !"LVerDomain"}
!26 = !{!27}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !11, !12, !13}
!29 = !{!30}
!30 = distinct !{!30, !31}
!31 = distinct !{!31, !"LVerDomain"}
!32 = !{!33}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !11, !12, !13}
!35 = distinct !{!35, !16}
!36 = distinct !{!36, !11, !12}
!37 = distinct !{!37, !11}
!38 = !{!19, !20, i64 24}
!39 = !{!19, !20, i64 28}
!40 = distinct !{!40, !11}
!41 = !{!19, !20, i64 32}
!42 = !{!19, !20, i64 36}
!43 = distinct !{!43, !11}
!44 = !{!19, !6, i64 16}
!45 = !{!19, !21, i64 8}
!46 = distinct !{!46, !11}
!47 = distinct !{!47, !11}
!48 = distinct !{!48, !11}
!49 = !{!50}
!50 = distinct !{!50, !51}
!51 = distinct !{!51, !"LVerDomain"}
!52 = !{!53}
!53 = distinct !{!53, !51}
!54 = distinct !{!54, !11, !12, !13}
!55 = !{!56}
!56 = distinct !{!56, !57}
!57 = distinct !{!57, !"LVerDomain"}
!58 = !{!59}
!59 = distinct !{!59, !57}
!60 = distinct !{!60, !11, !12, !13}
!61 = distinct !{!61, !16}
!62 = distinct !{!62, !11, !12}
!63 = distinct !{!63, !11}
!64 = distinct !{!64, !11}
!65 = distinct !{!65, !11}
!66 = distinct !{!66, !11}
!67 = distinct !{!67, !11}
!68 = distinct !{!68, !11}
!69 = distinct !{!69, !16}
!70 = distinct !{!70, !11}
!71 = distinct !{!71, !11}
!72 = distinct !{!72, !11}
!73 = distinct !{!73, !11}
!74 = distinct !{!74, !11}
!75 = distinct !{!75, !11}
!76 = distinct !{!76, !16}
!77 = distinct !{!77, !16}


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