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

; 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 [85 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@__FUNCTION__.mImageBinaryFilter = external hidden unnamed_addr constant [19 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [19 x i8], align 1

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @mImageBinaryFilter(ptr noundef %0, ptr noundef %1, i32 noundef %2, float noundef %3, float noundef %4) #3 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca float, 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
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %struct.MImage, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store float %3, ptr %9, align 4, !tbaa !11
  store float %4, ptr %10, align 4, !tbaa !11
  br label %44

44:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %45 = load ptr, ptr %6, align 8, !tbaa !5
  %46 = icmp eq ptr %45, null
  br i1 %46, label %51, label %47

47:                                               ; preds = %44
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = ptrtoint ptr %48 to i64
  %50 = icmp eq i64 %49, -1
  br i1 %50, label %51, label %52

51:                                               ; preds = %47, %44
  br label %81

52:                                               ; preds = %47
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.MImage, ptr %53, i32 0, i32 3
  %55 = getelementptr inbounds [4 x ptr], ptr %54, i64 0, i64 0
  %56 = icmp eq ptr %55, null
  br i1 %56, label %78, label %57

57:                                               ; preds = %52
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.MImage, ptr %58, i32 0, i32 3
  %60 = getelementptr inbounds [4 x ptr], ptr %59, i64 0, i64 0
  %61 = ptrtoint ptr %60 to i64
  %62 = icmp eq i64 %61, -1
  br i1 %62, label %78, label %63

63:                                               ; preds = %57
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.MImage, ptr %64, i32 0, i32 0
  %66 = load i32, ptr %65, align 8, !tbaa !13
  %67 = icmp sle i32 %66, 0
  br i1 %67, label %78, label %68

68:                                               ; preds = %63
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.MImage, ptr %69, i32 0, i32 1
  %71 = load i32, ptr %70, align 4, !tbaa !15
  %72 = icmp sle i32 %71, 0
  br i1 %72, label %78, label %73

73:                                               ; preds = %68
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.MImage, ptr %74, i32 0, i32 2
  %76 = load i32, ptr %75, align 8, !tbaa !16
  %77 = icmp sle i32 %76, 0
  br label %78

78:                                               ; preds = %73, %68, %63, %57, %52
  %79 = phi i1 [ true, %68 ], [ true, %63 ], [ true, %57 ], [ true, %52 ], [ %77, %73 ]
  %80 = zext i1 %79 to i32
  br label %81

81:                                               ; preds = %78, %51
  %82 = phi i32 [ 1, %51 ], [ %80, %78 ]
  store i32 %82, ptr %11, align 4, !tbaa !9
  %83 = load i32, ptr %11, align 4, !tbaa !9
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %85, label %87

85:                                               ; preds = %81
  %86 = load i32, ptr %11, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %86, i32 noundef -1, ptr noundef @.str, i32 noundef 452, ptr noundef @__FUNCTION__.mImageBinaryFilter, ptr noundef @.str.1)
  br label %87

87:                                               ; preds = %85, %81
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %88

88:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %89 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %89, ptr %12, align 8, !tbaa !5
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = icmp eq ptr %90, null
  br i1 %91, label %100, label %92

92:                                               ; preds = %88
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = ptrtoint ptr %93 to i64
  %95 = icmp eq i64 %94, -1
  br i1 %95, label %100, label %96

96:                                               ; preds = %92
  %97 = load ptr, ptr %7, align 8, !tbaa !5
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = icmp eq ptr %97, %98
  br i1 %99, label %100, label %108

100:                                              ; preds = %96, %92, %88
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.MImage, ptr %101, i32 0, i32 1
  %103 = load i32, ptr %102, align 4, !tbaa !15
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.MImage, ptr %104, i32 0, i32 2
  %106 = load i32, ptr %105, align 8, !tbaa !16
  %107 = call ptr @ImageCreate(i32 noundef 1, i32 noundef %103, i32 noundef %106, ptr noundef null)
  store ptr %107, ptr %7, align 8, !tbaa !5
  br label %162

108:                                              ; preds = %96
  br label %109

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 4, ptr %13, align 4, !tbaa !9
  %110 = load i32, ptr %13, align 4, !tbaa !9
  %111 = icmp eq i32 %110, 2
  br i1 %111, label %112, label %120

112:                                              ; preds = %109
  %113 = load ptr, ptr %7, align 8, !tbaa !5
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.MImage, ptr %114, i32 0, i32 1
  %116 = load i32, ptr %115, align 4, !tbaa !15
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.MImage, ptr %117, i32 0, i32 3
  %119 = getelementptr inbounds [4 x ptr], ptr %118, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %113, i32 noundef -1, i32 noundef 1, i32 noundef %116, ptr noundef %119)
  br label %159

120:                                              ; preds = %109
  %121 = load i32, ptr %13, align 4, !tbaa !9
  %122 = icmp eq i32 %121, 3
  br i1 %122, label %123, label %134

123:                                              ; preds = %120
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.MImage, ptr %125, i32 0, i32 1
  %127 = load i32, ptr %126, align 4, !tbaa !15
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.MImage, ptr %128, i32 0, i32 2
  %130 = load i32, ptr %129, align 8, !tbaa !16
  %131 = load ptr, ptr %7, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.MImage, ptr %131, i32 0, i32 3
  %133 = getelementptr inbounds [4 x ptr], ptr %132, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %124, i32 noundef 1, i32 noundef %127, i32 noundef %130, ptr noundef %133)
  br label %158

134:                                              ; preds = %120
  %135 = load i32, ptr %13, align 4, !tbaa !9
  %136 = icmp eq i32 %135, 4
  br i1 %136, label %137, label %148

137:                                              ; preds = %134
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = load ptr, ptr %6, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.MImage, ptr %139, i32 0, i32 1
  %141 = load i32, ptr %140, align 4, !tbaa !15
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.MImage, ptr %142, i32 0, i32 2
  %144 = load i32, ptr %143, align 8, !tbaa !16
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.MImage, ptr %145, i32 0, i32 3
  %147 = getelementptr inbounds [4 x ptr], ptr %146, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %138, i32 noundef 1, i32 noundef %141, i32 noundef %144, ptr noundef %147)
  br label %157

148:                                              ; preds = %134
  br label %149

149:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 1, ptr %14, align 4, !tbaa !9
  %150 = load i32, ptr %14, align 4, !tbaa !9
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %152, label %154

152:                                              ; preds = %149
  %153 = load i32, ptr %14, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %153, i32 noundef -1, ptr noundef @.str, i32 noundef 456, ptr noundef @__FUNCTION__.mImageBinaryFilter, ptr noundef @.str.6)
  br label %154

154:                                              ; preds = %152, %149
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %155

155:                                              ; preds = %154
  br label %156

156:                                              ; preds = %155
  br label %157

157:                                              ; preds = %156, %137
  br label %158

158:                                              ; preds = %157, %123
  br label %159

159:                                              ; preds = %158, %112
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %160

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160
  br label %162

162:                                              ; preds = %161, %100
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %163 = load ptr, ptr %6, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.MImage, ptr %163, i32 0, i32 3
  %165 = getelementptr inbounds [4 x ptr], ptr %164, i64 0, i64 0
  %166 = load ptr, ptr %165, align 8, !tbaa !5
  store ptr %166, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.MImage, ptr %167, i32 0, i32 3
  %169 = getelementptr inbounds [4 x ptr], ptr %168, i64 0, i64 0
  %170 = load ptr, ptr %169, align 8, !tbaa !5
  store ptr %170, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %171 = load i32, ptr %8, align 4, !tbaa !9
  %172 = load i32, ptr %8, align 4, !tbaa !9
  %173 = add nsw i32 %171, %172
  %174 = add nsw i32 %173, 1
  %175 = load i32, ptr %8, align 4, !tbaa !9
  %176 = load i32, ptr %8, align 4, !tbaa !9
  %177 = add nsw i32 %175, %176
  %178 = add nsw i32 %177, 1
  %179 = mul nsw i32 %174, %178
  %180 = sitofp i32 %179 to float
  store float %180, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %181 = load float, ptr %9, align 4, !tbaa !11
  %182 = load float, ptr %17, align 4, !tbaa !11
  %183 = fmul float %181, %182
  %184 = fmul float %183, 2.550000e+02
  %185 = fptosi float %184 to i32
  store i32 %185, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %186 = load float, ptr %10, align 4, !tbaa !11
  %187 = load float, ptr %17, align 4, !tbaa !11
  %188 = fmul float %186, %187
  %189 = fmul float %188, 2.550000e+02
  %190 = fptosi float %189 to i32
  store i32 %190, ptr %19, align 4, !tbaa !9
  br label %191

191:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.MImage, ptr %192, i32 0, i32 4
  %194 = load ptr, ptr %193, align 8, !tbaa !17
  %195 = icmp eq ptr %194, null
  br i1 %195, label %196, label %197

196:                                              ; preds = %191
  br label %206

197:                                              ; preds = %191
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.MImage, ptr %198, i32 0, i32 4
  %200 = load ptr, ptr %199, align 8, !tbaa !17
  %201 = getelementptr inbounds %struct.MArray, ptr %200, i32 0, i32 2
  %202 = load ptr, ptr %201, align 8, !tbaa !18
  %203 = getelementptr inbounds i16, ptr %202, i64 2
  %204 = load i16, ptr %203, align 2, !tbaa !19
  %205 = sext i16 %204 to i32
  br label %206

206:                                              ; preds = %197, %196
  %207 = phi i32 [ 0, %196 ], [ %205, %197 ]
  store i32 %207, ptr %20, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %931, %206
  %209 = load i32, ptr %20, align 4, !tbaa !9
  %210 = load ptr, ptr %6, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.MImage, ptr %210, i32 0, i32 4
  %212 = load ptr, ptr %211, align 8, !tbaa !17
  %213 = icmp eq ptr %212, null
  br i1 %213, label %214, label %218

214:                                              ; preds = %208
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.MImage, ptr %215, i32 0, i32 1
  %217 = load i32, ptr %216, align 4, !tbaa !15
  br label %227

218:                                              ; preds = %208
  %219 = load ptr, ptr %6, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.MImage, ptr %219, i32 0, i32 4
  %221 = load ptr, ptr %220, align 8, !tbaa !17
  %222 = getelementptr inbounds %struct.MArray, ptr %221, i32 0, i32 2
  %223 = load ptr, ptr %222, align 8, !tbaa !18
  %224 = getelementptr inbounds i16, ptr %223, i64 3
  %225 = load i16, ptr %224, align 2, !tbaa !19
  %226 = sext i16 %225 to i32
  br label %227

227:                                              ; preds = %218, %214
  %228 = phi i32 [ %217, %214 ], [ %226, %218 ]
  %229 = icmp slt i32 %209, %228
  br i1 %229, label %230, label %938

230:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %231 = load ptr, ptr %6, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.MImage, ptr %231, i32 0, i32 2
  %233 = load i32, ptr %232, align 8, !tbaa !16
  store i32 %233, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %234 = load ptr, ptr %6, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.MImage, ptr %234, i32 0, i32 2
  %236 = load i32, ptr %235, align 8, !tbaa !16
  store i32 %236, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  store i32 0, ptr %24, align 4, !tbaa !9
  %237 = load ptr, ptr %6, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.MImage, ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %238, align 8, !tbaa !17
  %240 = icmp ne ptr %239, null
  br i1 %240, label %241, label %376

241:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %242 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %242, ptr %25, align 4, !tbaa !9
  br label %243

243:                                              ; preds = %372, %241
  %244 = load i32, ptr %25, align 4, !tbaa !9
  %245 = load i32, ptr %20, align 4, !tbaa !9
  %246 = load i32, ptr %8, align 4, !tbaa !9
  %247 = sub nsw i32 16, %246
  %248 = load i32, ptr %8, align 4, !tbaa !9
  %249 = sub nsw i32 %247, %248
  %250 = add nsw i32 %245, %249
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.MImage, ptr %251, i32 0, i32 4
  %253 = load ptr, ptr %252, align 8, !tbaa !17
  %254 = icmp eq ptr %253, null
  br i1 %254, label %255, label %259

255:                                              ; preds = %243
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.MImage, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 4, !tbaa !15
  br label %268

259:                                              ; preds = %243
  %260 = load ptr, ptr %6, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.MImage, ptr %260, i32 0, i32 4
  %262 = load ptr, ptr %261, align 8, !tbaa !17
  %263 = getelementptr inbounds %struct.MArray, ptr %262, i32 0, i32 2
  %264 = load ptr, ptr %263, align 8, !tbaa !18
  %265 = getelementptr inbounds i16, ptr %264, i64 3
  %266 = load i16, ptr %265, align 2, !tbaa !19
  %267 = sext i16 %266 to i32
  br label %268

268:                                              ; preds = %259, %255
  %269 = phi i32 [ %258, %255 ], [ %267, %259 ]
  %270 = icmp slt i32 %250, %269
  br i1 %270, label %271, label %278

271:                                              ; preds = %268
  %272 = load i32, ptr %20, align 4, !tbaa !9
  %273 = load i32, ptr %8, align 4, !tbaa !9
  %274 = sub nsw i32 16, %273
  %275 = load i32, ptr %8, align 4, !tbaa !9
  %276 = sub nsw i32 %274, %275
  %277 = add nsw i32 %272, %276
  br label %298

