; LLVM IR from mobile-algorithm-optimization/guide :: NeonGaussian/src/test (example)

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

@.str = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @Gaussian3x3Sigma0NoneU8C1(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef %5) #0 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i16, align 2
  %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
  store ptr %0, ptr %8, align 8, !tbaa !5
  store i32 %1, ptr %9, align 4, !tbaa !9
  store i32 %2, ptr %10, align 4, !tbaa !9
  store i32 %3, ptr %11, align 4, !tbaa !9
  store i32 %4, ptr %12, align 4, !tbaa !9
  store ptr %5, ptr %13, align 8, !tbaa !5
  %30 = load ptr, ptr %8, align 8, !tbaa !5
  %31 = icmp eq ptr null, %30
  br i1 %31, label %35, label %32

32:                                               ; preds = %6
  %33 = load ptr, ptr %13, align 8, !tbaa !5
  %34 = icmp eq ptr null, %33
  br i1 %34, label %35, label %37

35:                                               ; preds = %32, %6
  %36 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  store i32 -1, ptr %7, align 4
  br label %707

37:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %38 = load ptr, ptr %8, align 8, !tbaa !5
  %39 = load i32, ptr %11, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds i8, ptr %38, i64 %40
  store ptr %41, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %42 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %42, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = load i32, ptr %11, align 4, !tbaa !9
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds i8, ptr %43, i64 %45
  store ptr %46, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %47 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %47, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #3
  store i16 0, ptr %19, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %48

48:                                               ; preds = %188, %37
  %49 = load i32, ptr %20, align 4, !tbaa !9
  %50 = load i32, ptr %10, align 4, !tbaa !9
  %51 = icmp slt i32 %49, %50
  br i1 %51, label %53, label %52

52:                                               ; preds = %48
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %191

53:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %54 = load i32, ptr %20, align 4, !tbaa !9
  %55 = icmp eq i32 %54, 0
  br i1 %55, label %56, label %57

56:                                               ; preds = %53
  br label %70

57:                                               ; preds = %53
  %58 = load i32, ptr %20, align 4, !tbaa !9
  %59 = load i32, ptr %10, align 4, !tbaa !9
  %60 = sub nsw i32 %59, 1
  %61 = icmp eq i32 %58, %60
  br i1 %61, label %62, label %65

62:                                               ; preds = %57
  %63 = load i32, ptr %10, align 4, !tbaa !9
  %64 = sub nsw i32 %63, 2
  br label %68

65:                                               ; preds = %57
  %66 = load i32, ptr %20, align 4, !tbaa !9
  %67 = sub nsw i32 %66, 1
  br label %68

68:                                               ; preds = %65, %62
  %69 = phi i32 [ %64, %62 ], [ %67, %65 ]
  br label %70

70:                                               ; preds = %68, %56
  %71 = phi i32 [ 1, %56 ], [ %69, %68 ]
  store i32 %71, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %72 = load i32, ptr %20, align 4, !tbaa !9
  %73 = icmp eq i32 %72, 0
  br i1 %73, label %74, label %75

74:                                               ; preds = %70
  br label %88

75:                                               ; preds = %70
  %76 = load i32, ptr %20, align 4, !tbaa !9
  %77 = load i32, ptr %10, align 4, !tbaa !9
  %78 = sub nsw i32 %77, 1
  %79 = icmp eq i32 %76, %78
  br i1 %79, label %80, label %83

80:                                               ; preds = %75
  %81 = load i32, ptr %10, align 4, !tbaa !9
  %82 = sub nsw i32 %81, 2
  br label %86

83:                                               ; preds = %75
  %84 = load i32, ptr %20, align 4, !tbaa !9
  %85 = add nsw i32 %84, 1
  br label %86

86:                                               ; preds = %83, %80
  %87 = phi i32 [ %82, %80 ], [ %85, %83 ]
  br label %88

88:                                               ; preds = %86, %74
  %89 = phi i32 [ 1, %74 ], [ %87, %86 ]
  store i32 %89, ptr %22, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  %90 = load ptr, ptr %14, align 8, !tbaa !5
  %91 = load i32, ptr %21, align 4, !tbaa !9
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i8, ptr %90, i64 %92
  %94 = load i8, ptr %93, align 1, !tbaa !13
  %95 = zext i8 %94 to i32
  %96 = load ptr, ptr %14, align 8, !tbaa !5
  %97 = load i32, ptr %22, align 4, !tbaa !9
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds i8, ptr %96, i64 %98
  %100 = load i8, ptr %99, align 1, !tbaa !13
  %101 = zext i8 %100 to i32
  %102 = add nsw i32 %95, %101
  %103 = load i32, ptr %18, align 4, !tbaa !9
  %104 = add i32 %103, %102
  store i32 %104, ptr %18, align 4, !tbaa !9
  %105 = load ptr, ptr %14, align 8, !tbaa !5
  %106 = load i32, ptr %20, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds i8, ptr %105, i64 %107
  %109 = load i8, ptr %108, align 1, !tbaa !13
  %110 = zext i8 %109 to i32
  %111 = mul nsw i32 %110, 2
  %112 = load i32, ptr %18, align 4, !tbaa !9
  %113 = add i32 %112, %111
  store i32 %113, ptr %18, align 4, !tbaa !9
  %114 = load ptr, ptr %15, align 8, !tbaa !5
  %115 = load i32, ptr %21, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i8, ptr %114, i64 %116
  %118 = load i8, ptr %117, align 1, !tbaa !13
  %119 = zext i8 %118 to i32
  %120 = load ptr, ptr %15, align 8, !tbaa !5
  %121 = load i32, ptr %22, align 4, !tbaa !9
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %120, i64 %122
  %124 = load i8, ptr %123, align 1, !tbaa !13
  %125 = zext i8 %124 to i32
  %126 = add nsw i32 %119, %125
  %127 = mul nsw i32 %126, 2
  %128 = load i32, ptr %18, align 4, !tbaa !9
  %129 = add i32 %128, %127
  store i32 %129, ptr %18, align 4, !tbaa !9
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = load i32, ptr %20, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i8, ptr %130, i64 %132
  %134 = load i8, ptr %133, align 1, !tbaa !13
  %135 = zext i8 %134 to i32
  %136 = mul nsw i32 %135, 4
  %137 = load i32, ptr %18, align 4, !tbaa !9
  %138 = add i32 %137, %136
  store i32 %138, ptr %18, align 4, !tbaa !9
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  %140 = load i32, ptr %21, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds i8, ptr %139, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !13
  %144 = zext i8 %143 to i32
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  %146 = load i32, ptr %22, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds i8, ptr %145, i64 %147
  %149 = load i8, ptr %148, align 1, !tbaa !13
  %150 = zext i8 %149 to i32
  %151 = add nsw i32 %144, %150
  %152 = load i32, ptr %18, align 4, !tbaa !9
  %153 = add i32 %152, %151
  store i32 %153, ptr %18, align 4, !tbaa !9
  %154 = load ptr, ptr %16, align 8, !tbaa !5
  %155 = load i32, ptr %20, align 4, !tbaa !9
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds i8, ptr %154, i64 %156
  %158 = load i8, ptr %157, align 1, !tbaa !13
  %159 = zext i8 %158 to i32
  %160 = mul nsw i32 %159, 2
  %161 = load i32, ptr %18, align 4, !tbaa !9
  %162 = add i32 %161, %160
  store i32 %162, ptr %18, align 4, !tbaa !9
  %163 = load i32, ptr %18, align 4, !tbaa !9
  %164 = add i32 %163, 8
  %165 = lshr i32 %164, 4
  %166 = and i32 %165, 65535
  %167 = trunc i32 %166 to i16
  store i16 %167, ptr %19, align 2, !tbaa !11
  %168 = load i16, ptr %19, align 2, !tbaa !11
  %169 = zext i16 %168 to i32
  %170 = and i32 %169, -256
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %175, label %172

172:                                              ; preds = %88
  %173 = load i16, ptr %19, align 2, !tbaa !11
  %174 = zext i16 %173 to i32
  br label %181

175:                                              ; preds = %88
  %176 = load i16, ptr %19, align 2, !tbaa !11
  %177 = zext i16 %176 to i32
  %178 = icmp sgt i32 %177, 0
  %179 = zext i1 %178 to i64
  %180 = select i1 %178, i32 255, i32 0
  br label %181

181:                                              ; preds = %175, %172
  %182 = phi i32 [ %174, %172 ], [ %180, %175 ]
  %183 = trunc i32 %182 to i8
  %184 = load ptr, ptr %17, align 8, !tbaa !5
  %185 = load i32, ptr %20, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i8, ptr %184, i64 %186
  store i8 %183, ptr %187, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  br label %188

188:                                              ; preds = %181
  %189 = load i32, ptr %20, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %20, align 4, !tbaa !9
  br label %48, !llvm.loop !14

191:                                              ; preds = %52
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = load i32, ptr %9, align 4, !tbaa !9
  %194 = sub nsw i32 %193, 2
  %195 = load i32, ptr %11, align 4, !tbaa !9
  %196 = mul nsw i32 %194, %195
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds i8, ptr %192, i64 %197
  store ptr %198, ptr %14, align 8, !tbaa !5
  %199 = load ptr, ptr %8, align 8, !tbaa !5
  %200 = load i32, ptr %9, align 4, !tbaa !9
  %201 = sub nsw i32 %200, 1
  %202 = load i32, ptr %11, align 4, !tbaa !9
  %203 = mul nsw i32 %201, %202
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds i8, ptr %199, i64 %204
  store ptr %205, ptr %15, align 8, !tbaa !5
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = load i32, ptr %9, align 4, !tbaa !9
  %208 = sub nsw i32 %207, 2
  %209 = load i32, ptr %11, align 4, !tbaa !9
  %210 = mul nsw i32 %208, %209
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds i8, ptr %206, i64 %211
  store ptr %212, ptr %16, align 8, !tbaa !5
  %213 = load ptr, ptr %13, align 8, !tbaa !5
  %214 = load i32, ptr %9, align 4, !tbaa !9
  %215 = sub nsw i32 %214, 1
  %216 = load i32, ptr %12, align 4, !tbaa !9
  %217 = mul nsw i32 %215, %216
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds i8, ptr %213, i64 %218
  store ptr %219, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %220

220:                                              ; preds = %360, %191
  %221 = load i32, ptr %23, align 4, !tbaa !9
  %222 = load i32, ptr %10, align 4, !tbaa !9
  %223 = icmp slt i32 %221, %222
  br i1 %223, label %225, label %224

224:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %363

225:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %226 = load i32, ptr %23, align 4, !tbaa !9
  %227 = icmp eq i32 %226, 0
  br i1 %227, label %228, label %229

228:                                              ; preds = %225
  br label %242

229:                                              ; preds = %225
  %230 = load i32, ptr %23, align 4, !tbaa !9
  %231 = load i32, ptr %10, align 4, !tbaa !9
  %232 = sub nsw i32 %231, 1
  %233 = icmp eq i32 %230, %232
  br i1 %233, label %234, label %237

234:                                              ; preds = %229
  %235 = load i32, ptr %10, align 4, !tbaa !9
  %236 = sub nsw i32 %235, 2
  br label %240

237:                                              ; preds = %229
  %238 = load i32, ptr %23, align 4, !tbaa !9
  %239 = sub nsw i32 %238, 1
  br label %240

240:                                              ; preds = %237, %234
  %241 = phi i32 [ %236, %234 ], [ %239, %237 ]
  br label %242

242:                                              ; preds = %240, %228
  %243 = phi i32 [ 1, %228 ], [ %241, %240 ]
  store i32 %243, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %244 = load i32, ptr %23, align 4, !tbaa !9
  %245 = icmp eq i32 %244, 0
  br i1 %245, label %246, label %247

246:                                              ; preds = %242
  br label %260

247:                                              ; preds = %242
  %248 = load i32, ptr %23, align 4, !tbaa !9
  %249 = load i32, ptr %10, align 4, !tbaa !9
  %250 = sub nsw i32 %249, 1
  %251 = icmp eq i32 %248, %250
  br i1 %251, label %252, label %255

252:                                              ; preds = %247
  %253 = load i32, ptr %10, align 4, !tbaa !9
  %254 = sub nsw i32 %253, 2
  br label %258

