; LLVM IR from jingweizhanghuai/Morn :: src/image (morn_image_hist)

; 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.MImage = type { i32, i32, i32, [4 x ptr], ptr }
%struct.MArray = type { i32, i16, %union.anon }
%union.anon = type { ptr }

@.str = external hidden unnamed_addr constant [83 x i8], align 1
@__FUNCTION__.mImageHist = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [35 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @mImageHist(ptr noundef %0, i32 noundef %1, ptr noundef %2) #0 {
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !5
  br label %37

37:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = icmp eq ptr %38, null
  br i1 %39, label %44, label %40

40:                                               ; preds = %37
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = ptrtoint ptr %41 to i64
  %43 = icmp eq i64 %42, -1
  br i1 %43, label %44, label %45

44:                                               ; preds = %40, %37
  br label %74

45:                                               ; preds = %40
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.MImage, ptr %46, i32 0, i32 3
  %48 = getelementptr inbounds [4 x ptr], ptr %47, i64 0, i64 0
  %49 = icmp eq ptr %48, null
  br i1 %49, label %71, label %50

50:                                               ; preds = %45
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.MImage, ptr %51, i32 0, i32 3
  %53 = getelementptr inbounds [4 x ptr], ptr %52, i64 0, i64 0
  %54 = ptrtoint ptr %53 to i64
  %55 = icmp eq i64 %54, -1
  br i1 %55, label %71, label %56

56:                                               ; preds = %50
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.MImage, ptr %57, i32 0, i32 0
  %59 = load i32, ptr %58, align 8, !tbaa !11
  %60 = icmp sle i32 %59, 0
  br i1 %60, label %71, label %61

61:                                               ; preds = %56
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.MImage, ptr %62, i32 0, i32 1
  %64 = load i32, ptr %63, align 4, !tbaa !13
  %65 = icmp sle i32 %64, 0
  br i1 %65, label %71, label %66

66:                                               ; preds = %61
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.MImage, ptr %67, i32 0, i32 2
  %69 = load i32, ptr %68, align 8, !tbaa !14
  %70 = icmp sle i32 %69, 0
  br label %71

71:                                               ; preds = %66, %61, %56, %50, %45
  %72 = phi i1 [ true, %61 ], [ true, %56 ], [ true, %50 ], [ true, %45 ], [ %70, %66 ]
  %73 = zext i1 %72 to i32
  br label %74

74:                                               ; preds = %71, %44
  %75 = phi i32 [ 1, %44 ], [ %73, %71 ]
  store i32 %75, ptr %7, align 4, !tbaa !9
  %76 = load i32, ptr %7, align 4, !tbaa !9
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %78, label %80

78:                                               ; preds = %74
  %79 = load i32, ptr %7, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %79, i32 noundef -1, ptr noundef @.str, i32 noundef 78, ptr noundef @__FUNCTION__.mImageHist, ptr noundef @.str.1)
  br label %80

80:                                               ; preds = %78, %74
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %81

81:                                               ; preds = %80
  br label %82

82:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %83 = load i32, ptr %5, align 4, !tbaa !9
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.MImage, ptr %84, i32 0, i32 0
  %86 = load i32, ptr %85, align 8, !tbaa !11
  %87 = icmp sge i32 %83, %86
  %88 = zext i1 %87 to i32
  store i32 %88, ptr %8, align 4, !tbaa !9
  %89 = load i32, ptr %8, align 4, !tbaa !9
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %93

91:                                               ; preds = %82
  %92 = load i32, ptr %8, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %92, i32 noundef -1, ptr noundef @.str, i32 noundef 79, ptr noundef @__FUNCTION__.mImageHist, ptr noundef @.str.1)
  br label %93

93:                                               ; preds = %91, %82
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  br label %94

94:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 -869027629, ptr %9, align 4, !tbaa !9
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.MImage, ptr %95, i32 0, i32 0
  %97 = load i32, ptr %96, align 8, !tbaa !11
  %98 = icmp eq i32 %97, 1
  br i1 %98, label %99, label %100

99:                                               ; preds = %94
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %100

100:                                              ; preds = %99, %94
  %101 = load i32, ptr %5, align 4, !tbaa !9
  %102 = icmp sge i32 %101, 0
  br i1 %102, label %103, label %268

103:                                              ; preds = %100
  br label %104

104:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 3, ptr %10, align 4, !tbaa !9
  %105 = load i32, ptr %10, align 4, !tbaa !9
  %106 = icmp eq i32 %105, 1
  br i1 %106, label %107, label %109

107:                                              ; preds = %104
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %108, i32 noundef 257, i32 noundef -1, ptr noundef null)
  br label %135

109:                                              ; preds = %104
  %110 = load i32, ptr %10, align 4, !tbaa !9
  %111 = icmp eq i32 %110, 2
  br i1 %111, label %112, label %114

112:                                              ; preds = %109
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %113, i32 noundef 257, i32 noundef 4, ptr noundef null)
  br label %134

114:                                              ; preds = %109
  %115 = load i32, ptr %10, align 4, !tbaa !9
  %116 = icmp eq i32 %115, 3
  br i1 %116, label %117, label %124

117:                                              ; preds = %114
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = load ptr, ptr %6, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.MArray, ptr %119, i32 0, i32 2
  %121 = load ptr, ptr %120, align 8, !tbaa !15
  %122 = ptrtoint ptr %121 to i64
  %123 = inttoptr i64 %122 to ptr
  call void @ArrayRedefine(ptr noundef %118, i32 noundef 257, i32 noundef 4, ptr noundef %123)
  br label %133

124:                                              ; preds = %114
  br label %125

125:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 1, ptr %11, align 4, !tbaa !9
  %126 = load i32, ptr %11, align 4, !tbaa !9
  %127 = icmp ne i32 %126, 0
  br i1 %127, label %128, label %130

128:                                              ; preds = %125
  %129 = load i32, ptr %11, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %129, i32 noundef -1, ptr noundef @.str, i32 noundef 86, ptr noundef @__FUNCTION__.mImageHist, ptr noundef @.str.2)
  br label %130

130:                                              ; preds = %128, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %131

131:                                              ; preds = %130
  br label %132

132:                                              ; preds = %131
  br label %133

133:                                              ; preds = %132, %117
  br label %134

134:                                              ; preds = %133, %112
  br label %135

135:                                              ; preds = %134, %107
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br label %136

136:                                              ; preds = %135
  br label %137

137:                                              ; preds = %136
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.MArray, ptr %138, i32 0, i32 2
  %140 = load ptr, ptr %139, align 8, !tbaa !15
  call void @llvm.memset.p0.i64(ptr align 4 %140, i8 0, i64 1024, i1 false)
  %141 = load i32, ptr %9, align 4, !tbaa !9
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.MArray, ptr %142, i32 0, i32 2
  %144 = load ptr, ptr %143, align 8, !tbaa !15
  %145 = getelementptr inbounds i32, ptr %144, i64 256
  store i32 %141, ptr %145, align 4, !tbaa !9
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.MArray, ptr %146, i32 0, i32 0
  store i32 256, ptr %147, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.MImage, ptr %148, i32 0, i32 3
  %150 = load i32, ptr %5, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [4 x ptr], ptr %149, i64 0, i64 %151
  %153 = load ptr, ptr %152, align 8, !tbaa !5
  store ptr %153, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %154 = load ptr, ptr %4, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.MImage, ptr %154, i32 0, i32 4
  %156 = load ptr, ptr %155, align 8, !tbaa !19
  %157 = icmp eq ptr %156, null
  br i1 %157, label %158, label %159

158:                                              ; preds = %137
  br label %168

159:                                              ; preds = %137
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.MImage, ptr %160, i32 0, i32 4
  %162 = load ptr, ptr %161, align 8, !tbaa !19
  %163 = getelementptr inbounds %struct.MArray, ptr %162, i32 0, i32 2
  %164 = load ptr, ptr %163, align 8, !tbaa !15
  %165 = getelementptr inbounds i16, ptr %164, i64 2
  %166 = load i16, ptr %165, align 2, !tbaa !20
  %167 = sext i16 %166 to i32
  br label %168

168:                                              ; preds = %159, %158
  %169 = phi i32 [ 0, %158 ], [ %167, %159 ]
  store i32 %169, ptr %13, align 4, !tbaa !9
  br label %170

170:                                              ; preds = %264, %168
  %171 = load i32, ptr %13, align 4, !tbaa !9
  %172 = load ptr, ptr %4, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.MImage, ptr %172, i32 0, i32 4
  %174 = load ptr, ptr %173, align 8, !tbaa !19
  %175 = icmp eq ptr %174, null
  br i1 %175, label %176, label %180

176:                                              ; preds = %170
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.MImage, ptr %177, i32 0, i32 1
  %179 = load i32, ptr %178, align 4, !tbaa !13
  br label %189

180:                                              ; preds = %170
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.MImage, ptr %181, i32 0, i32 4
  %183 = load ptr, ptr %182, align 8, !tbaa !19
  %184 = getelementptr inbounds %struct.MArray, ptr %183, i32 0, i32 2
  %185 = load ptr, ptr %184, align 8, !tbaa !15
  %186 = getelementptr inbounds i16, ptr %185, i64 3
  %187 = load i16, ptr %186, align 2, !tbaa !20
  %188 = sext i16 %187 to i32
  br label %189

189:                                              ; preds = %180, %176
  %190 = phi i32 [ %179, %176 ], [ %188, %180 ]
  %191 = icmp slt i32 %171, %190
  br i1 %191, label %193, label %192

192:                                              ; preds = %189
  store i32 10, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %267

193:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.MImage, ptr %194, i32 0, i32 4
  %196 = load ptr, ptr %195, align 8, !tbaa !19
  %197 = icmp eq ptr %196, null
  br i1 %197, label %198, label %199

198:                                              ; preds = %193
  br label %213

199:                                              ; preds = %193
  %200 = load ptr, ptr %4, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.MImage, ptr %200, i32 0, i32 4
  %202 = load ptr, ptr %201, align 8, !tbaa !19
  %203 = getelementptr inbounds %struct.MArray, ptr %202, i32 0, i32 2
  %204 = load ptr, ptr %203, align 8, !tbaa !15
  %205 = load i32, ptr %13, align 4, !tbaa !9
  %206 = load i32, ptr %13, align 4, !tbaa !9
  %207 = add nsw i32 %205, %206
  %208 = add nsw i32 %207, 4
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i16, ptr %204, i64 %209
  %211 = load i16, ptr %210, align 2, !tbaa !20
  %212 = sext i16 %211 to i32
  br label %213

213:                                              ; preds = %199, %198
  %214 = phi i32 [ 0, %198 ], [ %212, %199 ]
  store i32 %214, ptr %15, align 4, !tbaa !9
  br label %215

