; LLVM IR from google/zopfli :: src/zopflipng (zopflipng_lib)

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.18" = type { i8 }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.lodepng::State" = type { %struct.LodePNGState }
%struct.LodePNGState = type { %struct.LodePNGDecoderSettings, %struct.LodePNGEncoderSettings, %struct.LodePNGColorMode, %struct.LodePNGInfo, i32 }
%struct.LodePNGDecoderSettings = type { %struct.LodePNGDecompressSettings, i32, i32, i32, i32, i32, i32, i64, i64 }
%struct.LodePNGDecompressSettings = type { i32, i32, i64, ptr, ptr, ptr }
%struct.LodePNGEncoderSettings = type { %struct.LodePNGCompressSettings, i32, i32, i32, ptr, i32, i32, i32 }
%struct.LodePNGCompressSettings = type { i32, i32, i32, i32, i32, i32, ptr, ptr, ptr }
%struct.LodePNGColorMode = type { i32, i32, ptr, i64, i32, i32, i32, i32 }
%struct.LodePNGInfo = type { i32, i32, i32, %struct.LodePNGColorMode, i32, i32, i32, i32, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, i32, %struct.LodePNGTime, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, [3 x ptr], [3 x i64] }
%struct.LodePNGTime = type { i32, i32, i32, i32, i32, i32 }
%"class.std::set.21" = type { %"class.std::_Rb_tree.22" }
%"class.std::_Rb_tree.22" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%struct.ZopfliPNGOptions = type { i8, i8, i8, %"class.std::vector", i8, i8, %"class.std::vector.0", i8, i32, i32, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ZopfliPNGFilterStrategy, std::allocator<ZopfliPNGFilterStrategy>>::_Vector_impl" }
%"struct.std::_Vector_base<ZopfliPNGFilterStrategy, std::allocator<ZopfliPNGFilterStrategy>>::_Vector_impl" = type { %"struct.std::_Vector_base<ZopfliPNGFilterStrategy, std::allocator<ZopfliPNGFilterStrategy>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ZopfliPNGFilterStrategy, std::allocator<ZopfliPNGFilterStrategy>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@__const._Z17ZopfliPNGOptimizeRKSt6vectorIhSaIhEERK16ZopfliPNGOptionsbPS1_.filterstrategies = external hidden unnamed_addr constant [9 x i32], align 16
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [30 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z11TryOptimizeRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_23ZopfliPNGFilterStrategybiPK16ZopfliPNGOptionsPS1_(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(528), i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i1 noundef zeroext, i32 noundef, ptr noundef, ptr noundef) #1

declare void @_ZN7lodepng5StateC1Ev(ptr noundef nonnull align 8 dereferenceable(528)) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

declare i32 @printf(ptr noundef, ...) #3

declare noundef ptr @_Z18lodepng_error_textj(i32 noundef) #3

; Function Attrs: nounwind
declare void @_ZN7lodepng5StateD1Ev(ptr noundef nonnull align 8 dereferenceable(528)) unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z24AutoChooseFilterStrategyRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_iP23ZopfliPNGFilterStrategyPb(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(528), i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12ChunksToKeepRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPSt3setIS9_St4lessIS9_ESA_E(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z10KeepChunksRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z17ZopfliPNGOptimizeRKSt6vectorIhSaIhEERK16ZopfliPNGOptionsbPS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(80) %1, i1 noundef zeroext %2, ptr noundef %3) #1 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca [9 x i32], align 16
  %12 = alloca [9 x i8], align 1
  %13 = alloca [9 x %"class.std::__cxx11::basic_string"], align 16
  %14 = alloca ptr, align 8
  %15 = alloca %"class.std::allocator.18", align 1
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.std::allocator.18", align 1
  %19 = alloca %"class.std::allocator.18", align 1
  %20 = alloca %"class.std::allocator.18", align 1
  %21 = alloca %"class.std::allocator.18", align 1
  %22 = alloca %"class.std::allocator.18", align 1
  %23 = alloca %"class.std::allocator.18", align 1
  %24 = alloca %"class.std::allocator.18", align 1
  %25 = alloca %"class.std::allocator.18", align 1
  %26 = alloca i1, align 1
  %27 = alloca i64, align 8
  %28 = alloca %"class.std::vector.8", align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca %"class.lodepng::State", align 8
  %33 = alloca i8, align 1
  %34 = alloca %"class.std::set.21", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::allocator.18", align 1
  %37 = alloca %"class.std::__cxx11::basic_string", align 8
  %38 = alloca i1, align 1
  %39 = alloca %"class.std::allocator.18", align 1
  %40 = alloca i1, align 1
  %41 = alloca i1, align 1
  %42 = alloca i1, align 1
  %43 = alloca i32, align 4
  %44 = alloca i8, align 1
  %45 = alloca i64, align 8
  %46 = alloca i32, align 4
  %47 = alloca %"class.std::vector.8", align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  %48 = zext i1 %2 to i8
  store i8 %48, ptr %8, align 1, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 32768, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 36, ptr %11) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %11, ptr align 16 @__const._Z17ZopfliPNGOptimizeRKSt6vectorIhSaIhEERK16ZopfliPNGOptionsbPS1_.filterstrategies, i64 36, i1 false)
  call void @llvm.lifetime.start.p0(i64 9, ptr %12) #7
  call void @llvm.memset.p0.i64(ptr align 1 %12, i8 0, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 288, ptr %13) #7
  store i1 true, ptr %26, align 1
  store ptr %13, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %49 unwind label %73

49:                                               ; preds = %4
  %50 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 1
  store ptr %50, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %51 unwind label %77

51:                                               ; preds = %49
  %52 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 2
  store ptr %52, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %53 unwind label %81

53:                                               ; preds = %51
  %54 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 3
  store ptr %54, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %55 unwind label %85

55:                                               ; preds = %53
  %56 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 4
  store ptr %56, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %57 unwind label %89

57:                                               ; preds = %55
  %58 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 5
  store ptr %58, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %59 unwind label %93

59:                                               ; preds = %57
  %60 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 6
  store ptr %60, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %61 unwind label %97

61:                                               ; preds = %59
  %62 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 7
  store ptr %62, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %63 unwind label %101

63:                                               ; preds = %61
  %64 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %13, i64 8
  store ptr %64, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %65 unwind label %105

65:                                               ; preds = %63
  store i1 false, ptr %26, align 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store i64 0, ptr %27, align 8, !tbaa !13
  br label %66

66:                                               ; preds = %135, %65
  %67 = load i64, ptr %27, align 8, !tbaa !13
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %68, i32 0, i32 3
  %70 = call noundef i64 @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %69) #7
  %71 = icmp ult i64 %67, %70
  br i1 %71, label %127, label %72

72:                                               ; preds = %66
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %138

73:                                               ; preds = %4
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %16, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %17, align 4
  br label %116

77:                                               ; preds = %49
  %78 = landingpad { ptr, i32 }
          cleanup
  %79 = extractvalue { ptr, i32 } %78, 0
  store ptr %79, ptr %16, align 8
  %80 = extractvalue { ptr, i32 } %78, 1
  store i32 %80, ptr %17, align 4
  br label %115

81:                                               ; preds = %51
  %82 = landingpad { ptr, i32 }
          cleanup
  %83 = extractvalue { ptr, i32 } %82, 0
  store ptr %83, ptr %16, align 8
  %84 = extractvalue { ptr, i32 } %82, 1
  store i32 %84, ptr %17, align 4
  br label %114

85:                                               ; preds = %53
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %16, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %17, align 4
  br label %113

89:                                               ; preds = %55
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %16, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %17, align 4
  br label %112

93:                                               ; preds = %57
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %16, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %17, align 4
  br label %111

97:                                               ; preds = %59
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %16, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %17, align 4
  br label %110

101:                                              ; preds = %61
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %16, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %17, align 4
  br label %109

105:                                              ; preds = %63
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %16, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %17, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  br label %109

109:                                              ; preds = %105, %101
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  br label %110

110:                                              ; preds = %109, %97
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  br label %111

111:                                              ; preds = %110, %93
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  br label %112

112:                                              ; preds = %111, %89
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  br label %113

113:                                              ; preds = %112, %85
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  br label %114

114:                                              ; preds = %113, %81
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #7
  br label %115

115:                                              ; preds = %114, %77
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %18) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  br label %116

