; LLVM IR from ermig1979/Simd :: src/Simd/SimdBaseImageLoadPng.ll (ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj)

; 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.Simd::Base::ImagePngLoader" = type { %"class.Simd::ImageLoader", [7 x ptr], ptr, ptr, i8, i8, i8, i32, i32, i32, i32, [3 x i16], i8, i8, i8, i8, [3 x i8], %"struct.Simd::Array", %"struct.Simd::Array", %"struct.Simd::Array", %"class.std::vector" }
%"class.Simd::ImageLoader" = type { ptr, %"struct.Simd::ImageLoaderParam", %"class.Simd::InputMemoryStream", %"struct.Simd::View" }
%"struct.Simd::ImageLoaderParam" = type { ptr, i64, i32, i32 }
%"class.Simd::InputMemoryStream" = type { ptr, i64, i64, i64, i64 }
%"struct.Simd::View" = type <{ i64, i64, i64, i32, [4 x i8], ptr, i8, [7 x i8] }>
%"struct.Simd::Array" = type { ptr, i64 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Simd::Base::ImagePngLoader::Chunk, std::allocator<Simd::Base::ImagePngLoader::Chunk>>::_Vector_impl" }
%"struct.std::_Vector_base<Simd::Base::ImagePngLoader::Chunk, std::allocator<Simd::Base::ImagePngLoader::Chunk>>::_Vector_impl" = type { %"struct.std::_Vector_base<Simd::Base::ImagePngLoader::Chunk, std::allocator<Simd::Base::ImagePngLoader::Chunk>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Simd::Base::ImagePngLoader::Chunk, std::allocator<Simd::Base::ImagePngLoader::Chunk>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZN4Simd4BaseL15DepthScaleTableE = external hidden constant [9 x i8], align 1
@_ZZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjjE14FirstRowFilter = external hidden constant [5 x i8], align 1
@.str = external hidden unnamed_addr constant [45 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [82 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj = external hidden unnamed_addr constant [95 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 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: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIhE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj(ptr noundef nonnull align 8 dereferenceable(304) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) #2 align 2 {
  %6 = alloca i1, align 1
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i8, align 1
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  %34 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %35 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %36 = load i8, ptr %35, align 2, !tbaa !11
  %37 = zext i8 %36 to i32
  %38 = icmp eq i32 %37, 16
  %39 = zext i1 %38 to i64
  %40 = select i1 %38, i32 2, i32 1
  store i32 %40, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %41 = load i32, ptr %10, align 4, !tbaa !9
  %42 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %43 = load i32, ptr %42, align 8, !tbaa !27
  %44 = mul i32 %41, %43
  %45 = load i32, ptr %12, align 4, !tbaa !9
  %46 = mul i32 %44, %45
  store i32 %46, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %47 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %47, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %48 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %49 = load i32, ptr %48, align 8, !tbaa !27
  %50 = load i32, ptr %12, align 4, !tbaa !9
  %51 = mul i32 %49, %50
  store i32 %51, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %52 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %53 = load i32, ptr %52, align 4, !tbaa !28
  %54 = load i32, ptr %12, align 4, !tbaa !9
  %55 = mul i32 %53, %54
  store i32 %55, ptr %21, align 4, !tbaa !9
  %56 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %57 = load i32, ptr %56, align 8, !tbaa !27
  %58 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %59 = load i32, ptr %58, align 4, !tbaa !28
  %60 = icmp eq i32 %57, %59
  br i1 %60, label %68, label %61

61:                                               ; preds = %5
  %62 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %63 = load i32, ptr %62, align 8, !tbaa !27
  %64 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %65 = load i32, ptr %64, align 4, !tbaa !28
  %66 = add i32 %65, 1
  %67 = icmp eq i32 %63, %66
  br label %68

68:                                               ; preds = %61, %5
  %69 = phi i1 [ true, %5 ], [ %67, %61 ]
  br i1 %69, label %70, label %71

70:                                               ; preds = %68
  br label %73

71:                                               ; preds = %68
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1103, ptr noundef @__PRETTY_FUNCTION__._ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj) #6
  unreachable

72:                                               ; No predecessors!
  br label %73

73:                                               ; preds = %72, %70
  %74 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %75 = load i32, ptr %10, align 4, !tbaa !9
  %76 = load i32, ptr %11, align 4, !tbaa !9
  %77 = mul i32 %75, %76
  %78 = load i32, ptr %20, align 4, !tbaa !9
  %79 = mul i32 %77, %78
  %80 = zext i32 %79 to i64
  call void @_ZN4Simd5ArrayIhE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16) %74, i64 noundef %80, i1 noundef zeroext false, i64 noundef 8)
  %81 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %82 = call noundef zeroext i1 @_ZNK4Simd5ArrayIhE5EmptyEv(ptr noundef nonnull align 8 dereferenceable(16) %81)
  br i1 %82, label %83, label %86

83:                                               ; preds = %73
  %84 = call noundef i32 @_ZN4Simd4Base12PngLoadErrorEPKcS2_(ptr noundef @.str.2, ptr noundef @.str.3)
  %85 = icmp ne i32 %84, 0
  store i1 %85, ptr %6, align 1
  store i32 1, ptr %22, align 4
  br label %807

86:                                               ; preds = %73
  %87 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %88 = load i32, ptr %87, align 4, !tbaa !28
  %89 = load i32, ptr %10, align 4, !tbaa !9
  %90 = mul i32 %88, %89
  %91 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %92 = load i8, ptr %91, align 2, !tbaa !11
  %93 = zext i8 %92 to i32
  %94 = mul i32 %90, %93
  %95 = add i32 %94, 7
  %96 = lshr i32 %95, 3
  store i32 %96, ptr %17, align 4, !tbaa !9
  %97 = load i32, ptr %17, align 4, !tbaa !9
  %98 = add i32 %97, 1
  %99 = load i32, ptr %11, align 4, !tbaa !9
  %100 = mul i32 %98, %99
  store i32 %100, ptr %16, align 4, !tbaa !9
  %101 = load i32, ptr %9, align 4, !tbaa !9
  %102 = load i32, ptr %16, align 4, !tbaa !9
  %103 = icmp ult i32 %101, %102
  br i1 %103, label %104, label %107

104:                                              ; preds = %86
  %105 = call noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef @.str.4)
  %106 = icmp ne i32 %105, 0
  store i1 %106, ptr %6, align 1
  store i32 1, ptr %22, align 4
  br label %807

107:                                              ; preds = %86
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %108

108:                                              ; preds = %224, %107
  %109 = load i32, ptr %14, align 4, !tbaa !9
  %110 = load i32, ptr %11, align 4, !tbaa !9
  %111 = icmp ult i32 %109, %110
  br i1 %111, label %112, label %227

112:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %113 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %114 = getelementptr inbounds %"struct.Simd::Array", ptr %113, i32 0, i32 0
  %115 = load ptr, ptr %114, align 8, !tbaa !29
  %116 = load i32, ptr %15, align 4, !tbaa !9
  %117 = load i32, ptr %14, align 4, !tbaa !9
  %118 = mul i32 %116, %117
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds i8, ptr %115, i64 %119
  store ptr %120, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = getelementptr inbounds i8, ptr %121, i32 1
  store ptr %122, ptr %8, align 8, !tbaa !5
  %123 = load i8, ptr %121, align 1, !tbaa !30
  %124 = zext i8 %123 to i32
  store i32 %124, ptr %25, align 4, !tbaa !9
  %125 = load i32, ptr %25, align 4, !tbaa !9
  %126 = icmp sgt i32 %125, 4
  br i1 %126, label %127, label %130

127:                                              ; preds = %112
  %128 = call noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef @.str.5)
  %129 = icmp ne i32 %128, 0
  store i1 %129, ptr %6, align 1
  store i32 1, ptr %22, align 4
  br label %221

130:                                              ; preds = %112
  %131 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %132 = load i8, ptr %131, align 2, !tbaa !11
  %133 = zext i8 %132 to i32
  %134 = icmp slt i32 %133, 8
  br i1 %134, label %135, label %153

135:                                              ; preds = %130
  %136 = load i32, ptr %17, align 4, !tbaa !9
  %137 = load i32, ptr %10, align 4, !tbaa !9
  %138 = icmp ugt i32 %136, %137
  br i1 %138, label %139, label %142

139:                                              ; preds = %135
  %140 = call noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef @.str.6)
  %141 = icmp ne i32 %140, 0
  store i1 %141, ptr %6, align 1
  store i32 1, ptr %22, align 4
  br label %221

142:                                              ; preds = %135
  %143 = load i32, ptr %10, align 4, !tbaa !9
  %144 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %145 = load i32, ptr %144, align 8, !tbaa !27
  %146 = mul i32 %143, %145
  %147 = load i32, ptr %17, align 4, !tbaa !9
  %148 = sub i32 %146, %147
  %149 = load ptr, ptr %23, align 8, !tbaa !5
  %150 = zext i32 %148 to i64
  %151 = getelementptr inbounds i8, ptr %149, i64 %150
  store ptr %151, ptr %23, align 8, !tbaa !5
  store i32 1, ptr %21, align 4, !tbaa !9
  %152 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %152, ptr %19, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %142, %130
  %154 = load ptr, ptr %23, align 8, !tbaa !5
  %155 = load i32, ptr %15, align 4, !tbaa !9
  %156 = zext i32 %155 to i64
  %157 = sub i64 0, %156
  %158 = getelementptr inbounds i8, ptr %154, i64 %157
  store ptr %158, ptr %24, align 8, !tbaa !5
  %159 = load i32, ptr %14, align 4, !tbaa !9
  %160 = icmp eq i32 %159, 0
  br i1 %160, label %161, label %167

161:                                              ; preds = %153
  %162 = load i32, ptr %25, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds [5 x i8], ptr @_ZZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjjE14FirstRowFilter, i64 0, i64 %163
  %165 = load i8, ptr %164, align 1, !tbaa !30
  %166 = zext i8 %165 to i32
  store i32 %166, ptr %25, align 4, !tbaa !9
  br label %167

167:                                              ; preds = %161, %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %168 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %169 = load i8, ptr %168, align 2, !tbaa !11
  %170 = zext i8 %169 to i32
  %171 = icmp slt i32 %170, 8
  br i1 %171, label %178, label %172

172:                                              ; preds = %167
  %173 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %174 = load i32, ptr %173, align 4, !tbaa !28
  %175 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %176 = load i32, ptr %175, align 8, !tbaa !27
  %177 = icmp eq i32 %174, %176
  br i1 %177, label %178, label %180

178:                                              ; preds = %172, %167
  %179 = load i32, ptr %19, align 4, !tbaa !9
  br label %182

180:                                              ; preds = %172
  %181 = load i32, ptr %10, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %180, %178
  %183 = phi i32 [ %179, %178 ], [ %181, %180 ]
  store i32 %183, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %184 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %185 = load i8, ptr %184, align 2, !tbaa !11
  %186 = zext i8 %185 to i32
  %187 = icmp slt i32 %186, 8
  br i1 %187, label %194, label %188

188:                                              ; preds = %182
  %189 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %190 = load i32, ptr %189, align 4, !tbaa !28
  %191 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %192 = load i32, ptr %191, align 8, !tbaa !27
  %193 = icmp eq i32 %190, %192
  br i1 %193, label %194, label %196

194:                                              ; preds = %188, %182
  %195 = load i32, ptr %21, align 4, !tbaa !9
  br label %198

196:                                              ; preds = %188
  %197 = load i32, ptr %20, align 4, !tbaa !9
  br label %198

