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

; 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 [87 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__.mImageGradientSuppression = external hidden unnamed_addr constant [26 x i8], align 1

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

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

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

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

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

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

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

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

declare void @mImageRelease(ptr noundef) #1

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

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

43:                                               ; preds = %37
  %44 = load i32, ptr %9, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %44, i32 noundef -1, ptr noundef @.str, i32 noundef 297, ptr noundef @__FUNCTION__.mImageGradientSuppression, ptr noundef @.str.1)
  br label %45

45:                                               ; preds = %43, %37
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %46

46:                                               ; preds = %45
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = load i32, ptr %8, align 4, !tbaa !9
  call void @mImageExpand(ptr noundef %47, i32 noundef %48, i32 noundef 3)
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = load i32, ptr %8, align 4, !tbaa !9
  call void @mImageExpand(ptr noundef %49, i32 noundef %50, i32 noundef 3)
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %51, ptr %10, align 8, !tbaa !5
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = icmp eq ptr %52, null
  br i1 %53, label %62, label %54

54:                                               ; preds = %46
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = ptrtoint ptr %55 to i64
  %57 = icmp eq i64 %56, -1
  br i1 %57, label %62, label %58

58:                                               ; preds = %54
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = icmp eq ptr %59, %60
  br i1 %61, label %62, label %70

62:                                               ; preds = %58, %54, %46
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.MImage, ptr %63, i32 0, i32 1
  %65 = load i32, ptr %64, align 4, !tbaa !11
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.MImage, ptr %66, i32 0, i32 2
  %68 = load i32, ptr %67, align 8, !tbaa !13
  %69 = call ptr @ImageCreate(i32 noundef 1, i32 noundef %65, i32 noundef %68, ptr noundef null)
  store ptr %69, ptr %7, align 8, !tbaa !5
  br label %124

70:                                               ; preds = %58
  br label %71

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

74:                                               ; preds = %71
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.MImage, ptr %76, i32 0, i32 1
  %78 = load i32, ptr %77, align 4, !tbaa !11
  %79 = load ptr, ptr %7, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.MImage, ptr %79, i32 0, i32 3
  %81 = getelementptr inbounds [4 x ptr], ptr %80, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %75, i32 noundef -1, i32 noundef 1, i32 noundef %78, ptr noundef %81)
  br label %121

82:                                               ; preds = %71
  %83 = load i32, ptr %11, align 4, !tbaa !9
  %84 = icmp eq i32 %83, 3
  br i1 %84, label %85, label %96

85:                                               ; preds = %82
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.MImage, ptr %87, i32 0, i32 1
  %89 = load i32, ptr %88, align 4, !tbaa !11
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.MImage, ptr %90, i32 0, i32 2
  %92 = load i32, ptr %91, align 8, !tbaa !13
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.MImage, ptr %93, i32 0, i32 3
  %95 = getelementptr inbounds [4 x ptr], ptr %94, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %86, i32 noundef 1, i32 noundef %89, i32 noundef %92, ptr noundef %95)
  br label %120

96:                                               ; preds = %82
  %97 = load i32, ptr %11, align 4, !tbaa !9
  %98 = icmp eq i32 %97, 4
  br i1 %98, label %99, label %110

99:                                               ; preds = %96
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.MImage, ptr %101, i32 0, i32 1
  %103 = load i32, ptr %102, align 4, !tbaa !11
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.MImage, ptr %104, i32 0, i32 2
  %106 = load i32, ptr %105, align 8, !tbaa !13
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.MImage, ptr %107, i32 0, i32 3
  %109 = getelementptr inbounds [4 x ptr], ptr %108, i64 0, i64 0
  call void @ImageRedefine(ptr noundef %100, i32 noundef 1, i32 noundef %103, i32 noundef %106, ptr noundef %109)
  br label %119

110:                                              ; preds = %96
  br label %111

111:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 1, ptr %12, align 4, !tbaa !9
  %112 = load i32, ptr %12, align 4, !tbaa !9
  %113 = icmp ne i32 %112, 0
  br i1 %113, label %114, label %116

114:                                              ; preds = %111
  %115 = load i32, ptr %12, align 4, !tbaa !9
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %115, i32 noundef -1, ptr noundef @.str, i32 noundef 306, ptr noundef @__FUNCTION__.mImageGradientSuppression, ptr noundef @.str.2)
  br label %116

116:                                              ; preds = %114, %111
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %117

117:                                              ; preds = %116
  br label %118

118:                                              ; preds = %117
  br label %119

119:                                              ; preds = %118, %99
  br label %120

120:                                              ; preds = %119, %85
  br label %121

121:                                              ; preds = %120, %74
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122
  br label %124

124:                                              ; preds = %123, %62
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.MImage, ptr %125, i32 0, i32 3
  %127 = getelementptr inbounds [4 x ptr], ptr %126, i64 0, i64 0
  %128 = load ptr, ptr %127, align 8, !tbaa !5
  store ptr %128, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %129 = load ptr, ptr %6, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.MImage, ptr %129, i32 0, i32 3
  %131 = getelementptr inbounds [4 x ptr], ptr %130, i64 0, i64 0
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  store ptr %132, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.MImage, ptr %133, i32 0, i32 3
  %135 = getelementptr inbounds [4 x ptr], ptr %134, i64 0, i64 0
  %136 = load ptr, ptr %135, align 8, !tbaa !5
  store ptr %136, ptr %15, align 8, !tbaa !5
  br label %137

137:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.MImage, ptr %138, i32 0, i32 4
  %140 = load ptr, ptr %139, align 8, !tbaa !14
  %141 = icmp eq ptr %140, null
  br i1 %141, label %142, label %143

142:                                              ; preds = %137
  br label %152

143:                                              ; preds = %137
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.MImage, ptr %144, i32 0, i32 4
  %146 = load ptr, ptr %145, align 8, !tbaa !14
  %147 = getelementptr inbounds %struct.MArray, ptr %146, i32 0, i32 2
  %148 = load ptr, ptr %147, align 8, !tbaa !15
  %149 = getelementptr inbounds i16, ptr %148, i64 2
  %150 = load i16, ptr %149, align 2, !tbaa !16
  %151 = sext i16 %150 to i32
  br label %152

152:                                              ; preds = %143, %142
  %153 = phi i32 [ 0, %142 ], [ %151, %143 ]
  store i32 %153, ptr %16, align 4, !tbaa !9
  br label %154

154:                                              ; preds = %1396, %152
  %155 = load i32, ptr %16, align 4, !tbaa !9
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.MImage, ptr %156, i32 0, i32 4
  %158 = load ptr, ptr %157, align 8, !tbaa !14
  %159 = icmp eq ptr %158, null
  br i1 %159, label %160, label %164

160:                                              ; preds = %154
  %161 = load ptr, ptr %6, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.MImage, ptr %161, i32 0, i32 1
  %163 = load i32, ptr %162, align 4, !tbaa !11
  br label %173

164:                                              ; preds = %154
  %165 = load ptr, ptr %6, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.MImage, ptr %165, i32 0, i32 4
  %167 = load ptr, ptr %166, align 8, !tbaa !14
  %168 = getelementptr inbounds %struct.MArray, ptr %167, i32 0, i32 2
  %169 = load ptr, ptr %168, align 8, !tbaa !15
  %170 = getelementptr inbounds i16, ptr %169, i64 3
  %171 = load i16, ptr %170, align 2, !tbaa !16
  %172 = sext i16 %171 to i32
  br label %173

173:                                              ; preds = %164, %160
  %174 = phi i32 [ %163, %160 ], [ %172, %164 ]
  %175 = icmp slt i32 %155, %174
  br i1 %175, label %176, label %1403

176:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.MImage, ptr %177, i32 0, i32 2
  %179 = load i32, ptr %178, align 8, !tbaa !13
  store i32 %179, 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
  %180 = load ptr, ptr %6, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.MImage, ptr %180, i32 0, i32 2
  %182 = load i32, ptr %181, align 8, !tbaa !13
  store i32 %182, 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
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.MImage, ptr %183, i32 0, i32 4
  %185 = load ptr, ptr %184, align 8, !tbaa !14
  %186 = icmp ne ptr %185, null
  br i1 %186, label %187, label %322

187:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %188 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %188, ptr %21, align 4, !tbaa !9
  br label %189

189:                                              ; preds = %318, %187
  %190 = load i32, ptr %21, align 4, !tbaa !9
  %191 = load i32, ptr %16, align 4, !tbaa !9
  %192 = load i32, ptr %8, align 4, !tbaa !9
  %193 = sub nsw i32 16, %192
  %194 = load i32, ptr %8, align 4, !tbaa !9
  %195 = sub nsw i32 %193, %194
  %196 = add nsw i32 %191, %195
  %197 = load ptr, ptr %6, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.MImage, ptr %197, i32 0, i32 4
  %199 = load ptr, ptr %198, align 8, !tbaa !14
  %200 = icmp eq ptr %199, null
  br i1 %200, label %201, label %205

201:                                              ; preds = %189
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.MImage, ptr %202, i32 0, i32 1
  %204 = load i32, ptr %203, align 4, !tbaa !11
  br label %214

205:                                              ; preds = %189
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.MImage, ptr %206, i32 0, i32 4
  %208 = load ptr, ptr %207, align 8, !tbaa !14
  %209 = getelementptr inbounds %struct.MArray, ptr %208, i32 0, i32 2
  %210 = load ptr, ptr %209, align 8, !tbaa !15
  %211 = getelementptr inbounds i16, ptr %210, i64 3
  %212 = load i16, ptr %211, align 2, !tbaa !16
  %213 = sext i16 %212 to i32
  br label %214

214:                                              ; preds = %205, %201
  %215 = phi i32 [ %204, %201 ], [ %213, %205 ]
  %216 = icmp slt i32 %196, %215
  br i1 %216, label %217, label %224

217:                                              ; preds = %214
  %218 = load i32, ptr %16, align 4, !tbaa !9
  %219 = load i32, ptr %8, align 4, !tbaa !9
  %220 = sub nsw i32 16, %219
  %221 = load i32, ptr %8, align 4, !tbaa !9
  %222 = sub nsw i32 %220, %221
  %223 = add nsw i32 %218, %222
  br label %244

224:                                              ; preds = %214
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.MImage, ptr %225, i32 0, i32 4
  %227 = load ptr, ptr %226, align 8, !tbaa !14
  %228 = icmp eq ptr %227, null
  br i1 %228, label %229, label %233

229:                                              ; preds = %224
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.MImage, ptr %230, i32 0, i32 1
  %232 = load i32, ptr %231, align 4, !tbaa !11
  br label %242

233:                                              ; preds = %224
  %234 = load ptr, ptr %6, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.MImage, ptr %234, i32 0, i32 4
  %236 = load ptr, ptr %235, align 8, !tbaa !14
  %237 = getelementptr inbounds %struct.MArray, ptr %236, i32 0, i32 2
  %238 = load ptr, ptr %237, align 8, !tbaa !15
  %239 = getelementptr inbounds i16, ptr %238, i64 3
  %240 = load i16, ptr %239, align 2, !tbaa !16
  %241 = sext i16 %240 to i32
  br label %242

242:                                              ; preds = %233, %229
  %243 = phi i32 [ %232, %229 ], [ %241, %233 ]
  br label %244

244:                                              ; preds = %242, %217
  %245 = phi i32 [ %223, %217 ], [ %243, %242 ]
  %246 = icmp slt i32 %190, %245
  br i1 %246, label %248, label %247

247:                                              ; preds = %244
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %321

248:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %249 = load ptr, ptr %6, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.MImage, ptr %249, i32 0, i32 4
  %251 = load ptr, ptr %250, align 8, !tbaa !14
  %252 = icmp eq ptr %251, null
  br i1 %252, label %253, label %254

253:                                              ; preds = %248
  br label %268

254:                                              ; preds = %248
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.MImage, ptr %255, i32 0, i32 4
  %257 = load ptr, ptr %256, align 8, !tbaa !14
  %258 = getelementptr inbounds %struct.MArray, ptr %257, i32 0, i32 2
  %259 = load ptr, ptr %258, align 8, !tbaa !15
  %260 = load i32, ptr %21, align 4, !tbaa !9
  %261 = load i32, ptr %21, align 4, !tbaa !9
  %262 = add nsw i32 %260, %261
  %263 = add nsw i32 %262, 4
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i16, ptr %259, i64 %264
  %266 = load i16, ptr %265, align 2, !tbaa !16
  %267 = sext i16 %266 to i32
  br label %268

268:                                              ; preds = %254, %253
  %269 = phi i32 [ 0, %253 ], [ %267, %254 ]
  store i32 %269, ptr %22, align 4, !tbaa !9
  %270 = load i32, ptr %22, align 4, !tbaa !9
  %271 = load i32, ptr %17, align 4, !tbaa !9
  %272 = icmp slt i32 %270, %271
  br i1 %272, label %273, label %275

273:                                              ; preds = %268
  %274 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %274, ptr %17, align 4, !tbaa !9
  br label %275

275:                                              ; preds = %273, %268
  %276 = load i32, ptr %22, align 4, !tbaa !9
  %277 = load i32, ptr %18, align 4, !tbaa !9
  %278 = icmp sgt i32 %276, %277
  br i1 %278, label %279, label %281

279:                                              ; preds = %275
  %280 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %280, ptr %18, align 4, !tbaa !9
  br label %281

281:                                              ; preds = %279, %275
  %282 = load ptr, ptr %6, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.MImage, ptr %282, i32 0, i32 4
  %284 = load ptr, ptr %283, align 8, !tbaa !14
  %285 = icmp eq ptr %284, null
  br i1 %285, label %286, label %290

286:                                              ; preds = %281
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.MImage, ptr %287, i32 0, i32 2
  %289 = load i32, ptr %288, align 8, !tbaa !13
  br label %304

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

304:                                              ; preds = %290, %286
  %305 = phi i32 [ %289, %286 ], [ %303, %290 ]
  store i32 %305, ptr %22, align 4, !tbaa !9
  %306 = load i32, ptr %22, align 4, !tbaa !9
  %307 = load i32, ptr %19, align 4, !tbaa !9
  %308 = icmp slt i32 %306, %307
  br i1 %308, label %309, label %311

309:                                              ; preds = %304
  %310 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %310, ptr %19, align 4, !tbaa !9
  br label %311

311:                                              ; preds = %309, %304
  %312 = load i32, ptr %22, align 4, !tbaa !9
  %313 = load i32, ptr %20, align 4, !tbaa !9
  %314 = icmp sgt i32 %312, %313
  br i1 %314, label %315, label %317

315:                                              ; preds = %311
  %316 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %316, ptr %20, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %315, %311
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %318

318:                                              ; preds = %317
  %319 = load i32, ptr %21, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %21, align 4, !tbaa !9
  br label %189, !llvm.loop !18

321:                                              ; preds = %247
  br label %322

322:                                              ; preds = %321, %176
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %323 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %323, ptr %23, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %684, %322
  %325 = load i32, ptr %23, align 4, !tbaa !9
  %326 = load i32, ptr %18, align 4, !tbaa !9
  %327 = icmp slt i32 %325, %326
  br i1 %327, label %329, label %328

328:                                              ; preds = %324
  store i32 16, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %687

329:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  %330 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %330, ptr %25, align 4, !tbaa !9
  br label %331

331:                                              ; preds = %680, %329
  %332 = load i32, ptr %25, align 4, !tbaa !9
  %333 = load i32, ptr %16, align 4, !tbaa !9
  %334 = load i32, ptr %8, align 4, !tbaa !9
  %335 = sub nsw i32 16, %334
  %336 = load i32, ptr %8, align 4, !tbaa !9
  %337 = sub nsw i32 %335, %336
  %338 = add nsw i32 %333, %337
  %339 = load ptr, ptr %6, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.MImage, ptr %339, i32 0, i32 4
  %341 = load ptr, ptr %340, align 8, !tbaa !14
  %342 = icmp eq ptr %341, null
  br i1 %342, label %343, label %347

343:                                              ; preds = %331
  %344 = load ptr, ptr %6, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.MImage, ptr %344, i32 0, i32 1
  %346 = load i32, ptr %345, align 4, !tbaa !11
  br label %356

347:                                              ; preds = %331
  %348 = load ptr, ptr %6, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.MImage, ptr %348, i32 0, i32 4
  %350 = load ptr, ptr %349, align 8, !tbaa !14
  %351 = getelementptr inbounds %struct.MArray, ptr %350, i32 0, i32 2
  %352 = load ptr, ptr %351, align 8, !tbaa !15
  %353 = getelementptr inbounds i16, ptr %352, i64 3
  %354 = load i16, ptr %353, align 2, !tbaa !16
  %355 = sext i16 %354 to i32
  br label %356

356:                                              ; preds = %347, %343
  %357 = phi i32 [ %346, %343 ], [ %355, %347 ]
  %358 = icmp slt i32 %338, %357
  br i1 %358, label %359, label %366

359:                                              ; preds = %356
  %360 = load i32, ptr %16, align 4, !tbaa !9
  %361 = load i32, ptr %8, align 4, !tbaa !9
  %362 = sub nsw i32 16, %361
  %363 = load i32, ptr %8, align 4, !tbaa !9
  %364 = sub nsw i32 %362, %363
  %365 = add nsw i32 %360, %364
  br label %386