116:                                              ; preds = %115, %73
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  %117 = load i1, ptr %26, align 1
  br i1 %117, label %118, label %126

118:                                              ; preds = %116
  %119 = load ptr, ptr %14, align 8
  %120 = icmp eq ptr %13, %119
  br i1 %120, label %125, label %121

121:                                              ; preds = %121, %118
  %122 = phi ptr [ %119, %118 ], [ %123, %121 ]
  %123 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %122, i64 -1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #7
  %124 = icmp eq ptr %123, %13
  br i1 %124, label %125, label %121

125:                                              ; preds = %121, %118
  br label %126

126:                                              ; preds = %125, %116
  br label %418

127:                                              ; preds = %66
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %128, i32 0, i32 3
  %130 = load i64, ptr %27, align 8, !tbaa !13
  %131 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %129, i64 noundef %130) #7
  %132 = load i32, ptr %131, align 4, !tbaa !15
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds [9 x i8], ptr %12, i64 0, i64 %133
  store i8 1, ptr %134, align 1, !tbaa !9
  br label %135

135:                                              ; preds = %127
  %136 = load i64, ptr %27, align 8, !tbaa !13
  %137 = add i64 %136, 1
  store i64 %137, ptr %27, align 8, !tbaa !13
  br label %66, !llvm.loop !17

138:                                              ; preds = %72
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #7
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 528, ptr %32) #7
  invoke void @_ZN7lodepng5StateC1Ev(ptr noundef nonnull align 8 dereferenceable(528) %32)
          to label %139 unwind label %188

139:                                              ; preds = %138
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  %141 = invoke noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RNS_5StateERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 8 dereferenceable(528) %32, ptr noundef nonnull align 8 dereferenceable(24) %140)
          to label %142 unwind label %192

142:                                              ; preds = %139
  store i32 %141, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #7
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %143, i32 0, i32 5
  %145 = load i8, ptr %144, align 1, !tbaa !19, !range !29, !noundef !30
  %146 = trunc i8 %145 to i1
  %147 = zext i1 %146 to i8
  store i8 %147, ptr %33, align 1, !tbaa !9
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %148, i32 0, i32 6
  %150 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %149) #7
  br i1 %150, label %234, label %151

151:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 48, ptr %34) #7
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #7
  %152 = load ptr, ptr %6, align 8, !tbaa !5
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %153, i32 0, i32 6
  invoke void @_Z12ChunksToKeepRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPSt3setIS9_St4lessIS9_ESA_E(ptr noundef nonnull align 8 dereferenceable(24) %152, ptr noundef nonnull align 8 dereferenceable(24) %154, ptr noundef %34)
          to label %155 unwind label %196

155:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  store i1 false, ptr %38, align 1
  store i1 false, ptr %40, align 1
  store i1 false, ptr %41, align 1
  store i1 false, ptr %42, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %156 unwind label %200

156:                                              ; preds = %155
  %157 = invoke noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %34, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %158 unwind label %204

158:                                              ; preds = %156
  %159 = icmp ne i64 %157, 0
  br i1 %159, label %165, label %160

160:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #7
  store i1 true, ptr %38, align 1
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #7
  store i1 true, ptr %40, align 1
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #7
  store i1 true, ptr %41, align 1
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %161 unwind label %208

161:                                              ; preds = %160
  store i1 true, ptr %42, align 1
  %162 = invoke noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %34, ptr noundef nonnull align 8 dereferenceable(32) %37)
          to label %163 unwind label %212

163:                                              ; preds = %161
  %164 = icmp ne i64 %162, 0
  br label %165

165:                                              ; preds = %163, %158
  %166 = phi i1 [ true, %158 ], [ %164, %163 ]
  %167 = load i1, ptr %42, align 1
  br i1 %167, label %168, label %169

168:                                              ; preds = %165
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %169

169:                                              ; preds = %168, %165
  %170 = load i1, ptr %41, align 1
  br i1 %170, label %171, label %172

171:                                              ; preds = %169
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #7
  br label %172

172:                                              ; preds = %171, %169
  %173 = load i1, ptr %40, align 1
  br i1 %173, label %174, label %175

174:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #7
  br label %175

175:                                              ; preds = %174, %172
  %176 = load i1, ptr %38, align 1
  br i1 %176, label %177, label %178

177:                                              ; preds = %175
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  br label %178

178:                                              ; preds = %177, %175
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  br i1 %166, label %179, label %232

179:                                              ; preds = %178
  %180 = load i8, ptr %33, align 1, !tbaa !9, !range !29, !noundef !30
  %181 = trunc i8 %180 to i1
  br i1 %181, label %231, label %182

182:                                              ; preds = %179
  %183 = load i8, ptr %8, align 1, !tbaa !9, !range !29, !noundef !30
  %184 = trunc i8 %183 to i1
  br i1 %184, label %185, label %231

185:                                              ; preds = %182
  %186 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.12)
          to label %187 unwind label %196

187:                                              ; preds = %185
  br label %231

188:                                              ; preds = %138
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %16, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %17, align 4
  br label %404

192:                                              ; preds = %139
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %16, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %17, align 4
  br label %403

196:                                              ; preds = %185, %151
  %197 = landingpad { ptr, i32 }
          cleanup
  %198 = extractvalue { ptr, i32 } %197, 0
  store ptr %198, ptr %16, align 8
  %199 = extractvalue { ptr, i32 } %197, 1
  store i32 %199, ptr %17, align 4
  br label %233

200:                                              ; preds = %155
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %16, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %17, align 4
  br label %230

204:                                              ; preds = %156
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %16, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %17, align 4
  br label %229

208:                                              ; preds = %160
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %16, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %17, align 4
  br label %219

212:                                              ; preds = %161
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %16, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %17, align 4
  %216 = load i1, ptr %42, align 1
  br i1 %216, label %217, label %218

217:                                              ; preds = %212
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #7
  br label %218