215:                                              ; preds = %260, %213
  %216 = load i32, ptr %15, align 4, !tbaa !9
  %217 = load ptr, ptr %4, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.MImage, ptr %217, i32 0, i32 4
  %219 = load ptr, ptr %218, align 8, !tbaa !19
  %220 = icmp eq ptr %219, null
  br i1 %220, label %221, label %225

221:                                              ; preds = %215
  %222 = load ptr, ptr %4, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.MImage, ptr %222, i32 0, i32 2
  %224 = load i32, ptr %223, align 8, !tbaa !14
  br label %239

225:                                              ; preds = %215
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.MImage, ptr %226, i32 0, i32 4
  %228 = load ptr, ptr %227, align 8, !tbaa !19
  %229 = getelementptr inbounds %struct.MArray, ptr %228, i32 0, i32 2
  %230 = load ptr, ptr %229, align 8, !tbaa !15
  %231 = load i32, ptr %13, align 4, !tbaa !9
  %232 = load i32, ptr %13, align 4, !tbaa !9
  %233 = add nsw i32 %231, %232
  %234 = add nsw i32 %233, 5
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i16, ptr %230, i64 %235
  %237 = load i16, ptr %236, align 2, !tbaa !20
  %238 = sext i16 %237 to i32
  br label %239

239:                                              ; preds = %225, %221
  %240 = phi i32 [ %224, %221 ], [ %238, %225 ]
  %241 = icmp slt i32 %216, %240
  br i1 %241, label %243, label %242

242:                                              ; preds = %239
  store i32 13, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %263

243:                                              ; preds = %239
  %244 = load ptr, ptr %6, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.MArray, ptr %244, i32 0, i32 2
  %246 = load ptr, ptr %245, align 8, !tbaa !15
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = load i32, ptr %13, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds ptr, ptr %247, i64 %249
  %251 = load ptr, ptr %250, align 8, !tbaa !5
  %252 = load i32, ptr %15, align 4, !tbaa !9
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i8, ptr %251, i64 %253
  %255 = load i8, ptr %254, align 1, !tbaa !15
  %256 = zext i8 %255 to i64
  %257 = getelementptr inbounds i32, ptr %246, i64 %256
  %258 = load i32, ptr %257, align 4, !tbaa !9
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %257, align 4, !tbaa !9
  br label %260

260:                                              ; preds = %243
  %261 = load i32, ptr %15, align 4, !tbaa !9
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %15, align 4, !tbaa !9
  br label %215, !llvm.loop !21

263:                                              ; preds = %242
  br label %264

264:                                              ; preds = %263
  %265 = load i32, ptr %13, align 4, !tbaa !9
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %13, align 4, !tbaa !9
  br label %170, !llvm.loop !23

267:                                              ; preds = %192
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  br label %877

268:                                              ; preds = %100
  %269 = load ptr, ptr %4, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.MImage, ptr %269, i32 0, i32 0
  %271 = load i32, ptr %270, align 8, !tbaa !11
  %272 = icmp eq i32 %271, 3
  br i1 %272, label %273, label %472

273:                                              ; preds = %268
  br label %274

274:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  store i32 3, ptr %16, align 4, !tbaa !9
  %275 = load i32, ptr %16, align 4, !tbaa !9
  %276 = icmp eq i32 %275, 1
  br i1 %276, label %277, label %279

277:                                              ; preds = %274
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %278, i32 noundef 4097, i32 noundef -1, ptr noundef null)
  br label %305

279:                                              ; preds = %274
  %280 = load i32, ptr %16, align 4, !tbaa !9
  %281 = icmp eq i32 %280, 2
  br i1 %281, label %282, label %284

282:                                              ; preds = %279
  %283 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %283, i32 noundef 4097, i32 noundef 4, ptr noundef null)
  br label %304

284:                                              ; preds = %279
  %285 = load i32, ptr %16, align 4, !tbaa !9
  %286 = icmp eq i32 %285, 3
  br i1 %286, label %287, label %294

287:                                              ; preds = %284
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = load ptr, ptr %6, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.MArray, ptr %289, i32 0, i32 2
  %291 = load ptr, ptr %290, align 8, !tbaa !15
  %292 = ptrtoint ptr %291 to i64
  %293 = inttoptr i64 %292 to ptr
  call void @ArrayRedefine(ptr noundef %288, i32 noundef 4097, i32 noundef 4, ptr noundef %293)
  br label %303

294:                                              ; preds = %284
  br label %295

295:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  store i32 1, ptr %17, align 4, !tbaa !9
  %296 = load i32, ptr %17, align 4, !tbaa !9
  %297 = icmp ne i32 %296, 0
  br i1 %297, label %298, label %300

298:                                              ; preds = %295
  %299 = load i32, ptr %17, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %299, i32 noundef -1, ptr noundef @.str, i32 noundef 95, ptr noundef @__FUNCTION__.mImageHist, ptr noundef @.str.2)
  br label %300

300:                                              ; preds = %298, %295
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301
  br label %303

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

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

305:                                              ; preds = %304, %277
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %306

306:                                              ; preds = %305
  br label %307

307:                                              ; preds = %306
  %308 = load ptr, ptr %6, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.MArray, ptr %308, i32 0, i32 2
  %310 = load ptr, ptr %309, align 8, !tbaa !15
  call void @llvm.memset.p0.i64(ptr align 4 %310, i8 0, i64 16384, i1 false)
  %311 = load i32, ptr %9, align 4, !tbaa !9
  %312 = load ptr, ptr %6, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.MArray, ptr %312, i32 0, i32 2
  %314 = load ptr, ptr %313, align 8, !tbaa !15
  %315 = getelementptr inbounds i32, ptr %314, i64 4096
  store i32 %311, ptr %315, align 4, !tbaa !9
  %316 = load ptr, ptr %6, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.MArray, ptr %316, i32 0, i32 0
  store i32 4096, ptr %317, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %318 = load ptr, ptr %4, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.MImage, ptr %318, i32 0, i32 4
  %320 = load ptr, ptr %319, align 8, !tbaa !19
  %321 = icmp eq ptr %320, null
  br i1 %321, label %322, label %323

322:                                              ; preds = %307
  br label %332

323:                                              ; preds = %307
  %324 = load ptr, ptr %4, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.MImage, ptr %324, i32 0, i32 4
  %326 = load ptr, ptr %325, align 8, !tbaa !19
  %327 = getelementptr inbounds %struct.MArray, ptr %326, i32 0, i32 2
  %328 = load ptr, ptr %327, align 8, !tbaa !15
  %329 = getelementptr inbounds i16, ptr %328, i64 2
  %330 = load i16, ptr %329, align 2, !tbaa !20
  %331 = sext i16 %330 to i32
  br label %332

332:                                              ; preds = %323, %322
  %333 = phi i32 [ 0, %322 ], [ %331, %323 ]
  store i32 %333, ptr %18, align 4, !tbaa !9
  br label %334

334:                                              ; preds = %468, %332
  %335 = load i32, ptr %18, align 4, !tbaa !9
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.MImage, ptr %336, i32 0, i32 4
  %338 = load ptr, ptr %337, align 8, !tbaa !19
  %339 = icmp eq ptr %338, null
  br i1 %339, label %340, label %344

340:                                              ; preds = %334
  %341 = load ptr, ptr %4, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.MImage, ptr %341, i32 0, i32 1
  %343 = load i32, ptr %342, align 4, !tbaa !13
  br label %353

344:                                              ; preds = %334
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.MImage, ptr %345, i32 0, i32 4
  %347 = load ptr, ptr %346, align 8, !tbaa !19
  %348 = getelementptr inbounds %struct.MArray, ptr %347, i32 0, i32 2
  %349 = load ptr, ptr %348, align 8, !tbaa !15
  %350 = getelementptr inbounds i16, ptr %349, i64 3
  %351 = load i16, ptr %350, align 2, !tbaa !20
  %352 = sext i16 %351 to i32
  br label %353

353:                                              ; preds = %344, %340
  %354 = phi i32 [ %343, %340 ], [ %352, %344 ]
  %355 = icmp slt i32 %335, %354
  br i1 %355, label %357, label %356

356:                                              ; preds = %353
  store i32 20, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %471

357:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %358 = load ptr, ptr %4, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.MImage, ptr %358, i32 0, i32 4
  %360 = load ptr, ptr %359, align 8, !tbaa !19
  %361 = icmp eq ptr %360, null
  br i1 %361, label %362, label %363

362:                                              ; preds = %357
  br label %377

363:                                              ; preds = %357
  %364 = load ptr, ptr %4, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.MImage, ptr %364, i32 0, i32 4
  %366 = load ptr, ptr %365, align 8, !tbaa !19
  %367 = getelementptr inbounds %struct.MArray, ptr %366, i32 0, i32 2
  %368 = load ptr, ptr %367, align 8, !tbaa !15
  %369 = load i32, ptr %18, align 4, !tbaa !9
  %370 = load i32, ptr %18, align 4, !tbaa !9
  %371 = add nsw i32 %369, %370
  %372 = add nsw i32 %371, 4
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i16, ptr %368, i64 %373
  %375 = load i16, ptr %374, align 2, !tbaa !20
  %376 = sext i16 %375 to i32
  br label %377

377:                                              ; preds = %363, %362
  %378 = phi i32 [ 0, %362 ], [ %376, %363 ]
  store i32 %378, ptr %19, align 4, !tbaa !9
  br label %379

379:                                              ; preds = %464, %377
  %380 = load i32, ptr %19, align 4, !tbaa !9
  %381 = load ptr, ptr %4, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.MImage, ptr %381, i32 0, i32 4
  %383 = load ptr, ptr %382, align 8, !tbaa !19
  %384 = icmp eq ptr %383, null
  br i1 %384, label %385, label %389

385:                                              ; preds = %379
  %386 = load ptr, ptr %4, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.MImage, ptr %386, i32 0, i32 2
  %388 = load i32, ptr %387, align 8, !tbaa !14
  br label %403

389:                                              ; preds = %379
  %390 = load ptr, ptr %4, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.MImage, ptr %390, i32 0, i32 4
  %392 = load ptr, ptr %391, align 8, !tbaa !19
  %393 = getelementptr inbounds %struct.MArray, ptr %392, i32 0, i32 2
  %394 = load ptr, ptr %393, align 8, !tbaa !15
  %395 = load i32, ptr %18, align 4, !tbaa !9
  %396 = load i32, ptr %18, align 4, !tbaa !9
  %397 = add nsw i32 %395, %396
  %398 = add nsw i32 %397, 5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i16, ptr %394, i64 %399
  %401 = load i16, ptr %400, align 2, !tbaa !20
  %402 = sext i16 %401 to i32
  br label %403