366:                                              ; preds = %356
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.MImage, ptr %367, i32 0, i32 4
  %369 = load ptr, ptr %368, align 8, !tbaa !14
  %370 = icmp eq ptr %369, null
  br i1 %370, label %371, label %375

371:                                              ; preds = %366
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.MImage, ptr %372, i32 0, i32 1
  %374 = load i32, ptr %373, align 4, !tbaa !11
  br label %384

375:                                              ; preds = %366
  %376 = load ptr, ptr %6, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.MImage, ptr %376, i32 0, i32 4
  %378 = load ptr, ptr %377, align 8, !tbaa !14
  %379 = getelementptr inbounds %struct.MArray, ptr %378, i32 0, i32 2
  %380 = load ptr, ptr %379, align 8, !tbaa !15
  %381 = getelementptr inbounds i16, ptr %380, i64 3
  %382 = load i16, ptr %381, align 2, !tbaa !16
  %383 = sext i16 %382 to i32
  br label %384

384:                                              ; preds = %375, %371
  %385 = phi i32 [ %374, %371 ], [ %383, %375 ]
  br label %386

386:                                              ; preds = %384, %359
  %387 = phi i32 [ %365, %359 ], [ %385, %384 ]
  %388 = icmp slt i32 %332, %387
  br i1 %388, label %390, label %389

389:                                              ; preds = %386
  store i32 19, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %683

390:                                              ; preds = %386
  %391 = load i32, ptr %23, align 4, !tbaa !9
  %392 = load ptr, ptr %6, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.MImage, ptr %392, i32 0, i32 4
  %394 = load ptr, ptr %393, align 8, !tbaa !14
  %395 = icmp eq ptr %394, null
  br i1 %395, label %396, label %397

396:                                              ; preds = %390
  br label %411

397:                                              ; preds = %390
  %398 = load ptr, ptr %6, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.MImage, ptr %398, i32 0, i32 4
  %400 = load ptr, ptr %399, align 8, !tbaa !14
  %401 = getelementptr inbounds %struct.MArray, ptr %400, i32 0, i32 2
  %402 = load ptr, ptr %401, align 8, !tbaa !15
  %403 = load i32, ptr %25, align 4, !tbaa !9
  %404 = load i32, ptr %25, align 4, !tbaa !9
  %405 = add nsw i32 %403, %404
  %406 = add nsw i32 %405, 4
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i16, ptr %402, i64 %407
  %409 = load i16, ptr %408, align 2, !tbaa !16
  %410 = sext i16 %409 to i32
  br label %411

411:                                              ; preds = %397, %396
  %412 = phi i32 [ 0, %396 ], [ %410, %397 ]
  %413 = icmp sgt i32 %391, %412
  br i1 %413, label %414, label %679

414:                                              ; preds = %411
  %415 = load ptr, ptr %13, align 8, !tbaa !5
  %416 = load i32, ptr %25, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds ptr, ptr %415, i64 %417
  %419 = load ptr, ptr %418, align 8, !tbaa !5
  %420 = load i32, ptr %23, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i8, ptr %419, i64 %421
  %423 = load i8, ptr %422, align 1, !tbaa !15
  %424 = zext i8 %423 to i32
  %425 = icmp eq i32 %424, 0
  br i1 %425, label %426, label %435

426:                                              ; preds = %414
  %427 = load ptr, ptr %15, align 8, !tbaa !5
  %428 = load i32, ptr %25, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds ptr, ptr %427, i64 %429
  %431 = load ptr, ptr %430, align 8, !tbaa !5
  %432 = load i32, ptr %23, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i8, ptr %431, i64 %433
  store i8 0, ptr %434, align 1, !tbaa !15
  br label %680

435:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %436 = load ptr, ptr %14, align 8, !tbaa !5
  %437 = load i32, ptr %25, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds ptr, ptr %436, i64 %438
  %440 = load ptr, ptr %439, align 8, !tbaa !5
  %441 = load i32, ptr %23, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i8, ptr %440, i64 %442
  %444 = load i8, ptr %443, align 1, !tbaa !15
  %445 = zext i8 %444 to i32
  store i32 %445, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %446 = load ptr, ptr %13, align 8, !tbaa !5
  %447 = load i32, ptr %25, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = getelementptr inbounds ptr, ptr %446, i64 %448
  %450 = load ptr, ptr %449, align 8, !tbaa !5
  %451 = load i32, ptr %23, align 4, !tbaa !9
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i8, ptr %450, i64 %452
  %454 = load i8, ptr %453, align 1, !tbaa !15
  %455 = zext i8 %454 to i32
  %456 = icmp eq i32 %455, 1
  br i1 %456, label %457, label %500

457:                                              ; preds = %435
  store i32 1, ptr %27, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %496, %457
  %459 = load i32, ptr %27, align 4, !tbaa !9
  %460 = load i32, ptr %8, align 4, !tbaa !9
  %461 = add nsw i32 %460, 1
  %462 = icmp slt i32 %459, %461
  br i1 %462, label %463, label %499

463:                                              ; preds = %458
  %464 = load i32, ptr %26, align 4, !tbaa !9
  %465 = load ptr, ptr %14, align 8, !tbaa !5
  %466 = load i32, ptr %25, align 4, !tbaa !9
  %467 = load i32, ptr %27, align 4, !tbaa !9
  %468 = sub nsw i32 %466, %467
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds ptr, ptr %465, i64 %469
  %471 = load ptr, ptr %470, align 8, !tbaa !5
  %472 = load i32, ptr %23, align 4, !tbaa !9
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds i8, ptr %471, i64 %473
  %475 = load i8, ptr %474, align 1, !tbaa !15
  %476 = zext i8 %475 to i32
  %477 = icmp slt i32 %464, %476
  br i1 %477, label %478, label %479

478:                                              ; preds = %463
  br label %499

479:                                              ; preds = %463
  %480 = load i32, ptr %26, align 4, !tbaa !9
  %481 = load ptr, ptr %14, align 8, !tbaa !5
  %482 = load i32, ptr %25, align 4, !tbaa !9
  %483 = load i32, ptr %27, align 4, !tbaa !9
  %484 = add nsw i32 %482, %483
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds ptr, ptr %481, i64 %485
  %487 = load ptr, ptr %486, align 8, !tbaa !5
  %488 = load i32, ptr %23, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds i8, ptr %487, i64 %489
  %491 = load i8, ptr %490, align 1, !tbaa !15
  %492 = zext i8 %491 to i32
  %493 = icmp slt i32 %480, %492
  br i1 %493, label %494, label %495

494:                                              ; preds = %479
  br label %499

495:                                              ; preds = %479
  br label %496

496:                                              ; preds = %495
  %497 = load i32, ptr %27, align 4, !tbaa !9
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %27, align 4, !tbaa !9
  br label %458, !llvm.loop !20

499:                                              ; preds = %494, %478, %458
  br label %663

500:                                              ; preds = %435
  %501 = load ptr, ptr %13, align 8, !tbaa !5
  %502 = load i32, ptr %25, align 4, !tbaa !9
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds ptr, ptr %501, i64 %503
  %505 = load ptr, ptr %504, align 8, !tbaa !5
  %506 = load i32, ptr %23, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i8, ptr %505, i64 %507
  %509 = load i8, ptr %508, align 1, !tbaa !15
  %510 = zext i8 %509 to i32
  %511 = icmp eq i32 %510, 2
  br i1 %511, label %512, label %559

512:                                              ; preds = %500
  store i32 1, ptr %27, align 4, !tbaa !9
  br label %513

513:                                              ; preds = %555, %512
  %514 = load i32, ptr %27, align 4, !tbaa !9
  %515 = load i32, ptr %8, align 4, !tbaa !9
  %516 = add nsw i32 %515, 1
  %517 = icmp slt i32 %514, %516
  br i1 %517, label %518, label %558

518:                                              ; preds = %513
  %519 = load i32, ptr %26, align 4, !tbaa !9
  %520 = load ptr, ptr %14, align 8, !tbaa !5
  %521 = load i32, ptr %25, align 4, !tbaa !9
  %522 = load i32, ptr %27, align 4, !tbaa !9
  %523 = sub nsw i32 %521, %522
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds ptr, ptr %520, i64 %524
  %526 = load ptr, ptr %525, align 8, !tbaa !5
  %527 = load i32, ptr %23, align 4, !tbaa !9
  %528 = load i32, ptr %27, align 4, !tbaa !9
  %529 = add nsw i32 %527, %528
  %530 = sext i32 %529 to i64
  %531 = getelementptr inbounds i8, ptr %526, i64 %530
  %532 = load i8, ptr %531, align 1, !tbaa !15
  %533 = zext i8 %532 to i32
  %534 = icmp slt i32 %519, %533
  br i1 %534, label %535, label %536

535:                                              ; preds = %518
  br label %558

536:                                              ; preds = %518
  %537 = load i32, ptr %26, align 4, !tbaa !9
  %538 = load ptr, ptr %14, align 8, !tbaa !5
  %539 = load i32, ptr %25, align 4, !tbaa !9
  %540 = load i32, ptr %27, align 4, !tbaa !9
  %541 = add nsw i32 %539, %540
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds ptr, ptr %538, i64 %542
  %544 = load ptr, ptr %543, align 8, !tbaa !5
  %545 = load i32, ptr %23, align 4, !tbaa !9
  %546 = load i32, ptr %27, align 4, !tbaa !9
  %547 = sub nsw i32 %545, %546
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds i8, ptr %544, i64 %548
  %550 = load i8, ptr %549, align 1, !tbaa !15
  %551 = zext i8 %550 to i32
  %552 = icmp slt i32 %537, %551
  br i1 %552, label %553, label %554

553:                                              ; preds = %536
  br label %558

554:                                              ; preds = %536
  br label %555

555:                                              ; preds = %554
  %556 = load i32, ptr %27, align 4, !tbaa !9
  %557 = add nsw i32 %556, 1
  store i32 %557, ptr %27, align 4, !tbaa !9
  br label %513, !llvm.loop !21

558:                                              ; preds = %553, %535, %513
  br label %662

559:                                              ; preds = %500
  %560 = load ptr, ptr %13, align 8, !tbaa !5
  %561 = load i32, ptr %25, align 4, !tbaa !9
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds ptr, ptr %560, i64 %562
  %564 = load ptr, ptr %563, align 8, !tbaa !5
  %565 = load i32, ptr %23, align 4, !tbaa !9
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds i8, ptr %564, i64 %566
  %568 = load i8, ptr %567, align 1, !tbaa !15
  %569 = zext i8 %568 to i32
  %570 = icmp eq i32 %569, 3
  br i1 %570, label %571, label %614

571:                                              ; preds = %559
  store i32 1, ptr %27, align 4, !tbaa !9
  br label %572

572:                                              ; preds = %610, %571
  %573 = load i32, ptr %27, align 4, !tbaa !9
  %574 = load i32, ptr %8, align 4, !tbaa !9
  %575 = add nsw i32 %574, 1
  %576 = icmp slt i32 %573, %575
  br i1 %576, label %577, label %613

577:                                              ; preds = %572
  %578 = load i32, ptr %26, align 4, !tbaa !9
  %579 = load ptr, ptr %14, align 8, !tbaa !5
  %580 = load i32, ptr %25, align 4, !tbaa !9
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds ptr, ptr %579, i64 %581
  %583 = load ptr, ptr %582, align 8, !tbaa !5
  %584 = load i32, ptr %23, align 4, !tbaa !9
  %585 = load i32, ptr %27, align 4, !tbaa !9
  %586 = sub nsw i32 %584, %585
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds i8, ptr %583, i64 %587
  %589 = load i8, ptr %588, align 1, !tbaa !15
  %590 = zext i8 %589 to i32
  %591 = icmp slt i32 %578, %590
  br i1 %591, label %592, label %593

592:                                              ; preds = %577
  br label %613

593:                                              ; preds = %577
  %594 = load i32, ptr %26, align 4, !tbaa !9
  %595 = load ptr, ptr %14, align 8, !tbaa !5
  %596 = load i32, ptr %25, align 4, !tbaa !9
  %597 = sext i32 %596 to i64
  %598 = getelementptr inbounds ptr, ptr %595, i64 %597
  %599 = load ptr, ptr %598, align 8, !tbaa !5
  %600 = load i32, ptr %23, align 4, !tbaa !9
  %601 = load i32, ptr %27, align 4, !tbaa !9
  %602 = add nsw i32 %600, %601
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds i8, ptr %599, i64 %603
  %605 = load i8, ptr %604, align 1, !tbaa !15
  %606 = zext i8 %605 to i32
  %607 = icmp slt i32 %594, %606
  br i1 %607, label %608, label %609

608:                                              ; preds = %593
  br label %613

609:                                              ; preds = %593
  br label %610

610:                                              ; preds = %609
  %611 = load i32, ptr %27, align 4, !tbaa !9
  %612 = add nsw i32 %611, 1
  store i32 %612, ptr %27, align 4, !tbaa !9
  br label %572, !llvm.loop !22

613:                                              ; preds = %608, %592, %572
  br label %661

614:                                              ; preds = %559
  store i32 1, ptr %27, align 4, !tbaa !9
  br label %615

615:                                              ; preds = %657, %614
  %616 = load i32, ptr %27, align 4, !tbaa !9
  %617 = load i32, ptr %8, align 4, !tbaa !9
  %618 = add nsw i32 %617, 1
  %619 = icmp slt i32 %616, %618
  br i1 %619, label %620, label %660

620:                                              ; preds = %615
  %621 = load i32, ptr %26, align 4, !tbaa !9
  %622 = load ptr, ptr %14, align 8, !tbaa !5
  %623 = load i32, ptr %25, align 4, !tbaa !9
  %624 = load i32, ptr %27, align 4, !tbaa !9
  %625 = sub nsw i32 %623, %624
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds ptr, ptr %622, i64 %626
  %628 = load ptr, ptr %627, align 8, !tbaa !5
  %629 = load i32, ptr %23, align 4, !tbaa !9
  %630 = load i32, ptr %27, align 4, !tbaa !9
  %631 = sub nsw i32 %629, %630
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds i8, ptr %628, i64 %632
  %634 = load i8, ptr %633, align 1, !tbaa !15
  %635 = zext i8 %634 to i32
  %636 = icmp slt i32 %621, %635
  br i1 %636, label %637, label %638

637:                                              ; preds = %620
  br label %660

638:                                              ; preds = %620
  %639 = load i32, ptr %26, align 4, !tbaa !9
  %640 = load ptr, ptr %14, align 8, !tbaa !5
  %641 = load i32, ptr %25, align 4, !tbaa !9
  %642 = load i32, ptr %27, align 4, !tbaa !9
  %643 = add nsw i32 %641, %642
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds ptr, ptr %640, i64 %644
  %646 = load ptr, ptr %645, align 8, !tbaa !5
  %647 = load i32, ptr %23, align 4, !tbaa !9
  %648 = load i32, ptr %27, align 4, !tbaa !9
  %649 = add nsw i32 %647, %648
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds i8, ptr %646, i64 %650
  %652 = load i8, ptr %651, align 1, !tbaa !15
  %653 = zext i8 %652 to i32
  %654 = icmp slt i32 %639, %653
  br i1 %654, label %655, label %656

655:                                              ; preds = %638
  br label %660

656:                                              ; preds = %638
  br label %657

657:                                              ; preds = %656
  %658 = load i32, ptr %27, align 4, !tbaa !9
  %659 = add nsw i32 %658, 1
  store i32 %659, ptr %27, align 4, !tbaa !9
  br label %615, !llvm.loop !23

660:                                              ; preds = %655, %637, %615
  br label %661

661:                                              ; preds = %660, %613
  br label %662

662:                                              ; preds = %661, %558
  br label %663

663:                                              ; preds = %662, %499
  %664 = load i32, ptr %27, align 4, !tbaa !9
  %665 = load i32, ptr %8, align 4, !tbaa !9
  %666 = add nsw i32 %665, 1
  %667 = icmp eq i32 %664, %666
  %668 = zext i1 %667 to i64
  %669 = select i1 %667, i32 255, i32 0
  %670 = trunc i32 %669 to i8
  %671 = load ptr, ptr %15, align 8, !tbaa !5
  %672 = load i32, ptr %25, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds ptr, ptr %671, i64 %673
  %675 = load ptr, ptr %674, align 8, !tbaa !5
  %676 = load i32, ptr %23, align 4, !tbaa !9
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i8, ptr %675, i64 %677
  store i8 %670, ptr %678, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %679

679:                                              ; preds = %663, %411
  br label %680

680:                                              ; preds = %679, %426
  %681 = load i32, ptr %25, align 4, !tbaa !9
  %682 = add nsw i32 %681, 1
  store i32 %682, ptr %25, align 4, !tbaa !9
  br label %331, !llvm.loop !24

683:                                              ; preds = %389
  br label %684

684:                                              ; preds = %683
  %685 = load i32, ptr %23, align 4, !tbaa !9
  %686 = add nsw i32 %685, 1
  store i32 %686, ptr %23, align 4, !tbaa !9
  br label %324, !llvm.loop !25

687:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %688 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %688, ptr %28, align 4, !tbaa !9
  br label %689

689:                                              ; preds = %1024, %687
  %690 = load i32, ptr %28, align 4, !tbaa !9
  %691 = load i32, ptr %19, align 4, !tbaa !9
  %692 = icmp slt i32 %690, %691
  br i1 %692, label %694, label %693

