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

; 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
@__FUNCTION__.mImageMeanFilter = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [19 x i8], align 1

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

39:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %40 = load i32, ptr %6, align 4, !tbaa !9
  %41 = icmp sgt i32 %40, 7
  %42 = zext i1 %41 to i32
  store i32 %42, ptr %7, align 4, !tbaa !9
  %43 = load i32, ptr %7, align 4, !tbaa !9
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %45, label %47

45:                                               ; preds = %39
  %46 = load i32, ptr %7, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %46, i32 noundef -1, ptr noundef @.str, i32 noundef 11, ptr noundef @__FUNCTION__.mImageMeanFilter, ptr noundef @.str.1)
  br label %47

47:                                               ; preds = %45, %39
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %48

48:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %49, ptr %8, align 8, !tbaa !5
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = icmp eq ptr %50, null
  br i1 %51, label %60, label %52

52:                                               ; preds = %48
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = ptrtoint ptr %53 to i64
  %55 = icmp eq i64 %54, -1
  br i1 %55, label %60, label %56

56:                                               ; preds = %52
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = icmp eq ptr %57, %58
  br i1 %59, label %60, label %72

60:                                               ; preds = %56, %52, %48
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.MImage, ptr %61, i32 0, i32 0
  %63 = load i32, ptr %62, align 8, !tbaa !11
  %64 = add nsw i32 %63, 0
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.MImage, ptr %65, i32 0, i32 1
  %67 = load i32, ptr %66, align 4, !tbaa !13
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.MImage, ptr %68, i32 0, i32 2
  %70 = load i32, ptr %69, align 8, !tbaa !14
  %71 = call ptr @ImageCreate(i32 noundef %64, i32 noundef %67, i32 noundef %70, ptr noundef null)
  store ptr %71, ptr %5, align 8, !tbaa !5
  br label %138

72:                                               ; preds = %56
  br label %73

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 4, ptr %9, align 4, !tbaa !9
  %74 = load i32, ptr %9, align 4, !tbaa !9
  %75 = icmp eq i32 %74, 2
  br i1 %75, label %76, label %88

76:                                               ; preds = %73
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = load ptr, ptr %4, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.MImage, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %79, align 8, !tbaa !11
  %81 = add nsw i32 %80, 0
  %82 = load ptr, ptr %4, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.MImage, ptr %82, i32 0, i32 1
  %84 = load i32, ptr %83, align 4, !tbaa !13
  %85 = load ptr, ptr %5, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.MImage, ptr %85, i32 0, i32 3
  %87 = getelementptr inbounds [4 x ptr], ptr %86, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %77, i32 noundef -1, i32 noundef %81, i32 noundef %84, ptr noundef %87)
  br label %135

88:                                               ; preds = %73
  %89 = load i32, ptr %9, align 4, !tbaa !9
  %90 = icmp eq i32 %89, 3
  br i1 %90, label %91, label %106

91:                                               ; preds = %88
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.MImage, ptr %93, i32 0, i32 0
  %95 = load i32, ptr %94, align 8, !tbaa !11
  %96 = add nsw i32 %95, 0
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.MImage, ptr %97, i32 0, i32 1
  %99 = load i32, ptr %98, align 4, !tbaa !13
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.MImage, ptr %100, i32 0, i32 2
  %102 = load i32, ptr %101, align 8, !tbaa !14
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.MImage, ptr %103, i32 0, i32 3
  %105 = getelementptr inbounds [4 x ptr], ptr %104, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %92, i32 noundef %96, i32 noundef %99, i32 noundef %102, ptr noundef %105)
  br label %134

106:                                              ; preds = %88
  %107 = load i32, ptr %9, align 4, !tbaa !9
  %108 = icmp eq i32 %107, 4
  br i1 %108, label %109, label %124

109:                                              ; preds = %106
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.MImage, ptr %111, i32 0, i32 0
  %113 = load i32, ptr %112, align 8, !tbaa !11
  %114 = add nsw i32 %113, 0
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.MImage, ptr %115, i32 0, i32 1
  %117 = load i32, ptr %116, align 4, !tbaa !13
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.MImage, ptr %118, i32 0, i32 2
  %120 = load i32, ptr %119, align 8, !tbaa !14
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.MImage, ptr %121, i32 0, i32 3
  %123 = getelementptr inbounds [4 x ptr], ptr %122, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %110, i32 noundef %114, i32 noundef %117, i32 noundef %120, ptr noundef %123)
  br label %133

124:                                              ; preds = %106
  br label %125

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

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

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

131:                                              ; preds = %130
  br label %132

132:                                              ; preds = %131
  br label %133

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

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

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

136:                                              ; preds = %135
  br label %137

137:                                              ; preds = %136
  br label %138