403:                                              ; preds = %389, %385
  %404 = phi i32 [ %388, %385 ], [ %402, %389 ]
  %405 = icmp slt i32 %380, %404
  br i1 %405, label %407, label %406

406:                                              ; preds = %403
  store i32 23, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  br label %467

407:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.MImage, ptr %408, i32 0, i32 3
  %410 = getelementptr inbounds [4 x ptr], ptr %409, i64 0, i64 0
  %411 = load ptr, ptr %410, align 8, !tbaa !5
  %412 = load i32, ptr %18, align 4, !tbaa !9
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds ptr, ptr %411, i64 %413
  %415 = load ptr, ptr %414, align 8, !tbaa !5
  %416 = load i32, ptr %19, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i8, ptr %415, i64 %417
  %419 = load i8, ptr %418, align 1, !tbaa !15
  %420 = zext i8 %419 to i32
  %421 = ashr i32 %420, 4
  store i32 %421, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %422 = load ptr, ptr %4, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.MImage, ptr %422, i32 0, i32 3
  %424 = getelementptr inbounds [4 x ptr], ptr %423, i64 0, i64 1
  %425 = load ptr, ptr %424, align 8, !tbaa !5
  %426 = load i32, ptr %18, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds ptr, ptr %425, i64 %427
  %429 = load ptr, ptr %428, align 8, !tbaa !5
  %430 = load i32, ptr %19, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i8, ptr %429, i64 %431
  %433 = load i8, ptr %432, align 1, !tbaa !15
  %434 = zext i8 %433 to i32
  %435 = ashr i32 %434, 4
  store i32 %435, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %436 = load ptr, ptr %4, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.MImage, ptr %436, i32 0, i32 3
  %438 = getelementptr inbounds [4 x ptr], ptr %437, i64 0, i64 2
  %439 = load ptr, ptr %438, align 8, !tbaa !5
  %440 = load i32, ptr %18, align 4, !tbaa !9
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds ptr, ptr %439, i64 %441
  %443 = load ptr, ptr %442, align 8, !tbaa !5
  %444 = load i32, ptr %19, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds i8, ptr %443, i64 %445
  %447 = load i8, ptr %446, align 1, !tbaa !15
  %448 = zext i8 %447 to i32
  %449 = ashr i32 %448, 4
  store i32 %449, ptr %22, align 4, !tbaa !9
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.MArray, ptr %450, i32 0, i32 2
  %452 = load ptr, ptr %451, align 8, !tbaa !15
  %453 = load i32, ptr %22, align 4, !tbaa !9
  %454 = shl i32 %453, 8
  %455 = load i32, ptr %21, align 4, !tbaa !9
  %456 = shl i32 %455, 4
  %457 = add nsw i32 %454, %456
  %458 = load i32, ptr %20, align 4, !tbaa !9
  %459 = add nsw i32 %457, %458
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds i32, ptr %452, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !9
  %463 = add nsw i32 %462, 1
  store i32 %463, ptr %461, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %464

464:                                              ; preds = %407
  %465 = load i32, ptr %19, align 4, !tbaa !9
  %466 = add nsw i32 %465, 1
  store i32 %466, ptr %19, align 4, !tbaa !9
  br label %379, !llvm.loop !24

467:                                              ; preds = %406
  br label %468

468:                                              ; preds = %467
  %469 = load i32, ptr %18, align 4, !tbaa !9
  %470 = add nsw i32 %469, 1
  store i32 %470, ptr %18, align 4, !tbaa !9
  br label %334, !llvm.loop !25

471:                                              ; preds = %356
  br label %876

472:                                              ; preds = %268
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.MImage, ptr %473, i32 0, i32 0
  %475 = load i32, ptr %474, align 8, !tbaa !11
  %476 = icmp eq i32 %475, 4
  br i1 %476, label %477, label %693

477:                                              ; preds = %472
  br label %478

478:                                              ; preds = %477
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  store i32 3, ptr %23, align 4, !tbaa !9
  %479 = load i32, ptr %23, align 4, !tbaa !9
  %480 = icmp eq i32 %479, 1
  br i1 %480, label %481, label %483

481:                                              ; preds = %478
  %482 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %482, i32 noundef 65537, i32 noundef -1, ptr noundef null)
  br label %509

483:                                              ; preds = %478
  %484 = load i32, ptr %23, align 4, !tbaa !9
  %485 = icmp eq i32 %484, 2
  br i1 %485, label %486, label %488

486:                                              ; preds = %483
  %487 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %487, i32 noundef 65537, i32 noundef 4, ptr noundef null)
  br label %508

488:                                              ; preds = %483
  %489 = load i32, ptr %23, align 4, !tbaa !9
  %490 = icmp eq i32 %489, 3
  br i1 %490, label %491, label %498

491:                                              ; preds = %488
  %492 = load ptr, ptr %6, align 8, !tbaa !5
  %493 = load ptr, ptr %6, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.MArray, ptr %493, i32 0, i32 2
  %495 = load ptr, ptr %494, align 8, !tbaa !15
  %496 = ptrtoint ptr %495 to i64
  %497 = inttoptr i64 %496 to ptr
  call void @ArrayRedefine(ptr noundef %492, i32 noundef 65537, i32 noundef 4, ptr noundef %497)
  br label %507

498:                                              ; preds = %488
  br label %499

499:                                              ; preds = %498
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  store i32 1, ptr %24, align 4, !tbaa !9
  %500 = load i32, ptr %24, align 4, !tbaa !9
  %501 = icmp ne i32 %500, 0
  br i1 %501, label %502, label %504

502:                                              ; preds = %499
  %503 = load i32, ptr %24, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %503, i32 noundef -1, ptr noundef @.str, i32 noundef 106, ptr noundef @__FUNCTION__.mImageHist, ptr noundef @.str.2)
  br label %504

504:                                              ; preds = %502, %499
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  br label %505

505:                                              ; preds = %504
  br label %506

506:                                              ; preds = %505
  br label %507

507:                                              ; preds = %506, %491
  br label %508

508:                                              ; preds = %507, %486
  br label %509

509:                                              ; preds = %508, %481
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %510

510:                                              ; preds = %509
  br label %511

511:                                              ; preds = %510
  %512 = load ptr, ptr %6, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.MArray, ptr %512, i32 0, i32 2
  %514 = load ptr, ptr %513, align 8, !tbaa !15
  call void @llvm.memset.p0.i64(ptr align 4 %514, i8 0, i64 262144, i1 false)
  %515 = load i32, ptr %9, align 4, !tbaa !9
  %516 = load ptr, ptr %6, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.MArray, ptr %516, i32 0, i32 2
  %518 = load ptr, ptr %517, align 8, !tbaa !15
  %519 = getelementptr inbounds i32, ptr %518, i64 65536
  store i32 %515, ptr %519, align 4, !tbaa !9
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.MArray, ptr %520, i32 0, i32 0
  store i32 65536, ptr %521, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %522 = load ptr, ptr %4, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.MImage, ptr %522, i32 0, i32 4
  %524 = load ptr, ptr %523, align 8, !tbaa !19
  %525 = icmp eq ptr %524, null
  br i1 %525, label %526, label %527

526:                                              ; preds = %511
  br label %536

527:                                              ; preds = %511
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.MImage, ptr %528, i32 0, i32 4
  %530 = load ptr, ptr %529, align 8, !tbaa !19
  %531 = getelementptr inbounds %struct.MArray, ptr %530, i32 0, i32 2
  %532 = load ptr, ptr %531, align 8, !tbaa !15
  %533 = getelementptr inbounds i16, ptr %532, i64 2
  %534 = load i16, ptr %533, align 2, !tbaa !20
  %535 = sext i16 %534 to i32
  br label %536

536:                                              ; preds = %527, %526
  %537 = phi i32 [ 0, %526 ], [ %535, %527 ]
  store i32 %537, ptr %25, align 4, !tbaa !9
  br label %538

538:                                              ; preds = %689, %536
  %539 = load i32, ptr %25, align 4, !tbaa !9
  %540 = load ptr, ptr %4, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.MImage, ptr %540, i32 0, i32 4
  %542 = load ptr, ptr %541, align 8, !tbaa !19
  %543 = icmp eq ptr %542, null
  br i1 %543, label %544, label %548

544:                                              ; preds = %538
  %545 = load ptr, ptr %4, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.MImage, ptr %545, i32 0, i32 1
  %547 = load i32, ptr %546, align 4, !tbaa !13
  br label %557

548:                                              ; preds = %538
  %549 = load ptr, ptr %4, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.MImage, ptr %549, i32 0, i32 4
  %551 = load ptr, ptr %550, align 8, !tbaa !19
  %552 = getelementptr inbounds %struct.MArray, ptr %551, i32 0, i32 2
  %553 = load ptr, ptr %552, align 8, !tbaa !15
  %554 = getelementptr inbounds i16, ptr %553, i64 3
  %555 = load i16, ptr %554, align 2, !tbaa !20
  %556 = sext i16 %555 to i32
  br label %557

557:                                              ; preds = %548, %544
  %558 = phi i32 [ %547, %544 ], [ %556, %548 ]
  %559 = icmp slt i32 %539, %558
  br i1 %559, label %561, label %560

560:                                              ; preds = %557
  store i32 30, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %692

561:                                              ; preds = %557
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %562 = load ptr, ptr %4, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.MImage, ptr %562, i32 0, i32 4
  %564 = load ptr, ptr %563, align 8, !tbaa !19
  %565 = icmp eq ptr %564, null
  br i1 %565, label %566, label %567

566:                                              ; preds = %561
  br label %581

567:                                              ; preds = %561
  %568 = load ptr, ptr %4, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.MImage, ptr %568, i32 0, i32 4
  %570 = load ptr, ptr %569, align 8, !tbaa !19
  %571 = getelementptr inbounds %struct.MArray, ptr %570, i32 0, i32 2
  %572 = load ptr, ptr %571, align 8, !tbaa !15
  %573 = load i32, ptr %25, align 4, !tbaa !9
  %574 = load i32, ptr %25, align 4, !tbaa !9
  %575 = add nsw i32 %573, %574
  %576 = add nsw i32 %575, 4
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i16, ptr %572, i64 %577
  %579 = load i16, ptr %578, align 2, !tbaa !20
  %580 = sext i16 %579 to i32
  br label %581

581:                                              ; preds = %567, %566
  %582 = phi i32 [ 0, %566 ], [ %580, %567 ]
  store i32 %582, ptr %26, align 4, !tbaa !9
  br label %583

583:                                              ; preds = %685, %581
  %584 = load i32, ptr %26, align 4, !tbaa !9
  %585 = load ptr, ptr %4, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.MImage, ptr %585, i32 0, i32 4
  %587 = load ptr, ptr %586, align 8, !tbaa !19
  %588 = icmp eq ptr %587, null
  br i1 %588, label %589, label %593