693:                                              ; preds = %689
  store i32 34, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %1027

694:                                              ; preds = %689
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %695 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %695, ptr %29, align 4, !tbaa !9
  br label %696

696:                                              ; preds = %1020, %694
  %697 = load i32, ptr %29, align 4, !tbaa !9
  %698 = load i32, ptr %16, align 4, !tbaa !9
  %699 = load i32, ptr %8, align 4, !tbaa !9
  %700 = sub nsw i32 16, %699
  %701 = load i32, ptr %8, align 4, !tbaa !9
  %702 = sub nsw i32 %700, %701
  %703 = add nsw i32 %698, %702
  %704 = load ptr, ptr %6, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.MImage, ptr %704, i32 0, i32 4
  %706 = load ptr, ptr %705, align 8, !tbaa !14
  %707 = icmp eq ptr %706, null
  br i1 %707, label %708, label %712

708:                                              ; preds = %696
  %709 = load ptr, ptr %6, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.MImage, ptr %709, i32 0, i32 1
  %711 = load i32, ptr %710, align 4, !tbaa !11
  br label %721

712:                                              ; preds = %696
  %713 = load ptr, ptr %6, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.MImage, ptr %713, i32 0, i32 4
  %715 = load ptr, ptr %714, align 8, !tbaa !14
  %716 = getelementptr inbounds %struct.MArray, ptr %715, i32 0, i32 2
  %717 = load ptr, ptr %716, align 8, !tbaa !15
  %718 = getelementptr inbounds i16, ptr %717, i64 3
  %719 = load i16, ptr %718, align 2, !tbaa !16
  %720 = sext i16 %719 to i32
  br label %721

721:                                              ; preds = %712, %708
  %722 = phi i32 [ %711, %708 ], [ %720, %712 ]
  %723 = icmp slt i32 %703, %722
  br i1 %723, label %724, label %731

724:                                              ; preds = %721
  %725 = load i32, ptr %16, align 4, !tbaa !9
  %726 = load i32, ptr %8, align 4, !tbaa !9
  %727 = sub nsw i32 16, %726
  %728 = load i32, ptr %8, align 4, !tbaa !9
  %729 = sub nsw i32 %727, %728
  %730 = add nsw i32 %725, %729
  br label %751

731:                                              ; preds = %721
  %732 = load ptr, ptr %6, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.MImage, ptr %732, i32 0, i32 4
  %734 = load ptr, ptr %733, align 8, !tbaa !14
  %735 = icmp eq ptr %734, null
  br i1 %735, label %736, label %740

736:                                              ; preds = %731
  %737 = load ptr, ptr %6, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.MImage, ptr %737, i32 0, i32 1
  %739 = load i32, ptr %738, align 4, !tbaa !11
  br label %749

740:                                              ; preds = %731
  %741 = load ptr, ptr %6, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.MImage, ptr %741, i32 0, i32 4
  %743 = load ptr, ptr %742, align 8, !tbaa !14
  %744 = getelementptr inbounds %struct.MArray, ptr %743, i32 0, i32 2
  %745 = load ptr, ptr %744, align 8, !tbaa !15
  %746 = getelementptr inbounds i16, ptr %745, i64 3
  %747 = load i16, ptr %746, align 2, !tbaa !16
  %748 = sext i16 %747 to i32
  br label %749

749:                                              ; preds = %740, %736
  %750 = phi i32 [ %739, %736 ], [ %748, %740 ]
  br label %751

751:                                              ; preds = %749, %724
  %752 = phi i32 [ %730, %724 ], [ %750, %749 ]
  %753 = icmp slt i32 %697, %752
  br i1 %753, label %755, label %754

754:                                              ; preds = %751
  store i32 37, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %1023

755:                                              ; preds = %751
  %756 = load ptr, ptr %13, align 8, !tbaa !5
  %757 = load i32, ptr %29, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds ptr, ptr %756, i64 %758
  %760 = load ptr, ptr %759, align 8, !tbaa !5
  %761 = load i32, ptr %28, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i8, ptr %760, i64 %762
  %764 = load i8, ptr %763, align 1, !tbaa !15
  %765 = zext i8 %764 to i32
  %766 = icmp eq i32 %765, 0
  br i1 %766, label %767, label %776

767:                                              ; preds = %755
  %768 = load ptr, ptr %15, align 8, !tbaa !5
  %769 = load i32, ptr %29, align 4, !tbaa !9
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds ptr, ptr %768, i64 %770
  %772 = load ptr, ptr %771, align 8, !tbaa !5
  %773 = load i32, ptr %28, align 4, !tbaa !9
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds i8, ptr %772, i64 %774
  store i8 0, ptr %775, align 1, !tbaa !15
  br label %1020

776:                                              ; preds = %755
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %777 = load ptr, ptr %14, align 8, !tbaa !5
  %778 = load i32, ptr %29, align 4, !tbaa !9
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds ptr, ptr %777, i64 %779
  %781 = load ptr, ptr %780, align 8, !tbaa !5
  %782 = load i32, ptr %28, align 4, !tbaa !9
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds i8, ptr %781, i64 %783
  %785 = load i8, ptr %784, align 1, !tbaa !15
  %786 = zext i8 %785 to i32
  store i32 %786, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %787 = load ptr, ptr %13, align 8, !tbaa !5
  %788 = load i32, ptr %29, align 4, !tbaa !9
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds ptr, ptr %787, i64 %789
  %791 = load ptr, ptr %790, align 8, !tbaa !5
  %792 = load i32, ptr %28, align 4, !tbaa !9
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds i8, ptr %791, i64 %793
  %795 = load i8, ptr %794, align 1, !tbaa !15
  %796 = zext i8 %795 to i32
  %797 = icmp eq i32 %796, 1
  br i1 %797, label %798, label %841

798:                                              ; preds = %776
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %799

799:                                              ; preds = %837, %798
  %800 = load i32, ptr %31, align 4, !tbaa !9
  %801 = load i32, ptr %8, align 4, !tbaa !9
  %802 = add nsw i32 %801, 1
  %803 = icmp slt i32 %800, %802
  br i1 %803, label %804, label %840

804:                                              ; preds = %799
  %805 = load i32, ptr %30, align 4, !tbaa !9
  %806 = load ptr, ptr %14, align 8, !tbaa !5
  %807 = load i32, ptr %29, align 4, !tbaa !9
  %808 = load i32, ptr %31, align 4, !tbaa !9
  %809 = sub nsw i32 %807, %808
  %810 = sext i32 %809 to i64
  %811 = getelementptr inbounds ptr, ptr %806, i64 %810
  %812 = load ptr, ptr %811, align 8, !tbaa !5
  %813 = load i32, ptr %28, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i8, ptr %812, i64 %814
  %816 = load i8, ptr %815, align 1, !tbaa !15
  %817 = zext i8 %816 to i32
  %818 = icmp slt i32 %805, %817
  br i1 %818, label %819, label %820

819:                                              ; preds = %804
  br label %840

820:                                              ; preds = %804
  %821 = load i32, ptr %30, align 4, !tbaa !9
  %822 = load ptr, ptr %14, align 8, !tbaa !5
  %823 = load i32, ptr %29, align 4, !tbaa !9
  %824 = load i32, ptr %31, align 4, !tbaa !9
  %825 = add nsw i32 %823, %824
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds ptr, ptr %822, i64 %826
  %828 = load ptr, ptr %827, align 8, !tbaa !5
  %829 = load i32, ptr %28, align 4, !tbaa !9
  %830 = sext i32 %829 to i64
  %831 = getelementptr inbounds i8, ptr %828, i64 %830
  %832 = load i8, ptr %831, align 1, !tbaa !15
  %833 = zext i8 %832 to i32
  %834 = icmp slt i32 %821, %833
  br i1 %834, label %835, label %836

835:                                              ; preds = %820
  br label %840

836:                                              ; preds = %820
  br label %837

837:                                              ; preds = %836
  %838 = load i32, ptr %31, align 4, !tbaa !9
  %839 = add nsw i32 %838, 1
  store i32 %839, ptr %31, align 4, !tbaa !9
  br label %799, !llvm.loop !26

840:                                              ; preds = %835, %819, %799
  br label %1004

841:                                              ; preds = %776
  %842 = load ptr, ptr %13, align 8, !tbaa !5
  %843 = load i32, ptr %29, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds ptr, ptr %842, i64 %844
  %846 = load ptr, ptr %845, align 8, !tbaa !5
  %847 = load i32, ptr %28, align 4, !tbaa !9
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds i8, ptr %846, i64 %848
  %850 = load i8, ptr %849, align 1, !tbaa !15
  %851 = zext i8 %850 to i32
  %852 = icmp eq i32 %851, 2
  br i1 %852, label %853, label %900

853:                                              ; preds = %841
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %854

854:                                              ; preds = %896, %853
  %855 = load i32, ptr %31, align 4, !tbaa !9
  %856 = load i32, ptr %8, align 4, !tbaa !9
  %857 = add nsw i32 %856, 1
  %858 = icmp slt i32 %855, %857
  br i1 %858, label %859, label %899

859:                                              ; preds = %854
  %860 = load i32, ptr %30, align 4, !tbaa !9
  %861 = load ptr, ptr %14, align 8, !tbaa !5
  %862 = load i32, ptr %29, align 4, !tbaa !9
  %863 = load i32, ptr %31, align 4, !tbaa !9
  %864 = sub nsw i32 %862, %863
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds ptr, ptr %861, i64 %865
  %867 = load ptr, ptr %866, align 8, !tbaa !5
  %868 = load i32, ptr %28, align 4, !tbaa !9
  %869 = load i32, ptr %31, align 4, !tbaa !9
  %870 = add nsw i32 %868, %869
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds i8, ptr %867, i64 %871
  %873 = load i8, ptr %872, align 1, !tbaa !15
  %874 = zext i8 %873 to i32
  %875 = icmp slt i32 %860, %874
  br i1 %875, label %876, label %877

876:                                              ; preds = %859
  br label %899

877:                                              ; preds = %859
  %878 = load i32, ptr %30, align 4, !tbaa !9
  %879 = load ptr, ptr %14, align 8, !tbaa !5
  %880 = load i32, ptr %29, align 4, !tbaa !9
  %881 = load i32, ptr %31, align 4, !tbaa !9
  %882 = add nsw i32 %880, %881
  %883 = sext i32 %882 to i64
  %884 = getelementptr inbounds ptr, ptr %879, i64 %883
  %885 = load ptr, ptr %884, align 8, !tbaa !5
  %886 = load i32, ptr %28, align 4, !tbaa !9
  %887 = load i32, ptr %31, align 4, !tbaa !9
  %888 = sub nsw i32 %886, %887
  %889 = sext i32 %888 to i64
  %890 = getelementptr inbounds i8, ptr %885, i64 %889
  %891 = load i8, ptr %890, align 1, !tbaa !15
  %892 = zext i8 %891 to i32
  %893 = icmp slt i32 %878, %892
  br i1 %893, label %894, label %895

894:                                              ; preds = %877
  br label %899

895:                                              ; preds = %877
  br label %896

896:                                              ; preds = %895
  %897 = load i32, ptr %31, align 4, !tbaa !9
  %898 = add nsw i32 %897, 1
  store i32 %898, ptr %31, align 4, !tbaa !9
  br label %854, !llvm.loop !27

899:                                              ; preds = %894, %876, %854
  br label %1003

900:                                              ; preds = %841
  %901 = load ptr, ptr %13, align 8, !tbaa !5
  %902 = load i32, ptr %29, align 4, !tbaa !9
  %903 = sext i32 %902 to i64
  %904 = getelementptr inbounds ptr, ptr %901, i64 %903
  %905 = load ptr, ptr %904, align 8, !tbaa !5
  %906 = load i32, ptr %28, align 4, !tbaa !9
  %907 = sext i32 %906 to i64
  %908 = getelementptr inbounds i8, ptr %905, i64 %907
  %909 = load i8, ptr %908, align 1, !tbaa !15
  %910 = zext i8 %909 to i32
  %911 = icmp eq i32 %910, 3
  br i1 %911, label %912, label %955

912:                                              ; preds = %900
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %913

913:                                              ; preds = %951, %912
  %914 = load i32, ptr %31, align 4, !tbaa !9
  %915 = load i32, ptr %8, align 4, !tbaa !9
  %916 = add nsw i32 %915, 1
  %917 = icmp slt i32 %914, %916
  br i1 %917, label %918, label %954

918:                                              ; preds = %913
  %919 = load i32, ptr %30, align 4, !tbaa !9
  %920 = load ptr, ptr %14, align 8, !tbaa !5
  %921 = load i32, ptr %29, align 4, !tbaa !9
  %922 = sext i32 %921 to i64
  %923 = getelementptr inbounds ptr, ptr %920, i64 %922
  %924 = load ptr, ptr %923, align 8, !tbaa !5
  %925 = load i32, ptr %28, align 4, !tbaa !9
  %926 = load i32, ptr %31, align 4, !tbaa !9
  %927 = sub nsw i32 %925, %926
  %928 = sext i32 %927 to i64
  %929 = getelementptr inbounds i8, ptr %924, i64 %928
  %930 = load i8, ptr %929, align 1, !tbaa !15
  %931 = zext i8 %930 to i32
  %932 = icmp slt i32 %919, %931
  br i1 %932, label %933, label %934

933:                                              ; preds = %918
  br label %954

934:                                              ; preds = %918
  %935 = load i32, ptr %30, align 4, !tbaa !9
  %936 = load ptr, ptr %14, align 8, !tbaa !5
  %937 = load i32, ptr %29, align 4, !tbaa !9
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds ptr, ptr %936, i64 %938
  %940 = load ptr, ptr %939, align 8, !tbaa !5
  %941 = load i32, ptr %28, align 4, !tbaa !9
  %942 = load i32, ptr %31, align 4, !tbaa !9
  %943 = add nsw i32 %941, %942
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i8, ptr %940, i64 %944
  %946 = load i8, ptr %945, align 1, !tbaa !15
  %947 = zext i8 %946 to i32
  %948 = icmp slt i32 %935, %947
  br i1 %948, label %949, label %950

949:                                              ; preds = %934
  br label %954

950:                                              ; preds = %934
  br label %951

951:                                              ; preds = %950
  %952 = load i32, ptr %31, align 4, !tbaa !9
  %953 = add nsw i32 %952, 1
  store i32 %953, ptr %31, align 4, !tbaa !9
  br label %913, !llvm.loop !28

954:                                              ; preds = %949, %933, %913
  br label %1002

955:                                              ; preds = %900
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %956

956:                                              ; preds = %998, %955
  %957 = load i32, ptr %31, align 4, !tbaa !9
  %958 = load i32, ptr %8, align 4, !tbaa !9
  %959 = add nsw i32 %958, 1
  %960 = icmp slt i32 %957, %959
  br i1 %960, label %961, label %1001

961:                                              ; preds = %956
  %962 = load i32, ptr %30, align 4, !tbaa !9
  %963 = load ptr, ptr %14, align 8, !tbaa !5
  %964 = load i32, ptr %29, align 4, !tbaa !9
  %965 = load i32, ptr %31, align 4, !tbaa !9
  %966 = sub nsw i32 %964, %965
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds ptr, ptr %963, i64 %967
  %969 = load ptr, ptr %968, align 8, !tbaa !5
  %970 = load i32, ptr %28, align 4, !tbaa !9
  %971 = load i32, ptr %31, align 4, !tbaa !9
  %972 = sub nsw i32 %970, %971
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds i8, ptr %969, i64 %973
  %975 = load i8, ptr %974, align 1, !tbaa !15
  %976 = zext i8 %975 to i32
  %977 = icmp slt i32 %962, %976
  br i1 %977, label %978, label %979

978:                                              ; preds = %961
  br label %1001

979:                                              ; preds = %961
  %980 = load i32, ptr %30, align 4, !tbaa !9
  %981 = load ptr, ptr %14, align 8, !tbaa !5
  %982 = load i32, ptr %29, align 4, !tbaa !9
  %983 = load i32, ptr %31, align 4, !tbaa !9
  %984 = add nsw i32 %982, %983
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds ptr, ptr %981, i64 %985
  %987 = load ptr, ptr %986, align 8, !tbaa !5
  %988 = load i32, ptr %28, align 4, !tbaa !9
  %989 = load i32, ptr %31, align 4, !tbaa !9
  %990 = add nsw i32 %988, %989
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds i8, ptr %987, i64 %991
  %993 = load i8, ptr %992, align 1, !tbaa !15
  %994 = zext i8 %993 to i32
  %995 = icmp slt i32 %980, %994
  br i1 %995, label %996, label %997

996:                                              ; preds = %979
  br label %1001

997:                                              ; preds = %979
  br label %998

998:                                              ; preds = %997
  %999 = load i32, ptr %31, align 4, !tbaa !9
  %1000 = add nsw i32 %999, 1
  store i32 %1000, ptr %31, align 4, !tbaa !9
  br label %956, !llvm.loop !29

1001:                                             ; preds = %996, %978, %956
  br label %1002

1002:                                             ; preds = %1001, %954
  br label %1003

1003:                                             ; preds = %1002, %899
  br label %1004