138:                                              ; preds = %137, %60
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = load i32, ptr %6, align 4, !tbaa !9
  call void @mImageExpand(ptr noundef %139, i32 noundef %140, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %141 = load i32, ptr %6, align 4, !tbaa !9
  %142 = add nsw i32 %141, 1
  %143 = load i32, ptr %6, align 4, !tbaa !9
  %144 = add nsw i32 %142, %143
  %145 = load i32, ptr %6, align 4, !tbaa !9
  %146 = add nsw i32 %145, 1
  %147 = load i32, ptr %6, align 4, !tbaa !9
  %148 = add nsw i32 %146, %147
  %149 = mul nsw i32 %144, %148
  store i32 %149, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %150

150:                                              ; preds = %809, %138
  %151 = load i32, ptr %12, align 4, !tbaa !9
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.MImage, ptr %152, i32 0, i32 0
  %154 = load i32, ptr %153, align 8, !tbaa !11
  %155 = icmp slt i32 %151, %154
  br i1 %155, label %157, label %156

156:                                              ; preds = %150
  store i32 8, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %812

157:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.MImage, ptr %158, i32 0, i32 3
  %160 = load i32, ptr %12, align 4, !tbaa !9
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds [4 x ptr], ptr %159, i64 0, i64 %161
  %163 = load ptr, ptr %162, align 8, !tbaa !5
  store ptr %163, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %164 = load ptr, ptr %5, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.MImage, ptr %164, i32 0, i32 3
  %166 = load i32, ptr %12, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds [4 x ptr], ptr %165, i64 0, i64 %167
  %169 = load ptr, ptr %168, align 8, !tbaa !5
  store ptr %169, ptr %15, align 8, !tbaa !5
  br label %170

170:                                              ; preds = %157
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %171 = load ptr, ptr %4, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.MImage, ptr %171, i32 0, i32 4
  %173 = load ptr, ptr %172, align 8, !tbaa !15
  %174 = icmp eq ptr %173, null
  br i1 %174, label %175, label %176

175:                                              ; preds = %170
  br label %185

176:                                              ; preds = %170
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.MImage, ptr %177, i32 0, i32 4
  %179 = load ptr, ptr %178, align 8, !tbaa !15
  %180 = getelementptr inbounds %struct.MArray, ptr %179, i32 0, i32 2
  %181 = load ptr, ptr %180, align 8, !tbaa !16
  %182 = getelementptr inbounds i16, ptr %181, i64 2
  %183 = load i16, ptr %182, align 2, !tbaa !17
  %184 = sext i16 %183 to i32
  br label %185

185:                                              ; preds = %176, %175
  %186 = phi i32 [ 0, %175 ], [ %184, %176 ]
  store i32 %186, ptr %16, align 4, !tbaa !9
  br label %187

187:                                              ; preds = %799, %185
  %188 = load i32, ptr %16, align 4, !tbaa !9
  %189 = load ptr, ptr %4, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.MImage, ptr %189, i32 0, i32 4
  %191 = load ptr, ptr %190, align 8, !tbaa !15
  %192 = icmp eq ptr %191, null
  br i1 %192, label %193, label %197

193:                                              ; preds = %187
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.MImage, ptr %194, i32 0, i32 1
  %196 = load i32, ptr %195, align 4, !tbaa !13
  br label %206

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

206:                                              ; preds = %197, %193
  %207 = phi i32 [ %196, %193 ], [ %205, %197 ]
  %208 = icmp slt i32 %188, %207
  br i1 %208, label %209, label %806

209:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.MImage, ptr %210, i32 0, i32 2
  %212 = load i32, ptr %211, align 8, !tbaa !14
  store i32 %212, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.MImage, ptr %213, i32 0, i32 2
  %215 = load i32, ptr %214, align 8, !tbaa !14
  store i32 %215, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !9
  %216 = load ptr, ptr %4, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.MImage, ptr %216, i32 0, i32 4
  %218 = load ptr, ptr %217, align 8, !tbaa !15
  %219 = icmp ne ptr %218, null
  br i1 %219, label %220, label %355

220:                                              ; preds = %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %221 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %221, ptr %21, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %351, %220
  %223 = load i32, ptr %21, align 4, !tbaa !9
  %224 = load i32, ptr %16, align 4, !tbaa !9
  %225 = load i32, ptr %6, align 4, !tbaa !9
  %226 = sub nsw i32 16, %225
  %227 = load i32, ptr %6, align 4, !tbaa !9
  %228 = sub nsw i32 %226, %227
  %229 = add nsw i32 %224, %228
  %230 = load ptr, ptr %4, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.MImage, ptr %230, i32 0, i32 4
  %232 = load ptr, ptr %231, align 8, !tbaa !15
  %233 = icmp eq ptr %232, null
  br i1 %233, label %234, label %238

234:                                              ; preds = %222
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.MImage, ptr %235, i32 0, i32 1
  %237 = load i32, ptr %236, align 4, !tbaa !13
  br label %247

238:                                              ; preds = %222
  %239 = load ptr, ptr %4, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.MImage, ptr %239, i32 0, i32 4
  %241 = load ptr, ptr %240, align 8, !tbaa !15
  %242 = getelementptr inbounds %struct.MArray, ptr %241, i32 0, i32 2
  %243 = load ptr, ptr %242, align 8, !tbaa !16
  %244 = getelementptr inbounds i16, ptr %243, i64 3
  %245 = load i16, ptr %244, align 2, !tbaa !17
  %246 = sext i16 %245 to i32
  br label %247

247:                                              ; preds = %238, %234
  %248 = phi i32 [ %237, %234 ], [ %246, %238 ]
  %249 = icmp slt i32 %229, %248
  br i1 %249, label %250, label %257

250:                                              ; preds = %247
  %251 = load i32, ptr %16, align 4, !tbaa !9
  %252 = load i32, ptr %6, align 4, !tbaa !9
  %253 = sub nsw i32 16, %252
  %254 = load i32, ptr %6, align 4, !tbaa !9
  %255 = sub nsw i32 %253, %254
  %256 = add nsw i32 %251, %255
  br label %277

257:                                              ; preds = %247
  %258 = load ptr, ptr %4, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.MImage, ptr %258, i32 0, i32 4
  %260 = load ptr, ptr %259, align 8, !tbaa !15
  %261 = icmp eq ptr %260, null
  br i1 %261, label %262, label %266

262:                                              ; preds = %257
  %263 = load ptr, ptr %4, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.MImage, ptr %263, i32 0, i32 1
  %265 = load i32, ptr %264, align 4, !tbaa !13
  br label %275

266:                                              ; preds = %257
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.MImage, ptr %267, i32 0, i32 4
  %269 = load ptr, ptr %268, align 8, !tbaa !15
  %270 = getelementptr inbounds %struct.MArray, ptr %269, i32 0, i32 2
  %271 = load ptr, ptr %270, align 8, !tbaa !16
  %272 = getelementptr inbounds i16, ptr %271, i64 3
  %273 = load i16, ptr %272, align 2, !tbaa !17
  %274 = sext i16 %273 to i32
  br label %275

275:                                              ; preds = %266, %262
  %276 = phi i32 [ %265, %262 ], [ %274, %266 ]
  br label %277

277:                                              ; preds = %275, %250
  %278 = phi i32 [ %256, %250 ], [ %276, %275 ]
  %279 = icmp slt i32 %223, %278
  br i1 %279, label %281, label %280

280:                                              ; preds = %277
  store i32 16, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %354

281:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.MImage, ptr %282, i32 0, i32 4
  %284 = load ptr, ptr %283, align 8, !tbaa !15
  %285 = icmp eq ptr %284, null
  br i1 %285, label %286, label %287

286:                                              ; preds = %281
  br label %301

287:                                              ; preds = %281
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.MImage, ptr %288, i32 0, i32 4
  %290 = load ptr, ptr %289, align 8, !tbaa !15
  %291 = getelementptr inbounds %struct.MArray, ptr %290, i32 0, i32 2
  %292 = load ptr, ptr %291, align 8, !tbaa !16
  %293 = load i32, ptr %21, align 4, !tbaa !9
  %294 = load i32, ptr %21, align 4, !tbaa !9
  %295 = add nsw i32 %293, %294
  %296 = add nsw i32 %295, 4
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds i16, ptr %292, i64 %297
  %299 = load i16, ptr %298, align 2, !tbaa !17
  %300 = sext i16 %299 to i32
  br label %301

301:                                              ; preds = %287, %286
  %302 = phi i32 [ 0, %286 ], [ %300, %287 ]
  store i32 %302, ptr %22, align 4, !tbaa !9
  %303 = load i32, ptr %22, align 4, !tbaa !9
  %304 = load i32, ptr %17, align 4, !tbaa !9
  %305 = icmp slt i32 %303, %304
  br i1 %305, label %306, label %308

306:                                              ; preds = %301
  %307 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %307, ptr %17, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %306, %301
  %309 = load i32, ptr %22, align 4, !tbaa !9
  %310 = load i32, ptr %18, align 4, !tbaa !9
  %311 = icmp sgt i32 %309, %310
  br i1 %311, label %312, label %314

312:                                              ; preds = %308
  %313 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %313, ptr %18, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %312, %308
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.MImage, ptr %315, i32 0, i32 4
  %317 = load ptr, ptr %316, align 8, !tbaa !15
  %318 = icmp eq ptr %317, null
  br i1 %318, label %319, label %323

319:                                              ; preds = %314
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.MImage, ptr %320, i32 0, i32 2
  %322 = load i32, ptr %321, align 8, !tbaa !14
  br label %337

323:                                              ; preds = %314
  %324 = load ptr, ptr %4, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.MImage, ptr %324, i32 0, i32 4
  %326 = load ptr, ptr %325, align 8, !tbaa !15
  %327 = getelementptr inbounds %struct.MArray, ptr %326, i32 0, i32 2
  %328 = load ptr, ptr %327, align 8, !tbaa !16
  %329 = load i32, ptr %21, align 4, !tbaa !9
  %330 = load i32, ptr %21, align 4, !tbaa !9
  %331 = add nsw i32 %329, %330
  %332 = add nsw i32 %331, 5
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds i16, ptr %328, i64 %333
  %335 = load i16, ptr %334, align 2, !tbaa !17
  %336 = sext i16 %335 to i32
  br label %337

337:                                              ; preds = %323, %319
  %338 = phi i32 [ %322, %319 ], [ %336, %323 ]
  store i32 %338, ptr %22, align 4, !tbaa !9
  %339 = load i32, ptr %22, align 4, !tbaa !9
  %340 = load i32, ptr %19, align 4, !tbaa !9
  %341 = icmp slt i32 %339, %340
  br i1 %341, label %342, label %344

342:                                              ; preds = %337
  %343 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %343, ptr %19, align 4, !tbaa !9
  br label %344

344:                                              ; preds = %342, %337
  %345 = load i32, ptr %22, align 4, !tbaa !9
  %346 = load i32, ptr %20, align 4, !tbaa !9
  %347 = icmp sgt i32 %345, %346
  br i1 %347, label %348, label %350

348:                                              ; preds = %344
  %349 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %349, ptr %20, align 4, !tbaa !9
  br label %350

350:                                              ; preds = %348, %344
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %351

351:                                              ; preds = %350
  %352 = load i32, ptr %21, align 4, !tbaa !9
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %21, align 4, !tbaa !9
  br label %222, !llvm.loop !19

354:                                              ; preds = %280
  br label %355

355:                                              ; preds = %354, %209
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %356 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %356, ptr %23, align 4, !tbaa !9
  br label %357

357:                                              ; preds = %507, %355
  %358 = load i32, ptr %23, align 4, !tbaa !9
  %359 = load i32, ptr %18, align 4, !tbaa !9
  %360 = icmp slt i32 %358, %359
  br i1 %360, label %362, label %361

361:                                              ; preds = %357
  store i32 19, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %510

362:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %363 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %363, ptr %24, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %503, %362
  %365 = load i32, ptr %24, align 4, !tbaa !9
  %366 = load i32, ptr %16, align 4, !tbaa !9
  %367 = load i32, ptr %6, align 4, !tbaa !9
  %368 = sub nsw i32 16, %367
  %369 = load i32, ptr %6, align 4, !tbaa !9
  %370 = sub nsw i32 %368, %369
  %371 = add nsw i32 %366, %370
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.MImage, ptr %372, i32 0, i32 4
  %374 = load ptr, ptr %373, align 8, !tbaa !15
  %375 = icmp eq ptr %374, null
  br i1 %375, label %376, label %380

376:                                              ; preds = %364
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.MImage, ptr %377, i32 0, i32 1
  %379 = load i32, ptr %378, align 4, !tbaa !13
  br label %389

380:                                              ; preds = %364
  %381 = load ptr, ptr %4, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.MImage, ptr %381, i32 0, i32 4
  %383 = load ptr, ptr %382, align 8, !tbaa !15
  %384 = getelementptr inbounds %struct.MArray, ptr %383, i32 0, i32 2
  %385 = load ptr, ptr %384, align 8, !tbaa !16
  %386 = getelementptr inbounds i16, ptr %385, i64 3
  %387 = load i16, ptr %386, align 2, !tbaa !17
  %388 = sext i16 %387 to i32
  br label %389

389:                                              ; preds = %380, %376
  %390 = phi i32 [ %379, %376 ], [ %388, %380 ]
  %391 = icmp slt i32 %371, %390
  br i1 %391, label %392, label %399

392:                                              ; preds = %389
  %393 = load i32, ptr %16, align 4, !tbaa !9
  %394 = load i32, ptr %6, align 4, !tbaa !9
  %395 = sub nsw i32 16, %394
  %396 = load i32, ptr %6, align 4, !tbaa !9
  %397 = sub nsw i32 %395, %396
  %398 = add nsw i32 %393, %397
  br label %419

399:                                              ; preds = %389
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.MImage, ptr %400, i32 0, i32 4
  %402 = load ptr, ptr %401, align 8, !tbaa !15
  %403 = icmp eq ptr %402, null
  br i1 %403, label %404, label %408

404:                                              ; preds = %399
  %405 = load ptr, ptr %4, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.MImage, ptr %405, i32 0, i32 1
  %407 = load i32, ptr %406, align 4, !tbaa !13
  br label %417

408:                                              ; preds = %399
  %409 = load ptr, ptr %4, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.MImage, ptr %409, i32 0, i32 4
  %411 = load ptr, ptr %410, align 8, !tbaa !15
  %412 = getelementptr inbounds %struct.MArray, ptr %411, i32 0, i32 2
  %413 = load ptr, ptr %412, align 8, !tbaa !16
  %414 = getelementptr inbounds i16, ptr %413, i64 3
  %415 = load i16, ptr %414, align 2, !tbaa !17
  %416 = sext i16 %415 to i32
  br label %417

417:                                              ; preds = %408, %404
  %418 = phi i32 [ %407, %404 ], [ %416, %408 ]
  br label %419

419:                                              ; preds = %417, %392
  %420 = phi i32 [ %398, %392 ], [ %418, %417 ]
  %421 = icmp slt i32 %365, %420
  br i1 %421, label %423, label %422

422:                                              ; preds = %419
  store i32 22, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  br label %506

423:                                              ; preds = %419
  %424 = load i32, ptr %23, align 4, !tbaa !9
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.MImage, ptr %425, i32 0, i32 4
  %427 = load ptr, ptr %426, align 8, !tbaa !15
  %428 = icmp eq ptr %427, null
  br i1 %428, label %429, label %430

429:                                              ; preds = %423
  br label %444

430:                                              ; preds = %423
  %431 = load ptr, ptr %4, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.MImage, ptr %431, i32 0, i32 4
  %433 = load ptr, ptr %432, align 8, !tbaa !15
  %434 = getelementptr inbounds %struct.MArray, ptr %433, i32 0, i32 2
  %435 = load ptr, ptr %434, align 8, !tbaa !16
  %436 = load i32, ptr %24, align 4, !tbaa !9
  %437 = load i32, ptr %24, align 4, !tbaa !9
  %438 = add nsw i32 %436, %437
  %439 = add nsw i32 %438, 4
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds i16, ptr %435, i64 %440
  %442 = load i16, ptr %441, align 2, !tbaa !17
  %443 = sext i16 %442 to i32
  br label %444

444:                                              ; preds = %430, %429
  %445 = phi i32 [ 0, %429 ], [ %443, %430 ]
  %446 = icmp sgt i32 %424, %445
  br i1 %446, label %447, label %502

447:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %448 = load i32, ptr %24, align 4, !tbaa !9
  %449 = load i32, ptr %6, align 4, !tbaa !9
  %450 = sub nsw i32 %448, %449
  store i32 %450, ptr %26, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %486, %447
  %452 = load i32, ptr %26, align 4, !tbaa !9
  %453 = load i32, ptr %24, align 4, !tbaa !9
  %454 = load i32, ptr %6, align 4, !tbaa !9
  %455 = add nsw i32 %453, %454
  %456 = icmp sle i32 %452, %455
  br i1 %456, label %458, label %457

457:                                              ; preds = %451
  store i32 25, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %489

458:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %459 = load i32, ptr %23, align 4, !tbaa !9
  %460 = load i32, ptr %6, align 4, !tbaa !9
  %461 = sub nsw i32 %459, %460
  store i32 %461, ptr %27, align 4, !tbaa !9
  br label %462

462:                                              ; preds = %482, %458
  %463 = load i32, ptr %27, align 4, !tbaa !9
  %464 = load i32, ptr %23, align 4, !tbaa !9
  %465 = load i32, ptr %6, align 4, !tbaa !9
  %466 = add nsw i32 %464, %465
  %467 = icmp sle i32 %463, %466
  br i1 %467, label %469, label %468

468:                                              ; preds = %462
  store i32 28, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %485

469:                                              ; preds = %462
  %470 = load ptr, ptr %14, align 8, !tbaa !5
  %471 = load i32, ptr %26, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds ptr, ptr %470, i64 %472
  %474 = load ptr, ptr %473, align 8, !tbaa !5
  %475 = load i32, ptr %27, align 4, !tbaa !9
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds i8, ptr %474, i64 %476
  %478 = load i8, ptr %477, align 1, !tbaa !16
  %479 = zext i8 %478 to i32
  %480 = load i32, ptr %25, align 4, !tbaa !9
  %481 = add nsw i32 %480, %479
  store i32 %481, ptr %25, align 4, !tbaa !9
  br label %482

482:                                              ; preds = %469
  %483 = load i32, ptr %27, align 4, !tbaa !9
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %27, align 4, !tbaa !9
  br label %462, !llvm.loop !21

485:                                              ; preds = %468
  br label %486

486:                                              ; preds = %485
  %487 = load i32, ptr %26, align 4, !tbaa !9
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %26, align 4, !tbaa !9
  br label %451, !llvm.loop !22

489:                                              ; preds = %457
  %490 = load i32, ptr %25, align 4, !tbaa !9
  %491 = load i32, ptr %11, align 4, !tbaa !9
  %492 = sdiv i32 %490, %491
  %493 = trunc i32 %492 to i8
  %494 = load ptr, ptr %15, align 8, !tbaa !5
  %495 = load i32, ptr %24, align 4, !tbaa !9
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds ptr, ptr %494, i64 %496
  %498 = load ptr, ptr %497, align 8, !tbaa !5
  %499 = load i32, ptr %23, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds i8, ptr %498, i64 %500
  store i8 %493, ptr %501, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %502

502:                                              ; preds = %489, %444
  br label %503

503:                                              ; preds = %502
  %504 = load i32, ptr %24, align 4, !tbaa !9
  %505 = add nsw i32 %504, 1
  store i32 %505, ptr %24, align 4, !tbaa !9
  br label %364, !llvm.loop !23

506:                                              ; preds = %422
  br label %507

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

510:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %511 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %511, ptr %28, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %637, %510
  %513 = load i32, ptr %28, align 4, !tbaa !9
  %514 = load i32, ptr %19, align 4, !tbaa !9
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %517, label %516

516:                                              ; preds = %512
  store i32 31, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %640

517:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %518 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %518, ptr %29, align 4, !tbaa !9
  br label %519

519:                                              ; preds = %633, %517
  %520 = load i32, ptr %29, align 4, !tbaa !9
  %521 = load i32, ptr %16, align 4, !tbaa !9
  %522 = load i32, ptr %6, align 4, !tbaa !9
  %523 = sub nsw i32 16, %522
  %524 = load i32, ptr %6, align 4, !tbaa !9
  %525 = sub nsw i32 %523, %524
  %526 = add nsw i32 %521, %525
  %527 = load ptr, ptr %4, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.MImage, ptr %527, i32 0, i32 4
  %529 = load ptr, ptr %528, align 8, !tbaa !15
  %530 = icmp eq ptr %529, null
  br i1 %530, label %531, label %535

531:                                              ; preds = %519
  %532 = load ptr, ptr %4, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.MImage, ptr %532, i32 0, i32 1
  %534 = load i32, ptr %533, align 4, !tbaa !13
  br label %544

535:                                              ; preds = %519
  %536 = load ptr, ptr %4, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.MImage, ptr %536, i32 0, i32 4
  %538 = load ptr, ptr %537, align 8, !tbaa !15
  %539 = getelementptr inbounds %struct.MArray, ptr %538, i32 0, i32 2
  %540 = load ptr, ptr %539, align 8, !tbaa !16
  %541 = getelementptr inbounds i16, ptr %540, i64 3
  %542 = load i16, ptr %541, align 2, !tbaa !17
  %543 = sext i16 %542 to i32
  br label %544

544:                                              ; preds = %535, %531
  %545 = phi i32 [ %534, %531 ], [ %543, %535 ]
  %546 = icmp slt i32 %526, %545
  br i1 %546, label %547, label %554

547:                                              ; preds = %544
  %548 = load i32, ptr %16, align 4, !tbaa !9
  %549 = load i32, ptr %6, align 4, !tbaa !9
  %550 = sub nsw i32 16, %549
  %551 = load i32, ptr %6, align 4, !tbaa !9
  %552 = sub nsw i32 %550, %551
  %553 = add nsw i32 %548, %552
  br label %574

554:                                              ; preds = %544
  %555 = load ptr, ptr %4, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.MImage, ptr %555, i32 0, i32 4
  %557 = load ptr, ptr %556, align 8, !tbaa !15
  %558 = icmp eq ptr %557, null
  br i1 %558, label %559, label %563

559:                                              ; preds = %554
  %560 = load ptr, ptr %4, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.MImage, ptr %560, i32 0, i32 1
  %562 = load i32, ptr %561, align 4, !tbaa !13
  br label %572

563:                                              ; preds = %554
  %564 = load ptr, ptr %4, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.MImage, ptr %564, i32 0, i32 4
  %566 = load ptr, ptr %565, align 8, !tbaa !15
  %567 = getelementptr inbounds %struct.MArray, ptr %566, i32 0, i32 2
  %568 = load ptr, ptr %567, align 8, !tbaa !16
  %569 = getelementptr inbounds i16, ptr %568, i64 3
  %570 = load i16, ptr %569, align 2, !tbaa !17
  %571 = sext i16 %570 to i32
  br label %572

572:                                              ; preds = %563, %559
  %573 = phi i32 [ %562, %559 ], [ %571, %563 ]
  br label %574

574:                                              ; preds = %572, %547
  %575 = phi i32 [ %553, %547 ], [ %573, %572 ]
  %576 = icmp slt i32 %520, %575
  br i1 %576, label %578, label %577

577:                                              ; preds = %574
  store i32 34, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %636

578:                                              ; preds = %574
  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
  %579 = load i32, ptr %29, align 4, !tbaa !9
  %580 = load i32, ptr %6, align 4, !tbaa !9
  %581 = sub nsw i32 %579, %580
  store i32 %581, ptr %31, align 4, !tbaa !9
  br label %582

582:                                              ; preds = %617, %578
  %583 = load i32, ptr %31, align 4, !tbaa !9
  %584 = load i32, ptr %29, align 4, !tbaa !9
  %585 = load i32, ptr %6, align 4, !tbaa !9
  %586 = add nsw i32 %584, %585
  %587 = icmp sle i32 %583, %586
  br i1 %587, label %589, label %588

588:                                              ; preds = %582
  store i32 37, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %620

589:                                              ; preds = %582
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %590 = load i32, ptr %28, align 4, !tbaa !9
  %591 = load i32, ptr %6, align 4, !tbaa !9
  %592 = sub nsw i32 %590, %591
  store i32 %592, ptr %32, align 4, !tbaa !9
  br label %593

593:                                              ; preds = %613, %589
  %594 = load i32, ptr %32, align 4, !tbaa !9
  %595 = load i32, ptr %28, align 4, !tbaa !9
  %596 = load i32, ptr %6, align 4, !tbaa !9
  %597 = add nsw i32 %595, %596
  %598 = icmp sle i32 %594, %597
  br i1 %598, label %600, label %599

599:                                              ; preds = %593
  store i32 40, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %616

600:                                              ; preds = %593
  %601 = load ptr, ptr %14, align 8, !tbaa !5
  %602 = load i32, ptr %31, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds ptr, ptr %601, i64 %603
  %605 = load ptr, ptr %604, align 8, !tbaa !5
  %606 = load i32, ptr %32, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds i8, ptr %605, i64 %607
  %609 = load i8, ptr %608, align 1, !tbaa !16
  %610 = zext i8 %609 to i32
  %611 = load i32, ptr %30, align 4, !tbaa !9
  %612 = add nsw i32 %611, %610
  store i32 %612, ptr %30, align 4, !tbaa !9
  br label %613

613:                                              ; preds = %600
  %614 = load i32, ptr %32, align 4, !tbaa !9
  %615 = add nsw i32 %614, 1
  store i32 %615, ptr %32, align 4, !tbaa !9
  br label %593, !llvm.loop !25

616:                                              ; preds = %599
  br label %617

617:                                              ; preds = %616
  %618 = load i32, ptr %31, align 4, !tbaa !9
  %619 = add nsw i32 %618, 1
  store i32 %619, ptr %31, align 4, !tbaa !9
  br label %582, !llvm.loop !26

620:                                              ; preds = %588
  %621 = load i32, ptr %30, align 4, !tbaa !9
  %622 = load i32, ptr %11, align 4, !tbaa !9
  %623 = sdiv i32 %621, %622
  %624 = trunc i32 %623 to i8
  %625 = load ptr, ptr %15, align 8, !tbaa !5
  %626 = load i32, ptr %29, align 4, !tbaa !9
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds ptr, ptr %625, i64 %627
  %629 = load ptr, ptr %628, align 8, !tbaa !5
  %630 = load i32, ptr %28, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds i8, ptr %629, i64 %631
  store i8 %624, ptr %632, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %633

633:                                              ; preds = %620
  %634 = load i32, ptr %29, align 4, !tbaa !9
  %635 = add nsw i32 %634, 1
  store i32 %635, ptr %29, align 4, !tbaa !9
  br label %519, !llvm.loop !27

636:                                              ; preds = %577
  br label %637

637:                                              ; preds = %636
  %638 = load i32, ptr %28, align 4, !tbaa !9
  %639 = add nsw i32 %638, 1
  store i32 %639, ptr %28, align 4, !tbaa !9
  br label %512, !llvm.loop !28

640:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %641 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %641, ptr %33, align 4, !tbaa !9
  br label %642

642:                                              ; preds = %795, %640
  %643 = load i32, ptr %33, align 4, !tbaa !9
  %644 = load i32, ptr %20, align 4, !tbaa !9
  %645 = icmp slt i32 %643, %644
  br i1 %645, label %647, label %646

646:                                              ; preds = %642
  store i32 43, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %798

647:                                              ; preds = %642
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %648 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %648, ptr %34, align 4, !tbaa !9
  br label %649

649:                                              ; preds = %791, %647
  %650 = load i32, ptr %34, align 4, !tbaa !9
  %651 = load i32, ptr %16, align 4, !tbaa !9
  %652 = load i32, ptr %6, align 4, !tbaa !9
  %653 = sub nsw i32 16, %652
  %654 = load i32, ptr %6, align 4, !tbaa !9
  %655 = sub nsw i32 %653, %654
  %656 = add nsw i32 %651, %655
  %657 = load ptr, ptr %4, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.MImage, ptr %657, i32 0, i32 4
  %659 = load ptr, ptr %658, align 8, !tbaa !15
  %660 = icmp eq ptr %659, null
  br i1 %660, label %661, label %665

661:                                              ; preds = %649
  %662 = load ptr, ptr %4, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.MImage, ptr %662, i32 0, i32 1
  %664 = load i32, ptr %663, align 4, !tbaa !13
  br label %674

665:                                              ; preds = %649
  %666 = load ptr, ptr %4, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.MImage, ptr %666, i32 0, i32 4
  %668 = load ptr, ptr %667, align 8, !tbaa !15
  %669 = getelementptr inbounds %struct.MArray, ptr %668, i32 0, i32 2
  %670 = load ptr, ptr %669, align 8, !tbaa !16
  %671 = getelementptr inbounds i16, ptr %670, i64 3
  %672 = load i16, ptr %671, align 2, !tbaa !17
  %673 = sext i16 %672 to i32
  br label %674

674:                                              ; preds = %665, %661
  %675 = phi i32 [ %664, %661 ], [ %673, %665 ]
  %676 = icmp slt i32 %656, %675
  br i1 %676, label %677, label %684

677:                                              ; preds = %674
  %678 = load i32, ptr %16, align 4, !tbaa !9
  %679 = load i32, ptr %6, align 4, !tbaa !9
  %680 = sub nsw i32 16, %679
  %681 = load i32, ptr %6, align 4, !tbaa !9
  %682 = sub nsw i32 %680, %681
  %683 = add nsw i32 %678, %682
  br label %704

684:                                              ; preds = %674
  %685 = load ptr, ptr %4, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.MImage, ptr %685, i32 0, i32 4
  %687 = load ptr, ptr %686, align 8, !tbaa !15
  %688 = icmp eq ptr %687, null
  br i1 %688, label %689, label %693

689:                                              ; preds = %684
  %690 = load ptr, ptr %4, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.MImage, ptr %690, i32 0, i32 1
  %692 = load i32, ptr %691, align 4, !tbaa !13
  br label %702

693:                                              ; preds = %684
  %694 = load ptr, ptr %4, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.MImage, ptr %694, i32 0, i32 4
  %696 = load ptr, ptr %695, align 8, !tbaa !15
  %697 = getelementptr inbounds %struct.MArray, ptr %696, i32 0, i32 2
  %698 = load ptr, ptr %697, align 8, !tbaa !16
  %699 = getelementptr inbounds i16, ptr %698, i64 3
  %700 = load i16, ptr %699, align 2, !tbaa !17
  %701 = sext i16 %700 to i32
  br label %702

702:                                              ; preds = %693, %689
  %703 = phi i32 [ %692, %689 ], [ %701, %693 ]
  br label %704

704:                                              ; preds = %702, %677
  %705 = phi i32 [ %683, %677 ], [ %703, %702 ]
  %706 = icmp slt i32 %650, %705
  br i1 %706, label %708, label %707

707:                                              ; preds = %704
  store i32 46, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %794

708:                                              ; preds = %704
  %709 = load i32, ptr %33, align 4, !tbaa !9
  %710 = load ptr, ptr %4, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.MImage, ptr %710, i32 0, i32 4
  %712 = load ptr, ptr %711, align 8, !tbaa !15
  %713 = icmp eq ptr %712, null
  br i1 %713, label %714, label %718

714:                                              ; preds = %708
  %715 = load ptr, ptr %4, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.MImage, ptr %715, i32 0, i32 2
  %717 = load i32, ptr %716, align 8, !tbaa !14
  br label %732

718:                                              ; preds = %708
  %719 = load ptr, ptr %4, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.MImage, ptr %719, i32 0, i32 4
  %721 = load ptr, ptr %720, align 8, !tbaa !15
  %722 = getelementptr inbounds %struct.MArray, ptr %721, i32 0, i32 2
  %723 = load ptr, ptr %722, align 8, !tbaa !16
  %724 = load i32, ptr %34, align 4, !tbaa !9
  %725 = load i32, ptr %34, align 4, !tbaa !9
  %726 = add nsw i32 %724, %725
  %727 = add nsw i32 %726, 5
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds i16, ptr %723, i64 %728
  %730 = load i16, ptr %729, align 2, !tbaa !17
  %731 = sext i16 %730 to i32
  br label %732

732:                                              ; preds = %718, %714
  %733 = phi i32 [ %717, %714 ], [ %731, %718 ]
  %734 = icmp slt i32 %709, %733
  br i1 %734, label %735, label %790

735:                                              ; preds = %732
  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
  %736 = load i32, ptr %34, align 4, !tbaa !9
  %737 = load i32, ptr %6, align 4, !tbaa !9
  %738 = sub nsw i32 %736, %737
  store i32 %738, ptr %36, align 4, !tbaa !9
  br label %739

739:                                              ; preds = %774, %735
  %740 = load i32, ptr %36, align 4, !tbaa !9
  %741 = load i32, ptr %34, align 4, !tbaa !9
  %742 = load i32, ptr %6, align 4, !tbaa !9
  %743 = add nsw i32 %741, %742
  %744 = icmp sle i32 %740, %743
  br i1 %744, label %746, label %745

745:                                              ; preds = %739
  store i32 49, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  br label %777

746:                                              ; preds = %739
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %747 = load i32, ptr %33, align 4, !tbaa !9
  %748 = load i32, ptr %6, align 4, !tbaa !9
  %749 = sub nsw i32 %747, %748
  store i32 %749, ptr %37, align 4, !tbaa !9
  br label %750

750:                                              ; preds = %770, %746
  %751 = load i32, ptr %37, align 4, !tbaa !9
  %752 = load i32, ptr %33, align 4, !tbaa !9
  %753 = load i32, ptr %6, align 4, !tbaa !9
  %754 = add nsw i32 %752, %753
  %755 = icmp sle i32 %751, %754
  br i1 %755, label %757, label %756

756:                                              ; preds = %750
  store i32 52, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  br label %773

757:                                              ; preds = %750
  %758 = load ptr, ptr %14, align 8, !tbaa !5
  %759 = load i32, ptr %36, align 4, !tbaa !9
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds ptr, ptr %758, i64 %760
  %762 = load ptr, ptr %761, align 8, !tbaa !5
  %763 = load i32, ptr %37, align 4, !tbaa !9
  %764 = sext i32 %763 to i64
  %765 = getelementptr inbounds i8, ptr %762, i64 %764
  %766 = load i8, ptr %765, align 1, !tbaa !16
  %767 = zext i8 %766 to i32
  %768 = load i32, ptr %35, align 4, !tbaa !9
  %769 = add nsw i32 %768, %767
  store i32 %769, ptr %35, align 4, !tbaa !9
  br label %770

770:                                              ; preds = %757
  %771 = load i32, ptr %37, align 4, !tbaa !9
  %772 = add nsw i32 %771, 1
  store i32 %772, ptr %37, align 4, !tbaa !9
  br label %750, !llvm.loop !29

773:                                              ; preds = %756
  br label %774

774:                                              ; preds = %773
  %775 = load i32, ptr %36, align 4, !tbaa !9
  %776 = add nsw i32 %775, 1
  store i32 %776, ptr %36, align 4, !tbaa !9
  br label %739, !llvm.loop !30

777:                                              ; preds = %745
  %778 = load i32, ptr %35, align 4, !tbaa !9
  %779 = load i32, ptr %11, align 4, !tbaa !9
  %780 = sdiv i32 %778, %779
  %781 = trunc i32 %780 to i8
  %782 = load ptr, ptr %15, align 8, !tbaa !5
  %783 = load i32, ptr %34, align 4, !tbaa !9
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds ptr, ptr %782, i64 %784
  %786 = load ptr, ptr %785, align 8, !tbaa !5
  %787 = load i32, ptr %33, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i8, ptr %786, i64 %788
  store i8 %781, ptr %789, align 1, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %790

790:                                              ; preds = %777, %732
  br label %791

791:                                              ; preds = %790
  %792 = load i32, ptr %34, align 4, !tbaa !9
  %793 = add nsw i32 %792, 1
  store i32 %793, ptr %34, align 4, !tbaa !9
  br label %649, !llvm.loop !31

794:                                              ; preds = %707
  br label %795

795:                                              ; preds = %794
  %796 = load i32, ptr %33, align 4, !tbaa !9
  %797 = add nsw i32 %796, 1
  store i32 %797, ptr %33, align 4, !tbaa !9
  br label %642, !llvm.loop !32

798:                                              ; preds = %646
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  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
  br label %799

799:                                              ; preds = %798
  %800 = load i32, ptr %16, align 4, !tbaa !9
  %801 = load i32, ptr %6, align 4, !tbaa !9
  %802 = sub nsw i32 16, %801
  %803 = load i32, ptr %6, align 4, !tbaa !9
  %804 = sub nsw i32 %802, %803
  %805 = add nsw i32 %800, %804
  store i32 %805, ptr %16, align 4, !tbaa !9
  br label %187, !llvm.loop !33

806:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %807

807:                                              ; preds = %806
  br label %808

808:                                              ; preds = %807
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  br label %809

809:                                              ; preds = %808
  %810 = load i32, ptr %12, align 4, !tbaa !9
  %811 = add nsw i32 %810, 1
  store i32 %811, ptr %12, align 4, !tbaa !9
  br label %150, !llvm.loop !34

812:                                              ; preds = %156
  %813 = load ptr, ptr %8, align 8, !tbaa !5
  %814 = load ptr, ptr %5, align 8, !tbaa !5
  %815 = icmp ne ptr %813, %814
  br i1 %815, label %816, label %827

816:                                              ; preds = %812
  br label %817

817:                                              ; preds = %816
  call void @llvm.lifetime.start.p0(i64 56, ptr %38) #4
  %818 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %38, ptr align 8 %818, i64 56, i1 false), !tbaa.struct !35
  %819 = load ptr, ptr %4, align 8, !tbaa !5
  %820 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %819, ptr align 8 %820, i64 56, i1 false), !tbaa.struct !35
  %821 = load ptr, ptr %5, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %821, ptr align 8 %38, i64 56, i1 false), !tbaa.struct !35
  %822 = load ptr, ptr %4, align 8, !tbaa !5
  %823 = load ptr, ptr %5, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %822, ptr noundef %823)
  call void @llvm.lifetime.end.p0(i64 56, ptr %38) #4
  br label %824