589:                                              ; preds = %583
  %590 = load ptr, ptr %4, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.MImage, ptr %590, i32 0, i32 2
  %592 = load i32, ptr %591, align 8, !tbaa !14
  br label %607

593:                                              ; preds = %583
  %594 = load ptr, ptr %4, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.MImage, ptr %594, i32 0, i32 4
  %596 = load ptr, ptr %595, align 8, !tbaa !19
  %597 = getelementptr inbounds %struct.MArray, ptr %596, i32 0, i32 2
  %598 = load ptr, ptr %597, align 8, !tbaa !15
  %599 = load i32, ptr %25, align 4, !tbaa !9
  %600 = load i32, ptr %25, align 4, !tbaa !9
  %601 = add nsw i32 %599, %600
  %602 = add nsw i32 %601, 5
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds i16, ptr %598, i64 %603
  %605 = load i16, ptr %604, align 2, !tbaa !20
  %606 = sext i16 %605 to i32
  br label %607

607:                                              ; preds = %593, %589
  %608 = phi i32 [ %592, %589 ], [ %606, %593 ]
  %609 = icmp slt i32 %584, %608
  br i1 %609, label %611, label %610

610:                                              ; preds = %607
  store i32 33, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %688

611:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %612 = load ptr, ptr %4, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.MImage, ptr %612, i32 0, i32 3
  %614 = getelementptr inbounds [4 x ptr], ptr %613, i64 0, i64 0
  %615 = load ptr, ptr %614, align 8, !tbaa !5
  %616 = load i32, ptr %25, align 4, !tbaa !9
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds ptr, ptr %615, i64 %617
  %619 = load ptr, ptr %618, align 8, !tbaa !5
  %620 = load i32, ptr %26, align 4, !tbaa !9
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds i8, ptr %619, i64 %621
  %623 = load i8, ptr %622, align 1, !tbaa !15
  %624 = zext i8 %623 to i32
  %625 = ashr i32 %624, 4
  store i32 %625, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %626 = load ptr, ptr %4, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.MImage, ptr %626, i32 0, i32 3
  %628 = getelementptr inbounds [4 x ptr], ptr %627, i64 0, i64 1
  %629 = load ptr, ptr %628, align 8, !tbaa !5
  %630 = load i32, ptr %25, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds ptr, ptr %629, i64 %631
  %633 = load ptr, ptr %632, align 8, !tbaa !5
  %634 = load i32, ptr %26, align 4, !tbaa !9
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds i8, ptr %633, i64 %635
  %637 = load i8, ptr %636, align 1, !tbaa !15
  %638 = zext i8 %637 to i32
  %639 = ashr i32 %638, 4
  store i32 %639, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %640 = load ptr, ptr %4, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.MImage, ptr %640, i32 0, i32 3
  %642 = getelementptr inbounds [4 x ptr], ptr %641, i64 0, i64 2
  %643 = load ptr, ptr %642, align 8, !tbaa !5
  %644 = load i32, ptr %25, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds ptr, ptr %643, i64 %645
  %647 = load ptr, ptr %646, align 8, !tbaa !5
  %648 = load i32, ptr %26, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds i8, ptr %647, i64 %649
  %651 = load i8, ptr %650, align 1, !tbaa !15
  %652 = zext i8 %651 to i32
  %653 = ashr i32 %652, 4
  store i32 %653, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %654 = load ptr, ptr %4, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.MImage, ptr %654, i32 0, i32 3
  %656 = getelementptr inbounds [4 x ptr], ptr %655, i64 0, i64 3
  %657 = load ptr, ptr %656, align 8, !tbaa !5
  %658 = load i32, ptr %25, align 4, !tbaa !9
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds ptr, ptr %657, i64 %659
  %661 = load ptr, ptr %660, align 8, !tbaa !5
  %662 = load i32, ptr %26, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds i8, ptr %661, i64 %663
  %665 = load i8, ptr %664, align 1, !tbaa !15
  %666 = zext i8 %665 to i32
  %667 = ashr i32 %666, 4
  store i32 %667, ptr %30, align 4, !tbaa !9
  %668 = load ptr, ptr %6, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.MArray, ptr %668, i32 0, i32 2
  %670 = load ptr, ptr %669, align 8, !tbaa !15
  %671 = load i32, ptr %30, align 4, !tbaa !9
  %672 = shl i32 %671, 12
  %673 = load i32, ptr %29, align 4, !tbaa !9
  %674 = shl i32 %673, 8
  %675 = add nsw i32 %672, %674
  %676 = load i32, ptr %28, align 4, !tbaa !9
  %677 = shl i32 %676, 4
  %678 = add nsw i32 %675, %677
  %679 = load i32, ptr %27, align 4, !tbaa !9
  %680 = add nsw i32 %678, %679
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds i32, ptr %670, i64 %681
  %683 = load i32, ptr %682, align 4, !tbaa !9
  %684 = add nsw i32 %683, 1
  store i32 %684, ptr %682, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %685

685:                                              ; preds = %611
  %686 = load i32, ptr %26, align 4, !tbaa !9
  %687 = add nsw i32 %686, 1
  store i32 %687, ptr %26, align 4, !tbaa !9
  br label %583, !llvm.loop !26

688:                                              ; preds = %610
  br label %689

689:                                              ; preds = %688
  %690 = load i32, ptr %25, align 4, !tbaa !9
  %691 = add nsw i32 %690, 1
  store i32 %691, ptr %25, align 4, !tbaa !9
  br label %538, !llvm.loop !27

692:                                              ; preds = %560
  br label %875

693:                                              ; preds = %472
  br label %694

694:                                              ; preds = %693
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  store i32 3, ptr %31, align 4, !tbaa !9
  %695 = load i32, ptr %31, align 4, !tbaa !9
  %696 = icmp eq i32 %695, 1
  br i1 %696, label %697, label %699

697:                                              ; preds = %694
  %698 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %698, i32 noundef 1025, i32 noundef -1, ptr noundef null)
  br label %725

699:                                              ; preds = %694
  %700 = load i32, ptr %31, align 4, !tbaa !9
  %701 = icmp eq i32 %700, 2
  br i1 %701, label %702, label %704

702:                                              ; preds = %699
  %703 = load ptr, ptr %6, align 8, !tbaa !5
  call void @ArrayRedefine(ptr noundef %703, i32 noundef 1025, i32 noundef 4, ptr noundef null)
  br label %724

704:                                              ; preds = %699
  %705 = load i32, ptr %31, align 4, !tbaa !9
  %706 = icmp eq i32 %705, 3
  br i1 %706, label %707, label %714

707:                                              ; preds = %704
  %708 = load ptr, ptr %6, align 8, !tbaa !5
  %709 = load ptr, ptr %6, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.MArray, ptr %709, i32 0, i32 2
  %711 = load ptr, ptr %710, align 8, !tbaa !15
  %712 = ptrtoint ptr %711 to i64
  %713 = inttoptr i64 %712 to ptr
  call void @ArrayRedefine(ptr noundef %708, i32 noundef 1025, i32 noundef 4, ptr noundef %713)
  br label %723

714:                                              ; preds = %704
  br label %715

715:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  store i32 1, ptr %32, align 4, !tbaa !9
  %716 = load i32, ptr %32, align 4, !tbaa !9
  %717 = icmp ne i32 %716, 0
  br i1 %717, label %718, label %720

718:                                              ; preds = %715
  %719 = load i32, ptr %32, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %719, i32 noundef -1, ptr noundef @.str, i32 noundef 117, ptr noundef @__FUNCTION__.mImageHist, ptr noundef @.str.2)
  br label %720

720:                                              ; preds = %718, %715
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %721

721:                                              ; preds = %720
  br label %722

722:                                              ; preds = %721
  br label %723

723:                                              ; preds = %722, %707
  br label %724

724:                                              ; preds = %723, %702
  br label %725

725:                                              ; preds = %724, %697
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %726

726:                                              ; preds = %725
  br label %727

727:                                              ; preds = %726
  %728 = load ptr, ptr %6, align 8, !tbaa !5
  %729 = getelementptr inbounds %struct.MArray, ptr %728, i32 0, i32 2
  %730 = load ptr, ptr %729, align 8, !tbaa !15
  call void @llvm.memset.p0.i64(ptr align 4 %730, i8 0, i64 4096, i1 false)
  %731 = load i32, ptr %9, align 4, !tbaa !9
  %732 = load ptr, ptr %6, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.MArray, ptr %732, i32 0, i32 2
  %734 = load ptr, ptr %733, align 8, !tbaa !15
  %735 = getelementptr inbounds i32, ptr %734, i64 1024
  store i32 %731, ptr %735, align 4, !tbaa !9
  %736 = load ptr, ptr %6, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.MArray, ptr %736, i32 0, i32 0
  store i32 1024, ptr %737, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %738 = load ptr, ptr %4, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.MImage, ptr %738, i32 0, i32 4
  %740 = load ptr, ptr %739, align 8, !tbaa !19
  %741 = icmp eq ptr %740, null
  br i1 %741, label %742, label %743

742:                                              ; preds = %727
  br label %752

743:                                              ; preds = %727
  %744 = load ptr, ptr %4, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.MImage, ptr %744, i32 0, i32 4
  %746 = load ptr, ptr %745, align 8, !tbaa !19
  %747 = getelementptr inbounds %struct.MArray, ptr %746, i32 0, i32 2
  %748 = load ptr, ptr %747, align 8, !tbaa !15
  %749 = getelementptr inbounds i16, ptr %748, i64 2
  %750 = load i16, ptr %749, align 2, !tbaa !20
  %751 = sext i16 %750 to i32
  br label %752

752:                                              ; preds = %743, %742
  %753 = phi i32 [ 0, %742 ], [ %751, %743 ]
  store i32 %753, ptr %33, align 4, !tbaa !9
  br label %754

754:                                              ; preds = %871, %752
  %755 = load i32, ptr %33, align 4, !tbaa !9
  %756 = load ptr, ptr %4, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.MImage, ptr %756, i32 0, i32 4
  %758 = load ptr, ptr %757, align 8, !tbaa !19
  %759 = icmp eq ptr %758, null
  br i1 %759, label %760, label %764

760:                                              ; preds = %754
  %761 = load ptr, ptr %4, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.MImage, ptr %761, i32 0, i32 1
  %763 = load i32, ptr %762, align 4, !tbaa !13
  br label %773

764:                                              ; preds = %754
  %765 = load ptr, ptr %4, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.MImage, ptr %765, i32 0, i32 4
  %767 = load ptr, ptr %766, align 8, !tbaa !19
  %768 = getelementptr inbounds %struct.MArray, ptr %767, i32 0, i32 2
  %769 = load ptr, ptr %768, align 8, !tbaa !15
  %770 = getelementptr inbounds i16, ptr %769, i64 3
  %771 = load i16, ptr %770, align 2, !tbaa !20
  %772 = sext i16 %771 to i32
  br label %773

