; LLVM IR from jingweizhanghuai/Morn :: src/wrap (morn_stb_image)

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

%struct.__va_list_tag = type { i32, i32, ptr, ptr }
%struct.MImage = type { i32, i32, i32, [4 x ptr], ptr }

@.str.9 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [1 x i8], align 1
@morn_data_type = external thread_local global i32, align 4
@.str.12 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1
@__FUNCTION__.mImageSave = external hidden unnamed_addr constant [11 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #0

; Function Attrs: nounwind
declare void @free(ptr noundef) #1

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

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

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

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

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.va_start.p0(ptr) #5

; Function Attrs: nounwind
declare i32 @vsprintf(ptr noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.va_end.p0(ptr) #5

declare void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) #6

; Function Attrs: nounwind uwtable
define dso_local void @mImageSave(ptr noundef %0, ptr noundef %1, ...) #4 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca [256 x i8], align 16
  %6 = alloca [1 x %struct.__va_list_tag], align 16
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #8
  %25 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %6, i64 0, i64 0
  call void @llvm.va_start.p0(ptr %25)
  %26 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %27 = load ptr, ptr %4, align 8, !tbaa !5
  %28 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %6, i64 0, i64 0
  %29 = call i32 @vsprintf(ptr noundef %26, ptr noundef %27, ptr noundef %28) #8
  %30 = getelementptr inbounds [1 x %struct.__va_list_tag], ptr %6, i64 0, i64 0
  call void @llvm.va_end.p0(ptr %30)
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %31 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %32 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %33 = call i64 @strlen(ptr noundef %32) #9
  %34 = getelementptr inbounds i8, ptr %31, i64 %33
  store ptr %34, ptr %7, align 8, !tbaa !5
  br label %35

35:                                               ; preds = %45, %2
  %36 = load ptr, ptr %7, align 8, !tbaa !5
  %37 = load i8, ptr %36, align 1, !tbaa !9
  %38 = sext i8 %37 to i32
  %39 = icmp ne i32 %38, 46
  br i1 %39, label %40, label %48

40:                                               ; preds = %35
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %43 = icmp eq ptr %41, %42
  br i1 %43, label %44, label %45

44:                                               ; preds = %40
  br label %48

45:                                               ; preds = %40
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %46, i32 -1
  store ptr %47, ptr %7, align 8, !tbaa !5
  br label %35, !llvm.loop !10

48:                                               ; preds = %44, %35
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store i32 -1, ptr %8, align 4, !tbaa !12
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %49, i64 1
  %51 = call i32 @strcasecmp(ptr noundef %50, ptr noundef @.str.13) #9
  %52 = icmp eq i32 %51, 0
  br i1 %52, label %53, label %54

53:                                               ; preds = %48
  store i32 1, ptr %8, align 4, !tbaa !12
  br label %68

54:                                               ; preds = %48
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds i8, ptr %55, i64 1
  %57 = call i32 @strcasecmp(ptr noundef %56, ptr noundef @.str.14) #9
  %58 = icmp eq i32 %57, 0
  br i1 %58, label %59, label %60

59:                                               ; preds = %54
  store i32 1, ptr %8, align 4, !tbaa !12
  br label %67

60:                                               ; preds = %54
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %61, i64 1
  %63 = call i32 @strcasecmp(ptr noundef %62, ptr noundef @.str.15) #9
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %60
  store i32 2, ptr %8, align 4, !tbaa !12
  br label %66

66:                                               ; preds = %65, %60
  br label %67

67:                                               ; preds = %66, %59
  br label %68

68:                                               ; preds = %67, %53
  %69 = load i32, ptr %8, align 4, !tbaa !12
  %70 = icmp eq i32 %69, -1
  br i1 %70, label %71, label %74

71:                                               ; preds = %68
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  call void @mBMPSave(ptr noundef %72, ptr noundef %73)
  store i32 1, ptr %9, align 4
  br label %855

74:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.MImage, ptr %75, i32 0, i32 0
  %77 = load i32, ptr %76, align 8, !tbaa !14
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.MImage, ptr %78, i32 0, i32 2
  %80 = load i32, ptr %79, align 8, !tbaa !16
  %81 = mul nsw i32 %77, %80
  %82 = load ptr, ptr %3, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.MImage, ptr %82, i32 0, i32 1
  %84 = load i32, ptr %83, align 4, !tbaa !17
  %85 = mul nsw i32 %81, %84
  %86 = sext i32 %85 to i64
  %87 = call noalias ptr @malloc(i64 noundef %86) #10
  store ptr %87, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  store i32 -1, ptr %11, align 4, !tbaa !12
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  %89 = call ptr @m_PropertyRead(ptr noundef %88, ptr noundef @.str.16, ptr noundef %11, ptr noundef null)
  br label %90

90:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %91 = load i32, ptr %11, align 4, !tbaa !12
  %92 = icmp ne i32 %91, 1
  br i1 %92, label %93, label %99

93:                                               ; preds = %90
  %94 = load i32, ptr %11, align 4, !tbaa !12
  %95 = icmp ne i32 %94, 3
  br i1 %95, label %96, label %99

96:                                               ; preds = %93
  %97 = load i32, ptr %11, align 4, !tbaa !12
  %98 = icmp ne i32 %97, 4
  br label %99

99:                                               ; preds = %96, %93, %90
  %100 = phi i1 [ false, %93 ], [ false, %90 ], [ %98, %96 ]
  %101 = zext i1 %100 to i32
  store i32 %101, ptr %12, align 4, !tbaa !12
  %102 = load i32, ptr %12, align 4, !tbaa !12
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %104, label %106

104:                                              ; preds = %99
  %105 = load i32, ptr %12, align 4, !tbaa !12
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %105, i32 noundef -1, ptr noundef @.str.9, i32 noundef 46, ptr noundef @__FUNCTION__.mImageSave, ptr noundef @.str.17)
  br label %106

106:                                              ; preds = %104, %99
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  br label %107

107:                                              ; preds = %106
  br label %108

108:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %109 = load ptr, ptr %3, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.MImage, ptr %109, i32 0, i32 0
  %111 = load i32, ptr %110, align 8, !tbaa !14
  %112 = icmp sge i32 %111, 3
  br i1 %112, label %113, label %129

113:                                              ; preds = %108
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.MImage, ptr %114, i32 0, i32 3
  %116 = getelementptr inbounds [4 x ptr], ptr %115, i64 0, i64 0
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  store ptr %117, ptr %13, align 8, !tbaa !5
  %118 = load ptr, ptr %3, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.MImage, ptr %118, i32 0, i32 3
  %120 = getelementptr inbounds [4 x ptr], ptr %119, i64 0, i64 2
  %121 = load ptr, ptr %120, align 8, !tbaa !5
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.MImage, ptr %122, i32 0, i32 3
  %124 = getelementptr inbounds [4 x ptr], ptr %123, i64 0, i64 0
  store ptr %121, ptr %124, align 8, !tbaa !5
  %125 = load ptr, ptr %13, align 8, !tbaa !5
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.MImage, ptr %126, i32 0, i32 3
  %128 = getelementptr inbounds [4 x ptr], ptr %127, i64 0, i64 2
  store ptr %125, ptr %128, align 8, !tbaa !5
  br label %129

129:                                              ; preds = %113, %108
  br label %130

130:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  %131 = load i8, ptr @.str.11, align 1, !tbaa !9
  %132 = sext i8 %131 to i32
  %133 = icmp ne i32 %132, 0
  %134 = zext i1 %133 to i32
  store i32 %134, ptr %14, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store i64 0, ptr %15, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store i64 -1, ptr %16, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  store i64 -1, ptr %17, align 8, !tbaa !18
  %135 = load i32, ptr %14, align 4, !tbaa !12
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %211

137:                                              ; preds = %130
  br label %138

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %139 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %139, align 4, !tbaa !12
  store i32 0, ptr %18, align 4, !tbaa !12
  %140 = load i32, ptr %18, align 4, !tbaa !12
  %141 = icmp eq i32 %140, 0
  br i1 %141, label %142, label %145