278:                                              ; preds = %268
  %279 = load ptr, ptr %6, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.MImage, ptr %279, i32 0, i32 4
  %281 = load ptr, ptr %280, align 8, !tbaa !17
  %282 = icmp eq ptr %281, null
  br i1 %282, label %283, label %287

283:                                              ; preds = %278
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.MImage, ptr %284, i32 0, i32 1
  %286 = load i32, ptr %285, align 4, !tbaa !15
  br label %296

287:                                              ; preds = %278
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.MImage, ptr %288, i32 0, i32 4
  %290 = load ptr, ptr %289, align 8, !tbaa !17
  %291 = getelementptr inbounds %struct.MArray, ptr %290, i32 0, i32 2
  %292 = load ptr, ptr %291, align 8, !tbaa !18
  %293 = getelementptr inbounds i16, ptr %292, i64 3
  %294 = load i16, ptr %293, align 2, !tbaa !19
  %295 = sext i16 %294 to i32
  br label %296

296:                                              ; preds = %287, %283
  %297 = phi i32 [ %286, %283 ], [ %295, %287 ]
  br label %298

298:                                              ; preds = %296, %271
  %299 = phi i32 [ %277, %271 ], [ %297, %296 ]
  %300 = icmp slt i32 %244, %299
  br i1 %300, label %302, label %301

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

302:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.MImage, ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !17
  %306 = icmp eq ptr %305, null
  br i1 %306, label %307, label %308

307:                                              ; preds = %302
  br label %322

308:                                              ; preds = %302
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.MImage, ptr %309, i32 0, i32 4
  %311 = load ptr, ptr %310, align 8, !tbaa !17
  %312 = getelementptr inbounds %struct.MArray, ptr %311, i32 0, i32 2
  %313 = load ptr, ptr %312, align 8, !tbaa !18
  %314 = load i32, ptr %25, align 4, !tbaa !9
  %315 = load i32, ptr %25, align 4, !tbaa !9
  %316 = add nsw i32 %314, %315
  %317 = add nsw i32 %316, 4
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i16, ptr %313, i64 %318
  %320 = load i16, ptr %319, align 2, !tbaa !19
  %321 = sext i16 %320 to i32
  br label %322

322:                                              ; preds = %308, %307
  %323 = phi i32 [ 0, %307 ], [ %321, %308 ]
  store i32 %323, ptr %26, align 4, !tbaa !9
  %324 = load i32, ptr %26, align 4, !tbaa !9
  %325 = load i32, ptr %21, align 4, !tbaa !9
  %326 = icmp slt i32 %324, %325
  br i1 %326, label %327, label %329

327:                                              ; preds = %322
  %328 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %328, ptr %21, align 4, !tbaa !9
  br label %329

329:                                              ; preds = %327, %322
  %330 = load i32, ptr %26, align 4, !tbaa !9
  %331 = load i32, ptr %22, align 4, !tbaa !9
  %332 = icmp sgt i32 %330, %331
  br i1 %332, label %333, label %335

333:                                              ; preds = %329
  %334 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %334, ptr %22, align 4, !tbaa !9
  br label %335

335:                                              ; preds = %333, %329
  %336 = load ptr, ptr %6, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.MImage, ptr %336, i32 0, i32 4
  %338 = load ptr, ptr %337, align 8, !tbaa !17
  %339 = icmp eq ptr %338, null
  br i1 %339, label %340, label %344

340:                                              ; preds = %335
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.MImage, ptr %341, i32 0, i32 2
  %343 = load i32, ptr %342, align 8, !tbaa !16
  br label %358

344:                                              ; preds = %335
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.MImage, ptr %345, i32 0, i32 4
  %347 = load ptr, ptr %346, align 8, !tbaa !17
  %348 = getelementptr inbounds %struct.MArray, ptr %347, i32 0, i32 2
  %349 = load ptr, ptr %348, align 8, !tbaa !18
  %350 = load i32, ptr %25, align 4, !tbaa !9
  %351 = load i32, ptr %25, align 4, !tbaa !9
  %352 = add nsw i32 %350, %351
  %353 = add nsw i32 %352, 5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i16, ptr %349, i64 %354
  %356 = load i16, ptr %355, align 2, !tbaa !19
  %357 = sext i16 %356 to i32
  br label %358

358:                                              ; preds = %344, %340
  %359 = phi i32 [ %343, %340 ], [ %357, %344 ]
  store i32 %359, ptr %26, align 4, !tbaa !9
  %360 = load i32, ptr %26, align 4, !tbaa !9
  %361 = load i32, ptr %23, align 4, !tbaa !9
  %362 = icmp slt i32 %360, %361
  br i1 %362, label %363, label %365

363:                                              ; preds = %358
  %364 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %364, ptr %23, align 4, !tbaa !9
  br label %365

365:                                              ; preds = %363, %358
  %366 = load i32, ptr %26, align 4, !tbaa !9
  %367 = load i32, ptr %24, align 4, !tbaa !9
  %368 = icmp sgt i32 %366, %367
  br i1 %368, label %369, label %371

369:                                              ; preds = %365
  %370 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %370, ptr %24, align 4, !tbaa !9
  br label %371

371:                                              ; preds = %369, %365
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %372

372:                                              ; preds = %371
  %373 = load i32, ptr %25, align 4, !tbaa !9
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %25, align 4, !tbaa !9
  br label %243, !llvm.loop !21

375:                                              ; preds = %301
  br label %376

376:                                              ; preds = %375, %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %377 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %377, ptr %27, align 4, !tbaa !9
  br label %378

378:                                              ; preds = %565, %376
  %379 = load i32, ptr %27, align 4, !tbaa !9
  %380 = load i32, ptr %22, align 4, !tbaa !9
  %381 = icmp slt i32 %379, %380
  br i1 %381, label %383, label %382

382:                                              ; preds = %378
  store i32 16, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %568

383:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %384 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %384, ptr %29, align 4, !tbaa !9
  br label %385

385:                                              ; preds = %561, %383
  %386 = load i32, ptr %29, align 4, !tbaa !9
  %387 = load i32, ptr %20, align 4, !tbaa !9
  %388 = load i32, ptr %8, align 4, !tbaa !9
  %389 = sub nsw i32 16, %388
  %390 = load i32, ptr %8, align 4, !tbaa !9
  %391 = sub nsw i32 %389, %390
  %392 = add nsw i32 %387, %391
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.MImage, ptr %393, i32 0, i32 4
  %395 = load ptr, ptr %394, align 8, !tbaa !17
  %396 = icmp eq ptr %395, null
  br i1 %396, label %397, label %401

397:                                              ; preds = %385
  %398 = load ptr, ptr %6, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.MImage, ptr %398, i32 0, i32 1
  %400 = load i32, ptr %399, align 4, !tbaa !15
  br label %410

401:                                              ; preds = %385
  %402 = load ptr, ptr %6, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.MImage, ptr %402, i32 0, i32 4
  %404 = load ptr, ptr %403, align 8, !tbaa !17
  %405 = getelementptr inbounds %struct.MArray, ptr %404, i32 0, i32 2
  %406 = load ptr, ptr %405, align 8, !tbaa !18
  %407 = getelementptr inbounds i16, ptr %406, i64 3
  %408 = load i16, ptr %407, align 2, !tbaa !19
  %409 = sext i16 %408 to i32
  br label %410

410:                                              ; preds = %401, %397
  %411 = phi i32 [ %400, %397 ], [ %409, %401 ]
  %412 = icmp slt i32 %392, %411
  br i1 %412, label %413, label %420

413:                                              ; preds = %410
  %414 = load i32, ptr %20, align 4, !tbaa !9
  %415 = load i32, ptr %8, align 4, !tbaa !9
  %416 = sub nsw i32 16, %415
  %417 = load i32, ptr %8, align 4, !tbaa !9
  %418 = sub nsw i32 %416, %417
  %419 = add nsw i32 %414, %418
  br label %440

420:                                              ; preds = %410
  %421 = load ptr, ptr %6, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.MImage, ptr %421, i32 0, i32 4
  %423 = load ptr, ptr %422, align 8, !tbaa !17
  %424 = icmp eq ptr %423, null
  br i1 %424, label %425, label %429

425:                                              ; preds = %420
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.MImage, ptr %426, i32 0, i32 1
  %428 = load i32, ptr %427, align 4, !tbaa !15
  br label %438

429:                                              ; preds = %420
  %430 = load ptr, ptr %6, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.MImage, ptr %430, i32 0, i32 4
  %432 = load ptr, ptr %431, align 8, !tbaa !17
  %433 = getelementptr inbounds %struct.MArray, ptr %432, i32 0, i32 2
  %434 = load ptr, ptr %433, align 8, !tbaa !18
  %435 = getelementptr inbounds i16, ptr %434, i64 3
  %436 = load i16, ptr %435, align 2, !tbaa !19
  %437 = sext i16 %436 to i32
  br label %438

438:                                              ; preds = %429, %425
  %439 = phi i32 [ %428, %425 ], [ %437, %429 ]
  br label %440

440:                                              ; preds = %438, %413
  %441 = phi i32 [ %419, %413 ], [ %439, %438 ]
  %442 = icmp slt i32 %386, %441
  br i1 %442, label %444, label %443

443:                                              ; preds = %440
  store i32 19, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %564

444:                                              ; preds = %440
  %445 = load i32, ptr %27, align 4, !tbaa !9
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.MImage, ptr %446, i32 0, i32 4
  %448 = load ptr, ptr %447, align 8, !tbaa !17
  %449 = icmp eq ptr %448, null
  br i1 %449, label %450, label %451

450:                                              ; preds = %444
  br label %465

451:                                              ; preds = %444
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.MImage, ptr %452, i32 0, i32 4
  %454 = load ptr, ptr %453, align 8, !tbaa !17
  %455 = getelementptr inbounds %struct.MArray, ptr %454, i32 0, i32 2
  %456 = load ptr, ptr %455, align 8, !tbaa !18
  %457 = load i32, ptr %29, align 4, !tbaa !9
  %458 = load i32, ptr %29, align 4, !tbaa !9
  %459 = add nsw i32 %457, %458
  %460 = add nsw i32 %459, 4
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i16, ptr %456, i64 %461
  %463 = load i16, ptr %462, align 2, !tbaa !19
  %464 = sext i16 %463 to i32
  br label %465

465:                                              ; preds = %451, %450
  %466 = phi i32 [ 0, %450 ], [ %464, %451 ]
  %467 = icmp sgt i32 %445, %466
  br i1 %467, label %468, label %560

468:                                              ; preds = %465
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  store i32 0, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %469 = load i32, ptr %29, align 4, !tbaa !9
  %470 = load i32, ptr %8, align 4, !tbaa !9
  %471 = sub nsw i32 %469, %470
  store i32 %471, ptr %31, align 4, !tbaa !9
  br label %472

472:                                              ; preds = %511, %468
  %473 = load i32, ptr %31, align 4, !tbaa !9
  %474 = load i32, ptr %29, align 4, !tbaa !9
  %475 = load i32, ptr %8, align 4, !tbaa !9
  %476 = add nsw i32 %474, %475
  %477 = icmp sle i32 %473, %476
  br i1 %477, label %479, label %478

478:                                              ; preds = %472
  store i32 22, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %514

479:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %480 = load i32, ptr %27, align 4, !tbaa !9
  %481 = load i32, ptr %8, align 4, !tbaa !9
  %482 = sub nsw i32 %480, %481
  store i32 %482, ptr %32, align 4, !tbaa !9
  br label %483

483:                                              ; preds = %507, %479
  %484 = load i32, ptr %32, align 4, !tbaa !9
  %485 = load i32, ptr %27, align 4, !tbaa !9
  %486 = load i32, ptr %8, align 4, !tbaa !9
  %487 = add nsw i32 %485, %486
  %488 = icmp slt i32 %484, %487
  br i1 %488, label %490, label %489

489:                                              ; preds = %483
  store i32 25, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %510

490:                                              ; preds = %483
  %491 = load ptr, ptr %15, align 8, !tbaa !5
  %492 = load i32, ptr %31, align 4, !tbaa !9
  %493 = load i32, ptr %8, align 4, !tbaa !9
  %494 = sub nsw i32 %492, %493
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds ptr, ptr %491, i64 %495
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = load i32, ptr %32, align 4, !tbaa !9
  %499 = load i32, ptr %8, align 4, !tbaa !9
  %500 = sub nsw i32 %498, %499
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i8, ptr %497, i64 %501
  %503 = load i8, ptr %502, align 1, !tbaa !18
  %504 = zext i8 %503 to i32
  %505 = load i32, ptr %30, align 4, !tbaa !9
  %506 = add nsw i32 %505, %504
  store i32 %506, ptr %30, align 4, !tbaa !9
  br label %507

507:                                              ; preds = %490
  %508 = load i32, ptr %32, align 4, !tbaa !9
  %509 = add nsw i32 %508, 1
  store i32 %509, ptr %32, align 4, !tbaa !9
  br label %483, !llvm.loop !23

510:                                              ; preds = %489
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %31, align 4, !tbaa !9
  %513 = add nsw i32 %512, 1
  store i32 %513, ptr %31, align 4, !tbaa !9
  br label %472, !llvm.loop !24