824:                                              ; preds = %817
  br label %825

825:                                              ; preds = %824
  %826 = load ptr, ptr %5, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %826)
  br label %827

827:                                              ; preds = %825, %812
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  ret void
}

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

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

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

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

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

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

; 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) #3

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

declare void @mImageRelease(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"MImage", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 16, !6, i64 48}
!13 = !{!12, !10, i64 4}
!14 = !{!12, !10, i64 8}
!15 = !{!12, !6, i64 48}
!16 = !{!7, !7, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"short", !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 16, i64 32, !16, 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
@__FUNCTION__.mImageMeanFilter = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @mImageMeanFilter(ptr noundef %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = alloca %struct.MImage, align 8
  %5 = icmp sgt i32 %2, 7
  br i1 %5, label %6, label %7

6:                                                ; preds = %3
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 11, ptr noundef nonnull @__FUNCTION__.mImageMeanFilter, ptr noundef nonnull @.str.1) #5
  br label %7

7:                                                ; preds = %6, %3
  %magicptr = ptrtoint ptr %1 to i64
  switch i64 %magicptr, label %8 [
    i64 -1, label %10
    i64 0, label %10
  ]

8:                                                ; preds = %7
  %9 = icmp eq ptr %1, %0
  br i1 %9, label %10, label %17

10:                                               ; preds = %7, %7, %8
  %11 = load i32, ptr %0, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 4
  %13 = load i32, ptr %12, align 4, !tbaa !11
  %14 = getelementptr inbounds i8, ptr %0, i64 8
  %15 = load i32, ptr %14, align 8, !tbaa !12
  %16 = tail call ptr @ImageCreate(i32 noundef %11, i32 noundef %13, i32 noundef %15, ptr noundef null) #5
  br label %24

17:                                               ; preds = %8
  %18 = load i32, ptr %0, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %0, i64 4
  %20 = load i32, ptr %19, align 4, !tbaa !11
  %21 = getelementptr inbounds i8, ptr %0, i64 8
  %22 = load i32, ptr %21, align 8, !tbaa !12
  %23 = getelementptr inbounds i8, ptr %1, i64 16
  tail call void @ImageRedefine(ptr noundef %1, i32 noundef %18, i32 noundef %20, i32 noundef %22, ptr noundef nonnull %23) #5
  br label %24

24:                                               ; preds = %17, %10
  %.0261 = phi ptr [ %16, %10 ], [ %1, %17 ]
  tail call void @mImageExpand(ptr noundef nonnull %0, i32 noundef %2, i32 noundef 3) #5
  %reass.add = shl i32 %2, 1
  %25 = or disjoint i32 %reass.add, 1
  %26 = mul nsw i32 %25, %25
  %27 = load i32, ptr %0, align 8, !tbaa !5
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.lr.ph363, label %._crit_edge364

.lr.ph363:                                        ; preds = %24
  %29 = getelementptr inbounds i8, ptr %0, i64 16
  %30 = getelementptr inbounds i8, ptr %.0261, i64 16
  %31 = getelementptr inbounds i8, ptr %0, i64 48
  %32 = getelementptr inbounds i8, ptr %0, i64 4
  %33 = getelementptr inbounds i8, ptr %0, i64 8
  %34 = sub i32 16, %reass.add
  %35 = add i32 %2, 1
  %36 = sext i32 %2 to i64
  %.pre = load ptr, ptr %31, align 8, !tbaa !13
  br label %37

._crit_edge364:                                   ; preds = %435, %24
  %.not = icmp eq ptr %.0261, %1
  br i1 %.not, label %440, label %439

37:                                               ; preds = %.lr.ph363, %435
  %.pre461504 = phi ptr [ %.pre, %.lr.ph363 ], [ %.pre461505, %435 ]
  %.pre483484 = phi ptr [ %.pre, %.lr.ph363 ], [ %.pre483496, %435 ]
  %38 = phi ptr [ %.pre, %.lr.ph363 ], [ %61, %435 ]
  %.pre464465 = phi ptr [ %.pre, %.lr.ph363 ], [ %.pre464477, %435 ]
  %39 = phi ptr [ %.pre, %.lr.ph363 ], [ %62, %435 ]
  %40 = phi ptr [ %.pre, %.lr.ph363 ], [ %63, %435 ]
  %41 = phi ptr [ %.pre, %.lr.ph363 ], [ %64, %435 ]
  %42 = phi ptr [ %.pre, %.lr.ph363 ], [ %65, %435 ]
  %.pre451452 = phi ptr [ %.pre, %.lr.ph363 ], [ %.pre451453, %435 ]
  %43 = phi ptr [ %.pre, %.lr.ph363 ], [ %66, %435 ]
  %44 = phi ptr [ %.pre, %.lr.ph363 ], [ %67, %435 ]
  %indvars.iv448 = phi i64 [ 0, %.lr.ph363 ], [ %indvars.iv.next449, %435 ]
  %45 = getelementptr inbounds [4 x ptr], ptr %29, i64 0, i64 %indvars.iv448
  %46 = load ptr, ptr %45, align 8, !tbaa !14
  %47 = getelementptr inbounds [4 x ptr], ptr %30, i64 0, i64 %indvars.iv448
  %48 = load ptr, ptr %47, align 8, !tbaa !14
  %49 = icmp eq ptr %44, null
  br i1 %49, label %56, label %50

50:                                               ; preds = %37
  %51 = getelementptr inbounds i8, ptr %44, i64 8
  %52 = load ptr, ptr %51, align 8, !tbaa !15
  %53 = getelementptr inbounds i8, ptr %52, i64 4
  %54 = load i16, ptr %53, align 2, !tbaa !16
  %55 = sext i16 %54 to i32
  br label %56

56:                                               ; preds = %37, %50
  %57 = phi i32 [ %55, %50 ], [ 0, %37 ]
  %58 = sub i32 %57, %2
  %59 = add i32 %35, %57
  br label %60

60:                                               ; preds = %._crit_edge360, %56
  %.pre461505 = phi ptr [ %.pre461506, %._crit_edge360 ], [ %.pre461504, %56 ]
  %.pre483496 = phi ptr [ %.pre483497, %._crit_edge360 ], [ %.pre483484, %56 ]
  %61 = phi ptr [ %372, %._crit_edge360 ], [ %38, %56 ]
  %.pre464477 = phi ptr [ %.pre464478, %._crit_edge360 ], [ %.pre464465, %56 ]
  %62 = phi ptr [ %373, %._crit_edge360 ], [ %39, %56 ]
  %63 = phi ptr [ %374, %._crit_edge360 ], [ %40, %56 ]
  %64 = phi ptr [ %375, %._crit_edge360 ], [ %41, %56 ]
  %65 = phi ptr [ %376, %._crit_edge360 ], [ %42, %56 ]
  %.pre451453 = phi ptr [ %.pre451454, %._crit_edge360 ], [ %.pre451452, %56 ]
  %66 = phi ptr [ %377, %._crit_edge360 ], [ %43, %56 ]
  %67 = phi ptr [ %378, %._crit_edge360 ], [ %44, %56 ]
  %indvars.iv384 = phi i32 [ %indvars.iv.next385, %._crit_edge360 ], [ %59, %56 ]
  %indvars.iv377 = phi i32 [ %indvars.iv.next378, %._crit_edge360 ], [ %58, %56 ]
  %.0260 = phi i32 [ %257, %._crit_edge360 ], [ %57, %56 ]
  %68 = sext i32 %.0260 to i64
  %69 = sext i32 %.0260 to i64
  %70 = icmp eq ptr %67, null
  br i1 %70, label %71, label %.thread531

71:                                               ; preds = %60
  %72 = load i32, ptr %32, align 4, !tbaa !11
  %73 = icmp slt i32 %.0260, %72
  br i1 %73, label %80, label %435

.thread531:                                       ; preds = %60
  %74 = getelementptr inbounds i8, ptr %67, i64 8
  %75 = load ptr, ptr %74, align 8, !tbaa !15
  %76 = getelementptr inbounds i8, ptr %75, i64 6
  %77 = load i16, ptr %76, align 2, !tbaa !16
  %78 = sext i16 %77 to i32
  %79 = icmp slt i32 %.0260, %78
  br i1 %79, label %.preheader312, label %435

80:                                               ; preds = %71
  %81 = load i32, ptr %33, align 8, !tbaa !12
  br label %.loopexit

.preheader312:                                    ; preds = %.thread531
  %82 = load i32, ptr %33, align 8, !tbaa !12
  %reass.sub = sub i32 %.0260, %reass.add
  %83 = add i32 %reass.sub, 16
  %84 = getelementptr inbounds i8, ptr %67, i64 8
  %85 = load ptr, ptr %84, align 8, !tbaa !15
  %86 = getelementptr inbounds i8, ptr %85, i64 6
  %87 = load i16, ptr %86, align 2, !tbaa !16
  %88 = sext i16 %87 to i32
  %spec.select587 = tail call i32 @llvm.smin.i32(i32 %83, i32 %88)
  %89 = sext i32 %spec.select587 to i64
  %90 = icmp slt i32 %.0260, %spec.select587
  br i1 %90, label %.lr.ph651, label %.loopexit

.lr.ph651:                                        ; preds = %.preheader312
  %91 = sub nsw i64 %89, %68
  %min.iters.check703 = icmp ult i64 %91, 8
  br i1 %min.iters.check703, label %scalar.ph702.preheader, label %vector.ph704

vector.ph704:                                     ; preds = %.lr.ph651
  %n.vec706 = and i64 %91, -8
  %ind.end707 = add nsw i64 %n.vec706, %69
  %minmax.ident.splatinsert = insertelement <4 x i32> poison, i32 %82, i64 0
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %minmax.ident.splatinsert719 = insertelement <4 x i32> poison, i32 %82, i64 0
  %minmax.ident.splat720 = shufflevector <4 x i32> %minmax.ident.splatinsert719, <4 x i32> poison, <4 x i32> zeroinitializer
  %invariant.gep = getelementptr i8, ptr %85, i64 8
  %invariant.gep849 = getelementptr i8, ptr %85, i64 24
  br label %vector.body709

vector.body709:                                   ; preds = %vector.body709, %vector.ph704
  %index710 = phi i64 [ 0, %vector.ph704 ], [ %index.next726, %vector.body709 ]
  %vec.phi711 = phi <4 x i32> [ zeroinitializer, %vector.ph704 ], [ %104, %vector.body709 ]
  %vec.phi712 = phi <4 x i32> [ zeroinitializer, %vector.ph704 ], [ %105, %vector.body709 ]
  %vec.phi713 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph704 ], [ %102, %vector.body709 ]
  %vec.phi714 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph704 ], [ %103, %vector.body709 ]
  %vec.phi715 = phi <4 x i32> [ zeroinitializer, %vector.ph704 ], [ %98, %vector.body709 ]
  %vec.phi716 = phi <4 x i32> [ zeroinitializer, %vector.ph704 ], [ %99, %vector.body709 ]
  %vec.phi717 = phi <4 x i32> [ %minmax.ident.splat720, %vector.ph704 ], [ %96, %vector.body709 ]
  %vec.phi718 = phi <4 x i32> [ %minmax.ident.splat720, %vector.ph704 ], [ %97, %vector.body709 ]
  %offset.idx721 = add i64 %index710, %69
  %92 = shl i64 %offset.idx721, 2
  %93 = shl i64 %offset.idx721, 2
  %gep = getelementptr i8, ptr %invariant.gep, i64 %92
  %gep850 = getelementptr i8, ptr %invariant.gep849, i64 %93
  %wide.vec = load <8 x i16>, ptr %gep, align 2, !tbaa !16
  %wide.vec722 = load <8 x i16>, ptr %gep850, 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.vec723 = shufflevector <8 x i16> %wide.vec722, <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec724 = shufflevector <8 x i16> %wide.vec, <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %strided.vec725 = shufflevector <8 x i16> %wide.vec722, <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %94 = sext <4 x i16> %strided.vec to <4 x i32>
  %95 = sext <4 x i16> %strided.vec723 to <4 x i32>
  %96 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi717, <4 x i32> %94)
  %97 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi718, <4 x i32> %95)
  %98 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi715, <4 x i32> %94)
  %99 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi716, <4 x i32> %95)
  %100 = sext <4 x i16> %strided.vec724 to <4 x i32>
  %101 = sext <4 x i16> %strided.vec725 to <4 x i32>
  %102 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi713, <4 x i32> %100)
  %103 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi714, <4 x i32> %101)
  %104 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi711, <4 x i32> %100)
  %105 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi712, <4 x i32> %101)
  %index.next726 = add nuw i64 %index710, 8
  %106 = icmp eq i64 %index.next726, %n.vec706
  br i1 %106, label %middle.block701, label %vector.body709, !llvm.loop !18