255:                                              ; preds = %247
  %256 = load i32, ptr %23, align 4, !tbaa !9
  %257 = add nsw i32 %256, 1
  br label %258

258:                                              ; preds = %255, %252
  %259 = phi i32 [ %254, %252 ], [ %257, %255 ]
  br label %260

260:                                              ; preds = %258, %246
  %261 = phi i32 [ 1, %246 ], [ %259, %258 ]
  store i32 %261, ptr %25, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  %262 = load ptr, ptr %14, align 8, !tbaa !5
  %263 = load i32, ptr %24, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i8, ptr %262, i64 %264
  %266 = load i8, ptr %265, align 1, !tbaa !13
  %267 = zext i8 %266 to i32
  %268 = load ptr, ptr %14, align 8, !tbaa !5
  %269 = load i32, ptr %25, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i8, ptr %268, i64 %270
  %272 = load i8, ptr %271, align 1, !tbaa !13
  %273 = zext i8 %272 to i32
  %274 = add nsw i32 %267, %273
  %275 = load i32, ptr %18, align 4, !tbaa !9
  %276 = add i32 %275, %274
  store i32 %276, ptr %18, align 4, !tbaa !9
  %277 = load ptr, ptr %14, align 8, !tbaa !5
  %278 = load i32, ptr %23, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i8, ptr %277, i64 %279
  %281 = load i8, ptr %280, align 1, !tbaa !13
  %282 = zext i8 %281 to i32
  %283 = mul nsw i32 %282, 2
  %284 = load i32, ptr %18, align 4, !tbaa !9
  %285 = add i32 %284, %283
  store i32 %285, ptr %18, align 4, !tbaa !9
  %286 = load ptr, ptr %15, align 8, !tbaa !5
  %287 = load i32, ptr %24, align 4, !tbaa !9
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds i8, ptr %286, i64 %288
  %290 = load i8, ptr %289, align 1, !tbaa !13
  %291 = zext i8 %290 to i32
  %292 = load ptr, ptr %15, align 8, !tbaa !5
  %293 = load i32, ptr %25, align 4, !tbaa !9
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i8, ptr %292, i64 %294
  %296 = load i8, ptr %295, align 1, !tbaa !13
  %297 = zext i8 %296 to i32
  %298 = add nsw i32 %291, %297
  %299 = mul nsw i32 %298, 2
  %300 = load i32, ptr %18, align 4, !tbaa !9
  %301 = add i32 %300, %299
  store i32 %301, ptr %18, align 4, !tbaa !9
  %302 = load ptr, ptr %15, align 8, !tbaa !5
  %303 = load i32, ptr %23, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i8, ptr %302, i64 %304
  %306 = load i8, ptr %305, align 1, !tbaa !13
  %307 = zext i8 %306 to i32
  %308 = mul nsw i32 %307, 4
  %309 = load i32, ptr %18, align 4, !tbaa !9
  %310 = add i32 %309, %308
  store i32 %310, ptr %18, align 4, !tbaa !9
  %311 = load ptr, ptr %16, align 8, !tbaa !5
  %312 = load i32, ptr %24, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds i8, ptr %311, i64 %313
  %315 = load i8, ptr %314, align 1, !tbaa !13
  %316 = zext i8 %315 to i32
  %317 = load ptr, ptr %16, align 8, !tbaa !5
  %318 = load i32, ptr %25, align 4, !tbaa !9
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds i8, ptr %317, i64 %319
  %321 = load i8, ptr %320, align 1, !tbaa !13
  %322 = zext i8 %321 to i32
  %323 = add nsw i32 %316, %322
  %324 = load i32, ptr %18, align 4, !tbaa !9
  %325 = add i32 %324, %323
  store i32 %325, ptr %18, align 4, !tbaa !9
  %326 = load ptr, ptr %16, align 8, !tbaa !5
  %327 = load i32, ptr %23, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i8, ptr %326, i64 %328
  %330 = load i8, ptr %329, align 1, !tbaa !13
  %331 = zext i8 %330 to i32
  %332 = mul nsw i32 %331, 2
  %333 = load i32, ptr %18, align 4, !tbaa !9
  %334 = add i32 %333, %332
  store i32 %334, ptr %18, align 4, !tbaa !9
  %335 = load i32, ptr %18, align 4, !tbaa !9
  %336 = add i32 %335, 8
  %337 = lshr i32 %336, 4
  %338 = and i32 %337, 65535
  %339 = trunc i32 %338 to i16
  store i16 %339, ptr %19, align 2, !tbaa !11
  %340 = load i16, ptr %19, align 2, !tbaa !11
  %341 = zext i16 %340 to i32
  %342 = and i32 %341, -256
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %347, label %344

344:                                              ; preds = %260
  %345 = load i16, ptr %19, align 2, !tbaa !11
  %346 = zext i16 %345 to i32
  br label %353

347:                                              ; preds = %260
  %348 = load i16, ptr %19, align 2, !tbaa !11
  %349 = zext i16 %348 to i32
  %350 = icmp sgt i32 %349, 0
  %351 = zext i1 %350 to i64
  %352 = select i1 %350, i32 255, i32 0
  br label %353

353:                                              ; preds = %347, %344
  %354 = phi i32 [ %346, %344 ], [ %352, %347 ]
  %355 = trunc i32 %354 to i8
  %356 = load ptr, ptr %17, align 8, !tbaa !5
  %357 = load i32, ptr %23, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i8, ptr %356, i64 %358
  store i8 %355, ptr %359, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  br label %360

360:                                              ; preds = %353
  %361 = load i32, ptr %23, align 4, !tbaa !9
  %362 = add nsw i32 %361, 1
  store i32 %362, ptr %23, align 4, !tbaa !9
  br label %220, !llvm.loop !16

363:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 1, ptr %26, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %703, %363
  %365 = load i32, ptr %26, align 4, !tbaa !9
  %366 = load i32, ptr %9, align 4, !tbaa !9
  %367 = sub nsw i32 %366, 1
  %368 = icmp slt i32 %365, %367
  br i1 %368, label %370, label %369

369:                                              ; preds = %364
  store i32 8, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  br label %706

370:                                              ; preds = %364
  %371 = load ptr, ptr %8, align 8, !tbaa !5
  %372 = load i32, ptr %26, align 4, !tbaa !9
  %373 = sub nsw i32 %372, 1
  %374 = load i32, ptr %11, align 4, !tbaa !9
  %375 = mul nsw i32 %373, %374
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds i8, ptr %371, i64 %376
  store ptr %377, ptr %14, align 8, !tbaa !5
  %378 = load ptr, ptr %8, align 8, !tbaa !5
  %379 = load i32, ptr %26, align 4, !tbaa !9
  %380 = sub nsw i32 %379, 0
  %381 = load i32, ptr %11, align 4, !tbaa !9
  %382 = mul nsw i32 %380, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds i8, ptr %378, i64 %383
  store ptr %384, ptr %15, align 8, !tbaa !5
  %385 = load ptr, ptr %8, align 8, !tbaa !5
  %386 = load i32, ptr %26, align 4, !tbaa !9
  %387 = add nsw i32 %386, 1
  %388 = load i32, ptr %11, align 4, !tbaa !9
  %389 = mul nsw i32 %387, %388
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i8, ptr %385, i64 %390
  store ptr %391, ptr %16, align 8, !tbaa !5
  %392 = load ptr, ptr %13, align 8, !tbaa !5
  %393 = load i32, ptr %26, align 4, !tbaa !9
  %394 = load i32, ptr %12, align 4, !tbaa !9
  %395 = mul nsw i32 %393, %394
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds i8, ptr %392, i64 %396
  store ptr %397, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  store i32 1, ptr %28, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %512, %370
  %399 = load i32, ptr %28, align 4, !tbaa !9
  %400 = load i32, ptr %10, align 4, !tbaa !9
  %401 = sub nsw i32 %400, 1
  %402 = icmp slt i32 %399, %401
  br i1 %402, label %404, label %403

403:                                              ; preds = %398
  store i32 11, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  br label %515

404:                                              ; preds = %398
  store i32 0, ptr %18, align 4, !tbaa !9
  %405 = load ptr, ptr %14, align 8, !tbaa !5
  %406 = load i32, ptr %28, align 4, !tbaa !9
  %407 = sub nsw i32 %406, 1
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i8, ptr %405, i64 %408
  %410 = load i8, ptr %409, align 1, !tbaa !13
  %411 = zext i8 %410 to i32
  %412 = load ptr, ptr %14, align 8, !tbaa !5
  %413 = load i32, ptr %28, align 4, !tbaa !9
  %414 = add nsw i32 %413, 1
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds i8, ptr %412, i64 %415
  %417 = load i8, ptr %416, align 1, !tbaa !13
  %418 = zext i8 %417 to i32
  %419 = add nsw i32 %411, %418
  %420 = load i32, ptr %18, align 4, !tbaa !9
  %421 = add i32 %420, %419
  store i32 %421, ptr %18, align 4, !tbaa !9
  %422 = load ptr, ptr %14, align 8, !tbaa !5
  %423 = load i32, ptr %28, align 4, !tbaa !9
  %424 = sub nsw i32 %423, 0
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds i8, ptr %422, i64 %425
  %427 = load i8, ptr %426, align 1, !tbaa !13
  %428 = zext i8 %427 to i32
  %429 = mul nsw i32 %428, 2
  %430 = load i32, ptr %18, align 4, !tbaa !9
  %431 = add i32 %430, %429
  store i32 %431, ptr %18, align 4, !tbaa !9
  %432 = load ptr, ptr %15, align 8, !tbaa !5
  %433 = load i32, ptr %28, align 4, !tbaa !9
  %434 = sub nsw i32 %433, 1
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i8, ptr %432, i64 %435
  %437 = load i8, ptr %436, align 1, !tbaa !13
  %438 = zext i8 %437 to i32
  %439 = load ptr, ptr %15, align 8, !tbaa !5
  %440 = load i32, ptr %28, align 4, !tbaa !9
  %441 = add nsw i32 %440, 1
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i8, ptr %439, i64 %442
  %444 = load i8, ptr %443, align 1, !tbaa !13
  %445 = zext i8 %444 to i32
  %446 = add nsw i32 %438, %445
  %447 = mul nsw i32 %446, 2
  %448 = load i32, ptr %18, align 4, !tbaa !9
  %449 = add i32 %448, %447
  store i32 %449, ptr %18, align 4, !tbaa !9
  %450 = load ptr, ptr %15, align 8, !tbaa !5
  %451 = load i32, ptr %28, align 4, !tbaa !9
  %452 = sub nsw i32 %451, 0
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds i8, ptr %450, i64 %453
  %455 = load i8, ptr %454, align 1, !tbaa !13
  %456 = zext i8 %455 to i32
  %457 = mul nsw i32 %456, 4
  %458 = load i32, ptr %18, align 4, !tbaa !9
  %459 = add i32 %458, %457
  store i32 %459, ptr %18, align 4, !tbaa !9
  %460 = load ptr, ptr %16, align 8, !tbaa !5
  %461 = load i32, ptr %28, align 4, !tbaa !9
  %462 = sub nsw i32 %461, 1
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds i8, ptr %460, i64 %463
  %465 = load i8, ptr %464, align 1, !tbaa !13
  %466 = zext i8 %465 to i32
  %467 = load ptr, ptr %16, align 8, !tbaa !5
  %468 = load i32, ptr %28, align 4, !tbaa !9
  %469 = add nsw i32 %468, 1
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds i8, ptr %467, i64 %470
  %472 = load i8, ptr %471, align 1, !tbaa !13
  %473 = zext i8 %472 to i32
  %474 = add nsw i32 %466, %473
  %475 = load i32, ptr %18, align 4, !tbaa !9
  %476 = add i32 %475, %474
  store i32 %476, ptr %18, align 4, !tbaa !9
  %477 = load ptr, ptr %16, align 8, !tbaa !5
  %478 = load i32, ptr %28, align 4, !tbaa !9
  %479 = sub nsw i32 %478, 0
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i8, ptr %477, i64 %480
  %482 = load i8, ptr %481, align 1, !tbaa !13
  %483 = zext i8 %482 to i32
  %484 = mul nsw i32 %483, 2
  %485 = load i32, ptr %18, align 4, !tbaa !9
  %486 = add i32 %485, %484
  store i32 %486, ptr %18, align 4, !tbaa !9
  %487 = load i32, ptr %18, align 4, !tbaa !9
  %488 = add i32 %487, 8
  %489 = lshr i32 %488, 4
  %490 = and i32 %489, 65535
  %491 = trunc i32 %490 to i16
  store i16 %491, ptr %19, align 2, !tbaa !11
  %492 = load i16, ptr %19, align 2, !tbaa !11
  %493 = zext i16 %492 to i32
  %494 = and i32 %493, -256
  %495 = icmp ne i32 %494, 0
  br i1 %495, label %499, label %496