218:                                              ; preds = %217, %212
  br label %219

219:                                              ; preds = %218, %208
  %220 = load i1, ptr %41, align 1
  br i1 %220, label %221, label %222

221:                                              ; preds = %219
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #7
  br label %222

222:                                              ; preds = %221, %219
  %223 = load i1, ptr %40, align 1
  br i1 %223, label %224, label %225

224:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #7
  br label %225

225:                                              ; preds = %224, %222
  %226 = load i1, ptr %38, align 1
  br i1 %226, label %227, label %228

227:                                              ; preds = %225
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #7
  br label %228

228:                                              ; preds = %227, %225
  br label %229

229:                                              ; preds = %228, %204
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #7
  br label %230

230:                                              ; preds = %229, %200
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #7
  br label %233

231:                                              ; preds = %187, %182, %179
  store i8 1, ptr %33, align 1, !tbaa !9
  br label %232

232:                                              ; preds = %231, %178
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %34) #7
  br label %234

233:                                              ; preds = %230, %196
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %34) #7
  br label %402

234:                                              ; preds = %232, %142
  %235 = load i32, ptr %31, align 4, !tbaa !11
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %237, label %260

237:                                              ; preds = %234
  %238 = load i8, ptr %8, align 1, !tbaa !9, !range !29, !noundef !30
  %239 = trunc i8 %238 to i1
  br i1 %239, label %240, label %258

240:                                              ; preds = %237
  %241 = load i32, ptr %31, align 4, !tbaa !11
  %242 = icmp eq i32 %241, 1
  br i1 %242, label %243, label %250

243:                                              ; preds = %240
  %244 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.13)
          to label %245 unwind label %246

245:                                              ; preds = %243
  br label %257

246:                                              ; preds = %254, %250, %243
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %16, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %17, align 4
  br label %402

250:                                              ; preds = %240
  %251 = load i32, ptr %31, align 4, !tbaa !11
  %252 = load i32, ptr %31, align 4, !tbaa !11
  %253 = invoke noundef ptr @_Z18lodepng_error_textj(i32 noundef %252)
          to label %254 unwind label %246

254:                                              ; preds = %250
  %255 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %251, ptr noundef %253)
          to label %256 unwind label %246

256:                                              ; preds = %254
  br label %257

257:                                              ; preds = %256, %245
  br label %258

258:                                              ; preds = %257, %237
  %259 = load i32, ptr %31, align 4, !tbaa !11
  store i32 %259, ptr %5, align 4
  store i32 1, ptr %43, align 4
  br label %399

260:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #7
  store i8 0, ptr %44, align 1, !tbaa !9
  %261 = getelementptr inbounds %struct.LodePNGState, ptr %32, i32 0, i32 3
  %262 = getelementptr inbounds %struct.LodePNGInfo, ptr %261, i32 0, i32 3
  %263 = getelementptr inbounds %struct.LodePNGColorMode, ptr %262, i32 0, i32 1
  %264 = load i32, ptr %263, align 4, !tbaa !31
  %265 = icmp eq i32 %264, 16
  br i1 %265, label %266, label %282

266:                                              ; preds = %260
  %267 = load i8, ptr %33, align 1, !tbaa !9, !range !29, !noundef !30
  %268 = trunc i8 %267 to i1
  br i1 %268, label %274, label %269

269:                                              ; preds = %266
  %270 = load ptr, ptr %7, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %270, i32 0, i32 2
  %272 = load i8, ptr %271, align 2, !tbaa !42, !range !29, !noundef !30
  %273 = trunc i8 %272 to i1
  br i1 %273, label %282, label %274

274:                                              ; preds = %269, %266
  call void @_ZNSt6vectorIhSaIhEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #7
  %275 = load ptr, ptr %6, align 8, !tbaa !5
  %276 = invoke noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RKS2_16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(24) %28, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 8 dereferenceable(24) %275, i32 noundef 6, i32 noundef 16)
          to label %277 unwind label %278

277:                                              ; preds = %274
  store i32 %276, ptr %31, align 4, !tbaa !11
  store i8 1, ptr %44, align 1, !tbaa !9
  br label %282

278:                                              ; preds = %303, %293, %274
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %16, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %17, align 4
  br label %398

282:                                              ; preds = %277, %269, %260
  %283 = load i32, ptr %31, align 4, !tbaa !11
  %284 = icmp ne i32 %283, 0
  br i1 %284, label %316, label %285

285:                                              ; preds = %282
  %286 = load ptr, ptr %7, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %286, i32 0, i32 1
  %288 = load i8, ptr %287, align 1, !tbaa !43, !range !29, !noundef !30
  %289 = trunc i8 %288 to i1
  br i1 %289, label %290, label %298

290:                                              ; preds = %285
  %291 = load i8, ptr %44, align 1, !tbaa !9, !range !29, !noundef !30
  %292 = trunc i8 %291 to i1
  br i1 %292, label %298, label %293

293:                                              ; preds = %290
  %294 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef 0) #7
  %295 = load i32, ptr %29, align 4, !tbaa !11
  %296 = load i32, ptr %30, align 4, !tbaa !11
  invoke void @_Z24LossyOptimizeTransparentPN7lodepng5StateEPhjj(ptr noundef %32, ptr noundef %294, i32 noundef %295, i32 noundef %296)
          to label %297 unwind label %278

297:                                              ; preds = %293
  br label %298

298:                                              ; preds = %297, %290, %285
  %299 = load ptr, ptr %7, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %299, i32 0, i32 4
  %301 = load i8, ptr %300, align 8, !tbaa !44, !range !29, !noundef !30
  %302 = trunc i8 %301 to i1
  br i1 %302, label %303, label %315

303:                                              ; preds = %298
  %304 = load i32, ptr %29, align 4, !tbaa !11
  %305 = load i32, ptr %30, align 4, !tbaa !11
  %306 = load i8, ptr %44, align 1, !tbaa !9, !range !29, !noundef !30
  %307 = trunc i8 %306 to i1
  %308 = load i8, ptr %33, align 1, !tbaa !9, !range !29, !noundef !30
  %309 = trunc i8 %308 to i1
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 0
  %312 = getelementptr inbounds [9 x i8], ptr %12, i64 0, i64 0
  %313 = invoke noundef i32 @_Z24AutoChooseFilterStrategyRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_iP23ZopfliPNGFilterStrategyPb(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef %304, i32 noundef %305, ptr noundef nonnull align 8 dereferenceable(528) %32, i1 noundef zeroext %307, i1 noundef zeroext %309, ptr noundef nonnull align 8 dereferenceable(24) %310, i32 noundef 8, ptr noundef %311, ptr noundef %312)
          to label %314 unwind label %278

314:                                              ; preds = %303
  store i32 %313, ptr %31, align 4, !tbaa !11
  br label %315

315:                                              ; preds = %314, %298
  br label %316

316:                                              ; preds = %315, %282
  %317 = load i32, ptr %31, align 4, !tbaa !11
  %318 = icmp ne i32 %317, 0
  br i1 %318, label %396, label %319

319:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  store i64 0, ptr %45, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  store i32 0, ptr %46, align 4, !tbaa !11
  br label %320