773:                                              ; preds = %764, %760
  %774 = phi i32 [ %763, %760 ], [ %772, %764 ]
  %775 = icmp slt i32 %755, %774
  br i1 %775, label %777, label %776

776:                                              ; preds = %773
  store i32 40, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %874

777:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %778 = load ptr, ptr %4, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.MImage, ptr %778, i32 0, i32 4
  %780 = load ptr, ptr %779, align 8, !tbaa !19
  %781 = icmp eq ptr %780, null
  br i1 %781, label %782, label %783

782:                                              ; preds = %777
  br label %797

783:                                              ; preds = %777
  %784 = load ptr, ptr %4, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.MImage, ptr %784, i32 0, i32 4
  %786 = load ptr, ptr %785, align 8, !tbaa !19
  %787 = getelementptr inbounds %struct.MArray, ptr %786, i32 0, i32 2
  %788 = load ptr, ptr %787, align 8, !tbaa !15
  %789 = load i32, ptr %33, align 4, !tbaa !9
  %790 = load i32, ptr %33, align 4, !tbaa !9
  %791 = add nsw i32 %789, %790
  %792 = add nsw i32 %791, 4
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds i16, ptr %788, i64 %793
  %795 = load i16, ptr %794, align 2, !tbaa !20
  %796 = sext i16 %795 to i32
  br label %797

797:                                              ; preds = %783, %782
  %798 = phi i32 [ 0, %782 ], [ %796, %783 ]
  store i32 %798, ptr %34, align 4, !tbaa !9
  br label %799

799:                                              ; preds = %867, %797
  %800 = load i32, ptr %34, align 4, !tbaa !9
  %801 = load ptr, ptr %4, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.MImage, ptr %801, i32 0, i32 4
  %803 = load ptr, ptr %802, align 8, !tbaa !19
  %804 = icmp eq ptr %803, null
  br i1 %804, label %805, label %809

805:                                              ; preds = %799
  %806 = load ptr, ptr %4, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.MImage, ptr %806, i32 0, i32 2
  %808 = load i32, ptr %807, align 8, !tbaa !14
  br label %823

809:                                              ; preds = %799
  %810 = load ptr, ptr %4, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.MImage, ptr %810, i32 0, i32 4
  %812 = load ptr, ptr %811, align 8, !tbaa !19
  %813 = getelementptr inbounds %struct.MArray, ptr %812, i32 0, i32 2
  %814 = load ptr, ptr %813, align 8, !tbaa !15
  %815 = load i32, ptr %33, align 4, !tbaa !9
  %816 = load i32, ptr %33, align 4, !tbaa !9
  %817 = add nsw i32 %815, %816
  %818 = add nsw i32 %817, 5
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds i16, ptr %814, i64 %819
  %821 = load i16, ptr %820, align 2, !tbaa !20
  %822 = sext i16 %821 to i32
  br label %823

823:                                              ; preds = %809, %805
  %824 = phi i32 [ %808, %805 ], [ %822, %809 ]
  %825 = icmp slt i32 %800, %824
  br i1 %825, label %827, label %826

826:                                              ; preds = %823
  store i32 43, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %870

827:                                              ; preds = %823
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %828 = load ptr, ptr %4, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.MImage, ptr %828, i32 0, i32 3
  %830 = getelementptr inbounds [4 x ptr], ptr %829, i64 0, i64 0
  %831 = load ptr, ptr %830, align 8, !tbaa !5
  %832 = load i32, ptr %33, align 4, !tbaa !9
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds ptr, ptr %831, i64 %833
  %835 = load ptr, ptr %834, align 8, !tbaa !5
  %836 = load i32, ptr %34, align 4, !tbaa !9
  %837 = sext i32 %836 to i64
  %838 = getelementptr inbounds i8, ptr %835, i64 %837
  %839 = load i8, ptr %838, align 1, !tbaa !15
  %840 = zext i8 %839 to i32
  %841 = ashr i32 %840, 3
  store i32 %841, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %842 = load ptr, ptr %4, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.MImage, ptr %842, i32 0, i32 3
  %844 = getelementptr inbounds [4 x ptr], ptr %843, i64 0, i64 1
  %845 = load ptr, ptr %844, align 8, !tbaa !5
  %846 = load i32, ptr %33, align 4, !tbaa !9
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds ptr, ptr %845, i64 %847
  %849 = load ptr, ptr %848, align 8, !tbaa !5
  %850 = load i32, ptr %34, align 4, !tbaa !9
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds i8, ptr %849, i64 %851
  %853 = load i8, ptr %852, align 1, !tbaa !15
  %854 = zext i8 %853 to i32
  %855 = ashr i32 %854, 3
  store i32 %855, ptr %36, align 4, !tbaa !9
  %856 = load ptr, ptr %6, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.MArray, ptr %856, i32 0, i32 2
  %858 = load ptr, ptr %857, align 8, !tbaa !15
  %859 = load i32, ptr %36, align 4, !tbaa !9
  %860 = shl i32 %859, 5
  %861 = load i32, ptr %35, align 4, !tbaa !9
  %862 = add nsw i32 %860, %861
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds i32, ptr %858, i64 %863
  %865 = load i32, ptr %864, align 4, !tbaa !9
  %866 = add nsw i32 %865, 1
  store i32 %866, ptr %864, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %867

867:                                              ; preds = %827
  %868 = load i32, ptr %34, align 4, !tbaa !9
  %869 = add nsw i32 %868, 1
  store i32 %869, ptr %34, align 4, !tbaa !9
  br label %799, !llvm.loop !28

870:                                              ; preds = %826
  br label %871

871:                                              ; preds = %870
  %872 = load i32, ptr %33, align 4, !tbaa !9
  %873 = add nsw i32 %872, 1
  store i32 %873, ptr %33, align 4, !tbaa !9
  br label %754, !llvm.loop !29

874:                                              ; preds = %776
  br label %875

875:                                              ; preds = %874, %692
  br label %876

876:                                              ; preds = %875, %471
  br label %877

877:                                              ; preds = %876, %267
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  ret void
}

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

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

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

declare void @ArrayRedefine(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #2

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

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

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

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


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

@.str = external hidden unnamed_addr constant [83 x i8], align 1
@__FUNCTION__.mImageHist = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @mImageHist(ptr noundef %0, i32 noundef %1, ptr noundef %2) local_unnamed_addr #0 {
  %magicptr = ptrtoint ptr %0 to i64
  switch i64 %magicptr, label %4 [
    i64 -1, label %.thread
    i64 0, label %.thread
  ]

4:                                                ; preds = %3
  %5 = getelementptr inbounds i8, ptr %0, i64 16
  %6 = icmp eq ptr %5, inttoptr (i64 -1 to ptr)
  br i1 %6, label %.thread, label %7

7:                                                ; preds = %4
  %8 = load i32, ptr %0, align 8, !tbaa !5
  %9 = icmp slt i32 %8, 1
  br i1 %9, label %.thread, label %10

10:                                               ; preds = %7
  %11 = getelementptr inbounds i8, ptr %0, i64 4
  %12 = load i32, ptr %11, align 4, !tbaa !11
  %13 = icmp slt i32 %12, 1
  br i1 %13, label %.thread, label %14

14:                                               ; preds = %10
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = load i32, ptr %15, align 8, !tbaa !12
  %17 = icmp sgt i32 %16, 0
  br i1 %17, label %18, label %.thread

.thread:                                          ; preds = %4, %7, %10, %3, %3, %14
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 78, ptr noundef nonnull @__FUNCTION__.mImageHist, ptr noundef nonnull @.str.1) #3
  %.pre = load i32, ptr %0, align 8, !tbaa !5
  br label %18

18:                                               ; preds = %.thread, %14
  %19 = phi i32 [ %.pre, %.thread ], [ %8, %14 ]
  %.not = icmp sgt i32 %19, %1
  br i1 %.not, label %21, label %20

20:                                               ; preds = %18
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 79, ptr noundef nonnull @__FUNCTION__.mImageHist, ptr noundef nonnull @.str.1) #3
  %.pr = load i32, ptr %0, align 8, !tbaa !5
  br label %21

21:                                               ; preds = %20, %18
  %22 = phi i32 [ %.pr, %20 ], [ %19, %18 ]
  %23 = icmp eq i32 %22, 1
  %spec.select = select i1 %23, i32 0, i32 %1
  %24 = icmp sgt i32 %spec.select, -1
  %25 = getelementptr inbounds i8, ptr %2, i64 8
  %26 = load ptr, ptr %25, align 8, !tbaa !13
  br i1 %24, label %27, label %100

27:                                               ; preds = %21
  tail call void @ArrayRedefine(ptr noundef %2, i32 noundef 257, i32 noundef 4, ptr noundef %26) #3
  %28 = load ptr, ptr %25, align 8, !tbaa !13
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1024) %28, i8 0, i64 1024, i1 false)
  %29 = load ptr, ptr %25, align 8, !tbaa !13
  %30 = getelementptr inbounds i8, ptr %29, i64 1024
  store i32 -869027629, ptr %30, align 4, !tbaa !14
  store i32 256, ptr %2, align 8, !tbaa !15
  %31 = getelementptr inbounds i8, ptr %0, i64 16
  %32 = zext nneg i32 %spec.select to i64
  %33 = getelementptr inbounds [4 x ptr], ptr %31, i64 0, i64 %32
  %34 = load ptr, ptr %33, align 8, !tbaa !18
  %35 = getelementptr inbounds i8, ptr %0, i64 48
  %36 = load ptr, ptr %35, align 8, !tbaa !19
  %37 = icmp eq ptr %36, null
  br i1 %37, label %44, label %38

38:                                               ; preds = %27
  %39 = getelementptr inbounds i8, ptr %36, i64 8
  %40 = load ptr, ptr %39, align 8, !tbaa !13
  %41 = getelementptr inbounds i8, ptr %40, i64 4
  %42 = load i16, ptr %41, align 2, !tbaa !20
  %43 = sext i16 %42 to i64
  br label %44

44:                                               ; preds = %27, %38
  %45 = phi i64 [ %43, %38 ], [ 0, %27 ]
  %46 = getelementptr inbounds i8, ptr %36, i64 8
  %47 = getelementptr inbounds i8, ptr %0, i64 4
  %48 = getelementptr inbounds i8, ptr %0, i64 8
  br label %49

49:                                               ; preds = %.split257.us, %44
  %indvars.iv304 = phi i64 [ %indvars.iv.next305, %.split257.us ], [ %45, %44 ]
  br i1 %37, label %50, label %.thread223