496:                                              ; preds = %404
  %497 = load i16, ptr %19, align 2, !tbaa !11
  %498 = zext i16 %497 to i32
  br label %505

499:                                              ; preds = %404
  %500 = load i16, ptr %19, align 2, !tbaa !11
  %501 = zext i16 %500 to i32
  %502 = icmp sgt i32 %501, 0
  %503 = zext i1 %502 to i64
  %504 = select i1 %502, i32 255, i32 0
  br label %505

505:                                              ; preds = %499, %496
  %506 = phi i32 [ %498, %496 ], [ %504, %499 ]
  %507 = trunc i32 %506 to i8
  %508 = load ptr, ptr %17, align 8, !tbaa !5
  %509 = load i32, ptr %28, align 4, !tbaa !9
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds i8, ptr %508, i64 %510
  store i8 %507, ptr %511, align 1, !tbaa !13
  br label %512

512:                                              ; preds = %505
  %513 = load i32, ptr %28, align 4, !tbaa !9
  %514 = add nsw i32 %513, 1
  store i32 %514, ptr %28, align 4, !tbaa !9
  br label %398, !llvm.loop !17

515:                                              ; preds = %403
  store i32 0, ptr %18, align 4, !tbaa !9
  %516 = load ptr, ptr %14, align 8, !tbaa !5
  %517 = getelementptr inbounds i8, ptr %516, i64 1
  %518 = load i8, ptr %517, align 1, !tbaa !13
  %519 = zext i8 %518 to i32
  %520 = load ptr, ptr %14, align 8, !tbaa !5
  %521 = getelementptr inbounds i8, ptr %520, i64 1
  %522 = load i8, ptr %521, align 1, !tbaa !13
  %523 = zext i8 %522 to i32
  %524 = add nsw i32 %519, %523
  %525 = load i32, ptr %18, align 4, !tbaa !9
  %526 = add i32 %525, %524
  store i32 %526, ptr %18, align 4, !tbaa !9
  %527 = load ptr, ptr %14, align 8, !tbaa !5
  %528 = getelementptr inbounds i8, ptr %527, i64 0
  %529 = load i8, ptr %528, align 1, !tbaa !13
  %530 = zext i8 %529 to i32
  %531 = mul nsw i32 %530, 2
  %532 = load i32, ptr %18, align 4, !tbaa !9
  %533 = add i32 %532, %531
  store i32 %533, ptr %18, align 4, !tbaa !9
  %534 = load ptr, ptr %15, align 8, !tbaa !5
  %535 = getelementptr inbounds i8, ptr %534, i64 1
  %536 = load i8, ptr %535, align 1, !tbaa !13
  %537 = zext i8 %536 to i32
  %538 = load ptr, ptr %15, align 8, !tbaa !5
  %539 = getelementptr inbounds i8, ptr %538, i64 1
  %540 = load i8, ptr %539, align 1, !tbaa !13
  %541 = zext i8 %540 to i32
  %542 = add nsw i32 %537, %541
  %543 = mul nsw i32 %542, 2
  %544 = load i32, ptr %18, align 4, !tbaa !9
  %545 = add i32 %544, %543
  store i32 %545, ptr %18, align 4, !tbaa !9
  %546 = load ptr, ptr %15, align 8, !tbaa !5
  %547 = getelementptr inbounds i8, ptr %546, i64 0
  %548 = load i8, ptr %547, align 1, !tbaa !13
  %549 = zext i8 %548 to i32
  %550 = mul nsw i32 %549, 4
  %551 = load i32, ptr %18, align 4, !tbaa !9
  %552 = add i32 %551, %550
  store i32 %552, ptr %18, align 4, !tbaa !9
  %553 = load ptr, ptr %16, align 8, !tbaa !5
  %554 = getelementptr inbounds i8, ptr %553, i64 1
  %555 = load i8, ptr %554, align 1, !tbaa !13
  %556 = zext i8 %555 to i32
  %557 = load ptr, ptr %16, align 8, !tbaa !5
  %558 = getelementptr inbounds i8, ptr %557, i64 1
  %559 = load i8, ptr %558, align 1, !tbaa !13
  %560 = zext i8 %559 to i32
  %561 = add nsw i32 %556, %560
  %562 = load i32, ptr %18, align 4, !tbaa !9
  %563 = add i32 %562, %561
  store i32 %563, ptr %18, align 4, !tbaa !9
  %564 = load ptr, ptr %16, align 8, !tbaa !5
  %565 = getelementptr inbounds i8, ptr %564, i64 0
  %566 = load i8, ptr %565, align 1, !tbaa !13
  %567 = zext i8 %566 to i32
  %568 = mul nsw i32 %567, 2
  %569 = load i32, ptr %18, align 4, !tbaa !9
  %570 = add i32 %569, %568
  store i32 %570, ptr %18, align 4, !tbaa !9
  %571 = load i32, ptr %18, align 4, !tbaa !9
  %572 = add i32 %571, 8
  %573 = lshr i32 %572, 4
  %574 = and i32 %573, 65535
  %575 = trunc i32 %574 to i16
  store i16 %575, ptr %19, align 2, !tbaa !11
  %576 = load i16, ptr %19, align 2, !tbaa !11
  %577 = zext i16 %576 to i32
  %578 = and i32 %577, -256
  %579 = icmp ne i32 %578, 0
  br i1 %579, label %583, label %580

580:                                              ; preds = %515
  %581 = load i16, ptr %19, align 2, !tbaa !11
  %582 = zext i16 %581 to i32
  br label %589

583:                                              ; preds = %515
  %584 = load i16, ptr %19, align 2, !tbaa !11
  %585 = zext i16 %584 to i32
  %586 = icmp sgt i32 %585, 0
  %587 = zext i1 %586 to i64
  %588 = select i1 %586, i32 255, i32 0
  br label %589

589:                                              ; preds = %583, %580
  %590 = phi i32 [ %582, %580 ], [ %588, %583 ]
  %591 = trunc i32 %590 to i8
  %592 = load ptr, ptr %17, align 8, !tbaa !5
  %593 = getelementptr inbounds i8, ptr %592, i64 0
  store i8 %591, ptr %593, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %594 = load i32, ptr %10, align 4, !tbaa !9
  %595 = sub nsw i32 %594, 1
  store i32 %595, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  %596 = load ptr, ptr %14, align 8, !tbaa !5
  %597 = load i32, ptr %29, align 4, !tbaa !9
  %598 = sub nsw i32 %597, 1
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds i8, ptr %596, i64 %599
  %601 = load i8, ptr %600, align 1, !tbaa !13
  %602 = zext i8 %601 to i32
  %603 = load ptr, ptr %14, align 8, !tbaa !5
  %604 = load i32, ptr %29, align 4, !tbaa !9
  %605 = sub nsw i32 %604, 1
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds i8, ptr %603, i64 %606
  %608 = load i8, ptr %607, align 1, !tbaa !13
  %609 = zext i8 %608 to i32
  %610 = add nsw i32 %602, %609
  %611 = load i32, ptr %18, align 4, !tbaa !9
  %612 = add i32 %611, %610
  store i32 %612, ptr %18, align 4, !tbaa !9
  %613 = load ptr, ptr %14, align 8, !tbaa !5
  %614 = load i32, ptr %29, align 4, !tbaa !9
  %615 = add nsw i32 %614, 0
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds i8, ptr %613, i64 %616
  %618 = load i8, ptr %617, align 1, !tbaa !13
  %619 = zext i8 %618 to i32
  %620 = mul nsw i32 %619, 2
  %621 = load i32, ptr %18, align 4, !tbaa !9
  %622 = add i32 %621, %620
  store i32 %622, ptr %18, align 4, !tbaa !9
  %623 = load ptr, ptr %15, align 8, !tbaa !5
  %624 = load i32, ptr %29, align 4, !tbaa !9
  %625 = sub nsw i32 %624, 1
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds i8, ptr %623, i64 %626
  %628 = load i8, ptr %627, align 1, !tbaa !13
  %629 = zext i8 %628 to i32
  %630 = load ptr, ptr %15, align 8, !tbaa !5
  %631 = load i32, ptr %29, align 4, !tbaa !9
  %632 = sub nsw i32 %631, 1
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds i8, ptr %630, i64 %633
  %635 = load i8, ptr %634, align 1, !tbaa !13
  %636 = zext i8 %635 to i32
  %637 = add nsw i32 %629, %636
  %638 = mul nsw i32 %637, 2
  %639 = load i32, ptr %18, align 4, !tbaa !9
  %640 = add i32 %639, %638
  store i32 %640, ptr %18, align 4, !tbaa !9
  %641 = load ptr, ptr %15, align 8, !tbaa !5
  %642 = load i32, ptr %29, align 4, !tbaa !9
  %643 = add nsw i32 %642, 0
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds i8, ptr %641, i64 %644
  %646 = load i8, ptr %645, align 1, !tbaa !13
  %647 = zext i8 %646 to i32
  %648 = mul nsw i32 %647, 4
  %649 = load i32, ptr %18, align 4, !tbaa !9
  %650 = add i32 %649, %648
  store i32 %650, ptr %18, align 4, !tbaa !9
  %651 = load ptr, ptr %16, align 8, !tbaa !5
  %652 = load i32, ptr %29, align 4, !tbaa !9
  %653 = sub nsw i32 %652, 1
  %654 = sext i32 %653 to i64
  %655 = getelementptr inbounds i8, ptr %651, i64 %654
  %656 = load i8, ptr %655, align 1, !tbaa !13
  %657 = zext i8 %656 to i32
  %658 = load ptr, ptr %16, align 8, !tbaa !5
  %659 = load i32, ptr %29, align 4, !tbaa !9
  %660 = sub nsw i32 %659, 1
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds i8, ptr %658, i64 %661
  %663 = load i8, ptr %662, align 1, !tbaa !13
  %664 = zext i8 %663 to i32
  %665 = add nsw i32 %657, %664
  %666 = load i32, ptr %18, align 4, !tbaa !9
  %667 = add i32 %666, %665
  store i32 %667, ptr %18, align 4, !tbaa !9
  %668 = load ptr, ptr %16, align 8, !tbaa !5
  %669 = load i32, ptr %29, align 4, !tbaa !9
  %670 = add nsw i32 %669, 0
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds i8, ptr %668, i64 %671
  %673 = load i8, ptr %672, align 1, !tbaa !13
  %674 = zext i8 %673 to i32
  %675 = mul nsw i32 %674, 2
  %676 = load i32, ptr %18, align 4, !tbaa !9
  %677 = add i32 %676, %675
  store i32 %677, ptr %18, align 4, !tbaa !9
  %678 = load i32, ptr %18, align 4, !tbaa !9
  %679 = add i32 %678, 8
  %680 = lshr i32 %679, 4
  %681 = and i32 %680, 65535
  %682 = trunc i32 %681 to i16
  store i16 %682, ptr %19, align 2, !tbaa !11
  %683 = load i16, ptr %19, align 2, !tbaa !11
  %684 = zext i16 %683 to i32
  %685 = and i32 %684, -256
  %686 = icmp ne i32 %685, 0
  br i1 %686, label %690, label %687

687:                                              ; preds = %589
  %688 = load i16, ptr %19, align 2, !tbaa !11
  %689 = zext i16 %688 to i32
  br label %696

690:                                              ; preds = %589
  %691 = load i16, ptr %19, align 2, !tbaa !11
  %692 = zext i16 %691 to i32
  %693 = icmp sgt i32 %692, 0
  %694 = zext i1 %693 to i64
  %695 = select i1 %693, i32 255, i32 0
  br label %696