142:                                              ; preds = %138
  %143 = load ptr, ptr %3, align 8, !tbaa !5
  %144 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputU8(ptr noundef %143, ptr noundef %144, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %208

145:                                              ; preds = %138
  %146 = load i32, ptr %18, align 4, !tbaa !12
  %147 = icmp eq i32 %146, 1
  br i1 %147, label %148, label %151

148:                                              ; preds = %145
  %149 = load ptr, ptr %3, align 8, !tbaa !5
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputS8(ptr noundef %149, ptr noundef %150, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %207

151:                                              ; preds = %145
  %152 = load i32, ptr %18, align 4, !tbaa !12
  %153 = icmp eq i32 %152, 2
  br i1 %153, label %154, label %157

154:                                              ; preds = %151
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputU16(ptr noundef %155, ptr noundef %156, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %206

157:                                              ; preds = %151
  %158 = load i32, ptr %18, align 4, !tbaa !12
  %159 = icmp eq i32 %158, 3
  br i1 %159, label %160, label %163

160:                                              ; preds = %157
  %161 = load ptr, ptr %3, align 8, !tbaa !5
  %162 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputS16(ptr noundef %161, ptr noundef %162, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %205

163:                                              ; preds = %157
  %164 = load i32, ptr %18, align 4, !tbaa !12
  %165 = icmp eq i32 %164, 4
  br i1 %165, label %166, label %169

166:                                              ; preds = %163
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputU32(ptr noundef %167, ptr noundef %168, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %204

169:                                              ; preds = %163
  %170 = load i32, ptr %18, align 4, !tbaa !12
  %171 = icmp eq i32 %170, 5
  br i1 %171, label %172, label %175

172:                                              ; preds = %169
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputS32(ptr noundef %173, ptr noundef %174, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %203

175:                                              ; preds = %169
  %176 = load i32, ptr %18, align 4, !tbaa !12
  %177 = icmp eq i32 %176, 8
  br i1 %177, label %178, label %181

178:                                              ; preds = %175
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputF32(ptr noundef %179, ptr noundef %180, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %202

181:                                              ; preds = %175
  %182 = load i32, ptr %18, align 4, !tbaa !12
  %183 = icmp eq i32 %182, 7
  br i1 %183, label %184, label %187

184:                                              ; preds = %181
  %185 = load ptr, ptr %3, align 8, !tbaa !5
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputS64(ptr noundef %185, ptr noundef %186, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %201

187:                                              ; preds = %181
  %188 = load i32, ptr %18, align 4, !tbaa !12
  %189 = icmp eq i32 %188, 6
  br i1 %189, label %190, label %193

190:                                              ; preds = %187
  %191 = load ptr, ptr %3, align 8, !tbaa !5
  %192 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputU64(ptr noundef %191, ptr noundef %192, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %200

193:                                              ; preds = %187
  %194 = load i32, ptr %18, align 4, !tbaa !12
  %195 = icmp eq i32 %194, 9
  br i1 %195, label %196, label %199

196:                                              ; preds = %193
  %197 = load ptr, ptr %3, align 8, !tbaa !5
  %198 = load ptr, ptr %10, align 8, !tbaa !5
  call void @mImageDataOutputD64(ptr noundef %197, ptr noundef %198, i32 noundef -1, ptr noundef null, ptr noundef null)
  br label %199

199:                                              ; preds = %196, %193
  br label %200

200:                                              ; preds = %199, %190
  br label %201

201:                                              ; preds = %200, %184
  br label %202

202:                                              ; preds = %201, %178
  br label %203

203:                                              ; preds = %202, %172
  br label %204

204:                                              ; preds = %203, %166
  br label %205

205:                                              ; preds = %204, %160
  br label %206

206:                                              ; preds = %205, %154
  br label %207

207:                                              ; preds = %206, %148
  br label %208

208:                                              ; preds = %207, %142
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %209

209:                                              ; preds = %208
  br label %210

210:                                              ; preds = %209
  br label %790

211:                                              ; preds = %130
  %212 = load i32, ptr %14, align 4, !tbaa !12
  %213 = icmp eq i32 %212, 1
  br i1 %213, label %214, label %406

214:                                              ; preds = %211
  %215 = load i64, ptr %15, align 8, !tbaa !18
  %216 = icmp slt i64 %215, 6
  br i1 %216, label %217, label %311

217:                                              ; preds = %214
  br label %218

218:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  %219 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %219, align 4, !tbaa !12
  store i32 0, ptr %19, align 4, !tbaa !12
  %220 = load i32, ptr %19, align 4, !tbaa !12
  %221 = icmp eq i32 %220, 0
  br i1 %221, label %222, label %227

222:                                              ; preds = %218
  %223 = load ptr, ptr %3, align 8, !tbaa !5
  %224 = load ptr, ptr %10, align 8, !tbaa !5
  %225 = load i64, ptr %15, align 8, !tbaa !18
  %226 = trunc i64 %225 to i32
  call void @mImageDataOutputU8(ptr noundef %223, ptr noundef %224, i32 noundef %226, ptr noundef null, ptr noundef null)
  br label %308

227:                                              ; preds = %218
  %228 = load i32, ptr %19, align 4, !tbaa !12
  %229 = icmp eq i32 %228, 1
  br i1 %229, label %230, label %235

230:                                              ; preds = %227
  %231 = load ptr, ptr %3, align 8, !tbaa !5
  %232 = load ptr, ptr %10, align 8, !tbaa !5
  %233 = load i64, ptr %15, align 8, !tbaa !18
  %234 = trunc i64 %233 to i32
  call void @mImageDataOutputS8(ptr noundef %231, ptr noundef %232, i32 noundef %234, ptr noundef null, ptr noundef null)
  br label %307

235:                                              ; preds = %227
  %236 = load i32, ptr %19, align 4, !tbaa !12
  %237 = icmp eq i32 %236, 2
  br i1 %237, label %238, label %243

238:                                              ; preds = %235
  %239 = load ptr, ptr %3, align 8, !tbaa !5
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = load i64, ptr %15, align 8, !tbaa !18
  %242 = trunc i64 %241 to i32
  call void @mImageDataOutputU16(ptr noundef %239, ptr noundef %240, i32 noundef %242, ptr noundef null, ptr noundef null)
  br label %306

243:                                              ; preds = %235
  %244 = load i32, ptr %19, align 4, !tbaa !12
  %245 = icmp eq i32 %244, 3
  br i1 %245, label %246, label %251

246:                                              ; preds = %243
  %247 = load ptr, ptr %3, align 8, !tbaa !5
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = load i64, ptr %15, align 8, !tbaa !18
  %250 = trunc i64 %249 to i32
  call void @mImageDataOutputS16(ptr noundef %247, ptr noundef %248, i32 noundef %250, ptr noundef null, ptr noundef null)
  br label %305

251:                                              ; preds = %243
  %252 = load i32, ptr %19, align 4, !tbaa !12
  %253 = icmp eq i32 %252, 4
  br i1 %253, label %254, label %259

254:                                              ; preds = %251
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = load ptr, ptr %10, align 8, !tbaa !5
  %257 = load i64, ptr %15, align 8, !tbaa !18
  %258 = trunc i64 %257 to i32
  call void @mImageDataOutputU32(ptr noundef %255, ptr noundef %256, i32 noundef %258, ptr noundef null, ptr noundef null)
  br label %304

259:                                              ; preds = %251
  %260 = load i32, ptr %19, align 4, !tbaa !12
  %261 = icmp eq i32 %260, 5
  br i1 %261, label %262, label %267

262:                                              ; preds = %259
  %263 = load ptr, ptr %3, align 8, !tbaa !5
  %264 = load ptr, ptr %10, align 8, !tbaa !5
  %265 = load i64, ptr %15, align 8, !tbaa !18
  %266 = trunc i64 %265 to i32
  call void @mImageDataOutputS32(ptr noundef %263, ptr noundef %264, i32 noundef %266, ptr noundef null, ptr noundef null)
  br label %303

267:                                              ; preds = %259
  %268 = load i32, ptr %19, align 4, !tbaa !12
  %269 = icmp eq i32 %268, 8
  br i1 %269, label %270, label %275

270:                                              ; preds = %267
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = load ptr, ptr %10, align 8, !tbaa !5
  %273 = load i64, ptr %15, align 8, !tbaa !18
  %274 = trunc i64 %273 to i32
  call void @mImageDataOutputF32(ptr noundef %271, ptr noundef %272, i32 noundef %274, ptr noundef null, ptr noundef null)
  br label %302

275:                                              ; preds = %267
  %276 = load i32, ptr %19, align 4, !tbaa !12
  %277 = icmp eq i32 %276, 7
  br i1 %277, label %278, label %283

278:                                              ; preds = %275
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = load ptr, ptr %10, align 8, !tbaa !5
  %281 = load i64, ptr %15, align 8, !tbaa !18
  %282 = trunc i64 %281 to i32
  call void @mImageDataOutputS64(ptr noundef %279, ptr noundef %280, i32 noundef %282, ptr noundef null, ptr noundef null)
  br label %301

283:                                              ; preds = %275
  %284 = load i32, ptr %19, align 4, !tbaa !12
  %285 = icmp eq i32 %284, 6
  br i1 %285, label %286, label %291

286:                                              ; preds = %283
  %287 = load ptr, ptr %3, align 8, !tbaa !5
  %288 = load ptr, ptr %10, align 8, !tbaa !5
  %289 = load i64, ptr %15, align 8, !tbaa !18
  %290 = trunc i64 %289 to i32
  call void @mImageDataOutputU64(ptr noundef %287, ptr noundef %288, i32 noundef %290, ptr noundef null, ptr noundef null)
  br label %300

291:                                              ; preds = %283
  %292 = load i32, ptr %19, align 4, !tbaa !12
  %293 = icmp eq i32 %292, 9
  br i1 %293, label %294, label %299

294:                                              ; preds = %291
  %295 = load ptr, ptr %3, align 8, !tbaa !5
  %296 = load ptr, ptr %10, align 8, !tbaa !5
  %297 = load i64, ptr %15, align 8, !tbaa !18
  %298 = trunc i64 %297 to i32
  call void @mImageDataOutputD64(ptr noundef %295, ptr noundef %296, i32 noundef %298, ptr noundef null, ptr noundef null)
  br label %299

299:                                              ; preds = %294, %291
  br label %300

300:                                              ; preds = %299, %286
  br label %301

301:                                              ; preds = %300, %278
  br label %302

302:                                              ; preds = %301, %270
  br label %303

303:                                              ; preds = %302, %262
  br label %304

304:                                              ; preds = %303, %254
  br label %305

305:                                              ; preds = %304, %246
  br label %306

306:                                              ; preds = %305, %238
  br label %307

307:                                              ; preds = %306, %230
  br label %308

308:                                              ; preds = %307, %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %309

309:                                              ; preds = %308
  br label %310

310:                                              ; preds = %309
  br label %405

311:                                              ; preds = %214
  br label %312

312:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %313 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %313, align 4, !tbaa !12
  store i32 0, ptr %20, align 4, !tbaa !12
  %314 = load i32, ptr %20, align 4, !tbaa !12
  %315 = icmp eq i32 %314, 0
  br i1 %315, label %316, label %321

316:                                              ; preds = %312
  %317 = load ptr, ptr %3, align 8, !tbaa !5
  %318 = load ptr, ptr %10, align 8, !tbaa !5
  %319 = load i64, ptr %15, align 8, !tbaa !18
  %320 = inttoptr i64 %319 to ptr
  call void @mImageDataOutputU8(ptr noundef %317, ptr noundef %318, i32 noundef -1, ptr noundef %320, ptr noundef null)
  br label %402

321:                                              ; preds = %312
  %322 = load i32, ptr %20, align 4, !tbaa !12
  %323 = icmp eq i32 %322, 1
  br i1 %323, label %324, label %329

324:                                              ; preds = %321
  %325 = load ptr, ptr %3, align 8, !tbaa !5
  %326 = load ptr, ptr %10, align 8, !tbaa !5
  %327 = load i64, ptr %15, align 8, !tbaa !18
  %328 = inttoptr i64 %327 to ptr
  call void @mImageDataOutputS8(ptr noundef %325, ptr noundef %326, i32 noundef -1, ptr noundef %328, ptr noundef null)
  br label %401

329:                                              ; preds = %321
  %330 = load i32, ptr %20, align 4, !tbaa !12
  %331 = icmp eq i32 %330, 2
  br i1 %331, label %332, label %337

332:                                              ; preds = %329
  %333 = load ptr, ptr %3, align 8, !tbaa !5
  %334 = load ptr, ptr %10, align 8, !tbaa !5
  %335 = load i64, ptr %15, align 8, !tbaa !18
  %336 = inttoptr i64 %335 to ptr
  call void @mImageDataOutputU16(ptr noundef %333, ptr noundef %334, i32 noundef -1, ptr noundef %336, ptr noundef null)
  br label %400

337:                                              ; preds = %329
  %338 = load i32, ptr %20, align 4, !tbaa !12
  %339 = icmp eq i32 %338, 3
  br i1 %339, label %340, label %345

340:                                              ; preds = %337
  %341 = load ptr, ptr %3, align 8, !tbaa !5
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  %343 = load i64, ptr %15, align 8, !tbaa !18
  %344 = inttoptr i64 %343 to ptr
  call void @mImageDataOutputS16(ptr noundef %341, ptr noundef %342, i32 noundef -1, ptr noundef %344, ptr noundef null)
  br label %399

345:                                              ; preds = %337
  %346 = load i32, ptr %20, align 4, !tbaa !12
  %347 = icmp eq i32 %346, 4
  br i1 %347, label %348, label %353

348:                                              ; preds = %345
  %349 = load ptr, ptr %3, align 8, !tbaa !5
  %350 = load ptr, ptr %10, align 8, !tbaa !5
  %351 = load i64, ptr %15, align 8, !tbaa !18
  %352 = inttoptr i64 %351 to ptr
  call void @mImageDataOutputU32(ptr noundef %349, ptr noundef %350, i32 noundef -1, ptr noundef %352, ptr noundef null)
  br label %398

353:                                              ; preds = %345
  %354 = load i32, ptr %20, align 4, !tbaa !12
  %355 = icmp eq i32 %354, 5
  br i1 %355, label %356, label %361

356:                                              ; preds = %353
  %357 = load ptr, ptr %3, align 8, !tbaa !5
  %358 = load ptr, ptr %10, align 8, !tbaa !5
  %359 = load i64, ptr %15, align 8, !tbaa !18
  %360 = inttoptr i64 %359 to ptr
  call void @mImageDataOutputS32(ptr noundef %357, ptr noundef %358, i32 noundef -1, ptr noundef %360, ptr noundef null)
  br label %397

361:                                              ; preds = %353
  %362 = load i32, ptr %20, align 4, !tbaa !12
  %363 = icmp eq i32 %362, 8
  br i1 %363, label %364, label %369

364:                                              ; preds = %361
  %365 = load ptr, ptr %3, align 8, !tbaa !5
  %366 = load ptr, ptr %10, align 8, !tbaa !5
  %367 = load i64, ptr %15, align 8, !tbaa !18
  %368 = inttoptr i64 %367 to ptr
  call void @mImageDataOutputF32(ptr noundef %365, ptr noundef %366, i32 noundef -1, ptr noundef %368, ptr noundef null)
  br label %396

369:                                              ; preds = %361
  %370 = load i32, ptr %20, align 4, !tbaa !12
  %371 = icmp eq i32 %370, 7
  br i1 %371, label %372, label %377

372:                                              ; preds = %369
  %373 = load ptr, ptr %3, align 8, !tbaa !5
  %374 = load ptr, ptr %10, align 8, !tbaa !5
  %375 = load i64, ptr %15, align 8, !tbaa !18
  %376 = inttoptr i64 %375 to ptr
  call void @mImageDataOutputS64(ptr noundef %373, ptr noundef %374, i32 noundef -1, ptr noundef %376, ptr noundef null)
  br label %395

377:                                              ; preds = %369
  %378 = load i32, ptr %20, align 4, !tbaa !12
  %379 = icmp eq i32 %378, 6
  br i1 %379, label %380, label %385

380:                                              ; preds = %377
  %381 = load ptr, ptr %3, align 8, !tbaa !5
  %382 = load ptr, ptr %10, align 8, !tbaa !5
  %383 = load i64, ptr %15, align 8, !tbaa !18
  %384 = inttoptr i64 %383 to ptr
  call void @mImageDataOutputU64(ptr noundef %381, ptr noundef %382, i32 noundef -1, ptr noundef %384, ptr noundef null)
  br label %394

385:                                              ; preds = %377
  %386 = load i32, ptr %20, align 4, !tbaa !12
  %387 = icmp eq i32 %386, 9
  br i1 %387, label %388, label %393

388:                                              ; preds = %385
  %389 = load ptr, ptr %3, align 8, !tbaa !5
  %390 = load ptr, ptr %10, align 8, !tbaa !5
  %391 = load i64, ptr %15, align 8, !tbaa !18
  %392 = inttoptr i64 %391 to ptr
  call void @mImageDataOutputD64(ptr noundef %389, ptr noundef %390, i32 noundef -1, ptr noundef %392, ptr noundef null)
  br label %393

393:                                              ; preds = %388, %385
  br label %394

394:                                              ; preds = %393, %380
  br label %395

395:                                              ; preds = %394, %372
  br label %396

396:                                              ; preds = %395, %364
  br label %397

397:                                              ; preds = %396, %356
  br label %398

398:                                              ; preds = %397, %348
  br label %399

399:                                              ; preds = %398, %340
  br label %400

400:                                              ; preds = %399, %332
  br label %401

401:                                              ; preds = %400, %324
  br label %402

402:                                              ; preds = %401, %316
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %403

403:                                              ; preds = %402
  br label %404

404:                                              ; preds = %403
  br label %405

405:                                              ; preds = %404, %310
  br label %789

406:                                              ; preds = %211
  %407 = load i32, ptr %14, align 4, !tbaa !12
  %408 = icmp eq i32 %407, 2
  br i1 %408, label %409, label %641

409:                                              ; preds = %406
  %410 = load i64, ptr %15, align 8, !tbaa !18
  %411 = icmp slt i64 %410, 6
  br i1 %411, label %412, label %526

412:                                              ; preds = %409
  br label %413

413:                                              ; preds = %412
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %414 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %414, align 4, !tbaa !12
  store i32 0, ptr %21, align 4, !tbaa !12
  %415 = load i32, ptr %21, align 4, !tbaa !12
  %416 = icmp eq i32 %415, 0
  br i1 %416, label %417, label %424

417:                                              ; preds = %413
  %418 = load ptr, ptr %3, align 8, !tbaa !5
  %419 = load ptr, ptr %10, align 8, !tbaa !5
  %420 = load i64, ptr %15, align 8, !tbaa !18
  %421 = trunc i64 %420 to i32
  %422 = load i64, ptr %16, align 8, !tbaa !18
  %423 = inttoptr i64 %422 to ptr
  call void @mImageDataOutputU8(ptr noundef %418, ptr noundef %419, i32 noundef %421, ptr noundef %423, ptr noundef null)
  br label %523

424:                                              ; preds = %413
  %425 = load i32, ptr %21, align 4, !tbaa !12
  %426 = icmp eq i32 %425, 1
  br i1 %426, label %427, label %434

427:                                              ; preds = %424
  %428 = load ptr, ptr %3, align 8, !tbaa !5
  %429 = load ptr, ptr %10, align 8, !tbaa !5
  %430 = load i64, ptr %15, align 8, !tbaa !18
  %431 = trunc i64 %430 to i32
  %432 = load i64, ptr %16, align 8, !tbaa !18
  %433 = inttoptr i64 %432 to ptr
  call void @mImageDataOutputS8(ptr noundef %428, ptr noundef %429, i32 noundef %431, ptr noundef %433, ptr noundef null)
  br label %522

434:                                              ; preds = %424
  %435 = load i32, ptr %21, align 4, !tbaa !12
  %436 = icmp eq i32 %435, 2
  br i1 %436, label %437, label %444

437:                                              ; preds = %434
  %438 = load ptr, ptr %3, align 8, !tbaa !5
  %439 = load ptr, ptr %10, align 8, !tbaa !5
  %440 = load i64, ptr %15, align 8, !tbaa !18
  %441 = trunc i64 %440 to i32
  %442 = load i64, ptr %16, align 8, !tbaa !18
  %443 = inttoptr i64 %442 to ptr
  call void @mImageDataOutputU16(ptr noundef %438, ptr noundef %439, i32 noundef %441, ptr noundef %443, ptr noundef null)
  br label %521

444:                                              ; preds = %434
  %445 = load i32, ptr %21, align 4, !tbaa !12
  %446 = icmp eq i32 %445, 3
  br i1 %446, label %447, label %454

447:                                              ; preds = %444
  %448 = load ptr, ptr %3, align 8, !tbaa !5
  %449 = load ptr, ptr %10, align 8, !tbaa !5
  %450 = load i64, ptr %15, align 8, !tbaa !18
  %451 = trunc i64 %450 to i32
  %452 = load i64, ptr %16, align 8, !tbaa !18
  %453 = inttoptr i64 %452 to ptr
  call void @mImageDataOutputS16(ptr noundef %448, ptr noundef %449, i32 noundef %451, ptr noundef %453, ptr noundef null)
  br label %520

454:                                              ; preds = %444
  %455 = load i32, ptr %21, align 4, !tbaa !12
  %456 = icmp eq i32 %455, 4
  br i1 %456, label %457, label %464

457:                                              ; preds = %454
  %458 = load ptr, ptr %3, align 8, !tbaa !5
  %459 = load ptr, ptr %10, align 8, !tbaa !5
  %460 = load i64, ptr %15, align 8, !tbaa !18
  %461 = trunc i64 %460 to i32
  %462 = load i64, ptr %16, align 8, !tbaa !18
  %463 = inttoptr i64 %462 to ptr
  call void @mImageDataOutputU32(ptr noundef %458, ptr noundef %459, i32 noundef %461, ptr noundef %463, ptr noundef null)
  br label %519

464:                                              ; preds = %454
  %465 = load i32, ptr %21, align 4, !tbaa !12
  %466 = icmp eq i32 %465, 5
  br i1 %466, label %467, label %474

467:                                              ; preds = %464
  %468 = load ptr, ptr %3, align 8, !tbaa !5
  %469 = load ptr, ptr %10, align 8, !tbaa !5
  %470 = load i64, ptr %15, align 8, !tbaa !18
  %471 = trunc i64 %470 to i32
  %472 = load i64, ptr %16, align 8, !tbaa !18
  %473 = inttoptr i64 %472 to ptr
  call void @mImageDataOutputS32(ptr noundef %468, ptr noundef %469, i32 noundef %471, ptr noundef %473, ptr noundef null)
  br label %518

474:                                              ; preds = %464
  %475 = load i32, ptr %21, align 4, !tbaa !12
  %476 = icmp eq i32 %475, 8
  br i1 %476, label %477, label %484

477:                                              ; preds = %474
  %478 = load ptr, ptr %3, align 8, !tbaa !5
  %479 = load ptr, ptr %10, align 8, !tbaa !5
  %480 = load i64, ptr %15, align 8, !tbaa !18
  %481 = trunc i64 %480 to i32
  %482 = load i64, ptr %16, align 8, !tbaa !18
  %483 = inttoptr i64 %482 to ptr
  call void @mImageDataOutputF32(ptr noundef %478, ptr noundef %479, i32 noundef %481, ptr noundef %483, ptr noundef null)
  br label %517

484:                                              ; preds = %474
  %485 = load i32, ptr %21, align 4, !tbaa !12
  %486 = icmp eq i32 %485, 7
  br i1 %486, label %487, label %494

487:                                              ; preds = %484
  %488 = load ptr, ptr %3, align 8, !tbaa !5
  %489 = load ptr, ptr %10, align 8, !tbaa !5
  %490 = load i64, ptr %15, align 8, !tbaa !18
  %491 = trunc i64 %490 to i32
  %492 = load i64, ptr %16, align 8, !tbaa !18
  %493 = inttoptr i64 %492 to ptr
  call void @mImageDataOutputS64(ptr noundef %488, ptr noundef %489, i32 noundef %491, ptr noundef %493, ptr noundef null)
  br label %516

494:                                              ; preds = %484
  %495 = load i32, ptr %21, align 4, !tbaa !12
  %496 = icmp eq i32 %495, 6
  br i1 %496, label %497, label %504

497:                                              ; preds = %494
  %498 = load ptr, ptr %3, align 8, !tbaa !5
  %499 = load ptr, ptr %10, align 8, !tbaa !5
  %500 = load i64, ptr %15, align 8, !tbaa !18
  %501 = trunc i64 %500 to i32
  %502 = load i64, ptr %16, align 8, !tbaa !18
  %503 = inttoptr i64 %502 to ptr
  call void @mImageDataOutputU64(ptr noundef %498, ptr noundef %499, i32 noundef %501, ptr noundef %503, ptr noundef null)
  br label %515

504:                                              ; preds = %494
  %505 = load i32, ptr %21, align 4, !tbaa !12
  %506 = icmp eq i32 %505, 9
  br i1 %506, label %507, label %514

507:                                              ; preds = %504
  %508 = load ptr, ptr %3, align 8, !tbaa !5
  %509 = load ptr, ptr %10, align 8, !tbaa !5
  %510 = load i64, ptr %15, align 8, !tbaa !18
  %511 = trunc i64 %510 to i32
  %512 = load i64, ptr %16, align 8, !tbaa !18
  %513 = inttoptr i64 %512 to ptr
  call void @mImageDataOutputD64(ptr noundef %508, ptr noundef %509, i32 noundef %511, ptr noundef %513, ptr noundef null)
  br label %514

514:                                              ; preds = %507, %504
  br label %515

515:                                              ; preds = %514, %497
  br label %516

516:                                              ; preds = %515, %487
  br label %517

517:                                              ; preds = %516, %477
  br label %518

518:                                              ; preds = %517, %467
  br label %519

519:                                              ; preds = %518, %457
  br label %520

520:                                              ; preds = %519, %447
  br label %521

521:                                              ; preds = %520, %437
  br label %522

522:                                              ; preds = %521, %427
  br label %523

523:                                              ; preds = %522, %417
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %524

524:                                              ; preds = %523
  br label %525

525:                                              ; preds = %524
  br label %640

526:                                              ; preds = %409
  br label %527

527:                                              ; preds = %526
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %528 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %528, align 4, !tbaa !12
  store i32 0, ptr %22, align 4, !tbaa !12
  %529 = load i32, ptr %22, align 4, !tbaa !12
  %530 = icmp eq i32 %529, 0
  br i1 %530, label %531, label %538

531:                                              ; preds = %527
  %532 = load ptr, ptr %3, align 8, !tbaa !5
  %533 = load ptr, ptr %10, align 8, !tbaa !5
  %534 = load i64, ptr %15, align 8, !tbaa !18
  %535 = inttoptr i64 %534 to ptr
  %536 = load i64, ptr %17, align 8, !tbaa !18
  %537 = inttoptr i64 %536 to ptr
  call void @mImageDataOutputU8(ptr noundef %532, ptr noundef %533, i32 noundef -1, ptr noundef %535, ptr noundef %537)
  br label %637

538:                                              ; preds = %527
  %539 = load i32, ptr %22, align 4, !tbaa !12
  %540 = icmp eq i32 %539, 1
  br i1 %540, label %541, label %548

541:                                              ; preds = %538
  %542 = load ptr, ptr %3, align 8, !tbaa !5
  %543 = load ptr, ptr %10, align 8, !tbaa !5
  %544 = load i64, ptr %15, align 8, !tbaa !18
  %545 = inttoptr i64 %544 to ptr
  %546 = load i64, ptr %17, align 8, !tbaa !18
  %547 = inttoptr i64 %546 to ptr
  call void @mImageDataOutputS8(ptr noundef %542, ptr noundef %543, i32 noundef -1, ptr noundef %545, ptr noundef %547)
  br label %636

548:                                              ; preds = %538
  %549 = load i32, ptr %22, align 4, !tbaa !12
  %550 = icmp eq i32 %549, 2
  br i1 %550, label %551, label %558

551:                                              ; preds = %548
  %552 = load ptr, ptr %3, align 8, !tbaa !5
  %553 = load ptr, ptr %10, align 8, !tbaa !5
  %554 = load i64, ptr %15, align 8, !tbaa !18
  %555 = inttoptr i64 %554 to ptr
  %556 = load i64, ptr %17, align 8, !tbaa !18
  %557 = inttoptr i64 %556 to ptr
  call void @mImageDataOutputU16(ptr noundef %552, ptr noundef %553, i32 noundef -1, ptr noundef %555, ptr noundef %557)
  br label %635

558:                                              ; preds = %548
  %559 = load i32, ptr %22, align 4, !tbaa !12
  %560 = icmp eq i32 %559, 3
  br i1 %560, label %561, label %568

561:                                              ; preds = %558
  %562 = load ptr, ptr %3, align 8, !tbaa !5
  %563 = load ptr, ptr %10, align 8, !tbaa !5
  %564 = load i64, ptr %15, align 8, !tbaa !18
  %565 = inttoptr i64 %564 to ptr
  %566 = load i64, ptr %17, align 8, !tbaa !18
  %567 = inttoptr i64 %566 to ptr
  call void @mImageDataOutputS16(ptr noundef %562, ptr noundef %563, i32 noundef -1, ptr noundef %565, ptr noundef %567)
  br label %634

568:                                              ; preds = %558
  %569 = load i32, ptr %22, align 4, !tbaa !12
  %570 = icmp eq i32 %569, 4
  br i1 %570, label %571, label %578

571:                                              ; preds = %568
  %572 = load ptr, ptr %3, align 8, !tbaa !5
  %573 = load ptr, ptr %10, align 8, !tbaa !5
  %574 = load i64, ptr %15, align 8, !tbaa !18
  %575 = inttoptr i64 %574 to ptr
  %576 = load i64, ptr %17, align 8, !tbaa !18
  %577 = inttoptr i64 %576 to ptr
  call void @mImageDataOutputU32(ptr noundef %572, ptr noundef %573, i32 noundef -1, ptr noundef %575, ptr noundef %577)
  br label %633

578:                                              ; preds = %568
  %579 = load i32, ptr %22, align 4, !tbaa !12
  %580 = icmp eq i32 %579, 5
  br i1 %580, label %581, label %588

581:                                              ; preds = %578
  %582 = load ptr, ptr %3, align 8, !tbaa !5
  %583 = load ptr, ptr %10, align 8, !tbaa !5
  %584 = load i64, ptr %15, align 8, !tbaa !18
  %585 = inttoptr i64 %584 to ptr
  %586 = load i64, ptr %17, align 8, !tbaa !18
  %587 = inttoptr i64 %586 to ptr
  call void @mImageDataOutputS32(ptr noundef %582, ptr noundef %583, i32 noundef -1, ptr noundef %585, ptr noundef %587)
  br label %632

588:                                              ; preds = %578
  %589 = load i32, ptr %22, align 4, !tbaa !12
  %590 = icmp eq i32 %589, 8
  br i1 %590, label %591, label %598

591:                                              ; preds = %588
  %592 = load ptr, ptr %3, align 8, !tbaa !5
  %593 = load ptr, ptr %10, align 8, !tbaa !5
  %594 = load i64, ptr %15, align 8, !tbaa !18
  %595 = inttoptr i64 %594 to ptr
  %596 = load i64, ptr %17, align 8, !tbaa !18
  %597 = inttoptr i64 %596 to ptr
  call void @mImageDataOutputF32(ptr noundef %592, ptr noundef %593, i32 noundef -1, ptr noundef %595, ptr noundef %597)
  br label %631

598:                                              ; preds = %588
  %599 = load i32, ptr %22, align 4, !tbaa !12
  %600 = icmp eq i32 %599, 7
  br i1 %600, label %601, label %608

601:                                              ; preds = %598
  %602 = load ptr, ptr %3, align 8, !tbaa !5
  %603 = load ptr, ptr %10, align 8, !tbaa !5
  %604 = load i64, ptr %15, align 8, !tbaa !18
  %605 = inttoptr i64 %604 to ptr
  %606 = load i64, ptr %17, align 8, !tbaa !18
  %607 = inttoptr i64 %606 to ptr
  call void @mImageDataOutputS64(ptr noundef %602, ptr noundef %603, i32 noundef -1, ptr noundef %605, ptr noundef %607)
  br label %630

608:                                              ; preds = %598
  %609 = load i32, ptr %22, align 4, !tbaa !12
  %610 = icmp eq i32 %609, 6
  br i1 %610, label %611, label %618

611:                                              ; preds = %608
  %612 = load ptr, ptr %3, align 8, !tbaa !5
  %613 = load ptr, ptr %10, align 8, !tbaa !5
  %614 = load i64, ptr %15, align 8, !tbaa !18
  %615 = inttoptr i64 %614 to ptr
  %616 = load i64, ptr %17, align 8, !tbaa !18
  %617 = inttoptr i64 %616 to ptr
  call void @mImageDataOutputU64(ptr noundef %612, ptr noundef %613, i32 noundef -1, ptr noundef %615, ptr noundef %617)
  br label %629

618:                                              ; preds = %608
  %619 = load i32, ptr %22, align 4, !tbaa !12
  %620 = icmp eq i32 %619, 9
  br i1 %620, label %621, label %628

621:                                              ; preds = %618
  %622 = load ptr, ptr %3, align 8, !tbaa !5
  %623 = load ptr, ptr %10, align 8, !tbaa !5
  %624 = load i64, ptr %15, align 8, !tbaa !18
  %625 = inttoptr i64 %624 to ptr
  %626 = load i64, ptr %17, align 8, !tbaa !18
  %627 = inttoptr i64 %626 to ptr
  call void @mImageDataOutputD64(ptr noundef %622, ptr noundef %623, i32 noundef -1, ptr noundef %625, ptr noundef %627)
  br label %628

628:                                              ; preds = %621, %618
  br label %629

629:                                              ; preds = %628, %611
  br label %630

630:                                              ; preds = %629, %601
  br label %631

631:                                              ; preds = %630, %591
  br label %632

632:                                              ; preds = %631, %581
  br label %633

633:                                              ; preds = %632, %571
  br label %634

634:                                              ; preds = %633, %561
  br label %635

635:                                              ; preds = %634, %551
  br label %636

636:                                              ; preds = %635, %541
  br label %637

637:                                              ; preds = %636, %531
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %638

638:                                              ; preds = %637
  br label %639

639:                                              ; preds = %638
  br label %640

640:                                              ; preds = %639, %525
  br label %788

641:                                              ; preds = %406
  %642 = load i32, ptr %14, align 4, !tbaa !12
  %643 = icmp eq i32 %642, 3
  br i1 %643, label %644, label %778

644:                                              ; preds = %641
  br label %645

645:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %646 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %646, align 4, !tbaa !12
  store i32 0, ptr %23, align 4, !tbaa !12
  %647 = load i32, ptr %23, align 4, !tbaa !12
  %648 = icmp eq i32 %647, 0
  br i1 %648, label %649, label %658

649:                                              ; preds = %645
  %650 = load ptr, ptr %3, align 8, !tbaa !5
  %651 = load ptr, ptr %10, align 8, !tbaa !5
  %652 = load i64, ptr %15, align 8, !tbaa !18
  %653 = trunc i64 %652 to i32
  %654 = load i64, ptr %16, align 8, !tbaa !18
  %655 = inttoptr i64 %654 to ptr
  %656 = load i64, ptr %17, align 8, !tbaa !18
  %657 = inttoptr i64 %656 to ptr
  call void @mImageDataOutputU8(ptr noundef %650, ptr noundef %651, i32 noundef %653, ptr noundef %655, ptr noundef %657)
  br label %775

658:                                              ; preds = %645
  %659 = load i32, ptr %23, align 4, !tbaa !12
  %660 = icmp eq i32 %659, 1
  br i1 %660, label %661, label %670

661:                                              ; preds = %658
  %662 = load ptr, ptr %3, align 8, !tbaa !5
  %663 = load ptr, ptr %10, align 8, !tbaa !5
  %664 = load i64, ptr %15, align 8, !tbaa !18
  %665 = trunc i64 %664 to i32
  %666 = load i64, ptr %16, align 8, !tbaa !18
  %667 = inttoptr i64 %666 to ptr
  %668 = load i64, ptr %17, align 8, !tbaa !18
  %669 = inttoptr i64 %668 to ptr
  call void @mImageDataOutputS8(ptr noundef %662, ptr noundef %663, i32 noundef %665, ptr noundef %667, ptr noundef %669)
  br label %774

670:                                              ; preds = %658
  %671 = load i32, ptr %23, align 4, !tbaa !12
  %672 = icmp eq i32 %671, 2
  br i1 %672, label %673, label %682

673:                                              ; preds = %670
  %674 = load ptr, ptr %3, align 8, !tbaa !5
  %675 = load ptr, ptr %10, align 8, !tbaa !5
  %676 = load i64, ptr %15, align 8, !tbaa !18
  %677 = trunc i64 %676 to i32
  %678 = load i64, ptr %16, align 8, !tbaa !18
  %679 = inttoptr i64 %678 to ptr
  %680 = load i64, ptr %17, align 8, !tbaa !18
  %681 = inttoptr i64 %680 to ptr
  call void @mImageDataOutputU16(ptr noundef %674, ptr noundef %675, i32 noundef %677, ptr noundef %679, ptr noundef %681)
  br label %773

682:                                              ; preds = %670
  %683 = load i32, ptr %23, align 4, !tbaa !12
  %684 = icmp eq i32 %683, 3
  br i1 %684, label %685, label %694

685:                                              ; preds = %682
  %686 = load ptr, ptr %3, align 8, !tbaa !5
  %687 = load ptr, ptr %10, align 8, !tbaa !5
  %688 = load i64, ptr %15, align 8, !tbaa !18
  %689 = trunc i64 %688 to i32
  %690 = load i64, ptr %16, align 8, !tbaa !18
  %691 = inttoptr i64 %690 to ptr
  %692 = load i64, ptr %17, align 8, !tbaa !18
  %693 = inttoptr i64 %692 to ptr
  call void @mImageDataOutputS16(ptr noundef %686, ptr noundef %687, i32 noundef %689, ptr noundef %691, ptr noundef %693)
  br label %772

694:                                              ; preds = %682
  %695 = load i32, ptr %23, align 4, !tbaa !12
  %696 = icmp eq i32 %695, 4
  br i1 %696, label %697, label %706

697:                                              ; preds = %694
  %698 = load ptr, ptr %3, align 8, !tbaa !5
  %699 = load ptr, ptr %10, align 8, !tbaa !5
  %700 = load i64, ptr %15, align 8, !tbaa !18
  %701 = trunc i64 %700 to i32
  %702 = load i64, ptr %16, align 8, !tbaa !18
  %703 = inttoptr i64 %702 to ptr
  %704 = load i64, ptr %17, align 8, !tbaa !18
  %705 = inttoptr i64 %704 to ptr
  call void @mImageDataOutputU32(ptr noundef %698, ptr noundef %699, i32 noundef %701, ptr noundef %703, ptr noundef %705)
  br label %771

706:                                              ; preds = %694
  %707 = load i32, ptr %23, align 4, !tbaa !12
  %708 = icmp eq i32 %707, 5
  br i1 %708, label %709, label %718

709:                                              ; preds = %706
  %710 = load ptr, ptr %3, align 8, !tbaa !5
  %711 = load ptr, ptr %10, align 8, !tbaa !5
  %712 = load i64, ptr %15, align 8, !tbaa !18
  %713 = trunc i64 %712 to i32
  %714 = load i64, ptr %16, align 8, !tbaa !18
  %715 = inttoptr i64 %714 to ptr
  %716 = load i64, ptr %17, align 8, !tbaa !18
  %717 = inttoptr i64 %716 to ptr
  call void @mImageDataOutputS32(ptr noundef %710, ptr noundef %711, i32 noundef %713, ptr noundef %715, ptr noundef %717)
  br label %770

718:                                              ; preds = %706
  %719 = load i32, ptr %23, align 4, !tbaa !12
  %720 = icmp eq i32 %719, 8
  br i1 %720, label %721, label %730

721:                                              ; preds = %718
  %722 = load ptr, ptr %3, align 8, !tbaa !5
  %723 = load ptr, ptr %10, align 8, !tbaa !5
  %724 = load i64, ptr %15, align 8, !tbaa !18
  %725 = trunc i64 %724 to i32
  %726 = load i64, ptr %16, align 8, !tbaa !18
  %727 = inttoptr i64 %726 to ptr
  %728 = load i64, ptr %17, align 8, !tbaa !18
  %729 = inttoptr i64 %728 to ptr
  call void @mImageDataOutputF32(ptr noundef %722, ptr noundef %723, i32 noundef %725, ptr noundef %727, ptr noundef %729)
  br label %769

730:                                              ; preds = %718
  %731 = load i32, ptr %23, align 4, !tbaa !12
  %732 = icmp eq i32 %731, 7
  br i1 %732, label %733, label %742

733:                                              ; preds = %730
  %734 = load ptr, ptr %3, align 8, !tbaa !5
  %735 = load ptr, ptr %10, align 8, !tbaa !5
  %736 = load i64, ptr %15, align 8, !tbaa !18
  %737 = trunc i64 %736 to i32
  %738 = load i64, ptr %16, align 8, !tbaa !18
  %739 = inttoptr i64 %738 to ptr
  %740 = load i64, ptr %17, align 8, !tbaa !18
  %741 = inttoptr i64 %740 to ptr
  call void @mImageDataOutputS64(ptr noundef %734, ptr noundef %735, i32 noundef %737, ptr noundef %739, ptr noundef %741)
  br label %768

742:                                              ; preds = %730
  %743 = load i32, ptr %23, align 4, !tbaa !12
  %744 = icmp eq i32 %743, 6
  br i1 %744, label %745, label %754

745:                                              ; preds = %742
  %746 = load ptr, ptr %3, align 8, !tbaa !5
  %747 = load ptr, ptr %10, align 8, !tbaa !5
  %748 = load i64, ptr %15, align 8, !tbaa !18
  %749 = trunc i64 %748 to i32
  %750 = load i64, ptr %16, align 8, !tbaa !18
  %751 = inttoptr i64 %750 to ptr
  %752 = load i64, ptr %17, align 8, !tbaa !18
  %753 = inttoptr i64 %752 to ptr
  call void @mImageDataOutputU64(ptr noundef %746, ptr noundef %747, i32 noundef %749, ptr noundef %751, ptr noundef %753)
  br label %767

754:                                              ; preds = %742
  %755 = load i32, ptr %23, align 4, !tbaa !12
  %756 = icmp eq i32 %755, 9
  br i1 %756, label %757, label %766

757:                                              ; preds = %754
  %758 = load ptr, ptr %3, align 8, !tbaa !5
  %759 = load ptr, ptr %10, align 8, !tbaa !5
  %760 = load i64, ptr %15, align 8, !tbaa !18
  %761 = trunc i64 %760 to i32
  %762 = load i64, ptr %16, align 8, !tbaa !18
  %763 = inttoptr i64 %762 to ptr
  %764 = load i64, ptr %17, align 8, !tbaa !18
  %765 = inttoptr i64 %764 to ptr
  call void @mImageDataOutputD64(ptr noundef %758, ptr noundef %759, i32 noundef %761, ptr noundef %763, ptr noundef %765)
  br label %766

766:                                              ; preds = %757, %754
  br label %767

767:                                              ; preds = %766, %745
  br label %768

768:                                              ; preds = %767, %733
  br label %769

769:                                              ; preds = %768, %721
  br label %770

770:                                              ; preds = %769, %709
  br label %771

771:                                              ; preds = %770, %697
  br label %772

772:                                              ; preds = %771, %685
  br label %773

773:                                              ; preds = %772, %673
  br label %774

774:                                              ; preds = %773, %661
  br label %775

775:                                              ; preds = %774, %649
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %776

776:                                              ; preds = %775
  br label %777

777:                                              ; preds = %776
  br label %787

778:                                              ; preds = %641
  br label %779

779:                                              ; preds = %778
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 1, ptr %24, align 4, !tbaa !12
  %780 = load i32, ptr %24, align 4, !tbaa !12
  %781 = icmp ne i32 %780, 0
  br i1 %781, label %782, label %784

782:                                              ; preds = %779
  %783 = load i32, ptr %24, align 4, !tbaa !12
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %783, i32 noundef -1, ptr noundef @.str.9, i32 noundef 50, ptr noundef @__FUNCTION__.mImageSave, ptr noundef @.str.12)
  br label %784

784:                                              ; preds = %782, %779
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %785

785:                                              ; preds = %784
  br label %786

786:                                              ; preds = %785
  br label %787

787:                                              ; preds = %786, %777
  br label %788

788:                                              ; preds = %787, %640
  br label %789

789:                                              ; preds = %788, %405
  br label %790

790:                                              ; preds = %789, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  br label %791

791:                                              ; preds = %790
  br label %792

792:                                              ; preds = %791
  %793 = load ptr, ptr %3, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.MImage, ptr %793, i32 0, i32 0
  %795 = load i32, ptr %794, align 8, !tbaa !14
  %796 = icmp sge i32 %795, 3
  br i1 %796, label %797, label %813

797:                                              ; preds = %792
  %798 = load ptr, ptr %3, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.MImage, ptr %798, i32 0, i32 3
  %800 = getelementptr inbounds [4 x ptr], ptr %799, i64 0, i64 0
  %801 = load ptr, ptr %800, align 8, !tbaa !5
  store ptr %801, ptr %13, align 8, !tbaa !5
  %802 = load ptr, ptr %3, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.MImage, ptr %802, i32 0, i32 3
  %804 = getelementptr inbounds [4 x ptr], ptr %803, i64 0, i64 2
  %805 = load ptr, ptr %804, align 8, !tbaa !5
  %806 = load ptr, ptr %3, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.MImage, ptr %806, i32 0, i32 3
  %808 = getelementptr inbounds [4 x ptr], ptr %807, i64 0, i64 0
  store ptr %805, ptr %808, align 8, !tbaa !5
  %809 = load ptr, ptr %13, align 8, !tbaa !5
  %810 = load ptr, ptr %3, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.MImage, ptr %810, i32 0, i32 3
  %812 = getelementptr inbounds [4 x ptr], ptr %811, i64 0, i64 2
  store ptr %809, ptr %812, align 8, !tbaa !5
  br label %813

813:                                              ; preds = %797, %792
  %814 = load i32, ptr %8, align 4, !tbaa !12
  %815 = icmp eq i32 %814, 2
  br i1 %815, label %816, label %836

816:                                              ; preds = %813
  %817 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %818 = load ptr, ptr %3, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.MImage, ptr %818, i32 0, i32 2
  %820 = load i32, ptr %819, align 8, !tbaa !16
  %821 = load ptr, ptr %3, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.MImage, ptr %821, i32 0, i32 1
  %823 = load i32, ptr %822, align 4, !tbaa !17
  %824 = load ptr, ptr %3, align 8, !tbaa !5
  %825 = getelementptr inbounds %struct.MImage, ptr %824, i32 0, i32 0
  %826 = load i32, ptr %825, align 8, !tbaa !14
  %827 = load ptr, ptr %10, align 8, !tbaa !5
  %828 = load ptr, ptr %3, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.MImage, ptr %828, i32 0, i32 2
  %830 = load i32, ptr %829, align 8, !tbaa !16
  %831 = load ptr, ptr %3, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.MImage, ptr %831, i32 0, i32 0
  %833 = load i32, ptr %832, align 8, !tbaa !14
  %834 = mul nsw i32 %830, %833
  %835 = call i32 @stbi_write_png(ptr noundef %817, i32 noundef %820, i32 noundef %823, i32 noundef %826, ptr noundef %827, i32 noundef %834)
  br label %853

836:                                              ; preds = %813
  %837 = load i32, ptr %8, align 4, !tbaa !12
  %838 = icmp eq i32 %837, 1
  br i1 %838, label %839, label %852

839:                                              ; preds = %836
  %840 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %841 = load ptr, ptr %3, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.MImage, ptr %841, i32 0, i32 2
  %843 = load i32, ptr %842, align 8, !tbaa !16
  %844 = load ptr, ptr %3, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.MImage, ptr %844, i32 0, i32 1
  %846 = load i32, ptr %845, align 4, !tbaa !17
  %847 = load ptr, ptr %3, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.MImage, ptr %847, i32 0, i32 0
  %849 = load i32, ptr %848, align 8, !tbaa !14
  %850 = load ptr, ptr %10, align 8, !tbaa !5
  %851 = call i32 @stbi_write_jpg(ptr noundef %840, i32 noundef %843, i32 noundef %846, i32 noundef %849, ptr noundef %850, i32 noundef 100)
  br label %852

852:                                              ; preds = %839, %836
  br label %853

853:                                              ; preds = %852, %816
  %854 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %854) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  store i32 0, ptr %9, align 4
  br label %855

855:                                              ; preds = %853, %71
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 256, ptr %5) #8
  %856 = load i32, ptr %9, align 4
  switch i32 %856, label %858 [
    i32 0, label %857
    i32 1, label %857
  ]

857:                                              ; preds = %855, %855
  ret void

858:                                              ; preds = %855
  unreachable
}

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #7

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcasecmp(ptr noundef, ptr noundef) #7

declare void @mBMPSave(ptr noundef, ptr noundef) #6

declare ptr @m_PropertyRead(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputU8(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputS8(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputU16(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputS16(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputU32(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputS32(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputF32(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputS64(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputU64(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

declare void @mImageDataOutputD64(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #6

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { 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 #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { nocallback nofree nosync nounwind willreturn }
attributes #6 = { "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 #7 = { nounwind willreturn memory(read) "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 #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !13, i64 0}
!15 = !{!"MImage", !13, i64 0, !13, i64 4, !13, i64 8, !7, i64 16, !6, i64 48}
!16 = !{!15, !13, i64 8}
!17 = !{!15, !13, i64 4}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !7, i64 0}


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

%struct.__va_list_tag = type { i32, i32, ptr, ptr }

@.str.9 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [1 x i8], align 1
@morn_data_type = external thread_local local_unnamed_addr global i32, align 4
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [11 x i8], align 1
@__FUNCTION__.mImageSave = external hidden unnamed_addr constant [11 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull) #0

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @stbi_write_png(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @stbi_write_jpg(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.va_start.p0(ptr) #5

; Function Attrs: nofree nounwind
declare noundef i32 @vsprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.va_end.p0(ptr) #5

declare void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
define dso_local void @mImageSave(ptr noundef %0, ptr nocapture noundef readonly %1, ...) local_unnamed_addr #4 {
  %3 = alloca [256 x i8], align 16
  %4 = alloca [1 x %struct.__va_list_tag], align 16
  %5 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  call void @llvm.va_start.p0(ptr nonnull %4)
  %6 = call i32 @vsprintf(ptr noundef nonnull %3, ptr noundef %1, ptr noundef nonnull %4) #10
  call void @llvm.va_end.p0(ptr nonnull %4)
  %7 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %3) #11
  %8 = getelementptr inbounds i8, ptr %3, i64 %7
  br label %9

9:                                                ; preds = %9, %2
  %.0 = phi ptr [ %8, %2 ], [ %13, %9 ]
  %10 = load i8, ptr %.0, align 1, !tbaa !5
  %11 = icmp eq i8 %10, 46
  %12 = icmp eq ptr %.0, %3
  %or.cond4 = or i1 %12, %11
  %13 = getelementptr inbounds i8, ptr %.0, i64 -1
  br i1 %or.cond4, label %14, label %9, !llvm.loop !8

14:                                               ; preds = %9
  %15 = getelementptr inbounds i8, ptr %.0, i64 1
  %16 = call i32 @strcasecmp(ptr noundef nonnull %15, ptr noundef nonnull @.str.13) #11
  %17 = icmp eq i32 %16, 0
  br i1 %17, label %.thread, label %18

18:                                               ; preds = %14
  %19 = call i32 @strcasecmp(ptr noundef nonnull %15, ptr noundef nonnull @.str.14) #11
  %20 = icmp eq i32 %19, 0
  br i1 %20, label %.thread, label %21

21:                                               ; preds = %18
  %22 = call i32 @strcasecmp(ptr noundef nonnull %15, ptr noundef nonnull @.str.15) #11
  %23 = icmp eq i32 %22, 0
  br i1 %23, label %.thread, label %24

24:                                               ; preds = %21
  call void @mBMPSave(ptr noundef %0, ptr noundef nonnull %3) #10
  br label %69

.thread:                                          ; preds = %18, %14, %21
  %25 = phi i1 [ false, %21 ], [ true, %14 ], [ true, %18 ]
  %26 = phi i1 [ true, %21 ], [ false, %14 ], [ false, %18 ]
  %27 = load i32, ptr %0, align 8, !tbaa !10
  %28 = getelementptr inbounds i8, ptr %0, i64 8
  %29 = load i32, ptr %28, align 8, !tbaa !14
  %30 = mul nsw i32 %29, %27
  %31 = getelementptr inbounds i8, ptr %0, i64 4
  %32 = load i32, ptr %31, align 4, !tbaa !15
  %33 = mul nsw i32 %30, %32
  %34 = sext i32 %33 to i64
  %35 = call noalias ptr @malloc(i64 noundef %34) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #10
  store i32 -1, ptr %5, align 4, !tbaa !16
  %36 = call ptr @m_PropertyRead(ptr noundef nonnull %0, ptr noundef nonnull @.str.16, ptr noundef nonnull %5, ptr noundef null) #10
  %37 = load i32, ptr %5, align 4
  switch i32 %37, label %38 [
    i32 4, label %39
    i32 3, label %39
    i32 1, label %39
  ]

38:                                               ; preds = %.thread
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str.9, i32 noundef 46, ptr noundef nonnull @__FUNCTION__.mImageSave, ptr noundef nonnull @.str.17) #10
  br label %39

39:                                               ; preds = %.thread, %.thread, %.thread, %38
  %40 = load i32, ptr %0, align 8, !tbaa !10
  %41 = icmp sgt i32 %40, 2
  br i1 %41, label %42, label %47

42:                                               ; preds = %39
  %43 = getelementptr inbounds i8, ptr %0, i64 16
  %44 = load ptr, ptr %43, align 8, !tbaa !17
  %45 = getelementptr inbounds i8, ptr %0, i64 32
  %46 = load ptr, ptr %45, align 8, !tbaa !17
  store ptr %46, ptr %43, align 8, !tbaa !17
  store ptr %44, ptr %45, align 8, !tbaa !17
  br label %47

47:                                               ; preds = %39, %42
  %48 = load i8, ptr @.str.11, align 1, !tbaa !5
  %.not = icmp eq i8 %48, 0
  %49 = call align 4 ptr @llvm.threadlocal.address.p0(ptr align 4 @morn_data_type)
  store i32 0, ptr %49, align 4, !tbaa !16
  %. = sext i1 %.not to i32
  call void @mImageDataOutputU8(ptr noundef nonnull %0, ptr noundef %35, i32 noundef %., ptr noundef null, ptr noundef null) #10
  %50 = load i32, ptr %0, align 8, !tbaa !10
  %51 = icmp sgt i32 %50, 2
  br i1 %51, label %52, label %57

52:                                               ; preds = %47
  %53 = getelementptr inbounds i8, ptr %0, i64 16
  %54 = load ptr, ptr %53, align 8, !tbaa !17
  %55 = getelementptr inbounds i8, ptr %0, i64 32
  %56 = load ptr, ptr %55, align 8, !tbaa !17
  store ptr %56, ptr %53, align 8, !tbaa !17
  store ptr %54, ptr %55, align 8, !tbaa !17
  br label %57

57:                                               ; preds = %52, %47
  br i1 %26, label %58, label %63

58:                                               ; preds = %57
  %59 = load i32, ptr %28, align 8, !tbaa !14
  %60 = load i32, ptr %31, align 4, !tbaa !15
  %61 = mul nsw i32 %59, %50
  %62 = call i32 @stbi_write_png(ptr noundef nonnull %3, i32 noundef %59, i32 noundef %60, i32 noundef %50, ptr noundef %35, i32 noundef %61)
  br label %68

63:                                               ; preds = %57
  br i1 %25, label %64, label %68

64:                                               ; preds = %63
  %65 = load i32, ptr %28, align 8, !tbaa !14
  %66 = load i32, ptr %31, align 4, !tbaa !15
  %67 = call i32 @stbi_write_jpg(ptr noundef nonnull %3, i32 noundef %65, i32 noundef %66, i32 noundef %50, ptr noundef %35, i32 noundef 100)
  br label %68

68:                                               ; preds = %63, %64, %58
  call void @free(ptr noundef %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  br label %69

69:                                               ; preds = %68, %24
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %3) #10
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #8

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @strcasecmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #9

declare void @mBMPSave(ptr noundef, ptr noundef) local_unnamed_addr #7

declare ptr @m_PropertyRead(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

declare void @mImageDataOutputU8(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = { mustprogress nocallback nofree nosync nounwind willreturn }
attributes #6 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { "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 #8 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 #9 = { mustprogress nofree nounwind willreturn memory(read) "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 #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { nounwind allocsize(0) }

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!11, !12, i64 0}
!11 = !{!"MImage", !12, i64 0, !12, i64 4, !12, i64 8, !6, i64 16, !13, i64 48}
!12 = !{!"int", !6, i64 0}
!13 = !{!"any pointer", !6, i64 0}
!14 = !{!11, !12, i64 8}
!15 = !{!11, !12, i64 4}
!16 = !{!12, !12, i64 0}
!17 = !{!13, !13, i64 0}


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