50:                                               ; preds = %49
  %51 = load i32, ptr %47, align 4, !tbaa !11
  %52 = sext i32 %51 to i64
  %53 = icmp slt i64 %indvars.iv304, %52
  br i1 %53, label %.split255.us, label %.loopexit

.thread223:                                       ; preds = %49
  %54 = load ptr, ptr %46, align 8, !tbaa !13
  %55 = getelementptr inbounds i8, ptr %54, i64 6
  %56 = load i16, ptr %55, align 2, !tbaa !20
  %57 = sext i16 %56 to i64
  %58 = icmp slt i64 %indvars.iv304, %57
  br i1 %58, label %.split255, label %.loopexit

.split255.us:                                     ; preds = %50
  %59 = load i32, ptr %48, align 8, !tbaa !12
  %60 = icmp sgt i32 %59, 0
  br i1 %60, label %.lr.ph261, label %.split257.us

.lr.ph261:                                        ; preds = %.split255.us
  %61 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv304
  %62 = load ptr, ptr %61, align 8, !tbaa !18
  br label %63

63:                                               ; preds = %.lr.ph261, %63
  %indvars.iv301 = phi i64 [ 0, %.lr.ph261 ], [ %indvars.iv.next302, %63 ]
  %64 = load ptr, ptr %25, align 8, !tbaa !13
  %65 = getelementptr inbounds i8, ptr %62, i64 %indvars.iv301
  %66 = load i8, ptr %65, align 1, !tbaa !13
  %67 = zext i8 %66 to i64
  %68 = getelementptr inbounds i32, ptr %64, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !14
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr %68, align 4, !tbaa !14
  %indvars.iv.next302 = add nuw nsw i64 %indvars.iv301, 1
  %71 = load i32, ptr %48, align 8, !tbaa !12
  %72 = sext i32 %71 to i64
  %73 = icmp slt i64 %indvars.iv.next302, %72
  br i1 %73, label %63, label %.split257.us, !llvm.loop !21

.split255:                                        ; preds = %.thread223
  %74 = shl nsw i64 %indvars.iv304, 1
  %75 = getelementptr i16, ptr %54, i64 %74
  %76 = getelementptr i8, ptr %75, i64 8
  %77 = load i16, ptr %76, align 2, !tbaa !20
  %78 = load ptr, ptr %46, align 8, !tbaa !13
  %79 = getelementptr i16, ptr %78, i64 %74
  %80 = getelementptr i8, ptr %79, i64 10
  %81 = load i16, ptr %80, align 2, !tbaa !20
  %82 = icmp slt i16 %77, %81
  br i1 %82, label %.lr.ph259, label %.split257.us

.lr.ph259:                                        ; preds = %.split255
  %83 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv304
  %84 = load ptr, ptr %83, align 8, !tbaa !18
  %85 = sext i16 %77 to i64
  br label %86

.split257.us:                                     ; preds = %86, %63, %.split255, %.split255.us
  %indvars.iv.next305 = add nsw i64 %indvars.iv304, 1
  br label %49, !llvm.loop !23

86:                                               ; preds = %.lr.ph259, %86
  %indvars.iv298 = phi i64 [ %85, %.lr.ph259 ], [ %indvars.iv.next299, %86 ]
  %87 = load ptr, ptr %25, align 8, !tbaa !13
  %88 = getelementptr inbounds i8, ptr %84, i64 %indvars.iv298
  %89 = load i8, ptr %88, align 1, !tbaa !13
  %90 = zext i8 %89 to i64
  %91 = getelementptr inbounds i32, ptr %87, i64 %90
  %92 = load i32, ptr %91, align 4, !tbaa !14
  %93 = add nsw i32 %92, 1
  store i32 %93, ptr %91, align 4, !tbaa !14
  %indvars.iv.next299 = add nsw i64 %indvars.iv298, 1
  %94 = load ptr, ptr %46, align 8, !tbaa !13
  %95 = getelementptr i16, ptr %94, i64 %74
  %96 = getelementptr i8, ptr %95, i64 10
  %97 = load i16, ptr %96, align 2, !tbaa !20
  %98 = sext i16 %97 to i64
  %99 = icmp slt i64 %indvars.iv.next299, %98
  br i1 %99, label %86, label %.split257.us, !llvm.loop !21

100:                                              ; preds = %21
  %101 = getelementptr inbounds i8, ptr %0, i64 48
  switch i32 %22, label %347 [
    i32 3, label %102
    i32 4, label %211
  ]

102:                                              ; preds = %100
  tail call void @ArrayRedefine(ptr noundef %2, i32 noundef 4097, i32 noundef 4, ptr noundef %26) #3
  %103 = load ptr, ptr %25, align 8, !tbaa !13
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16384) %103, i8 0, i64 16384, i1 false)
  %104 = load ptr, ptr %25, align 8, !tbaa !13
  %105 = getelementptr inbounds i8, ptr %104, i64 16384
  store i32 -869027629, ptr %105, align 4, !tbaa !14
  store i32 4096, ptr %2, align 8, !tbaa !15
  %106 = load ptr, ptr %101, align 8, !tbaa !19
  %107 = icmp eq ptr %106, null
  br i1 %107, label %114, label %108

108:                                              ; preds = %102
  %109 = getelementptr inbounds i8, ptr %106, i64 8
  %110 = load ptr, ptr %109, align 8, !tbaa !13
  %111 = getelementptr inbounds i8, ptr %110, i64 4
  %112 = load i16, ptr %111, align 2, !tbaa !20
  %113 = sext i16 %112 to i64
  br label %114

114:                                              ; preds = %102, %108
  %115 = phi i64 [ %113, %108 ], [ 0, %102 ]
  %116 = getelementptr inbounds i8, ptr %106, i64 8
  %117 = getelementptr inbounds i8, ptr %0, i64 4
  %118 = getelementptr inbounds i8, ptr %0, i64 8
  %119 = getelementptr inbounds i8, ptr %0, i64 16
  %120 = getelementptr inbounds i8, ptr %0, i64 24
  %121 = getelementptr inbounds i8, ptr %0, i64 32
  br label %122

122:                                              ; preds = %.split243.us, %114
  %indvars.iv286 = phi i64 [ %indvars.iv.next287, %.split243.us ], [ %115, %114 ]
  br i1 %107, label %123, label %.thread225

123:                                              ; preds = %122
  %124 = load i32, ptr %117, align 4, !tbaa !11
  %125 = sext i32 %124 to i64
  %126 = icmp slt i64 %indvars.iv286, %125
  br i1 %126, label %.split.us, label %.loopexit

.thread225:                                       ; preds = %122
  %127 = load ptr, ptr %116, align 8, !tbaa !13
  %128 = getelementptr inbounds i8, ptr %127, i64 6
  %129 = load i16, ptr %128, align 2, !tbaa !20
  %130 = sext i16 %129 to i64
  %131 = icmp slt i64 %indvars.iv286, %130
  br i1 %131, label %.split, label %.loopexit

.split.us:                                        ; preds = %123
  %132 = load i32, ptr %118, align 8, !tbaa !12
  %133 = icmp sgt i32 %132, 0
  br i1 %133, label %.lr.ph247, label %.split243.us

.lr.ph247:                                        ; preds = %.split.us
  %134 = load ptr, ptr %119, align 8, !tbaa !18
  %135 = getelementptr inbounds ptr, ptr %134, i64 %indvars.iv286
  %136 = load ptr, ptr %135, align 8, !tbaa !18
  %137 = load ptr, ptr %120, align 8, !tbaa !18
  %138 = getelementptr inbounds ptr, ptr %137, i64 %indvars.iv286
  %139 = load ptr, ptr %138, align 8, !tbaa !18
  %140 = load ptr, ptr %121, align 8, !tbaa !18
  %141 = getelementptr inbounds ptr, ptr %140, i64 %indvars.iv286
  %142 = load ptr, ptr %141, align 8, !tbaa !18
  br label %143

143:                                              ; preds = %.lr.ph247, %143
  %indvars.iv283 = phi i64 [ 0, %.lr.ph247 ], [ %indvars.iv.next284, %143 ]
  %144 = getelementptr inbounds i8, ptr %136, i64 %indvars.iv283
  %145 = load i8, ptr %144, align 1, !tbaa !13
  %146 = lshr i8 %145, 4
  %147 = zext nneg i8 %146 to i64
  %148 = getelementptr inbounds i8, ptr %139, i64 %indvars.iv283
  %149 = load i8, ptr %148, align 1, !tbaa !13
  %150 = and i8 %149, -16
  %151 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv283
  %152 = load i8, ptr %151, align 1, !tbaa !13
  %153 = lshr i8 %152, 4
  %154 = zext nneg i8 %153 to i64
  %155 = load ptr, ptr %25, align 8, !tbaa !13
  %156 = shl nuw nsw i64 %154, 8
  %157 = zext i8 %150 to i64
  %158 = or disjoint i64 %156, %157
  %159 = or disjoint i64 %158, %147
  %160 = getelementptr inbounds i32, ptr %155, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !14
  %162 = add nsw i32 %161, 1
  store i32 %162, ptr %160, align 4, !tbaa !14
  %indvars.iv.next284 = add nuw nsw i64 %indvars.iv283, 1
  %163 = load i32, ptr %118, align 8, !tbaa !12
  %164 = sext i32 %163 to i64
  %165 = icmp slt i64 %indvars.iv.next284, %164
  br i1 %165, label %143, label %.split243.us, !llvm.loop !24

.split:                                           ; preds = %.thread225
  %166 = shl nsw i64 %indvars.iv286, 1
  %167 = getelementptr i16, ptr %127, i64 %166
  %168 = getelementptr i8, ptr %167, i64 8
  %169 = load i16, ptr %168, align 2, !tbaa !20
  %170 = load ptr, ptr %116, align 8, !tbaa !13
  %171 = getelementptr i16, ptr %170, i64 %166
  %172 = getelementptr i8, ptr %171, i64 10
  %173 = load i16, ptr %172, align 2, !tbaa !20
  %174 = icmp slt i16 %169, %173
  br i1 %174, label %.lr.ph245, label %.split243.us

.lr.ph245:                                        ; preds = %.split
  %175 = load ptr, ptr %119, align 8, !tbaa !18
  %176 = getelementptr inbounds ptr, ptr %175, i64 %indvars.iv286
  %177 = load ptr, ptr %176, align 8, !tbaa !18
  %178 = load ptr, ptr %120, align 8, !tbaa !18
  %179 = getelementptr inbounds ptr, ptr %178, i64 %indvars.iv286
  %180 = load ptr, ptr %179, align 8, !tbaa !18
  %181 = load ptr, ptr %121, align 8, !tbaa !18
  %182 = getelementptr inbounds ptr, ptr %181, i64 %indvars.iv286
  %183 = load ptr, ptr %182, align 8, !tbaa !18
  %184 = sext i16 %169 to i64
  br label %185