320:                                              ; preds = %377, %319
  %321 = load i32, ptr %46, align 4, !tbaa !11
  %322 = icmp slt i32 %321, 9
  br i1 %322, label %324, label %323

323:                                              ; preds = %320
  store i32 5, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %380

324:                                              ; preds = %320
  %325 = load i32, ptr %46, align 4, !tbaa !11
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds [9 x i8], ptr %12, i64 0, i64 %326
  %328 = load i8, ptr %327, align 1, !tbaa !9, !range !29, !noundef !30
  %329 = trunc i8 %328 to i1
  br i1 %329, label %331, label %330

330:                                              ; preds = %324
  br label %377

331:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #7
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  %332 = load i32, ptr %29, align 4, !tbaa !11
  %333 = load i32, ptr %30, align 4, !tbaa !11
  %334 = load i8, ptr %44, align 1, !tbaa !9, !range !29, !noundef !30
  %335 = trunc i8 %334 to i1
  %336 = load i8, ptr %33, align 1, !tbaa !9, !range !29, !noundef !30
  %337 = trunc i8 %336 to i1
  %338 = load ptr, ptr %6, align 8, !tbaa !5
  %339 = load i32, ptr %46, align 4, !tbaa !11
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !15
  %343 = load i32, ptr %10, align 4, !tbaa !11
  %344 = load ptr, ptr %7, align 8, !tbaa !5
  %345 = invoke noundef i32 @_Z11TryOptimizeRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_23ZopfliPNGFilterStrategybiPK16ZopfliPNGOptionsPS1_(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef %332, i32 noundef %333, ptr noundef nonnull align 8 dereferenceable(528) %32, i1 noundef zeroext %335, i1 noundef zeroext %337, ptr noundef nonnull align 8 dereferenceable(24) %338, i32 noundef %342, i1 noundef zeroext true, i32 noundef %343, ptr noundef %344, ptr noundef %47)
          to label %346 unwind label %361

346:                                              ; preds = %331
  store i32 %345, ptr %31, align 4, !tbaa !11
  %347 = load i32, ptr %31, align 4, !tbaa !11
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %376, label %349

349:                                              ; preds = %346
  %350 = load i8, ptr %8, align 1, !tbaa !9, !range !29, !noundef !30
  %351 = trunc i8 %350 to i1
  br i1 %351, label %352, label %365

352:                                              ; preds = %349
  %353 = load i32, ptr %46, align 4, !tbaa !11
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds [9 x %"class.std::__cxx11::basic_string"], ptr %13, i64 0, i64 %354
  %356 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %355) #7
  %357 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  %358 = trunc i64 %357 to i32
  %359 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.15, ptr noundef %356, i32 noundef %358)
          to label %360 unwind label %361

360:                                              ; preds = %352
  br label %365

361:                                              ; preds = %352, %331
  %362 = landingpad { ptr, i32 }
          cleanup
  %363 = extractvalue { ptr, i32 } %362, 0
  store ptr %363, ptr %16, align 8
  %364 = extractvalue { ptr, i32 } %362, 1
  store i32 %364, ptr %17, align 4
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %395

365:                                              ; preds = %360, %349
  %366 = load i64, ptr %45, align 8, !tbaa !13
  %367 = icmp eq i64 %366, 0
  br i1 %367, label %372, label %368

368:                                              ; preds = %365
  %369 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  %370 = load i64, ptr %45, align 8, !tbaa !13
  %371 = icmp ult i64 %369, %370
  br i1 %371, label %372, label %375

372:                                              ; preds = %368, %365
  %373 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  store i64 %373, ptr %45, align 8, !tbaa !13
  %374 = load ptr, ptr %9, align 8, !tbaa !5
  call void @_ZNSt6vectorIhSaIhEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %374, ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  br label %375

375:                                              ; preds = %372, %368
  br label %376

376:                                              ; preds = %375, %346
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #7
  br label %377

377:                                              ; preds = %376, %330
  %378 = load i32, ptr %46, align 4, !tbaa !11
  %379 = add nsw i32 %378, 1
  store i32 %379, ptr %46, align 4, !tbaa !11
  br label %320, !llvm.loop !45

380:                                              ; preds = %323
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %381, i32 0, i32 6
  %383 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %382) #7
  br i1 %383, label %394, label %384

384:                                              ; preds = %380
  %385 = load ptr, ptr %6, align 8, !tbaa !5
  %386 = load ptr, ptr %7, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.ZopfliPNGOptions, ptr %386, i32 0, i32 6
  %388 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_Z10KeepChunksRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPS1_(ptr noundef nonnull align 8 dereferenceable(24) %385, ptr noundef nonnull align 8 dereferenceable(24) %387, ptr noundef %388)
          to label %389 unwind label %390

389:                                              ; preds = %384
  br label %394

390:                                              ; preds = %384
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %16, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %17, align 4
  br label %395

394:                                              ; preds = %389, %380
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %396

395:                                              ; preds = %390, %361
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %398

396:                                              ; preds = %394, %316
  %397 = load i32, ptr %31, align 4, !tbaa !11
  store i32 %397, ptr %5, align 4
  store i32 1, ptr %43, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  br label %399

398:                                              ; preds = %395, %278
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #7
  br label %402