696:                                              ; preds = %690, %687
  %697 = phi i32 [ %689, %687 ], [ %695, %690 ]
  %698 = trunc i32 %697 to i8
  %699 = load ptr, ptr %17, align 8, !tbaa !5
  %700 = load i32, ptr %29, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i8, ptr %699, i64 %701
  store i8 %698, ptr %702, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  br label %703

703:                                              ; preds = %696
  %704 = load i32, ptr %26, align 4, !tbaa !9
  %705 = add nsw i32 %704, 1
  store i32 %705, ptr %26, align 4, !tbaa !9
  br label %364, !llvm.loop !18

706:                                              ; preds = %369
  store i32 0, ptr %7, align 4
  store i32 1, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  br label %707

707:                                              ; preds = %706, %35
  %708 = load i32, ptr %7, align 4
  ret i32 %708
}

declare i32 @printf(ptr noundef, ...) #1

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

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

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

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

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


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

@.str = external hidden unnamed_addr constant [22 x i8], align 1

; Function Attrs: nofree nounwind uwtable
define dso_local range(i32 -1, 1) i32 @Gaussian3x3Sigma0NoneU8C1(ptr noundef readonly %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, ptr noundef writeonly %5) local_unnamed_addr #0 {
  %7 = icmp eq ptr %0, null
  %8 = icmp eq ptr %5, null
  %or.cond = or i1 %7, %8
  br i1 %or.cond, label %9, label %11

9:                                                ; preds = %6
  %10 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  br label %.loopexit

11:                                               ; preds = %6
  %12 = sext i32 %3 to i64
  %13 = getelementptr i8, ptr %0, i64 %12
  %14 = icmp sgt i32 %2, 0
  br i1 %14, label %.thread.peel, label %._crit_edge

.thread.peel:                                     ; preds = %11
  %15 = add nsw i32 %2, -1
  %16 = add nsw i32 %2, -2
  %17 = zext nneg i32 %15 to i64
  %wide.trip.count = zext nneg i32 %2 to i64
  %18 = getelementptr inbounds i8, ptr %13, i64 1
  %19 = load i8, ptr %18, align 1, !tbaa !5
  %20 = zext i8 %19 to i16
  %21 = load i8, ptr %13, align 1, !tbaa !5
  %22 = zext i8 %21 to i16
  %23 = getelementptr inbounds i8, ptr %0, i64 1
  %24 = load i8, ptr %23, align 1, !tbaa !5
  %25 = zext i8 %24 to i16
  %26 = load i8, ptr %0, align 1, !tbaa !5
  %27 = zext i8 %26 to i16
  %28 = add nuw nsw i16 %20, %22
  %reass.add231.peel272 = add nuw nsw i16 %28, %25
  %29 = add nuw nsw i16 %reass.add231.peel272, %27
  %30 = shl nuw nsw i16 %29, 2
  %31 = add nuw nsw i16 %30, 8
  %32 = lshr i16 %31, 4
  %33 = trunc i16 %32 to i8
  store i8 %33, ptr %5, align 1, !tbaa !5
  %exitcond.peel.not = icmp eq i32 %2, 1
  br i1 %exitcond.peel.not, label %._crit_edge, label %.thread

._crit_edge:                                      ; preds = %.thread, %.thread.peel, %11
  %34 = add nsw i32 %1, -2
  %35 = mul nsw i32 %34, %3
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds i8, ptr %0, i64 %36
  %38 = add i32 %1, -1
  %39 = mul nsw i32 %38, %3
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds i8, ptr %0, i64 %40
  %42 = mul nsw i32 %38, %4
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds i8, ptr %5, i64 %43
  br i1 %14, label %.thread214.peel, label %.preheader

.thread214.peel:                                  ; preds = %._crit_edge
  %45 = add nsw i32 %2, -1
  %46 = add nsw i32 %2, -2
  %47 = zext nneg i32 %45 to i64
  %wide.trip.count250 = zext nneg i32 %2 to i64
  %48 = getelementptr inbounds i8, ptr %37, i64 1
  %49 = load i8, ptr %48, align 1, !tbaa !5
  %50 = zext i8 %49 to i16
  %51 = load i8, ptr %37, align 1, !tbaa !5
  %52 = zext i8 %51 to i16
  %53 = getelementptr inbounds i8, ptr %41, i64 1
  %54 = load i8, ptr %53, align 1, !tbaa !5
  %55 = zext i8 %54 to i16
  %56 = load i8, ptr %41, align 1, !tbaa !5
  %57 = zext i8 %56 to i16
  %58 = add nuw nsw i16 %50, %52
  %reass.add227.peel274 = add nuw nsw i16 %58, %55
  %59 = add nuw nsw i16 %reass.add227.peel274, %57
  %60 = shl nuw nsw i16 %59, 2
  %61 = add nuw nsw i16 %60, 8
  %62 = lshr i16 %61, 4
  %63 = trunc i16 %62 to i8
  store i8 %63, ptr %44, align 1, !tbaa !5
  %exitcond251.peel.not = icmp eq i32 %2, 1
  br i1 %exitcond251.peel.not, label %.preheader.thread, label %.thread214

.thread:                                          ; preds = %.thread.peel, %.thread
  %indvars.iv = phi i64 [ %65, %.thread ], [ 1, %.thread.peel ]
  %64 = icmp eq i64 %indvars.iv, %17
  %65 = add nuw nsw i64 %indvars.iv, 1
  %66 = trunc nuw nsw i64 %65 to i32
  %67 = select i1 %64, i32 %16, i32 %66
  %68 = trunc i64 %indvars.iv to i32
  %69 = add i32 %68, -1
  %70 = select i1 %64, i32 %16, i32 %69
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds i8, ptr %13, i64 %71
  %73 = load i8, ptr %72, align 1, !tbaa !5
  %74 = zext i8 %73 to i32
  %75 = sext i32 %67 to i64
  %76 = getelementptr inbounds i8, ptr %13, i64 %75
  %77 = load i8, ptr %76, align 1, !tbaa !5
  %78 = zext i8 %77 to i32
  %79 = getelementptr inbounds i8, ptr %13, i64 %indvars.iv
  %80 = load i8, ptr %79, align 1, !tbaa !5
  %81 = zext i8 %80 to i32
  %82 = shl nuw nsw i32 %81, 1
  %83 = getelementptr inbounds i8, ptr %0, i64 %71
  %84 = load i8, ptr %83, align 1, !tbaa !5
  %85 = zext i8 %84 to i32
  %86 = getelementptr inbounds i8, ptr %0, i64 %75
  %87 = load i8, ptr %86, align 1, !tbaa !5
  %88 = zext i8 %87 to i32
  %89 = getelementptr inbounds i8, ptr %0, i64 %indvars.iv
  %90 = load i8, ptr %89, align 1, !tbaa !5
  %91 = zext i8 %90 to i32
  %92 = shl nuw nsw i32 %91, 2
  %93 = add nuw nsw i32 %78, %74
  %reass.add231 = add nuw nsw i32 %93, %82
  %94 = add nuw nsw i32 %reass.add231, %85
  %reass.add232 = add nuw nsw i32 %94, %88
  %reass.mul233 = shl nuw nsw i32 %reass.add232, 1
  %95 = add nuw nsw i32 %92, 8
  %96 = add nuw nsw i32 %95, %reass.mul233
  %97 = lshr i32 %96, 4
  %98 = trunc nuw i32 %97 to i8
  %99 = getelementptr inbounds i8, ptr %5, i64 %indvars.iv
  store i8 %98, ptr %99, align 1, !tbaa !5
  %exitcond.not = icmp eq i64 %65, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.thread, !llvm.loop !8

.preheader:                                       ; preds = %.thread214, %._crit_edge
  %100 = icmp sgt i32 %1, 2
  br i1 %100, label %.lr.ph243, label %.loopexit

.preheader.thread:                                ; preds = %.thread214.peel
  %101 = icmp sgt i32 %1, 2
  br i1 %101, label %iter.check446, label %.loopexit

.lr.ph243:                                        ; preds = %.preheader
  %102 = add i32 %2, -1
  %103 = icmp sgt i32 %2, 2
  %104 = add nsw i32 %2, -2
  %105 = sext i32 %104 to i64
  %106 = sext i32 %102 to i64
  br i1 %103, label %.lr.ph240.us.preheader, label %iter.check446

iter.check446:                                    ; preds = %.preheader.thread, %.lr.ph243
  %107 = phi i64 [ %106, %.lr.ph243 ], [ 0, %.preheader.thread ]
  %108 = phi i64 [ %105, %.lr.ph243 ], [ -1, %.preheader.thread ]
  %109 = sext i32 %4 to i64
  %wide.trip.count258 = zext i32 %38 to i64
  %110 = add nsw i64 %wide.trip.count258, -1
  %min.iters.check444 = icmp ult i64 %110, 8
  br i1 %min.iters.check444, label %.lr.ph243.split.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %iter.check446
  %ident.check = icmp ne i32 %4, 1
  %ident.check319 = icmp ne i32 %3, 1
  %111 = or i1 %ident.check, %ident.check319
  br i1 %111, label %.lr.ph243.split.preheader, label %vector.memcheck320