.split243.us:                                     ; preds = %185, %143, %.split, %.split.us
  %indvars.iv.next287 = add nsw i64 %indvars.iv286, 1
  br label %122, !llvm.loop !25

185:                                              ; preds = %.lr.ph245, %185
  %indvars.iv280 = phi i64 [ %184, %.lr.ph245 ], [ %indvars.iv.next281, %185 ]
  %186 = getelementptr inbounds i8, ptr %177, i64 %indvars.iv280
  %187 = load i8, ptr %186, align 1, !tbaa !13
  %188 = lshr i8 %187, 4
  %189 = zext nneg i8 %188 to i64
  %190 = getelementptr inbounds i8, ptr %180, i64 %indvars.iv280
  %191 = load i8, ptr %190, align 1, !tbaa !13
  %192 = and i8 %191, -16
  %193 = getelementptr inbounds i8, ptr %183, i64 %indvars.iv280
  %194 = load i8, ptr %193, align 1, !tbaa !13
  %195 = lshr i8 %194, 4
  %196 = zext nneg i8 %195 to i64
  %197 = load ptr, ptr %25, align 8, !tbaa !13
  %198 = shl nuw nsw i64 %196, 8
  %199 = zext i8 %192 to i64
  %200 = or disjoint i64 %198, %199
  %201 = or disjoint i64 %200, %189
  %202 = getelementptr inbounds i32, ptr %197, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !14
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %202, align 4, !tbaa !14
  %indvars.iv.next281 = add nsw i64 %indvars.iv280, 1
  %205 = load ptr, ptr %116, align 8, !tbaa !13
  %206 = getelementptr i16, ptr %205, i64 %166
  %207 = getelementptr i8, ptr %206, i64 10
  %208 = load i16, ptr %207, align 2, !tbaa !20
  %209 = sext i16 %208 to i64
  %210 = icmp slt i64 %indvars.iv.next281, %209
  br i1 %210, label %185, label %.split243.us, !llvm.loop !24

211:                                              ; preds = %100
  tail call void @ArrayRedefine(ptr noundef %2, i32 noundef 65537, i32 noundef 4, ptr noundef %26) #3
  %212 = load ptr, ptr %25, align 8, !tbaa !13
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(262144) %212, i8 0, i64 262144, i1 false)
  %213 = load ptr, ptr %25, align 8, !tbaa !13
  %214 = getelementptr inbounds i8, ptr %213, i64 262144
  store i32 -869027629, ptr %214, align 4, !tbaa !14
  store i32 65536, ptr %2, align 8, !tbaa !15
  %215 = load ptr, ptr %101, align 8, !tbaa !19
  %216 = icmp eq ptr %215, null
  br i1 %216, label %.split239.us, label %.split239

.split239.us:                                     ; preds = %211
  %217 = getelementptr inbounds i8, ptr %0, i64 4
  %218 = getelementptr inbounds i8, ptr %0, i64 8
  %219 = getelementptr inbounds i8, ptr %0, i64 16
  %220 = getelementptr inbounds i8, ptr %0, i64 24
  %221 = getelementptr inbounds i8, ptr %0, i64 32
  %222 = getelementptr inbounds i8, ptr %0, i64 40
  %223 = load i32, ptr %217, align 4, !tbaa !11
  %224 = icmp sgt i32 %223, 0
  br i1 %224, label %.split.us.us.lr.ph, label %.loopexit

.split.us.us.lr.ph:                               ; preds = %.split239.us
  %225 = load i32, ptr %218, align 8, !tbaa !12
  %226 = icmp sgt i32 %225, 0
  br i1 %226, label %.split.us.us, label %.loopexit

.split.us.us:                                     ; preds = %.split.us.us.lr.ph, %.split235.us.us
  %227 = phi i32 [ %259, %.split235.us.us ], [ %223, %.split.us.us.lr.ph ]
  %228 = phi i32 [ %260, %.split235.us.us ], [ %225, %.split.us.us.lr.ph ]
  %indvars.iv277 = phi i64 [ %indvars.iv.next278, %.split235.us.us ], [ 0, %.split.us.us.lr.ph ]
  %229 = icmp sgt i32 %228, 0
  br i1 %229, label %.lr.ph238.us, label %.split235.us.us

230:                                              ; preds = %.lr.ph238.us, %230
  %indvars.iv274 = phi i64 [ 0, %.lr.ph238.us ], [ %indvars.iv.next275, %230 ]
  %231 = getelementptr inbounds i8, ptr %265, i64 %indvars.iv274
  %232 = load i8, ptr %231, align 1, !tbaa !13
  %233 = lshr i8 %232, 4
  %234 = zext nneg i8 %233 to i64
  %235 = getelementptr inbounds i8, ptr %268, i64 %indvars.iv274
  %236 = load i8, ptr %235, align 1, !tbaa !13
  %237 = and i8 %236, -16
  %238 = getelementptr inbounds i8, ptr %271, i64 %indvars.iv274
  %239 = load i8, ptr %238, align 1, !tbaa !13
  %240 = lshr i8 %239, 4
  %241 = zext nneg i8 %240 to i64
  %242 = getelementptr inbounds i8, ptr %274, i64 %indvars.iv274
  %243 = load i8, ptr %242, align 1, !tbaa !13
  %244 = lshr i8 %243, 4
  %245 = zext nneg i8 %244 to i64
  %246 = load ptr, ptr %25, align 8, !tbaa !13
  %247 = shl nuw nsw i64 %245, 12
  %248 = shl nuw nsw i64 %241, 8
  %249 = or disjoint i64 %247, %248
  %250 = zext i8 %237 to i64
  %251 = or disjoint i64 %249, %250
  %252 = or disjoint i64 %251, %234
  %253 = getelementptr inbounds i32, ptr %246, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !14
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %253, align 4, !tbaa !14
  %indvars.iv.next275 = add nuw nsw i64 %indvars.iv274, 1
  %256 = load i32, ptr %218, align 8, !tbaa !12
  %257 = sext i32 %256 to i64
  %258 = icmp slt i64 %indvars.iv.next275, %257
  br i1 %258, label %230, label %.split235.us.us.loopexit, !llvm.loop !26

.split235.us.us.loopexit:                         ; preds = %230
  %.pre307 = load i32, ptr %217, align 4, !tbaa !11
  br label %.split235.us.us

.split235.us.us:                                  ; preds = %.split235.us.us.loopexit, %.split.us.us
  %259 = phi i32 [ %.pre307, %.split235.us.us.loopexit ], [ %227, %.split.us.us ]
  %260 = phi i32 [ %256, %.split235.us.us.loopexit ], [ %228, %.split.us.us ]
  %indvars.iv.next278 = add nuw nsw i64 %indvars.iv277, 1
  %261 = sext i32 %259 to i64
  %262 = icmp slt i64 %indvars.iv.next278, %261
  br i1 %262, label %.split.us.us, label %.loopexit, !llvm.loop !27

.lr.ph238.us:                                     ; preds = %.split.us.us
  %263 = load ptr, ptr %219, align 8, !tbaa !18
  %264 = getelementptr inbounds ptr, ptr %263, i64 %indvars.iv277
  %265 = load ptr, ptr %264, align 8, !tbaa !18
  %266 = load ptr, ptr %220, align 8, !tbaa !18
  %267 = getelementptr inbounds ptr, ptr %266, i64 %indvars.iv277
  %268 = load ptr, ptr %267, align 8, !tbaa !18
  %269 = load ptr, ptr %221, align 8, !tbaa !18
  %270 = getelementptr inbounds ptr, ptr %269, i64 %indvars.iv277
  %271 = load ptr, ptr %270, align 8, !tbaa !18
  %272 = load ptr, ptr %222, align 8, !tbaa !18
  %273 = getelementptr inbounds ptr, ptr %272, i64 %indvars.iv277
  %274 = load ptr, ptr %273, align 8, !tbaa !18
  br label %230

.split239:                                        ; preds = %211
  %275 = getelementptr inbounds i8, ptr %215, i64 8
  %276 = load ptr, ptr %275, align 8, !tbaa !13
  %277 = getelementptr inbounds i8, ptr %276, i64 4
  %278 = load i16, ptr %277, align 2, !tbaa !20
  %279 = getelementptr inbounds i8, ptr %215, i64 8
  %280 = getelementptr inbounds i8, ptr %0, i64 16
  %281 = getelementptr inbounds i8, ptr %0, i64 24
  %282 = getelementptr inbounds i8, ptr %0, i64 32
  %283 = getelementptr inbounds i8, ptr %0, i64 40
  %284 = load ptr, ptr %279, align 8, !tbaa !13
  %285 = getelementptr inbounds i8, ptr %284, i64 6
  %286 = load i16, ptr %285, align 2, !tbaa !20
  %287 = icmp slt i16 %278, %286
  br i1 %287, label %.thread228.preheader, label %.loopexit

.thread228.preheader:                             ; preds = %.split239
  %288 = sext i16 %278 to i64
  br label %.thread228

.thread228:                                       ; preds = %.thread228.preheader, %.split235
  %289 = phi ptr [ %284, %.thread228.preheader ], [ %310, %.split235 ]
  %indvars.iv271 = phi i64 [ %288, %.thread228.preheader ], [ %indvars.iv.next272, %.split235 ]
  %290 = shl nsw i64 %indvars.iv271, 1
  %291 = getelementptr i16, ptr %289, i64 %290
  %292 = getelementptr i8, ptr %291, i64 8
  %293 = load i16, ptr %292, align 2, !tbaa !20
  %294 = getelementptr i8, ptr %291, i64 10
  %295 = load i16, ptr %294, align 2, !tbaa !20
  %296 = icmp slt i16 %293, %295
  br i1 %296, label %.lr.ph, label %.split235

.lr.ph:                                           ; preds = %.thread228
  %297 = load ptr, ptr %280, align 8, !tbaa !18
  %298 = getelementptr inbounds ptr, ptr %297, i64 %indvars.iv271
  %299 = load ptr, ptr %298, align 8, !tbaa !18
  %300 = load ptr, ptr %281, align 8, !tbaa !18
  %301 = getelementptr inbounds ptr, ptr %300, i64 %indvars.iv271
  %302 = load ptr, ptr %301, align 8, !tbaa !18
  %303 = load ptr, ptr %282, align 8, !tbaa !18
  %304 = getelementptr inbounds ptr, ptr %303, i64 %indvars.iv271
  %305 = load ptr, ptr %304, align 8, !tbaa !18
  %306 = load ptr, ptr %283, align 8, !tbaa !18
  %307 = getelementptr inbounds ptr, ptr %306, i64 %indvars.iv271
  %308 = load ptr, ptr %307, align 8, !tbaa !18
  %309 = sext i16 %293 to i64
  br label %315