1004:                                             ; preds = %1003, %840
  %1005 = load i32, ptr %31, align 4, !tbaa !9
  %1006 = load i32, ptr %8, align 4, !tbaa !9
  %1007 = add nsw i32 %1006, 1
  %1008 = icmp eq i32 %1005, %1007
  %1009 = zext i1 %1008 to i64
  %1010 = select i1 %1008, i32 255, i32 0
  %1011 = trunc i32 %1010 to i8
  %1012 = load ptr, ptr %15, align 8, !tbaa !5
  %1013 = load i32, ptr %29, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds ptr, ptr %1012, i64 %1014
  %1016 = load ptr, ptr %1015, align 8, !tbaa !5
  %1017 = load i32, ptr %28, align 4, !tbaa !9
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds i8, ptr %1016, i64 %1018
  store i8 %1011, ptr %1019, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %1020

1020:                                             ; preds = %1004, %767
  %1021 = load i32, ptr %29, align 4, !tbaa !9
  %1022 = add nsw i32 %1021, 1
  store i32 %1022, ptr %29, align 4, !tbaa !9
  br label %696, !llvm.loop !30

1023:                                             ; preds = %754
  br label %1024

1024:                                             ; preds = %1023
  %1025 = load i32, ptr %28, align 4, !tbaa !9
  %1026 = add nsw i32 %1025, 1
  store i32 %1026, ptr %28, align 4, !tbaa !9
  br label %689, !llvm.loop !31

1027:                                             ; preds = %693
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %1028 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %1028, ptr %32, align 4, !tbaa !9
  br label %1029

1029:                                             ; preds = %1392, %1027
  %1030 = load i32, ptr %32, align 4, !tbaa !9
  %1031 = load i32, ptr %20, align 4, !tbaa !9
  %1032 = icmp slt i32 %1030, %1031
  br i1 %1032, label %1034, label %1033

1033:                                             ; preds = %1029
  store i32 52, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %1395

1034:                                             ; preds = %1029
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %1035 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %1035, ptr %33, align 4, !tbaa !9
  br label %1036

1036:                                             ; preds = %1388, %1034
  %1037 = load i32, ptr %33, align 4, !tbaa !9
  %1038 = load i32, ptr %16, align 4, !tbaa !9
  %1039 = load i32, ptr %8, align 4, !tbaa !9
  %1040 = sub nsw i32 16, %1039
  %1041 = load i32, ptr %8, align 4, !tbaa !9
  %1042 = sub nsw i32 %1040, %1041
  %1043 = add nsw i32 %1038, %1042
  %1044 = load ptr, ptr %6, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.MImage, ptr %1044, i32 0, i32 4
  %1046 = load ptr, ptr %1045, align 8, !tbaa !14
  %1047 = icmp eq ptr %1046, null
  br i1 %1047, label %1048, label %1052

1048:                                             ; preds = %1036
  %1049 = load ptr, ptr %6, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.MImage, ptr %1049, i32 0, i32 1
  %1051 = load i32, ptr %1050, align 4, !tbaa !11
  br label %1061

1052:                                             ; preds = %1036
  %1053 = load ptr, ptr %6, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct.MImage, ptr %1053, i32 0, i32 4
  %1055 = load ptr, ptr %1054, align 8, !tbaa !14
  %1056 = getelementptr inbounds %struct.MArray, ptr %1055, i32 0, i32 2
  %1057 = load ptr, ptr %1056, align 8, !tbaa !15
  %1058 = getelementptr inbounds i16, ptr %1057, i64 3
  %1059 = load i16, ptr %1058, align 2, !tbaa !16
  %1060 = sext i16 %1059 to i32
  br label %1061

1061:                                             ; preds = %1052, %1048
  %1062 = phi i32 [ %1051, %1048 ], [ %1060, %1052 ]
  %1063 = icmp slt i32 %1043, %1062
  br i1 %1063, label %1064, label %1071

1064:                                             ; preds = %1061
  %1065 = load i32, ptr %16, align 4, !tbaa !9
  %1066 = load i32, ptr %8, align 4, !tbaa !9
  %1067 = sub nsw i32 16, %1066
  %1068 = load i32, ptr %8, align 4, !tbaa !9
  %1069 = sub nsw i32 %1067, %1068
  %1070 = add nsw i32 %1065, %1069
  br label %1091

1071:                                             ; preds = %1061
  %1072 = load ptr, ptr %6, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.MImage, ptr %1072, i32 0, i32 4
  %1074 = load ptr, ptr %1073, align 8, !tbaa !14
  %1075 = icmp eq ptr %1074, null
  br i1 %1075, label %1076, label %1080

1076:                                             ; preds = %1071
  %1077 = load ptr, ptr %6, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.MImage, ptr %1077, i32 0, i32 1
  %1079 = load i32, ptr %1078, align 4, !tbaa !11
  br label %1089

1080:                                             ; preds = %1071
  %1081 = load ptr, ptr %6, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.MImage, ptr %1081, i32 0, i32 4
  %1083 = load ptr, ptr %1082, align 8, !tbaa !14
  %1084 = getelementptr inbounds %struct.MArray, ptr %1083, i32 0, i32 2
  %1085 = load ptr, ptr %1084, align 8, !tbaa !15
  %1086 = getelementptr inbounds i16, ptr %1085, i64 3
  %1087 = load i16, ptr %1086, align 2, !tbaa !16
  %1088 = sext i16 %1087 to i32
  br label %1089

1089:                                             ; preds = %1080, %1076
  %1090 = phi i32 [ %1079, %1076 ], [ %1088, %1080 ]
  br label %1091

1091:                                             ; preds = %1089, %1064
  %1092 = phi i32 [ %1070, %1064 ], [ %1090, %1089 ]
  %1093 = icmp slt i32 %1037, %1092
  br i1 %1093, label %1095, label %1094

1094:                                             ; preds = %1091
  store i32 55, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %1391

1095:                                             ; preds = %1091
  %1096 = load i32, ptr %32, align 4, !tbaa !9
  %1097 = load ptr, ptr %6, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.MImage, ptr %1097, i32 0, i32 4
  %1099 = load ptr, ptr %1098, align 8, !tbaa !14
  %1100 = icmp eq ptr %1099, null
  br i1 %1100, label %1101, label %1105

1101:                                             ; preds = %1095
  %1102 = load ptr, ptr %6, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.MImage, ptr %1102, i32 0, i32 2
  %1104 = load i32, ptr %1103, align 8, !tbaa !13
  br label %1119

1105:                                             ; preds = %1095
  %1106 = load ptr, ptr %6, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.MImage, ptr %1106, i32 0, i32 4
  %1108 = load ptr, ptr %1107, align 8, !tbaa !14
  %1109 = getelementptr inbounds %struct.MArray, ptr %1108, i32 0, i32 2
  %1110 = load ptr, ptr %1109, align 8, !tbaa !15
  %1111 = load i32, ptr %33, align 4, !tbaa !9
  %1112 = load i32, ptr %33, align 4, !tbaa !9
  %1113 = add nsw i32 %1111, %1112
  %1114 = add nsw i32 %1113, 5
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds i16, ptr %1110, i64 %1115
  %1117 = load i16, ptr %1116, align 2, !tbaa !16
  %1118 = sext i16 %1117 to i32
  br label %1119

1119:                                             ; preds = %1105, %1101
  %1120 = phi i32 [ %1104, %1101 ], [ %1118, %1105 ]
  %1121 = icmp slt i32 %1096, %1120
  br i1 %1121, label %1122, label %1387

1122:                                             ; preds = %1119
  %1123 = load ptr, ptr %13, align 8, !tbaa !5
  %1124 = load i32, ptr %33, align 4, !tbaa !9
  %1125 = sext i32 %1124 to i64
  %1126 = getelementptr inbounds ptr, ptr %1123, i64 %1125
  %1127 = load ptr, ptr %1126, align 8, !tbaa !5
  %1128 = load i32, ptr %32, align 4, !tbaa !9
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds i8, ptr %1127, i64 %1129
  %1131 = load i8, ptr %1130, align 1, !tbaa !15
  %1132 = zext i8 %1131 to i32
  %1133 = icmp eq i32 %1132, 0
  br i1 %1133, label %1134, label %1143

1134:                                             ; preds = %1122
  %1135 = load ptr, ptr %15, align 8, !tbaa !5
  %1136 = load i32, ptr %33, align 4, !tbaa !9
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds ptr, ptr %1135, i64 %1137
  %1139 = load ptr, ptr %1138, align 8, !tbaa !5
  %1140 = load i32, ptr %32, align 4, !tbaa !9
  %1141 = sext i32 %1140 to i64
  %1142 = getelementptr inbounds i8, ptr %1139, i64 %1141
  store i8 0, ptr %1142, align 1, !tbaa !15
  br label %1388

1143:                                             ; preds = %1122
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %1144 = load ptr, ptr %14, align 8, !tbaa !5
  %1145 = load i32, ptr %33, align 4, !tbaa !9
  %1146 = sext i32 %1145 to i64
  %1147 = getelementptr inbounds ptr, ptr %1144, i64 %1146
  %1148 = load ptr, ptr %1147, align 8, !tbaa !5
  %1149 = load i32, ptr %32, align 4, !tbaa !9
  %1150 = sext i32 %1149 to i64
  %1151 = getelementptr inbounds i8, ptr %1148, i64 %1150
  %1152 = load i8, ptr %1151, align 1, !tbaa !15
  %1153 = zext i8 %1152 to i32
  store i32 %1153, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %1154 = load ptr, ptr %13, align 8, !tbaa !5
  %1155 = load i32, ptr %33, align 4, !tbaa !9
  %1156 = sext i32 %1155 to i64
  %1157 = getelementptr inbounds ptr, ptr %1154, i64 %1156
  %1158 = load ptr, ptr %1157, align 8, !tbaa !5
  %1159 = load i32, ptr %32, align 4, !tbaa !9
  %1160 = sext i32 %1159 to i64
  %1161 = getelementptr inbounds i8, ptr %1158, i64 %1160
  %1162 = load i8, ptr %1161, align 1, !tbaa !15
  %1163 = zext i8 %1162 to i32
  %1164 = icmp eq i32 %1163, 1
  br i1 %1164, label %1165, label %1208

1165:                                             ; preds = %1143
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %1166

1166:                                             ; preds = %1204, %1165
  %1167 = load i32, ptr %35, align 4, !tbaa !9
  %1168 = load i32, ptr %8, align 4, !tbaa !9
  %1169 = add nsw i32 %1168, 1
  %1170 = icmp slt i32 %1167, %1169
  br i1 %1170, label %1171, label %1207

1171:                                             ; preds = %1166
  %1172 = load i32, ptr %34, align 4, !tbaa !9
  %1173 = load ptr, ptr %14, align 8, !tbaa !5
  %1174 = load i32, ptr %33, align 4, !tbaa !9
  %1175 = load i32, ptr %35, align 4, !tbaa !9
  %1176 = sub nsw i32 %1174, %1175
  %1177 = sext i32 %1176 to i64
  %1178 = getelementptr inbounds ptr, ptr %1173, i64 %1177
  %1179 = load ptr, ptr %1178, align 8, !tbaa !5
  %1180 = load i32, ptr %32, align 4, !tbaa !9
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds i8, ptr %1179, i64 %1181
  %1183 = load i8, ptr %1182, align 1, !tbaa !15
  %1184 = zext i8 %1183 to i32
  %1185 = icmp slt i32 %1172, %1184
  br i1 %1185, label %1186, label %1187

1186:                                             ; preds = %1171
  br label %1207

1187:                                             ; preds = %1171
  %1188 = load i32, ptr %34, align 4, !tbaa !9
  %1189 = load ptr, ptr %14, align 8, !tbaa !5
  %1190 = load i32, ptr %33, align 4, !tbaa !9
  %1191 = load i32, ptr %35, align 4, !tbaa !9
  %1192 = add nsw i32 %1190, %1191
  %1193 = sext i32 %1192 to i64
  %1194 = getelementptr inbounds ptr, ptr %1189, i64 %1193
  %1195 = load ptr, ptr %1194, align 8, !tbaa !5
  %1196 = load i32, ptr %32, align 4, !tbaa !9
  %1197 = sext i32 %1196 to i64
  %1198 = getelementptr inbounds i8, ptr %1195, i64 %1197
  %1199 = load i8, ptr %1198, align 1, !tbaa !15
  %1200 = zext i8 %1199 to i32
  %1201 = icmp slt i32 %1188, %1200
  br i1 %1201, label %1202, label %1203

1202:                                             ; preds = %1187
  br label %1207

1203:                                             ; preds = %1187
  br label %1204

1204:                                             ; preds = %1203
  %1205 = load i32, ptr %35, align 4, !tbaa !9
  %1206 = add nsw i32 %1205, 1
  store i32 %1206, ptr %35, align 4, !tbaa !9
  br label %1166, !llvm.loop !32

1207:                                             ; preds = %1202, %1186, %1166
  br label %1371

1208:                                             ; preds = %1143
  %1209 = load ptr, ptr %13, align 8, !tbaa !5
  %1210 = load i32, ptr %33, align 4, !tbaa !9
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds ptr, ptr %1209, i64 %1211
  %1213 = load ptr, ptr %1212, align 8, !tbaa !5
  %1214 = load i32, ptr %32, align 4, !tbaa !9
  %1215 = sext i32 %1214 to i64
  %1216 = getelementptr inbounds i8, ptr %1213, i64 %1215
  %1217 = load i8, ptr %1216, align 1, !tbaa !15
  %1218 = zext i8 %1217 to i32
  %1219 = icmp eq i32 %1218, 2
  br i1 %1219, label %1220, label %1267

1220:                                             ; preds = %1208
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %1221

1221:                                             ; preds = %1263, %1220
  %1222 = load i32, ptr %35, align 4, !tbaa !9
  %1223 = load i32, ptr %8, align 4, !tbaa !9
  %1224 = add nsw i32 %1223, 1
  %1225 = icmp slt i32 %1222, %1224
  br i1 %1225, label %1226, label %1266

1226:                                             ; preds = %1221
  %1227 = load i32, ptr %34, align 4, !tbaa !9
  %1228 = load ptr, ptr %14, align 8, !tbaa !5
  %1229 = load i32, ptr %33, align 4, !tbaa !9
  %1230 = load i32, ptr %35, align 4, !tbaa !9
  %1231 = sub nsw i32 %1229, %1230
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds ptr, ptr %1228, i64 %1232
  %1234 = load ptr, ptr %1233, align 8, !tbaa !5
  %1235 = load i32, ptr %32, align 4, !tbaa !9
  %1236 = load i32, ptr %35, align 4, !tbaa !9
  %1237 = add nsw i32 %1235, %1236
  %1238 = sext i32 %1237 to i64
  %1239 = getelementptr inbounds i8, ptr %1234, i64 %1238
  %1240 = load i8, ptr %1239, align 1, !tbaa !15
  %1241 = zext i8 %1240 to i32
  %1242 = icmp slt i32 %1227, %1241
  br i1 %1242, label %1243, label %1244

1243:                                             ; preds = %1226
  br label %1266

1244:                                             ; preds = %1226
  %1245 = load i32, ptr %34, align 4, !tbaa !9
  %1246 = load ptr, ptr %14, align 8, !tbaa !5
  %1247 = load i32, ptr %33, align 4, !tbaa !9
  %1248 = load i32, ptr %35, align 4, !tbaa !9
  %1249 = add nsw i32 %1247, %1248
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds ptr, ptr %1246, i64 %1250
  %1252 = load ptr, ptr %1251, align 8, !tbaa !5
  %1253 = load i32, ptr %32, align 4, !tbaa !9
  %1254 = load i32, ptr %35, align 4, !tbaa !9
  %1255 = sub nsw i32 %1253, %1254
  %1256 = sext i32 %1255 to i64
  %1257 = getelementptr inbounds i8, ptr %1252, i64 %1256
  %1258 = load i8, ptr %1257, align 1, !tbaa !15
  %1259 = zext i8 %1258 to i32
  %1260 = icmp slt i32 %1245, %1259
  br i1 %1260, label %1261, label %1262

1261:                                             ; preds = %1244
  br label %1266

1262:                                             ; preds = %1244
  br label %1263

1263:                                             ; preds = %1262
  %1264 = load i32, ptr %35, align 4, !tbaa !9
  %1265 = add nsw i32 %1264, 1
  store i32 %1265, ptr %35, align 4, !tbaa !9
  br label %1221, !llvm.loop !33

1266:                                             ; preds = %1261, %1243, %1221
  br label %1370

1267:                                             ; preds = %1208
  %1268 = load ptr, ptr %13, align 8, !tbaa !5
  %1269 = load i32, ptr %33, align 4, !tbaa !9
  %1270 = sext i32 %1269 to i64
  %1271 = getelementptr inbounds ptr, ptr %1268, i64 %1270
  %1272 = load ptr, ptr %1271, align 8, !tbaa !5
  %1273 = load i32, ptr %32, align 4, !tbaa !9
  %1274 = sext i32 %1273 to i64
  %1275 = getelementptr inbounds i8, ptr %1272, i64 %1274
  %1276 = load i8, ptr %1275, align 1, !tbaa !15
  %1277 = zext i8 %1276 to i32
  %1278 = icmp eq i32 %1277, 3
  br i1 %1278, label %1279, label %1322

1279:                                             ; preds = %1267
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %1280

1280:                                             ; preds = %1318, %1279
  %1281 = load i32, ptr %35, align 4, !tbaa !9
  %1282 = load i32, ptr %8, align 4, !tbaa !9
  %1283 = add nsw i32 %1282, 1
  %1284 = icmp slt i32 %1281, %1283
  br i1 %1284, label %1285, label %1321