198:                                              ; preds = %196, %194
  %199 = phi i32 [ %195, %194 ], [ %197, %196 ]
  store i32 %199, ptr %27, align 4, !tbaa !9
  %200 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 1
  %201 = load i32, ptr %25, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds [7 x ptr], ptr %200, i64 0, i64 %202
  %204 = load ptr, ptr %203, align 8, !tbaa !5
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  %206 = load ptr, ptr %23, align 8, !tbaa !5
  %207 = load i32, ptr %15, align 4, !tbaa !9
  %208 = zext i32 %207 to i64
  %209 = sub i64 0, %208
  %210 = getelementptr inbounds i8, ptr %206, i64 %209
  %211 = load i32, ptr %26, align 4, !tbaa !9
  %212 = load i32, ptr %21, align 4, !tbaa !9
  %213 = load i32, ptr %27, align 4, !tbaa !9
  %214 = load ptr, ptr %23, align 8, !tbaa !5
  call void %204(ptr noundef %205, ptr noundef %210, i32 noundef %211, i32 noundef %212, i32 noundef %213, ptr noundef %214)
  %215 = load i32, ptr %26, align 4, !tbaa !9
  %216 = load i32, ptr %21, align 4, !tbaa !9
  %217 = mul nsw i32 %215, %216
  %218 = load ptr, ptr %8, align 8, !tbaa !5
  %219 = sext i32 %217 to i64
  %220 = getelementptr inbounds i8, ptr %218, i64 %219
  store ptr %220, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  store i32 0, ptr %22, align 4
  br label %221

221:                                              ; preds = %198, %139, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %222 = load i32, ptr %22, align 4
  switch i32 %222, label %807 [
    i32 0, label %223
  ]

223:                                              ; preds = %221
  br label %224

224:                                              ; preds = %223
  %225 = load i32, ptr %14, align 4, !tbaa !9
  %226 = add i32 %225, 1
  store i32 %226, ptr %14, align 4, !tbaa !9
  br label %108, !llvm.loop !31

227:                                              ; preds = %108
  %228 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %229 = load i8, ptr %228, align 2, !tbaa !11
  %230 = zext i8 %229 to i32
  %231 = icmp slt i32 %230, 8
  br i1 %231, label %232, label %765

232:                                              ; preds = %227
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %233

233:                                              ; preds = %761, %232
  %234 = load i32, ptr %14, align 4, !tbaa !9
  %235 = load i32, ptr %11, align 4, !tbaa !9
  %236 = icmp ult i32 %234, %235
  br i1 %236, label %237, label %764

237:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %238 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %239 = getelementptr inbounds %"struct.Simd::Array", ptr %238, i32 0, i32 0
  %240 = load ptr, ptr %239, align 8, !tbaa !29
  %241 = load i32, ptr %15, align 4, !tbaa !9
  %242 = load i32, ptr %14, align 4, !tbaa !9
  %243 = mul i32 %241, %242
  %244 = zext i32 %243 to i64
  %245 = getelementptr inbounds i8, ptr %240, i64 %244
  store ptr %245, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %246 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %247 = getelementptr inbounds %"struct.Simd::Array", ptr %246, i32 0, i32 0
  %248 = load ptr, ptr %247, align 8, !tbaa !29
  %249 = load i32, ptr %15, align 4, !tbaa !9
  %250 = load i32, ptr %14, align 4, !tbaa !9
  %251 = mul i32 %249, %250
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds i8, ptr %248, i64 %252
  %254 = load i32, ptr %10, align 4, !tbaa !9
  %255 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %256 = load i32, ptr %255, align 8, !tbaa !27
  %257 = mul i32 %254, %256
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds i8, ptr %253, i64 %258
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = zext i32 %260 to i64
  %262 = sub i64 0, %261
  %263 = getelementptr inbounds i8, ptr %259, i64 %262
  store ptr %263, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #5
  %264 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 13
  %265 = load i8, ptr %264, align 1, !tbaa !33
  %266 = zext i8 %265 to i32
  %267 = icmp eq i32 %266, 0
  br i1 %267, label %268, label %275

268:                                              ; preds = %237
  %269 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %270 = load i8, ptr %269, align 2, !tbaa !11
  %271 = zext i8 %270 to i64
  %272 = getelementptr inbounds [9 x i8], ptr @_ZN4Simd4BaseL15DepthScaleTableE, i64 0, i64 %271
  %273 = load i8, ptr %272, align 1, !tbaa !30
  %274 = zext i8 %273 to i32
  br label %276

275:                                              ; preds = %237
  br label %276

276:                                              ; preds = %275, %268
  %277 = phi i32 [ %274, %268 ], [ 1, %275 ]
  %278 = trunc i32 %277 to i8
  store i8 %278, ptr %30, align 1, !tbaa !30
  %279 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %280 = load i8, ptr %279, align 2, !tbaa !11
  %281 = zext i8 %280 to i32
  %282 = icmp eq i32 %281, 4
  br i1 %282, label %283, label %332

283:                                              ; preds = %276
  %284 = load i32, ptr %10, align 4, !tbaa !9
  %285 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %286 = load i32, ptr %285, align 4, !tbaa !28
  %287 = mul i32 %284, %286
  store i32 %287, ptr %18, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %312, %283
  %289 = load i32, ptr %18, align 4, !tbaa !9
  %290 = icmp sge i32 %289, 2
  br i1 %290, label %291, label %317

291:                                              ; preds = %288
  %292 = load i8, ptr %30, align 1, !tbaa !30
  %293 = zext i8 %292 to i32
  %294 = load ptr, ptr %29, align 8, !tbaa !5
  %295 = load i8, ptr %294, align 1, !tbaa !30
  %296 = zext i8 %295 to i32
  %297 = ashr i32 %296, 4
  %298 = mul nsw i32 %293, %297
  %299 = trunc i32 %298 to i8
  %300 = load ptr, ptr %28, align 8, !tbaa !5
  %301 = getelementptr inbounds i8, ptr %300, i32 1
  store ptr %301, ptr %28, align 8, !tbaa !5
  store i8 %299, ptr %300, align 1, !tbaa !30
  %302 = load i8, ptr %30, align 1, !tbaa !30
  %303 = zext i8 %302 to i32
  %304 = load ptr, ptr %29, align 8, !tbaa !5
  %305 = load i8, ptr %304, align 1, !tbaa !30
  %306 = zext i8 %305 to i32
  %307 = and i32 %306, 15
  %308 = mul nsw i32 %303, %307
  %309 = trunc i32 %308 to i8
  %310 = load ptr, ptr %28, align 8, !tbaa !5
  %311 = getelementptr inbounds i8, ptr %310, i32 1
  store ptr %311, ptr %28, align 8, !tbaa !5
  store i8 %309, ptr %310, align 1, !tbaa !30
  br label %312

312:                                              ; preds = %291
  %313 = load i32, ptr %18, align 4, !tbaa !9
  %314 = sub nsw i32 %313, 2
  store i32 %314, ptr %18, align 4, !tbaa !9
  %315 = load ptr, ptr %29, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i32 1
  store ptr %316, ptr %29, align 8, !tbaa !5
  br label %288, !llvm.loop !34

317:                                              ; preds = %288
  %318 = load i32, ptr %18, align 4, !tbaa !9
  %319 = icmp sgt i32 %318, 0
  br i1 %319, label %320, label %331

320:                                              ; preds = %317
  %321 = load i8, ptr %30, align 1, !tbaa !30
  %322 = zext i8 %321 to i32
  %323 = load ptr, ptr %29, align 8, !tbaa !5
  %324 = load i8, ptr %323, align 1, !tbaa !30
  %325 = zext i8 %324 to i32
  %326 = ashr i32 %325, 4
  %327 = mul nsw i32 %322, %326
  %328 = trunc i32 %327 to i8
  %329 = load ptr, ptr %28, align 8, !tbaa !5
  %330 = getelementptr inbounds i8, ptr %329, i32 1
  store ptr %330, ptr %28, align 8, !tbaa !5
  store i8 %328, ptr %329, align 1, !tbaa !30
  br label %331

331:                                              ; preds = %320, %317
  br label %650

332:                                              ; preds = %276
  %333 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %334 = load i8, ptr %333, align 2, !tbaa !11
  %335 = zext i8 %334 to i32
  %336 = icmp eq i32 %335, 2
  br i1 %336, label %337, label %438

337:                                              ; preds = %332
  %338 = load i32, ptr %10, align 4, !tbaa !9
  %339 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %340 = load i32, ptr %339, align 4, !tbaa !28
  %341 = mul i32 %338, %340
  store i32 %341, ptr %18, align 4, !tbaa !9
  br label %342

342:                                              ; preds = %388, %337
  %343 = load i32, ptr %18, align 4, !tbaa !9
  %344 = icmp sge i32 %343, 4
  br i1 %344, label %345, label %393

345:                                              ; preds = %342
  %346 = load i8, ptr %30, align 1, !tbaa !30
  %347 = zext i8 %346 to i32
  %348 = load ptr, ptr %29, align 8, !tbaa !5
  %349 = load i8, ptr %348, align 1, !tbaa !30
  %350 = zext i8 %349 to i32
  %351 = ashr i32 %350, 6
  %352 = mul nsw i32 %347, %351
  %353 = trunc i32 %352 to i8
  %354 = load ptr, ptr %28, align 8, !tbaa !5
  %355 = getelementptr inbounds i8, ptr %354, i32 1
  store ptr %355, ptr %28, align 8, !tbaa !5
  store i8 %353, ptr %354, align 1, !tbaa !30
  %356 = load i8, ptr %30, align 1, !tbaa !30
  %357 = zext i8 %356 to i32
  %358 = load ptr, ptr %29, align 8, !tbaa !5
  %359 = load i8, ptr %358, align 1, !tbaa !30
  %360 = zext i8 %359 to i32
  %361 = ashr i32 %360, 4
  %362 = and i32 %361, 3
  %363 = mul nsw i32 %357, %362
  %364 = trunc i32 %363 to i8
  %365 = load ptr, ptr %28, align 8, !tbaa !5
  %366 = getelementptr inbounds i8, ptr %365, i32 1
  store ptr %366, ptr %28, align 8, !tbaa !5
  store i8 %364, ptr %365, align 1, !tbaa !30
  %367 = load i8, ptr %30, align 1, !tbaa !30
  %368 = zext i8 %367 to i32
  %369 = load ptr, ptr %29, align 8, !tbaa !5
  %370 = load i8, ptr %369, align 1, !tbaa !30
  %371 = zext i8 %370 to i32
  %372 = ashr i32 %371, 2
  %373 = and i32 %372, 3
  %374 = mul nsw i32 %368, %373
  %375 = trunc i32 %374 to i8
  %376 = load ptr, ptr %28, align 8, !tbaa !5
  %377 = getelementptr inbounds i8, ptr %376, i32 1
  store ptr %377, ptr %28, align 8, !tbaa !5
  store i8 %375, ptr %376, align 1, !tbaa !30
  %378 = load i8, ptr %30, align 1, !tbaa !30
  %379 = zext i8 %378 to i32
  %380 = load ptr, ptr %29, align 8, !tbaa !5
  %381 = load i8, ptr %380, align 1, !tbaa !30
  %382 = zext i8 %381 to i32
  %383 = and i32 %382, 3
  %384 = mul nsw i32 %379, %383
  %385 = trunc i32 %384 to i8
  %386 = load ptr, ptr %28, align 8, !tbaa !5
  %387 = getelementptr inbounds i8, ptr %386, i32 1
  store ptr %387, ptr %28, align 8, !tbaa !5
  store i8 %385, ptr %386, align 1, !tbaa !30
  br label %388

388:                                              ; preds = %345
  %389 = load i32, ptr %18, align 4, !tbaa !9
  %390 = sub nsw i32 %389, 4
  store i32 %390, ptr %18, align 4, !tbaa !9
  %391 = load ptr, ptr %29, align 8, !tbaa !5
  %392 = getelementptr inbounds i8, ptr %391, i32 1
  store ptr %392, ptr %29, align 8, !tbaa !5
  br label %342, !llvm.loop !35

393:                                              ; preds = %342
  %394 = load i32, ptr %18, align 4, !tbaa !9
  %395 = icmp sgt i32 %394, 0
  br i1 %395, label %396, label %407

396:                                              ; preds = %393
  %397 = load i8, ptr %30, align 1, !tbaa !30
  %398 = zext i8 %397 to i32
  %399 = load ptr, ptr %29, align 8, !tbaa !5
  %400 = load i8, ptr %399, align 1, !tbaa !30
  %401 = zext i8 %400 to i32
  %402 = ashr i32 %401, 6
  %403 = mul nsw i32 %398, %402
  %404 = trunc i32 %403 to i8
  %405 = load ptr, ptr %28, align 8, !tbaa !5
  %406 = getelementptr inbounds i8, ptr %405, i32 1
  store ptr %406, ptr %28, align 8, !tbaa !5
  store i8 %404, ptr %405, align 1, !tbaa !30
  br label %407