vector.memcheck320:                               ; preds = %vector.scevcheck
  %scevgep321 = getelementptr i8, ptr %5, i64 1
  %scevgep322 = getelementptr i8, ptr %5, i64 %wide.trip.count258
  %112 = add nsw i64 %107, 1
  %scevgep323 = getelementptr i8, ptr %5, i64 %112
  %113 = add nsw i64 %107, %wide.trip.count258
  %scevgep324 = getelementptr i8, ptr %5, i64 %113
  %scevgep325 = getelementptr i8, ptr %0, i64 1
  %scevgep326 = getelementptr i8, ptr %0, i64 %wide.trip.count258
  %114 = getelementptr i8, ptr %0, i64 %wide.trip.count258
  %scevgep327 = getelementptr i8, ptr %114, i64 -1
  %scevgep328 = getelementptr i8, ptr %0, i64 2
  %115 = getelementptr i8, ptr %0, i64 %wide.trip.count258
  %scevgep329 = getelementptr i8, ptr %115, i64 1
  %scevgep330 = getelementptr i8, ptr %0, i64 3
  %116 = getelementptr i8, ptr %0, i64 %wide.trip.count258
  %scevgep331 = getelementptr i8, ptr %116, i64 2
  %scevgep332 = getelementptr i8, ptr %0, i64 %108
  %117 = getelementptr i8, ptr %0, i64 %108
  %118 = getelementptr i8, ptr %117, i64 %wide.trip.count258
  %scevgep333 = getelementptr i8, ptr %118, i64 -1
  %scevgep334 = getelementptr i8, ptr %0, i64 %107
  %119 = getelementptr i8, ptr %0, i64 %107
  %120 = getelementptr i8, ptr %119, i64 %wide.trip.count258
  %scevgep335 = getelementptr i8, ptr %120, i64 -1
  %121 = getelementptr i8, ptr %0, i64 %108
  %scevgep336 = getelementptr i8, ptr %121, i64 1
  %122 = add nsw i64 %108, %wide.trip.count258
  %scevgep337 = getelementptr i8, ptr %0, i64 %122
  %scevgep338 = getelementptr i8, ptr %0, i64 %112
  %scevgep339 = getelementptr i8, ptr %0, i64 %113
  %123 = getelementptr i8, ptr %0, i64 %108
  %scevgep340 = getelementptr i8, ptr %123, i64 2
  %124 = getelementptr i8, ptr %0, i64 %122
  %scevgep341 = getelementptr i8, ptr %124, i64 1
  %125 = getelementptr i8, ptr %0, i64 %107
  %scevgep342 = getelementptr i8, ptr %125, i64 2
  %126 = getelementptr i8, ptr %0, i64 %107
  %127 = getelementptr i8, ptr %126, i64 %wide.trip.count258
  %scevgep343 = getelementptr i8, ptr %127, i64 1
  %bound0344 = icmp ult ptr %scevgep321, %scevgep324
  %bound1345 = icmp ult ptr %scevgep323, %scevgep322
  %found.conflict346 = and i1 %bound0344, %bound1345
  %bound0347 = icmp ult ptr %scevgep321, %scevgep326
  %bound1348 = icmp ult ptr %scevgep325, %scevgep322
  %found.conflict349 = and i1 %bound0347, %bound1348
  %conflict.rdx350 = or i1 %found.conflict346, %found.conflict349
  %bound0351 = icmp ult ptr %scevgep321, %scevgep327
  %bound1352 = icmp ugt ptr %scevgep322, %0
  %found.conflict353 = and i1 %bound0351, %bound1352
  %conflict.rdx354 = or i1 %conflict.rdx350, %found.conflict353
  %bound0355 = icmp ugt ptr %115, %5
  %bound1356 = icmp ult ptr %scevgep328, %scevgep322
  %found.conflict357 = and i1 %bound0355, %bound1356
  %conflict.rdx362 = or i1 %conflict.rdx354, %found.conflict357
  %bound0363 = icmp ult ptr %scevgep321, %scevgep331
  %bound1364 = icmp ult ptr %scevgep330, %scevgep322
  %found.conflict365 = and i1 %bound0363, %bound1364
  %conflict.rdx366 = or i1 %conflict.rdx362, %found.conflict365
  %bound0371 = icmp ult ptr %scevgep321, %scevgep333
  %bound1372 = icmp ult ptr %scevgep332, %scevgep322
  %found.conflict373 = and i1 %bound0371, %bound1372
  %conflict.rdx374 = or i1 %conflict.rdx366, %found.conflict373
  %bound0375 = icmp ult ptr %scevgep321, %scevgep335
  %bound1376 = icmp ult ptr %scevgep334, %scevgep322
  %found.conflict377 = and i1 %bound0375, %bound1376
  %conflict.rdx378 = or i1 %conflict.rdx374, %found.conflict377
  %bound0379 = icmp ult ptr %scevgep321, %scevgep337
  %bound1380 = icmp ult ptr %scevgep336, %scevgep322
  %found.conflict381 = and i1 %bound0379, %bound1380
  %conflict.rdx382 = or i1 %conflict.rdx378, %found.conflict381
  %bound0383 = icmp ult ptr %scevgep321, %scevgep339
  %bound1384 = icmp ult ptr %scevgep338, %scevgep322
  %found.conflict385 = and i1 %bound0383, %bound1384
  %conflict.rdx386 = or i1 %conflict.rdx382, %found.conflict385
  %bound0387 = icmp ugt ptr %124, %5
  %bound1388 = icmp ult ptr %scevgep340, %scevgep322
  %found.conflict389 = and i1 %bound0387, %bound1388
  %conflict.rdx390 = or i1 %conflict.rdx386, %found.conflict389
  %bound0391 = icmp ugt ptr %127, %5
  %bound1392 = icmp ult ptr %scevgep342, %scevgep322
  %found.conflict393 = and i1 %bound0391, %bound1392
  %conflict.rdx394 = or i1 %conflict.rdx390, %found.conflict393
  %bound0395 = icmp ult ptr %scevgep323, %scevgep326
  %bound1396 = icmp ult ptr %scevgep325, %scevgep324
  %found.conflict397 = and i1 %bound0395, %bound1396
  %conflict.rdx398 = or i1 %conflict.rdx394, %found.conflict397
  %bound0399 = icmp ult ptr %scevgep323, %scevgep327
  %bound1400 = icmp ugt ptr %scevgep324, %0
  %found.conflict401 = and i1 %bound0399, %bound1400
  %conflict.rdx402 = or i1 %conflict.rdx398, %found.conflict401
  %bound0403 = icmp ult ptr %scevgep323, %scevgep329
  %bound1404 = icmp ult ptr %scevgep328, %scevgep324
  %found.conflict405 = and i1 %bound0403, %bound1404
  %conflict.rdx410 = or i1 %conflict.rdx402, %found.conflict405
  %bound0411 = icmp ult ptr %scevgep323, %scevgep331
  %bound1412 = icmp ult ptr %scevgep330, %scevgep324
  %found.conflict413 = and i1 %bound0411, %bound1412
  %conflict.rdx414 = or i1 %conflict.rdx410, %found.conflict413
  %bound0419 = icmp ult ptr %scevgep323, %scevgep333
  %bound1420 = icmp ult ptr %scevgep332, %scevgep324
  %found.conflict421 = and i1 %bound0419, %bound1420
  %conflict.rdx422 = or i1 %conflict.rdx414, %found.conflict421
  %bound0423 = icmp ult ptr %scevgep323, %scevgep335
  %bound1424 = icmp ult ptr %scevgep334, %scevgep324
  %found.conflict425 = and i1 %bound0423, %bound1424
  %conflict.rdx426 = or i1 %conflict.rdx422, %found.conflict425
  %bound0427 = icmp ult ptr %scevgep323, %scevgep337
  %bound1428 = icmp ult ptr %scevgep336, %scevgep324
  %found.conflict429 = and i1 %bound0427, %bound1428
  %conflict.rdx430 = or i1 %conflict.rdx426, %found.conflict429
  %bound0431 = icmp ult ptr %scevgep323, %scevgep339
  %bound1432 = icmp ult ptr %scevgep338, %scevgep324
  %found.conflict433 = and i1 %bound0431, %bound1432
  %conflict.rdx434 = or i1 %conflict.rdx430, %found.conflict433
  %bound0435 = icmp ult ptr %scevgep323, %scevgep341
  %bound1436 = icmp ult ptr %scevgep340, %scevgep324
  %found.conflict437 = and i1 %bound0435, %bound1436
  %conflict.rdx438 = or i1 %conflict.rdx434, %found.conflict437
  %bound0439 = icmp ult ptr %scevgep323, %scevgep343
  %bound1440 = icmp ult ptr %scevgep342, %scevgep324
  %found.conflict441 = and i1 %bound0439, %bound1440
  %conflict.rdx442 = or i1 %conflict.rdx438, %found.conflict441
  br i1 %conflict.rdx442, label %.lr.ph243.split.preheader, label %vector.main.loop.iter.check448

vector.main.loop.iter.check448:                   ; preds = %vector.memcheck320
  %min.iters.check447 = icmp ult i64 %110, 16
  br i1 %min.iters.check447, label %vec.epilog.ph471, label %vector.ph449

vector.ph449:                                     ; preds = %vector.main.loop.iter.check448
  %n.vec451 = and i64 %110, -16
  br label %vector.body452

vector.body452:                                   ; preds = %vector.body452, %vector.ph449
  %index453 = phi i64 [ 0, %vector.ph449 ], [ %index.next467, %vector.body452 ]
  %offset.idx454 = or disjoint i64 %index453, 1
  %128 = getelementptr inbounds i8, ptr %0, i64 %index453
  %129 = getelementptr inbounds i8, ptr %0, i64 %offset.idx454
  %130 = or disjoint i64 %index453, 2
  %131 = getelementptr inbounds i8, ptr %0, i64 %130
  %132 = getelementptr inbounds i8, ptr %5, i64 %offset.idx454
  %133 = getelementptr inbounds i8, ptr %128, i64 1
  %wide.load455 = load <16 x i8>, ptr %133, align 1, !tbaa !5, !alias.scope !11
  %134 = zext <16 x i8> %wide.load455 to <16 x i16>
  %wide.load456 = load <16 x i8>, ptr %128, align 1, !tbaa !5, !alias.scope !14
  %135 = zext <16 x i8> %wide.load456 to <16 x i16>
  %136 = getelementptr inbounds i8, ptr %129, i64 1
  %wide.load457 = load <16 x i8>, ptr %136, align 1, !tbaa !5, !alias.scope !16
  %137 = zext <16 x i8> %wide.load457 to <16 x i16>
  %wide.load458 = load <16 x i8>, ptr %129, align 1, !tbaa !5, !alias.scope !18
  %138 = zext <16 x i8> %wide.load458 to <16 x i16>
  %139 = getelementptr inbounds i8, ptr %131, i64 1
  %wide.load459 = load <16 x i8>, ptr %139, align 1, !tbaa !5, !alias.scope !20
  %140 = zext <16 x i8> %wide.load459 to <16 x i16>
  %wide.load460 = load <16 x i8>, ptr %131, align 1, !tbaa !5, !alias.scope !22
  %141 = zext <16 x i8> %wide.load460 to <16 x i16>
  %142 = add nuw nsw <16 x i16> %135, %134
  %143 = add nuw nsw <16 x i16> %142, %140
  %144 = add nuw nsw <16 x i16> %143, %141
  %145 = shl nuw nsw <16 x i16> %144, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %146 = add nuw nsw <16 x i16> %138, %137
  %147 = shl nuw nsw <16 x i16> %146, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
  %148 = add nuw nsw <16 x i16> %147, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %149 = add nuw nsw <16 x i16> %148, %145
  %150 = lshr <16 x i16> %149, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
  %151 = trunc <16 x i16> %150 to <16 x i8>
  store <16 x i8> %151, ptr %132, align 1, !tbaa !5, !alias.scope !24, !noalias !26
  %152 = getelementptr inbounds i8, ptr %128, i64 %108
  %wide.load461 = load <16 x i8>, ptr %152, align 1, !tbaa !5, !alias.scope !34
  %153 = zext <16 x i8> %wide.load461 to <16 x i16>
  %154 = getelementptr inbounds i8, ptr %128, i64 %107
  %wide.load462 = load <16 x i8>, ptr %154, align 1, !tbaa !5, !alias.scope !35
  %155 = zext <16 x i8> %wide.load462 to <16 x i16>
  %156 = getelementptr inbounds i8, ptr %129, i64 %108
  %wide.load463 = load <16 x i8>, ptr %156, align 1, !tbaa !5, !alias.scope !36
  %157 = zext <16 x i8> %wide.load463 to <16 x i16>
  %158 = getelementptr inbounds i8, ptr %129, i64 %107
  %wide.load464 = load <16 x i8>, ptr %158, align 1, !tbaa !5, !alias.scope !37
  %159 = zext <16 x i8> %wide.load464 to <16 x i16>
  %160 = getelementptr inbounds i8, ptr %131, i64 %108
  %wide.load465 = load <16 x i8>, ptr %160, align 1, !tbaa !5, !alias.scope !38
  %161 = zext <16 x i8> %wide.load465 to <16 x i16>
  %162 = getelementptr inbounds i8, ptr %131, i64 %107
  %wide.load466 = load <16 x i8>, ptr %162, align 1, !tbaa !5, !alias.scope !39
  %163 = zext <16 x i8> %wide.load466 to <16 x i16>
  %164 = add nuw nsw <16 x i16> %155, %153
  %165 = add nuw nsw <16 x i16> %164, %161
  %166 = add nuw nsw <16 x i16> %165, %163
  %167 = shl nuw nsw <16 x i16> %166, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %168 = add nuw nsw <16 x i16> %159, %157
  %169 = shl nuw nsw <16 x i16> %168, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
  %170 = add nuw nsw <16 x i16> %169, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %171 = add nuw nsw <16 x i16> %170, %167
  %172 = lshr <16 x i16> %171, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
  %173 = trunc <16 x i16> %172 to <16 x i8>
  %174 = getelementptr inbounds i8, ptr %132, i64 %107
  store <16 x i8> %173, ptr %174, align 1, !tbaa !5, !alias.scope !40, !noalias !41
  %index.next467 = add nuw i64 %index453, 16
  %175 = icmp eq i64 %index.next467, %n.vec451
  br i1 %175, label %middle.block443, label %vector.body452, !llvm.loop !42

middle.block443:                                  ; preds = %vector.body452
  %cmp.n468 = icmp eq i64 %110, %n.vec451
  br i1 %cmp.n468, label %.loopexit, label %vec.epilog.iter.check472

vec.epilog.iter.check472:                         ; preds = %middle.block443
  %ind.end479 = or disjoint i64 %n.vec451, 1
  %n.vec.remaining473 = and i64 %110, 8
  %min.epilog.iters.check474.not.not = icmp eq i64 %n.vec.remaining473, 0
  br i1 %min.epilog.iters.check474.not.not, label %.lr.ph243.split.preheader, label %vec.epilog.ph471