middle.block701:                                  ; preds = %vector.body709
  %rdx.minmax = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %104, <4 x i32> %105)
  %107 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax)
  %rdx.minmax727 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %102, <4 x i32> %103)
  %108 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax727)
  %rdx.minmax728 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %98, <4 x i32> %99)
  %109 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax728)
  %rdx.minmax729 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %96, <4 x i32> %97)
  %110 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax729)
  %cmp.n730 = icmp eq i64 %91, %n.vec706
  br i1 %cmp.n730, label %.loopexit, label %scalar.ph702.preheader

scalar.ph702.preheader:                           ; preds = %middle.block701, %.lr.ph651
  %.0249650.ph = phi i32 [ 0, %.lr.ph651 ], [ %107, %middle.block701 ]
  %.0251649.ph = phi i32 [ %82, %.lr.ph651 ], [ %108, %middle.block701 ]
  %.0254648.ph = phi i32 [ 0, %.lr.ph651 ], [ %109, %middle.block701 ]
  %.0257647.ph = phi i32 [ %82, %.lr.ph651 ], [ %110, %middle.block701 ]
  %indvars.iv646.ph = phi i64 [ %69, %.lr.ph651 ], [ %ind.end707, %middle.block701 ]
  br label %scalar.ph702

scalar.ph702:                                     ; preds = %scalar.ph702.preheader, %scalar.ph702
  %.0249650 = phi i32 [ %.1250, %scalar.ph702 ], [ %.0249650.ph, %scalar.ph702.preheader ]
  %.0251649 = phi i32 [ %spec.select298, %scalar.ph702 ], [ %.0251649.ph, %scalar.ph702.preheader ]
  %.0254648 = phi i32 [ %.1255, %scalar.ph702 ], [ %.0254648.ph, %scalar.ph702.preheader ]
  %.0257647 = phi i32 [ %spec.select, %scalar.ph702 ], [ %.0257647.ph, %scalar.ph702.preheader ]
  %indvars.iv646 = phi i64 [ %indvars.iv.next, %scalar.ph702 ], [ %indvars.iv646.ph, %scalar.ph702.preheader ]
  %.idx = shl i64 %indvars.iv646, 2
  %111 = getelementptr i8, ptr %85, i64 %.idx
  %112 = getelementptr i8, ptr %111, i64 8
  %113 = load i16, ptr %112, align 2, !tbaa !16
  %114 = sext i16 %113 to i32
  %spec.select = tail call i32 @llvm.smin.i32(i32 %.0257647, i32 %114)
  %.1255 = tail call i32 @llvm.smax.i32(i32 %.0254648, i32 %114)
  %115 = getelementptr i8, ptr %111, i64 10
  %116 = load i16, ptr %115, align 2, !tbaa !16
  %117 = sext i16 %116 to i32
  %spec.select298 = tail call i32 @llvm.smin.i32(i32 %.0251649, i32 %117)
  %.1250 = tail call i32 @llvm.smax.i32(i32 %.0249650, i32 %117)
  %indvars.iv.next = add nsw i64 %indvars.iv646, 1
  %118 = icmp slt i64 %indvars.iv.next, %89
  br i1 %118, label %scalar.ph702, label %.loopexit, !llvm.loop !22