407:                                              ; preds = %396, %393
  %408 = load i32, ptr %18, align 4, !tbaa !9
  %409 = icmp sgt i32 %408, 1
  br i1 %409, label %410, label %422

410:                                              ; preds = %407
  %411 = load i8, ptr %30, align 1, !tbaa !30
  %412 = zext i8 %411 to i32
  %413 = load ptr, ptr %29, align 8, !tbaa !5
  %414 = load i8, ptr %413, align 1, !tbaa !30
  %415 = zext i8 %414 to i32
  %416 = ashr i32 %415, 4
  %417 = and i32 %416, 3
  %418 = mul nsw i32 %412, %417
  %419 = trunc i32 %418 to i8
  %420 = load ptr, ptr %28, align 8, !tbaa !5
  %421 = getelementptr inbounds i8, ptr %420, i32 1
  store ptr %421, ptr %28, align 8, !tbaa !5
  store i8 %419, ptr %420, align 1, !tbaa !30
  br label %422

422:                                              ; preds = %410, %407
  %423 = load i32, ptr %18, align 4, !tbaa !9
  %424 = icmp sgt i32 %423, 2
  br i1 %424, label %425, label %437

425:                                              ; preds = %422
  %426 = load i8, ptr %30, align 1, !tbaa !30
  %427 = zext i8 %426 to i32
  %428 = load ptr, ptr %29, align 8, !tbaa !5
  %429 = load i8, ptr %428, align 1, !tbaa !30
  %430 = zext i8 %429 to i32
  %431 = ashr i32 %430, 2
  %432 = and i32 %431, 3
  %433 = mul nsw i32 %427, %432
  %434 = trunc i32 %433 to i8
  %435 = load ptr, ptr %28, align 8, !tbaa !5
  %436 = getelementptr inbounds i8, ptr %435, i32 1
  store ptr %436, ptr %28, align 8, !tbaa !5
  store i8 %434, ptr %435, align 1, !tbaa !30
  br label %437

437:                                              ; preds = %425, %422
  br label %649

438:                                              ; preds = %332
  %439 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %440 = load i8, ptr %439, align 2, !tbaa !11
  %441 = zext i8 %440 to i32
  %442 = icmp eq i32 %441, 1
  br i1 %442, label %443, label %648

443:                                              ; preds = %438
  %444 = load i32, ptr %10, align 4, !tbaa !9
  %445 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %446 = load i32, ptr %445, align 4, !tbaa !28
  %447 = mul i32 %444, %446
  store i32 %447, ptr %18, align 4, !tbaa !9
  br label %448

448:                                              ; preds = %538, %443
  %449 = load i32, ptr %18, align 4, !tbaa !9
  %450 = icmp sge i32 %449, 8
  br i1 %450, label %451, label %543

451:                                              ; preds = %448
  %452 = load i8, ptr %30, align 1, !tbaa !30
  %453 = zext i8 %452 to i32
  %454 = load ptr, ptr %29, align 8, !tbaa !5
  %455 = load i8, ptr %454, align 1, !tbaa !30
  %456 = zext i8 %455 to i32
  %457 = ashr i32 %456, 7
  %458 = mul nsw i32 %453, %457
  %459 = trunc i32 %458 to i8
  %460 = load ptr, ptr %28, align 8, !tbaa !5
  %461 = getelementptr inbounds i8, ptr %460, i32 1
  store ptr %461, ptr %28, align 8, !tbaa !5
  store i8 %459, ptr %460, align 1, !tbaa !30
  %462 = load i8, ptr %30, align 1, !tbaa !30
  %463 = zext i8 %462 to i32
  %464 = load ptr, ptr %29, align 8, !tbaa !5
  %465 = load i8, ptr %464, align 1, !tbaa !30
  %466 = zext i8 %465 to i32
  %467 = ashr i32 %466, 6
  %468 = and i32 %467, 1
  %469 = mul nsw i32 %463, %468
  %470 = trunc i32 %469 to i8
  %471 = load ptr, ptr %28, align 8, !tbaa !5
  %472 = getelementptr inbounds i8, ptr %471, i32 1
  store ptr %472, ptr %28, align 8, !tbaa !5
  store i8 %470, ptr %471, align 1, !tbaa !30
  %473 = load i8, ptr %30, align 1, !tbaa !30
  %474 = zext i8 %473 to i32
  %475 = load ptr, ptr %29, align 8, !tbaa !5
  %476 = load i8, ptr %475, align 1, !tbaa !30
  %477 = zext i8 %476 to i32
  %478 = ashr i32 %477, 5
  %479 = and i32 %478, 1
  %480 = mul nsw i32 %474, %479
  %481 = trunc i32 %480 to i8
  %482 = load ptr, ptr %28, align 8, !tbaa !5
  %483 = getelementptr inbounds i8, ptr %482, i32 1
  store ptr %483, ptr %28, align 8, !tbaa !5
  store i8 %481, ptr %482, align 1, !tbaa !30
  %484 = load i8, ptr %30, align 1, !tbaa !30
  %485 = zext i8 %484 to i32
  %486 = load ptr, ptr %29, align 8, !tbaa !5
  %487 = load i8, ptr %486, align 1, !tbaa !30
  %488 = zext i8 %487 to i32
  %489 = ashr i32 %488, 4
  %490 = and i32 %489, 1
  %491 = mul nsw i32 %485, %490
  %492 = trunc i32 %491 to i8
  %493 = load ptr, ptr %28, align 8, !tbaa !5
  %494 = getelementptr inbounds i8, ptr %493, i32 1
  store ptr %494, ptr %28, align 8, !tbaa !5
  store i8 %492, ptr %493, align 1, !tbaa !30
  %495 = load i8, ptr %30, align 1, !tbaa !30
  %496 = zext i8 %495 to i32
  %497 = load ptr, ptr %29, align 8, !tbaa !5
  %498 = load i8, ptr %497, align 1, !tbaa !30
  %499 = zext i8 %498 to i32
  %500 = ashr i32 %499, 3
  %501 = and i32 %500, 1
  %502 = mul nsw i32 %496, %501
  %503 = trunc i32 %502 to i8
  %504 = load ptr, ptr %28, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i32 1
  store ptr %505, ptr %28, align 8, !tbaa !5
  store i8 %503, ptr %504, align 1, !tbaa !30
  %506 = load i8, ptr %30, align 1, !tbaa !30
  %507 = zext i8 %506 to i32
  %508 = load ptr, ptr %29, align 8, !tbaa !5
  %509 = load i8, ptr %508, align 1, !tbaa !30
  %510 = zext i8 %509 to i32
  %511 = ashr i32 %510, 2
  %512 = and i32 %511, 1
  %513 = mul nsw i32 %507, %512
  %514 = trunc i32 %513 to i8
  %515 = load ptr, ptr %28, align 8, !tbaa !5
  %516 = getelementptr inbounds i8, ptr %515, i32 1
  store ptr %516, ptr %28, align 8, !tbaa !5
  store i8 %514, ptr %515, align 1, !tbaa !30
  %517 = load i8, ptr %30, align 1, !tbaa !30
  %518 = zext i8 %517 to i32
  %519 = load ptr, ptr %29, align 8, !tbaa !5
  %520 = load i8, ptr %519, align 1, !tbaa !30
  %521 = zext i8 %520 to i32
  %522 = ashr i32 %521, 1
  %523 = and i32 %522, 1
  %524 = mul nsw i32 %518, %523
  %525 = trunc i32 %524 to i8
  %526 = load ptr, ptr %28, align 8, !tbaa !5
  %527 = getelementptr inbounds i8, ptr %526, i32 1
  store ptr %527, ptr %28, align 8, !tbaa !5
  store i8 %525, ptr %526, align 1, !tbaa !30
  %528 = load i8, ptr %30, align 1, !tbaa !30
  %529 = zext i8 %528 to i32
  %530 = load ptr, ptr %29, align 8, !tbaa !5
  %531 = load i8, ptr %530, align 1, !tbaa !30
  %532 = zext i8 %531 to i32
  %533 = and i32 %532, 1
  %534 = mul nsw i32 %529, %533
  %535 = trunc i32 %534 to i8
  %536 = load ptr, ptr %28, align 8, !tbaa !5
  %537 = getelementptr inbounds i8, ptr %536, i32 1
  store ptr %537, ptr %28, align 8, !tbaa !5
  store i8 %535, ptr %536, align 1, !tbaa !30
  br label %538

538:                                              ; preds = %451
  %539 = load i32, ptr %18, align 4, !tbaa !9
  %540 = sub nsw i32 %539, 8
  store i32 %540, ptr %18, align 4, !tbaa !9
  %541 = load ptr, ptr %29, align 8, !tbaa !5
  %542 = getelementptr inbounds i8, ptr %541, i32 1
  store ptr %542, ptr %29, align 8, !tbaa !5
  br label %448, !llvm.loop !36

543:                                              ; preds = %448
  %544 = load i32, ptr %18, align 4, !tbaa !9
  %545 = icmp sgt i32 %544, 0
  br i1 %545, label %546, label %557

546:                                              ; preds = %543
  %547 = load i8, ptr %30, align 1, !tbaa !30
  %548 = zext i8 %547 to i32
  %549 = load ptr, ptr %29, align 8, !tbaa !5
  %550 = load i8, ptr %549, align 1, !tbaa !30
  %551 = zext i8 %550 to i32
  %552 = ashr i32 %551, 7
  %553 = mul nsw i32 %548, %552
  %554 = trunc i32 %553 to i8
  %555 = load ptr, ptr %28, align 8, !tbaa !5
  %556 = getelementptr inbounds i8, ptr %555, i32 1
  store ptr %556, ptr %28, align 8, !tbaa !5
  store i8 %554, ptr %555, align 1, !tbaa !30
  br label %557

557:                                              ; preds = %546, %543
  %558 = load i32, ptr %18, align 4, !tbaa !9
  %559 = icmp sgt i32 %558, 1
  br i1 %559, label %560, label %572

560:                                              ; preds = %557
  %561 = load i8, ptr %30, align 1, !tbaa !30
  %562 = zext i8 %561 to i32
  %563 = load ptr, ptr %29, align 8, !tbaa !5
  %564 = load i8, ptr %563, align 1, !tbaa !30
  %565 = zext i8 %564 to i32
  %566 = ashr i32 %565, 6
  %567 = and i32 %566, 1
  %568 = mul nsw i32 %562, %567
  %569 = trunc i32 %568 to i8
  %570 = load ptr, ptr %28, align 8, !tbaa !5
  %571 = getelementptr inbounds i8, ptr %570, i32 1
  store ptr %571, ptr %28, align 8, !tbaa !5
  store i8 %569, ptr %570, align 1, !tbaa !30
  br label %572

572:                                              ; preds = %560, %557
  %573 = load i32, ptr %18, align 4, !tbaa !9
  %574 = icmp sgt i32 %573, 2
  br i1 %574, label %575, label %587

575:                                              ; preds = %572
  %576 = load i8, ptr %30, align 1, !tbaa !30
  %577 = zext i8 %576 to i32
  %578 = load ptr, ptr %29, align 8, !tbaa !5
  %579 = load i8, ptr %578, align 1, !tbaa !30
  %580 = zext i8 %579 to i32
  %581 = ashr i32 %580, 5
  %582 = and i32 %581, 1
  %583 = mul nsw i32 %577, %582
  %584 = trunc i32 %583 to i8
  %585 = load ptr, ptr %28, align 8, !tbaa !5
  %586 = getelementptr inbounds i8, ptr %585, i32 1
  store ptr %586, ptr %28, align 8, !tbaa !5
  store i8 %584, ptr %585, align 1, !tbaa !30
  br label %587

587:                                              ; preds = %575, %572
  %588 = load i32, ptr %18, align 4, !tbaa !9
  %589 = icmp sgt i32 %588, 3
  br i1 %589, label %590, label %602

590:                                              ; preds = %587
  %591 = load i8, ptr %30, align 1, !tbaa !30
  %592 = zext i8 %591 to i32
  %593 = load ptr, ptr %29, align 8, !tbaa !5
  %594 = load i8, ptr %593, align 1, !tbaa !30
  %595 = zext i8 %594 to i32
  %596 = ashr i32 %595, 4
  %597 = and i32 %596, 1
  %598 = mul nsw i32 %592, %597
  %599 = trunc i32 %598 to i8
  %600 = load ptr, ptr %28, align 8, !tbaa !5
  %601 = getelementptr inbounds i8, ptr %600, i32 1
  store ptr %601, ptr %28, align 8, !tbaa !5
  store i8 %599, ptr %600, align 1, !tbaa !30
  br label %602