399:                                              ; preds = %396, %258
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #7
  call void @_ZN7lodepng5StateD1Ev(ptr noundef nonnull align 8 dereferenceable(528) %32) #7
  call void @llvm.lifetime.end.p0(i64 528, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #7
  %400 = getelementptr inbounds [9 x %"class.std::__cxx11::basic_string"], ptr %13, i32 0, i32 0
  %401 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %400, i64 9
  br label %407

402:                                              ; preds = %398, %246, %233
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #7
  br label %403

403:                                              ; preds = %402, %192
  call void @_ZN7lodepng5StateD1Ev(ptr noundef nonnull align 8 dereferenceable(528) %32) #7
  br label %404

404:                                              ; preds = %403, %188
  call void @llvm.lifetime.end.p0(i64 528, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #7
  %405 = getelementptr inbounds [9 x %"class.std::__cxx11::basic_string"], ptr %13, i32 0, i32 0
  %406 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %405, i64 9
  br label %413

407:                                              ; preds = %407, %399
  %408 = phi ptr [ %401, %399 ], [ %409, %407 ]
  %409 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %408, i64 -1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %409) #7
  %410 = icmp eq ptr %409, %400
  br i1 %410, label %411, label %407

411:                                              ; preds = %407
  call void @llvm.lifetime.end.p0(i64 288, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 9, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  %412 = load i32, ptr %5, align 4
  ret i32 %412

413:                                              ; preds = %413, %404
  %414 = phi ptr [ %406, %404 ], [ %415, %413 ]
  %415 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %414, i64 -1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %415) #7
  %416 = icmp eq ptr %415, %405
  br i1 %416, label %417, label %413

417:                                              ; preds = %413
  br label %418

418:                                              ; preds = %417, %126
  call void @llvm.lifetime.end.p0(i64 288, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 9, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %419

419:                                              ; preds = %418
  %420 = load ptr, ptr %16, align 8
  %421 = load i32, ptr %17, align 4
  %422 = insertvalue { ptr, i32 } poison, ptr %420, 0
  %423 = insertvalue { ptr, i32 } %422, i32 %421, 1
  resume { ptr, i32 } %423
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

declare noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RNS_5StateERKS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(24)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

declare noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RKS2_16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"_ZTS23ZopfliPNGFilterStrategy", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !10, i64 33}
!20 = !{!"_ZTS16ZopfliPNGOptions", !10, i64 0, !10, i64 1, !10, i64 2, !21, i64 8, !10, i64 32, !10, i64 33, !25, i64 40, !10, i64 64, !12, i64 68, !12, i64 72, !12, i64 76}
!21 = !{!"_ZTSSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseI23ZopfliPNGFilterStrategySaIS0_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseI23ZopfliPNGFilterStrategySaIS0_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseI23ZopfliPNGFilterStrategySaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!32, !12, i64 228}
!32 = !{!"_ZTS12LodePNGState", !33, i64 0, !35, i64 80, !38, i64 168, !40, i64 208, !12, i64 520}
!33 = !{!"_ZTS22LodePNGDecoderSettings", !34, i64 0, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !14, i64 64, !14, i64 72}
!34 = !{!"_ZTS25LodePNGDecompressSettings", !12, i64 0, !12, i64 4, !14, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!35 = !{!"_ZTS22LodePNGEncoderSettings", !36, i64 0, !12, i64 48, !12, i64 52, !37, i64 56, !6, i64 64, !12, i64 72, !12, i64 76, !12, i64 80}
!36 = !{!"_ZTS23LodePNGCompressSettings", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !6, i64 24, !6, i64 32, !6, i64 40}
!37 = !{!"_ZTS21LodePNGFilterStrategy", !7, i64 0}
!38 = !{!"_ZTS16LodePNGColorMode", !39, i64 0, !12, i64 4, !6, i64 8, !14, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36}
!39 = !{!"_ZTS16LodePNGColorType", !7, i64 0}
!40 = !{!"_ZTS11LodePNGInfo", !12, i64 0, !12, i64 4, !12, i64 8, !38, i64 16, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !14, i64 72, !6, i64 80, !6, i64 88, !14, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !12, i64 136, !41, i64 140, !12, i64 164, !12, i64 168, !12, i64 172, !12, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !12, i64 232, !6, i64 240, !6, i64 248, !12, i64 256, !7, i64 264, !7, i64 288}
!41 = !{!"_ZTS11LodePNGTime", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20}
!42 = !{!20, !10, i64 2}
!43 = !{!20, !10, i64 1}
!44 = !{!20, !10, i64 32}
!45 = distinct !{!45, !18}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.18" = type { i8 }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.lodepng::State" = type { %struct.LodePNGState }
%struct.LodePNGState = type { %struct.LodePNGDecoderSettings, %struct.LodePNGEncoderSettings, %struct.LodePNGColorMode, %struct.LodePNGInfo, i32 }
%struct.LodePNGDecoderSettings = type { %struct.LodePNGDecompressSettings, i32, i32, i32, i32, i32, i32, i64, i64 }
%struct.LodePNGDecompressSettings = type { i32, i32, i64, ptr, ptr, ptr }
%struct.LodePNGEncoderSettings = type { %struct.LodePNGCompressSettings, i32, i32, i32, ptr, i32, i32, i32 }
%struct.LodePNGCompressSettings = type { i32, i32, i32, i32, i32, i32, ptr, ptr, ptr }
%struct.LodePNGColorMode = type { i32, i32, ptr, i64, i32, i32, i32, i32 }
%struct.LodePNGInfo = type { i32, i32, i32, %struct.LodePNGColorMode, i32, i32, i32, i32, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, i32, %struct.LodePNGTime, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i32, [3 x ptr], [3 x i64] }
%struct.LodePNGTime = type { i32, i32, i32, i32, i32, i32 }
%"class.std::set.21" = type { %"class.std::_Rb_tree.22" }
%"class.std::_Rb_tree.22" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>, std::_Identity<std::__cxx11::basic_string<char>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }

@__const._Z17ZopfliPNGOptimizeRKSt6vectorIhSaIhEERK16ZopfliPNGOptionsbPS1_.filterstrategies = external hidden unnamed_addr constant [9 x i32], align 16
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [30 x i8], align 1

; 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 void @_Z24LossyOptimizeTransparentPN7lodepng5StateEPhjj(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z11TryOptimizeRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_23ZopfliPNGFilterStrategybiPK16ZopfliPNGOptionsPS1_(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(528), i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i1 noundef zeroext, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @_ZN7lodepng5StateC1Ev(ptr noundef nonnull align 8 dereferenceable(528)) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #4

declare noundef ptr @_Z18lodepng_error_textj(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind
declare void @_ZN7lodepng5StateD1Ev(ptr noundef nonnull align 8 dereferenceable(528)) unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z24AutoChooseFilterStrategyRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_iP23ZopfliPNGFilterStrategyPb(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(528), i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12ChunksToKeepRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPSt3setIS9_St4lessIS9_ESA_E(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z10KeepChunksRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z17ZopfliPNGOptimizeRKSt6vectorIhSaIhEERK16ZopfliPNGOptionsbPS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(80) %1, i1 noundef zeroext %2, ptr noundef %3) local_unnamed_addr #1 personality ptr @__gxx_personality_v0 {
  %5 = alloca [9 x i32], align 16
  %6 = alloca [9 x i8], align 1
  %7 = alloca [9 x %"class.std::__cxx11::basic_string"], align 16
  %8 = alloca %"class.std::allocator.18", align 1
  %9 = alloca %"class.std::allocator.18", align 1
  %10 = alloca %"class.std::allocator.18", align 1
  %11 = alloca %"class.std::allocator.18", align 1
  %12 = alloca %"class.std::allocator.18", align 1
  %13 = alloca %"class.std::allocator.18", align 1
  %14 = alloca %"class.std::allocator.18", align 1
  %15 = alloca %"class.std::allocator.18", align 1
  %16 = alloca %"class.std::allocator.18", align 1
  %17 = alloca %"class.std::vector.8", align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"class.lodepng::State", align 8
  %21 = alloca %"class.std::set.21", align 8
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator.18", align 1
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator.18", align 1
  %26 = alloca %"class.std::vector.8", align 8
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %5) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(36) %5, ptr noundef nonnull align 16 dereferenceable(36) @__const._Z17ZopfliPNGOptimizeRKSt6vectorIhSaIhEERK16ZopfliPNGOptionsbPS1_.filterstrategies, i64 36, i1 false)
  call void @llvm.lifetime.start.p0(i64 9, ptr nonnull %6) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(9) %6, i8 0, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 288, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.1, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %27 unwind label %.thread

27:                                               ; preds = %4
  %28 = getelementptr inbounds i8, ptr %7, i64 32
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull @.str.2, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %29 unwind label %47

29:                                               ; preds = %27
  %30 = getelementptr inbounds i8, ptr %7, i64 64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %31 unwind label %49

31:                                               ; preds = %29
  %32 = getelementptr inbounds i8, ptr %7, i64 96
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull @.str.4, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %33 unwind label %51

33:                                               ; preds = %31
  %34 = getelementptr inbounds i8, ptr %7, i64 128
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.5, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %35 unwind label %53

35:                                               ; preds = %33
  %36 = getelementptr inbounds i8, ptr %7, i64 160
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %37 unwind label %55

37:                                               ; preds = %35
  %38 = getelementptr inbounds i8, ptr %7, i64 192
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %39 unwind label %57

39:                                               ; preds = %37
  %40 = getelementptr inbounds i8, ptr %7, i64 224
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull @.str.8, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %41 unwind label %59

41:                                               ; preds = %39
  %42 = getelementptr inbounds i8, ptr %7, i64 256
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %16) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull @.str.9, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %43 unwind label %61

43:                                               ; preds = %41
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  %44 = getelementptr inbounds i8, ptr %1, i64 8
  %45 = call noundef i64 @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %44) #8
  %.not166 = icmp eq i64 %45, 0
  br i1 %.not166, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %43
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #8
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 528, ptr nonnull %20) #8
  invoke void @_ZN7lodepng5StateC1Ev(ptr noundef nonnull align 8 dereferenceable(528) %20)
          to label %81 unwind label %100

.thread:                                          ; preds = %4
  %46 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  br label %.loopexit

47:                                               ; preds = %27
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %69

49:                                               ; preds = %29
  %50 = landingpad { ptr, i32 }
          cleanup
  br label %68

51:                                               ; preds = %31
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %67

53:                                               ; preds = %33
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %66

55:                                               ; preds = %35
  %56 = landingpad { ptr, i32 }
          cleanup
  br label %65

57:                                               ; preds = %37
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %64

59:                                               ; preds = %39
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %63

61:                                               ; preds = %41
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %16) #8
  br label %63