514:                                              ; preds = %478
  %515 = load i32, ptr %30, align 4, !tbaa !9
  %516 = load i32, ptr %18, align 4, !tbaa !9
  %517 = icmp slt i32 %515, %516
  br i1 %517, label %518, label %527

518:                                              ; preds = %514
  %519 = load ptr, ptr %16, align 8, !tbaa !5
  %520 = load i32, ptr %29, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds ptr, ptr %519, i64 %521
  %523 = load ptr, ptr %522, align 8, !tbaa !5
  %524 = load i32, ptr %27, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds i8, ptr %523, i64 %525
  store i8 0, ptr %526, align 1, !tbaa !18
  br label %559

527:                                              ; preds = %514
  %528 = load i32, ptr %30, align 4, !tbaa !9
  %529 = load i32, ptr %19, align 4, !tbaa !9
  %530 = icmp sgt i32 %528, %529
  br i1 %530, label %531, label %540

531:                                              ; preds = %527
  %532 = load ptr, ptr %16, align 8, !tbaa !5
  %533 = load i32, ptr %29, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds ptr, ptr %532, i64 %534
  %536 = load ptr, ptr %535, align 8, !tbaa !5
  %537 = load i32, ptr %27, align 4, !tbaa !9
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds i8, ptr %536, i64 %538
  store i8 -1, ptr %539, align 1, !tbaa !18
  br label %558

540:                                              ; preds = %527
  %541 = load ptr, ptr %15, align 8, !tbaa !5
  %542 = load i32, ptr %29, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds ptr, ptr %541, i64 %543
  %545 = load ptr, ptr %544, align 8, !tbaa !5
  %546 = load i32, ptr %27, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds i8, ptr %545, i64 %547
  %549 = load i8, ptr %548, align 1, !tbaa !18
  %550 = load ptr, ptr %16, align 8, !tbaa !5
  %551 = load i32, ptr %29, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds ptr, ptr %550, i64 %552
  %554 = load ptr, ptr %553, align 8, !tbaa !5
  %555 = load i32, ptr %27, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i8, ptr %554, i64 %556
  store i8 %549, ptr %557, align 1, !tbaa !18
  br label %558

558:                                              ; preds = %540, %531
  br label %559

559:                                              ; preds = %558, %518
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %560

560:                                              ; preds = %559, %465
  br label %561

561:                                              ; preds = %560
  %562 = load i32, ptr %29, align 4, !tbaa !9
  %563 = add nsw i32 %562, 1
  store i32 %563, ptr %29, align 4, !tbaa !9
  br label %385, !llvm.loop !25

564:                                              ; preds = %443
  br label %565

565:                                              ; preds = %564
  %566 = load i32, ptr %27, align 4, !tbaa !9
  %567 = add nsw i32 %566, 1
  store i32 %567, ptr %27, align 4, !tbaa !9
  br label %378, !llvm.loop !26

568:                                              ; preds = %382
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %569 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %569, ptr %33, align 4, !tbaa !9
  br label %570

570:                                              ; preds = %732, %568
  %571 = load i32, ptr %33, align 4, !tbaa !9
  %572 = load i32, ptr %23, align 4, !tbaa !9
  %573 = icmp slt i32 %571, %572
  br i1 %573, label %575, label %574

574:                                              ; preds = %570
  store i32 28, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %735

575:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %576 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %576, ptr %34, align 4, !tbaa !9
  br label %577

577:                                              ; preds = %728, %575
  %578 = load i32, ptr %34, align 4, !tbaa !9
  %579 = load i32, ptr %20, align 4, !tbaa !9
  %580 = load i32, ptr %8, align 4, !tbaa !9
  %581 = sub nsw i32 16, %580
  %582 = load i32, ptr %8, align 4, !tbaa !9
  %583 = sub nsw i32 %581, %582
  %584 = add nsw i32 %579, %583
  %585 = load ptr, ptr %6, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.MImage, ptr %585, i32 0, i32 4
  %587 = load ptr, ptr %586, align 8, !tbaa !17
  %588 = icmp eq ptr %587, null
  br i1 %588, label %589, label %593

589:                                              ; preds = %577
  %590 = load ptr, ptr %6, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.MImage, ptr %590, i32 0, i32 1
  %592 = load i32, ptr %591, align 4, !tbaa !15
  br label %602

593:                                              ; preds = %577
  %594 = load ptr, ptr %6, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.MImage, ptr %594, i32 0, i32 4
  %596 = load ptr, ptr %595, align 8, !tbaa !17
  %597 = getelementptr inbounds %struct.MArray, ptr %596, i32 0, i32 2
  %598 = load ptr, ptr %597, align 8, !tbaa !18
  %599 = getelementptr inbounds i16, ptr %598, i64 3
  %600 = load i16, ptr %599, align 2, !tbaa !19
  %601 = sext i16 %600 to i32
  br label %602

602:                                              ; preds = %593, %589
  %603 = phi i32 [ %592, %589 ], [ %601, %593 ]
  %604 = icmp slt i32 %584, %603
  br i1 %604, label %605, label %612

605:                                              ; preds = %602
  %606 = load i32, ptr %20, align 4, !tbaa !9
  %607 = load i32, ptr %8, align 4, !tbaa !9
  %608 = sub nsw i32 16, %607
  %609 = load i32, ptr %8, align 4, !tbaa !9
  %610 = sub nsw i32 %608, %609
  %611 = add nsw i32 %606, %610
  br label %632

612:                                              ; preds = %602
  %613 = load ptr, ptr %6, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.MImage, ptr %613, i32 0, i32 4
  %615 = load ptr, ptr %614, align 8, !tbaa !17
  %616 = icmp eq ptr %615, null
  br i1 %616, label %617, label %621

617:                                              ; preds = %612
  %618 = load ptr, ptr %6, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.MImage, ptr %618, i32 0, i32 1
  %620 = load i32, ptr %619, align 4, !tbaa !15
  br label %630

621:                                              ; preds = %612
  %622 = load ptr, ptr %6, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.MImage, ptr %622, i32 0, i32 4
  %624 = load ptr, ptr %623, align 8, !tbaa !17
  %625 = getelementptr inbounds %struct.MArray, ptr %624, i32 0, i32 2
  %626 = load ptr, ptr %625, align 8, !tbaa !18
  %627 = getelementptr inbounds i16, ptr %626, i64 3
  %628 = load i16, ptr %627, align 2, !tbaa !19
  %629 = sext i16 %628 to i32
  br label %630

630:                                              ; preds = %621, %617
  %631 = phi i32 [ %620, %617 ], [ %629, %621 ]
  br label %632

632:                                              ; preds = %630, %605
  %633 = phi i32 [ %611, %605 ], [ %631, %630 ]
  %634 = icmp slt i32 %578, %633
  br i1 %634, label %636, label %635

635:                                              ; preds = %632
  store i32 31, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %731

636:                                              ; preds = %632
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  store i32 0, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %637 = load i32, ptr %34, align 4, !tbaa !9
  %638 = load i32, ptr %8, align 4, !tbaa !9
  %639 = sub nsw i32 %637, %638
  store i32 %639, ptr %36, align 4, !tbaa !9
  br label %640

640:                                              ; preds = %679, %636
  %641 = load i32, ptr %36, align 4, !tbaa !9
  %642 = load i32, ptr %34, align 4, !tbaa !9
  %643 = load i32, ptr %8, align 4, !tbaa !9
  %644 = add nsw i32 %642, %643
  %645 = icmp sle i32 %641, %644
  br i1 %645, label %647, label %646

646:                                              ; preds = %640
  store i32 34, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  br label %682

647:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %648 = load i32, ptr %33, align 4, !tbaa !9
  %649 = load i32, ptr %8, align 4, !tbaa !9
  %650 = sub nsw i32 %648, %649
  store i32 %650, ptr %37, align 4, !tbaa !9
  br label %651

651:                                              ; preds = %675, %647
  %652 = load i32, ptr %37, align 4, !tbaa !9
  %653 = load i32, ptr %33, align 4, !tbaa !9
  %654 = load i32, ptr %8, align 4, !tbaa !9
  %655 = add nsw i32 %653, %654
  %656 = icmp slt i32 %652, %655
  br i1 %656, label %658, label %657

657:                                              ; preds = %651
  store i32 37, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  br label %678

658:                                              ; preds = %651
  %659 = load ptr, ptr %15, align 8, !tbaa !5
  %660 = load i32, ptr %36, align 4, !tbaa !9
  %661 = load i32, ptr %8, align 4, !tbaa !9
  %662 = sub nsw i32 %660, %661
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds ptr, ptr %659, i64 %663
  %665 = load ptr, ptr %664, align 8, !tbaa !5
  %666 = load i32, ptr %37, align 4, !tbaa !9
  %667 = load i32, ptr %8, align 4, !tbaa !9
  %668 = sub nsw i32 %666, %667
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i8, ptr %665, i64 %669
  %671 = load i8, ptr %670, align 1, !tbaa !18
  %672 = zext i8 %671 to i32
  %673 = load i32, ptr %35, align 4, !tbaa !9
  %674 = add nsw i32 %673, %672
  store i32 %674, ptr %35, align 4, !tbaa !9
  br label %675

675:                                              ; preds = %658
  %676 = load i32, ptr %37, align 4, !tbaa !9
  %677 = add nsw i32 %676, 1
  store i32 %677, ptr %37, align 4, !tbaa !9
  br label %651, !llvm.loop !27

678:                                              ; preds = %657
  br label %679

679:                                              ; preds = %678
  %680 = load i32, ptr %36, align 4, !tbaa !9
  %681 = add nsw i32 %680, 1
  store i32 %681, ptr %36, align 4, !tbaa !9
  br label %640, !llvm.loop !28

682:                                              ; preds = %646
  %683 = load i32, ptr %35, align 4, !tbaa !9
  %684 = load i32, ptr %18, align 4, !tbaa !9
  %685 = icmp slt i32 %683, %684
  br i1 %685, label %686, label %695

686:                                              ; preds = %682
  %687 = load ptr, ptr %16, align 8, !tbaa !5
  %688 = load i32, ptr %34, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds ptr, ptr %687, i64 %689
  %691 = load ptr, ptr %690, align 8, !tbaa !5
  %692 = load i32, ptr %33, align 4, !tbaa !9
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds i8, ptr %691, i64 %693
  store i8 0, ptr %694, align 1, !tbaa !18
  br label %727

695:                                              ; preds = %682
  %696 = load i32, ptr %35, align 4, !tbaa !9
  %697 = load i32, ptr %19, align 4, !tbaa !9
  %698 = icmp sgt i32 %696, %697
  br i1 %698, label %699, label %708

699:                                              ; preds = %695
  %700 = load ptr, ptr %16, align 8, !tbaa !5
  %701 = load i32, ptr %34, align 4, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds ptr, ptr %700, i64 %702
  %704 = load ptr, ptr %703, align 8, !tbaa !5
  %705 = load i32, ptr %33, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i8, ptr %704, i64 %706
  store i8 -1, ptr %707, align 1, !tbaa !18
  br label %726

708:                                              ; preds = %695
  %709 = load ptr, ptr %15, align 8, !tbaa !5
  %710 = load i32, ptr %34, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds ptr, ptr %709, i64 %711
  %713 = load ptr, ptr %712, align 8, !tbaa !5
  %714 = load i32, ptr %33, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds i8, ptr %713, i64 %715
  %717 = load i8, ptr %716, align 1, !tbaa !18
  %718 = load ptr, ptr %16, align 8, !tbaa !5
  %719 = load i32, ptr %34, align 4, !tbaa !9
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds ptr, ptr %718, i64 %720
  %722 = load ptr, ptr %721, align 8, !tbaa !5
  %723 = load i32, ptr %33, align 4, !tbaa !9
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i8, ptr %722, i64 %724
  store i8 %717, ptr %725, align 1, !tbaa !18
  br label %726

726:                                              ; preds = %708, %699
  br label %727

727:                                              ; preds = %726, %686
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %728

728:                                              ; preds = %727
  %729 = load i32, ptr %34, align 4, !tbaa !9
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %34, align 4, !tbaa !9
  br label %577, !llvm.loop !29

731:                                              ; preds = %635
  br label %732

732:                                              ; preds = %731
  %733 = load i32, ptr %33, align 4, !tbaa !9
  %734 = add nsw i32 %733, 1
  store i32 %734, ptr %33, align 4, !tbaa !9
  br label %570, !llvm.loop !30

735:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %736 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %736, ptr %38, align 4, !tbaa !9
  br label %737

737:                                              ; preds = %927, %735
  %738 = load i32, ptr %38, align 4, !tbaa !9
  %739 = load i32, ptr %24, align 4, !tbaa !9
  %740 = icmp slt i32 %738, %739
  br i1 %740, label %742, label %741

741:                                              ; preds = %737
  store i32 40, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  br label %930

742:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %743 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %743, ptr %39, align 4, !tbaa !9
  br label %744

744:                                              ; preds = %923, %742
  %745 = load i32, ptr %39, align 4, !tbaa !9
  %746 = load i32, ptr %20, align 4, !tbaa !9
  %747 = load i32, ptr %8, align 4, !tbaa !9
  %748 = sub nsw i32 16, %747
  %749 = load i32, ptr %8, align 4, !tbaa !9
  %750 = sub nsw i32 %748, %749
  %751 = add nsw i32 %746, %750
  %752 = load ptr, ptr %6, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.MImage, ptr %752, i32 0, i32 4
  %754 = load ptr, ptr %753, align 8, !tbaa !17
  %755 = icmp eq ptr %754, null
  br i1 %755, label %756, label %760