1285:                                             ; preds = %1280
  %1286 = load i32, ptr %34, align 4, !tbaa !9
  %1287 = load ptr, ptr %14, align 8, !tbaa !5
  %1288 = load i32, ptr %33, align 4, !tbaa !9
  %1289 = sext i32 %1288 to i64
  %1290 = getelementptr inbounds ptr, ptr %1287, i64 %1289
  %1291 = load ptr, ptr %1290, align 8, !tbaa !5
  %1292 = load i32, ptr %32, align 4, !tbaa !9
  %1293 = load i32, ptr %35, align 4, !tbaa !9
  %1294 = sub nsw i32 %1292, %1293
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds i8, ptr %1291, i64 %1295
  %1297 = load i8, ptr %1296, align 1, !tbaa !15
  %1298 = zext i8 %1297 to i32
  %1299 = icmp slt i32 %1286, %1298
  br i1 %1299, label %1300, label %1301

1300:                                             ; preds = %1285
  br label %1321

1301:                                             ; preds = %1285
  %1302 = load i32, ptr %34, align 4, !tbaa !9
  %1303 = load ptr, ptr %14, align 8, !tbaa !5
  %1304 = load i32, ptr %33, align 4, !tbaa !9
  %1305 = sext i32 %1304 to i64
  %1306 = getelementptr inbounds ptr, ptr %1303, i64 %1305
  %1307 = load ptr, ptr %1306, align 8, !tbaa !5
  %1308 = load i32, ptr %32, align 4, !tbaa !9
  %1309 = load i32, ptr %35, align 4, !tbaa !9
  %1310 = add nsw i32 %1308, %1309
  %1311 = sext i32 %1310 to i64
  %1312 = getelementptr inbounds i8, ptr %1307, i64 %1311
  %1313 = load i8, ptr %1312, align 1, !tbaa !15
  %1314 = zext i8 %1313 to i32
  %1315 = icmp slt i32 %1302, %1314
  br i1 %1315, label %1316, label %1317

1316:                                             ; preds = %1301
  br label %1321

1317:                                             ; preds = %1301
  br label %1318

1318:                                             ; preds = %1317
  %1319 = load i32, ptr %35, align 4, !tbaa !9
  %1320 = add nsw i32 %1319, 1
  store i32 %1320, ptr %35, align 4, !tbaa !9
  br label %1280, !llvm.loop !34

1321:                                             ; preds = %1316, %1300, %1280
  br label %1369

1322:                                             ; preds = %1267
  store i32 1, ptr %35, align 4, !tbaa !9
  br label %1323

1323:                                             ; preds = %1365, %1322
  %1324 = load i32, ptr %35, align 4, !tbaa !9
  %1325 = load i32, ptr %8, align 4, !tbaa !9
  %1326 = add nsw i32 %1325, 1
  %1327 = icmp slt i32 %1324, %1326
  br i1 %1327, label %1328, label %1368

1328:                                             ; preds = %1323
  %1329 = load i32, ptr %34, align 4, !tbaa !9
  %1330 = load ptr, ptr %14, align 8, !tbaa !5
  %1331 = load i32, ptr %33, align 4, !tbaa !9
  %1332 = load i32, ptr %35, align 4, !tbaa !9
  %1333 = sub nsw i32 %1331, %1332
  %1334 = sext i32 %1333 to i64
  %1335 = getelementptr inbounds ptr, ptr %1330, i64 %1334
  %1336 = load ptr, ptr %1335, align 8, !tbaa !5
  %1337 = load i32, ptr %32, align 4, !tbaa !9
  %1338 = load i32, ptr %35, align 4, !tbaa !9
  %1339 = sub nsw i32 %1337, %1338
  %1340 = sext i32 %1339 to i64
  %1341 = getelementptr inbounds i8, ptr %1336, i64 %1340
  %1342 = load i8, ptr %1341, align 1, !tbaa !15
  %1343 = zext i8 %1342 to i32
  %1344 = icmp slt i32 %1329, %1343
  br i1 %1344, label %1345, label %1346

1345:                                             ; preds = %1328
  br label %1368

1346:                                             ; preds = %1328
  %1347 = load i32, ptr %34, align 4, !tbaa !9
  %1348 = load ptr, ptr %14, align 8, !tbaa !5
  %1349 = load i32, ptr %33, align 4, !tbaa !9
  %1350 = load i32, ptr %35, align 4, !tbaa !9
  %1351 = add nsw i32 %1349, %1350
  %1352 = sext i32 %1351 to i64
  %1353 = getelementptr inbounds ptr, ptr %1348, i64 %1352
  %1354 = load ptr, ptr %1353, align 8, !tbaa !5
  %1355 = load i32, ptr %32, align 4, !tbaa !9
  %1356 = load i32, ptr %35, align 4, !tbaa !9
  %1357 = add nsw i32 %1355, %1356
  %1358 = sext i32 %1357 to i64
  %1359 = getelementptr inbounds i8, ptr %1354, i64 %1358
  %1360 = load i8, ptr %1359, align 1, !tbaa !15
  %1361 = zext i8 %1360 to i32
  %1362 = icmp slt i32 %1347, %1361
  br i1 %1362, label %1363, label %1364

1363:                                             ; preds = %1346
  br label %1368

1364:                                             ; preds = %1346
  br label %1365

1365:                                             ; preds = %1364
  %1366 = load i32, ptr %35, align 4, !tbaa !9
  %1367 = add nsw i32 %1366, 1
  store i32 %1367, ptr %35, align 4, !tbaa !9
  br label %1323, !llvm.loop !35

1368:                                             ; preds = %1363, %1345, %1323
  br label %1369

1369:                                             ; preds = %1368, %1321
  br label %1370

1370:                                             ; preds = %1369, %1266
  br label %1371

1371:                                             ; preds = %1370, %1207
  %1372 = load i32, ptr %35, align 4, !tbaa !9
  %1373 = load i32, ptr %8, align 4, !tbaa !9
  %1374 = add nsw i32 %1373, 1
  %1375 = icmp eq i32 %1372, %1374
  %1376 = zext i1 %1375 to i64
  %1377 = select i1 %1375, i32 255, i32 0
  %1378 = trunc i32 %1377 to i8
  %1379 = load ptr, ptr %15, align 8, !tbaa !5
  %1380 = load i32, ptr %33, align 4, !tbaa !9
  %1381 = sext i32 %1380 to i64
  %1382 = getelementptr inbounds ptr, ptr %1379, i64 %1381
  %1383 = load ptr, ptr %1382, align 8, !tbaa !5
  %1384 = load i32, ptr %32, align 4, !tbaa !9
  %1385 = sext i32 %1384 to i64
  %1386 = getelementptr inbounds i8, ptr %1383, i64 %1385
  store i8 %1378, ptr %1386, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %1387

1387:                                             ; preds = %1371, %1119
  br label %1388

1388:                                             ; preds = %1387, %1134
  %1389 = load i32, ptr %33, align 4, !tbaa !9
  %1390 = add nsw i32 %1389, 1
  store i32 %1390, ptr %33, align 4, !tbaa !9
  br label %1036, !llvm.loop !36

1391:                                             ; preds = %1094
  br label %1392

1392:                                             ; preds = %1391
  %1393 = load i32, ptr %32, align 4, !tbaa !9
  %1394 = add nsw i32 %1393, 1
  store i32 %1394, ptr %32, align 4, !tbaa !9
  br label %1029, !llvm.loop !37

1395:                                             ; preds = %1033
  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 %1396

1396:                                             ; preds = %1395
  %1397 = load i32, ptr %16, align 4, !tbaa !9
  %1398 = load i32, ptr %8, align 4, !tbaa !9
  %1399 = sub nsw i32 16, %1398
  %1400 = load i32, ptr %8, align 4, !tbaa !9
  %1401 = sub nsw i32 %1399, %1400
  %1402 = add nsw i32 %1397, %1401
  store i32 %1402, ptr %16, align 4, !tbaa !9
  br label %154, !llvm.loop !38

1403:                                             ; preds = %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %1404

1404:                                             ; preds = %1403
  br label %1405

1405:                                             ; preds = %1404
  %1406 = load ptr, ptr %10, align 8, !tbaa !5
  %1407 = load ptr, ptr %7, align 8, !tbaa !5
  %1408 = icmp ne ptr %1406, %1407
  br i1 %1408, label %1409, label %1420

1409:                                             ; preds = %1405
  br label %1410

1410:                                             ; preds = %1409
  call void @llvm.lifetime.start.p0(i64 56, ptr %36) #4
  %1411 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %36, ptr align 8 %1411, i64 56, i1 false), !tbaa.struct !39
  %1412 = load ptr, ptr %6, align 8, !tbaa !5
  %1413 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1412, ptr align 8 %1413, i64 56, i1 false), !tbaa.struct !39
  %1414 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1414, ptr align 8 %36, i64 56, i1 false), !tbaa.struct !39
  %1415 = load ptr, ptr %6, align 8, !tbaa !5
  %1416 = load ptr, ptr %7, align 8, !tbaa !5
  call void @HandleExchange(ptr noundef %1415, ptr noundef %1416)
  call void @llvm.lifetime.end.p0(i64 56, ptr %36) #4
  br label %1417

1417:                                             ; preds = %1410
  br label %1418

1418:                                             ; preds = %1417
  %1419 = load ptr, ptr %7, align 8, !tbaa !5
  call void @mImageRelease(ptr noundef %1419)
  br label %1420

1420:                                             ; preds = %1418, %1405
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

declare void @mImageRelease(ptr noundef) local_unnamed_addr #1

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

7:                                                ; preds = %4
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str, i32 noundef 297, ptr noundef nonnull @__FUNCTION__.mImageGradientSuppression, ptr noundef nonnull @.str.1) #5
  br label %8

8:                                                ; preds = %7, %4
  tail call void @mImageExpand(ptr noundef %0, i32 noundef %3, i32 noundef 3) #5
  tail call void @mImageExpand(ptr noundef %1, i32 noundef %3, i32 noundef 3) #5
  %magicptr = ptrtoint ptr %2 to i64
  switch i64 %magicptr, label %9 [
    i64 -1, label %11
    i64 0, label %11
  ]

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

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

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

23:                                               ; preds = %17, %11
  %.0396 = phi ptr [ %16, %11 ], [ %2, %17 ]
  %24 = getelementptr inbounds i8, ptr %0, i64 16
  %25 = load ptr, ptr %24, align 8, !tbaa !12
  %26 = getelementptr inbounds i8, ptr %1, i64 16
  %27 = load ptr, ptr %26, align 8, !tbaa !12
  %28 = getelementptr inbounds i8, ptr %.0396, i64 16
  %29 = load ptr, ptr %28, align 8, !tbaa !12
  %30 = getelementptr inbounds i8, ptr %1, i64 48
  %31 = load ptr, ptr %30, align 8, !tbaa !13
  %32 = icmp eq ptr %31, null
  br i1 %32, label %39, label %33

33:                                               ; preds = %23
  %34 = getelementptr inbounds i8, ptr %31, i64 8
  %35 = load ptr, ptr %34, align 8, !tbaa !14
  %36 = getelementptr inbounds i8, ptr %35, i64 4
  %37 = load i16, ptr %36, align 2, !tbaa !15
  %38 = sext i16 %37 to i32
  br label %39

39:                                               ; preds = %23, %33
  %40 = phi i32 [ %38, %33 ], [ 0, %23 ]
  %41 = getelementptr inbounds i8, ptr %1, i64 4
  %42 = getelementptr inbounds i8, ptr %1, i64 8
  %43 = shl i32 %3, 1
  %.not480522 = icmp slt i32 %3, 1
  %44 = add i32 %3, 1
  %wide.trip.count = zext i32 %44 to i64
  %wide.trip.count646 = zext i32 %44 to i64
  %wide.trip.count651 = zext i32 %44 to i64
  %wide.trip.count656 = zext i32 %44 to i64
  %wide.trip.count669 = zext i32 %44 to i64
  %wide.trip.count674 = zext i32 %44 to i64
  %wide.trip.count679 = zext i32 %44 to i64
  %wide.trip.count684 = zext i32 %44 to i64
  %wide.trip.count697 = zext i32 %44 to i64
  %wide.trip.count702 = zext i32 %44 to i64
  %wide.trip.count707 = zext i32 %44 to i64
  %wide.trip.count712 = zext i32 %44 to i64
  br label %45

45:                                               ; preds = %._crit_edge, %39
  %46 = phi ptr [ %31, %39 ], [ %315, %._crit_edge ]
  %47 = phi ptr [ %31, %39 ], [ %316, %._crit_edge ]
  %48 = phi ptr [ %31, %39 ], [ %317, %._crit_edge ]
  %49 = phi ptr [ %31, %39 ], [ %318, %._crit_edge ]
  %.0404 = phi i32 [ %40, %39 ], [ %222, %._crit_edge ]
  %50 = sext i32 %.0404 to i64
  %51 = sext i32 %.0404 to i64
  %52 = icmp eq ptr %49, null
  br i1 %52, label %53, label %.thread728

53:                                               ; preds = %45
  %54 = load i32, ptr %41, align 4, !tbaa !5
  %55 = icmp slt i32 %.0404, %54
  br i1 %55, label %62, label %422

.thread728:                                       ; preds = %45
  %56 = getelementptr inbounds i8, ptr %49, i64 8
  %57 = load ptr, ptr %56, align 8, !tbaa !14
  %58 = getelementptr inbounds i8, ptr %57, i64 6
  %59 = load i16, ptr %58, align 2, !tbaa !15
  %60 = sext i16 %59 to i32
  %61 = icmp slt i32 %.0404, %60
  br i1 %61, label %.preheader520, label %422

62:                                               ; preds = %53
  %63 = load i32, ptr %42, align 8, !tbaa !11
  br label %.loopexit521

.preheader520:                                    ; preds = %.thread728
  %64 = load i32, ptr %42, align 8, !tbaa !11
  %reass.sub = sub i32 %.0404, %43
  %65 = add i32 %reass.sub, 16
  %66 = getelementptr inbounds i8, ptr %49, i64 8
  %67 = load ptr, ptr %66, align 8, !tbaa !14
  %68 = getelementptr inbounds i8, ptr %67, i64 6
  %69 = load i16, ptr %68, align 2, !tbaa !15
  %70 = sext i16 %69 to i32
  %spec.select839 = tail call i32 @llvm.smin.i32(i32 %65, i32 %70)
  %71 = sext i32 %spec.select839 to i64
  %72 = icmp slt i32 %.0404, %spec.select839
  br i1 %72, label %.lr.ph902, label %.loopexit521