63:                                               ; preds = %61, %59
  %.097 = phi ptr [ %42, %61 ], [ %40, %59 ]
  %.pn = phi { ptr, i32 } [ %62, %61 ], [ %60, %59 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #8
  br label %64

64:                                               ; preds = %63, %57
  %.198 = phi ptr [ %.097, %63 ], [ %38, %57 ]
  %.pn.pn = phi { ptr, i32 } [ %.pn, %63 ], [ %58, %57 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  br label %65

65:                                               ; preds = %64, %55
  %.299 = phi ptr [ %.198, %64 ], [ %36, %55 ]
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %64 ], [ %56, %55 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #8
  br label %66

66:                                               ; preds = %65, %53
  %.3100 = phi ptr [ %.299, %65 ], [ %34, %53 ]
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %65 ], [ %54, %53 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #8
  br label %67

67:                                               ; preds = %66, %51
  %.4101 = phi ptr [ %.3100, %66 ], [ %32, %51 ]
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %66 ], [ %52, %51 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #8
  br label %68

68:                                               ; preds = %67, %49
  %.5102 = phi ptr [ %.4101, %67 ], [ %30, %49 ]
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %67 ], [ %50, %49 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #8
  br label %69

69:                                               ; preds = %47, %68
  %.6103 = phi ptr [ %.5102, %68 ], [ %28, %47 ]
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %68 ], [ %48, %47 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  %70 = icmp eq ptr %7, %.6103
  br i1 %70, label %.loopexit, label %.preheader159

.preheader159:                                    ; preds = %69, %.preheader159
  %71 = phi ptr [ %72, %.preheader159 ], [ %.6103, %69 ]
  %72 = getelementptr inbounds i8, ptr %71, i64 -32
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  %73 = icmp eq ptr %72, %7
  br i1 %73, label %.loopexit, label %.preheader159

.lr.ph:                                           ; preds = %43, %.lr.ph
  %.073162 = phi i64 [ %78, %.lr.ph ], [ 0, %43 ]
  %74 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %44, i64 noundef %.073162) #8
  %75 = load i32, ptr %74, align 4, !tbaa !5
  %76 = zext i32 %75 to i64
  %77 = getelementptr inbounds [9 x i8], ptr %6, i64 0, i64 %76
  store i8 1, ptr %77, align 1, !tbaa !9
  %78 = add nuw i64 %.073162, 1
  %79 = call noundef i64 @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %44) #8
  %80 = icmp ult i64 %78, %79
  br i1 %80, label %.lr.ph, label %._crit_edge, !llvm.loop !11

81:                                               ; preds = %._crit_edge
  %82 = invoke noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RNS_5StateERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 8 dereferenceable(528) %20, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %83 unwind label %102

83:                                               ; preds = %81
  %84 = getelementptr inbounds i8, ptr %1, i64 33
  %85 = load i8, ptr %84, align 1, !tbaa !13, !range !25, !noundef !26
  %86 = trunc nuw i8 %85 to i1
  %87 = getelementptr inbounds i8, ptr %1, i64 40
  %88 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #8
  br i1 %88, label %119, label %89

89:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %21) #8
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #8
  invoke void @_Z12ChunksToKeepRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPSt3setIS9_St4lessIS9_ESA_E(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull %21)
          to label %90 unwind label %104

90:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %23) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull @.str.10, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %91 unwind label %106

91:                                               ; preds = %90
  %92 = invoke noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %21, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %93 unwind label %108

93:                                               ; preds = %91
  %.not = icmp eq i64 %92, 0
  br i1 %.not, label %94, label %.critedge157

94:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %95 unwind label %110

95:                                               ; preds = %94
  %96 = invoke noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48) %21, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %.critedge unwind label %112

.critedge:                                        ; preds = %95
  %.not158 = icmp eq i64 %96, 0
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br i1 %.not158, label %117, label %97

.critedge157:                                     ; preds = %93
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %97

97:                                               ; preds = %.critedge157, %.critedge
  %.not136 = xor i1 %2, true
  %brmerge = or i1 %.not136, %86
  br i1 %brmerge, label %117, label %98

98:                                               ; preds = %97
  %99 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  br label %117

100:                                              ; preds = %._crit_edge
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.loopexit

102:                                              ; preds = %81
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %206

104:                                              ; preds = %89
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %118

106:                                              ; preds = %90
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %116

108:                                              ; preds = %91
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %115

110:                                              ; preds = %94
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %114

112:                                              ; preds = %95
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %114