756:                                              ; preds = %744
  %757 = load ptr, ptr %6, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.MImage, ptr %757, i32 0, i32 1
  %759 = load i32, ptr %758, align 4, !tbaa !15
  br label %769

760:                                              ; preds = %744
  %761 = load ptr, ptr %6, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.MImage, ptr %761, i32 0, i32 4
  %763 = load ptr, ptr %762, align 8, !tbaa !17
  %764 = getelementptr inbounds %struct.MArray, ptr %763, i32 0, i32 2
  %765 = load ptr, ptr %764, align 8, !tbaa !18
  %766 = getelementptr inbounds i16, ptr %765, i64 3
  %767 = load i16, ptr %766, align 2, !tbaa !19
  %768 = sext i16 %767 to i32
  br label %769

769:                                              ; preds = %760, %756
  %770 = phi i32 [ %759, %756 ], [ %768, %760 ]
  %771 = icmp slt i32 %751, %770
  br i1 %771, label %772, label %779

772:                                              ; preds = %769
  %773 = load i32, ptr %20, align 4, !tbaa !9
  %774 = load i32, ptr %8, align 4, !tbaa !9
  %775 = sub nsw i32 16, %774
  %776 = load i32, ptr %8, align 4, !tbaa !9
  %777 = sub nsw i32 %775, %776
  %778 = add nsw i32 %773, %777
  br label %799

779:                                              ; preds = %769
  %780 = load ptr, ptr %6, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.MImage, ptr %780, i32 0, i32 4
  %782 = load ptr, ptr %781, align 8, !tbaa !17
  %783 = icmp eq ptr %782, null
  br i1 %783, label %784, label %788

784:                                              ; preds = %779
  %785 = load ptr, ptr %6, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.MImage, ptr %785, i32 0, i32 1
  %787 = load i32, ptr %786, align 4, !tbaa !15
  br label %797

788:                                              ; preds = %779
  %789 = load ptr, ptr %6, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.MImage, ptr %789, i32 0, i32 4
  %791 = load ptr, ptr %790, align 8, !tbaa !17
  %792 = getelementptr inbounds %struct.MArray, ptr %791, i32 0, i32 2
  %793 = load ptr, ptr %792, align 8, !tbaa !18
  %794 = getelementptr inbounds i16, ptr %793, i64 3
  %795 = load i16, ptr %794, align 2, !tbaa !19
  %796 = sext i16 %795 to i32
  br label %797

797:                                              ; preds = %788, %784
  %798 = phi i32 [ %787, %784 ], [ %796, %788 ]
  br label %799

799:                                              ; preds = %797, %772
  %800 = phi i32 [ %778, %772 ], [ %798, %797 ]
  %801 = icmp slt i32 %745, %800
  br i1 %801, label %803, label %802

802:                                              ; preds = %799
  store i32 43, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  br label %926

803:                                              ; preds = %799
  %804 = load i32, ptr %38, align 4, !tbaa !9
  %805 = load ptr, ptr %6, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.MImage, ptr %805, i32 0, i32 4
  %807 = load ptr, ptr %806, align 8, !tbaa !17
  %808 = icmp eq ptr %807, null
  br i1 %808, label %809, label %813

809:                                              ; preds = %803
  %810 = load ptr, ptr %6, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.MImage, ptr %810, i32 0, i32 2
  %812 = load i32, ptr %811, align 8, !tbaa !16
  br label %827

813:                                              ; preds = %803
  %814 = load ptr, ptr %6, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.MImage, ptr %814, i32 0, i32 4
  %816 = load ptr, ptr %815, align 8, !tbaa !17
  %817 = getelementptr inbounds %struct.MArray, ptr %816, i32 0, i32 2
  %818 = load ptr, ptr %817, align 8, !tbaa !18
  %819 = load i32, ptr %39, align 4, !tbaa !9
  %820 = load i32, ptr %39, align 4, !tbaa !9
  %821 = add nsw i32 %819, %820
  %822 = add nsw i32 %821, 5
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i16, ptr %818, i64 %823
  %825 = load i16, ptr %824, align 2, !tbaa !19
  %826 = sext i16 %825 to i32
  br label %827

827:                                              ; preds = %813, %809
  %828 = phi i32 [ %812, %809 ], [ %826, %813 ]
  %829 = icmp slt i32 %804, %828
  br i1 %829, label %830, label %922

830:                                              ; preds = %827
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 0, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  %831 = load i32, ptr %39, align 4, !tbaa !9
  %832 = load i32, ptr %8, align 4, !tbaa !9
  %833 = sub nsw i32 %831, %832
  store i32 %833, ptr %41, align 4, !tbaa !9
  br label %834

834:                                              ; preds = %873, %830
  %835 = load i32, ptr %41, align 4, !tbaa !9
  %836 = load i32, ptr %39, align 4, !tbaa !9
  %837 = load i32, ptr %8, align 4, !tbaa !9
  %838 = add nsw i32 %836, %837
  %839 = icmp sle i32 %835, %838
  br i1 %839, label %841, label %840

840:                                              ; preds = %834
  store i32 46, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  br label %876

841:                                              ; preds = %834
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  %842 = load i32, ptr %38, align 4, !tbaa !9
  %843 = load i32, ptr %8, align 4, !tbaa !9
  %844 = sub nsw i32 %842, %843
  store i32 %844, ptr %42, align 4, !tbaa !9
  br label %845

845:                                              ; preds = %869, %841
  %846 = load i32, ptr %42, align 4, !tbaa !9
  %847 = load i32, ptr %38, align 4, !tbaa !9
  %848 = load i32, ptr %8, align 4, !tbaa !9
  %849 = add nsw i32 %847, %848
  %850 = icmp slt i32 %846, %849
  br i1 %850, label %852, label %851

851:                                              ; preds = %845
  store i32 49, ptr %28, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  br label %872

852:                                              ; preds = %845
  %853 = load ptr, ptr %15, align 8, !tbaa !5
  %854 = load i32, ptr %41, align 4, !tbaa !9
  %855 = load i32, ptr %8, align 4, !tbaa !9
  %856 = sub nsw i32 %854, %855
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds ptr, ptr %853, i64 %857
  %859 = load ptr, ptr %858, align 8, !tbaa !5
  %860 = load i32, ptr %42, align 4, !tbaa !9
  %861 = load i32, ptr %8, align 4, !tbaa !9
  %862 = sub nsw i32 %860, %861
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds i8, ptr %859, i64 %863
  %865 = load i8, ptr %864, align 1, !tbaa !18
  %866 = zext i8 %865 to i32
  %867 = load i32, ptr %40, align 4, !tbaa !9
  %868 = add nsw i32 %867, %866
  store i32 %868, ptr %40, align 4, !tbaa !9
  br label %869

869:                                              ; preds = %852
  %870 = load i32, ptr %42, align 4, !tbaa !9
  %871 = add nsw i32 %870, 1
  store i32 %871, ptr %42, align 4, !tbaa !9
  br label %845, !llvm.loop !31

872:                                              ; preds = %851
  br label %873

873:                                              ; preds = %872
  %874 = load i32, ptr %41, align 4, !tbaa !9
  %875 = add nsw i32 %874, 1
  store i32 %875, ptr %41, align 4, !tbaa !9
  br label %834, !llvm.loop !32

876:                                              ; preds = %840
  %877 = load i32, ptr %40, align 4, !tbaa !9
  %878 = load i32, ptr %18, align 4, !tbaa !9
  %879 = icmp slt i32 %877, %878
  br i1 %879, label %880, label %889

880:                                              ; preds = %876
  %881 = load ptr, ptr %16, align 8, !tbaa !5
  %882 = load i32, ptr %39, align 4, !tbaa !9
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds ptr, ptr %881, i64 %883
  %885 = load ptr, ptr %884, align 8, !tbaa !5
  %886 = load i32, ptr %38, align 4, !tbaa !9
  %887 = sext i32 %886 to i64
  %888 = getelementptr inbounds i8, ptr %885, i64 %887
  store i8 0, ptr %888, align 1, !tbaa !18
  br label %921

889:                                              ; preds = %876
  %890 = load i32, ptr %40, align 4, !tbaa !9
  %891 = load i32, ptr %19, align 4, !tbaa !9
  %892 = icmp sgt i32 %890, %891
  br i1 %892, label %893, label %902

893:                                              ; preds = %889
  %894 = load ptr, ptr %16, align 8, !tbaa !5
  %895 = load i32, ptr %39, align 4, !tbaa !9
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds ptr, ptr %894, i64 %896
  %898 = load ptr, ptr %897, align 8, !tbaa !5
  %899 = load i32, ptr %38, align 4, !tbaa !9
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds i8, ptr %898, i64 %900
  store i8 -1, ptr %901, align 1, !tbaa !18
  br label %920

902:                                              ; preds = %889
  %903 = load ptr, ptr %15, align 8, !tbaa !5
  %904 = load i32, ptr %39, align 4, !tbaa !9
  %905 = sext i32 %904 to i64
  %906 = getelementptr inbounds ptr, ptr %903, i64 %905
  %907 = load ptr, ptr %906, align 8, !tbaa !5
  %908 = load i32, ptr %38, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds i8, ptr %907, i64 %909
  %911 = load i8, ptr %910, align 1, !tbaa !18
  %912 = load ptr, ptr %16, align 8, !tbaa !5
  %913 = load i32, ptr %39, align 4, !tbaa !9
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds ptr, ptr %912, i64 %914
  %916 = load ptr, ptr %915, align 8, !tbaa !5
  %917 = load i32, ptr %38, align 4, !tbaa !9
  %918 = sext i32 %917 to i64
  %919 = getelementptr inbounds i8, ptr %916, i64 %918
  store i8 %911, ptr %919, align 1, !tbaa !18
  br label %920

920:                                              ; preds = %902, %893
  br label %921

921:                                              ; preds = %920, %880
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  br label %922

922:                                              ; preds = %921, %827
  br label %923

923:                                              ; preds = %922
  %924 = load i32, ptr %39, align 4, !tbaa !9
  %925 = add nsw i32 %924, 1
  store i32 %925, ptr %39, align 4, !tbaa !9
  br label %744, !llvm.loop !33

926:                                              ; preds = %802
  br label %927

927:                                              ; preds = %926
  %928 = load i32, ptr %38, align 4, !tbaa !9
  %929 = add nsw i32 %928, 1
  store i32 %929, ptr %38, align 4, !tbaa !9
  br label %737, !llvm.loop !34

930:                                              ; preds = %741
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %931

931:                                              ; preds = %930
  %932 = load i32, ptr %20, align 4, !tbaa !9
  %933 = load i32, ptr %8, align 4, !tbaa !9
  %934 = sub nsw i32 16, %933
  %935 = load i32, ptr %8, align 4, !tbaa !9
  %936 = sub nsw i32 %934, %935
  %937 = add nsw i32 %932, %936
  store i32 %937, ptr %20, align 4, !tbaa !9
  br label %208, !llvm.loop !35

938:                                              ; preds = %227
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %939

939:                                              ; preds = %938
  br label %940

940:                                              ; preds = %939
  %941 = load ptr, ptr %12, align 8, !tbaa !5
  %942 = load ptr, ptr %7, align 8, !tbaa !5
  %943 = icmp ne ptr %941, %942
  br i1 %943, label %944, label %955

944:                                              ; preds = %940
  br label %945

945:                                              ; preds = %944
  call void @llvm.lifetime.start.p0(i64 56, ptr %43) #4
  %946 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %946, i64 56, i1 false), !tbaa.struct !36
  %947 = load ptr, ptr %6, align 8, !tbaa !5
  %948 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %947, ptr align 8 %948, i64 56, i1 false), !tbaa.struct !36
  %949 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %949, ptr align 8 %43, i64 56, i1 false), !tbaa.struct !36
  %950 = load ptr, ptr %6, align 8, !tbaa !5
  %951 = load ptr, ptr %7, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %950, ptr noundef %951)
  call void @llvm.lifetime.end.p0(i64 56, ptr %43) #4
  br label %952

952:                                              ; preds = %945
  br label %953

953:                                              ; preds = %952
  %954 = load ptr, ptr %7, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %954)
  br label %955

955:                                              ; preds = %953, %940
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  ret void
}

declare ptr @ImageCreate(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #1

declare void @ImageRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #1

declare void @HandleExchange(ptr noundef, ptr noundef) #1

declare void @mImageRelease(ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"MImage", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !6, i64 48}
!15 = !{!14, !10, i64 4}
!16 = !{!14, !10, i64 8}
!17 = !{!14, !6, i64 48}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"short", !7, 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}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 16, i64 32, !18, i64 48, i64 8, !5}


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

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