.loopexit:                                        ; preds = %scalar.ph702, %.preheader312, %middle.block701, %80
  %.2259 = phi i32 [ %81, %80 ], [ %82, %.preheader312 ], [ %110, %middle.block701 ], [ %spec.select, %scalar.ph702 ]
  %.2256 = phi i32 [ 0, %80 ], [ 0, %.preheader312 ], [ %109, %middle.block701 ], [ %.1255, %scalar.ph702 ]
  %.2253 = phi i32 [ %81, %80 ], [ %82, %.preheader312 ], [ %108, %middle.block701 ], [ %spec.select298, %scalar.ph702 ]
  %.2 = phi i32 [ 0, %80 ], [ 0, %.preheader312 ], [ %107, %middle.block701 ], [ %.1250, %scalar.ph702 ]
  %119 = icmp slt i32 %.2259, %.2256
  br i1 %119, label %.preheader309.lr.ph, label %.preheader311

.preheader309.lr.ph:                              ; preds = %.loopexit
  %reass.sub295 = sub i32 %.0260, %reass.add
  %120 = add i32 %reass.sub295, 16
  %121 = sub i32 %.2259, %2
  %122 = sext i32 %.2259 to i64
  %wide.trip.count = zext nneg i32 %.2256 to i64
  %123 = sext i32 %120 to i64
  %124 = sext i32 %120 to i64
  %125 = add nsw i64 %36, %122
  br label %.preheader309

.preheader311:                                    ; preds = %.split.us, %.loopexit
  %.pre461518 = phi ptr [ %.pre461505, %.loopexit ], [ %.pre461522, %.split.us ]
  %.pre483490 = phi ptr [ %.pre483496, %.loopexit ], [ %.pre483491, %.split.us ]
  %126 = phi ptr [ %61, %.loopexit ], [ %205, %.split.us ]
  %.pre464471 = phi ptr [ %.pre464477, %.loopexit ], [ %.pre464472, %.split.us ]
  %127 = phi ptr [ %62, %.loopexit ], [ %206, %.split.us ]
  %128 = phi ptr [ %63, %.loopexit ], [ %207, %.split.us ]
  %129 = phi ptr [ %64, %.loopexit ], [ %208, %.split.us ]
  %130 = phi ptr [ %65, %.loopexit ], [ %209, %.split.us ]
  %.pre451456 = phi ptr [ %.pre451453, %.loopexit ], [ %.pre451458, %.split.us ]
  %131 = phi ptr [ %66, %.loopexit ], [ %210, %.split.us ]
  %132 = phi ptr [ %67, %.loopexit ], [ %210, %.split.us ]
  %133 = icmp slt i32 %.2256, %.2253
  br i1 %133, label %.preheader308.lr.ph, label %.preheader310

.preheader308.lr.ph:                              ; preds = %.preheader311
  %reass.sub292 = sub i32 %.0260, %reass.add
  %134 = add i32 %reass.sub292, 16
  %135 = sub i32 %.2256, %2
  %136 = zext i32 %.2256 to i64
  %wide.trip.count421 = sext i32 %.2253 to i64
  %137 = add nsw i64 %36, %136
  br label %.preheader308

.preheader309:                                    ; preds = %.preheader309.lr.ph, %.split.us
  %indvar679 = phi i64 [ 0, %.preheader309.lr.ph ], [ %indvar.next680, %.split.us ]
  %.pre461521 = phi ptr [ %.pre461505, %.preheader309.lr.ph ], [ %.pre461522, %.split.us ]
  %.pre483495 = phi ptr [ %.pre483496, %.preheader309.lr.ph ], [ %.pre483491, %.split.us ]
  %138 = phi ptr [ %61, %.preheader309.lr.ph ], [ %205, %.split.us ]
  %.pre464476 = phi ptr [ %.pre464477, %.preheader309.lr.ph ], [ %.pre464472, %.split.us ]
  %139 = phi ptr [ %62, %.preheader309.lr.ph ], [ %206, %.split.us ]
  %140 = phi ptr [ %63, %.preheader309.lr.ph ], [ %207, %.split.us ]
  %141 = phi ptr [ %64, %.preheader309.lr.ph ], [ %208, %.split.us ]
  %142 = phi ptr [ %65, %.preheader309.lr.ph ], [ %209, %.split.us ]
  %.pre451457 = phi ptr [ %.pre451453, %.preheader309.lr.ph ], [ %.pre451458, %.split.us ]
  %143 = phi ptr [ %66, %.preheader309.lr.ph ], [ %210, %.split.us ]
  %indvars.iv394 = phi i64 [ %122, %.preheader309.lr.ph ], [ %indvars.iv.next395, %.split.us ]
  %indvars.iv372 = phi i32 [ %121, %.preheader309.lr.ph ], [ %indvars.iv.next373, %.split.us ]
  %144 = add i64 %125, %indvar679
  %145 = sext i32 %indvars.iv372 to i64
  %smax681 = tail call i64 @llvm.smax.i64(i64 %144, i64 %145)
  %146 = add i64 %smax681, 1
  %147 = sub i64 %146, %145
  %148 = sext i32 %indvars.iv372 to i64
  %149 = sub nsw i64 %indvars.iv394, %36
  %150 = add nsw i64 %indvars.iv394, %36
  %.not297313 = icmp sgt i64 %149, %150
  %.not297313.fr = freeze i1 %.not297313
  br i1 %.not297313.fr, label %.preheader309.split.us, label %.preheader309.split.preheader

.preheader309.split.preheader:                    ; preds = %.preheader309
  %min.iters.check684 = icmp ult i64 %147, 8
  %n.vec687 = and i64 %147, -8
  %ind.end688 = add i64 %n.vec687, %148
  %cmp.n699 = icmp eq i64 %147, %n.vec687
  br label %.preheader309.split

.preheader309.split.us:                           ; preds = %.preheader309, %183
  %.pre461523 = phi ptr [ %.pre461, %183 ], [ %.pre461521, %.preheader309 ]
  %.pre483494 = phi ptr [ %.pre461, %183 ], [ %.pre483495, %.preheader309 ]
  %151 = phi ptr [ %.pre461, %183 ], [ %138, %.preheader309 ]
  %.pre464475 = phi ptr [ %.pre461, %183 ], [ %.pre464476, %.preheader309 ]
  %152 = phi ptr [ %.pre461, %183 ], [ %139, %.preheader309 ]
  %153 = phi ptr [ %.pre461, %183 ], [ %140, %.preheader309 ]
  %154 = phi ptr [ %.pre461, %183 ], [ %141, %.preheader309 ]
  %155 = phi ptr [ %.pre461, %183 ], [ %142, %.preheader309 ]
  %indvars.iv391 = phi i64 [ %indvars.iv.next392, %183 ], [ %69, %.preheader309 ]
  %156 = icmp eq ptr %155, null
  br i1 %156, label %164, label %.thread.us

.thread.us:                                       ; preds = %.preheader309.split.us
  %157 = getelementptr inbounds i8, ptr %155, i64 8
  %158 = load ptr, ptr %157, align 8, !tbaa !15
  %159 = getelementptr inbounds i8, ptr %158, i64 6
  %160 = load i16, ptr %159, align 2, !tbaa !16
  %161 = sext i16 %160 to i32
  %spec.select588 = tail call i32 @llvm.smin.i32(i32 %120, i32 %161)
  %162 = sext i32 %spec.select588 to i64
  %163 = icmp slt i64 %indvars.iv391, %162
  br i1 %163, label %170, label %.split.us

164:                                              ; preds = %.preheader309.split.us
  %165 = load i32, ptr %32, align 4, !tbaa !11
  %166 = icmp slt i32 %120, %165
  br i1 %166, label %.thread533, label %.thread300.us

.thread300.us:                                    ; preds = %164
  %167 = sext i32 %165 to i64
  %168 = icmp slt i64 %indvars.iv391, %167
  br i1 %168, label %.thread301.us, label %.split.us

.thread533:                                       ; preds = %164
  %169 = icmp slt i64 %indvars.iv391, %124
  br i1 %169, label %.thread301.us, label %.split.us

170:                                              ; preds = %.thread.us
  br i1 %156, label %.thread301.us, label %171

171:                                              ; preds = %170
  %172 = getelementptr inbounds i8, ptr %155, i64 8
  %173 = load ptr, ptr %172, align 8, !tbaa !15
  %.idx530 = shl i64 %indvars.iv391, 2
  %174 = getelementptr i8, ptr %173, i64 %.idx530
  %175 = getelementptr i8, ptr %174, i64 8
  %176 = load i16, ptr %175, align 2, !tbaa !16
  %177 = sext i16 %176 to i64
  br label %.thread301.us

.thread301.us:                                    ; preds = %.thread533, %171, %170, %.thread300.us
  %178 = phi i64 [ %177, %171 ], [ 0, %170 ], [ 0, %.thread300.us ], [ 0, %.thread533 ]
  %179 = icmp sgt i64 %indvars.iv394, %178
  br i1 %179, label %._crit_edge321.split.us.us, label %183

._crit_edge321.split.us.us:                       ; preds = %.thread301.us
  %180 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv391
  %181 = load ptr, ptr %180, align 8, !tbaa !14
  %182 = getelementptr inbounds i8, ptr %181, i64 %indvars.iv394
  store i8 0, ptr %182, align 1, !tbaa !15
  %.pre461.pre = load ptr, ptr %31, align 8, !tbaa !13
  br label %183

183:                                              ; preds = %._crit_edge321.split.us.us, %.thread301.us
  %.pre461 = phi ptr [ %.pre461.pre, %._crit_edge321.split.us.us ], [ %.pre461523, %.thread301.us ]
  %indvars.iv.next392 = add nsw i64 %indvars.iv391, 1
  br label %.preheader309.split.us, !llvm.loop !23

.preheader309.split:                              ; preds = %.preheader309.split.preheader, %243
  %.pre461520 = phi ptr [ %.pre461519, %243 ], [ %.pre461521, %.preheader309.split.preheader ]
  %.pre483493 = phi ptr [ %.pre483492, %243 ], [ %.pre483495, %.preheader309.split.preheader ]
  %184 = phi ptr [ %244, %243 ], [ %138, %.preheader309.split.preheader ]
  %.pre464474 = phi ptr [ %.pre464473, %243 ], [ %.pre464476, %.preheader309.split.preheader ]
  %185 = phi ptr [ %245, %243 ], [ %139, %.preheader309.split.preheader ]
  %186 = phi ptr [ %246, %243 ], [ %140, %.preheader309.split.preheader ]
  %187 = phi ptr [ %247, %243 ], [ %141, %.preheader309.split.preheader ]
  %188 = phi ptr [ %248, %243 ], [ %142, %.preheader309.split.preheader ]
  %.pre451459 = phi ptr [ %.pre451, %243 ], [ %.pre451457, %.preheader309.split.preheader ]
  %189 = phi ptr [ %.pre451, %243 ], [ %143, %.preheader309.split.preheader ]
  %indvars.iv388 = phi i64 [ %indvars.iv.next389, %243 ], [ %69, %.preheader309.split.preheader ]
  %indvars.iv386 = phi i32 [ %indvars.iv.next387, %243 ], [ %indvars.iv384, %.preheader309.split.preheader ]
  %indvars.iv379 = phi i32 [ %indvars.iv.next380, %243 ], [ %indvars.iv377, %.preheader309.split.preheader ]
  %190 = sext i32 %indvars.iv379 to i64
  %191 = icmp eq ptr %189, null
  br i1 %191, label %192, label %.thread

192:                                              ; preds = %.preheader309.split
  %193 = load i32, ptr %32, align 4, !tbaa !11
  %194 = icmp slt i32 %120, %193
  br i1 %194, label %.thread535, label %.thread300

.thread:                                          ; preds = %.preheader309.split
  %195 = getelementptr inbounds i8, ptr %189, i64 8
  %196 = load ptr, ptr %195, align 8, !tbaa !15
  %197 = getelementptr inbounds i8, ptr %196, i64 6
  %198 = load i16, ptr %197, align 2, !tbaa !16
  %199 = sext i16 %198 to i32
  %spec.select589 = tail call i32 @llvm.smin.i32(i32 %120, i32 %199)
  %200 = sext i32 %spec.select589 to i64
  %201 = icmp slt i64 %indvars.iv388, %200
  br i1 %201, label %211, label %.split.us

.thread535:                                       ; preds = %192
  %202 = icmp slt i64 %indvars.iv388, %123
  br i1 %202, label %.thread301, label %.split.us

.thread300:                                       ; preds = %192
  %203 = sext i32 %193 to i64
  %204 = icmp slt i64 %indvars.iv388, %203
  br i1 %204, label %.thread301, label %.split.us