602:                                              ; preds = %590, %587
  %603 = load i32, ptr %18, align 4, !tbaa !9
  %604 = icmp sgt i32 %603, 4
  br i1 %604, label %605, label %617

605:                                              ; preds = %602
  %606 = load i8, ptr %30, align 1, !tbaa !30
  %607 = zext i8 %606 to i32
  %608 = load ptr, ptr %29, align 8, !tbaa !5
  %609 = load i8, ptr %608, align 1, !tbaa !30
  %610 = zext i8 %609 to i32
  %611 = ashr i32 %610, 3
  %612 = and i32 %611, 1
  %613 = mul nsw i32 %607, %612
  %614 = trunc i32 %613 to i8
  %615 = load ptr, ptr %28, align 8, !tbaa !5
  %616 = getelementptr inbounds i8, ptr %615, i32 1
  store ptr %616, ptr %28, align 8, !tbaa !5
  store i8 %614, ptr %615, align 1, !tbaa !30
  br label %617

617:                                              ; preds = %605, %602
  %618 = load i32, ptr %18, align 4, !tbaa !9
  %619 = icmp sgt i32 %618, 5
  br i1 %619, label %620, label %632

620:                                              ; preds = %617
  %621 = load i8, ptr %30, align 1, !tbaa !30
  %622 = zext i8 %621 to i32
  %623 = load ptr, ptr %29, align 8, !tbaa !5
  %624 = load i8, ptr %623, align 1, !tbaa !30
  %625 = zext i8 %624 to i32
  %626 = ashr i32 %625, 2
  %627 = and i32 %626, 1
  %628 = mul nsw i32 %622, %627
  %629 = trunc i32 %628 to i8
  %630 = load ptr, ptr %28, align 8, !tbaa !5
  %631 = getelementptr inbounds i8, ptr %630, i32 1
  store ptr %631, ptr %28, align 8, !tbaa !5
  store i8 %629, ptr %630, align 1, !tbaa !30
  br label %632

632:                                              ; preds = %620, %617
  %633 = load i32, ptr %18, align 4, !tbaa !9
  %634 = icmp sgt i32 %633, 6
  br i1 %634, label %635, label %647

635:                                              ; preds = %632
  %636 = load i8, ptr %30, align 1, !tbaa !30
  %637 = zext i8 %636 to i32
  %638 = load ptr, ptr %29, align 8, !tbaa !5
  %639 = load i8, ptr %638, align 1, !tbaa !30
  %640 = zext i8 %639 to i32
  %641 = ashr i32 %640, 1
  %642 = and i32 %641, 1
  %643 = mul nsw i32 %637, %642
  %644 = trunc i32 %643 to i8
  %645 = load ptr, ptr %28, align 8, !tbaa !5
  %646 = getelementptr inbounds i8, ptr %645, i32 1
  store ptr %646, ptr %28, align 8, !tbaa !5
  store i8 %644, ptr %645, align 1, !tbaa !30
  br label %647

647:                                              ; preds = %635, %632
  br label %648

648:                                              ; preds = %647, %438
  br label %649

649:                                              ; preds = %648, %437
  br label %650

650:                                              ; preds = %649, %331
  %651 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %652 = load i32, ptr %651, align 4, !tbaa !28
  %653 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %654 = load i32, ptr %653, align 8, !tbaa !27
  %655 = icmp ne i32 %652, %654
  br i1 %655, label %656, label %760

656:                                              ; preds = %650
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %657 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %658 = getelementptr inbounds %"struct.Simd::Array", ptr %657, i32 0, i32 0
  %659 = load ptr, ptr %658, align 8, !tbaa !29
  %660 = load i32, ptr %15, align 4, !tbaa !9
  %661 = load i32, ptr %14, align 4, !tbaa !9
  %662 = mul i32 %660, %661
  %663 = zext i32 %662 to i64
  %664 = getelementptr inbounds i8, ptr %659, i64 %663
  store ptr %664, ptr %28, align 8, !tbaa !5
  %665 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %666 = load i32, ptr %665, align 4, !tbaa !28
  %667 = icmp eq i32 %666, 1
  br i1 %667, label %668, label %696

668:                                              ; preds = %656
  %669 = load i32, ptr %10, align 4, !tbaa !9
  %670 = sub i32 %669, 1
  store i32 %670, ptr %31, align 4, !tbaa !9
  br label %671

671:                                              ; preds = %692, %668
  %672 = load i32, ptr %31, align 4, !tbaa !9
  %673 = icmp sge i32 %672, 0
  br i1 %673, label %674, label %695

674:                                              ; preds = %671
  %675 = load ptr, ptr %28, align 8, !tbaa !5
  %676 = load i32, ptr %31, align 4, !tbaa !9
  %677 = mul nsw i32 %676, 2
  %678 = add nsw i32 %677, 1
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds i8, ptr %675, i64 %679
  store i8 -1, ptr %680, align 1, !tbaa !30
  %681 = load ptr, ptr %28, align 8, !tbaa !5
  %682 = load i32, ptr %31, align 4, !tbaa !9
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds i8, ptr %681, i64 %683
  %685 = load i8, ptr %684, align 1, !tbaa !30
  %686 = load ptr, ptr %28, align 8, !tbaa !5
  %687 = load i32, ptr %31, align 4, !tbaa !9
  %688 = mul nsw i32 %687, 2
  %689 = add nsw i32 %688, 0
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds i8, ptr %686, i64 %690
  store i8 %685, ptr %691, align 1, !tbaa !30
  br label %692

692:                                              ; preds = %674
  %693 = load i32, ptr %31, align 4, !tbaa !9
  %694 = add nsw i32 %693, -1
  store i32 %694, ptr %31, align 4, !tbaa !9
  br label %671, !llvm.loop !37

695:                                              ; preds = %671
  br label %759

696:                                              ; preds = %656
  %697 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 9
  %698 = load i32, ptr %697, align 4, !tbaa !28
  %699 = icmp eq i32 %698, 3
  br i1 %699, label %700, label %701

700:                                              ; preds = %696
  br label %703

701:                                              ; preds = %696
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 1209, ptr noundef @__PRETTY_FUNCTION__._ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj) #6
  unreachable

702:                                              ; No predecessors!
  br label %703

703:                                              ; preds = %702, %700
  %704 = load i32, ptr %10, align 4, !tbaa !9
  %705 = sub i32 %704, 1
  store i32 %705, ptr %31, align 4, !tbaa !9
  br label %706

706:                                              ; preds = %755, %703
  %707 = load i32, ptr %31, align 4, !tbaa !9
  %708 = icmp sge i32 %707, 0
  br i1 %708, label %709, label %758

709:                                              ; preds = %706
  %710 = load ptr, ptr %28, align 8, !tbaa !5
  %711 = load i32, ptr %31, align 4, !tbaa !9
  %712 = mul nsw i32 %711, 4
  %713 = add nsw i32 %712, 3
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds i8, ptr %710, i64 %714
  store i8 -1, ptr %715, align 1, !tbaa !30
  %716 = load ptr, ptr %28, align 8, !tbaa !5
  %717 = load i32, ptr %31, align 4, !tbaa !9
  %718 = mul nsw i32 %717, 3
  %719 = add nsw i32 %718, 2
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds i8, ptr %716, i64 %720
  %722 = load i8, ptr %721, align 1, !tbaa !30
  %723 = load ptr, ptr %28, align 8, !tbaa !5
  %724 = load i32, ptr %31, align 4, !tbaa !9
  %725 = mul nsw i32 %724, 4
  %726 = add nsw i32 %725, 2
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds i8, ptr %723, i64 %727
  store i8 %722, ptr %728, align 1, !tbaa !30
  %729 = load ptr, ptr %28, align 8, !tbaa !5
  %730 = load i32, ptr %31, align 4, !tbaa !9
  %731 = mul nsw i32 %730, 3
  %732 = add nsw i32 %731, 1
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i8, ptr %729, i64 %733
  %735 = load i8, ptr %734, align 1, !tbaa !30
  %736 = load ptr, ptr %28, align 8, !tbaa !5
  %737 = load i32, ptr %31, align 4, !tbaa !9
  %738 = mul nsw i32 %737, 4
  %739 = add nsw i32 %738, 1
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds i8, ptr %736, i64 %740
  store i8 %735, ptr %741, align 1, !tbaa !30
  %742 = load ptr, ptr %28, align 8, !tbaa !5
  %743 = load i32, ptr %31, align 4, !tbaa !9
  %744 = mul nsw i32 %743, 3
  %745 = add nsw i32 %744, 0
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i8, ptr %742, i64 %746
  %748 = load i8, ptr %747, align 1, !tbaa !30
  %749 = load ptr, ptr %28, align 8, !tbaa !5
  %750 = load i32, ptr %31, align 4, !tbaa !9
  %751 = mul nsw i32 %750, 4
  %752 = add nsw i32 %751, 0
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds i8, ptr %749, i64 %753
  store i8 %748, ptr %754, align 1, !tbaa !30
  br label %755

755:                                              ; preds = %709
  %756 = load i32, ptr %31, align 4, !tbaa !9
  %757 = add nsw i32 %756, -1
  store i32 %757, ptr %31, align 4, !tbaa !9
  br label %706, !llvm.loop !38

758:                                              ; preds = %706
  br label %759

759:                                              ; preds = %758, %695
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %760

760:                                              ; preds = %759, %650
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %761

761:                                              ; preds = %760
  %762 = load i32, ptr %14, align 4, !tbaa !9
  %763 = add i32 %762, 1
  store i32 %763, ptr %14, align 4, !tbaa !9
  br label %233, !llvm.loop !39

764:                                              ; preds = %233
  br label %806

765:                                              ; preds = %227
  %766 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 12
  %767 = load i8, ptr %766, align 2, !tbaa !11
  %768 = zext i8 %767 to i32
  %769 = icmp eq i32 %768, 16
  br i1 %769, label %770, label %805

770:                                              ; preds = %765
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %771 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 19
  %772 = getelementptr inbounds %"struct.Simd::Array", ptr %771, i32 0, i32 0
  %773 = load ptr, ptr %772, align 8, !tbaa !29
  store ptr %773, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %774 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %774, ptr %33, align 8, !tbaa !5
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %775

775:                                              ; preds = %797, %770
  %776 = load i32, ptr %13, align 4, !tbaa !9
  %777 = load i32, ptr %10, align 4, !tbaa !9
  %778 = load i32, ptr %11, align 4, !tbaa !9
  %779 = mul i32 %777, %778
  %780 = getelementptr inbounds %"class.Simd::Base::ImagePngLoader", ptr %34, i32 0, i32 10
  %781 = load i32, ptr %780, align 8, !tbaa !27
  %782 = mul i32 %779, %781
  %783 = icmp ult i32 %776, %782
  br i1 %783, label %784, label %804

784:                                              ; preds = %775
  %785 = load ptr, ptr %32, align 8, !tbaa !5
  %786 = getelementptr inbounds i8, ptr %785, i64 0
  %787 = load i8, ptr %786, align 1, !tbaa !30
  %788 = zext i8 %787 to i32
  %789 = shl i32 %788, 8
  %790 = load ptr, ptr %32, align 8, !tbaa !5
  %791 = getelementptr inbounds i8, ptr %790, i64 1
  %792 = load i8, ptr %791, align 1, !tbaa !30
  %793 = zext i8 %792 to i32
  %794 = or i32 %789, %793
  %795 = trunc i32 %794 to i16
  %796 = load ptr, ptr %33, align 8, !tbaa !5
  store i16 %795, ptr %796, align 2, !tbaa !40
  br label %797

797:                                              ; preds = %784
  %798 = load i32, ptr %13, align 4, !tbaa !9
  %799 = add i32 %798, 1
  store i32 %799, ptr %13, align 4, !tbaa !9
  %800 = load ptr, ptr %33, align 8, !tbaa !5
  %801 = getelementptr inbounds i16, ptr %800, i32 1
  store ptr %801, ptr %33, align 8, !tbaa !5
  %802 = load ptr, ptr %32, align 8, !tbaa !5
  %803 = getelementptr inbounds i8, ptr %802, i64 2
  store ptr %803, ptr %32, align 8, !tbaa !5
  br label %775, !llvm.loop !42