.lr.ph902:                                        ; preds = %.preheader520
  %73 = sub nsw i64 %71, %50
  %min.iters.check = icmp ult i64 %73, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph902
  %n.vec = and i64 %73, -8
  %ind.end = add nsw i64 %n.vec, %51
  %minmax.ident.splatinsert = insertelement <4 x i32> poison, i32 %64, i64 0
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %minmax.ident.splatinsert911 = insertelement <4 x i32> poison, i32 %64, i64 0
  %minmax.ident.splat912 = shufflevector <4 x i32> %minmax.ident.splatinsert911, <4 x i32> poison, <4 x i32> zeroinitializer
  %invariant.gep1008 = getelementptr i8, ptr %67, i64 8
  %invariant.gep1010 = getelementptr i8, ptr %67, i64 24
  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> [ %minmax.ident.splat, %vector.ph ], [ %78, %vector.body ]
  %vec.phi906 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph ], [ %79, %vector.body ]
  %vec.phi907 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %86, %vector.body ]
  %vec.phi908 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %87, %vector.body ]
  %vec.phi909 = phi <4 x i32> [ %minmax.ident.splat912, %vector.ph ], [ %84, %vector.body ]
  %vec.phi910 = phi <4 x i32> [ %minmax.ident.splat912, %vector.ph ], [ %85, %vector.body ]
  %vec.phi913 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %80, %vector.body ]
  %vec.phi914 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %81, %vector.body ]
  %offset.idx = add i64 %index, %51
  %74 = shl i64 %offset.idx, 2
  %75 = shl i64 %offset.idx, 2
  %gep1009 = getelementptr i8, ptr %invariant.gep1008, i64 %74
  %gep1011 = getelementptr i8, ptr %invariant.gep1010, i64 %75
  %wide.vec = load <8 x i16>, ptr %gep1009, align 2, !tbaa !15
  %wide.vec915 = load <8 x i16>, ptr %gep1011, align 2, !tbaa !15
  %strided.vec = shufflevector <8 x i16> %wide.vec, <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec916 = shufflevector <8 x i16> %wide.vec915, <8 x i16> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec917 = shufflevector <8 x i16> %wide.vec, <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %strided.vec918 = shufflevector <8 x i16> %wide.vec915, <8 x i16> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
  %76 = sext <4 x i16> %strided.vec to <4 x i32>
  %77 = sext <4 x i16> %strided.vec916 to <4 x i32>
  %78 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi, <4 x i32> %76)
  %79 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi906, <4 x i32> %77)
  %80 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi913, <4 x i32> %76)
  %81 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi914, <4 x i32> %77)
  %82 = sext <4 x i16> %strided.vec917 to <4 x i32>
  %83 = sext <4 x i16> %strided.vec918 to <4 x i32>
  %84 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi909, <4 x i32> %82)
  %85 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi910, <4 x i32> %83)
  %86 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi907, <4 x i32> %82)
  %87 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %vec.phi908, <4 x i32> %83)
  %index.next = add nuw i64 %index, 8
  %88 = icmp eq i64 %index.next, %n.vec
  br i1 %88, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %vector.body
  %rdx.minmax = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %78, <4 x i32> %79)
  %89 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax)
  %rdx.minmax919 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %86, <4 x i32> %87)
  %90 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax919)
  %rdx.minmax920 = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> %84, <4 x i32> %85)
  %91 = tail call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax920)
  %rdx.minmax921 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %80, <4 x i32> %81)
  %92 = tail call i32 @llvm.vector.reduce.smax.v4i32(<4 x i32> %rdx.minmax921)
  %cmp.n = icmp eq i64 %73, %n.vec
  br i1 %cmp.n, label %.loopexit521, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph902
  %.0412901.ph = phi i32 [ %64, %.lr.ph902 ], [ %89, %middle.block ]
  %.0418900.ph = phi i32 [ 0, %.lr.ph902 ], [ %90, %middle.block ]
  %.0421899.ph = phi i32 [ %64, %.lr.ph902 ], [ %91, %middle.block ]
  %.0424898.ph = phi i32 [ 0, %.lr.ph902 ], [ %92, %middle.block ]
  %indvars.iv897.ph = phi i64 [ %51, %.lr.ph902 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.0412901 = phi i32 [ %spec.select, %scalar.ph ], [ %.0412901.ph, %scalar.ph.preheader ]
  %.0418900 = phi i32 [ %.1419, %scalar.ph ], [ %.0418900.ph, %scalar.ph.preheader ]
  %.0421899 = phi i32 [ %spec.select483, %scalar.ph ], [ %.0421899.ph, %scalar.ph.preheader ]
  %.0424898 = phi i32 [ %.1425, %scalar.ph ], [ %.0424898.ph, %scalar.ph.preheader ]
  %indvars.iv897 = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv897.ph, %scalar.ph.preheader ]
  %.idx = shl i64 %indvars.iv897, 2
  %93 = getelementptr i8, ptr %67, i64 %.idx
  %94 = getelementptr i8, ptr %93, i64 8
  %95 = load i16, ptr %94, align 2, !tbaa !15
  %96 = sext i16 %95 to i32
  %spec.select = tail call i32 @llvm.smin.i32(i32 %.0412901, i32 %96)
  %.1425 = tail call i32 @llvm.smax.i32(i32 %.0424898, i32 %96)
  %97 = getelementptr i8, ptr %93, i64 10
  %98 = load i16, ptr %97, align 2, !tbaa !15
  %99 = sext i16 %98 to i32
  %spec.select483 = tail call i32 @llvm.smin.i32(i32 %.0421899, i32 %99)
  %.1419 = tail call i32 @llvm.smax.i32(i32 %.0418900, i32 %99)
  %indvars.iv.next = add nsw i64 %indvars.iv897, 1
  %100 = icmp slt i64 %indvars.iv.next, %71
  br i1 %100, label %scalar.ph, label %.loopexit521, !llvm.loop !21

.loopexit521:                                     ; preds = %scalar.ph, %.preheader520, %middle.block, %62
  %.2426 = phi i32 [ 0, %62 ], [ 0, %.preheader520 ], [ %92, %middle.block ], [ %.1425, %scalar.ph ]
  %.2423 = phi i32 [ %63, %62 ], [ %64, %.preheader520 ], [ %91, %middle.block ], [ %spec.select483, %scalar.ph ]
  %.2420 = phi i32 [ 0, %62 ], [ 0, %.preheader520 ], [ %90, %middle.block ], [ %.1419, %scalar.ph ]
  %.2414 = phi i32 [ %63, %62 ], [ %64, %.preheader520 ], [ %89, %middle.block ], [ %spec.select, %scalar.ph ]
  %101 = icmp slt i32 %.2414, %.2426
  br i1 %101, label %.preheader517.lr.ph, label %.preheader519

.preheader517.lr.ph:                              ; preds = %.loopexit521
  %reass.sub478 = sub i32 %.0404, %43
  %102 = add i32 %reass.sub478, 16
  %103 = sext i32 %.2414 to i64
  %wide.trip.count664 = zext nneg i32 %.2426 to i64
  %104 = sext i32 %102 to i64
  br label %.preheader517

.preheader519:                                    ; preds = %133, %.loopexit521
  %105 = phi ptr [ %46, %.loopexit521 ], [ %116, %133 ]
  %106 = phi ptr [ %47, %.loopexit521 ], [ %117, %133 ]
  %107 = phi ptr [ %48, %.loopexit521 ], [ %118, %133 ]
  %108 = phi ptr [ %49, %.loopexit521 ], [ %118, %133 ]
  %109 = icmp slt i32 %.2426, %.2423
  br i1 %109, label %.preheader516.lr.ph, label %.preheader518

.preheader516.lr.ph:                              ; preds = %.preheader519
  %reass.sub473 = sub i32 %.0404, %43
  %110 = add i32 %reass.sub473, 16
  %111 = zext nneg i32 %.2426 to i64
  %wide.trip.count692 = sext i32 %.2423 to i64
  br label %.preheader516

.preheader517:                                    ; preds = %.preheader517.lr.ph, %133
  %112 = phi ptr [ %46, %.preheader517.lr.ph ], [ %116, %133 ]
  %113 = phi ptr [ %47, %.preheader517.lr.ph ], [ %117, %133 ]
  %114 = phi ptr [ %48, %.preheader517.lr.ph ], [ %118, %133 ]
  %indvars.iv661 = phi i64 [ %103, %.preheader517.lr.ph ], [ %indvars.iv.next662, %133 ]
  br label %115

115:                                              ; preds = %.preheader517, %216
  %116 = phi ptr [ %112, %.preheader517 ], [ %.pre, %216 ]
  %117 = phi ptr [ %113, %.preheader517 ], [ %.pre, %216 ]
  %118 = phi ptr [ %114, %.preheader517 ], [ %.pre, %216 ]
  %indvars.iv658 = phi i64 [ %51, %.preheader517 ], [ %indvars.iv.next659, %216 ]
  %119 = icmp eq ptr %118, null
  br i1 %119, label %120, label %.thread

120:                                              ; preds = %115
  %121 = load i32, ptr %41, align 4, !tbaa !5
  %122 = icmp slt i32 %102, %121
  br i1 %122, label %.thread730, label %.thread485

.thread:                                          ; preds = %115
  %123 = getelementptr inbounds i8, ptr %118, i64 8
  %124 = load ptr, ptr %123, align 8, !tbaa !14
  %125 = getelementptr inbounds i8, ptr %124, i64 6
  %126 = load i16, ptr %125, align 2, !tbaa !15
  %127 = sext i16 %126 to i32
  %spec.select840 = tail call i32 @llvm.smin.i32(i32 %102, i32 %127)
  %128 = sext i32 %spec.select840 to i64
  %129 = icmp slt i64 %indvars.iv658, %128
  br i1 %129, label %134, label %133

.thread730:                                       ; preds = %120
  %130 = icmp slt i64 %indvars.iv658, %104
  br i1 %130, label %.thread486, label %133

.thread485:                                       ; preds = %120
  %131 = sext i32 %121 to i64
  %132 = icmp slt i64 %indvars.iv658, %131
  br i1 %132, label %.thread486, label %133

133:                                              ; preds = %.thread730, %.thread485, %.thread
  %indvars.iv.next662 = add nsw i64 %indvars.iv661, 1
  %exitcond665.not = icmp eq i64 %indvars.iv.next662, %wide.trip.count664
  br i1 %exitcond665.not, label %.preheader519, label %.preheader517, !llvm.loop !22

134:                                              ; preds = %.thread
  br i1 %119, label %.thread486, label %135

135:                                              ; preds = %134
  %136 = getelementptr inbounds i8, ptr %118, i64 8
  %137 = load ptr, ptr %136, align 8, !tbaa !14
  %.idx727 = shl i64 %indvars.iv658, 2
  %138 = getelementptr i8, ptr %137, i64 %.idx727
  %139 = getelementptr i8, ptr %138, i64 8
  %140 = load i16, ptr %139, align 2, !tbaa !15
  %141 = sext i16 %140 to i64
  br label %.thread486

.thread486:                                       ; preds = %.thread730, %.thread485, %134, %135
  %142 = phi i64 [ %141, %135 ], [ 0, %134 ], [ 0, %.thread485 ], [ 0, %.thread730 ]
  %143 = icmp sgt i64 %indvars.iv661, %142
  br i1 %143, label %144, label %216

144:                                              ; preds = %.thread486
  %145 = getelementptr inbounds ptr, ptr %25, i64 %indvars.iv658
  %146 = load ptr, ptr %145, align 8, !tbaa !12
  %147 = getelementptr inbounds i8, ptr %146, i64 %indvars.iv661
  %148 = load i8, ptr %147, align 1, !tbaa !14
  %149 = icmp eq i8 %148, 0
  br i1 %149, label %.sink.split, label %150

150:                                              ; preds = %144
  %151 = getelementptr inbounds ptr, ptr %27, i64 %indvars.iv658
  %152 = load ptr, ptr %151, align 8, !tbaa !12
  %153 = getelementptr inbounds i8, ptr %152, i64 %indvars.iv661
  %154 = load i8, ptr %153, align 1, !tbaa !14
  switch i8 %148, label %.preheader507 [
    i8 1, label %.preheader509
    i8 2, label %.preheader511
    i8 3, label %.preheader513
  ]

.preheader513:                                    ; preds = %150
  br i1 %.not480522, label %.loopexit508, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader513
  %invariant.gep = getelementptr i8, ptr %152, i64 %indvars.iv661
  br label %.lr.ph

.preheader511:                                    ; preds = %150
  br i1 %.not480522, label %.loopexit508, label %.lr.ph530.preheader

.lr.ph530.preheader:                              ; preds = %.preheader511
  %invariant.gep767 = getelementptr ptr, ptr %27, i64 %indvars.iv658
  br label %.lr.ph530

.preheader509:                                    ; preds = %150
  br i1 %.not480522, label %.loopexit508, label %.lr.ph538.preheader

.lr.ph538.preheader:                              ; preds = %.preheader509
  %invariant.gep774 = getelementptr ptr, ptr %27, i64 %indvars.iv658
  br label %.lr.ph538

.preheader507:                                    ; preds = %150
  br i1 %.not480522, label %.loopexit508, label %.lr.ph546.preheader

.lr.ph546.preheader:                              ; preds = %.preheader507
  %invariant.gep781 = getelementptr ptr, ptr %27, i64 %indvars.iv658
  br label %.lr.ph546

.lr.ph538:                                        ; preds = %.lr.ph538.preheader, %166
  %indvars.iv648 = phi i64 [ 1, %.lr.ph538.preheader ], [ %indvars.iv.next649, %166 ]
  %155 = sub nsw i64 %indvars.iv658, %indvars.iv648
  %156 = getelementptr inbounds ptr, ptr %27, i64 %155
  %157 = load ptr, ptr %156, align 8, !tbaa !12
  %158 = getelementptr inbounds i8, ptr %157, i64 %indvars.iv661
  %159 = load i8, ptr %158, align 1, !tbaa !14
  %160 = icmp ult i8 %154, %159
  br i1 %160, label %.loopexit508.loopexit746.split.loop.exit769, label %161

161:                                              ; preds = %.lr.ph538
  %gep775 = getelementptr ptr, ptr %invariant.gep774, i64 %indvars.iv648
  %162 = load ptr, ptr %gep775, align 8, !tbaa !12
  %163 = getelementptr inbounds i8, ptr %162, i64 %indvars.iv661
  %164 = load i8, ptr %163, align 1, !tbaa !14
  %165 = icmp ult i8 %154, %164
  br i1 %165, label %.loopexit508.loopexit746.split.loop.exit771, label %166

166:                                              ; preds = %161
  %indvars.iv.next649 = add nuw nsw i64 %indvars.iv648, 1
  %exitcond652.not = icmp eq i64 %indvars.iv.next649, %wide.trip.count651
  br i1 %exitcond652.not, label %.loopexit508, label %.lr.ph538, !llvm.loop !23

.lr.ph530:                                        ; preds = %.lr.ph530.preheader, %180
  %indvars.iv643 = phi i64 [ 1, %.lr.ph530.preheader ], [ %indvars.iv.next644, %180 ]
  %167 = sub nsw i64 %indvars.iv658, %indvars.iv643
  %168 = getelementptr inbounds ptr, ptr %27, i64 %167
  %169 = load ptr, ptr %168, align 8, !tbaa !12
  %170 = getelementptr i8, ptr %169, i64 %indvars.iv643
  %171 = getelementptr i8, ptr %170, i64 %indvars.iv661
  %172 = load i8, ptr %171, align 1, !tbaa !14
  %173 = icmp ult i8 %154, %172
  br i1 %173, label %.loopexit508.loopexit748.split.loop.exit762, label %174

174:                                              ; preds = %.lr.ph530
  %gep768 = getelementptr ptr, ptr %invariant.gep767, i64 %indvars.iv643
  %175 = load ptr, ptr %gep768, align 8, !tbaa !12
  %176 = sub nsw i64 %indvars.iv661, %indvars.iv643
  %177 = getelementptr inbounds i8, ptr %175, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !14
  %179 = icmp ult i8 %154, %178
  br i1 %179, label %.loopexit508.loopexit748.split.loop.exit, label %180

180:                                              ; preds = %174
  %indvars.iv.next644 = add nuw nsw i64 %indvars.iv643, 1
  %exitcond647.not = icmp eq i64 %indvars.iv.next644, %wide.trip.count646
  br i1 %exitcond647.not, label %.loopexit508, label %.lr.ph530, !llvm.loop !24

.lr.ph:                                           ; preds = %.lr.ph.preheader, %188
  %indvars.iv640 = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next641, %188 ]
  %181 = sub nsw i64 %indvars.iv661, %indvars.iv640
  %182 = getelementptr inbounds i8, ptr %152, i64 %181
  %183 = load i8, ptr %182, align 1, !tbaa !14
  %184 = icmp ult i8 %154, %183
  br i1 %184, label %.loopexit508.loopexit750.split.loop.exit757, label %185

185:                                              ; preds = %.lr.ph
  %gep = getelementptr i8, ptr %invariant.gep, i64 %indvars.iv640
  %186 = load i8, ptr %gep, align 1, !tbaa !14
  %187 = icmp ult i8 %154, %186
  br i1 %187, label %.loopexit508.loopexit750.split.loop.exit759, label %188

188:                                              ; preds = %185
  %indvars.iv.next641 = add nuw nsw i64 %indvars.iv640, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next641, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit508, label %.lr.ph, !llvm.loop !25

.lr.ph546:                                        ; preds = %.lr.ph546.preheader, %202
  %indvars.iv653 = phi i64 [ 1, %.lr.ph546.preheader ], [ %indvars.iv.next654, %202 ]
  %189 = sub nsw i64 %indvars.iv658, %indvars.iv653
  %190 = getelementptr inbounds ptr, ptr %27, i64 %189
  %191 = load ptr, ptr %190, align 8, !tbaa !12
  %192 = sub nsw i64 %indvars.iv661, %indvars.iv653
  %193 = getelementptr inbounds i8, ptr %191, i64 %192
  %194 = load i8, ptr %193, align 1, !tbaa !14
  %195 = icmp ult i8 %154, %194
  br i1 %195, label %.loopexit508.loopexit.split.loop.exit776, label %196

196:                                              ; preds = %.lr.ph546
  %gep782 = getelementptr ptr, ptr %invariant.gep781, i64 %indvars.iv653
  %197 = load ptr, ptr %gep782, align 8, !tbaa !12
  %198 = getelementptr i8, ptr %197, i64 %indvars.iv653
  %199 = getelementptr i8, ptr %198, i64 %indvars.iv661
  %200 = load i8, ptr %199, align 1, !tbaa !14
  %201 = icmp ult i8 %154, %200
  br i1 %201, label %.loopexit508.loopexit.split.loop.exit778, label %202

202:                                              ; preds = %196
  %indvars.iv.next654 = add nuw nsw i64 %indvars.iv653, 1
  %exitcond657.not = icmp eq i64 %indvars.iv.next654, %wide.trip.count656
  br i1 %exitcond657.not, label %.loopexit508, label %.lr.ph546, !llvm.loop !26

.loopexit508.loopexit.split.loop.exit776:         ; preds = %.lr.ph546
  %203 = trunc nuw nsw i64 %indvars.iv653 to i32
  br label %.loopexit508

.loopexit508.loopexit.split.loop.exit778:         ; preds = %196
  %204 = trunc nuw nsw i64 %indvars.iv653 to i32
  br label %.loopexit508

.loopexit508.loopexit746.split.loop.exit769:      ; preds = %.lr.ph538
  %205 = trunc nuw nsw i64 %indvars.iv648 to i32
  br label %.loopexit508

.loopexit508.loopexit746.split.loop.exit771:      ; preds = %161
  %206 = trunc nuw nsw i64 %indvars.iv648 to i32
  br label %.loopexit508

.loopexit508.loopexit748.split.loop.exit:         ; preds = %174
  %207 = trunc nuw nsw i64 %indvars.iv643 to i32
  br label %.loopexit508