.lr.ph243.split.preheader:                        ; preds = %vec.epilog.middle.block469, %vector.memcheck320, %vector.scevcheck, %iter.check446, %vec.epilog.iter.check472
  %indvars.iv255.ph = phi i64 [ 1, %iter.check446 ], [ 1, %vector.memcheck320 ], [ 1, %vector.scevcheck ], [ %ind.end479, %vec.epilog.iter.check472 ], [ %ind.end478, %vec.epilog.middle.block469 ]
  br label %.lr.ph243.split

vec.epilog.ph471:                                 ; preds = %vector.main.loop.iter.check448, %vec.epilog.iter.check472
  %vec.epilog.resume.val475 = phi i64 [ %n.vec451, %vec.epilog.iter.check472 ], [ 0, %vector.main.loop.iter.check448 ]
  %n.vec477 = and i64 %110, -8
  %ind.end478 = or disjoint i64 %n.vec477, 1
  br label %vec.epilog.vector.body481

vec.epilog.vector.body481:                        ; preds = %vec.epilog.vector.body481, %vec.epilog.ph471
  %index482 = phi i64 [ %vec.epilog.resume.val475, %vec.epilog.ph471 ], [ %index.next496, %vec.epilog.vector.body481 ]
  %offset.idx483 = or disjoint i64 %index482, 1
  %176 = getelementptr inbounds i8, ptr %0, i64 %index482
  %177 = getelementptr inbounds i8, ptr %0, i64 %offset.idx483
  %178 = or disjoint i64 %index482, 2
  %179 = getelementptr inbounds i8, ptr %0, i64 %178
  %180 = getelementptr inbounds i8, ptr %5, i64 %offset.idx483
  %181 = getelementptr inbounds i8, ptr %176, i64 1
  %wide.load484 = load <8 x i8>, ptr %181, align 1, !tbaa !5, !alias.scope !45
  %182 = zext <8 x i8> %wide.load484 to <8 x i16>
  %wide.load485 = load <8 x i8>, ptr %176, align 1, !tbaa !5, !alias.scope !48
  %183 = zext <8 x i8> %wide.load485 to <8 x i16>
  %184 = getelementptr inbounds i8, ptr %177, i64 1
  %wide.load486 = load <8 x i8>, ptr %184, align 1, !tbaa !5, !alias.scope !50
  %185 = zext <8 x i8> %wide.load486 to <8 x i16>
  %wide.load487 = load <8 x i8>, ptr %177, align 1, !tbaa !5, !alias.scope !52
  %186 = zext <8 x i8> %wide.load487 to <8 x i16>
  %187 = getelementptr inbounds i8, ptr %179, i64 1
  %wide.load488 = load <8 x i8>, ptr %187, align 1, !tbaa !5, !alias.scope !54
  %188 = zext <8 x i8> %wide.load488 to <8 x i16>
  %wide.load489 = load <8 x i8>, ptr %179, align 1, !tbaa !5, !alias.scope !56
  %189 = zext <8 x i8> %wide.load489 to <8 x i16>
  %190 = add nuw nsw <8 x i16> %183, %182
  %191 = add nuw nsw <8 x i16> %190, %188
  %192 = add nuw nsw <8 x i16> %191, %189
  %193 = shl nuw nsw <8 x i16> %192, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %194 = add nuw nsw <8 x i16> %186, %185
  %195 = shl nuw nsw <8 x i16> %194, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
  %196 = add nuw nsw <8 x i16> %195, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %197 = add nuw nsw <8 x i16> %196, %193
  %198 = lshr <8 x i16> %197, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
  %199 = trunc <8 x i16> %198 to <8 x i8>
  store <8 x i8> %199, ptr %180, align 1, !tbaa !5, !alias.scope !58, !noalias !60
  %200 = getelementptr inbounds i8, ptr %176, i64 %108
  %wide.load490 = load <8 x i8>, ptr %200, align 1, !tbaa !5, !alias.scope !68
  %201 = zext <8 x i8> %wide.load490 to <8 x i16>
  %202 = getelementptr inbounds i8, ptr %176, i64 %107
  %wide.load491 = load <8 x i8>, ptr %202, align 1, !tbaa !5, !alias.scope !69
  %203 = zext <8 x i8> %wide.load491 to <8 x i16>
  %204 = getelementptr inbounds i8, ptr %177, i64 %108
  %wide.load492 = load <8 x i8>, ptr %204, align 1, !tbaa !5, !alias.scope !70
  %205 = zext <8 x i8> %wide.load492 to <8 x i16>
  %206 = getelementptr inbounds i8, ptr %177, i64 %107
  %wide.load493 = load <8 x i8>, ptr %206, align 1, !tbaa !5, !alias.scope !71
  %207 = zext <8 x i8> %wide.load493 to <8 x i16>
  %208 = getelementptr inbounds i8, ptr %179, i64 %108
  %wide.load494 = load <8 x i8>, ptr %208, align 1, !tbaa !5, !alias.scope !72
  %209 = zext <8 x i8> %wide.load494 to <8 x i16>
  %210 = getelementptr inbounds i8, ptr %179, i64 %107
  %wide.load495 = load <8 x i8>, ptr %210, align 1, !tbaa !5, !alias.scope !73
  %211 = zext <8 x i8> %wide.load495 to <8 x i16>
  %212 = add nuw nsw <8 x i16> %203, %201
  %213 = add nuw nsw <8 x i16> %212, %209
  %214 = add nuw nsw <8 x i16> %213, %211
  %215 = shl nuw nsw <8 x i16> %214, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
  %216 = add nuw nsw <8 x i16> %207, %205
  %217 = shl nuw nsw <8 x i16> %216, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
  %218 = add nuw nsw <8 x i16> %217, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
  %219 = add nuw nsw <8 x i16> %218, %215
  %220 = lshr <8 x i16> %219, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
  %221 = trunc <8 x i16> %220 to <8 x i8>
  %222 = getelementptr inbounds i8, ptr %180, i64 %107
  store <8 x i8> %221, ptr %222, align 1, !tbaa !5, !alias.scope !74, !noalias !75
  %index.next496 = add nuw i64 %index482, 8
  %223 = icmp eq i64 %index.next496, %n.vec477
  br i1 %223, label %vec.epilog.middle.block469, label %vec.epilog.vector.body481, !llvm.loop !76

vec.epilog.middle.block469:                       ; preds = %vec.epilog.vector.body481
  %cmp.n497 = icmp eq i64 %110, %n.vec477
  br i1 %cmp.n497, label %.loopexit, label %.lr.ph243.split.preheader

.lr.ph240.us.preheader:                           ; preds = %.lr.ph243
  %224 = sext i32 %4 to i64
  %wide.trip.count268 = zext i32 %38 to i64
  %wide.trip.count263 = zext i32 %102 to i64
  %225 = getelementptr i8, ptr %5, i64 %224
  %226 = add nsw i64 %wide.trip.count268, -1
  %227 = mul i64 %226, %224
  %228 = getelementptr i8, ptr %5, i64 %227
  %scevgep277 = getelementptr i8, ptr %228, i64 %wide.trip.count263
  %229 = shl nsw i64 %12, 1
  %scevgep278 = getelementptr i8, ptr %0, i64 %229
  %230 = mul nsw i64 %12, %wide.trip.count268
  %231 = getelementptr i8, ptr %0, i64 %230
  %232 = getelementptr i8, ptr %231, i64 %wide.trip.count263
  %233 = mul i64 %226, %12
  %234 = getelementptr i8, ptr %0, i64 %233
  %235 = getelementptr i8, ptr %234, i64 %wide.trip.count263
  %236 = add nsw i64 %wide.trip.count268, -2
  %237 = mul i64 %236, %12
  %238 = getelementptr i8, ptr %0, i64 %237
  %239 = getelementptr i8, ptr %238, i64 %wide.trip.count263
  %240 = add nsw i64 %wide.trip.count263, -1
  %min.iters.check = icmp ult i64 %240, 8
  %bound0 = icmp ult ptr %225, %232
  %bound1 = icmp ult ptr %scevgep278, %scevgep277
  %found.conflict = and i1 %bound0, %bound1
  %241 = or i32 %4, %3
  %242 = icmp slt i32 %241, 0
  %243 = or i1 %found.conflict, %242
  %bound0283 = icmp ult ptr %225, %235
  %bound1284 = icmp ult ptr %13, %scevgep277
  %found.conflict285 = and i1 %bound0283, %bound1284
  %244 = or i32 %4, %3
  %245 = icmp slt i32 %244, 0
  %246 = or i1 %found.conflict285, %245
  %conflict.rdx = or i1 %243, %246
  %bound0288 = icmp ult ptr %225, %239
  %bound1289 = icmp ugt ptr %scevgep277, %0
  %found.conflict290 = and i1 %bound0288, %bound1289
  %247 = or i32 %4, %3
  %248 = icmp slt i32 %247, 0
  %249 = or i1 %found.conflict290, %248
  %conflict.rdx293 = or i1 %conflict.rdx, %249
  %min.iters.check294 = icmp ult i64 %240, 16
  %n.vec = and i64 %240, -16
  %cmp.n = icmp eq i64 %240, %n.vec
  %ind.end305 = or disjoint i64 %n.vec, 1
  %n.vec.remaining = and i64 %240, 8
  %min.epilog.iters.check.not.not = icmp eq i64 %n.vec.remaining, 0
  %n.vec304 = and i64 %240, -8
  %ind.end = or disjoint i64 %n.vec304, 1
  %cmp.n318 = icmp eq i64 %240, %n.vec304
  br label %iter.check

iter.check:                                       ; preds = %.lr.ph240.us.preheader, %._crit_edge241.us
  %indvars.iv265 = phi i64 [ 1, %.lr.ph240.us.preheader ], [ %indvars.iv.next266, %._crit_edge241.us ]
  %250 = add nsw i64 %indvars.iv265, -1
  %251 = mul nsw i64 %250, %12
  %252 = getelementptr inbounds i8, ptr %0, i64 %251
  %253 = mul nsw i64 %indvars.iv265, %12
  %254 = getelementptr inbounds i8, ptr %0, i64 %253
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %255 = mul nsw i64 %indvars.iv.next266, %12
  %256 = getelementptr inbounds i8, ptr %0, i64 %255
  %257 = mul nsw i64 %indvars.iv265, %224
  %258 = getelementptr inbounds i8, ptr %5, i64 %257
  %brmerge = select i1 %min.iters.check, i1 true, i1 %conflict.rdx293
  br i1 %brmerge, label %vec.epilog.scalar.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  br i1 %min.iters.check294, label %vec.epilog.ph, label %vector.body