@.str = external hidden unnamed_addr constant [85 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [14 x i8], align 1
@__FUNCTION__.mImageBinaryFilter = external hidden unnamed_addr constant [19 x i8], align 1

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @mImageBinaryFilter(ptr noundef %0, ptr noundef %1, i32 noundef %2, float noundef %3, float noundef %4) local_unnamed_addr #3 {
  %6 = alloca %struct.MImage, align 8
  %magicptr = ptrtoint ptr %0 to i64
  switch i64 %magicptr, label %7 [
    i64 -1, label %.thread
    i64 0, label %.thread
  ]

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

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

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

17:                                               ; preds = %13
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = load i32, ptr %18, align 8, !tbaa !12
  %20 = icmp sgt i32 %19, 0
  br i1 %20, label %21, label %.thread

.thread:                                          ; preds = %7, %10, %13, %5, %5, %17
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 452, ptr noundef nonnull @__FUNCTION__.mImageBinaryFilter, ptr noundef nonnull @.str.1) #5
  br label %21

21:                                               ; preds = %.thread, %17
  %magicptr343 = ptrtoint ptr %1 to i64
  switch i64 %magicptr343, label %22 [
    i64 -1, label %24
    i64 0, label %24
  ]

22:                                               ; preds = %21
  %23 = icmp eq ptr %1, %0
  br i1 %23, label %24, label %30

24:                                               ; preds = %21, %21, %22
  %25 = getelementptr inbounds i8, ptr %0, i64 4
  %26 = load i32, ptr %25, align 4, !tbaa !11
  %27 = getelementptr inbounds i8, ptr %0, i64 8
  %28 = load i32, ptr %27, align 8, !tbaa !12
  %29 = tail call ptr @ImageCreate(i32 noundef 1, i32 noundef %26, i32 noundef %28, ptr noundef null) #5
  br label %36

30:                                               ; preds = %22
  %31 = getelementptr inbounds i8, ptr %0, i64 4
  %32 = load i32, ptr %31, align 4, !tbaa !11
  %33 = getelementptr inbounds i8, ptr %0, i64 8
  %34 = load i32, ptr %33, align 8, !tbaa !12
  %35 = getelementptr inbounds i8, ptr %1, i64 16
  tail call void @ImageRedefine(ptr noundef %1, i32 noundef 1, i32 noundef %32, i32 noundef %34, ptr noundef nonnull %35) #5
  br label %36

36:                                               ; preds = %30, %24
  %.0307 = phi ptr [ %29, %24 ], [ %1, %30 ]
  %37 = getelementptr inbounds i8, ptr %0, i64 16
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  %39 = getelementptr inbounds i8, ptr %.0307, i64 16
  %40 = load ptr, ptr %39, align 8, !tbaa !13
  %41 = shl i32 %2, 1
  %42 = or disjoint i32 %41, 1
  %43 = mul nsw i32 %42, %42
  %44 = uitofp nneg i32 %43 to float
  %45 = fmul float %44, %3
  %46 = fmul float %45, 2.550000e+02
  %47 = fptosi float %46 to i32
  %48 = fmul float %44, %4
  %49 = fmul float %48, 2.550000e+02
  %50 = fptosi float %49 to i32
  %51 = getelementptr inbounds i8, ptr %0, i64 48
  %52 = load ptr, ptr %51, align 8, !tbaa !14
  %53 = icmp eq ptr %52, null
  br i1 %53, label %60, label %54

54:                                               ; preds = %36
  %55 = getelementptr inbounds i8, ptr %52, i64 8
  %56 = load ptr, ptr %55, align 8, !tbaa !15
  %57 = getelementptr inbounds i8, ptr %56, i64 4
  %58 = load i16, ptr %57, align 2, !tbaa !16
  %59 = sext i16 %58 to i32
  br label %60

60:                                               ; preds = %36, %54
  %61 = phi i32 [ %59, %54 ], [ 0, %36 ]
  %62 = getelementptr inbounds i8, ptr %0, i64 4
  %63 = getelementptr inbounds i8, ptr %0, i64 8
  %64 = icmp sgt i32 %47, 0
  %65 = icmp slt i32 %50, 0
  %66 = sext i32 %2 to i64
  %67 = sub i32 %61, %2
  %68 = sub i32 16, %41
  %69 = add i32 %61, %2
  %70 = add i32 %69, 1
  %71 = add i32 %41, -2
  %72 = zext i32 %71 to i64
  %73 = add nuw nsw i64 %72, 2
  %74 = zext i32 %71 to i64
  %75 = add nuw nsw i64 %74, 2
  %min.iters.check595 = icmp ult i32 %71, 6
  %n.vec598 = and i64 %75, 8589934584
  %cmp.n610 = icmp eq i64 %75, %n.vec598
  %brmerge547 = select i1 %64, i1 true, i1 %65
  %not. = xor i1 %64, true
  %.mux = sext i1 %not. to i8
  %min.iters.check = icmp ult i32 %71, 6
  %n.vec = and i64 %73, 8589934584
  %cmp.n = icmp eq i64 %73, %n.vec
  br label %76

76:                                               ; preds = %._crit_edge, %60
  %77 = phi ptr [ %320, %._crit_edge ], [ %52, %60 ]
  %78 = phi ptr [ %321, %._crit_edge ], [ %52, %60 ]
  %79 = phi ptr [ %322, %._crit_edge ], [ %52, %60 ]
  %80 = phi ptr [ %323, %._crit_edge ], [ %52, %60 ]
  %81 = phi ptr [ %324, %._crit_edge ], [ %52, %60 ]
  %indvars.iv423 = phi i32 [ %indvars.iv.next424, %._crit_edge ], [ %70, %60 ]
  %indvars.iv416 = phi i32 [ %indvars.iv.next417, %._crit_edge ], [ %67, %60 ]
  %.0306 = phi i32 [ %227, %._crit_edge ], [ %61, %60 ]
  %82 = sext i32 %.0306 to i64
  %83 = sext i32 %.0306 to i64
  %84 = icmp eq ptr %81, null
  br i1 %84, label %85, label %.thread494

85:                                               ; preds = %76
  %86 = load i32, ptr %62, align 4, !tbaa !11
  %87 = icmp slt i32 %.0306, %86
  br i1 %87, label %94, label %389

.thread494:                                       ; preds = %76
  %88 = getelementptr inbounds i8, ptr %81, i64 8
  %89 = load ptr, ptr %88, align 8, !tbaa !15
  %90 = getelementptr inbounds i8, ptr %89, i64 6
  %91 = load i16, ptr %90, align 2, !tbaa !16
  %92 = sext i16 %91 to i32
  %93 = icmp slt i32 %.0306, %92
  br i1 %93, label %.preheader363, label %389

94:                                               ; preds = %85
  %95 = load i32, ptr %63, align 8, !tbaa !12
  br label %.loopexit

.preheader363:                                    ; preds = %.thread494
  %96 = load i32, ptr %63, align 8, !tbaa !12
  %reass.sub = sub i32 %.0306, %41
  %97 = add i32 %reass.sub, 16
  %98 = getelementptr inbounds i8, ptr %81, i64 8
  %99 = load ptr, ptr %98, align 8, !tbaa !15
  %100 = getelementptr inbounds i8, ptr %99, i64 6
  %101 = load i16, ptr %100, align 2, !tbaa !16
  %102 = sext i16 %101 to i32
  %spec.select516 = tail call i32 @llvm.smin.i32(i32 %97, i32 %102)
  %103 = sext i32 %spec.select516 to i64
  %104 = icmp slt i32 %.0306, %spec.select516
  br i1 %104, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader363
  %105 = sub nsw i64 %103, %82
  %min.iters.check614 = icmp ult i64 %105, 8
  br i1 %min.iters.check614, label %scalar.ph613.preheader, label %vector.ph615

vector.ph615:                                     ; preds = %.lr.ph
  %n.vec617 = and i64 %105, -8
  %ind.end618 = add nsw i64 %n.vec617, %83
  %minmax.ident.splatinsert = insertelement <4 x i32> poison, i32 %96, i64 0
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %minmax.ident.splatinsert630 = insertelement <4 x i32> poison, i32 %96, i64 0
  %minmax.ident.splat631 = shufflevector <4 x i32> %minmax.ident.splatinsert630, <4 x i32> poison, <4 x i32> zeroinitializer
  %invariant.gep = getelementptr i8, ptr %99, i64 8
  %invariant.gep707 = getelementptr i8, ptr %99, i64 24
  br label %vector.body620

vector.body620:                                   ; preds = %vector.body620, %vector.ph615
  %index621 = phi i64 [ 0, %vector.ph615 ], [ %index.next637, %vector.body620 ]
  %vec.phi622 = phi <4 x i32> [ zeroinitializer, %vector.ph615 ], [ %118, %vector.body620 ]
  %vec.phi623 = phi <4 x i32> [ zeroinitializer, %vector.ph615 ], [ %119, %vector.body620 ]
  %vec.phi624 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph615 ], [ %116, %vector.body620 ]
  %vec.phi625 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph615 ], [ %117, %vector.body620 ]
  %vec.phi626 = phi <4 x i32> [ zeroinitializer, %vector.ph615 ], [ %112, %vector.body620 ]
  %vec.phi627 = phi <4 x i32> [ zeroinitializer, %vector.ph615 ], [ %113, %vector.body620 ]
  %vec.phi628 = phi <4 x i32> [ %minmax.ident.splat631, %vector.ph615 ], [ %110, %vector.body620 ]
  %vec.phi629 = phi <4 x i32> [ %minmax.ident.splat631, %vector.ph615 ], [ %111, %vector.body620 ]
  %offset.idx632 = add i64 %index621, %83
  %106 = shl i64 %offset.idx632, 2
  %107 = shl i64 %offset.idx632, 2
  %gep = getelementptr i8, ptr %invariant.gep, i64 %106
  %gep708 = getelementptr i8, ptr %invariant.gep707, i64 %107
  %wide.vec = load <8 x i16>, ptr %gep, align 2, !tbaa !16
  %wide.vec633 = load <8 x i16>, ptr %gep708, align 2, !tbaa !16
  %strided.vec = shufflevector <8 x i16> %wide.vec, <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec634 = shufflevector <8 x i16> %wide.vec633, <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec635 = shufflevector <8 x i16> %wide.vec, <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %strided.vec636 = shufflevector <8 x i16> %wide.vec633, <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %108 = sext <4 x i16> %strided.vec to <4 x i32>
  %109 = sext <4 x i16> %strided.vec634 to <4 x i32>
  %110 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi628, <4 x i32> %108)
  %111 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi629, <4 x i32> %109)
  %112 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi626, <4 x i32> %108)
  %113 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi627, <4 x i32> %109)
  %114 = sext <4 x i16> %strided.vec635 to <4 x i32>
  %115 = sext <4 x i16> %strided.vec636 to <4 x i32>
  %116 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi624, <4 x i32> %114)
  %117 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi625, <4 x i32> %115)
  %118 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi622, <4 x i32> %114)
  %119 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi623, <4 x i32> %115)
  %index.next637 = add nuw i64 %index621, 8
  %120 = icmp eq i64 %index.next637, %n.vec617
  br i1 %120, label %middle.block612, label %vector.body620, !llvm.loop !18

middle.block612:                                  ; preds = %vector.body620
  %rdx.minmax = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %118, <4 x i32> %119)
  %121 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax)
  %rdx.minmax638 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %116, <4 x i32> %117)
  %122 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax638)
  %rdx.minmax639 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %112, <4 x i32> %113)
  %123 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax639)
  %rdx.minmax640 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %110, <4 x i32> %111)
  %124 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax640)
  %cmp.n641 = icmp eq i64 %105, %n.vec617
  br i1 %cmp.n641, label %.loopexit, label %scalar.ph613.preheader

scalar.ph613.preheader:                           ; preds = %middle.block612, %.lr.ph
  %.0295568.ph = phi i32 [ 0, %.lr.ph ], [ %121, %middle.block612 ]
  %.0297567.ph = phi i32 [ %96, %.lr.ph ], [ %122, %middle.block612 ]
  %.0300566.ph = phi i32 [ 0, %.lr.ph ], [ %123, %middle.block612 ]
  %.0303565.ph = phi i32 [ %96, %.lr.ph ], [ %124, %middle.block612 ]
  %indvars.iv564.ph = phi i64 [ %83, %.lr.ph ], [ %ind.end618, %middle.block612 ]
  br label %scalar.ph613