.split235:                                        ; preds = %315, %.thread228
  %310 = phi ptr [ %289, %.thread228 ], [ %341, %315 ]
  %indvars.iv.next272 = add nsw i64 %indvars.iv271, 1
  %311 = getelementptr inbounds i8, ptr %310, i64 6
  %312 = load i16, ptr %311, align 2, !tbaa !20
  %313 = sext i16 %312 to i64
  %314 = icmp slt i64 %indvars.iv.next272, %313
  br i1 %314, label %.thread228, label %.loopexit, !llvm.loop !29

315:                                              ; preds = %.lr.ph, %315
  %indvars.iv = phi i64 [ %309, %.lr.ph ], [ %indvars.iv.next, %315 ]
  %316 = getelementptr inbounds i8, ptr %299, i64 %indvars.iv
  %317 = load i8, ptr %316, align 1, !tbaa !13
  %318 = lshr i8 %317, 4
  %319 = zext nneg i8 %318 to i64
  %320 = getelementptr inbounds i8, ptr %302, i64 %indvars.iv
  %321 = load i8, ptr %320, align 1, !tbaa !13
  %322 = and i8 %321, -16
  %323 = getelementptr inbounds i8, ptr %305, i64 %indvars.iv
  %324 = load i8, ptr %323, align 1, !tbaa !13
  %325 = lshr i8 %324, 4
  %326 = zext nneg i8 %325 to i64
  %327 = getelementptr inbounds i8, ptr %308, i64 %indvars.iv
  %328 = load i8, ptr %327, align 1, !tbaa !13
  %329 = lshr i8 %328, 4
  %330 = zext nneg i8 %329 to i64
  %331 = load ptr, ptr %25, align 8, !tbaa !13
  %332 = shl nuw nsw i64 %330, 12
  %333 = shl nuw nsw i64 %326, 8
  %334 = or disjoint i64 %332, %333
  %335 = zext i8 %322 to i64
  %336 = or disjoint i64 %334, %335
  %337 = or disjoint i64 %336, %319
  %338 = getelementptr inbounds i32, ptr %331, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !14
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %338, align 4, !tbaa !14
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %341 = load ptr, ptr %279, align 8, !tbaa !13
  %342 = getelementptr i16, ptr %341, i64 %290
  %343 = getelementptr i8, ptr %342, i64 10
  %344 = load i16, ptr %343, align 2, !tbaa !20
  %345 = sext i16 %344 to i64
  %346 = icmp slt i64 %indvars.iv.next, %345
  br i1 %346, label %315, label %.split235, !llvm.loop !26

347:                                              ; preds = %100
  tail call void @ArrayRedefine(ptr noundef %2, i32 noundef 1025, i32 noundef 4, ptr noundef %26) #3
  %348 = load ptr, ptr %25, align 8, !tbaa !13
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(4096) %348, i8 0, i64 4096, i1 false)
  %349 = load ptr, ptr %25, align 8, !tbaa !13
  %350 = getelementptr inbounds i8, ptr %349, i64 4096
  store i32 -869027629, ptr %350, align 4, !tbaa !14
  store i32 1024, ptr %2, align 8, !tbaa !15
  %351 = load ptr, ptr %101, align 8, !tbaa !19
  %352 = icmp eq ptr %351, null
  br i1 %352, label %359, label %353

353:                                              ; preds = %347
  %354 = getelementptr inbounds i8, ptr %351, i64 8
  %355 = load ptr, ptr %354, align 8, !tbaa !13
  %356 = getelementptr inbounds i8, ptr %355, i64 4
  %357 = load i16, ptr %356, align 2, !tbaa !20
  %358 = sext i16 %357 to i64
  br label %359

359:                                              ; preds = %347, %353
  %360 = phi i64 [ %358, %353 ], [ 0, %347 ]
  %361 = getelementptr inbounds i8, ptr %351, i64 8
  %362 = getelementptr inbounds i8, ptr %0, i64 4
  %363 = getelementptr inbounds i8, ptr %0, i64 8
  %364 = getelementptr inbounds i8, ptr %0, i64 16
  %365 = getelementptr inbounds i8, ptr %0, i64 24
  br label %366

366:                                              ; preds = %.split250.us, %359
  %indvars.iv295 = phi i64 [ %indvars.iv.next296, %.split250.us ], [ %360, %359 ]
  br i1 %352, label %367, label %.thread229

367:                                              ; preds = %366
  %368 = load i32, ptr %362, align 4, !tbaa !11
  %369 = sext i32 %368 to i64
  %370 = icmp slt i64 %indvars.iv295, %369
  br i1 %370, label %.split248.us, label %.loopexit

.thread229:                                       ; preds = %366
  %371 = load ptr, ptr %361, align 8, !tbaa !13
  %372 = getelementptr inbounds i8, ptr %371, i64 6
  %373 = load i16, ptr %372, align 2, !tbaa !20
  %374 = sext i16 %373 to i64
  %375 = icmp slt i64 %indvars.iv295, %374
  br i1 %375, label %.split248, label %.loopexit

.split248.us:                                     ; preds = %367
  %376 = load i32, ptr %363, align 8, !tbaa !12
  %377 = icmp sgt i32 %376, 0
  br i1 %377, label %.lr.ph254, label %.split250.us

.lr.ph254:                                        ; preds = %.split248.us
  %378 = load ptr, ptr %364, align 8, !tbaa !18
  %379 = getelementptr inbounds ptr, ptr %378, i64 %indvars.iv295
  %380 = load ptr, ptr %379, align 8, !tbaa !18
  %381 = load ptr, ptr %365, align 8, !tbaa !18
  %382 = getelementptr inbounds ptr, ptr %381, i64 %indvars.iv295
  %383 = load ptr, ptr %382, align 8, !tbaa !18
  br label %384

384:                                              ; preds = %.lr.ph254, %384
  %indvars.iv292 = phi i64 [ 0, %.lr.ph254 ], [ %indvars.iv.next293, %384 ]
  %385 = getelementptr inbounds i8, ptr %380, i64 %indvars.iv292
  %386 = load i8, ptr %385, align 1, !tbaa !13
  %387 = lshr i8 %386, 3
  %388 = zext nneg i8 %387 to i64
  %389 = getelementptr inbounds i8, ptr %383, i64 %indvars.iv292
  %390 = load i8, ptr %389, align 1, !tbaa !13
  %391 = lshr i8 %390, 3
  %392 = zext nneg i8 %391 to i64
  %393 = load ptr, ptr %25, align 8, !tbaa !13
  %394 = shl nuw nsw i64 %392, 5
  %395 = or disjoint i64 %394, %388
  %396 = getelementptr inbounds i32, ptr %393, i64 %395
  %397 = load i32, ptr %396, align 4, !tbaa !14
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %396, align 4, !tbaa !14
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %399 = load i32, ptr %363, align 8, !tbaa !12
  %400 = sext i32 %399 to i64
  %401 = icmp slt i64 %indvars.iv.next293, %400
  br i1 %401, label %384, label %.split250.us, !llvm.loop !30

.split248:                                        ; preds = %.thread229
  %402 = shl nsw i64 %indvars.iv295, 1
  %403 = getelementptr i16, ptr %371, i64 %402
  %404 = getelementptr i8, ptr %403, i64 8
  %405 = load i16, ptr %404, align 2, !tbaa !20
  %406 = load ptr, ptr %361, align 8, !tbaa !13
  %407 = getelementptr i16, ptr %406, i64 %402
  %408 = getelementptr i8, ptr %407, i64 10
  %409 = load i16, ptr %408, align 2, !tbaa !20
  %410 = icmp slt i16 %405, %409
  br i1 %410, label %.lr.ph252, label %.split250.us

.lr.ph252:                                        ; preds = %.split248
  %411 = load ptr, ptr %364, align 8, !tbaa !18
  %412 = getelementptr inbounds ptr, ptr %411, i64 %indvars.iv295
  %413 = load ptr, ptr %412, align 8, !tbaa !18
  %414 = load ptr, ptr %365, align 8, !tbaa !18
  %415 = getelementptr inbounds ptr, ptr %414, i64 %indvars.iv295
  %416 = load ptr, ptr %415, align 8, !tbaa !18
  %417 = sext i16 %405 to i64
  br label %418

.split250.us:                                     ; preds = %418, %384, %.split248, %.split248.us
  %indvars.iv.next296 = add nsw i64 %indvars.iv295, 1
  br label %366, !llvm.loop !31

418:                                              ; preds = %.lr.ph252, %418
  %indvars.iv289 = phi i64 [ %417, %.lr.ph252 ], [ %indvars.iv.next290, %418 ]
  %419 = getelementptr inbounds i8, ptr %413, i64 %indvars.iv289
  %420 = load i8, ptr %419, align 1, !tbaa !13
  %421 = lshr i8 %420, 3
  %422 = zext nneg i8 %421 to i64
  %423 = getelementptr inbounds i8, ptr %416, i64 %indvars.iv289
  %424 = load i8, ptr %423, align 1, !tbaa !13
  %425 = lshr i8 %424, 3
  %426 = zext nneg i8 %425 to i64
  %427 = load ptr, ptr %25, align 8, !tbaa !13
  %428 = shl nuw nsw i64 %426, 5
  %429 = or disjoint i64 %428, %422
  %430 = getelementptr inbounds i32, ptr %427, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !14
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %430, align 4, !tbaa !14
  %indvars.iv.next290 = add nsw i64 %indvars.iv289, 1
  %433 = load ptr, ptr %361, align 8, !tbaa !13
  %434 = getelementptr i16, ptr %433, i64 %402
  %435 = getelementptr i8, ptr %434, i64 10
  %436 = load i16, ptr %435, align 2, !tbaa !20
  %437 = sext i16 %436 to i64
  %438 = icmp slt i64 %indvars.iv.next290, %437
  br i1 %438, label %418, label %.split250.us, !llvm.loop !30

.loopexit:                                        ; preds = %.split235, %.split235.us.us, %.thread225, %123, %.thread229, %367, %.thread223, %50, %.split.us.us.lr.ph, %.split239.us, %.split239
  ret void
}

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

declare void @ArrayRedefine(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"MImage", !7, i64 0, !7, i64 4, !7, i64 8, !8, i64 16, !10, i64 48}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !7, i64 8}
!13 = !{!8, !8, i64 0}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !7, i64 0}
!16 = !{!"MArray", !7, i64 0, !17, i64 4, !8, i64 8}
!17 = !{!"short", !8, i64 0}
!18 = !{!10, !10, i64 0}
!19 = !{!6, !10, i64 48}
!20 = !{!17, !17, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22, !28}
!28 = !{!"llvm.loop.unswitch.partial.disable"}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}


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