vector.body:                                      ; preds = %vector.main.loop.iter.check, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.main.loop.iter.check ]
  %offset.idx = or disjoint i64 %index, 1
  %259 = getelementptr inbounds i8, ptr %252, i64 %index
  %wide.load = load <16 x i8>, ptr %259, align 1, !tbaa !5, !alias.scope !77
  %260 = zext <16 x i8> %wide.load to <16 x i32>
  %261 = or disjoint i64 %index, 2
  %262 = getelementptr inbounds i8, ptr %252, i64 %261
  %wide.load295 = load <16 x i8>, ptr %262, align 1, !tbaa !5, !alias.scope !77
  %263 = zext <16 x i8> %wide.load295 to <16 x i32>
  %264 = getelementptr inbounds i8, ptr %252, i64 %offset.idx
  %wide.load296 = load <16 x i8>, ptr %264, align 1, !tbaa !5, !alias.scope !77
  %265 = zext <16 x i8> %wide.load296 to <16 x i32>
  %266 = getelementptr inbounds i8, ptr %254, i64 %index
  %wide.load297 = load <16 x i8>, ptr %266, align 1, !tbaa !5, !alias.scope !80
  %267 = zext <16 x i8> %wide.load297 to <16 x i32>
  %268 = getelementptr inbounds i8, ptr %254, i64 %261
  %wide.load298 = load <16 x i8>, ptr %268, align 1, !tbaa !5, !alias.scope !80
  %269 = zext <16 x i8> %wide.load298 to <16 x i32>
  %270 = getelementptr inbounds i8, ptr %254, i64 %offset.idx
  %wide.load299 = load <16 x i8>, ptr %270, align 1, !tbaa !5, !alias.scope !80
  %271 = zext <16 x i8> %wide.load299 to <16 x i32>
  %272 = shl nuw nsw <16 x i32> %271, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
  %273 = getelementptr inbounds i8, ptr %256, i64 %index
  %wide.load300 = load <16 x i8>, ptr %273, align 1, !tbaa !5, !alias.scope !82
  %274 = zext <16 x i8> %wide.load300 to <16 x i32>
  %275 = getelementptr inbounds i8, ptr %256, i64 %261
  %wide.load301 = load <16 x i8>, ptr %275, align 1, !tbaa !5, !alias.scope !82
  %276 = zext <16 x i8> %wide.load301 to <16 x i32>
  %277 = getelementptr inbounds i8, ptr %256, i64 %offset.idx
  %wide.load302 = load <16 x i8>, ptr %277, align 1, !tbaa !5, !alias.scope !82
  %278 = zext <16 x i8> %wide.load302 to <16 x i32>
  %279 = add nuw nsw <16 x i32> %267, %265
  %280 = add nuw nsw <16 x i32> %279, %269
  %281 = add nuw nsw <16 x i32> %280, %278
  %282 = shl nuw nsw <16 x i32> %281, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %283 = add nuw nsw <16 x i32> %260, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %284 = add nuw nsw <16 x i32> %283, %263
  %285 = add nuw nsw <16 x i32> %284, %272
  %286 = add nuw nsw <16 x i32> %285, %274
  %287 = add nuw nsw <16 x i32> %286, %276
  %288 = add nuw nsw <16 x i32> %287, %282
  %289 = lshr <16 x i32> %288, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
  %290 = trunc <16 x i32> %289 to <16 x i8>
  %291 = getelementptr inbounds i8, ptr %258, i64 %offset.idx
  store <16 x i8> %290, ptr %291, align 1, !tbaa !5, !alias.scope !84, !noalias !86
  %index.next = add nuw i64 %index, 16
  %292 = icmp eq i64 %index.next, %n.vec
  br i1 %292, label %middle.block, label %vector.body, !llvm.loop !87

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge241.us, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  br i1 %min.epilog.iters.check.not.not, label %vec.epilog.scalar.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index306 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next317, %vec.epilog.vector.body ]
  %offset.idx307 = or disjoint i64 %index306, 1
  %293 = getelementptr inbounds i8, ptr %252, i64 %index306
  %wide.load308 = load <8 x i8>, ptr %293, align 1, !tbaa !5, !alias.scope !88
  %294 = zext <8 x i8> %wide.load308 to <8 x i32>
  %295 = or disjoint i64 %index306, 2
  %296 = getelementptr inbounds i8, ptr %252, i64 %295
  %wide.load309 = load <8 x i8>, ptr %296, align 1, !tbaa !5, !alias.scope !88
  %297 = zext <8 x i8> %wide.load309 to <8 x i32>
  %298 = getelementptr inbounds i8, ptr %252, i64 %offset.idx307
  %wide.load310 = load <8 x i8>, ptr %298, align 1, !tbaa !5, !alias.scope !88
  %299 = zext <8 x i8> %wide.load310 to <8 x i32>
  %300 = getelementptr inbounds i8, ptr %254, i64 %index306
  %wide.load311 = load <8 x i8>, ptr %300, align 1, !tbaa !5, !alias.scope !91
  %301 = zext <8 x i8> %wide.load311 to <8 x i32>
  %302 = getelementptr inbounds i8, ptr %254, i64 %295
  %wide.load312 = load <8 x i8>, ptr %302, align 1, !tbaa !5, !alias.scope !91
  %303 = zext <8 x i8> %wide.load312 to <8 x i32>
  %304 = getelementptr inbounds i8, ptr %254, i64 %offset.idx307
  %wide.load313 = load <8 x i8>, ptr %304, align 1, !tbaa !5, !alias.scope !91
  %305 = zext <8 x i8> %wide.load313 to <8 x i32>
  %306 = shl nuw nsw <8 x i32> %305, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
  %307 = getelementptr inbounds i8, ptr %256, i64 %index306
  %wide.load314 = load <8 x i8>, ptr %307, align 1, !tbaa !5, !alias.scope !93
  %308 = zext <8 x i8> %wide.load314 to <8 x i32>
  %309 = getelementptr inbounds i8, ptr %256, i64 %295
  %wide.load315 = load <8 x i8>, ptr %309, align 1, !tbaa !5, !alias.scope !93
  %310 = zext <8 x i8> %wide.load315 to <8 x i32>
  %311 = getelementptr inbounds i8, ptr %256, i64 %offset.idx307
  %wide.load316 = load <8 x i8>, ptr %311, align 1, !tbaa !5, !alias.scope !93
  %312 = zext <8 x i8> %wide.load316 to <8 x i32>
  %313 = add nuw nsw <8 x i32> %301, %299
  %314 = add nuw nsw <8 x i32> %313, %303
  %315 = add nuw nsw <8 x i32> %314, %312
  %316 = shl nuw nsw <8 x i32> %315, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %317 = add nuw nsw <8 x i32> %294, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %318 = add nuw nsw <8 x i32> %317, %297
  %319 = add nuw nsw <8 x i32> %318, %306
  %320 = add nuw nsw <8 x i32> %319, %308
  %321 = add nuw nsw <8 x i32> %320, %310
  %322 = add nuw nsw <8 x i32> %321, %316
  %323 = lshr <8 x i32> %322, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
  %324 = trunc <8 x i32> %323 to <8 x i8>
  %325 = getelementptr inbounds i8, ptr %258, i64 %offset.idx307
  store <8 x i8> %324, ptr %325, align 1, !tbaa !5, !alias.scope !95, !noalias !97
  %index.next317 = add nuw i64 %index306, 8
  %326 = icmp eq i64 %index.next317, %n.vec304
  br i1 %326, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !98

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  br i1 %cmp.n318, label %._crit_edge241.us, label %vec.epilog.scalar.ph.preheader