.loopexit508.loopexit748.split.loop.exit762:      ; preds = %.lr.ph530
  %208 = trunc nuw nsw i64 %indvars.iv643 to i32
  br label %.loopexit508

.loopexit508.loopexit750.split.loop.exit757:      ; preds = %.lr.ph
  %209 = trunc nuw nsw i64 %indvars.iv640 to i32
  br label %.loopexit508

.loopexit508.loopexit750.split.loop.exit759:      ; preds = %185
  %210 = trunc nuw nsw i64 %indvars.iv640 to i32
  br label %.loopexit508

.loopexit508:                                     ; preds = %188, %180, %166, %202, %.loopexit508.loopexit750.split.loop.exit757, %.loopexit508.loopexit750.split.loop.exit759, %.loopexit508.loopexit748.split.loop.exit, %.loopexit508.loopexit748.split.loop.exit762, %.loopexit508.loopexit746.split.loop.exit769, %.loopexit508.loopexit746.split.loop.exit771, %.loopexit508.loopexit.split.loop.exit776, %.loopexit508.loopexit.split.loop.exit778, %.preheader513, %.preheader511, %.preheader509, %.preheader507
  %.4411 = phi i32 [ 1, %.preheader507 ], [ 1, %.preheader509 ], [ 1, %.preheader511 ], [ 1, %.preheader513 ], [ %203, %.loopexit508.loopexit.split.loop.exit776 ], [ %204, %.loopexit508.loopexit.split.loop.exit778 ], [ %205, %.loopexit508.loopexit746.split.loop.exit769 ], [ %206, %.loopexit508.loopexit746.split.loop.exit771 ], [ %207, %.loopexit508.loopexit748.split.loop.exit ], [ %208, %.loopexit508.loopexit748.split.loop.exit762 ], [ %209, %.loopexit508.loopexit750.split.loop.exit757 ], [ %210, %.loopexit508.loopexit750.split.loop.exit759 ], [ %44, %202 ], [ %44, %166 ], [ %44, %180 ], [ %44, %188 ]
  %211 = icmp eq i32 %.4411, %44
  %212 = sext i1 %211 to i8
  br label %.sink.split

.sink.split:                                      ; preds = %144, %.loopexit508
  %.sink = phi i8 [ %212, %.loopexit508 ], [ 0, %144 ]
  %213 = getelementptr inbounds ptr, ptr %29, i64 %indvars.iv658
  %214 = load ptr, ptr %213, align 8, !tbaa !12
  %215 = getelementptr inbounds i8, ptr %214, i64 %indvars.iv661
  store i8 %.sink, ptr %215, align 1, !tbaa !14
  br label %216

216:                                              ; preds = %.sink.split, %.thread486
  %indvars.iv.next659 = add nsw i64 %indvars.iv658, 1
  %.pre = load ptr, ptr %30, align 8, !tbaa !13
  br label %115, !llvm.loop !27

.preheader518:                                    ; preds = %240, %.preheader519
  %217 = phi ptr [ %105, %.preheader519 ], [ %228, %240 ]
  %218 = phi ptr [ %106, %.preheader519 ], [ %229, %240 ]
  %219 = phi ptr [ %107, %.preheader519 ], [ %229, %240 ]
  %220 = phi ptr [ %108, %.preheader519 ], [ %229, %240 ]
  %221 = icmp slt i32 %.2423, %.2420
  %reass.sub468 = sub i32 %.0404, %43
  %222 = add i32 %reass.sub468, 16
  br i1 %221, label %.preheader515.lr.ph, label %._crit_edge

.preheader515.lr.ph:                              ; preds = %.preheader518
  %223 = sext i32 %.2423 to i64
  %wide.trip.count720 = zext nneg i32 %.2420 to i64
  %224 = sext i32 %222 to i64
  br label %.preheader515

.preheader516:                                    ; preds = %.preheader516.lr.ph, %240
  %225 = phi ptr [ %105, %.preheader516.lr.ph ], [ %228, %240 ]
  %226 = phi ptr [ %106, %.preheader516.lr.ph ], [ %229, %240 ]
  %indvars.iv689 = phi i64 [ %111, %.preheader516.lr.ph ], [ %indvars.iv.next690, %240 ]
  br label %227

227:                                              ; preds = %.preheader516, %310
  %228 = phi ptr [ %225, %.preheader516 ], [ %.pre722, %310 ]
  %229 = phi ptr [ %226, %.preheader516 ], [ %.pre722, %310 ]
  %indvars.iv686 = phi i64 [ %51, %.preheader516 ], [ %indvars.iv.next687, %310 ]
  %230 = icmp eq ptr %229, null
  br i1 %230, label %231, label %.thread487

231:                                              ; preds = %227
  %232 = load i32, ptr %41, align 4, !tbaa !5
  br label %.thread488

.thread487:                                       ; preds = %227
  %233 = getelementptr inbounds i8, ptr %229, i64 8
  %234 = load ptr, ptr %233, align 8, !tbaa !14
  %235 = getelementptr inbounds i8, ptr %234, i64 6
  %236 = load i16, ptr %235, align 2, !tbaa !15
  %237 = sext i16 %236 to i32
  br label %.thread488

.thread488:                                       ; preds = %.thread487, %231
  %.sink858 = phi i32 [ %237, %.thread487 ], [ %232, %231 ]
  %spec.select845 = tail call i32 @llvm.smin.i32(i32 %110, i32 %.sink858)
  %238 = sext i32 %spec.select845 to i64
  %239 = icmp slt i64 %indvars.iv686, %238
  br i1 %239, label %241, label %240

240:                                              ; preds = %.thread488
  %indvars.iv.next690 = add nuw nsw i64 %indvars.iv689, 1
  %exitcond693.not = icmp eq i64 %indvars.iv.next690, %wide.trip.count692
  br i1 %exitcond693.not, label %.preheader518, label %.preheader516, !llvm.loop !28

241:                                              ; preds = %.thread488
  %242 = getelementptr inbounds ptr, ptr %25, i64 %indvars.iv686
  %243 = load ptr, ptr %242, align 8, !tbaa !12
  %244 = getelementptr inbounds i8, ptr %243, i64 %indvars.iv689
  %245 = load i8, ptr %244, align 1, !tbaa !14
  %246 = icmp eq i8 %245, 0
  br i1 %246, label %310, label %247

247:                                              ; preds = %241
  %248 = getelementptr inbounds ptr, ptr %27, i64 %indvars.iv686
  %249 = load ptr, ptr %248, align 8, !tbaa !12
  %250 = getelementptr inbounds i8, ptr %249, i64 %indvars.iv689
  %251 = load i8, ptr %250, align 1, !tbaa !14
  switch i8 %245, label %.preheader499 [
    i8 1, label %.preheader501
    i8 2, label %.preheader503
    i8 3, label %.preheader505
  ]

.preheader505:                                    ; preds = %247
  br i1 %.not480522, label %.loopexit500, label %.lr.ph555.preheader

.lr.ph555.preheader:                              ; preds = %.preheader505
  %invariant.gep788 = getelementptr inbounds i8, ptr %249, i64 %indvars.iv689
  br label %.lr.ph555

.preheader503:                                    ; preds = %247
  br i1 %.not480522, label %.loopexit500, label %.lr.ph563.preheader

.lr.ph563.preheader:                              ; preds = %.preheader503
  %invariant.gep795 = getelementptr ptr, ptr %27, i64 %indvars.iv686
  br label %.lr.ph563

.preheader501:                                    ; preds = %247
  br i1 %.not480522, label %.loopexit500, label %.lr.ph571.preheader

.lr.ph571.preheader:                              ; preds = %.preheader501
  %invariant.gep802 = getelementptr ptr, ptr %27, i64 %indvars.iv686
  br label %.lr.ph571

.preheader499:                                    ; preds = %247
  br i1 %.not480522, label %.loopexit500, label %.lr.ph579.preheader

.lr.ph579.preheader:                              ; preds = %.preheader499
  %invariant.gep809 = getelementptr ptr, ptr %27, i64 %indvars.iv686
  br label %.lr.ph579

.lr.ph571:                                        ; preds = %.lr.ph571.preheader, %263
  %indvars.iv676 = phi i64 [ 1, %.lr.ph571.preheader ], [ %indvars.iv.next677, %263 ]
  %252 = sub nsw i64 %indvars.iv686, %indvars.iv676
  %253 = getelementptr inbounds ptr, ptr %27, i64 %252
  %254 = load ptr, ptr %253, align 8, !tbaa !12
  %255 = getelementptr inbounds i8, ptr %254, i64 %indvars.iv689
  %256 = load i8, ptr %255, align 1, !tbaa !14
  %257 = icmp ult i8 %251, %256
  br i1 %257, label %.loopexit500.loopexit740.split.loop.exit797, label %258

258:                                              ; preds = %.lr.ph571
  %gep803 = getelementptr ptr, ptr %invariant.gep802, i64 %indvars.iv676
  %259 = load ptr, ptr %gep803, align 8, !tbaa !12
  %260 = getelementptr inbounds i8, ptr %259, i64 %indvars.iv689
  %261 = load i8, ptr %260, align 1, !tbaa !14
  %262 = icmp ult i8 %251, %261
  br i1 %262, label %.loopexit500.loopexit740.split.loop.exit799, label %263

263:                                              ; preds = %258
  %indvars.iv.next677 = add nuw nsw i64 %indvars.iv676, 1
  %exitcond680.not = icmp eq i64 %indvars.iv.next677, %wide.trip.count679
  br i1 %exitcond680.not, label %.loopexit500, label %.lr.ph571, !llvm.loop !29

.lr.ph563:                                        ; preds = %.lr.ph563.preheader, %277
  %indvars.iv671 = phi i64 [ 1, %.lr.ph563.preheader ], [ %indvars.iv.next672, %277 ]
  %264 = sub nsw i64 %indvars.iv686, %indvars.iv671
  %265 = getelementptr inbounds ptr, ptr %27, i64 %264
  %266 = load ptr, ptr %265, align 8, !tbaa !12
  %267 = getelementptr inbounds i8, ptr %266, i64 %indvars.iv671
  %268 = getelementptr inbounds i8, ptr %267, i64 %indvars.iv689
  %269 = load i8, ptr %268, align 1, !tbaa !14
  %270 = icmp ult i8 %251, %269
  br i1 %270, label %.loopexit500.loopexit742.split.loop.exit790, label %271

271:                                              ; preds = %.lr.ph563
  %gep796 = getelementptr ptr, ptr %invariant.gep795, i64 %indvars.iv671
  %272 = load ptr, ptr %gep796, align 8, !tbaa !12
  %273 = sub nsw i64 %indvars.iv689, %indvars.iv671
  %274 = getelementptr inbounds i8, ptr %272, i64 %273
  %275 = load i8, ptr %274, align 1, !tbaa !14
  %276 = icmp ult i8 %251, %275
  br i1 %276, label %.loopexit500.loopexit742.split.loop.exit, label %277

277:                                              ; preds = %271
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %exitcond675.not = icmp eq i64 %indvars.iv.next672, %wide.trip.count674
  br i1 %exitcond675.not, label %.loopexit500, label %.lr.ph563, !llvm.loop !30

.lr.ph555:                                        ; preds = %.lr.ph555.preheader, %285
  %indvars.iv666 = phi i64 [ 1, %.lr.ph555.preheader ], [ %indvars.iv.next667, %285 ]
  %278 = sub nsw i64 %indvars.iv689, %indvars.iv666
  %279 = getelementptr inbounds i8, ptr %249, i64 %278
  %280 = load i8, ptr %279, align 1, !tbaa !14
  %281 = icmp ult i8 %251, %280
  br i1 %281, label %.loopexit500.loopexit744.split.loop.exit783, label %282

282:                                              ; preds = %.lr.ph555
  %gep789 = getelementptr inbounds i8, ptr %invariant.gep788, i64 %indvars.iv666
  %283 = load i8, ptr %gep789, align 1, !tbaa !14
  %284 = icmp ult i8 %251, %283
  br i1 %284, label %.loopexit500.loopexit744.split.loop.exit785, label %285

285:                                              ; preds = %282
  %indvars.iv.next667 = add nuw nsw i64 %indvars.iv666, 1
  %exitcond670.not = icmp eq i64 %indvars.iv.next667, %wide.trip.count669
  br i1 %exitcond670.not, label %.loopexit500, label %.lr.ph555, !llvm.loop !31

.lr.ph579:                                        ; preds = %.lr.ph579.preheader, %299
  %indvars.iv681 = phi i64 [ 1, %.lr.ph579.preheader ], [ %indvars.iv.next682, %299 ]
  %286 = sub nsw i64 %indvars.iv686, %indvars.iv681
  %287 = getelementptr inbounds ptr, ptr %27, i64 %286
  %288 = load ptr, ptr %287, align 8, !tbaa !12
  %289 = sub nsw i64 %indvars.iv689, %indvars.iv681
  %290 = getelementptr inbounds i8, ptr %288, i64 %289
  %291 = load i8, ptr %290, align 1, !tbaa !14
  %292 = icmp ult i8 %251, %291
  br i1 %292, label %.loopexit500.loopexit.split.loop.exit804, label %293

293:                                              ; preds = %.lr.ph579
  %gep810 = getelementptr ptr, ptr %invariant.gep809, i64 %indvars.iv681
  %294 = load ptr, ptr %gep810, align 8, !tbaa !12
  %295 = getelementptr inbounds i8, ptr %294, i64 %indvars.iv681
  %296 = getelementptr inbounds i8, ptr %295, i64 %indvars.iv689
  %297 = load i8, ptr %296, align 1, !tbaa !14
  %298 = icmp ult i8 %251, %297
  br i1 %298, label %.loopexit500.loopexit.split.loop.exit806, label %299

299:                                              ; preds = %293
  %indvars.iv.next682 = add nuw nsw i64 %indvars.iv681, 1
  %exitcond685.not = icmp eq i64 %indvars.iv.next682, %wide.trip.count684
  br i1 %exitcond685.not, label %.loopexit500, label %.lr.ph579, !llvm.loop !32

.loopexit500.loopexit.split.loop.exit804:         ; preds = %.lr.ph579
  %300 = trunc nuw nsw i64 %indvars.iv681 to i32
  br label %.loopexit500

.loopexit500.loopexit.split.loop.exit806:         ; preds = %293
  %301 = trunc nuw nsw i64 %indvars.iv681 to i32
  br label %.loopexit500

.loopexit500.loopexit740.split.loop.exit797:      ; preds = %.lr.ph571
  %302 = trunc nuw nsw i64 %indvars.iv676 to i32
  br label %.loopexit500

.loopexit500.loopexit740.split.loop.exit799:      ; preds = %258
  %303 = trunc nuw nsw i64 %indvars.iv676 to i32
  br label %.loopexit500

.loopexit500.loopexit742.split.loop.exit:         ; preds = %271
  %304 = trunc nuw nsw i64 %indvars.iv671 to i32
  br label %.loopexit500

.loopexit500.loopexit742.split.loop.exit790:      ; preds = %.lr.ph563
  %305 = trunc nuw nsw i64 %indvars.iv671 to i32
  br label %.loopexit500

.loopexit500.loopexit744.split.loop.exit783:      ; preds = %.lr.ph555
  %306 = trunc nuw nsw i64 %indvars.iv666 to i32
  br label %.loopexit500

.loopexit500.loopexit744.split.loop.exit785:      ; preds = %282
  %307 = trunc nuw nsw i64 %indvars.iv666 to i32
  br label %.loopexit500

.loopexit500:                                     ; preds = %285, %277, %263, %299, %.loopexit500.loopexit744.split.loop.exit783, %.loopexit500.loopexit744.split.loop.exit785, %.loopexit500.loopexit742.split.loop.exit, %.loopexit500.loopexit742.split.loop.exit790, %.loopexit500.loopexit740.split.loop.exit797, %.loopexit500.loopexit740.split.loop.exit799, %.loopexit500.loopexit.split.loop.exit804, %.loopexit500.loopexit.split.loop.exit806, %.preheader505, %.preheader503, %.preheader501, %.preheader499
  %.4403 = phi i32 [ 1, %.preheader499 ], [ 1, %.preheader501 ], [ 1, %.preheader503 ], [ 1, %.preheader505 ], [ %300, %.loopexit500.loopexit.split.loop.exit804 ], [ %301, %.loopexit500.loopexit.split.loop.exit806 ], [ %302, %.loopexit500.loopexit740.split.loop.exit797 ], [ %303, %.loopexit500.loopexit740.split.loop.exit799 ], [ %304, %.loopexit500.loopexit742.split.loop.exit ], [ %305, %.loopexit500.loopexit742.split.loop.exit790 ], [ %306, %.loopexit500.loopexit744.split.loop.exit783 ], [ %307, %.loopexit500.loopexit744.split.loop.exit785 ], [ %44, %299 ], [ %44, %263 ], [ %44, %277 ], [ %44, %285 ]
  %308 = icmp eq i32 %.4403, %44
  %309 = sext i1 %308 to i8
  br label %310

310:                                              ; preds = %241, %.loopexit500
  %.sink846 = phi i8 [ %309, %.loopexit500 ], [ 0, %241 ]
  %311 = getelementptr inbounds ptr, ptr %29, i64 %indvars.iv686
  %312 = load ptr, ptr %311, align 8, !tbaa !12
  %313 = getelementptr inbounds i8, ptr %312, i64 %indvars.iv689
  store i8 %.sink846, ptr %313, align 1, !tbaa !14
  %indvars.iv.next687 = add nsw i64 %indvars.iv686, 1
  %.pre722 = load ptr, ptr %30, align 8, !tbaa !13
  br label %227, !llvm.loop !33