804:                                              ; preds = %775
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %805

805:                                              ; preds = %804, %765
  br label %806

806:                                              ; preds = %805, %764
  store i1 true, ptr %6, align 1
  store i32 1, ptr %22, align 4
  br label %807

807:                                              ; preds = %806, %221, %104, %83
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  %808 = load i1, ptr %6, align 1
  ret i1 %808
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd5ArrayIhE5EmptyEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !7, i64 218}
!12 = !{!"_ZTSN4Simd4Base14ImagePngLoaderE", !13, i64 0, !7, i64 120, !6, i64 176, !6, i64 184, !21, i64 192, !21, i64 193, !21, i64 194, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !7, i64 212, !7, i64 218, !7, i64 219, !7, i64 220, !7, i64 221, !7, i64 222, !22, i64 232, !22, i64 248, !22, i64 264, !23, i64 280}
!13 = !{!"_ZTSN4Simd11ImageLoaderE", !14, i64 8, !18, i64 32, !19, i64 72}
!14 = !{!"_ZTSN4Simd16ImageLoaderParamE", !6, i64 0, !15, i64 8, !16, i64 16, !17, i64 20}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTS17SimdImageFileType", !7, i64 0}
!17 = !{!"_ZTS19SimdPixelFormatType", !7, i64 0}
!18 = !{!"_ZTSN4Simd17InputMemoryStreamE", !6, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!19 = !{!"_ZTSN4Simd4ViewINS_9AllocatorEEE", !15, i64 0, !15, i64 8, !15, i64 16, !20, i64 24, !6, i64 32, !21, i64 40}
!20 = !{!"_ZTSN4Simd4ViewINS_9AllocatorEE6FormatE", !7, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{!"_ZTSN4Simd5ArrayIhEE", !6, i64 0, !15, i64 8}
!23 = !{!"_ZTSSt6vectorIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!12, !10, i64 208}
!28 = !{!12, !10, i64 204}
!29 = !{!12, !6, i64 264}
!30 = !{!7, !7, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!12, !7, i64 219}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = distinct !{!39, !32}
!40 = !{!41, !41, i64 0}
!41 = !{!"short", !7, i64 0}
!42 = distinct !{!42, !32}


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

@_ZN4Simd4BaseL15DepthScaleTableE = external hidden local_unnamed_addr constant [9 x i8], align 1
@_ZZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjjE14FirstRowFilter = external hidden local_unnamed_addr constant [5 x i8], align 1
@.str = external hidden unnamed_addr constant [45 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [82 x i8], align 1
@__PRETTY_FUNCTION__._ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj = external hidden unnamed_addr constant [95 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIhE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj(ptr noundef nonnull align 8 dereferenceable(304) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #1 align 2 {
  %6 = getelementptr inbounds i8, ptr %0, i64 218
  %7 = load i8, ptr %6, align 2, !tbaa !5
  %8 = icmp eq i8 %7, 16
  %9 = getelementptr inbounds i8, ptr %0, i64 208
  %10 = load i32, ptr %9, align 8, !tbaa !25
  %11 = mul i32 %10, %3
  %12 = zext i1 %8 to i32
  %13 = shl i32 %11, %12
  %14 = shl i32 %10, %12
  %15 = getelementptr inbounds i8, ptr %0, i64 204
  %16 = load i32, ptr %15, align 4, !tbaa !26
  %17 = shl i32 %16, %12
  %18 = icmp eq i32 %10, %16
  %19 = add i32 %16, 1
  %20 = icmp eq i32 %10, %19
  %or.cond = or i1 %18, %20
  br i1 %or.cond, label %.critedge, label %21

21:                                               ; preds = %5
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1103, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj) #4
  unreachable

.critedge:                                        ; preds = %5
  %22 = getelementptr inbounds i8, ptr %0, i64 264
  %23 = mul i32 %4, %3
  %24 = mul i32 %14, %23
  %25 = zext i32 %24 to i64
  tail call void @_ZN4Simd5ArrayIhE6ResizeEmbm(ptr noundef nonnull align 8 dereferenceable(16) %22, i64 noundef %25, i1 noundef zeroext false, i64 noundef 8)
  %26 = tail call noundef zeroext i1 @_ZNK4Simd5ArrayIhE5EmptyEv(ptr noundef nonnull align 8 dereferenceable(16) %22)
  br i1 %26, label %27, label %30

27:                                               ; preds = %.critedge
  %28 = tail call noundef i32 @_ZN4Simd4Base12PngLoadErrorEPKcS2_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3)
  %29 = icmp ne i32 %28, 0
  br label %.thread

30:                                               ; preds = %.critedge
  %31 = load i32, ptr %15, align 4
  %32 = mul i32 %31, %3
  %33 = load i8, ptr %6, align 2, !tbaa !5
  %34 = zext i8 %33 to i32
  %35 = mul i32 %32, %34
  %.fr340 = freeze i32 %35
  %36 = add i32 %.fr340, 7
  %37 = lshr i32 %36, 3
  %38 = add nuw nsw i32 %37, 1
  %39 = mul i32 %38, %4
  %40 = icmp ugt i32 %39, %2
  br i1 %40, label %108, label %.preheader292

.preheader292:                                    ; preds = %30
  %.not338 = icmp eq i32 %4, 0
  br i1 %.not338, label %._crit_edge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader292
  %41 = icmp ugt i32 %37, %3
  %42 = zext i32 %13 to i64
  %43 = sub nsw i64 0, %42
  %44 = getelementptr inbounds i8, ptr %0, i64 120
  br i1 %41, label %.lr.ph.split.us, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %wide.trip.count = zext i32 %4 to i64
  %45 = getelementptr inbounds i8, ptr %1, i64 1
  %46 = load i8, ptr %1, align 1, !tbaa !27
  %47 = icmp ugt i8 %46, 4
  br i1 %47, label %.split.us, label %48

48:                                               ; preds = %.lr.ph.split.preheader
  %49 = load ptr, ptr %22, align 8, !tbaa !28
  %50 = icmp ult i8 %33, 8
  %51 = load i32, ptr %9, align 8
  %52 = mul i32 %51, %3
  %53 = sub i32 %52, %37
  %54 = zext i32 %53 to i64
  %55 = select i1 %50, i32 %37, i32 %3
  %56 = select i1 %50, i32 1, i32 %17
  %.0208.idx.peel = select i1 %50, i64 %54, i64 0
  %.0208.peel = getelementptr inbounds i8, ptr %49, i64 %.0208.idx.peel
  %57 = zext nneg i8 %46 to i64
  %58 = getelementptr inbounds [5 x i8], ptr @_ZZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjjE14FirstRowFilter, i64 0, i64 %57
  %59 = load i8, ptr %58, align 1, !tbaa !27
  %60 = icmp eq i32 %31, %51
  %.1211.peel = select i1 %60, i32 %17, i32 %14
  %61 = select i1 %50, i32 1, i32 %.1211.peel
  %62 = zext i8 %59 to i64
  %63 = getelementptr inbounds [7 x ptr], ptr %44, i64 0, i64 %62
  %64 = load ptr, ptr %63, align 8, !tbaa !29
  %65 = getelementptr inbounds i8, ptr %.0208.peel, i64 %43
  tail call void %64(ptr noundef nonnull %45, ptr noundef %65, i32 noundef %55, i32 noundef %56, i32 noundef %61, ptr noundef %.0208.peel)
  %exitcond.peel.not = icmp eq i32 %4, 1
  br i1 %exitcond.peel.not, label %._crit_edge, label %.lr.ph.split.peel.next

.lr.ph.split.peel.next:                           ; preds = %48
  %66 = mul nsw i32 %55, %56
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds i8, ptr %45, i64 %67
  br label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph
  %69 = mul nsw i32 %17, %3
  %70 = sext i32 %69 to i64
  %wide.trip.count360 = zext i32 %4 to i64
  %71 = load ptr, ptr %22, align 8, !tbaa !28
  %72 = getelementptr inbounds i8, ptr %1, i64 1
  %73 = load i8, ptr %1, align 1, !tbaa !27
  %74 = icmp ugt i8 %73, 4
  br i1 %74, label %.split.us, label %75

75:                                               ; preds = %.lr.ph.split.us
  %76 = icmp ult i8 %33, 8
  br i1 %76, label %.split298.us, label %77

77:                                               ; preds = %75
  %78 = zext nneg i8 %73 to i64
  %79 = getelementptr inbounds [5 x i8], ptr @_ZZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjjE14FirstRowFilter, i64 0, i64 %78
  %80 = load i8, ptr %79, align 1, !tbaa !27
  %81 = load i32, ptr %9, align 8
  %82 = icmp eq i32 %31, %81
  %83 = select i1 %82, i32 %17, i32 %14
  %84 = zext i8 %80 to i64
  %85 = getelementptr inbounds [7 x ptr], ptr %44, i64 0, i64 %84
  %86 = load ptr, ptr %85, align 8, !tbaa !29
  %87 = getelementptr inbounds i8, ptr %71, i64 %43
  tail call void %86(ptr noundef nonnull %72, ptr noundef %87, i32 noundef %3, i32 noundef %17, i32 noundef %83, ptr noundef %71)
  %exitcond361.peel.not = icmp eq i32 %4, 1
  br i1 %exitcond361.peel.not, label %._crit_edge, label %.peel.next

.peel.next:                                       ; preds = %77, %._crit_edge378
  %indvars.iv357 = phi i64 [ %indvars.iv.next358, %._crit_edge378 ], [ 1, %77 ]
  %88 = phi ptr [ %.0202296.us, %._crit_edge378 ], [ %1, %77 ]
  %89 = getelementptr inbounds i8, ptr %88, i64 1
  %.0202296.us = getelementptr inbounds i8, ptr %89, i64 %70
  %90 = load ptr, ptr %22, align 8, !tbaa !28
  %91 = trunc nuw i64 %indvars.iv357 to i32
  %92 = mul i32 %13, %91
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds i8, ptr %90, i64 %93
  %95 = getelementptr inbounds i8, ptr %.0202296.us, i64 1
  %96 = load i8, ptr %.0202296.us, align 1, !tbaa !27
  %97 = icmp ugt i8 %96, 4
  br i1 %97, label %.split.us, label %98

98:                                               ; preds = %.peel.next
  %99 = load i8, ptr %6, align 2, !tbaa !5
  %100 = icmp ult i8 %99, 8
  br i1 %100, label %.split298.us, label %._crit_edge378

._crit_edge378:                                   ; preds = %98
  %.pre = zext nneg i8 %96 to i64
  %101 = load i32, ptr %15, align 4
  %102 = load i32, ptr %9, align 8
  %103 = icmp eq i32 %101, %102
  %104 = select i1 %103, i32 %17, i32 %14
  %105 = getelementptr inbounds [7 x ptr], ptr %44, i64 0, i64 %.pre
  %106 = load ptr, ptr %105, align 8, !tbaa !29
  %107 = getelementptr inbounds i8, ptr %94, i64 %43
  tail call void %106(ptr noundef nonnull %95, ptr noundef %107, i32 noundef %3, i32 noundef %17, i32 noundef %104, ptr noundef %94)
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %exitcond361.not = icmp eq i64 %indvars.iv.next358, %wide.trip.count360
  br i1 %exitcond361.not, label %._crit_edge, label %.peel.next, !llvm.loop !30

108:                                              ; preds = %30
  %109 = tail call noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef nonnull @.str.4)
  %110 = icmp ne i32 %109, 0
  br label %.thread

.lr.ph.split:                                     ; preds = %.lr.ph.split.peel.next, %117
  %indvars.iv = phi i64 [ 1, %.lr.ph.split.peel.next ], [ %indvars.iv.next, %117 ]
  %.0202296 = phi ptr [ %68, %.lr.ph.split.peel.next ], [ %141, %117 ]
  %.0210294 = phi i32 [ %56, %.lr.ph.split.peel.next ], [ %131, %117 ]
  %.0216293 = phi i32 [ %55, %.lr.ph.split.peel.next ], [ %130, %117 ]
  %111 = load i8, ptr %.0202296, align 1, !tbaa !27
  %112 = icmp ugt i8 %111, 4
  br i1 %112, label %.split.us, label %117

.split.us:                                        ; preds = %.lr.ph.split, %.peel.next, %.lr.ph.split.preheader, %.lr.ph.split.us
  %113 = tail call noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef nonnull @.str.5)
  %114 = icmp ne i32 %113, 0
  br label %.thread

.split298.us:                                     ; preds = %98, %75
  %115 = tail call noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef nonnull @.str.6)
  %116 = icmp ne i32 %115, 0
  br label %.thread

117:                                              ; preds = %.lr.ph.split
  %118 = getelementptr inbounds i8, ptr %.0202296, i64 1
  %119 = load ptr, ptr %22, align 8, !tbaa !28
  %120 = trunc nuw i64 %indvars.iv to i32
  %121 = mul i32 %13, %120
  %122 = zext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %119, i64 %122
  %124 = load i8, ptr %6, align 2, !tbaa !5
  %125 = icmp ult i8 %124, 8
  %126 = load i32, ptr %9, align 8
  %127 = mul i32 %126, %3
  %128 = sub i32 %127, %37
  %129 = zext i32 %128 to i64
  %130 = select i1 %125, i32 %37, i32 %.0216293
  %131 = select i1 %125, i32 1, i32 %.0210294
  %.0208.idx = select i1 %125, i64 %129, i64 0
  %.0208 = getelementptr inbounds i8, ptr %123, i64 %.0208.idx
  %.pre379 = zext nneg i8 %111 to i64
  %132 = load i32, ptr %15, align 4
  %133 = icmp eq i32 %132, %126
  %.1217 = select i1 %133, i32 %.0216293, i32 %3
  %134 = select i1 %125, i32 %37, i32 %.1217
  %.1211 = select i1 %133, i32 %.0210294, i32 %14
  %135 = select i1 %125, i32 1, i32 %.1211
  %136 = getelementptr inbounds [7 x ptr], ptr %44, i64 0, i64 %.pre379
  %137 = load ptr, ptr %136, align 8, !tbaa !29
  %138 = getelementptr inbounds i8, ptr %.0208, i64 %43
  tail call void %137(ptr noundef nonnull %118, ptr noundef %138, i32 noundef %134, i32 noundef %131, i32 noundef %135, ptr noundef %.0208)
  %139 = mul nsw i32 %134, %131
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i8, ptr %118, i64 %140
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph.split, !llvm.loop !33

._crit_edge:                                      ; preds = %117, %._crit_edge378, %48, %77
  %142 = load i8, ptr %6, align 2, !tbaa !5
  %143 = icmp ult i8 %142, 8
  br i1 %143, label %.preheader290, label %359

._crit_edge.thread:                               ; preds = %.preheader292
  %144 = load i8, ptr %6, align 2, !tbaa !5
  %145 = icmp ult i8 %144, 8
  br i1 %145, label %.thread, label %359

.preheader290:                                    ; preds = %._crit_edge
  br i1 %.not338, label %.thread, label %.lr.ph337

.lr.ph337:                                        ; preds = %.preheader290
  %146 = zext nneg i32 %37 to i64
  %147 = sub nsw i64 0, %146
  %148 = getelementptr inbounds i8, ptr %0, i64 219
  %.1330 = add i32 %3, -1
  %149 = icmp sgt i32 %.1330, -1
  %150 = zext i32 %.1330 to i64
  %wide.trip.count373 = zext i32 %4 to i64
  %151 = and i64 %150, 1
  %lcmp.mod418.not.not = icmp eq i64 %151, 0
  %152 = shl nuw nsw i64 %150, 1
  %153 = or disjoint i64 %152, 1
  %indvars.iv.next368.prol = add nsw i64 %150, -1
  %154 = icmp eq i32 %.1330, 0
  br label %155

155:                                              ; preds = %.lr.ph337, %.loopexit
  %indvars.iv370 = phi i64 [ 0, %.lr.ph337 ], [ %indvars.iv.next371, %.loopexit ]
  %156 = load ptr, ptr %22, align 8, !tbaa !28
  %157 = trunc nuw i64 %indvars.iv370 to i32
  %158 = mul i32 %13, %157
  %159 = zext i32 %158 to i64
  %160 = getelementptr inbounds i8, ptr %156, i64 %159
  %161 = load i32, ptr %9, align 8, !tbaa !25
  %162 = mul i32 %161, %3
  %163 = zext i32 %162 to i64
  %164 = getelementptr inbounds i8, ptr %160, i64 %163
  %165 = getelementptr inbounds i8, ptr %164, i64 %147
  %166 = load i8, ptr %148, align 1, !tbaa !34
  %167 = icmp eq i8 %166, 0
  %168 = load i8, ptr %6, align 2, !tbaa !5
  br i1 %167, label %169, label %thread-pre-split

169:                                              ; preds = %155
  %170 = zext i8 %168 to i64
  %171 = getelementptr inbounds [9 x i8], ptr @_ZN4Simd4BaseL15DepthScaleTableE, i64 0, i64 %170
  %172 = load i8, ptr %171, align 1, !tbaa !27
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %155, %169
  %173 = phi i8 [ %172, %169 ], [ 1, %155 ]
  switch i8 %168, label %.thread265 [
    i8 4, label %174
    i8 2, label %217
    i8 1, label %260
  ]

174:                                              ; preds = %thread-pre-split
  %175 = load i32, ptr %15, align 4, !tbaa !26
  %176 = mul i32 %175, %3
  %177 = icmp sgt i32 %176, 1
  br i1 %177, label %.lr.ph325.preheader, label %._crit_edge326

.lr.ph325.preheader:                              ; preds = %174
  %178 = add nsw i32 %176, -2
  %179 = and i32 %178, 2
  %lcmp.mod.not.not = icmp eq i32 %179, 0
  br i1 %lcmp.mod.not.not, label %.lr.ph325.prol, label %.lr.ph325.prol.loopexit

.lr.ph325.prol:                                   ; preds = %.lr.ph325.preheader
  %180 = load i8, ptr %165, align 1, !tbaa !27
  %181 = lshr i8 %180, 4
  %182 = mul i8 %181, %173
  %183 = getelementptr inbounds i8, ptr %160, i64 1
  store i8 %182, ptr %160, align 1, !tbaa !27
  %184 = load i8, ptr %165, align 1, !tbaa !27
  %185 = and i8 %184, 15
  %186 = mul i8 %185, %173
  %187 = getelementptr inbounds i8, ptr %160, i64 2
  store i8 %186, ptr %183, align 1, !tbaa !27
  %188 = add nsw i32 %176, -2
  %189 = getelementptr inbounds i8, ptr %165, i64 1
  br label %.lr.ph325.prol.loopexit

.lr.ph325.prol.loopexit:                          ; preds = %.lr.ph325.prol, %.lr.ph325.preheader
  %.0196323.unr = phi ptr [ %165, %.lr.ph325.preheader ], [ %189, %.lr.ph325.prol ]
  %.0199322.unr = phi ptr [ %160, %.lr.ph325.preheader ], [ %187, %.lr.ph325.prol ]
  %.0213321.unr = phi i32 [ %176, %.lr.ph325.preheader ], [ %188, %.lr.ph325.prol ]
  %.lcssa414.unr = phi ptr [ poison, %.lr.ph325.preheader ], [ %187, %.lr.ph325.prol ]
  %.lcssa413.unr = phi i32 [ poison, %.lr.ph325.preheader ], [ %188, %.lr.ph325.prol ]
  %.lcssa412.unr = phi ptr [ poison, %.lr.ph325.preheader ], [ %189, %.lr.ph325.prol ]
  %190 = icmp ult i32 %178, 2
  br i1 %190, label %._crit_edge326, label %.lr.ph325

.lr.ph325:                                        ; preds = %.lr.ph325.prol.loopexit, %.lr.ph325
  %.0196323 = phi ptr [ %209, %.lr.ph325 ], [ %.0196323.unr, %.lr.ph325.prol.loopexit ]
  %.0199322 = phi ptr [ %207, %.lr.ph325 ], [ %.0199322.unr, %.lr.ph325.prol.loopexit ]
  %.0213321 = phi i32 [ %208, %.lr.ph325 ], [ %.0213321.unr, %.lr.ph325.prol.loopexit ]
  %191 = load i8, ptr %.0196323, align 1, !tbaa !27
  %192 = lshr i8 %191, 4
  %193 = mul i8 %192, %173
  %194 = getelementptr inbounds i8, ptr %.0199322, i64 1
  store i8 %193, ptr %.0199322, align 1, !tbaa !27
  %195 = load i8, ptr %.0196323, align 1, !tbaa !27
  %196 = and i8 %195, 15
  %197 = mul i8 %196, %173
  %198 = getelementptr inbounds i8, ptr %.0199322, i64 2
  store i8 %197, ptr %194, align 1, !tbaa !27
  %199 = getelementptr inbounds i8, ptr %.0196323, i64 1
  %200 = load i8, ptr %199, align 1, !tbaa !27
  %201 = lshr i8 %200, 4
  %202 = mul i8 %201, %173
  %203 = getelementptr inbounds i8, ptr %.0199322, i64 3
  store i8 %202, ptr %198, align 1, !tbaa !27
  %204 = load i8, ptr %199, align 1, !tbaa !27
  %205 = and i8 %204, 15
  %206 = mul i8 %205, %173
  %207 = getelementptr inbounds i8, ptr %.0199322, i64 4
  store i8 %206, ptr %203, align 1, !tbaa !27
  %208 = add nsw i32 %.0213321, -4
  %209 = getelementptr inbounds i8, ptr %.0196323, i64 2
  %210 = add i32 %.0213321, -6
  %211 = icmp ult i32 %210, -4
  br i1 %211, label %.lr.ph325, label %._crit_edge326, !llvm.loop !35

._crit_edge326:                                   ; preds = %.lr.ph325.prol.loopexit, %.lr.ph325, %174
  %.0213.lcssa = phi i32 [ %176, %174 ], [ %.lcssa413.unr, %.lr.ph325.prol.loopexit ], [ %208, %.lr.ph325 ]
  %.0199.lcssa = phi ptr [ %160, %174 ], [ %.lcssa414.unr, %.lr.ph325.prol.loopexit ], [ %207, %.lr.ph325 ]
  %.0196.lcssa = phi ptr [ %165, %174 ], [ %.lcssa412.unr, %.lr.ph325.prol.loopexit ], [ %209, %.lr.ph325 ]
  %212 = icmp eq i32 %.0213.lcssa, 1
  br i1 %212, label %213, label %.thread265

213:                                              ; preds = %._crit_edge326
  %214 = load i8, ptr %.0196.lcssa, align 1, !tbaa !27
  %215 = lshr i8 %214, 4
  %216 = mul i8 %215, %173
  store i8 %216, ptr %.0199.lcssa, align 1, !tbaa !27
  br label %.thread265

217:                                              ; preds = %thread-pre-split
  %218 = load i32, ptr %15, align 4, !tbaa !26
  %219 = mul i32 %218, %3
  %220 = icmp sgt i32 %219, 3
  br i1 %220, label %.lr.ph316, label %._crit_edge317

.lr.ph316:                                        ; preds = %217, %.lr.ph316
  %.1197314 = phi ptr [ %240, %.lr.ph316 ], [ %165, %217 ]
  %.1200313 = phi ptr [ %238, %.lr.ph316 ], [ %160, %217 ]
  %.1214312 = phi i32 [ %239, %.lr.ph316 ], [ %219, %217 ]
  %221 = load i8, ptr %.1197314, align 1, !tbaa !27
  %222 = lshr i8 %221, 6
  %223 = mul i8 %222, %173
  %224 = getelementptr inbounds i8, ptr %.1200313, i64 1
  store i8 %223, ptr %.1200313, align 1, !tbaa !27
  %225 = load i8, ptr %.1197314, align 1, !tbaa !27
  %226 = lshr i8 %225, 4
  %227 = and i8 %226, 3
  %228 = mul i8 %227, %173
  %229 = getelementptr inbounds i8, ptr %.1200313, i64 2
  store i8 %228, ptr %224, align 1, !tbaa !27
  %230 = load i8, ptr %.1197314, align 1, !tbaa !27
  %231 = lshr i8 %230, 2
  %232 = and i8 %231, 3
  %233 = mul i8 %232, %173
  %234 = getelementptr inbounds i8, ptr %.1200313, i64 3
  store i8 %233, ptr %229, align 1, !tbaa !27
  %235 = load i8, ptr %.1197314, align 1, !tbaa !27
  %236 = and i8 %235, 3
  %237 = mul i8 %236, %173
  %238 = getelementptr inbounds i8, ptr %.1200313, i64 4
  store i8 %237, ptr %234, align 1, !tbaa !27
  %239 = add nsw i32 %.1214312, -4
  %240 = getelementptr inbounds i8, ptr %.1197314, i64 1
  %241 = icmp ugt i32 %.1214312, 7
  br i1 %241, label %.lr.ph316, label %._crit_edge317, !llvm.loop !36

._crit_edge317:                                   ; preds = %.lr.ph316, %217
  %.1214.lcssa = phi i32 [ %219, %217 ], [ %239, %.lr.ph316 ]
  %.1200.lcssa = phi ptr [ %160, %217 ], [ %238, %.lr.ph316 ]
  %.1197.lcssa = phi ptr [ %165, %217 ], [ %240, %.lr.ph316 ]
  %242 = icmp sgt i32 %.1214.lcssa, 0
  br i1 %242, label %243, label %.thread265

243:                                              ; preds = %._crit_edge317
  %244 = load i8, ptr %.1197.lcssa, align 1, !tbaa !27
  %245 = lshr i8 %244, 6
  %246 = mul i8 %245, %173
  store i8 %246, ptr %.1200.lcssa, align 1, !tbaa !27
  %.not287 = icmp eq i32 %.1214.lcssa, 1
  br i1 %.not287, label %.thread265, label %247

247:                                              ; preds = %243
  %248 = getelementptr inbounds i8, ptr %.1200.lcssa, i64 1
  %249 = load i8, ptr %.1197.lcssa, align 1, !tbaa !27
  %250 = lshr i8 %249, 4
  %251 = and i8 %250, 3
  %252 = mul i8 %251, %173
  store i8 %252, ptr %248, align 1, !tbaa !27
  %253 = icmp eq i32 %.1214.lcssa, 3
  br i1 %253, label %254, label %.thread265

254:                                              ; preds = %247
  %255 = getelementptr inbounds i8, ptr %.1200.lcssa, i64 2
  %256 = load i8, ptr %.1197.lcssa, align 1, !tbaa !27
  %257 = lshr i8 %256, 2
  %258 = and i8 %257, 3
  %259 = mul i8 %258, %173
  store i8 %259, ptr %255, align 1, !tbaa !27
  br label %.thread265

260:                                              ; preds = %thread-pre-split
  %261 = load i32, ptr %15, align 4, !tbaa !26
  %262 = mul i32 %261, %3
  %263 = icmp sgt i32 %262, 7
  br i1 %263, label %.lr.ph308, label %._crit_edge309

.lr.ph308:                                        ; preds = %260, %.lr.ph308
  %.2198306 = phi ptr [ %288, %.lr.ph308 ], [ %165, %260 ]
  %.4305 = phi ptr [ %286, %.lr.ph308 ], [ %160, %260 ]
  %.2215304 = phi i32 [ %287, %.lr.ph308 ], [ %262, %260 ]
  %264 = load i8, ptr %.2198306, align 1, !tbaa !27
  %isneg240 = icmp slt i8 %264, 0
  %narrow239 = select i1 %isneg240, i8 %173, i8 0
  %265 = getelementptr inbounds i8, ptr %.4305, i64 1
  store i8 %narrow239, ptr %.4305, align 1, !tbaa !27
  %266 = load i8, ptr %.2198306, align 1, !tbaa !27
  %267 = and i8 %266, 64
  %.not242 = icmp eq i8 %267, 0
  %narrow241 = select i1 %.not242, i8 0, i8 %173
  %268 = getelementptr inbounds i8, ptr %.4305, i64 2
  store i8 %narrow241, ptr %265, align 1, !tbaa !27
  %269 = load i8, ptr %.2198306, align 1, !tbaa !27
  %270 = and i8 %269, 32
  %.not244 = icmp eq i8 %270, 0
  %narrow243 = select i1 %.not244, i8 0, i8 %173
  %271 = getelementptr inbounds i8, ptr %.4305, i64 3
  store i8 %narrow243, ptr %268, align 1, !tbaa !27
  %272 = load i8, ptr %.2198306, align 1, !tbaa !27
  %273 = and i8 %272, 16
  %.not246 = icmp eq i8 %273, 0
  %narrow245 = select i1 %.not246, i8 0, i8 %173
  %274 = getelementptr inbounds i8, ptr %.4305, i64 4
  store i8 %narrow245, ptr %271, align 1, !tbaa !27
  %275 = load i8, ptr %.2198306, align 1, !tbaa !27
  %276 = and i8 %275, 8
  %.not248 = icmp eq i8 %276, 0
  %narrow247 = select i1 %.not248, i8 0, i8 %173
  %277 = getelementptr inbounds i8, ptr %.4305, i64 5
  store i8 %narrow247, ptr %274, align 1, !tbaa !27
  %278 = load i8, ptr %.2198306, align 1, !tbaa !27
  %279 = and i8 %278, 4
  %.not250 = icmp eq i8 %279, 0
  %narrow249 = select i1 %.not250, i8 0, i8 %173
  %280 = getelementptr inbounds i8, ptr %.4305, i64 6
  store i8 %narrow249, ptr %277, align 1, !tbaa !27
  %281 = load i8, ptr %.2198306, align 1, !tbaa !27
  %282 = and i8 %281, 2
  %.not252 = icmp eq i8 %282, 0
  %narrow251 = select i1 %.not252, i8 0, i8 %173
  %283 = getelementptr inbounds i8, ptr %.4305, i64 7
  store i8 %narrow251, ptr %280, align 1, !tbaa !27
  %284 = load i8, ptr %.2198306, align 1, !tbaa !27
  %285 = trunc i8 %284 to i1
  %narrow253 = select i1 %285, i8 %173, i8 0
  %286 = getelementptr inbounds i8, ptr %.4305, i64 8
  store i8 %narrow253, ptr %283, align 1, !tbaa !27
  %287 = add nsw i32 %.2215304, -8
  %288 = getelementptr inbounds i8, ptr %.2198306, i64 1
  %289 = icmp ugt i32 %.2215304, 15
  br i1 %289, label %.lr.ph308, label %._crit_edge309, !llvm.loop !37

._crit_edge309:                                   ; preds = %.lr.ph308, %260
  %.2215.lcssa = phi i32 [ %262, %260 ], [ %287, %.lr.ph308 ]
  %.4.lcssa = phi ptr [ %160, %260 ], [ %286, %.lr.ph308 ]
  %.2198.lcssa = phi ptr [ %165, %260 ], [ %288, %.lr.ph308 ]
  %290 = icmp sgt i32 %.2215.lcssa, 0
  br i1 %290, label %291, label %.thread265

291:                                              ; preds = %._crit_edge309
  %292 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %isneg = icmp slt i8 %292, 0
  %narrow = select i1 %isneg, i8 %173, i8 0
  store i8 %narrow, ptr %.4.lcssa, align 1, !tbaa !27
  %.not284 = icmp eq i32 %.2215.lcssa, 1
  br i1 %.not284, label %.thread265, label %293

293:                                              ; preds = %291
  %294 = getelementptr inbounds i8, ptr %.4.lcssa, i64 1
  %295 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %296 = and i8 %295, 64
  %.not = icmp eq i8 %296, 0
  %narrow228 = select i1 %.not, i8 0, i8 %173
  store i8 %narrow228, ptr %294, align 1, !tbaa !27
  %297 = icmp ugt i32 %.2215.lcssa, 2
  br i1 %297, label %298, label %.thread265

298:                                              ; preds = %293
  %299 = getelementptr inbounds i8, ptr %.4.lcssa, i64 2
  %300 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %301 = and i8 %300, 32
  %.not230 = icmp eq i8 %301, 0
  %narrow229 = select i1 %.not230, i8 0, i8 %173
  store i8 %narrow229, ptr %299, align 1, !tbaa !27
  %.not285 = icmp eq i32 %.2215.lcssa, 3
  br i1 %.not285, label %.thread265, label %302

302:                                              ; preds = %298
  %303 = getelementptr inbounds i8, ptr %.4.lcssa, i64 3
  %304 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %305 = and i8 %304, 16
  %.not232 = icmp eq i8 %305, 0
  %narrow231 = select i1 %.not232, i8 0, i8 %173
  store i8 %narrow231, ptr %303, align 1, !tbaa !27
  %306 = icmp ugt i32 %.2215.lcssa, 4
  br i1 %306, label %307, label %.thread265

307:                                              ; preds = %302
  %308 = getelementptr inbounds i8, ptr %.4.lcssa, i64 4
  %309 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %310 = and i8 %309, 8
  %.not234 = icmp eq i8 %310, 0
  %narrow233 = select i1 %.not234, i8 0, i8 %173
  store i8 %narrow233, ptr %308, align 1, !tbaa !27
  %.not286 = icmp eq i32 %.2215.lcssa, 5
  br i1 %.not286, label %.thread265, label %311

311:                                              ; preds = %307
  %312 = getelementptr inbounds i8, ptr %.4.lcssa, i64 5
  %313 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %314 = and i8 %313, 4
  %.not236 = icmp eq i8 %314, 0
  %narrow235 = select i1 %.not236, i8 0, i8 %173
  store i8 %narrow235, ptr %312, align 1, !tbaa !27
  %315 = icmp eq i32 %.2215.lcssa, 7
  br i1 %315, label %316, label %.thread265

316:                                              ; preds = %311
  %317 = getelementptr inbounds i8, ptr %.4.lcssa, i64 6
  %318 = load i8, ptr %.2198.lcssa, align 1, !tbaa !27
  %319 = and i8 %318, 2
  %.not238 = icmp eq i8 %319, 0
  %narrow237 = select i1 %.not238, i8 0, i8 %173
  store i8 %narrow237, ptr %317, align 1, !tbaa !27
  br label %.thread265

.thread265:                                       ; preds = %._crit_edge309, %291, %293, %298, %302, %307, %._crit_edge317, %243, %thread-pre-split, %254, %247, %311, %316, %._crit_edge326, %213
  %320 = load i32, ptr %15, align 4, !tbaa !26
  %321 = load i32, ptr %9, align 8, !tbaa !25
  %.not254 = icmp eq i32 %320, %321
  br i1 %.not254, label %.loopexit, label %322

322:                                              ; preds = %.thread265
  %323 = load ptr, ptr %22, align 8, !tbaa !28
  %324 = getelementptr inbounds i8, ptr %323, i64 %159
  switch i32 %320, label %342 [
    i32 1, label %.preheader
    i32 3, label %.preheader288
  ]

.preheader288:                                    ; preds = %322
  br i1 %149, label %.lr.ph332, label %.loopexit

.preheader:                                       ; preds = %322
  br i1 %149, label %.lr.ph335.preheader, label %.loopexit

.lr.ph335.preheader:                              ; preds = %.preheader
  br i1 %lcmp.mod418.not.not, label %.lr.ph335.prol, label %.lr.ph335.prol.loopexit

.lr.ph335.prol:                                   ; preds = %.lr.ph335.preheader
  %325 = getelementptr inbounds i8, ptr %324, i64 %153
  store i8 -1, ptr %325, align 1, !tbaa !27
  %326 = getelementptr inbounds i8, ptr %324, i64 %150
  %327 = load i8, ptr %326, align 1, !tbaa !27
  %328 = getelementptr inbounds i8, ptr %324, i64 %152
  store i8 %327, ptr %328, align 1, !tbaa !27
  br label %.lr.ph335.prol.loopexit

.lr.ph335.prol.loopexit:                          ; preds = %.lr.ph335.prol, %.lr.ph335.preheader
  %indvars.iv367.unr = phi i64 [ %150, %.lr.ph335.preheader ], [ %indvars.iv.next368.prol, %.lr.ph335.prol ]
  br i1 %154, label %.loopexit, label %.lr.ph335

.lr.ph335:                                        ; preds = %.lr.ph335.prol.loopexit, %.lr.ph335
  %indvars.iv367 = phi i64 [ %indvars.iv.next368.1, %.lr.ph335 ], [ %indvars.iv367.unr, %.lr.ph335.prol.loopexit ]
  %329 = shl nuw nsw i64 %indvars.iv367, 1
  %330 = or disjoint i64 %329, 1
  %331 = getelementptr inbounds i8, ptr %324, i64 %330
  store i8 -1, ptr %331, align 1, !tbaa !27
  %332 = getelementptr inbounds i8, ptr %324, i64 %indvars.iv367
  %333 = load i8, ptr %332, align 1, !tbaa !27
  %334 = getelementptr inbounds i8, ptr %324, i64 %329
  store i8 %333, ptr %334, align 1, !tbaa !27
  %indvars.iv.next368 = add nsw i64 %indvars.iv367, -1
  %335 = shl nuw nsw i64 %indvars.iv.next368, 1
  %336 = or disjoint i64 %335, 1
  %337 = getelementptr inbounds i8, ptr %324, i64 %336
  store i8 -1, ptr %337, align 1, !tbaa !27
  %338 = getelementptr inbounds i8, ptr %324, i64 %indvars.iv.next368
  %339 = load i8, ptr %338, align 1, !tbaa !27
  %340 = getelementptr inbounds i8, ptr %324, i64 %335
  store i8 %339, ptr %340, align 1, !tbaa !27
  %indvars.iv.next368.1 = add nsw i64 %indvars.iv367, -2
  %341 = icmp sgt i64 %indvars.iv367, 1
  br i1 %341, label %.lr.ph335, label %.loopexit, !llvm.loop !38

342:                                              ; preds = %322
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 1209, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN4Simd4Base14ImagePngLoader14CreateImageRawEPKhjjj) #4
  unreachable