.split.us:                                        ; preds = %.thread535, %.thread, %.thread300, %.thread300.us, %.thread.us, %.thread533
  %.pre461522 = phi ptr [ %.pre461523, %.thread533 ], [ %.pre461523, %.thread.us ], [ %.pre461523, %.thread300.us ], [ %.pre461520, %.thread300 ], [ %.pre461520, %.thread ], [ %.pre461520, %.thread535 ]
  %.pre483491 = phi ptr [ %.pre483494, %.thread533 ], [ %.pre483494, %.thread.us ], [ %.pre483494, %.thread300.us ], [ %.pre483493, %.thread300 ], [ %.pre483493, %.thread ], [ %.pre483493, %.thread535 ]
  %205 = phi ptr [ %151, %.thread533 ], [ %151, %.thread.us ], [ %151, %.thread300.us ], [ %184, %.thread300 ], [ %184, %.thread ], [ %184, %.thread535 ]
  %.pre464472 = phi ptr [ %.pre464475, %.thread533 ], [ %.pre464475, %.thread.us ], [ %.pre464475, %.thread300.us ], [ %.pre464474, %.thread300 ], [ %.pre464474, %.thread ], [ %.pre464474, %.thread535 ]
  %206 = phi ptr [ %152, %.thread533 ], [ %152, %.thread.us ], [ %152, %.thread300.us ], [ %185, %.thread300 ], [ %185, %.thread ], [ %185, %.thread535 ]
  %207 = phi ptr [ %153, %.thread533 ], [ %153, %.thread.us ], [ %153, %.thread300.us ], [ %186, %.thread300 ], [ %186, %.thread ], [ %186, %.thread535 ]
  %208 = phi ptr [ %154, %.thread533 ], [ %154, %.thread.us ], [ %154, %.thread300.us ], [ %187, %.thread300 ], [ %187, %.thread ], [ %187, %.thread535 ]
  %209 = phi ptr [ null, %.thread300.us ], [ %155, %.thread.us ], [ null, %.thread533 ], [ %188, %.thread300 ], [ %188, %.thread ], [ %188, %.thread535 ]
  %.pre451458 = phi ptr [ null, %.thread300.us ], [ %155, %.thread.us ], [ null, %.thread533 ], [ %.pre451459, %.thread300 ], [ %.pre451459, %.thread ], [ %.pre451459, %.thread535 ]
  %210 = phi ptr [ null, %.thread300.us ], [ %155, %.thread.us ], [ null, %.thread533 ], [ null, %.thread535 ], [ %189, %.thread ], [ null, %.thread300 ]
  %indvars.iv.next395 = add nsw i64 %indvars.iv394, 1
  %indvars.iv.next373 = add i32 %indvars.iv372, 1
  %exitcond397.not = icmp eq i64 %indvars.iv.next395, %wide.trip.count
  %indvar.next680 = add i64 %indvar679, 1
  br i1 %exitcond397.not, label %.preheader311, label %.preheader309, !llvm.loop !24

211:                                              ; preds = %.thread
  br i1 %191, label %.thread301, label %212

212:                                              ; preds = %211
  %213 = getelementptr inbounds i8, ptr %189, i64 8
  %214 = load ptr, ptr %213, align 8, !tbaa !15
  %.idx527 = shl i64 %indvars.iv388, 2
  %215 = getelementptr i8, ptr %214, i64 %.idx527
  %216 = getelementptr i8, ptr %215, i64 8
  %217 = load i16, ptr %216, align 2, !tbaa !16
  %218 = sext i16 %217 to i64
  br label %.thread301

.thread301:                                       ; preds = %.thread535, %.thread300, %211, %212
  %219 = phi i64 [ %218, %212 ], [ 0, %211 ], [ 0, %.thread300 ], [ 0, %.thread535 ]
  %220 = icmp sgt i64 %indvars.iv394, %219
  br i1 %220, label %221, label %243

221:                                              ; preds = %.thread301
  %222 = sub nsw i64 %indvars.iv388, %36
  %223 = add nsw i64 %indvars.iv388, %36
  %.not296316 = icmp sgt i64 %222, %223
  br i1 %.not296316, label %._crit_edge321.split, label %.lr.ph

._crit_edge321.split:                             ; preds = %._crit_edge, %221
  %.0244.lcssa = phi i32 [ 0, %221 ], [ %.lcssa, %._crit_edge ]
  %224 = sdiv i32 %.0244.lcssa, %26
  %225 = trunc i32 %224 to i8
  %226 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv388
  %227 = load ptr, ptr %226, align 8, !tbaa !14
  %228 = getelementptr inbounds i8, ptr %227, i64 %indvars.iv394
  store i8 %225, ptr %228, align 1, !tbaa !15
  %.pre451.pre = load ptr, ptr %31, align 8, !tbaa !13
  br label %243

.lr.ph:                                           ; preds = %221, %._crit_edge
  %indvars.iv381 = phi i64 [ %indvars.iv.next382, %._crit_edge ], [ %190, %221 ]
  %.0244317 = phi i32 [ %.lcssa, %._crit_edge ], [ 0, %221 ]
  %229 = getelementptr inbounds ptr, ptr %46, i64 %indvars.iv381
  %230 = load ptr, ptr %229, align 8, !tbaa !14
  br i1 %min.iters.check684, label %scalar.ph683.preheader, label %vector.ph685

scalar.ph683.preheader:                           ; preds = %middle.block682, %.lr.ph
  %indvars.iv374.ph = phi i64 [ %148, %.lr.ph ], [ %ind.end688, %middle.block682 ]
  %.1245314.ph = phi i32 [ %.0244317, %.lr.ph ], [ %238, %middle.block682 ]
  br label %scalar.ph683

vector.ph685:                                     ; preds = %.lr.ph
  %231 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0244317, i64 0
  %invariant.gep851 = getelementptr i8, ptr %230, i64 %148
  br label %vector.body690

vector.body690:                                   ; preds = %vector.body690, %vector.ph685
  %index691 = phi i64 [ 0, %vector.ph685 ], [ %index.next697, %vector.body690 ]
  %vec.phi692 = phi <4 x i32> [ %231, %vector.ph685 ], [ %235, %vector.body690 ]
  %vec.phi693 = phi <4 x i32> [ zeroinitializer, %vector.ph685 ], [ %236, %vector.body690 ]
  %gep852 = getelementptr i8, ptr %invariant.gep851, i64 %index691
  %232 = getelementptr inbounds i8, ptr %gep852, i64 4
  %wide.load695 = load <4 x i8>, ptr %gep852, align 1, !tbaa !15
  %wide.load696 = load <4 x i8>, ptr %232, align 1, !tbaa !15
  %233 = zext <4 x i8> %wide.load695 to <4 x i32>
  %234 = zext <4 x i8> %wide.load696 to <4 x i32>
  %235 = add <4 x i32> %vec.phi692, %233
  %236 = add <4 x i32> %vec.phi693, %234
  %index.next697 = add nuw i64 %index691, 8
  %237 = icmp eq i64 %index.next697, %n.vec687
  br i1 %237, label %middle.block682, label %vector.body690, !llvm.loop !25

middle.block682:                                  ; preds = %vector.body690
  %bin.rdx698 = add <4 x i32> %236, %235
  %238 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx698)
  br i1 %cmp.n699, label %._crit_edge, label %scalar.ph683.preheader

._crit_edge:                                      ; preds = %scalar.ph683, %middle.block682
  %.lcssa = phi i32 [ %238, %middle.block682 ], [ %242, %scalar.ph683 ]
  %indvars.iv.next382 = add nsw i64 %indvars.iv381, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next382 to i32
  %exitcond.not = icmp eq i32 %indvars.iv386, %lftr.wideiv
  br i1 %exitcond.not, label %._crit_edge321.split, label %.lr.ph, !llvm.loop !26

scalar.ph683:                                     ; preds = %scalar.ph683.preheader, %scalar.ph683
  %indvars.iv374 = phi i64 [ %indvars.iv.next375, %scalar.ph683 ], [ %indvars.iv374.ph, %scalar.ph683.preheader ]
  %.1245314 = phi i32 [ %242, %scalar.ph683 ], [ %.1245314.ph, %scalar.ph683.preheader ]
  %239 = getelementptr inbounds i8, ptr %230, i64 %indvars.iv374
  %240 = load i8, ptr %239, align 1, !tbaa !15
  %241 = zext i8 %240 to i32
  %242 = add nsw i32 %.1245314, %241
  %indvars.iv.next375 = add nsw i64 %indvars.iv374, 1
  %.not297.not = icmp slt i64 %indvars.iv374, %150
  br i1 %.not297.not, label %scalar.ph683, label %._crit_edge, !llvm.loop !27