scalar.ph613:                                     ; preds = %scalar.ph613.preheader, %scalar.ph613
  %.0295568 = phi i32 [ %.1296, %scalar.ph613 ], [ %.0295568.ph, %scalar.ph613.preheader ]
  %.0297567 = phi i32 [ %spec.select344, %scalar.ph613 ], [ %.0297567.ph, %scalar.ph613.preheader ]
  %.0300566 = phi i32 [ %.1301, %scalar.ph613 ], [ %.0300566.ph, %scalar.ph613.preheader ]
  %.0303565 = phi i32 [ %spec.select, %scalar.ph613 ], [ %.0303565.ph, %scalar.ph613.preheader ]
  %indvars.iv564 = phi i64 [ %indvars.iv.next, %scalar.ph613 ], [ %indvars.iv564.ph, %scalar.ph613.preheader ]
  %.idx = shl i64 %indvars.iv564, 2
  %125 = getelementptr i8, ptr %99, i64 %.idx
  %126 = getelementptr i8, ptr %125, i64 8
  %127 = load i16, ptr %126, align 2, !tbaa !16
  %128 = sext i16 %127 to i32
  %spec.select = tail call i32 @llvm.smin.i32(i32 %.0303565, i32 %128)
  %.1301 = tail call i32 @llvm.smax.i32(i32 %.0300566, i32 %128)
  %129 = getelementptr i8, ptr %125, i64 10
  %130 = load i16, ptr %129, align 2, !tbaa !16
  %131 = sext i16 %130 to i32
  %spec.select344 = tail call i32 @llvm.smin.i32(i32 %.0297567, i32 %131)
  %.1296 = tail call i32 @llvm.smax.i32(i32 %.0295568, i32 %131)
  %indvars.iv.next = add nsw i64 %indvars.iv564, 1
  %132 = icmp slt i64 %indvars.iv.next, %103
  br i1 %132, label %scalar.ph613, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %scalar.ph613, %.preheader363, %middle.block612, %94
  %.2305 = phi i32 [ %95, %94 ], [ %96, %.preheader363 ], [ %124, %middle.block612 ], [ %spec.select, %scalar.ph613 ]
  %.2302 = phi i32 [ 0, %94 ], [ 0, %.preheader363 ], [ %123, %middle.block612 ], [ %.1301, %scalar.ph613 ]
  %.2299 = phi i32 [ %95, %94 ], [ %96, %.preheader363 ], [ %122, %middle.block612 ], [ %spec.select344, %scalar.ph613 ]
  %.2 = phi i32 [ 0, %94 ], [ 0, %.preheader363 ], [ %121, %middle.block612 ], [ %.1296, %scalar.ph613 ]
  %133 = icmp slt i32 %.2305, %.2302
  br i1 %133, label %.preheader360.lr.ph, label %.preheader362

.preheader360.lr.ph:                              ; preds = %.loopexit
  %reass.sub341 = sub i32 %.0306, %41
  %134 = add i32 %reass.sub341, 16
  %135 = sub i32 %.2305, %2
  %136 = add i32 %.2305, %2
  %137 = sext i32 %.2305 to i64
  %wide.trip.count = zext nneg i32 %.2302 to i64
  %138 = sext i32 %134 to i64
  br label %.preheader360

.preheader362:                                    ; preds = %177, %.loopexit
  %139 = phi ptr [ %77, %.loopexit ], [ %158, %177 ]
  %140 = phi ptr [ %78, %.loopexit ], [ %159, %177 ]
  %141 = phi ptr [ %79, %.loopexit ], [ %160, %177 ]
  %142 = phi ptr [ %80, %.loopexit ], [ %161, %177 ]
  %143 = phi ptr [ %81, %.loopexit ], [ %161, %177 ]
  %144 = icmp slt i32 %.2302, %.2299
  br i1 %144, label %.preheader359.lr.ph, label %.preheader361

.preheader359.lr.ph:                              ; preds = %.preheader362
  %reass.sub339 = sub i32 %.0306, %41
  %145 = add i32 %reass.sub339, 16
  %146 = sub i32 %.2302, %2
  %147 = zext i32 %.2302 to i64
  %wide.trip.count459 = sext i32 %.2299 to i64
  %148 = add nsw i64 %66, %147
  br label %.preheader359

.preheader360:                                    ; preds = %.preheader360.lr.ph, %177
  %149 = phi ptr [ %77, %.preheader360.lr.ph ], [ %158, %177 ]
  %150 = phi ptr [ %78, %.preheader360.lr.ph ], [ %159, %177 ]
  %151 = phi ptr [ %79, %.preheader360.lr.ph ], [ %160, %177 ]
  %152 = phi ptr [ %80, %.preheader360.lr.ph ], [ %161, %177 ]
  %indvars.iv432 = phi i64 [ %137, %.preheader360.lr.ph ], [ %indvars.iv.next433, %177 ]
  %indvars.iv414 = phi i32 [ %136, %.preheader360.lr.ph ], [ %indvars.iv.next415, %177 ]
  %indvars.iv409 = phi i32 [ %135, %.preheader360.lr.ph ], [ %indvars.iv.next410, %177 ]
  %153 = sext i32 %indvars.iv409 to i64
  %154 = sub nsw i64 %indvars.iv432, %66
  %155 = add nsw i64 %indvars.iv432, %66
  %156 = icmp sge i64 %154, %155
  %ind.end599 = add nsw i64 %n.vec598, %153
  br label %157

157:                                              ; preds = %.preheader360, %220
  %158 = phi ptr [ %149, %.preheader360 ], [ %.pre, %220 ]
  %159 = phi ptr [ %150, %.preheader360 ], [ %.pre, %220 ]
  %160 = phi ptr [ %151, %.preheader360 ], [ %.pre, %220 ]
  %161 = phi ptr [ %152, %.preheader360 ], [ %.pre, %220 ]
  %indvars.iv429 = phi i64 [ %83, %.preheader360 ], [ %indvars.iv.next430, %220 ]
  %indvars.iv425 = phi i32 [ %indvars.iv423, %.preheader360 ], [ %indvars.iv.next426, %220 ]
  %indvars.iv418 = phi i32 [ %indvars.iv416, %.preheader360 ], [ %indvars.iv.next419, %220 ]
  %162 = sext i32 %indvars.iv418 to i64
  %163 = icmp eq ptr %161, null
  br i1 %163, label %164, label %.thread349

164:                                              ; preds = %157
  %165 = load i32, ptr %62, align 4, !tbaa !11
  %166 = icmp slt i32 %134, %165
  br i1 %166, label %.thread496, label %.thread351

.thread349:                                       ; preds = %157
  %167 = getelementptr inbounds i8, ptr %161, i64 8
  %168 = load ptr, ptr %167, align 8, !tbaa !15
  %169 = getelementptr inbounds i8, ptr %168, i64 6
  %170 = load i16, ptr %169, align 2, !tbaa !16
  %171 = sext i16 %170 to i32
  %spec.select517 = tail call i32 @llvm.smin.i32(i32 %134, i32 %171)
  %172 = sext i32 %spec.select517 to i64
  %173 = icmp slt i64 %indvars.iv429, %172
  br i1 %173, label %178, label %177

.thread496:                                       ; preds = %164
  %174 = icmp slt i64 %indvars.iv429, %138
  br i1 %174, label %.thread352, label %177

.thread351:                                       ; preds = %164
  %175 = sext i32 %165 to i64
  %176 = icmp slt i64 %indvars.iv429, %175
  br i1 %176, label %.thread352, label %177

177:                                              ; preds = %.thread496, %.thread351, %.thread349
  %indvars.iv.next433 = add nsw i64 %indvars.iv432, 1
  %indvars.iv.next410 = add i32 %indvars.iv409, 1
  %indvars.iv.next415 = add i32 %indvars.iv414, 1
  %exitcond435.not = icmp eq i64 %indvars.iv.next433, %wide.trip.count
  br i1 %exitcond435.not, label %.preheader362, label %.preheader360, !llvm.loop !23

178:                                              ; preds = %.thread349
  br i1 %163, label %.thread352, label %179

179:                                              ; preds = %178
  %180 = getelementptr inbounds i8, ptr %161, i64 8
  %181 = load ptr, ptr %180, align 8, !tbaa !15
  %.idx493 = shl i64 %indvars.iv429, 2
  %182 = getelementptr i8, ptr %181, i64 %.idx493
  %183 = getelementptr i8, ptr %182, i64 8
  %184 = load i16, ptr %183, align 2, !tbaa !16
  %185 = sext i16 %184 to i64
  br label %.thread352

.thread352:                                       ; preds = %.thread496, %.thread351, %178, %179
  %186 = phi i64 [ %185, %179 ], [ 0, %178 ], [ 0, %.thread351 ], [ 0, %.thread496 ]
  %187 = icmp sgt i64 %indvars.iv432, %186
  br i1 %187, label %188, label %220

188:                                              ; preds = %.thread352
  %189 = sub nsw i64 %indvars.iv429, %66
  %190 = add nsw i64 %indvars.iv429, %66
  %.not342366 = icmp sgt i64 %189, %190
  %brmerge = select i1 %.not342366, i1 true, i1 %156
  br i1 %brmerge, label %._crit_edge371, label %.lr.ph.us

.lr.ph.us:                                        ; preds = %188, %._crit_edge.us
  %indvars.iv420 = phi i64 [ %indvars.iv.next421, %._crit_edge.us ], [ %162, %188 ]
  %.0290367.us = phi i32 [ %.lcssa, %._crit_edge.us ], [ 0, %188 ]
  %191 = sub nsw i64 %indvars.iv420, %66
  %192 = getelementptr inbounds ptr, ptr %38, i64 %191
  %193 = load ptr, ptr %192, align 8, !tbaa !13
  br i1 %min.iters.check595, label %scalar.ph594.preheader, label %vector.ph596

vector.ph596:                                     ; preds = %.lr.ph.us
  %194 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0290367.us, i64 0
  br label %vector.body601

vector.body601:                                   ; preds = %vector.body601, %vector.ph596
  %index602 = phi i64 [ 0, %vector.ph596 ], [ %index.next608, %vector.body601 ]
  %vec.phi603 = phi <4 x i32> [ %194, %vector.ph596 ], [ %200, %vector.body601 ]
  %vec.phi604 = phi <4 x i32> [ zeroinitializer, %vector.ph596 ], [ %201, %vector.body601 ]
  %offset.idx605 = add i64 %index602, %153
  %195 = sub nsw i64 %offset.idx605, %66
  %196 = getelementptr inbounds i8, ptr %193, i64 %195
  %197 = getelementptr inbounds i8, ptr %196, i64 4
  %wide.load606 = load <4 x i8>, ptr %196, align 1, !tbaa !15
  %wide.load607 = load <4 x i8>, ptr %197, align 1, !tbaa !15
  %198 = zext <4 x i8> %wide.load606 to <4 x i32>
  %199 = zext <4 x i8> %wide.load607 to <4 x i32>
  %200 = add <4 x i32> %vec.phi603, %198
  %201 = add <4 x i32> %vec.phi604, %199
  %index.next608 = add nuw i64 %index602, 8
  %202 = icmp eq i64 %index.next608, %n.vec598
  br i1 %202, label %middle.block593, label %vector.body601, !llvm.loop !24

middle.block593:                                  ; preds = %vector.body601
  %bin.rdx609 = add <4 x i32> %201, %200
  %203 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx609)
  br i1 %cmp.n610, label %._crit_edge.us, label %scalar.ph594.preheader

scalar.ph594.preheader:                           ; preds = %middle.block593, %.lr.ph.us
  %indvars.iv411.ph = phi i64 [ %153, %.lr.ph.us ], [ %ind.end599, %middle.block593 ]
  %.1291364.us.ph = phi i32 [ %.0290367.us, %.lr.ph.us ], [ %203, %middle.block593 ]
  br label %scalar.ph594

scalar.ph594:                                     ; preds = %scalar.ph594.preheader, %scalar.ph594
  %indvars.iv411 = phi i64 [ %indvars.iv.next412, %scalar.ph594 ], [ %indvars.iv411.ph, %scalar.ph594.preheader ]
  %.1291364.us = phi i32 [ %208, %scalar.ph594 ], [ %.1291364.us.ph, %scalar.ph594.preheader ]
  %204 = sub nsw i64 %indvars.iv411, %66
  %205 = getelementptr inbounds i8, ptr %193, i64 %204
  %206 = load i8, ptr %205, align 1, !tbaa !15
  %207 = zext i8 %206 to i32
  %208 = add nsw i32 %.1291364.us, %207
  %indvars.iv.next412 = add nsw i64 %indvars.iv411, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next412 to i32
  %exitcond.not = icmp eq i32 %indvars.iv414, %lftr.wideiv
  br i1 %exitcond.not, label %._crit_edge.us, label %scalar.ph594, !llvm.loop !25

._crit_edge.us:                                   ; preds = %scalar.ph594, %middle.block593
  %.lcssa = phi i32 [ %203, %middle.block593 ], [ %208, %scalar.ph594 ]
  %indvars.iv.next421 = add nsw i64 %indvars.iv420, 1
  %lftr.wideiv427 = trunc i64 %indvars.iv.next421 to i32
  %exitcond428.not = icmp eq i32 %indvars.iv425, %lftr.wideiv427
  br i1 %exitcond428.not, label %._crit_edge371, label %.lr.ph.us, !llvm.loop !26

._crit_edge371:                                   ; preds = %._crit_edge.us, %188
  %.0290.lcssa = phi i32 [ 0, %188 ], [ %.lcssa, %._crit_edge.us ]
  %209 = icmp slt i32 %.0290.lcssa, %47
  br i1 %209, label %.sink.split, label %210

210:                                              ; preds = %._crit_edge371
  %211 = icmp sgt i32 %.0290.lcssa, %50
  br i1 %211, label %.sink.split, label %212

212:                                              ; preds = %210
  %213 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv429
  %214 = load ptr, ptr %213, align 8, !tbaa !13
  %215 = getelementptr inbounds i8, ptr %214, i64 %indvars.iv432
  %216 = load i8, ptr %215, align 1, !tbaa !15
  br label %.sink.split

.sink.split:                                      ; preds = %210, %._crit_edge371, %212
  %.sink = phi i8 [ %216, %212 ], [ 0, %._crit_edge371 ], [ -1, %210 ]
  %217 = getelementptr inbounds ptr, ptr %40, i64 %indvars.iv429
  %218 = load ptr, ptr %217, align 8, !tbaa !13
  %219 = getelementptr inbounds i8, ptr %218, i64 %indvars.iv432
  store i8 %.sink, ptr %219, align 1, !tbaa !15
  br label %220