.lr.ph332:                                        ; preds = %.preheader288, %.lr.ph332
  %indvars.iv364 = phi i64 [ %indvars.iv.next365, %.lr.ph332 ], [ %150, %.preheader288 ]
  %343 = shl nsw i64 %indvars.iv364, 2
  %344 = or disjoint i64 %343, 3
  %345 = getelementptr inbounds i8, ptr %324, i64 %344
  store i8 -1, ptr %345, align 1, !tbaa !27
  %346 = mul nuw nsw i64 %indvars.iv364, 3
  %347 = getelementptr inbounds i8, ptr %324, i64 %346
  %348 = getelementptr inbounds i8, ptr %347, i64 2
  %349 = load i8, ptr %348, align 1, !tbaa !27
  %350 = or disjoint i64 %343, 2
  %351 = getelementptr inbounds i8, ptr %324, i64 %350
  store i8 %349, ptr %351, align 1, !tbaa !27
  %352 = getelementptr inbounds i8, ptr %347, i64 1
  %353 = load i8, ptr %352, align 1, !tbaa !27
  %354 = or disjoint i64 %343, 1
  %355 = getelementptr inbounds i8, ptr %324, i64 %354
  store i8 %353, ptr %355, align 1, !tbaa !27
  %356 = load i8, ptr %347, align 1, !tbaa !27
  %357 = getelementptr inbounds i8, ptr %324, i64 %343
  store i8 %356, ptr %357, align 1, !tbaa !27
  %indvars.iv.next365 = add nsw i64 %indvars.iv364, -1
  %358 = icmp sgt i64 %indvars.iv364, 0
  br i1 %358, label %.lr.ph332, label %.loopexit, !llvm.loop !39