vec.epilog.scalar.ph.preheader:                   ; preds = %iter.check, %vec.epilog.middle.block, %vec.epilog.iter.check
  %indvars.iv260.ph = phi i64 [ 1, %iter.check ], [ %ind.end305, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  br label %vec.epilog.scalar.ph

vec.epilog.scalar.ph:                             ; preds = %vec.epilog.scalar.ph.preheader, %vec.epilog.scalar.ph
  %indvars.iv260 = phi i64 [ %indvars.iv.next261, %vec.epilog.scalar.ph ], [ %indvars.iv260.ph, %vec.epilog.scalar.ph.preheader ]
  %327 = add nsw i64 %indvars.iv260, -1
  %328 = getelementptr inbounds i8, ptr %252, i64 %327
  %329 = load i8, ptr %328, align 1, !tbaa !5
  %330 = zext i8 %329 to i32
  %indvars.iv.next261 = add nuw nsw i64 %indvars.iv260, 1
  %331 = getelementptr inbounds i8, ptr %252, i64 %indvars.iv.next261
  %332 = load i8, ptr %331, align 1, !tbaa !5
  %333 = zext i8 %332 to i32
  %334 = getelementptr inbounds i8, ptr %252, i64 %indvars.iv260
  %335 = load i8, ptr %334, align 1, !tbaa !5
  %336 = zext i8 %335 to i32
  %337 = getelementptr inbounds i8, ptr %254, i64 %327
  %338 = load i8, ptr %337, align 1, !tbaa !5
  %339 = zext i8 %338 to i32
  %340 = getelementptr inbounds i8, ptr %254, i64 %indvars.iv.next261
  %341 = load i8, ptr %340, align 1, !tbaa !5
  %342 = zext i8 %341 to i32
  %343 = getelementptr inbounds i8, ptr %254, i64 %indvars.iv260
  %344 = load i8, ptr %343, align 1, !tbaa !5
  %345 = zext i8 %344 to i32
  %346 = shl nuw nsw i32 %345, 2
  %347 = getelementptr inbounds i8, ptr %256, i64 %327
  %348 = load i8, ptr %347, align 1, !tbaa !5
  %349 = zext i8 %348 to i32
  %350 = getelementptr inbounds i8, ptr %256, i64 %indvars.iv.next261
  %351 = load i8, ptr %350, align 1, !tbaa !5
  %352 = zext i8 %351 to i32
  %353 = getelementptr inbounds i8, ptr %256, i64 %indvars.iv260
  %354 = load i8, ptr %353, align 1, !tbaa !5
  %355 = zext i8 %354 to i32
  %356 = add nuw nsw i32 %339, %336
  %reass.add223.us = add nuw nsw i32 %356, %342
  %reass.add224.us = add nuw nsw i32 %reass.add223.us, %355
  %reass.mul225.us = shl nuw nsw i32 %reass.add224.us, 1
  %357 = add nuw nsw i32 %330, 8
  %358 = add nuw nsw i32 %357, %333
  %359 = add nuw nsw i32 %358, %346
  %360 = add nuw nsw i32 %359, %349
  %361 = add nuw nsw i32 %360, %352
  %362 = add nuw nsw i32 %361, %reass.mul225.us
  %363 = lshr i32 %362, 4
  %364 = trunc nuw i32 %363 to i8
  %365 = getelementptr inbounds i8, ptr %258, i64 %indvars.iv260
  store i8 %364, ptr %365, align 1, !tbaa !5
  %exitcond264.not = icmp eq i64 %indvars.iv.next261, %wide.trip.count263
  br i1 %exitcond264.not, label %._crit_edge241.us, label %vec.epilog.scalar.ph, !llvm.loop !99

._crit_edge241.us:                                ; preds = %vec.epilog.scalar.ph, %vec.epilog.middle.block, %middle.block
  %366 = getelementptr inbounds i8, ptr %252, i64 1
  %367 = load i8, ptr %366, align 1, !tbaa !5
  %368 = zext i8 %367 to i16
  %369 = load i8, ptr %252, align 1, !tbaa !5
  %370 = zext i8 %369 to i16
  %371 = getelementptr inbounds i8, ptr %254, i64 1
  %372 = load i8, ptr %371, align 1, !tbaa !5
  %373 = zext i8 %372 to i16
  %374 = load i8, ptr %254, align 1, !tbaa !5
  %375 = zext i8 %374 to i16
  %376 = getelementptr inbounds i8, ptr %256, i64 1
  %377 = load i8, ptr %376, align 1, !tbaa !5
  %378 = zext i8 %377 to i16
  %379 = load i8, ptr %256, align 1, !tbaa !5
  %380 = zext i8 %379 to i16
  %reass.add.us = add nuw nsw i16 %370, %368
  %381 = add nuw nsw i16 %reass.add.us, %378
  %reass.add215.us = add nuw nsw i16 %381, %380
  %reass.mul.us = shl nuw nsw i16 %reass.add215.us, 1
  %reass.add216.us = add nuw nsw i16 %375, %373
  %reass.mul217.us = shl nuw nsw i16 %reass.add216.us, 2
  %382 = add nuw nsw i16 %reass.mul217.us, 8
  %383 = add nuw nsw i16 %382, %reass.mul.us
  %384 = lshr i16 %383, 4
  %385 = trunc nuw i16 %384 to i8
  store i8 %385, ptr %258, align 1, !tbaa !5
  %386 = getelementptr inbounds i8, ptr %252, i64 %105
  %387 = load i8, ptr %386, align 1, !tbaa !5
  %388 = zext i8 %387 to i16
  %389 = getelementptr inbounds i8, ptr %252, i64 %106
  %390 = load i8, ptr %389, align 1, !tbaa !5
  %391 = zext i8 %390 to i16
  %392 = getelementptr inbounds i8, ptr %254, i64 %105
  %393 = load i8, ptr %392, align 1, !tbaa !5
  %394 = zext i8 %393 to i16
  %395 = getelementptr inbounds i8, ptr %254, i64 %106
  %396 = load i8, ptr %395, align 1, !tbaa !5
  %397 = zext i8 %396 to i16
  %398 = getelementptr inbounds i8, ptr %256, i64 %105
  %399 = load i8, ptr %398, align 1, !tbaa !5
  %400 = zext i8 %399 to i16
  %401 = getelementptr inbounds i8, ptr %256, i64 %106
  %402 = load i8, ptr %401, align 1, !tbaa !5
  %403 = zext i8 %402 to i16
  %reass.add218.us = add nuw nsw i16 %391, %388
  %404 = add nuw nsw i16 %reass.add218.us, %400
  %reass.add219.us = add nuw nsw i16 %404, %403
  %reass.mul220.us = shl nuw nsw i16 %reass.add219.us, 1
  %reass.add221.us = add nuw nsw i16 %397, %394
  %reass.mul222.us = shl nuw nsw i16 %reass.add221.us, 2
  %405 = add nuw nsw i16 %reass.mul222.us, 8
  %406 = add nuw nsw i16 %405, %reass.mul220.us
  %407 = lshr i16 %406, 4
  %408 = trunc nuw i16 %407 to i8
  %409 = getelementptr inbounds i8, ptr %258, i64 %106
  store i8 %408, ptr %409, align 1, !tbaa !5
  %exitcond269.not = icmp eq i64 %indvars.iv.next266, %wide.trip.count268
  br i1 %exitcond269.not, label %.loopexit, label %iter.check, !llvm.loop !100

.thread214:                                       ; preds = %.thread214.peel, %.thread214
  %indvars.iv247 = phi i64 [ %411, %.thread214 ], [ 1, %.thread214.peel ]
  %410 = icmp eq i64 %indvars.iv247, %47
  %411 = add nuw nsw i64 %indvars.iv247, 1
  %412 = trunc nuw nsw i64 %411 to i32
  %413 = select i1 %410, i32 %46, i32 %412
  %414 = trunc i64 %indvars.iv247 to i32
  %415 = add i32 %414, -1
  %416 = select i1 %410, i32 %46, i32 %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i8, ptr %37, i64 %417
  %419 = load i8, ptr %418, align 1, !tbaa !5
  %420 = zext i8 %419 to i32
  %421 = sext i32 %413 to i64
  %422 = getelementptr inbounds i8, ptr %37, i64 %421
  %423 = load i8, ptr %422, align 1, !tbaa !5
  %424 = zext i8 %423 to i32
  %425 = getelementptr inbounds i8, ptr %37, i64 %indvars.iv247
  %426 = load i8, ptr %425, align 1, !tbaa !5
  %427 = zext i8 %426 to i32
  %428 = shl nuw nsw i32 %427, 1
  %429 = getelementptr inbounds i8, ptr %41, i64 %417
  %430 = load i8, ptr %429, align 1, !tbaa !5
  %431 = zext i8 %430 to i32
  %432 = getelementptr inbounds i8, ptr %41, i64 %421
  %433 = load i8, ptr %432, align 1, !tbaa !5
  %434 = zext i8 %433 to i32
  %435 = getelementptr inbounds i8, ptr %41, i64 %indvars.iv247
  %436 = load i8, ptr %435, align 1, !tbaa !5
  %437 = zext i8 %436 to i32
  %438 = shl nuw nsw i32 %437, 2
  %439 = add nuw nsw i32 %424, %420
  %reass.add227 = add nuw nsw i32 %439, %428
  %440 = add nuw nsw i32 %reass.add227, %431
  %reass.add228 = add nuw nsw i32 %440, %434
  %reass.mul229 = shl nuw nsw i32 %reass.add228, 1
  %441 = add nuw nsw i32 %438, 8
  %442 = add nuw nsw i32 %441, %reass.mul229
  %443 = lshr i32 %442, 4
  %444 = trunc nuw i32 %443 to i8
  %445 = getelementptr inbounds i8, ptr %44, i64 %indvars.iv247
  store i8 %444, ptr %445, align 1, !tbaa !5
  %exitcond251.not = icmp eq i64 %411, %wide.trip.count250
  br i1 %exitcond251.not, label %.preheader, label %.thread214, !llvm.loop !101

.lr.ph243.split:                                  ; preds = %.lr.ph243.split.preheader, %.lr.ph243.split
  %indvars.iv255 = phi i64 [ %indvars.iv.next256, %.lr.ph243.split ], [ %indvars.iv255.ph, %.lr.ph243.split.preheader ]
  %446 = add nsw i64 %indvars.iv255, -1
  %447 = mul nsw i64 %446, %12
  %448 = getelementptr inbounds i8, ptr %0, i64 %447
  %449 = mul nsw i64 %indvars.iv255, %12
  %450 = getelementptr inbounds i8, ptr %0, i64 %449
  %indvars.iv.next256 = add nuw nsw i64 %indvars.iv255, 1
  %451 = mul nsw i64 %indvars.iv.next256, %12
  %452 = getelementptr inbounds i8, ptr %0, i64 %451
  %453 = mul nsw i64 %indvars.iv255, %109
  %454 = getelementptr inbounds i8, ptr %5, i64 %453
  %455 = getelementptr inbounds i8, ptr %448, i64 1
  %456 = load i8, ptr %455, align 1, !tbaa !5
  %457 = zext i8 %456 to i16
  %458 = load i8, ptr %448, align 1, !tbaa !5
  %459 = zext i8 %458 to i16
  %460 = getelementptr inbounds i8, ptr %450, i64 1
  %461 = load i8, ptr %460, align 1, !tbaa !5
  %462 = zext i8 %461 to i16
  %463 = load i8, ptr %450, align 1, !tbaa !5
  %464 = zext i8 %463 to i16
  %465 = getelementptr inbounds i8, ptr %452, i64 1
  %466 = load i8, ptr %465, align 1, !tbaa !5
  %467 = zext i8 %466 to i16
  %468 = load i8, ptr %452, align 1, !tbaa !5
  %469 = zext i8 %468 to i16
  %reass.add = add nuw nsw i16 %459, %457
  %470 = add nuw nsw i16 %reass.add, %467
  %reass.add215 = add nuw nsw i16 %470, %469
  %reass.mul = shl nuw nsw i16 %reass.add215, 1
  %reass.add216 = add nuw nsw i16 %464, %462
  %reass.mul217 = shl nuw nsw i16 %reass.add216, 2
  %471 = add nuw nsw i16 %reass.mul217, 8
  %472 = add nuw nsw i16 %471, %reass.mul
  %473 = lshr i16 %472, 4
  %474 = trunc nuw i16 %473 to i8
  store i8 %474, ptr %454, align 1, !tbaa !5
  %475 = getelementptr inbounds i8, ptr %448, i64 %108
  %476 = load i8, ptr %475, align 1, !tbaa !5
  %477 = zext i8 %476 to i16
  %478 = getelementptr inbounds i8, ptr %448, i64 %107
  %479 = load i8, ptr %478, align 1, !tbaa !5
  %480 = zext i8 %479 to i16
  %481 = getelementptr inbounds i8, ptr %450, i64 %108
  %482 = load i8, ptr %481, align 1, !tbaa !5
  %483 = zext i8 %482 to i16
  %484 = getelementptr inbounds i8, ptr %450, i64 %107
  %485 = load i8, ptr %484, align 1, !tbaa !5
  %486 = zext i8 %485 to i16
  %487 = getelementptr inbounds i8, ptr %452, i64 %108
  %488 = load i8, ptr %487, align 1, !tbaa !5
  %489 = zext i8 %488 to i16
  %490 = getelementptr inbounds i8, ptr %452, i64 %107
  %491 = load i8, ptr %490, align 1, !tbaa !5
  %492 = zext i8 %491 to i16
  %reass.add218 = add nuw nsw i16 %480, %477
  %493 = add nuw nsw i16 %reass.add218, %489
  %reass.add219 = add nuw nsw i16 %493, %492
  %reass.mul220 = shl nuw nsw i16 %reass.add219, 1
  %reass.add221 = add nuw nsw i16 %486, %483
  %reass.mul222 = shl nuw nsw i16 %reass.add221, 2
  %494 = add nuw nsw i16 %reass.mul222, 8
  %495 = add nuw nsw i16 %494, %reass.mul220
  %496 = lshr i16 %495, 4
  %497 = trunc nuw i16 %496 to i8
  %498 = getelementptr inbounds i8, ptr %454, i64 %107
  store i8 %497, ptr %498, align 1, !tbaa !5
  %exitcond259.not = icmp eq i64 %indvars.iv.next256, %wide.trip.count258
  br i1 %exitcond259.not, label %.loopexit, label %.lr.ph243.split, !llvm.loop !102

.loopexit:                                        ; preds = %._crit_edge241.us, %.lr.ph243.split, %middle.block443, %vec.epilog.middle.block469, %.preheader.thread, %.preheader, %9
  %.0 = phi i32 [ -1, %9 ], [ 0, %.preheader ], [ 0, %.preheader.thread ], [ 0, %vec.epilog.middle.block469 ], [ 0, %middle.block443 ], [ 0, %.lr.ph243.split ], [ 0, %._crit_edge241.us ]
  ret i32 %.0
}

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

attributes #0 = { nofree nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9, !10}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!"llvm.loop.peeled.count", i32 1}
!11 = !{!12}
!12 = distinct !{!12, !13}
!13 = distinct !{!13, !"LVerDomain"}
!14 = !{!15}
!15 = distinct !{!15, !13}
!16 = !{!17}
!17 = distinct !{!17, !13}
!18 = !{!19}
!19 = distinct !{!19, !13}
!20 = !{!21}
!21 = distinct !{!21, !13}
!22 = !{!23}
!23 = distinct !{!23, !13}
!24 = !{!25}
!25 = distinct !{!25, !13}
!26 = !{!27, !12, !15, !17, !19, !21, !23, !28, !29, !30, !31, !32, !33}
!27 = distinct !{!27, !13}
!28 = distinct !{!28, !13}
!29 = distinct !{!29, !13}
!30 = distinct !{!30, !13}
!31 = distinct !{!31, !13}
!32 = distinct !{!32, !13}
!33 = distinct !{!33, !13}
!34 = !{!28}
!35 = !{!29}
!36 = !{!30}
!37 = !{!31}
!38 = !{!32}
!39 = !{!33}
!40 = !{!27}
!41 = !{!12, !15, !17, !19, !21, !23, !28, !29, !30, !31, !32, !33}
!42 = distinct !{!42, !9, !43, !44}
!43 = !{!"llvm.loop.isvectorized", i32 1}
!44 = !{!"llvm.loop.unroll.runtime.disable"}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49}
!49 = distinct !{!49, !47}
!50 = !{!51}
!51 = distinct !{!51, !47}
!52 = !{!53}
!53 = distinct !{!53, !47}
!54 = !{!55}
!55 = distinct !{!55, !47}
!56 = !{!57}
!57 = distinct !{!57, !47}
!58 = !{!59}
!59 = distinct !{!59, !47}
!60 = !{!61, !46, !49, !51, !53, !55, !57, !62, !63, !64, !65, !66, !67}
!61 = distinct !{!61, !47}
!62 = distinct !{!62, !47}
!63 = distinct !{!63, !47}
!64 = distinct !{!64, !47}
!65 = distinct !{!65, !47}
!66 = distinct !{!66, !47}
!67 = distinct !{!67, !47}
!68 = !{!62}
!69 = !{!63}
!70 = !{!64}
!71 = !{!65}
!72 = !{!66}
!73 = !{!67}
!74 = !{!61}
!75 = !{!46, !49, !51, !53, !55, !57, !62, !63, !64, !65, !66, !67}
!76 = distinct !{!76, !9, !43, !44}
!77 = !{!78}
!78 = distinct !{!78, !79}
!79 = distinct !{!79, !"LVerDomain"}
!80 = !{!81}
!81 = distinct !{!81, !79}
!82 = !{!83}
!83 = distinct !{!83, !79}
!84 = !{!85}
!85 = distinct !{!85, !79}
!86 = !{!83, !81, !78}
!87 = distinct !{!87, !9, !43, !44}
!88 = !{!89}
!89 = distinct !{!89, !90}
!90 = distinct !{!90, !"LVerDomain"}
!91 = !{!92}
!92 = distinct !{!92, !90}
!93 = !{!94}
!94 = distinct !{!94, !90}
!95 = !{!96}
!96 = distinct !{!96, !90}
!97 = !{!94, !92, !89}
!98 = distinct !{!98, !9, !43, !44}
!99 = distinct !{!99, !9, !43}
!100 = distinct !{!100, !9}
!101 = distinct !{!101, !9, !10}
!102 = distinct !{!102, !9, !43}


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