220:                                              ; preds = %.sink.split, %.thread352
  %indvars.iv.next430 = add nsw i64 %indvars.iv429, 1
  %indvars.iv.next419 = add i32 %indvars.iv418, 1
  %indvars.iv.next426 = add i32 %indvars.iv425, 1
  %.pre = load ptr, ptr %51, align 8, !tbaa !14
  br label %157, !llvm.loop !27

.preheader361:                                    ; preds = %.split.us, %.preheader362
  %221 = phi ptr [ %139, %.preheader362 ], [ %303, %.split.us ]
  %222 = phi ptr [ %140, %.preheader362 ], [ %304, %.split.us ]
  %223 = phi ptr [ %141, %.preheader362 ], [ %305, %.split.us ]
  %224 = phi ptr [ %142, %.preheader362 ], [ %305, %.split.us ]
  %225 = phi ptr [ %143, %.preheader362 ], [ %305, %.split.us ]
  %226 = icmp slt i32 %.2299, %.2
  %reass.sub337 = sub i32 %.0306, %41
  %227 = add i32 %reass.sub337, 16
  br i1 %226, label %.preheader.lr.ph, label %._crit_edge

.preheader.lr.ph:                                 ; preds = %.preheader361
  %228 = sub i32 %.2299, %2
  %229 = add i32 %.2299, %2
  %230 = sext i32 %.2299 to i64
  %wide.trip.count485 = zext nneg i32 %.2 to i64
  %231 = sext i32 %227 to i64
  br label %.preheader

.preheader359:                                    ; preds = %.preheader359.lr.ph, %.split.us
  %indvar = phi i64 [ 0, %.preheader359.lr.ph ], [ %indvar.next, %.split.us ]
  %232 = phi ptr [ %139, %.preheader359.lr.ph ], [ %303, %.split.us ]
  %233 = phi ptr [ %140, %.preheader359.lr.ph ], [ %304, %.split.us ]
  %234 = phi ptr [ %141, %.preheader359.lr.ph ], [ %305, %.split.us ]
  %indvars.iv456 = phi i64 [ %147, %.preheader359.lr.ph ], [ %indvars.iv.next457, %.split.us ]
  %indvars.iv439 = phi i32 [ %146, %.preheader359.lr.ph ], [ %indvars.iv.next440, %.split.us ]
  %235 = add i64 %148, %indvar
  %236 = sext i32 %indvars.iv439 to i64
  %237 = add nsw i64 %236, 1
  %smax = tail call i64 @llvm.smax.i64(i64 %235, i64 %237)
  %238 = sub i64 %smax, %236
  %239 = sext i32 %indvars.iv439 to i64
  %240 = sub nsw i64 %indvars.iv456, %66
  %241 = add nsw i64 %indvars.iv456, %66
  %242 = icmp slt i64 %240, %241
  %.fr = freeze i1 %242
  br i1 %.fr, label %.preheader359.split.us.preheader, label %.preheader359.split

.preheader359.split.us.preheader:                 ; preds = %.preheader359
  %min.iters.check576 = icmp ult i64 %238, 8
  %n.vec579 = and i64 %238, -8
  %ind.end580 = add i64 %n.vec579, %239
  %cmp.n591 = icmp eq i64 %238, %n.vec579
  br label %.preheader359.split.us

.preheader359.split.us:                           ; preds = %.preheader359.split.us.preheader, %267
  %243 = phi ptr [ %.pre488, %267 ], [ %232, %.preheader359.split.us.preheader ]
  %244 = phi ptr [ %.pre488, %267 ], [ %233, %.preheader359.split.us.preheader ]
  %indvars.iv453 = phi i64 [ %indvars.iv.next454, %267 ], [ %83, %.preheader359.split.us.preheader ]
  %indvars.iv449 = phi i32 [ %indvars.iv.next450, %267 ], [ %indvars.iv423, %.preheader359.split.us.preheader ]
  %indvars.iv444 = phi i32 [ %indvars.iv.next445, %267 ], [ %indvars.iv416, %.preheader359.split.us.preheader ]
  %245 = sext i32 %indvars.iv444 to i64
  %246 = icmp eq ptr %244, null
  br i1 %246, label %252, label %.thread353.us

.thread353.us:                                    ; preds = %.preheader359.split.us
  %247 = getelementptr inbounds i8, ptr %244, i64 8
  %248 = load ptr, ptr %247, align 8, !tbaa !15
  %249 = getelementptr inbounds i8, ptr %248, i64 6
  %250 = load i16, ptr %249, align 2, !tbaa !16
  %251 = sext i16 %250 to i32
  br label %.thread354.us

252:                                              ; preds = %.preheader359.split.us
  %253 = load i32, ptr %62, align 4, !tbaa !11
  br label %.thread354.us

.thread354.us:                                    ; preds = %252, %.thread353.us
  %.sink543 = phi i32 [ %253, %252 ], [ %251, %.thread353.us ]
  %spec.select522 = tail call i32 @llvm.smin.i32(i32 %145, i32 %.sink543)
  %254 = sext i32 %spec.select522 to i64
  %255 = icmp slt i64 %indvars.iv453, %254
  br i1 %255, label %256, label %.split.us

256:                                              ; preds = %.thread354.us
  %257 = sub nsw i64 %indvars.iv453, %66
  %258 = add nsw i64 %indvars.iv453, %66
  %.not340376.us = icmp sgt i64 %257, %258
  br i1 %.not340376.us, label %._crit_edge381.split.us.us, label %.lr.ph.us383.us

._crit_edge381.split.us.us:                       ; preds = %._crit_edge.us384.us, %256
  %.0284.lcssa.us = phi i32 [ 0, %256 ], [ %.lcssa556, %._crit_edge.us384.us ]
  %259 = icmp slt i32 %.0284.lcssa.us, %47
  br i1 %259, label %267, label %260

260:                                              ; preds = %._crit_edge381.split.us.us
  %261 = icmp sgt i32 %.0284.lcssa.us, %50
  br i1 %261, label %267, label %262

262:                                              ; preds = %260
  %263 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv453
  %264 = load ptr, ptr %263, align 8, !tbaa !13
  %265 = getelementptr inbounds i8, ptr %264, i64 %indvars.iv456
  %266 = load i8, ptr %265, align 1, !tbaa !15
  br label %267

267:                                              ; preds = %._crit_edge381.split.us.us, %260, %262
  %.sink523 = phi i8 [ %266, %262 ], [ -1, %260 ], [ 0, %._crit_edge381.split.us.us ]
  %268 = getelementptr inbounds ptr, ptr %40, i64 %indvars.iv453
  %269 = load ptr, ptr %268, align 8, !tbaa !13
  %270 = getelementptr inbounds i8, ptr %269, i64 %indvars.iv456
  store i8 %.sink523, ptr %270, align 1, !tbaa !15
  %indvars.iv.next454 = add nsw i64 %indvars.iv453, 1
  %indvars.iv.next445 = add i32 %indvars.iv444, 1
  %indvars.iv.next450 = add i32 %indvars.iv449, 1
  %.pre488 = load ptr, ptr %51, align 8, !tbaa !14
  br label %.preheader359.split.us, !llvm.loop !28

.lr.ph.us383.us:                                  ; preds = %256, %._crit_edge.us384.us
  %indvars.iv446 = phi i64 [ %indvars.iv.next447, %._crit_edge.us384.us ], [ %245, %256 ]
  %.0284377.us.us = phi i32 [ %.lcssa556, %._crit_edge.us384.us ], [ 0, %256 ]
  %271 = sub nsw i64 %indvars.iv446, %66
  %272 = getelementptr inbounds ptr, ptr %38, i64 %271
  %273 = load ptr, ptr %272, align 8, !tbaa !13
  br i1 %min.iters.check576, label %scalar.ph575.preheader, label %vector.ph577

vector.ph577:                                     ; preds = %.lr.ph.us383.us
  %274 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0284377.us.us, i64 0
  br label %vector.body582

vector.body582:                                   ; preds = %vector.body582, %vector.ph577
  %index583 = phi i64 [ 0, %vector.ph577 ], [ %index.next589, %vector.body582 ]
  %vec.phi584 = phi <4 x i32> [ %274, %vector.ph577 ], [ %280, %vector.body582 ]
  %vec.phi585 = phi <4 x i32> [ zeroinitializer, %vector.ph577 ], [ %281, %vector.body582 ]
  %offset.idx586 = add i64 %index583, %239
  %275 = sub nsw i64 %offset.idx586, %66
  %276 = getelementptr inbounds i8, ptr %273, i64 %275
  %277 = getelementptr inbounds i8, ptr %276, i64 4
  %wide.load587 = load <4 x i8>, ptr %276, align 1, !tbaa !15
  %wide.load588 = load <4 x i8>, ptr %277, align 1, !tbaa !15
  %278 = zext <4 x i8> %wide.load587 to <4 x i32>
  %279 = zext <4 x i8> %wide.load588 to <4 x i32>
  %280 = add <4 x i32> %vec.phi584, %278
  %281 = add <4 x i32> %vec.phi585, %279
  %index.next589 = add nuw i64 %index583, 8
  %282 = icmp eq i64 %index.next589, %n.vec579
  br i1 %282, label %middle.block574, label %vector.body582, !llvm.loop !29

middle.block574:                                  ; preds = %vector.body582
  %bin.rdx590 = add <4 x i32> %281, %280
  %283 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx590)
  br i1 %cmp.n591, label %._crit_edge.us384.us, label %scalar.ph575.preheader

scalar.ph575.preheader:                           ; preds = %middle.block574, %.lr.ph.us383.us
  %indvars.iv441.ph = phi i64 [ %239, %.lr.ph.us383.us ], [ %ind.end580, %middle.block574 ]
  %.1285374.us.us.ph = phi i32 [ %.0284377.us.us, %.lr.ph.us383.us ], [ %283, %middle.block574 ]
  br label %scalar.ph575

scalar.ph575:                                     ; preds = %scalar.ph575.preheader, %scalar.ph575
  %indvars.iv441 = phi i64 [ %indvars.iv.next442, %scalar.ph575 ], [ %indvars.iv441.ph, %scalar.ph575.preheader ]
  %.1285374.us.us = phi i32 [ %288, %scalar.ph575 ], [ %.1285374.us.us.ph, %scalar.ph575.preheader ]
  %284 = sub nsw i64 %indvars.iv441, %66
  %285 = getelementptr inbounds i8, ptr %273, i64 %284
  %286 = load i8, ptr %285, align 1, !tbaa !15
  %287 = zext i8 %286 to i32
  %288 = add nsw i32 %.1285374.us.us, %287
  %indvars.iv.next442 = add nsw i64 %indvars.iv441, 1
  %289 = icmp slt i64 %indvars.iv.next442, %241
  br i1 %289, label %scalar.ph575, label %._crit_edge.us384.us, !llvm.loop !30

._crit_edge.us384.us:                             ; preds = %scalar.ph575, %middle.block574
  %.lcssa556 = phi i32 [ %283, %middle.block574 ], [ %288, %scalar.ph575 ]
  %indvars.iv.next447 = add nsw i64 %indvars.iv446, 1
  %lftr.wideiv451 = trunc i64 %indvars.iv.next447 to i32
  %exitcond452.not = icmp eq i32 %indvars.iv449, %lftr.wideiv451
  br i1 %exitcond452.not, label %._crit_edge381.split.us.us, label %.lr.ph.us383.us, !llvm.loop !31

.preheader359.split:                              ; preds = %.preheader359, %311
  %290 = phi ptr [ %.pre487, %311 ], [ %232, %.preheader359 ]
  %291 = phi ptr [ %.pre487, %311 ], [ %233, %.preheader359 ]
  %292 = phi ptr [ %.pre487, %311 ], [ %234, %.preheader359 ]
  %indvars.iv436 = phi i64 [ %indvars.iv.next437, %311 ], [ %83, %.preheader359 ]
  %293 = icmp eq ptr %292, null
  br i1 %293, label %294, label %.thread353

294:                                              ; preds = %.preheader359.split
  %295 = load i32, ptr %62, align 4, !tbaa !11
  br label %.thread354

.thread353:                                       ; preds = %.preheader359.split
  %296 = getelementptr inbounds i8, ptr %292, i64 8
  %297 = load ptr, ptr %296, align 8, !tbaa !15
  %298 = getelementptr inbounds i8, ptr %297, i64 6
  %299 = load i16, ptr %298, align 2, !tbaa !16
  %300 = sext i16 %299 to i32
  br label %.thread354

.thread354:                                       ; preds = %.thread353, %294
  %.sink546 = phi i32 [ %300, %.thread353 ], [ %295, %294 ]
  %spec.select528 = tail call i32 @llvm.smin.i32(i32 %145, i32 %.sink546)
  %301 = sext i32 %spec.select528 to i64
  %302 = icmp slt i64 %indvars.iv436, %301
  br i1 %302, label %._crit_edge381.split, label %.split.us