.loopexit:                                        ; preds = %.lr.ph332, %.lr.ph335.prol.loopexit, %.lr.ph335, %.preheader288, %.preheader, %.thread265
  %indvars.iv.next371 = add nuw nsw i64 %indvars.iv370, 1
  %exitcond374.not = icmp eq i64 %indvars.iv.next371, %wide.trip.count373
  br i1 %exitcond374.not, label %.thread, label %155, !llvm.loop !40

359:                                              ; preds = %._crit_edge.thread, %._crit_edge
  %360 = phi i8 [ %144, %._crit_edge.thread ], [ %142, %._crit_edge ]
  %361 = icmp eq i8 %360, 16
  br i1 %361, label %362, label %.thread

362:                                              ; preds = %359
  %363 = load i32, ptr %9, align 8, !tbaa !25
  %364 = mul i32 %363, %23
  %.not341 = icmp eq i32 %364, 0
  br i1 %.not341, label %.thread, label %.lr.ph303.preheader

.lr.ph303.preheader:                              ; preds = %362
  %365 = load ptr, ptr %22, align 8, !tbaa !28
  %xtraiter419 = and i32 %364, 3
  %366 = icmp ult i32 %364, 4
  br i1 %366, label %.thread.loopexit.unr-lcssa, label %.lr.ph303.preheader.new