.preheader515:                                    ; preds = %.preheader515.lr.ph, %335
  %314 = phi ptr [ %217, %.preheader515.lr.ph ], [ %320, %335 ]
  %indvars.iv717 = phi i64 [ %223, %.preheader515.lr.ph ], [ %indvars.iv.next718, %335 ]
  br label %319

._crit_edge:                                      ; preds = %335, %.preheader518
  %315 = phi ptr [ %217, %.preheader518 ], [ %320, %335 ]
  %316 = phi ptr [ %218, %.preheader518 ], [ %320, %335 ]
  %317 = phi ptr [ %219, %.preheader518 ], [ %320, %335 ]
  %318 = phi ptr [ %220, %.preheader518 ], [ %320, %335 ]
  br label %45, !llvm.loop !34

319:                                              ; preds = %.preheader515, %421
  %320 = phi ptr [ %314, %.preheader515 ], [ %.pre723, %421 ]
  %indvars.iv714 = phi i64 [ %51, %.preheader515 ], [ %indvars.iv.next715, %421 ]
  %321 = icmp eq ptr %320, null
  br i1 %321, label %322, label %.thread489

322:                                              ; preds = %319
  %323 = load i32, ptr %41, align 4, !tbaa !5
  %324 = icmp slt i32 %222, %323
  br i1 %324, label %.thread732, label %.thread491

.thread489:                                       ; preds = %319
  %325 = getelementptr inbounds i8, ptr %320, i64 8
  %326 = load ptr, ptr %325, align 8, !tbaa !14
  %327 = getelementptr inbounds i8, ptr %326, i64 6
  %328 = load i16, ptr %327, align 2, !tbaa !15
  %329 = sext i16 %328 to i32
  %spec.select850 = tail call i32 @llvm.smin.i32(i32 %222, i32 %329)
  %330 = sext i32 %spec.select850 to i64
  %331 = icmp slt i64 %indvars.iv714, %330
  br i1 %331, label %336, label %335

.thread732:                                       ; preds = %322
  %332 = icmp slt i64 %indvars.iv714, %224
  br i1 %332, label %.thread492, label %335

.thread491:                                       ; preds = %322
  %333 = sext i32 %323 to i64
  %334 = icmp slt i64 %indvars.iv714, %333
  br i1 %334, label %.thread492, label %335

335:                                              ; preds = %.thread732, %.thread491, %.thread489
  %indvars.iv.next718 = add nsw i64 %indvars.iv717, 1
  %exitcond721.not = icmp eq i64 %indvars.iv.next718, %wide.trip.count720
  br i1 %exitcond721.not, label %._crit_edge, label %.preheader515, !llvm.loop !35

336:                                              ; preds = %.thread489
  br i1 %321, label %.thread492, label %338

.thread492:                                       ; preds = %.thread732, %.thread491, %336
  %337 = load i32, ptr %42, align 8, !tbaa !11
  br label %345

338:                                              ; preds = %336
  %339 = getelementptr inbounds i8, ptr %320, i64 8
  %340 = load ptr, ptr %339, align 8, !tbaa !14
  %.idx726 = shl i64 %indvars.iv714, 2
  %341 = getelementptr i8, ptr %340, i64 %.idx726
  %342 = getelementptr i8, ptr %341, i64 10
  %343 = load i16, ptr %342, align 2, !tbaa !15
  %344 = sext i16 %343 to i32
  br label %345

345:                                              ; preds = %338, %.thread492
  %346 = phi i32 [ %337, %.thread492 ], [ %344, %338 ]
  %347 = sext i32 %346 to i64
  %348 = icmp slt i64 %indvars.iv717, %347
  br i1 %348, label %349, label %421

349:                                              ; preds = %345
  %350 = getelementptr inbounds ptr, ptr %25, i64 %indvars.iv714
  %351 = load ptr, ptr %350, align 8, !tbaa !12
  %352 = getelementptr inbounds i8, ptr %351, i64 %indvars.iv717
  %353 = load i8, ptr %352, align 1, !tbaa !14
  %354 = icmp eq i8 %353, 0
  br i1 %354, label %.sink.split851, label %355

355:                                              ; preds = %349
  %356 = getelementptr inbounds ptr, ptr %27, i64 %indvars.iv714
  %357 = load ptr, ptr %356, align 8, !tbaa !12
  %358 = getelementptr inbounds i8, ptr %357, i64 %indvars.iv717
  %359 = load i8, ptr %358, align 1, !tbaa !14
  switch i8 %353, label %.preheader [
    i8 1, label %.preheader493
    i8 2, label %.preheader495
    i8 3, label %.preheader497
  ]

.preheader497:                                    ; preds = %355
  br i1 %.not480522, label %.loopexit, label %.lr.ph588.preheader

.lr.ph588.preheader:                              ; preds = %.preheader497
  %invariant.gep816 = getelementptr i8, ptr %357, i64 %indvars.iv717
  br label %.lr.ph588

.preheader495:                                    ; preds = %355
  br i1 %.not480522, label %.loopexit, label %.lr.ph596.preheader

.lr.ph596.preheader:                              ; preds = %.preheader495
  %invariant.gep823 = getelementptr ptr, ptr %27, i64 %indvars.iv714
  br label %.lr.ph596

.preheader493:                                    ; preds = %355
  br i1 %.not480522, label %.loopexit, label %.lr.ph604.preheader

.lr.ph604.preheader:                              ; preds = %.preheader493
  %invariant.gep830 = getelementptr ptr, ptr %27, i64 %indvars.iv714
  br label %.lr.ph604

.preheader:                                       ; preds = %355
  br i1 %.not480522, label %.loopexit, label %.lr.ph612.preheader

.lr.ph612.preheader:                              ; preds = %.preheader
  %invariant.gep837 = getelementptr ptr, ptr %27, i64 %indvars.iv714
  br label %.lr.ph612

.lr.ph604:                                        ; preds = %.lr.ph604.preheader, %371
  %indvars.iv704 = phi i64 [ 1, %.lr.ph604.preheader ], [ %indvars.iv.next705, %371 ]
  %360 = sub nsw i64 %indvars.iv714, %indvars.iv704
  %361 = getelementptr inbounds ptr, ptr %27, i64 %360
  %362 = load ptr, ptr %361, align 8, !tbaa !12
  %363 = getelementptr inbounds i8, ptr %362, i64 %indvars.iv717
  %364 = load i8, ptr %363, align 1, !tbaa !14
  %365 = icmp ult i8 %359, %364
  br i1 %365, label %.loopexit.loopexit734.split.loop.exit825, label %366

366:                                              ; preds = %.lr.ph604
  %gep831 = getelementptr ptr, ptr %invariant.gep830, i64 %indvars.iv704
  %367 = load ptr, ptr %gep831, align 8, !tbaa !12
  %368 = getelementptr inbounds i8, ptr %367, i64 %indvars.iv717
  %369 = load i8, ptr %368, align 1, !tbaa !14
  %370 = icmp ult i8 %359, %369
  br i1 %370, label %.loopexit.loopexit734.split.loop.exit827, label %371

371:                                              ; preds = %366
  %indvars.iv.next705 = add nuw nsw i64 %indvars.iv704, 1
  %exitcond708.not = icmp eq i64 %indvars.iv.next705, %wide.trip.count707
  br i1 %exitcond708.not, label %.loopexit, label %.lr.ph604, !llvm.loop !36

.lr.ph596:                                        ; preds = %.lr.ph596.preheader, %385
  %indvars.iv699 = phi i64 [ 1, %.lr.ph596.preheader ], [ %indvars.iv.next700, %385 ]
  %372 = sub nsw i64 %indvars.iv714, %indvars.iv699
  %373 = getelementptr inbounds ptr, ptr %27, i64 %372
  %374 = load ptr, ptr %373, align 8, !tbaa !12
  %375 = getelementptr i8, ptr %374, i64 %indvars.iv699
  %376 = getelementptr i8, ptr %375, i64 %indvars.iv717
  %377 = load i8, ptr %376, align 1, !tbaa !14
  %378 = icmp ult i8 %359, %377
  br i1 %378, label %.loopexit.loopexit736.split.loop.exit818, label %379

379:                                              ; preds = %.lr.ph596
  %gep824 = getelementptr ptr, ptr %invariant.gep823, i64 %indvars.iv699
  %380 = load ptr, ptr %gep824, align 8, !tbaa !12
  %381 = sub nsw i64 %indvars.iv717, %indvars.iv699
  %382 = getelementptr inbounds i8, ptr %380, i64 %381
  %383 = load i8, ptr %382, align 1, !tbaa !14
  %384 = icmp ult i8 %359, %383
  br i1 %384, label %.loopexit.loopexit736.split.loop.exit, label %385

385:                                              ; preds = %379
  %indvars.iv.next700 = add nuw nsw i64 %indvars.iv699, 1
  %exitcond703.not = icmp eq i64 %indvars.iv.next700, %wide.trip.count702
  br i1 %exitcond703.not, label %.loopexit, label %.lr.ph596, !llvm.loop !37

.lr.ph588:                                        ; preds = %.lr.ph588.preheader, %393
  %indvars.iv694 = phi i64 [ 1, %.lr.ph588.preheader ], [ %indvars.iv.next695, %393 ]
  %386 = sub nsw i64 %indvars.iv717, %indvars.iv694
  %387 = getelementptr inbounds i8, ptr %357, i64 %386
  %388 = load i8, ptr %387, align 1, !tbaa !14
  %389 = icmp ult i8 %359, %388
  br i1 %389, label %.loopexit.loopexit738.split.loop.exit811, label %390

390:                                              ; preds = %.lr.ph588
  %gep817 = getelementptr i8, ptr %invariant.gep816, i64 %indvars.iv694
  %391 = load i8, ptr %gep817, align 1, !tbaa !14
  %392 = icmp ult i8 %359, %391
  br i1 %392, label %.loopexit.loopexit738.split.loop.exit813, label %393

393:                                              ; preds = %390
  %indvars.iv.next695 = add nuw nsw i64 %indvars.iv694, 1
  %exitcond698.not = icmp eq i64 %indvars.iv.next695, %wide.trip.count697
  br i1 %exitcond698.not, label %.loopexit, label %.lr.ph588, !llvm.loop !38

.lr.ph612:                                        ; preds = %.lr.ph612.preheader, %407
  %indvars.iv709 = phi i64 [ 1, %.lr.ph612.preheader ], [ %indvars.iv.next710, %407 ]
  %394 = sub nsw i64 %indvars.iv714, %indvars.iv709
  %395 = getelementptr inbounds ptr, ptr %27, i64 %394
  %396 = load ptr, ptr %395, align 8, !tbaa !12
  %397 = sub nsw i64 %indvars.iv717, %indvars.iv709
  %398 = getelementptr inbounds i8, ptr %396, i64 %397
  %399 = load i8, ptr %398, align 1, !tbaa !14
  %400 = icmp ult i8 %359, %399
  br i1 %400, label %.loopexit.loopexit.split.loop.exit832, label %401

401:                                              ; preds = %.lr.ph612
  %gep838 = getelementptr ptr, ptr %invariant.gep837, i64 %indvars.iv709
  %402 = load ptr, ptr %gep838, align 8, !tbaa !12
  %403 = getelementptr i8, ptr %402, i64 %indvars.iv709
  %404 = getelementptr i8, ptr %403, i64 %indvars.iv717
  %405 = load i8, ptr %404, align 1, !tbaa !14
  %406 = icmp ult i8 %359, %405
  br i1 %406, label %.loopexit.loopexit.split.loop.exit834, label %407

407:                                              ; preds = %401
  %indvars.iv.next710 = add nuw nsw i64 %indvars.iv709, 1
  %exitcond713.not = icmp eq i64 %indvars.iv.next710, %wide.trip.count712
  br i1 %exitcond713.not, label %.loopexit, label %.lr.ph612, !llvm.loop !39

.loopexit.loopexit.split.loop.exit832:            ; preds = %.lr.ph612
  %408 = trunc nuw nsw i64 %indvars.iv709 to i32
  br label %.loopexit

.loopexit.loopexit.split.loop.exit834:            ; preds = %401
  %409 = trunc nuw nsw i64 %indvars.iv709 to i32
  br label %.loopexit

.loopexit.loopexit734.split.loop.exit825:         ; preds = %.lr.ph604
  %410 = trunc nuw nsw i64 %indvars.iv704 to i32
  br label %.loopexit

.loopexit.loopexit734.split.loop.exit827:         ; preds = %366
  %411 = trunc nuw nsw i64 %indvars.iv704 to i32
  br label %.loopexit

.loopexit.loopexit736.split.loop.exit:            ; preds = %379
  %412 = trunc nuw nsw i64 %indvars.iv699 to i32
  br label %.loopexit

.loopexit.loopexit736.split.loop.exit818:         ; preds = %.lr.ph596
  %413 = trunc nuw nsw i64 %indvars.iv699 to i32
  br label %.loopexit

.loopexit.loopexit738.split.loop.exit811:         ; preds = %.lr.ph588
  %414 = trunc nuw nsw i64 %indvars.iv694 to i32
  br label %.loopexit

.loopexit.loopexit738.split.loop.exit813:         ; preds = %390
  %415 = trunc nuw nsw i64 %indvars.iv694 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %393, %385, %371, %407, %.loopexit.loopexit738.split.loop.exit811, %.loopexit.loopexit738.split.loop.exit813, %.loopexit.loopexit736.split.loop.exit, %.loopexit.loopexit736.split.loop.exit818, %.loopexit.loopexit734.split.loop.exit825, %.loopexit.loopexit734.split.loop.exit827, %.loopexit.loopexit.split.loop.exit832, %.loopexit.loopexit.split.loop.exit834, %.preheader497, %.preheader495, %.preheader493, %.preheader
  %.4 = phi i32 [ 1, %.preheader ], [ 1, %.preheader493 ], [ 1, %.preheader495 ], [ 1, %.preheader497 ], [ %408, %.loopexit.loopexit.split.loop.exit832 ], [ %409, %.loopexit.loopexit.split.loop.exit834 ], [ %410, %.loopexit.loopexit734.split.loop.exit825 ], [ %411, %.loopexit.loopexit734.split.loop.exit827 ], [ %412, %.loopexit.loopexit736.split.loop.exit ], [ %413, %.loopexit.loopexit736.split.loop.exit818 ], [ %414, %.loopexit.loopexit738.split.loop.exit811 ], [ %415, %.loopexit.loopexit738.split.loop.exit813 ], [ %44, %407 ], [ %44, %371 ], [ %44, %385 ], [ %44, %393 ]
  %416 = icmp eq i32 %.4, %44
  %417 = sext i1 %416 to i8
  br label %.sink.split851

.sink.split851:                                   ; preds = %349, %.loopexit
  %.sink852 = phi i8 [ %417, %.loopexit ], [ 0, %349 ]
  %418 = getelementptr inbounds ptr, ptr %29, i64 %indvars.iv714
  %419 = load ptr, ptr %418, align 8, !tbaa !12
  %420 = getelementptr inbounds i8, ptr %419, i64 %indvars.iv717
  store i8 %.sink852, ptr %420, align 1, !tbaa !14
  br label %421

421:                                              ; preds = %.sink.split851, %345
  %indvars.iv.next715 = add nsw i64 %indvars.iv714, 1
  %.pre723 = load ptr, ptr %30, align 8, !tbaa !13
  br label %319, !llvm.loop !40

422:                                              ; preds = %.thread728, %53
  %.not = icmp eq ptr %.0396, %2
  br i1 %.not, label %424, label %423

423:                                              ; preds = %422
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %5)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %5, ptr noundef nonnull align 8 dereferenceable(56) %1, i64 56, i1 false), !tbaa.struct !41
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %1, ptr noundef nonnull align 8 dereferenceable(56) %.0396, i64 56, i1 false), !tbaa.struct !41
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %.0396, ptr noundef nonnull align 8 dereferenceable(56) %5, i64 56, i1 false), !tbaa.struct !41
  tail call void @HandleExchange(ptr noundef nonnull %1, ptr noundef %.0396) #5
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %5)
  tail call void @mImageRelease(ptr noundef %.0396) #5
  br label %424

424:                                              ; preds = %423, %422
  ret void
}

; 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 <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.smin.v4i32(<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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 4}
!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 8}
!12 = !{!10, !10, i64 0}
!13 = !{!6, !10, i64 48}
!14 = !{!8, !8, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !8, i64 0}
!17 = distinct !{!17, !18, !19, !20}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!"llvm.loop.isvectorized", i32 1}
!20 = !{!"llvm.loop.unroll.runtime.disable"}
!21 = distinct !{!21, !18, !20, !19}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = distinct !{!28, !18}
!29 = distinct !{!29, !18}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = distinct !{!37, !18}
!38 = distinct !{!38, !18}
!39 = distinct !{!39, !18}
!40 = distinct !{!40, !18}
!41 = !{i64 0, i64 4, !42, i64 4, i64 4, !42, i64 8, i64 4, !42, i64 16, i64 32, !14, i64 48, i64 8, !12}
!42 = !{!7, !7, i64 0}


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