243:                                              ; preds = %.thread301, %._crit_edge321.split
  %.pre461519 = phi ptr [ %.pre461520, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %.pre483492 = phi ptr [ %.pre483493, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %244 = phi ptr [ %184, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %.pre464473 = phi ptr [ %.pre464474, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %245 = phi ptr [ %185, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %246 = phi ptr [ %186, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %247 = phi ptr [ %187, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %248 = phi ptr [ %188, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %.pre451 = phi ptr [ %.pre451459, %.thread301 ], [ %.pre451.pre, %._crit_edge321.split ]
  %indvars.iv.next389 = add nsw i64 %indvars.iv388, 1
  %indvars.iv.next380 = add i32 %indvars.iv379, 1
  %indvars.iv.next387 = add i32 %indvars.iv386, 1
  br label %.preheader309.split, !llvm.loop !23

.preheader310:                                    ; preds = %.split340.us, %.preheader311
  %.pre461513 = phi ptr [ %.pre461518, %.preheader311 ], [ %.pre461514, %.split340.us ]
  %.pre483485 = phi ptr [ %.pre483490, %.preheader311 ], [ %.pre483486, %.split340.us ]
  %249 = phi ptr [ %126, %.preheader311 ], [ %305, %.split340.us ]
  %.pre464466 = phi ptr [ %.pre464471, %.preheader311 ], [ %.pre464467, %.split340.us ]
  %250 = phi ptr [ %127, %.preheader311 ], [ %306, %.split340.us ]
  %251 = phi ptr [ %128, %.preheader311 ], [ %307, %.split340.us ]
  %252 = phi ptr [ %129, %.preheader311 ], [ %308, %.split340.us ]
  %253 = phi ptr [ %130, %.preheader311 ], [ %308, %.split340.us ]
  %.pre451455 = phi ptr [ %.pre451456, %.preheader311 ], [ %308, %.split340.us ]
  %254 = phi ptr [ %131, %.preheader311 ], [ %308, %.split340.us ]
  %255 = phi ptr [ %132, %.preheader311 ], [ %308, %.split340.us ]
  %256 = icmp slt i32 %.2253, %.2
  %reass.sub289 = sub i32 %.0260, %reass.add
  %257 = add i32 %reass.sub289, 16
  br i1 %256, label %.preheader.lr.ph, label %._crit_edge360

.preheader.lr.ph:                                 ; preds = %.preheader310
  %258 = sub i32 %.2253, %2
  %259 = sext i32 %.2253 to i64
  %wide.trip.count446 = zext nneg i32 %.2 to i64
  %260 = sext i32 %257 to i64
  %261 = sext i32 %257 to i64
  %262 = add nsw i64 %36, %259
  br label %.preheader

.preheader308:                                    ; preds = %.preheader308.lr.ph, %.split340.us
  %indvar657 = phi i64 [ 0, %.preheader308.lr.ph ], [ %indvar.next658, %.split340.us ]
  %.pre461517 = phi ptr [ %.pre461518, %.preheader308.lr.ph ], [ %.pre461514, %.split340.us ]
  %.pre483489 = phi ptr [ %.pre483490, %.preheader308.lr.ph ], [ %.pre483486, %.split340.us ]
  %263 = phi ptr [ %126, %.preheader308.lr.ph ], [ %305, %.split340.us ]
  %.pre464470 = phi ptr [ %.pre464471, %.preheader308.lr.ph ], [ %.pre464467, %.split340.us ]
  %264 = phi ptr [ %127, %.preheader308.lr.ph ], [ %306, %.split340.us ]
  %265 = phi ptr [ %128, %.preheader308.lr.ph ], [ %307, %.split340.us ]
  %266 = phi ptr [ %129, %.preheader308.lr.ph ], [ %308, %.split340.us ]
  %indvars.iv418 = phi i64 [ %136, %.preheader308.lr.ph ], [ %indvars.iv.next419, %.split340.us ]
  %indvars.iv398 = phi i32 [ %135, %.preheader308.lr.ph ], [ %indvars.iv.next399, %.split340.us ]
  %267 = add i64 %137, %indvar657
  %268 = sext i32 %indvars.iv398 to i64
  %smax659 = tail call i64 @llvm.smax.i64(i64 %267, i64 %268)
  %269 = add i64 %smax659, 1
  %270 = sub i64 %269, %268
  %271 = sext i32 %indvars.iv398 to i64
  %272 = sub nsw i64 %indvars.iv418, %36
  %273 = add nsw i64 %indvars.iv418, %36
  %.not294325 = icmp sgt i64 %272, %273
  %.not294325.fr = freeze i1 %.not294325
  br i1 %.not294325.fr, label %.preheader308.split.us, label %.preheader308.split.preheader

.preheader308.split.preheader:                    ; preds = %.preheader308
  %min.iters.check662 = icmp ult i64 %270, 8
  %n.vec665 = and i64 %270, -8
  %ind.end666 = add i64 %n.vec665, %271
  %cmp.n677 = icmp eq i64 %270, %n.vec665
  br label %.preheader308.split

.preheader308.split.us:                           ; preds = %.preheader308, %._crit_edge337.split.us.us
  %.pre461516 = phi ptr [ %.pre463, %._crit_edge337.split.us.us ], [ %.pre461517, %.preheader308 ]
  %.pre483488 = phi ptr [ %.pre463, %._crit_edge337.split.us.us ], [ %.pre483489, %.preheader308 ]
  %274 = phi ptr [ %.pre463, %._crit_edge337.split.us.us ], [ %263, %.preheader308 ]
  %.pre464469 = phi ptr [ %.pre463, %._crit_edge337.split.us.us ], [ %.pre464470, %.preheader308 ]
  %275 = phi ptr [ %.pre463, %._crit_edge337.split.us.us ], [ %264, %.preheader308 ]
  %276 = phi ptr [ %.pre463, %._crit_edge337.split.us.us ], [ %265, %.preheader308 ]
  %indvars.iv415 = phi i64 [ %indvars.iv.next416, %._crit_edge337.split.us.us ], [ %69, %.preheader308 ]
  %277 = icmp eq ptr %276, null
  br i1 %277, label %283, label %.thread302.us

.thread302.us:                                    ; preds = %.preheader308.split.us
  %278 = getelementptr inbounds i8, ptr %276, i64 8
  %279 = load ptr, ptr %278, align 8, !tbaa !15
  %280 = getelementptr inbounds i8, ptr %279, i64 6
  %281 = load i16, ptr %280, align 2, !tbaa !16
  %282 = sext i16 %281 to i32
  br label %.thread303.us

283:                                              ; preds = %.preheader308.split.us
  %284 = load i32, ptr %32, align 4, !tbaa !11
  br label %.thread303.us

.thread303.us:                                    ; preds = %283, %.thread302.us
  %.sink597 = phi i32 [ %284, %283 ], [ %282, %.thread302.us ]
  %spec.select591 = tail call i32 @llvm.smin.i32(i32 %134, i32 %.sink597)
  %285 = sext i32 %spec.select591 to i64
  %286 = icmp slt i64 %indvars.iv415, %285
  br i1 %286, label %._crit_edge337.split.us.us, label %.split340.us

._crit_edge337.split.us.us:                       ; preds = %.thread303.us
  %287 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv415
  %288 = load ptr, ptr %287, align 8, !tbaa !14
  %289 = getelementptr inbounds i8, ptr %288, i64 %indvars.iv418
  store i8 0, ptr %289, align 1, !tbaa !15
  %indvars.iv.next416 = add nsw i64 %indvars.iv415, 1
  %.pre463 = load ptr, ptr %31, align 8, !tbaa !13
  br label %.preheader308.split.us, !llvm.loop !28

.preheader308.split:                              ; preds = %.preheader308.split.preheader, %._crit_edge337.split
  %.pre461515 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %.pre461517, %.preheader308.split.preheader ]
  %.pre483487 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %.pre483489, %.preheader308.split.preheader ]
  %290 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %263, %.preheader308.split.preheader ]
  %.pre464468 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %.pre464470, %.preheader308.split.preheader ]
  %291 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %264, %.preheader308.split.preheader ]
  %292 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %265, %.preheader308.split.preheader ]
  %293 = phi ptr [ %.pre462, %._crit_edge337.split ], [ %266, %.preheader308.split.preheader ]
  %indvars.iv412 = phi i64 [ %indvars.iv.next413, %._crit_edge337.split ], [ %69, %.preheader308.split.preheader ]
  %indvars.iv408 = phi i32 [ %indvars.iv.next409, %._crit_edge337.split ], [ %indvars.iv384, %.preheader308.split.preheader ]
  %indvars.iv403 = phi i32 [ %indvars.iv.next404, %._crit_edge337.split ], [ %indvars.iv377, %.preheader308.split.preheader ]
  %294 = sext i32 %indvars.iv403 to i64
  %295 = icmp eq ptr %293, null
  br i1 %295, label %296, label %.thread302

296:                                              ; preds = %.preheader308.split
  %297 = load i32, ptr %32, align 4, !tbaa !11
  br label %.thread303

.thread302:                                       ; preds = %.preheader308.split
  %298 = getelementptr inbounds i8, ptr %293, i64 8
  %299 = load ptr, ptr %298, align 8, !tbaa !15
  %300 = getelementptr inbounds i8, ptr %299, i64 6
  %301 = load i16, ptr %300, align 2, !tbaa !16
  %302 = sext i16 %301 to i32
  br label %.thread303

.thread303:                                       ; preds = %.thread302, %296
  %.sink599 = phi i32 [ %302, %.thread302 ], [ %297, %296 ]
  %spec.select593 = tail call i32 @llvm.smin.i32(i32 %134, i32 %.sink599)
  %303 = sext i32 %spec.select593 to i64
  %304 = icmp slt i64 %indvars.iv412, %303
  br i1 %304, label %309, label %.split340.us

.split340.us:                                     ; preds = %.thread303, %.thread303.us
  %.pre461514 = phi ptr [ %.pre461516, %.thread303.us ], [ %.pre461515, %.thread303 ]
  %.pre483486 = phi ptr [ %.pre483488, %.thread303.us ], [ %.pre483487, %.thread303 ]
  %305 = phi ptr [ %274, %.thread303.us ], [ %290, %.thread303 ]
  %.pre464467 = phi ptr [ %.pre464469, %.thread303.us ], [ %.pre464468, %.thread303 ]
  %306 = phi ptr [ %275, %.thread303.us ], [ %291, %.thread303 ]
  %307 = phi ptr [ %276, %.thread303.us ], [ %292, %.thread303 ]
  %308 = phi ptr [ %276, %.thread303.us ], [ %293, %.thread303 ]
  %indvars.iv.next419 = add nuw nsw i64 %indvars.iv418, 1
  %indvars.iv.next399 = add i32 %indvars.iv398, 1
  %exitcond422.not = icmp eq i64 %indvars.iv.next419, %wide.trip.count421
  %indvar.next658 = add i64 %indvar657, 1
  br i1 %exitcond422.not, label %.preheader310, label %.preheader308, !llvm.loop !29

309:                                              ; preds = %.thread303
  %310 = sub nsw i64 %indvars.iv412, %36
  %311 = add nsw i64 %indvars.iv412, %36
  %.not293332 = icmp sgt i64 %310, %311
  br i1 %.not293332, label %._crit_edge337.split, label %.lr.ph329

._crit_edge337.split:                             ; preds = %._crit_edge330, %309
  %.0238.lcssa = phi i32 [ 0, %309 ], [ %.lcssa623, %._crit_edge330 ]
  %312 = sdiv i32 %.0238.lcssa, %26
  %313 = trunc i32 %312 to i8
  %314 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv412
  %315 = load ptr, ptr %314, align 8, !tbaa !14
  %316 = getelementptr inbounds i8, ptr %315, i64 %indvars.iv418
  store i8 %313, ptr %316, align 1, !tbaa !15
  %indvars.iv.next413 = add nsw i64 %indvars.iv412, 1
  %indvars.iv.next404 = add i32 %indvars.iv403, 1
  %indvars.iv.next409 = add i32 %indvars.iv408, 1
  %.pre462 = load ptr, ptr %31, align 8, !tbaa !13
  br label %.preheader308.split, !llvm.loop !28

.lr.ph329:                                        ; preds = %309, %._crit_edge330
  %indvars.iv405 = phi i64 [ %indvars.iv.next406, %._crit_edge330 ], [ %294, %309 ]
  %.0238333 = phi i32 [ %.lcssa623, %._crit_edge330 ], [ 0, %309 ]
  %317 = getelementptr inbounds ptr, ptr %46, i64 %indvars.iv405
  %318 = load ptr, ptr %317, align 8, !tbaa !14
  br i1 %min.iters.check662, label %scalar.ph661.preheader, label %vector.ph663

scalar.ph661.preheader:                           ; preds = %middle.block660, %.lr.ph329
  %indvars.iv400.ph = phi i64 [ %271, %.lr.ph329 ], [ %ind.end666, %middle.block660 ]
  %.1239326.ph = phi i32 [ %.0238333, %.lr.ph329 ], [ %326, %middle.block660 ]
  br label %scalar.ph661

vector.ph663:                                     ; preds = %.lr.ph329
  %319 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0238333, i64 0
  %invariant.gep853 = getelementptr i8, ptr %318, i64 %271
  br label %vector.body668

vector.body668:                                   ; preds = %vector.body668, %vector.ph663
  %index669 = phi i64 [ 0, %vector.ph663 ], [ %index.next675, %vector.body668 ]
  %vec.phi670 = phi <4 x i32> [ %319, %vector.ph663 ], [ %323, %vector.body668 ]
  %vec.phi671 = phi <4 x i32> [ zeroinitializer, %vector.ph663 ], [ %324, %vector.body668 ]
  %gep854 = getelementptr i8, ptr %invariant.gep853, i64 %index669
  %320 = getelementptr inbounds i8, ptr %gep854, i64 4
  %wide.load673 = load <4 x i8>, ptr %gep854, align 1, !tbaa !15
  %wide.load674 = load <4 x i8>, ptr %320, align 1, !tbaa !15
  %321 = zext <4 x i8> %wide.load673 to <4 x i32>
  %322 = zext <4 x i8> %wide.load674 to <4 x i32>
  %323 = add <4 x i32> %vec.phi670, %321
  %324 = add <4 x i32> %vec.phi671, %322
  %index.next675 = add nuw i64 %index669, 8
  %325 = icmp eq i64 %index.next675, %n.vec665
  br i1 %325, label %middle.block660, label %vector.body668, !llvm.loop !30

middle.block660:                                  ; preds = %vector.body668
  %bin.rdx676 = add <4 x i32> %324, %323
  %326 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx676)
  br i1 %cmp.n677, label %._crit_edge330, label %scalar.ph661.preheader

._crit_edge330:                                   ; preds = %scalar.ph661, %middle.block660
  %.lcssa623 = phi i32 [ %326, %middle.block660 ], [ %330, %scalar.ph661 ]
  %indvars.iv.next406 = add nsw i64 %indvars.iv405, 1
  %lftr.wideiv410 = trunc i64 %indvars.iv.next406 to i32
  %exitcond411.not = icmp eq i32 %indvars.iv408, %lftr.wideiv410
  br i1 %exitcond411.not, label %._crit_edge337.split, label %.lr.ph329, !llvm.loop !31

scalar.ph661:                                     ; preds = %scalar.ph661.preheader, %scalar.ph661
  %indvars.iv400 = phi i64 [ %indvars.iv.next401, %scalar.ph661 ], [ %indvars.iv400.ph, %scalar.ph661.preheader ]
  %.1239326 = phi i32 [ %330, %scalar.ph661 ], [ %.1239326.ph, %scalar.ph661.preheader ]
  %327 = getelementptr inbounds i8, ptr %318, i64 %indvars.iv400
  %328 = load i8, ptr %327, align 1, !tbaa !15
  %329 = zext i8 %328 to i32
  %330 = add nsw i32 %.1239326, %329
  %indvars.iv.next401 = add nsw i64 %indvars.iv400, 1
  %.not294.not = icmp slt i64 %indvars.iv400, %273
  br i1 %.not294.not, label %scalar.ph661, label %._crit_edge330, !llvm.loop !32

.preheader:                                       ; preds = %.preheader.lr.ph, %.split357.us
  %indvar = phi i64 [ 0, %.preheader.lr.ph ], [ %indvar.next, %.split357.us ]
  %.pre461512 = phi ptr [ %.pre461513, %.preheader.lr.ph ], [ %.pre461507, %.split357.us ]
  %.pre483500 = phi ptr [ %.pre483485, %.preheader.lr.ph ], [ %.pre483501, %.split357.us ]
  %331 = phi ptr [ %249, %.preheader.lr.ph ], [ %396, %.split357.us ]
  %.pre464479 = phi ptr [ %.pre464466, %.preheader.lr.ph ], [ %.pre464480, %.split357.us ]
  %332 = phi ptr [ %250, %.preheader.lr.ph ], [ %397, %.split357.us ]
  %indvars.iv443 = phi i64 [ %259, %.preheader.lr.ph ], [ %indvars.iv.next444, %.split357.us ]
  %indvars.iv423 = phi i32 [ %258, %.preheader.lr.ph ], [ %indvars.iv.next424, %.split357.us ]
  %333 = add i64 %262, %indvar
  %334 = sext i32 %indvars.iv423 to i64
  %smax = tail call i64 @llvm.smax.i64(i64 %333, i64 %334)
  %335 = add i64 %smax, 1
  %336 = sub i64 %335, %334
  %337 = sext i32 %indvars.iv423 to i64
  %338 = sub nsw i64 %indvars.iv443, %36
  %339 = add nsw i64 %indvars.iv443, %36
  %.not291342 = icmp sgt i64 %338, %339
  %.not291342.fr = freeze i1 %.not291342
  br i1 %.not291342.fr, label %.preheader.split.us, label %.preheader.split.preheader

.preheader.split.preheader:                       ; preds = %.preheader
  %min.iters.check = icmp ult i64 %336, 8
  %n.vec = and i64 %336, -8
  %ind.end = add i64 %n.vec, %337
  %cmp.n = icmp eq i64 %336, %n.vec
  br label %.preheader.split

.preheader.split.us:                              ; preds = %.preheader, %371
  %.pre461511 = phi ptr [ %.pre461510, %371 ], [ %.pre461512, %.preheader ]
  %.pre483502 = phi ptr [ %.pre483, %371 ], [ %.pre483500, %.preheader ]
  %340 = phi ptr [ %.pre483, %371 ], [ %331, %.preheader ]
  %indvars.iv440 = phi i64 [ %indvars.iv.next441, %371 ], [ %69, %.preheader ]
  %341 = icmp eq ptr %340, null
  br i1 %341, label %349, label %.thread304.us

.thread304.us:                                    ; preds = %.preheader.split.us
  %342 = getelementptr inbounds i8, ptr %340, i64 8
  %343 = load ptr, ptr %342, align 8, !tbaa !15
  %344 = getelementptr inbounds i8, ptr %343, i64 6
  %345 = load i16, ptr %344, align 2, !tbaa !16
  %346 = sext i16 %345 to i32
  %spec.select594 = tail call i32 @llvm.smin.i32(i32 %257, i32 %346)
  %347 = sext i32 %spec.select594 to i64
  %348 = icmp slt i64 %indvars.iv440, %347
  br i1 %348, label %355, label %.split357.us

349:                                              ; preds = %.preheader.split.us
  %350 = load i32, ptr %32, align 4, !tbaa !11
  %351 = icmp slt i32 %257, %350
  br i1 %351, label %.thread537, label %.thread306.us

.thread306.us:                                    ; preds = %349
  %352 = sext i32 %350 to i64
  %353 = icmp slt i64 %indvars.iv440, %352
  br i1 %353, label %.thread307.us, label %.split357.us

.thread537:                                       ; preds = %349
  %354 = icmp slt i64 %indvars.iv440, %261
  br i1 %354, label %.thread307.us, label %.split357.us

355:                                              ; preds = %.thread304.us
  br i1 %341, label %.thread307.us, label %356

356:                                              ; preds = %355
  %357 = getelementptr inbounds i8, ptr %340, i64 8
  %358 = load ptr, ptr %357, align 8, !tbaa !15
  %.idx529 = shl i64 %indvars.iv440, 2
  %359 = getelementptr i8, ptr %358, i64 %.idx529
  %360 = getelementptr i8, ptr %359, i64 10
  %361 = load i16, ptr %360, align 2, !tbaa !16
  %362 = sext i16 %361 to i32
  br label %364

.thread307.us:                                    ; preds = %.thread537, %355, %.thread306.us
  %363 = load i32, ptr %33, align 8, !tbaa !12
  br label %364

364:                                              ; preds = %.thread307.us, %356
  %365 = phi i32 [ %363, %.thread307.us ], [ %362, %356 ]
  %366 = sext i32 %365 to i64
  %367 = icmp slt i64 %indvars.iv443, %366
  br i1 %367, label %._crit_edge354.split.us.us, label %371

._crit_edge354.split.us.us:                       ; preds = %364
  %368 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv440
  %369 = load ptr, ptr %368, align 8, !tbaa !14
  %370 = getelementptr inbounds i8, ptr %369, i64 %indvars.iv443
  store i8 0, ptr %370, align 1, !tbaa !15
  %.pre483.pre = load ptr, ptr %31, align 8, !tbaa !13
  br label %371

371:                                              ; preds = %._crit_edge354.split.us.us, %364
  %.pre461510 = phi ptr [ %.pre483.pre, %._crit_edge354.split.us.us ], [ %.pre461511, %364 ]
  %.pre483 = phi ptr [ %.pre483.pre, %._crit_edge354.split.us.us ], [ %.pre483502, %364 ]
  %indvars.iv.next441 = add nsw i64 %indvars.iv440, 1
  br label %.preheader.split.us, !llvm.loop !33

._crit_edge360:                                   ; preds = %.split357.us, %.preheader310
  %.pre461506 = phi ptr [ %.pre461513, %.preheader310 ], [ %.pre461507, %.split357.us ]
  %.pre483497 = phi ptr [ %.pre483485, %.preheader310 ], [ %.pre483501, %.split357.us ]
  %372 = phi ptr [ %249, %.preheader310 ], [ %396, %.split357.us ]
  %.pre464478 = phi ptr [ %.pre464466, %.preheader310 ], [ %.pre464480, %.split357.us ]
  %373 = phi ptr [ %250, %.preheader310 ], [ %397, %.split357.us ]
  %374 = phi ptr [ %251, %.preheader310 ], [ %397, %.split357.us ]
  %375 = phi ptr [ %252, %.preheader310 ], [ %397, %.split357.us ]
  %376 = phi ptr [ %253, %.preheader310 ], [ %397, %.split357.us ]
  %.pre451454 = phi ptr [ %.pre451455, %.preheader310 ], [ %397, %.split357.us ]
  %377 = phi ptr [ %254, %.preheader310 ], [ %397, %.split357.us ]
  %378 = phi ptr [ %255, %.preheader310 ], [ %397, %.split357.us ]
  %indvars.iv.next378 = add i32 %indvars.iv377, %34
  %indvars.iv.next385 = add i32 %indvars.iv384, %34
  br label %60, !llvm.loop !34

.preheader.split:                                 ; preds = %.preheader.split.preheader, %433
  %.pre461509 = phi ptr [ %.pre461508, %433 ], [ %.pre461512, %.preheader.split.preheader ]
  %.pre483499 = phi ptr [ %.pre483498, %433 ], [ %.pre483500, %.preheader.split.preheader ]
  %379 = phi ptr [ %434, %433 ], [ %331, %.preheader.split.preheader ]
  %.pre464481 = phi ptr [ %.pre464, %433 ], [ %.pre464479, %.preheader.split.preheader ]
  %380 = phi ptr [ %.pre464, %433 ], [ %332, %.preheader.split.preheader ]
  %indvars.iv437 = phi i64 [ %indvars.iv.next438, %433 ], [ %69, %.preheader.split.preheader ]
  %indvars.iv433 = phi i32 [ %indvars.iv.next434, %433 ], [ %indvars.iv384, %.preheader.split.preheader ]
  %indvars.iv428 = phi i32 [ %indvars.iv.next429, %433 ], [ %indvars.iv377, %.preheader.split.preheader ]
  %381 = sext i32 %indvars.iv428 to i64
  %382 = icmp eq ptr %380, null
  br i1 %382, label %383, label %.thread304

383:                                              ; preds = %.preheader.split
  %384 = load i32, ptr %32, align 4, !tbaa !11
  %385 = icmp slt i32 %257, %384
  br i1 %385, label %.thread539, label %.thread306

.thread304:                                       ; preds = %.preheader.split
  %386 = getelementptr inbounds i8, ptr %380, i64 8
  %387 = load ptr, ptr %386, align 8, !tbaa !15
  %388 = getelementptr inbounds i8, ptr %387, i64 6
  %389 = load i16, ptr %388, align 2, !tbaa !16
  %390 = sext i16 %389 to i32
  %spec.select595 = tail call i32 @llvm.smin.i32(i32 %257, i32 %390)
  %391 = sext i32 %spec.select595 to i64
  %392 = icmp slt i64 %indvars.iv437, %391
  br i1 %392, label %398, label %.split357.us

.thread539:                                       ; preds = %383
  %393 = icmp slt i64 %indvars.iv437, %260
  br i1 %393, label %.thread307, label %.split357.us

.thread306:                                       ; preds = %383
  %394 = sext i32 %384 to i64
  %395 = icmp slt i64 %indvars.iv437, %394
  br i1 %395, label %.thread307, label %.split357.us

.split357.us:                                     ; preds = %.thread539, %.thread304, %.thread306, %.thread306.us, %.thread304.us, %.thread537
  %.pre461507 = phi ptr [ %.pre461511, %.thread537 ], [ %.pre461511, %.thread304.us ], [ %.pre461511, %.thread306.us ], [ %.pre461509, %.thread306 ], [ %.pre461509, %.thread304 ], [ %.pre461509, %.thread539 ]
  %.pre483501 = phi ptr [ %.pre483502, %.thread537 ], [ %.pre483502, %.thread304.us ], [ %.pre483502, %.thread306.us ], [ %.pre483499, %.thread306 ], [ %.pre483499, %.thread304 ], [ %.pre483499, %.thread539 ]
  %396 = phi ptr [ null, %.thread306.us ], [ %340, %.thread304.us ], [ null, %.thread537 ], [ %379, %.thread306 ], [ %379, %.thread304 ], [ %379, %.thread539 ]
  %.pre464480 = phi ptr [ null, %.thread306.us ], [ %340, %.thread304.us ], [ null, %.thread537 ], [ %.pre464481, %.thread306 ], [ %.pre464481, %.thread304 ], [ %.pre464481, %.thread539 ]
  %397 = phi ptr [ null, %.thread306.us ], [ %340, %.thread304.us ], [ null, %.thread537 ], [ null, %.thread539 ], [ %380, %.thread304 ], [ null, %.thread306 ]
  %indvars.iv.next444 = add nsw i64 %indvars.iv443, 1
  %indvars.iv.next424 = add i32 %indvars.iv423, 1
  %exitcond447.not = icmp eq i64 %indvars.iv.next444, %wide.trip.count446
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond447.not, label %._crit_edge360, label %.preheader, !llvm.loop !35

398:                                              ; preds = %.thread304
  br i1 %382, label %.thread307, label %400

.thread307:                                       ; preds = %.thread539, %.thread306, %398
  %399 = load i32, ptr %33, align 8, !tbaa !12
  br label %407

400:                                              ; preds = %398
  %401 = getelementptr inbounds i8, ptr %380, i64 8
  %402 = load ptr, ptr %401, align 8, !tbaa !15
  %.idx528 = shl i64 %indvars.iv437, 2
  %403 = getelementptr i8, ptr %402, i64 %.idx528
  %404 = getelementptr i8, ptr %403, i64 10
  %405 = load i16, ptr %404, align 2, !tbaa !16
  %406 = sext i16 %405 to i32
  br label %407

407:                                              ; preds = %400, %.thread307
  %408 = phi i32 [ %399, %.thread307 ], [ %406, %400 ]
  %409 = sext i32 %408 to i64
  %410 = icmp slt i64 %indvars.iv443, %409
  br i1 %410, label %411, label %433

411:                                              ; preds = %407
  %412 = sub nsw i64 %indvars.iv437, %36
  %413 = add nsw i64 %indvars.iv437, %36
  %.not290349 = icmp sgt i64 %412, %413
  br i1 %.not290349, label %._crit_edge354.split, label %.lr.ph346

._crit_edge354.split:                             ; preds = %._crit_edge347, %411
  %.0233.lcssa = phi i32 [ 0, %411 ], [ %.lcssa635, %._crit_edge347 ]
  %414 = sdiv i32 %.0233.lcssa, %26
  %415 = trunc i32 %414 to i8
  %416 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv437
  %417 = load ptr, ptr %416, align 8, !tbaa !14
  %418 = getelementptr inbounds i8, ptr %417, i64 %indvars.iv443
  store i8 %415, ptr %418, align 1, !tbaa !15
  %.pre464.pre = load ptr, ptr %31, align 8, !tbaa !13
  br label %433

.lr.ph346:                                        ; preds = %411, %._crit_edge347
  %indvars.iv430 = phi i64 [ %indvars.iv.next431, %._crit_edge347 ], [ %381, %411 ]
  %.0233350 = phi i32 [ %.lcssa635, %._crit_edge347 ], [ 0, %411 ]
  %419 = getelementptr inbounds ptr, ptr %46, i64 %indvars.iv430
  %420 = load ptr, ptr %419, align 8, !tbaa !14
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph346
  %indvars.iv425.ph = phi i64 [ %337, %.lr.ph346 ], [ %ind.end, %middle.block ]
  %.1343.ph = phi i32 [ %.0233350, %.lr.ph346 ], [ %428, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph346
  %421 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0233350, i64 0
  %invariant.gep855 = getelementptr i8, ptr %420, i64 %337
  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> [ %421, %vector.ph ], [ %425, %vector.body ]
  %vec.phi655 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %426, %vector.body ]
  %gep856 = getelementptr i8, ptr %invariant.gep855, i64 %index
  %422 = getelementptr inbounds i8, ptr %gep856, i64 4
  %wide.load = load <4 x i8>, ptr %gep856, align 1, !tbaa !15
  %wide.load656 = load <4 x i8>, ptr %422, align 1, !tbaa !15
  %423 = zext <4 x i8> %wide.load to <4 x i32>
  %424 = zext <4 x i8> %wide.load656 to <4 x i32>
  %425 = add <4 x i32> %vec.phi, %423
  %426 = add <4 x i32> %vec.phi655, %424
  %index.next = add nuw i64 %index, 8
  %427 = icmp eq i64 %index.next, %n.vec
  br i1 %427, label %middle.block, label %vector.body, !llvm.loop !36

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %426, %425
  %428 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  br i1 %cmp.n, label %._crit_edge347, label %scalar.ph.preheader

._crit_edge347:                                   ; preds = %scalar.ph, %middle.block
  %.lcssa635 = phi i32 [ %428, %middle.block ], [ %432, %scalar.ph ]
  %indvars.iv.next431 = add nsw i64 %indvars.iv430, 1
  %lftr.wideiv435 = trunc i64 %indvars.iv.next431 to i32
  %exitcond436.not = icmp eq i32 %indvars.iv433, %lftr.wideiv435
  br i1 %exitcond436.not, label %._crit_edge354.split, label %.lr.ph346, !llvm.loop !37

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv425 = phi i64 [ %indvars.iv.next426, %scalar.ph ], [ %indvars.iv425.ph, %scalar.ph.preheader ]
  %.1343 = phi i32 [ %432, %scalar.ph ], [ %.1343.ph, %scalar.ph.preheader ]
  %429 = getelementptr inbounds i8, ptr %420, i64 %indvars.iv425
  %430 = load i8, ptr %429, align 1, !tbaa !15
  %431 = zext i8 %430 to i32
  %432 = add nsw i32 %.1343, %431
  %indvars.iv.next426 = add nsw i64 %indvars.iv425, 1
  %.not291.not = icmp slt i64 %indvars.iv425, %339
  br i1 %.not291.not, label %scalar.ph, label %._crit_edge347, !llvm.loop !38

433:                                              ; preds = %407, %._crit_edge354.split
  %.pre461508 = phi ptr [ %.pre461509, %407 ], [ %.pre464.pre, %._crit_edge354.split ]
  %.pre483498 = phi ptr [ %.pre483499, %407 ], [ %.pre464.pre, %._crit_edge354.split ]
  %434 = phi ptr [ %379, %407 ], [ %.pre464.pre, %._crit_edge354.split ]
  %.pre464 = phi ptr [ %.pre464481, %407 ], [ %.pre464.pre, %._crit_edge354.split ]
  %indvars.iv.next438 = add nsw i64 %indvars.iv437, 1
  %indvars.iv.next429 = add i32 %indvars.iv428, 1
  %indvars.iv.next434 = add i32 %indvars.iv433, 1
  br label %.preheader.split, !llvm.loop !33

435:                                              ; preds = %.thread531, %71
  %indvars.iv.next449 = add nuw nsw i64 %indvars.iv448, 1
  %436 = load i32, ptr %0, align 8, !tbaa !5
  %437 = sext i32 %436 to i64
  %438 = icmp slt i64 %indvars.iv.next449, %437
  br i1 %438, label %37, label %._crit_edge364, !llvm.loop !39

439:                                              ; preds = %._crit_edge364
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %4)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %4, ptr noundef nonnull align 8 dereferenceable(56) %0, i64 56, i1 false), !tbaa.struct !40
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %0, ptr noundef nonnull align 8 dereferenceable(56) %.0261, i64 56, i1 false), !tbaa.struct !40
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.0261, ptr noundef nonnull align 8 dereferenceable(56) %4, i64 56, i1 false), !tbaa.struct !40
  tail call void @HandleExchange(ptr noundef nonnull %0, ptr noundef %.0261) #5
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %4)
  tail call void @mImageRelease(ptr noundef %.0261) #5
  br label %440

440:                                              ; preds = %439, %._crit_edge364
  ret void
}

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

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

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

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

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

declare void @mImageExpand(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; 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) #3

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

declare void @mImageRelease(ptr noundef) local_unnamed_addr #2

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