.lr.ph303.preheader.new:                          ; preds = %.lr.ph303.preheader
  %unroll_iter = and i32 %364, -4
  br label %.lr.ph303

.lr.ph303:                                        ; preds = %.lr.ph303, %.lr.ph303.preheader.new
  %.0301 = phi ptr [ %365, %.lr.ph303.preheader.new ], [ %398, %.lr.ph303 ]
  %niter = phi i32 [ 0, %.lr.ph303.preheader.new ], [ %niter.next.3, %.lr.ph303 ]
  %367 = load i8, ptr %.0301, align 1, !tbaa !27
  %368 = zext i8 %367 to i16
  %369 = shl nuw i16 %368, 8
  %370 = getelementptr inbounds i8, ptr %.0301, i64 1
  %371 = load i8, ptr %370, align 1, !tbaa !27
  %372 = zext i8 %371 to i16
  %373 = or disjoint i16 %369, %372
  store i16 %373, ptr %.0301, align 2, !tbaa !41
  %374 = getelementptr i8, ptr %.0301, i64 2
  %375 = load i8, ptr %374, align 1, !tbaa !27
  %376 = zext i8 %375 to i16
  %377 = shl nuw i16 %376, 8
  %378 = getelementptr i8, ptr %.0301, i64 3
  %379 = load i8, ptr %378, align 1, !tbaa !27
  %380 = zext i8 %379 to i16
  %381 = or disjoint i16 %377, %380
  store i16 %381, ptr %374, align 2, !tbaa !41
  %382 = getelementptr i8, ptr %.0301, i64 4
  %383 = load i8, ptr %382, align 1, !tbaa !27
  %384 = zext i8 %383 to i16
  %385 = shl nuw i16 %384, 8
  %386 = getelementptr i8, ptr %.0301, i64 5
  %387 = load i8, ptr %386, align 1, !tbaa !27
  %388 = zext i8 %387 to i16
  %389 = or disjoint i16 %385, %388
  store i16 %389, ptr %382, align 2, !tbaa !41
  %390 = getelementptr i8, ptr %.0301, i64 6
  %391 = load i8, ptr %390, align 1, !tbaa !27
  %392 = zext i8 %391 to i16
  %393 = shl nuw i16 %392, 8
  %394 = getelementptr i8, ptr %.0301, i64 7
  %395 = load i8, ptr %394, align 1, !tbaa !27
  %396 = zext i8 %395 to i16
  %397 = or disjoint i16 %393, %396
  store i16 %397, ptr %390, align 2, !tbaa !41
  %398 = getelementptr i8, ptr %.0301, i64 8
  %niter.next.3 = add i32 %niter, 4
  %niter.ncmp.3 = icmp eq i32 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.thread.loopexit.unr-lcssa, label %.lr.ph303, !llvm.loop !43

.thread.loopexit.unr-lcssa:                       ; preds = %.lr.ph303, %.lr.ph303.preheader
  %.0301.unr = phi ptr [ %365, %.lr.ph303.preheader ], [ %398, %.lr.ph303 ]
  %lcmp.mod420.not = icmp eq i32 %xtraiter419, 0
  br i1 %lcmp.mod420.not, label %.thread, label %.lr.ph303.epil

.lr.ph303.epil:                                   ; preds = %.thread.loopexit.unr-lcssa, %.lr.ph303.epil
  %.0301.epil = phi ptr [ %406, %.lr.ph303.epil ], [ %.0301.unr, %.thread.loopexit.unr-lcssa ]
  %epil.iter = phi i32 [ %epil.iter.next, %.lr.ph303.epil ], [ 0, %.thread.loopexit.unr-lcssa ]
  %399 = load i8, ptr %.0301.epil, align 1, !tbaa !27
  %400 = zext i8 %399 to i16
  %401 = shl nuw i16 %400, 8
  %402 = getelementptr inbounds i8, ptr %.0301.epil, i64 1
  %403 = load i8, ptr %402, align 1, !tbaa !27
  %404 = zext i8 %403 to i16
  %405 = or disjoint i16 %401, %404
  store i16 %405, ptr %.0301.epil, align 2, !tbaa !41
  %406 = getelementptr i8, ptr %.0301.epil, i64 2
  %epil.iter.next = add i32 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i32 %epil.iter.next, %xtraiter419
  br i1 %epil.iter.cmp.not, label %.thread, label %.lr.ph303.epil, !llvm.loop !44

.thread:                                          ; preds = %.loopexit, %.thread.loopexit.unr-lcssa, %.lr.ph303.epil, %._crit_edge.thread, %362, %.preheader290, %.split298.us, %.split.us, %359, %108, %27
  %.2 = phi i1 [ %29, %27 ], [ %110, %108 ], [ true, %359 ], [ %116, %.split298.us ], [ %114, %.split.us ], [ true, %.preheader290 ], [ true, %362 ], [ true, %._crit_edge.thread ], [ true, %.lr.ph303.epil ], [ true, %.thread.loopexit.unr-lcssa ], [ true, %.loopexit ]
  ret i1 %.2
}

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK4Simd5ArrayIhE5EmptyEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef i32 @_ZN4Simd4Base12PngLoadErrorEPKcS2_(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef i32 @_ZN4Simd4Base15CorruptPngErrorEPKc(ptr noundef) local_unnamed_addr #0

attributes #0 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 = { noreturn 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 #3 = { alwaysinline 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 #4 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 218}
!6 = !{!"_ZTSN4Simd4Base14ImagePngLoaderE", !7, i64 0, !10, i64 120, !9, i64 176, !9, i64 184, !18, i64 192, !18, i64 193, !18, i64 194, !19, i64 196, !19, i64 200, !19, i64 204, !19, i64 208, !10, i64 212, !10, i64 218, !10, i64 219, !10, i64 220, !10, i64 221, !10, i64 222, !20, i64 232, !20, i64 248, !20, i64 264, !21, i64 280}
!7 = !{!"_ZTSN4Simd11ImageLoaderE", !8, i64 8, !15, i64 32, !16, i64 72}
!8 = !{!"_ZTSN4Simd16ImageLoaderParamE", !9, i64 0, !12, i64 8, !13, i64 16, !14, i64 20}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"_ZTS17SimdImageFileType", !10, i64 0}
!14 = !{!"_ZTS19SimdPixelFormatType", !10, i64 0}
!15 = !{!"_ZTSN4Simd17InputMemoryStreamE", !9, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32}
!16 = !{!"_ZTSN4Simd4ViewINS_9AllocatorEEE", !12, i64 0, !12, i64 8, !12, i64 16, !17, i64 24, !9, i64 32, !18, i64 40}
!17 = !{!"_ZTSN4Simd4ViewINS_9AllocatorEE6FormatE", !10, i64 0}
!18 = !{!"bool", !10, i64 0}
!19 = !{!"int", !10, i64 0}
!20 = !{!"_ZTSN4Simd5ArrayIhEE", !9, i64 0, !12, i64 8}
!21 = !{!"_ZTSSt6vectorIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN4Simd4Base14ImagePngLoader5ChunkESaIS3_EE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!25 = !{!6, !19, i64 208}
!26 = !{!6, !19, i64 204}
!27 = !{!10, !10, i64 0}
!28 = !{!6, !9, i64 264}
!29 = !{!9, !9, i64 0}
!30 = distinct !{!30, !31, !32}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!"llvm.loop.peeled.count", i32 1}
!33 = distinct !{!33, !31, !32}
!34 = !{!6, !10, i64 219}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}
!40 = distinct !{!40, !31}
!41 = !{!42, !42, i64 0}
!42 = !{!"short", !10, i64 0}
!43 = distinct !{!43, !31}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.unroll.disable"}


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