.split.us:                                        ; preds = %.thread354, %.thread354.us
  %303 = phi ptr [ %243, %.thread354.us ], [ %290, %.thread354 ]
  %304 = phi ptr [ %244, %.thread354.us ], [ %291, %.thread354 ]
  %305 = phi ptr [ %244, %.thread354.us ], [ %292, %.thread354 ]
  %indvars.iv.next457 = add nuw nsw i64 %indvars.iv456, 1
  %indvars.iv.next440 = add i32 %indvars.iv439, 1
  %exitcond460.not = icmp eq i64 %indvars.iv.next457, %wide.trip.count459
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond460.not, label %.preheader361, label %.preheader359, !llvm.loop !32

._crit_edge381.split:                             ; preds = %.thread354
  br i1 %brmerge547, label %311, label %306

306:                                              ; preds = %._crit_edge381.split
  %307 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv436
  %308 = load ptr, ptr %307, align 8, !tbaa !13
  %309 = getelementptr inbounds i8, ptr %308, i64 %indvars.iv456
  %310 = load i8, ptr %309, align 1, !tbaa !15
  br label %311

311:                                              ; preds = %._crit_edge381.split, %306
  %.sink529 = phi i8 [ %310, %306 ], [ %.mux, %._crit_edge381.split ]
  %312 = getelementptr inbounds ptr, ptr %40, i64 %indvars.iv436
  %313 = load ptr, ptr %312, align 8, !tbaa !13
  %314 = getelementptr inbounds i8, ptr %313, i64 %indvars.iv456
  store i8 %.sink529, ptr %314, align 1, !tbaa !15
  %indvars.iv.next437 = add nsw i64 %indvars.iv436, 1
  %.pre487 = load ptr, ptr %51, align 8, !tbaa !14
  br label %.preheader359.split, !llvm.loop !28

.preheader:                                       ; preds = %.preheader.lr.ph, %342
  %315 = phi ptr [ %221, %.preheader.lr.ph ], [ %326, %342 ]
  %indvars.iv482 = phi i64 [ %230, %.preheader.lr.ph ], [ %indvars.iv.next483, %342 ]
  %indvars.iv466 = phi i32 [ %229, %.preheader.lr.ph ], [ %indvars.iv.next467, %342 ]
  %indvars.iv461 = phi i32 [ %228, %.preheader.lr.ph ], [ %indvars.iv.next462, %342 ]
  %316 = sext i32 %indvars.iv461 to i64
  %317 = sub nsw i64 %indvars.iv482, %66
  %318 = add nsw i64 %indvars.iv482, %66
  %319 = icmp sge i64 %317, %318
  %ind.end = add nsw i64 %n.vec, %316
  br label %325

._crit_edge:                                      ; preds = %342, %.preheader361
  %320 = phi ptr [ %221, %.preheader361 ], [ %326, %342 ]
  %321 = phi ptr [ %222, %.preheader361 ], [ %326, %342 ]
  %322 = phi ptr [ %223, %.preheader361 ], [ %326, %342 ]
  %323 = phi ptr [ %224, %.preheader361 ], [ %326, %342 ]
  %324 = phi ptr [ %225, %.preheader361 ], [ %326, %342 ]
  %indvars.iv.next417 = add i32 %indvars.iv416, %68
  %indvars.iv.next424 = add i32 %indvars.iv423, %68
  br label %76, !llvm.loop !33

325:                                              ; preds = %.preheader, %388
  %326 = phi ptr [ %315, %.preheader ], [ %.pre489, %388 ]
  %indvars.iv479 = phi i64 [ %83, %.preheader ], [ %indvars.iv.next480, %388 ]
  %indvars.iv475 = phi i32 [ %indvars.iv423, %.preheader ], [ %indvars.iv.next476, %388 ]
  %indvars.iv470 = phi i32 [ %indvars.iv416, %.preheader ], [ %indvars.iv.next471, %388 ]
  %327 = sext i32 %indvars.iv470 to i64
  %328 = icmp eq ptr %326, null
  br i1 %328, label %329, label %.thread355

329:                                              ; preds = %325
  %330 = load i32, ptr %62, align 4, !tbaa !11
  %331 = icmp slt i32 %227, %330
  br i1 %331, label %.thread498, label %.thread357

.thread355:                                       ; preds = %325
  %332 = getelementptr inbounds i8, ptr %326, i64 8
  %333 = load ptr, ptr %332, align 8, !tbaa !15
  %334 = getelementptr inbounds i8, ptr %333, i64 6
  %335 = load i16, ptr %334, align 2, !tbaa !16
  %336 = sext i16 %335 to i32
  %spec.select533 = tail call i32 @llvm.smin.i32(i32 %227, i32 %336)
  %337 = sext i32 %spec.select533 to i64
  %338 = icmp slt i64 %indvars.iv479, %337
  br i1 %338, label %343, label %342

.thread498:                                       ; preds = %329
  %339 = icmp slt i64 %indvars.iv479, %231
  br i1 %339, label %.thread358, label %342

.thread357:                                       ; preds = %329
  %340 = sext i32 %330 to i64
  %341 = icmp slt i64 %indvars.iv479, %340
  br i1 %341, label %.thread358, label %342

342:                                              ; preds = %.thread498, %.thread357, %.thread355
  %indvars.iv.next483 = add nsw i64 %indvars.iv482, 1
  %indvars.iv.next462 = add i32 %indvars.iv461, 1
  %indvars.iv.next467 = add i32 %indvars.iv466, 1
  %exitcond486.not = icmp eq i64 %indvars.iv.next483, %wide.trip.count485
  br i1 %exitcond486.not, label %._crit_edge, label %.preheader, !llvm.loop !34

343:                                              ; preds = %.thread355
  br i1 %328, label %.thread358, label %345

.thread358:                                       ; preds = %.thread498, %.thread357, %343
  %344 = load i32, ptr %63, align 8, !tbaa !12
  br label %352

345:                                              ; preds = %343
  %346 = getelementptr inbounds i8, ptr %326, i64 8
  %347 = load ptr, ptr %346, align 8, !tbaa !15
  %.idx492 = shl i64 %indvars.iv479, 2
  %348 = getelementptr i8, ptr %347, i64 %.idx492
  %349 = getelementptr i8, ptr %348, i64 10
  %350 = load i16, ptr %349, align 2, !tbaa !16
  %351 = sext i16 %350 to i32
  br label %352

352:                                              ; preds = %345, %.thread358
  %353 = phi i32 [ %344, %.thread358 ], [ %351, %345 ]
  %354 = sext i32 %353 to i64
  %355 = icmp slt i64 %indvars.iv482, %354
  br i1 %355, label %356, label %388

356:                                              ; preds = %352
  %357 = sub nsw i64 %indvars.iv479, %66
  %358 = add nsw i64 %indvars.iv479, %66
  %.not338390 = icmp sgt i64 %357, %358
  %brmerge535 = select i1 %.not338390, i1 true, i1 %319
  br i1 %brmerge535, label %._crit_edge395, label %.lr.ph.us397

.lr.ph.us397:                                     ; preds = %356, %._crit_edge.us398
  %indvars.iv472 = phi i64 [ %indvars.iv.next473, %._crit_edge.us398 ], [ %327, %356 ]
  %.0279391.us = phi i32 [ %.lcssa562, %._crit_edge.us398 ], [ 0, %356 ]
  %359 = sub nsw i64 %indvars.iv472, %66
  %360 = getelementptr inbounds ptr, ptr %38, i64 %359
  %361 = load ptr, ptr %360, align 8, !tbaa !13
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph.us397
  %362 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0279391.us, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ %362, %vector.ph ], [ %368, %vector.body ]
  %vec.phi572 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %369, %vector.body ]
  %offset.idx = add i64 %index, %316
  %363 = sub nsw i64 %offset.idx, %66
  %364 = getelementptr inbounds i8, ptr %361, i64 %363
  %365 = getelementptr inbounds i8, ptr %364, i64 4
  %wide.load = load <4 x i8>, ptr %364, align 1, !tbaa !15
  %wide.load573 = load <4 x i8>, ptr %365, align 1, !tbaa !15
  %366 = zext <4 x i8> %wide.load to <4 x i32>
  %367 = zext <4 x i8> %wide.load573 to <4 x i32>
  %368 = add <4 x i32> %vec.phi, %366
  %369 = add <4 x i32> %vec.phi572, %367
  %index.next = add nuw i64 %index, 8
  %370 = icmp eq i64 %index.next, %n.vec
  br i1 %370, label %middle.block, label %vector.body, !llvm.loop !35

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %369, %368
  %371 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  br i1 %cmp.n, label %._crit_edge.us398, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph.us397
  %indvars.iv463.ph = phi i64 [ %316, %.lr.ph.us397 ], [ %ind.end, %middle.block ]
  %.1388.us.ph = phi i32 [ %.0279391.us, %.lr.ph.us397 ], [ %371, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv463 = phi i64 [ %indvars.iv.next464, %scalar.ph ], [ %indvars.iv463.ph, %scalar.ph.preheader ]
  %.1388.us = phi i32 [ %376, %scalar.ph ], [ %.1388.us.ph, %scalar.ph.preheader ]
  %372 = sub nsw i64 %indvars.iv463, %66
  %373 = getelementptr inbounds i8, ptr %361, i64 %372
  %374 = load i8, ptr %373, align 1, !tbaa !15
  %375 = zext i8 %374 to i32
  %376 = add nsw i32 %.1388.us, %375
  %indvars.iv.next464 = add nsw i64 %indvars.iv463, 1
  %lftr.wideiv468 = trunc i64 %indvars.iv.next464 to i32
  %exitcond469.not = icmp eq i32 %indvars.iv466, %lftr.wideiv468
  br i1 %exitcond469.not, label %._crit_edge.us398, label %scalar.ph, !llvm.loop !36

._crit_edge.us398:                                ; preds = %scalar.ph, %middle.block
  %.lcssa562 = phi i32 [ %371, %middle.block ], [ %376, %scalar.ph ]
  %indvars.iv.next473 = add nsw i64 %indvars.iv472, 1
  %lftr.wideiv477 = trunc i64 %indvars.iv.next473 to i32
  %exitcond478.not = icmp eq i32 %indvars.iv475, %lftr.wideiv477
  br i1 %exitcond478.not, label %._crit_edge395, label %.lr.ph.us397, !llvm.loop !37

._crit_edge395:                                   ; preds = %._crit_edge.us398, %356
  %.0279.lcssa = phi i32 [ 0, %356 ], [ %.lcssa562, %._crit_edge.us398 ]
  %377 = icmp slt i32 %.0279.lcssa, %47
  br i1 %377, label %.sink.split536, label %378

378:                                              ; preds = %._crit_edge395
  %379 = icmp sgt i32 %.0279.lcssa, %50
  br i1 %379, label %.sink.split536, label %380

380:                                              ; preds = %378
  %381 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv479
  %382 = load ptr, ptr %381, align 8, !tbaa !13
  %383 = getelementptr inbounds i8, ptr %382, i64 %indvars.iv482
  %384 = load i8, ptr %383, align 1, !tbaa !15
  br label %.sink.split536

.sink.split536:                                   ; preds = %378, %._crit_edge395, %380
  %.sink537 = phi i8 [ %384, %380 ], [ 0, %._crit_edge395 ], [ -1, %378 ]
  %385 = getelementptr inbounds ptr, ptr %40, i64 %indvars.iv479
  %386 = load ptr, ptr %385, align 8, !tbaa !13
  %387 = getelementptr inbounds i8, ptr %386, i64 %indvars.iv482
  store i8 %.sink537, ptr %387, align 1, !tbaa !15
  br label %388

388:                                              ; preds = %.sink.split536, %352
  %indvars.iv.next480 = add nsw i64 %indvars.iv479, 1
  %indvars.iv.next471 = add i32 %indvars.iv470, 1
  %indvars.iv.next476 = add i32 %indvars.iv475, 1
  %.pre489 = load ptr, ptr %51, align 8, !tbaa !14
  br label %325, !llvm.loop !38

389:                                              ; preds = %.thread494, %85
  %.not334 = icmp eq ptr %.0307, %1
  br i1 %.not334, label %391, label %390

390:                                              ; preds = %389
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %6)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %6, ptr noundef nonnull align 8 dereferenceable(56) %0, i64 56, i1 false), !tbaa.struct !39
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(56) %.0307, i64 56, i1 false), !tbaa.struct !39
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.0307, ptr noundef nonnull align 8 dereferenceable(56) %6, i64 56, i1 false), !tbaa.struct !39
  tail call void @HandleExchange(ptr noundef nonnull %0, ptr noundef %.0307) #5
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6)
  tail call void @mImageRelease(ptr noundef %.0307) #5
  br label %391

391:                                              ; preds = %390, %389
  ret void
}

declare ptr @ImageCreate(i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

declare void @HandleExchange(ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @mImageRelease(ptr noundef) local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.smax.v4i32(<4 x i32>) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32>) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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: readwrite) }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!10, !10, i64 0}
!14 = !{!6, !10, i64 48}
!15 = !{!8, !8, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"short", !8, i64 0}
!18 = distinct !{!18, !19, !20, !21}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = distinct !{!22, !19, !21, !20}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19, !20, !21}
!25 = distinct !{!25, !19, !21, !20}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19, !20, !21}
!30 = distinct !{!30, !19, !21, !20}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19, !20, !21}
!36 = distinct !{!36, !19, !21, !20}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = !{i64 0, i64 4, !40, i64 4, i64 4, !40, i64 8, i64 4, !40, i64 16, i64 32, !15, i64 48, i64 8, !13}
!40 = !{!7, !7, i64 0}


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