114:                                              ; preds = %110, %112
  %.pn117 = phi { ptr, i32 } [ %113, %112 ], [ %111, %110 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %115

115:                                              ; preds = %114, %108
  %.pn117.pn = phi { ptr, i32 } [ %.pn117, %114 ], [ %109, %108 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %116

116:                                              ; preds = %115, %106
  %.pn117.pn.pn = phi { ptr, i32 } [ %.pn117.pn, %115 ], [ %107, %106 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  br label %118

117:                                              ; preds = %98, %97, %.critedge
  %.068 = phi i8 [ %85, %.critedge ], [ 1, %97 ], [ 1, %98 ]
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #8
  br label %119

118:                                              ; preds = %116, %104
  %.pn117.pn.pn.pn = phi { ptr, i32 } [ %.pn117.pn.pn, %116 ], [ %105, %104 ]
  call void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %21) #8
  br label %206

119:                                              ; preds = %117, %83
  %.169 = phi i8 [ %85, %83 ], [ %.068, %117 ]
  %.not122 = icmp eq i32 %82, 0
  br i1 %.not122, label %131, label %120

120:                                              ; preds = %119
  br i1 %2, label %121, label %.thread153

121:                                              ; preds = %120
  %122 = icmp eq i32 %82, 1
  br i1 %122, label %123, label %127

123:                                              ; preds = %121
  %124 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  br label %.thread153

125:                                              ; preds = %127
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %206

127:                                              ; preds = %121
  %128 = invoke noundef ptr @_Z18lodepng_error_textj(i32 noundef %82)
          to label %129 unwind label %125

129:                                              ; preds = %127
  %130 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %82, ptr noundef %128)
  br label %.thread153

131:                                              ; preds = %119
  %132 = getelementptr inbounds i8, ptr %20, i64 228
  %133 = load i32, ptr %132, align 4, !tbaa !27
  %134 = icmp eq i32 %133, 16
  br i1 %134, label %135, label %146

135:                                              ; preds = %131
  %136 = trunc nuw i8 %.169 to i1
  br i1 %136, label %141, label %137

137:                                              ; preds = %135
  %138 = getelementptr inbounds i8, ptr %1, i64 2
  %139 = load i8, ptr %138, align 2, !tbaa !39, !range !25, !noundef !26
  %140 = trunc nuw i8 %139 to i1
  br i1 %140, label %146, label %141

141:                                              ; preds = %137, %135
  call void @_ZNSt6vectorIhSaIhEE5clearEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  %142 = invoke noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RKS2_16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19, ptr noundef nonnull align 8 dereferenceable(24) %0, i32 noundef 6, i32 noundef 16)
          to label %145 unwind label %143

143:                                              ; preds = %157, %150, %141
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %206

145:                                              ; preds = %141
  %.not123 = icmp eq i32 %142, 0
  br i1 %.not123, label %.thread148, label %.thread153

146:                                              ; preds = %137, %131
  %147 = getelementptr inbounds i8, ptr %1, i64 1
  %148 = load i8, ptr %147, align 1, !tbaa !40, !range !25, !noundef !26
  %149 = trunc nuw i8 %148 to i1
  br i1 %149, label %150, label %.thread148

150:                                              ; preds = %146
  %151 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #8
  %152 = load i32, ptr %18, align 4, !tbaa !41
  %153 = load i32, ptr %19, align 4, !tbaa !41
  invoke void @_Z24LossyOptimizeTransparentPN7lodepng5StateEPhjj(ptr noundef nonnull %20, ptr noundef nonnull %151, i32 noundef %152, i32 noundef %153)
          to label %.thread148 unwind label %143

.thread148:                                       ; preds = %145, %146, %150
  %.063146152 = phi i1 [ false, %146 ], [ false, %150 ], [ true, %145 ]
  %154 = getelementptr inbounds i8, ptr %1, i64 32
  %155 = load i8, ptr %154, align 8, !tbaa !42, !range !25, !noundef !26
  %156 = trunc nuw i8 %155 to i1
  br i1 %156, label %157, label %.preheader

157:                                              ; preds = %.thread148
  %158 = load i32, ptr %18, align 4, !tbaa !41
  %159 = load i32, ptr %19, align 4, !tbaa !41
  %160 = trunc nuw i8 %.169 to i1
  %161 = invoke noundef i32 @_Z24AutoChooseFilterStrategyRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_iP23ZopfliPNGFilterStrategyPb(ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %158, i32 noundef %159, ptr noundef nonnull align 8 dereferenceable(528) %20, i1 noundef zeroext %.063146152, i1 noundef zeroext %160, ptr noundef nonnull align 8 dereferenceable(24) %0, i32 noundef 8, ptr noundef nonnull %5, ptr noundef nonnull %6)
          to label %162 unwind label %143

162:                                              ; preds = %157
  %.not124 = icmp eq i32 %161, 0
  br i1 %.not124, label %.preheader, label %.thread153

.preheader:                                       ; preds = %.thread148, %162
  %163 = trunc nuw i8 %.169 to i1
  br label %166

164:                                              ; preds = %194
  %165 = call noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %87) #8
  br i1 %165, label %.thread153, label %195

166:                                              ; preds = %.preheader, %194
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %194 ]
  %.062164 = phi i64 [ 0, %.preheader ], [ %.2, %194 ]
  %.272163 = phi i32 [ 0, %.preheader ], [ %.3, %194 ]
  %167 = getelementptr inbounds [9 x i8], ptr %6, i64 0, i64 %indvars.iv
  %168 = load i8, ptr %167, align 1, !tbaa !9, !range !25, !noundef !26
  %169 = trunc nuw i8 %168 to i1
  br i1 %169, label %170, label %194

170:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #8
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  %171 = load i32, ptr %18, align 4, !tbaa !41
  %172 = load i32, ptr %19, align 4, !tbaa !41
  %173 = getelementptr inbounds [9 x i32], ptr %5, i64 0, i64 %indvars.iv
  %174 = load i32, ptr %173, align 4, !tbaa !5
  %175 = invoke noundef i32 @_Z11TryOptimizeRKSt6vectorIhSaIhEEjjRKN7lodepng5StateEbbS3_23ZopfliPNGFilterStrategybiPK16ZopfliPNGOptionsPS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, i32 noundef %171, i32 noundef %172, ptr noundef nonnull align 8 dereferenceable(528) %20, i1 noundef zeroext %.063146152, i1 noundef zeroext %163, ptr noundef nonnull align 8 dereferenceable(24) %0, i32 noundef %174, i1 noundef zeroext true, i32 noundef 32768, ptr noundef nonnull %1, ptr noundef nonnull %26)
          to label %176 unwind label %184

176:                                              ; preds = %170
  %.not128 = icmp eq i32 %175, 0
  br i1 %.not128, label %177, label %193

177:                                              ; preds = %176
  br i1 %2, label %178, label %186

178:                                              ; preds = %177
  %179 = getelementptr inbounds [9 x %"class.std::__cxx11::basic_string"], ptr %7, i64 0, i64 %indvars.iv
  %180 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %179) #8
  %181 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  %182 = trunc i64 %181 to i32
  %183 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, ptr noundef %180, i32 noundef %182)
  br label %186

184:                                              ; preds = %170
  %185 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #8
  br label %206

186:                                              ; preds = %178, %177
  %187 = icmp eq i64 %.062164, 0
  br i1 %187, label %191, label %188

188:                                              ; preds = %186
  %189 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  %190 = icmp ult i64 %189, %.062164
  br i1 %190, label %191, label %193

191:                                              ; preds = %188, %186
  %192 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @_ZNSt6vectorIhSaIhEE4swapERS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  br label %193

193:                                              ; preds = %188, %191, %176
  %.1 = phi i64 [ %.062164, %176 ], [ %192, %191 ], [ %.062164, %188 ]
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #8
  br label %194

194:                                              ; preds = %166, %193
  %.3 = phi i32 [ %175, %193 ], [ %.272163, %166 ]
  %.2 = phi i64 [ %.1, %193 ], [ %.062164, %166 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 9
  br i1 %exitcond.not, label %164, label %166, !llvm.loop !43

195:                                              ; preds = %164
  invoke void @_Z10KeepChunksRKSt6vectorIhSaIhEERKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EEPS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef %3)
          to label %.thread153 unwind label %196

196:                                              ; preds = %195
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %206

.thread153:                                       ; preds = %145, %162, %195, %164, %120, %129, %123
  %.0105 = phi i32 [ 1, %123 ], [ %82, %129 ], [ %82, %120 ], [ %161, %162 ], [ %.3, %195 ], [ %.3, %164 ], [ %142, %145 ]
  call void @_ZN7lodepng5StateD1Ev(ptr noundef nonnull align 8 dereferenceable(528) %20) #8
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  %198 = getelementptr inbounds i8, ptr %7, i64 256
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #8
  %199 = getelementptr inbounds i8, ptr %7, i64 224
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #8
  %200 = getelementptr inbounds i8, ptr %7, i64 192
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #8
  %201 = getelementptr inbounds i8, ptr %7, i64 160
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #8
  %202 = getelementptr inbounds i8, ptr %7, i64 128
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #8
  %203 = getelementptr inbounds i8, ptr %7, i64 96
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #8
  %204 = getelementptr inbounds i8, ptr %7, i64 64
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #8
  %205 = getelementptr inbounds i8, ptr %7, i64 32
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 288, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 9, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %5) #8
  ret i32 %.0105

206:                                              ; preds = %118, %125, %184, %196, %143, %102
  %.pn129.pn = phi { ptr, i32 } [ %103, %102 ], [ %126, %125 ], [ %.pn117.pn.pn.pn, %118 ], [ %144, %143 ], [ %185, %184 ], [ %197, %196 ]
  call void @_ZN7lodepng5StateD1Ev(ptr noundef nonnull align 8 dereferenceable(528) %20) #8
  br label %.loopexit.loopexit

.loopexit.loopexit:                               ; preds = %206, %100
  %.pn129.pn.pn = phi { ptr, i32 } [ %.pn129.pn, %206 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 528, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  %207 = getelementptr inbounds i8, ptr %7, i64 256
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %207) #8
  %208 = getelementptr inbounds i8, ptr %7, i64 224
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #8
  %209 = getelementptr inbounds i8, ptr %7, i64 192
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #8
  %210 = getelementptr inbounds i8, ptr %7, i64 160
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #8
  %211 = getelementptr inbounds i8, ptr %7, i64 128
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %211) #8
  %212 = getelementptr inbounds i8, ptr %7, i64 96
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #8
  %213 = getelementptr inbounds i8, ptr %7, i64 64
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #8
  %214 = getelementptr inbounds i8, ptr %7, i64 32
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader159, %.loopexit.loopexit, %.thread, %69
  %.pn129.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %69 ], [ %46, %.thread ], [ %.pn129.pn.pn, %.loopexit.loopexit ], [ %.pn.pn.pn.pn.pn.pn.pn, %.preheader159 ]
  call void @llvm.lifetime.end.p0(i64 288, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 9, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %5) #8
  resume { ptr, i32 } %.pn129.pn.pn.pn
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt6vectorI23ZopfliPNGFilterStrategySaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

declare noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RNS_5StateERKS2_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EE5countERKS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

declare noundef i32 @_ZN7lodepng6decodeERSt6vectorIhSaIhEERjS4_RKS2_16LodePNGColorTypej(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(24), i32 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind "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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { 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 = !{!"_ZTS23ZopfliPNGFilterStrategy", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 33}
!14 = !{!"_ZTS16ZopfliPNGOptions", !10, i64 0, !10, i64 1, !10, i64 2, !15, i64 8, !10, i64 32, !10, i64 33, !20, i64 40, !10, i64 64, !24, i64 68, !24, i64 72, !24, i64 76}
!15 = !{!"_ZTSSt6vectorI23ZopfliPNGFilterStrategySaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI23ZopfliPNGFilterStrategySaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI23ZopfliPNGFilterStrategySaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI23ZopfliPNGFilterStrategySaIS0_EE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!19 = !{!"any pointer", !7, i64 0}
!20 = !{!"_ZTSSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!24 = !{!"int", !7, i64 0}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!28, !24, i64 228}
!28 = !{!"_ZTS12LodePNGState", !29, i64 0, !32, i64 80, !35, i64 168, !37, i64 208, !24, i64 520}
!29 = !{!"_ZTS22LodePNGDecoderSettings", !30, i64 0, !24, i64 40, !24, i64 44, !24, i64 48, !24, i64 52, !24, i64 56, !24, i64 60, !31, i64 64, !31, i64 72}
!30 = !{!"_ZTS25LodePNGDecompressSettings", !24, i64 0, !24, i64 4, !31, i64 8, !19, i64 16, !19, i64 24, !19, i64 32}
!31 = !{!"long", !7, i64 0}
!32 = !{!"_ZTS22LodePNGEncoderSettings", !33, i64 0, !24, i64 48, !24, i64 52, !34, i64 56, !19, i64 64, !24, i64 72, !24, i64 76, !24, i64 80}
!33 = !{!"_ZTS23LodePNGCompressSettings", !24, i64 0, !24, i64 4, !24, i64 8, !24, i64 12, !24, i64 16, !24, i64 20, !19, i64 24, !19, i64 32, !19, i64 40}
!34 = !{!"_ZTS21LodePNGFilterStrategy", !7, i64 0}
!35 = !{!"_ZTS16LodePNGColorMode", !36, i64 0, !24, i64 4, !19, i64 8, !31, i64 16, !24, i64 24, !24, i64 28, !24, i64 32, !24, i64 36}
!36 = !{!"_ZTS16LodePNGColorType", !7, i64 0}
!37 = !{!"_ZTS11LodePNGInfo", !24, i64 0, !24, i64 4, !24, i64 8, !35, i64 16, !24, i64 56, !24, i64 60, !24, i64 64, !24, i64 68, !31, i64 72, !19, i64 80, !19, i64 88, !31, i64 96, !19, i64 104, !19, i64 112, !19, i64 120, !19, i64 128, !24, i64 136, !38, i64 140, !24, i64 164, !24, i64 168, !24, i64 172, !24, i64 176, !24, i64 180, !24, i64 184, !24, i64 188, !24, i64 192, !24, i64 196, !24, i64 200, !24, i64 204, !24, i64 208, !24, i64 212, !24, i64 216, !24, i64 220, !24, i64 224, !24, i64 228, !24, i64 232, !19, i64 240, !19, i64 248, !24, i64 256, !7, i64 264, !7, i64 288}
!38 = !{!"_ZTS11LodePNGTime", !24, i64 0, !24, i64 4, !24, i64 8, !24, i64 12, !24, i64 16, !24, i64 20}
!39 = !{!14, !10, i64 2}
!40 = !{!14, !10, i64 1}
!41 = !{!24, !24, i64 0}
!42 = !{!14, !10, i64 32}
!43 = distinct !{!43, !12}


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