; LLVM IR from mobile-algorithm-optimization/guide :: OpenCLGaussian/main.ll (Z28Gauss3x3Sigma0U8C1RemainDataPhiiiiiS_)

; 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.18 = external hidden unnamed_addr constant [39 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 i32 @printf(ptr noundef, ...) #1

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z28Gauss3x3Sigma0U8C1RemainDataPhiiiiiS_(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef %6) #2 {
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i16, align 2
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i32 %1, ptr %10, align 4, !tbaa !9
  store i32 %2, ptr %11, align 4, !tbaa !9
  store i32 %3, ptr %12, align 4, !tbaa !9
  store i32 %4, ptr %13, align 4, !tbaa !9
  store i32 %5, ptr %14, align 4, !tbaa !9
  store ptr %6, ptr %15, align 8, !tbaa !5
  %23 = load ptr, ptr %9, align 8, !tbaa !5
  %24 = icmp eq ptr null, %23
  br i1 %24, label %28, label %25

25:                                               ; preds = %7
  %26 = load ptr, ptr %15, align 8, !tbaa !5
  %27 = icmp eq ptr null, %26
  br i1 %27, label %28, label %30

28:                                               ; preds = %25, %7
  %29 = call i32 (ptr, ...) @printf(ptr noundef @.str.18)
  store i32 -1, ptr %8, align 4
  br label %346

30:                                               ; preds = %25
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  store ptr null, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  store ptr null, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  store ptr null, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %31 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %31, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #3
  store i16 0, ptr %22, align 2, !tbaa !11
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %32

32:                                               ; preds = %110, %30
  %33 = load i32, ptr %20, align 4, !tbaa !9
  %34 = load i32, ptr %11, align 4, !tbaa !9
  %35 = icmp slt i32 %33, %34
  br i1 %35, label %36, label %113

36:                                               ; preds = %32
  %37 = load ptr, ptr %9, align 8, !tbaa !5
  %38 = load i32, ptr %20, align 4, !tbaa !9
  %39 = load i32, ptr %13, align 4, !tbaa !9
  %40 = mul nsw i32 %38, %39
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds i8, ptr %37, i64 %41
  store ptr %42, ptr %17, align 8, !tbaa !5
  %43 = load ptr, ptr %17, align 8, !tbaa !5
  %44 = load i32, ptr %20, align 4, !tbaa !9
  %45 = sub nsw i32 %44, 1
  %46 = icmp slt i32 %45, 0
  %47 = zext i1 %46 to i64
  %48 = select i1 %46, i32 1, i32 -1
  %49 = load i32, ptr %13, align 4, !tbaa !9
  %50 = mul nsw i32 %48, %49
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds i8, ptr %43, i64 %51
  store ptr %52, ptr %16, align 8, !tbaa !5
  %53 = load ptr, ptr %17, align 8, !tbaa !5
  %54 = load i32, ptr %20, align 4, !tbaa !9
  %55 = add nsw i32 %54, 1
  %56 = load i32, ptr %11, align 4, !tbaa !9
  %57 = sub nsw i32 %56, 1
  %58 = icmp sgt i32 %55, %57
  %59 = zext i1 %58 to i64
  %60 = select i1 %58, i32 -1, i32 1
  %61 = load i32, ptr %13, align 4, !tbaa !9
  %62 = mul nsw i32 %60, %61
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds i8, ptr %53, i64 %63
  store ptr %64, ptr %18, align 8, !tbaa !5
  %65 = load ptr, ptr %16, align 8, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %65, i64 0
  %67 = load i8, ptr %66, align 1, !tbaa !13
  %68 = zext i8 %67 to i32
  %69 = load ptr, ptr %16, align 8, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %69, i64 1
  %71 = load i8, ptr %70, align 1, !tbaa !13
  %72 = zext i8 %71 to i32
  %73 = add nsw i32 %68, %72
  %74 = shl i32 %73, 1
  %75 = load ptr, ptr %17, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 0
  %77 = load i8, ptr %76, align 1, !tbaa !13
  %78 = zext i8 %77 to i32
  %79 = load ptr, ptr %17, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 1
  %81 = load i8, ptr %80, align 1, !tbaa !13
  %82 = zext i8 %81 to i32
  %83 = add nsw i32 %78, %82
  %84 = shl i32 %83, 2
  %85 = add nsw i32 %74, %84
  %86 = load ptr, ptr %18, align 8, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %86, i64 0
  %88 = load i8, ptr %87, align 1, !tbaa !13
  %89 = zext i8 %88 to i32
  %90 = load ptr, ptr %18, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i64 1
  %92 = load i8, ptr %91, align 1, !tbaa !13
  %93 = zext i8 %92 to i32
  %94 = add nsw i32 %89, %93
  %95 = shl i32 %94, 1
  %96 = add nsw i32 %85, %95
  %97 = trunc i32 %96 to i16
  store i16 %97, ptr %22, align 2, !tbaa !11
  %98 = load i16, ptr %22, align 2, !tbaa !11
  %99 = zext i16 %98 to i32
  %100 = add nsw i32 %99, 8
  %101 = ashr i32 %100, 4
  %102 = and i32 %101, 255
  %103 = trunc i32 %102 to i8
  %104 = load ptr, ptr %19, align 8, !tbaa !5
  %105 = load i32, ptr %20, align 4, !tbaa !9
  %106 = load i32, ptr %14, align 4, !tbaa !9
  %107 = mul nsw i32 %105, %106
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds i8, ptr %104, i64 %108
  store i8 %103, ptr %109, align 1, !tbaa !13
  br label %110

110:                                              ; preds = %36
  %111 = load i32, ptr %20, align 4, !tbaa !9
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %20, align 4, !tbaa !9
  br label %32, !llvm.loop !14

113:                                              ; preds = %32
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %199, %113
  %115 = load i32, ptr %20, align 4, !tbaa !9
  %116 = load i32, ptr %11, align 4, !tbaa !9
  %117 = icmp slt i32 %115, %116
  br i1 %117, label %118, label %202

118:                                              ; preds = %114
  %119 = load ptr, ptr %9, align 8, !tbaa !5
  %120 = load i32, ptr %20, align 4, !tbaa !9
  %121 = load i32, ptr %13, align 4, !tbaa !9
  %122 = mul nsw i32 %120, %121
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i8, ptr %119, i64 %123
  %125 = load i32, ptr %12, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %124, i64 %126
  %128 = getelementptr inbounds i8, ptr %127, i64 -1
  store ptr %128, ptr %17, align 8, !tbaa !5
  %129 = load ptr, ptr %17, align 8, !tbaa !5
  %130 = load i32, ptr %20, align 4, !tbaa !9
  %131 = sub nsw i32 %130, 1
  %132 = icmp slt i32 %131, 0
  %133 = zext i1 %132 to i64
  %134 = select i1 %132, i32 1, i32 -1
  %135 = load i32, ptr %13, align 4, !tbaa !9
  %136 = mul nsw i32 %134, %135
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds i8, ptr %129, i64 %137
  store ptr %138, ptr %16, align 8, !tbaa !5
  %139 = load ptr, ptr %17, align 8, !tbaa !5
  %140 = load i32, ptr %20, align 4, !tbaa !9
  %141 = add nsw i32 %140, 1
  %142 = load i32, ptr %11, align 4, !tbaa !9
  %143 = sub nsw i32 %142, 1
  %144 = icmp sgt i32 %141, %143
  %145 = zext i1 %144 to i64
  %146 = select i1 %144, i32 -1, i32 1
  %147 = load i32, ptr %13, align 4, !tbaa !9
  %148 = mul nsw i32 %146, %147
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds i8, ptr %139, i64 %149
  store ptr %150, ptr %18, align 8, !tbaa !5
  %151 = load ptr, ptr %16, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i64 0
  %153 = load i8, ptr %152, align 1, !tbaa !13
  %154 = zext i8 %153 to i32
  %155 = load ptr, ptr %16, align 8, !tbaa !5
  %156 = getelementptr inbounds i8, ptr %155, i64 -1
  %157 = load i8, ptr %156, align 1, !tbaa !13
  %158 = zext i8 %157 to i32
  %159 = add nsw i32 %154, %158
  %160 = shl i32 %159, 1
  %161 = load ptr, ptr %17, align 8, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %161, i64 0
  %163 = load i8, ptr %162, align 1, !tbaa !13
  %164 = zext i8 %163 to i32
  %165 = load ptr, ptr %17, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 -1
  %167 = load i8, ptr %166, align 1, !tbaa !13
  %168 = zext i8 %167 to i32
  %169 = add nsw i32 %164, %168
  %170 = shl i32 %169, 2
  %171 = add nsw i32 %160, %170
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = getelementptr inbounds i8, ptr %172, i64 0
  %174 = load i8, ptr %173, align 1, !tbaa !13
  %175 = zext i8 %174 to i32
  %176 = load ptr, ptr %18, align 8, !tbaa !5
  %177 = getelementptr inbounds i8, ptr %176, i64 -1
  %178 = load i8, ptr %177, align 1, !tbaa !13
  %179 = zext i8 %178 to i32
  %180 = add nsw i32 %175, %179
  %181 = shl i32 %180, 1
  %182 = add nsw i32 %171, %181
  %183 = trunc i32 %182 to i16
  store i16 %183, ptr %22, align 2, !tbaa !11
  %184 = load i16, ptr %22, align 2, !tbaa !11
  %185 = zext i16 %184 to i32
  %186 = add nsw i32 %185, 8
  %187 = ashr i32 %186, 4
  %188 = and i32 %187, 65535
  %189 = trunc i32 %188 to i8
  %190 = load ptr, ptr %19, align 8, !tbaa !5
  %191 = load i32, ptr %20, align 4, !tbaa !9
  %192 = load i32, ptr %14, align 4, !tbaa !9
  %193 = mul nsw i32 %191, %192
  %194 = load i32, ptr %12, align 4, !tbaa !9
  %195 = add nsw i32 %193, %194
  %196 = sub nsw i32 %195, 1
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds i8, ptr %190, i64 %197
  store i8 %189, ptr %198, align 1, !tbaa !13
  br label %199

199:                                              ; preds = %118
  %200 = load i32, ptr %20, align 4, !tbaa !9
  %201 = add nsw i32 %200, 1
  store i32 %201, ptr %20, align 4, !tbaa !9
  br label %114, !llvm.loop !16

202:                                              ; preds = %114
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %342, %202
  %204 = load i32, ptr %21, align 4, !tbaa !9
  %205 = load i32, ptr %11, align 4, !tbaa !9
  %206 = icmp slt i32 %204, %205
  br i1 %206, label %207, label %345

207:                                              ; preds = %203
  %208 = load ptr, ptr %9, align 8, !tbaa !5
  %209 = load i32, ptr %21, align 4, !tbaa !9
  %210 = load i32, ptr %13, align 4, !tbaa !9
  %211 = mul nsw i32 %209, %210
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i8, ptr %208, i64 %212
  store ptr %213, ptr %17, align 8, !tbaa !5
  %214 = load ptr, ptr %17, align 8, !tbaa !5
  %215 = load i32, ptr %21, align 4, !tbaa !9
  %216 = sub nsw i32 %215, 1
  %217 = icmp slt i32 %216, 0
  %218 = zext i1 %217 to i64
  %219 = select i1 %217, i32 1, i32 -1
  %220 = load i32, ptr %13, align 4, !tbaa !9
  %221 = mul nsw i32 %219, %220
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds i8, ptr %214, i64 %222
  store ptr %223, ptr %16, align 8, !tbaa !5
  %224 = load ptr, ptr %17, align 8, !tbaa !5
  %225 = load i32, ptr %21, align 4, !tbaa !9
  %226 = add nsw i32 %225, 1
  %227 = load i32, ptr %11, align 4, !tbaa !9
  %228 = sub nsw i32 %227, 1
  %229 = icmp sgt i32 %226, %228
  %230 = zext i1 %229 to i64
  %231 = select i1 %229, i32 -1, i32 1
  %232 = load i32, ptr %13, align 4, !tbaa !9
  %233 = mul nsw i32 %231, %232
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds i8, ptr %224, i64 %234
  store ptr %235, ptr %18, align 8, !tbaa !5
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = load i32, ptr %21, align 4, !tbaa !9
  %238 = load i32, ptr %14, align 4, !tbaa !9
  %239 = mul nsw i32 %237, %238
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i8, ptr %236, i64 %240
  store ptr %241, ptr %19, align 8, !tbaa !5
  %242 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %242, ptr %20, align 4, !tbaa !9
  br label %243

243:                                              ; preds = %338, %207
  %244 = load i32, ptr %20, align 4, !tbaa !9
  %245 = load i32, ptr %12, align 4, !tbaa !9
  %246 = sub nsw i32 %245, 1
  %247 = icmp slt i32 %244, %246
  br i1 %247, label %248, label %341

248:                                              ; preds = %243
  store i16 0, ptr %22, align 2, !tbaa !11
  %249 = load ptr, ptr %16, align 8, !tbaa !5
  %250 = load i32, ptr %20, align 4, !tbaa !9
  %251 = sub nsw i32 %250, 1
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i8, ptr %249, i64 %252
  %254 = load i8, ptr %253, align 1, !tbaa !13
  %255 = zext i8 %254 to i32
  %256 = load ptr, ptr %16, align 8, !tbaa !5
  %257 = load i32, ptr %20, align 4, !tbaa !9
  %258 = add nsw i32 %257, 1
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds i8, ptr %256, i64 %259
  %261 = load i8, ptr %260, align 1, !tbaa !13
  %262 = zext i8 %261 to i32
  %263 = add nsw i32 %255, %262
  %264 = load ptr, ptr %16, align 8, !tbaa !5
  %265 = load i32, ptr %20, align 4, !tbaa !9
  %266 = add nsw i32 %265, 0
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i8, ptr %264, i64 %267
  %269 = load i8, ptr %268, align 1, !tbaa !13
  %270 = zext i8 %269 to i32
  %271 = shl i32 %270, 1
  %272 = add nsw i32 %263, %271
  %273 = load ptr, ptr %17, align 8, !tbaa !5
  %274 = load i32, ptr %20, align 4, !tbaa !9
  %275 = sub nsw i32 %274, 1
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i8, ptr %273, i64 %276
  %278 = load i8, ptr %277, align 1, !tbaa !13
  %279 = zext i8 %278 to i32
  %280 = load ptr, ptr %17, align 8, !tbaa !5
  %281 = load i32, ptr %20, align 4, !tbaa !9
  %282 = add nsw i32 %281, 1
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds i8, ptr %280, i64 %283
  %285 = load i8, ptr %284, align 1, !tbaa !13
  %286 = zext i8 %285 to i32
  %287 = add nsw i32 %279, %286
  %288 = load ptr, ptr %17, align 8, !tbaa !5
  %289 = load i32, ptr %20, align 4, !tbaa !9
  %290 = add nsw i32 %289, 0
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i8, ptr %288, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !13
  %294 = zext i8 %293 to i32
  %295 = shl i32 %294, 1
  %296 = add nsw i32 %287, %295
  %297 = shl i32 %296, 1
  %298 = add nsw i32 %272, %297
  %299 = load ptr, ptr %18, align 8, !tbaa !5
  %300 = load i32, ptr %20, align 4, !tbaa !9
  %301 = sub nsw i32 %300, 1
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds i8, ptr %299, i64 %302
  %304 = load i8, ptr %303, align 1, !tbaa !13
  %305 = zext i8 %304 to i32
  %306 = add nsw i32 %298, %305
  %307 = load ptr, ptr %18, align 8, !tbaa !5
  %308 = load i32, ptr %20, align 4, !tbaa !9
  %309 = add nsw i32 %308, 1
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i8, ptr %307, i64 %310
  %312 = load i8, ptr %311, align 1, !tbaa !13
  %313 = zext i8 %312 to i32
  %314 = add nsw i32 %306, %313
  %315 = load ptr, ptr %18, align 8, !tbaa !5
  %316 = load i32, ptr %20, align 4, !tbaa !9
  %317 = add nsw i32 %316, 0
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i8, ptr %315, i64 %318
  %320 = load i8, ptr %319, align 1, !tbaa !13
  %321 = zext i8 %320 to i32
  %322 = shl i32 %321, 1
  %323 = add nsw i32 %314, %322
  %324 = load i16, ptr %22, align 2, !tbaa !11
  %325 = zext i16 %324 to i32
  %326 = add nsw i32 %325, %323
  %327 = trunc i32 %326 to i16
  store i16 %327, ptr %22, align 2, !tbaa !11
  %328 = load i16, ptr %22, align 2, !tbaa !11
  %329 = zext i16 %328 to i32
  %330 = add nsw i32 %329, 8
  %331 = ashr i32 %330, 4
  %332 = and i32 %331, 255
  %333 = trunc i32 %332 to i8
  %334 = load ptr, ptr %19, align 8, !tbaa !5
  %335 = load i32, ptr %20, align 4, !tbaa !9
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds i8, ptr %334, i64 %336
  store i8 %333, ptr %337, align 1, !tbaa !13
  br label %338

338:                                              ; preds = %248
  %339 = load i32, ptr %20, align 4, !tbaa !9
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %20, align 4, !tbaa !9
  br label %243, !llvm.loop !17

341:                                              ; preds = %243
  br label %342

342:                                              ; preds = %341
  %343 = load i32, ptr %21, align 4, !tbaa !9
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %21, align 4, !tbaa !9
  br label %203, !llvm.loop !18

345:                                              ; preds = %203
  store i32 0, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, 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
  br label %346

346:                                              ; preds = %345, %28
  %347 = load i32, ptr %8, align 4
  ret i32 %347
}

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 = { mustprogress 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 #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++ 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.18 = external hidden unnamed_addr constant [39 x i8], align 1

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

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

.preheader105:                                    ; preds = %7
  %10 = icmp sgt i32 %2, 0
  br i1 %10, label %.lr.ph, label %.loopexit103

.lr.ph:                                           ; preds = %.preheader105
  %11 = sub nsw i32 0, %4
  %12 = add nsw i32 %2, -1
  %13 = zext nneg i32 %12 to i64
  %14 = sext i32 %4 to i64
  %15 = sext i32 %5 to i64
  %wide.trip.count = zext nneg i32 %2 to i64
  %16 = getelementptr inbounds i8, ptr %0, i64 %14
  %.not101.peel.not = icmp eq i32 %2, 1
  %17 = select i1 %.not101.peel.not, i32 %11, i32 %4
  %18 = sext i32 %17 to i64
  %19 = getelementptr inbounds i8, ptr %0, i64 %18
  %20 = load i8, ptr %16, align 1, !tbaa !5
  %21 = zext i8 %20 to i16
  %22 = getelementptr inbounds i8, ptr %16, i64 1
  %23 = load i8, ptr %22, align 1, !tbaa !5
  %24 = zext i8 %23 to i16
  %25 = load i8, ptr %0, align 1, !tbaa !5
  %26 = zext i8 %25 to i16
  %27 = getelementptr inbounds i8, ptr %0, i64 1
  %28 = load i8, ptr %27, align 1, !tbaa !5
  %29 = zext i8 %28 to i16
  %30 = add nuw nsw i16 %29, %26
  %31 = shl nuw nsw i16 %30, 2
  %32 = load i8, ptr %19, align 1, !tbaa !5
  %33 = zext i8 %32 to i16
  %34 = getelementptr inbounds i8, ptr %19, i64 1
  %35 = load i8, ptr %34, align 1, !tbaa !5
  %36 = zext i8 %35 to i16
  %37 = add nuw nsw i16 %24, %21
  %38 = add nuw nsw i16 %37, %33
  %39 = add nuw nsw i16 %38, %36
  %40 = shl nuw nsw i16 %39, 1
  %41 = add nuw nsw i16 %31, 8
  %42 = add nuw nsw i16 %41, %40
  %43 = lshr i16 %42, 4
  %44 = trunc nuw i16 %43 to i8
  store i8 %44, ptr %6, align 1, !tbaa !5
  %exitcond.peel.not = icmp eq i32 %2, 1
  br i1 %exitcond.peel.not, label %.lr.ph108, label %.peel.next

.peel.next:                                       ; preds = %.lr.ph
  %45 = sext i32 %11 to i64
  br label %85

46:                                               ; preds = %7
  %47 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18)
  br label %.loopexit103

.preheader104:                                    ; preds = %85
  br i1 %10, label %.lr.ph108, label %.loopexit103

.lr.ph108:                                        ; preds = %.lr.ph, %.preheader104
  %invariant.gep137 = getelementptr i8, ptr %6, i64 -1
  %48 = sext i32 %3 to i64
  %invariant.gep109 = getelementptr i8, ptr %0, i64 %48
  %49 = sub nsw i32 0, %4
  %50 = add nsw i32 %2, -1
  %51 = zext nneg i32 %50 to i64
  %52 = sext i32 %4 to i64
  %53 = sext i32 %5 to i64
  %wide.trip.count121 = zext nneg i32 %2 to i64
  %54 = getelementptr inbounds i8, ptr %invariant.gep109, i64 -1
  %55 = getelementptr inbounds i8, ptr %54, i64 %52
  %.not100.peel.not = icmp eq i32 %2, 1
  %56 = select i1 %.not100.peel.not, i32 %49, i32 %4
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds i8, ptr %54, i64 %57
  %59 = load i8, ptr %55, align 1, !tbaa !5
  %60 = zext i8 %59 to i16
  %61 = getelementptr inbounds i8, ptr %55, i64 -1
  %62 = load i8, ptr %61, align 1, !tbaa !5
  %63 = zext i8 %62 to i16
  %64 = load i8, ptr %54, align 1, !tbaa !5
  %65 = zext i8 %64 to i16
  %66 = getelementptr inbounds i8, ptr %invariant.gep109, i64 -2
  %67 = load i8, ptr %66, align 1, !tbaa !5
  %68 = zext i8 %67 to i16
  %69 = add nuw nsw i16 %68, %65
  %70 = shl nuw nsw i16 %69, 2
  %71 = load i8, ptr %58, align 1, !tbaa !5
  %72 = zext i8 %71 to i16
  %73 = getelementptr inbounds i8, ptr %58, i64 -1
  %74 = load i8, ptr %73, align 1, !tbaa !5
  %75 = zext i8 %74 to i16
  %76 = add nuw nsw i16 %63, %60
  %77 = add nuw nsw i16 %76, %72
  %78 = add nuw nsw i16 %77, %75
  %79 = shl nuw nsw i16 %78, 1
  %80 = add nuw nsw i16 %70, 8
  %81 = add nuw nsw i16 %80, %79
  %82 = lshr i16 %81, 4
  %83 = trunc nuw i16 %82 to i8
  %gep.peel = getelementptr i8, ptr %invariant.gep137, i64 %48
  store i8 %83, ptr %gep.peel, align 1, !tbaa !5
  %exitcond122.peel.not = icmp eq i32 %2, 1
  br i1 %exitcond122.peel.not, label %.lr.ph114, label %.peel.next124

.peel.next124:                                    ; preds = %.lr.ph108
  %84 = sext i32 %49 to i64
  %invariant.gep141 = getelementptr i8, ptr %invariant.gep137, i64 %48
  br label %263

85:                                               ; preds = %.peel.next, %85
  %indvars.iv = phi i64 [ 1, %.peel.next ], [ %indvars.iv.next, %85 ]
  %86 = mul nsw i64 %indvars.iv, %14
  %87 = getelementptr inbounds i8, ptr %0, i64 %86
  %88 = getelementptr inbounds i8, ptr %87, i64 %45
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not101 = icmp ult i64 %indvars.iv, %13
  %89 = select i1 %.not101, i32 %4, i32 %11
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i8, ptr %87, i64 %90
  %92 = load i8, ptr %88, align 1, !tbaa !5
  %93 = zext i8 %92 to i16
  %94 = getelementptr inbounds i8, ptr %88, i64 1
  %95 = load i8, ptr %94, align 1, !tbaa !5
  %96 = zext i8 %95 to i16
  %97 = load i8, ptr %87, align 1, !tbaa !5
  %98 = zext i8 %97 to i16
  %99 = getelementptr inbounds i8, ptr %87, i64 1
  %100 = load i8, ptr %99, align 1, !tbaa !5
  %101 = zext i8 %100 to i16
  %102 = add nuw nsw i16 %101, %98
  %103 = shl nuw nsw i16 %102, 2
  %104 = load i8, ptr %91, align 1, !tbaa !5
  %105 = zext i8 %104 to i16
  %106 = getelementptr inbounds i8, ptr %91, i64 1
  %107 = load i8, ptr %106, align 1, !tbaa !5
  %108 = zext i8 %107 to i16
  %109 = add nuw nsw i16 %96, %93
  %110 = add nuw nsw i16 %109, %105
  %111 = add nuw nsw i16 %110, %108
  %112 = shl nuw nsw i16 %111, 1
  %113 = add nuw nsw i16 %103, 8
  %114 = add nuw nsw i16 %113, %112
  %115 = lshr i16 %114, 4
  %116 = trunc nuw i16 %115 to i8
  %117 = mul nsw i64 %indvars.iv, %15
  %118 = getelementptr inbounds i8, ptr %6, i64 %117
  store i8 %116, ptr %118, align 1, !tbaa !5
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader104, label %85, !llvm.loop !8

.preheader:                                       ; preds = %263
  br i1 %10, label %.lr.ph114, label %.loopexit103

.lr.ph114:                                        ; preds = %.lr.ph108, %.preheader
  %119 = sub nsw i32 0, %4
  %120 = add nsw i32 %3, -1
  %121 = icmp sgt i32 %120, %1
  br i1 %121, label %.lr.ph112.us.preheader, label %.loopexit103

.lr.ph112.us.preheader:                           ; preds = %.lr.ph114
  %122 = add nsw i32 %2, -1
  %123 = sext i32 %1 to i64
  %124 = sext i32 %4 to i64
  %125 = zext nneg i32 %122 to i64
  %126 = sext i32 %5 to i64
  %wide.trip.count134 = zext nneg i32 %2 to i64
  %wide.trip.count129 = sext i32 %120 to i64
  %scevgep = getelementptr i8, ptr %6, i64 %123
  %127 = add nsw i64 %wide.trip.count, -1
  %128 = mul nsw i64 %127, %15
  %129 = getelementptr i8, ptr %6, i64 %128
  %scevgep143 = getelementptr i8, ptr %129, i64 %wide.trip.count129
  %130 = add nsw i64 %123, -1
  %scevgep148 = getelementptr i8, ptr %0, i64 %130
  %131 = mul nsw i64 %127, %14
  %132 = getelementptr i8, ptr %0, i64 %131
  %133 = getelementptr i8, ptr %132, i64 %wide.trip.count129
  %scevgep149 = getelementptr i8, ptr %133, i64 1
  %134 = sub nsw i64 %wide.trip.count129, %123
  %min.iters.check = icmp ult i64 %134, 8
  %135 = getelementptr i8, ptr %0, i64 %wide.trip.count129
  %136 = getelementptr i8, ptr %135, i64 1
  %137 = getelementptr i8, ptr %0, i64 %130
  %stride.check = icmp slt i32 %5, 0
  %bound0152 = icmp ult ptr %scevgep, %scevgep149
  %bound1153 = icmp ult ptr %scevgep148, %scevgep143
  %found.conflict154 = and i1 %bound0152, %bound1153
  %138 = or i32 %5, %4
  %139 = icmp slt i32 %138, 0
  %140 = or i1 %found.conflict154, %139
  %min.iters.check162 = icmp ult i64 %134, 16
  %n.vec = and i64 %134, -16
  %cmp.n = icmp eq i64 %134, %n.vec
  %ind.end173 = add nsw i64 %n.vec, %123
  %n.vec.remaining = and i64 %134, 8
  %min.epilog.iters.check.not.not = icmp eq i64 %n.vec.remaining, 0
  %n.vec172 = and i64 %134, -8
  %ind.end = add nsw i64 %n.vec172, %123
  %cmp.n186 = icmp eq i64 %134, %n.vec172
  br label %iter.check

iter.check:                                       ; preds = %.lr.ph112.us.preheader, %..loopexit_crit_edge.us
  %indvars.iv131 = phi i64 [ 0, %.lr.ph112.us.preheader ], [ %indvars.iv.next132, %..loopexit_crit_edge.us ]
  %141 = mul nsw i64 %indvars.iv131, %124
  %142 = getelementptr inbounds i8, ptr %0, i64 %141
  %143 = icmp eq i64 %indvars.iv131, 0
  %144 = select i1 %143, i32 %4, i32 %119
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i8, ptr %142, i64 %145
  %.not.us = icmp ult i64 %indvars.iv131, %125
  %147 = select i1 %.not.us, i32 %4, i32 %119
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds i8, ptr %142, i64 %148
  %150 = mul nsw i64 %indvars.iv131, %126
  %151 = getelementptr inbounds i8, ptr %6, i64 %150
  br i1 %min.iters.check, label %vec.epilog.scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %iter.check
  %152 = mul i64 %indvars.iv131, %14
  %scevgep146 = getelementptr i8, ptr %136, i64 %152
  %scevgep144 = getelementptr i8, ptr %137, i64 %152
  %scevgep145 = getelementptr i8, ptr %scevgep144, i64 %148
  %scevgep147 = getelementptr i8, ptr %scevgep146, i64 %148
  %scevgep150 = getelementptr i8, ptr %scevgep144, i64 %145
  %scevgep151 = getelementptr i8, ptr %scevgep146, i64 %145
  %bound0 = icmp ult ptr %scevgep, %scevgep147
  %bound1 = icmp ult ptr %scevgep145, %scevgep143
  %found.conflict = and i1 %bound0, %bound1
  %153 = or i1 %found.conflict, %stride.check
  %conflict.rdx = or i1 %153, %140
  %bound0157 = icmp ult ptr %scevgep, %scevgep151
  %bound1158 = icmp ult ptr %scevgep150, %scevgep143
  %found.conflict159 = and i1 %bound0157, %bound1158
  %conflict.rdx161 = or i1 %found.conflict159, %conflict.rdx
  br i1 %conflict.rdx161, label %vec.epilog.scalar.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.memcheck
  br i1 %min.iters.check162, 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 = add i64 %index, %123
  %154 = add nsw i64 %offset.idx, -1
  %155 = getelementptr inbounds i8, ptr %146, i64 %154
  %wide.load = load <16 x i8>, ptr %155, align 1, !tbaa !5, !alias.scope !11
  %156 = zext <16 x i8> %wide.load to <16 x i32>
  %157 = add nsw i64 %offset.idx, 1
  %158 = getelementptr inbounds i8, ptr %146, i64 %157
  %wide.load163 = load <16 x i8>, ptr %158, align 1, !tbaa !5, !alias.scope !11
  %159 = zext <16 x i8> %wide.load163 to <16 x i32>
  %160 = getelementptr inbounds i8, ptr %146, i64 %offset.idx
  %wide.load164 = load <16 x i8>, ptr %160, align 1, !tbaa !5, !alias.scope !11
  %161 = zext <16 x i8> %wide.load164 to <16 x i32>
  %162 = getelementptr inbounds i8, ptr %142, i64 %154
  %wide.load165 = load <16 x i8>, ptr %162, align 1, !tbaa !5, !alias.scope !14
  %163 = zext <16 x i8> %wide.load165 to <16 x i32>
  %164 = getelementptr inbounds i8, ptr %142, i64 %157
  %wide.load166 = load <16 x i8>, ptr %164, align 1, !tbaa !5, !alias.scope !14
  %165 = zext <16 x i8> %wide.load166 to <16 x i32>
  %166 = getelementptr inbounds i8, ptr %142, i64 %offset.idx
  %wide.load167 = load <16 x i8>, ptr %166, align 1, !tbaa !5, !alias.scope !14
  %167 = zext <16 x i8> %wide.load167 to <16 x i32>
  %168 = shl nuw nsw <16 x i32> %167, <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>
  %169 = getelementptr inbounds i8, ptr %149, i64 %154
  %wide.load168 = load <16 x i8>, ptr %169, align 1, !tbaa !5, !alias.scope !16
  %170 = zext <16 x i8> %wide.load168 to <16 x i32>
  %171 = getelementptr inbounds i8, ptr %149, i64 %157
  %wide.load169 = load <16 x i8>, ptr %171, align 1, !tbaa !5, !alias.scope !16
  %172 = zext <16 x i8> %wide.load169 to <16 x i32>
  %173 = getelementptr inbounds i8, ptr %149, i64 %offset.idx
  %wide.load170 = load <16 x i8>, ptr %173, align 1, !tbaa !5, !alias.scope !16
  %174 = zext <16 x i8> %wide.load170 to <16 x i32>
  %175 = add nuw nsw <16 x i32> %163, %161
  %176 = add nuw nsw <16 x i32> %175, %165
  %177 = add nuw nsw <16 x i32> %176, %174
  %178 = shl nuw nsw <16 x i32> %177, <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>
  %179 = add nuw nsw <16 x i32> %156, <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>
  %180 = add nuw nsw <16 x i32> %179, %159
  %181 = add nuw nsw <16 x i32> %180, %168
  %182 = add nuw nsw <16 x i32> %181, %170
  %183 = add nuw nsw <16 x i32> %182, %172
  %184 = add nuw nsw <16 x i32> %183, %178
  %185 = lshr <16 x i32> %184, <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>
  %186 = trunc <16 x i32> %185 to <16 x i8>
  %187 = getelementptr inbounds i8, ptr %151, i64 %offset.idx
  store <16 x i8> %186, ptr %187, align 1, !tbaa !5, !alias.scope !18, !noalias !20
  %index.next = add nuw i64 %index, 16
  %188 = icmp eq i64 %index.next, %n.vec
  br i1 %188, label %middle.block, label %vector.body, !llvm.loop !21

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %..loopexit_crit_edge.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
  %index174 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next185, %vec.epilog.vector.body ]
  %offset.idx175 = add i64 %index174, %123
  %189 = add nsw i64 %offset.idx175, -1
  %190 = getelementptr inbounds i8, ptr %146, i64 %189
  %wide.load176 = load <8 x i8>, ptr %190, align 1, !tbaa !5, !alias.scope !24
  %191 = zext <8 x i8> %wide.load176 to <8 x i32>
  %192 = add nsw i64 %offset.idx175, 1
  %193 = getelementptr inbounds i8, ptr %146, i64 %192
  %wide.load177 = load <8 x i8>, ptr %193, align 1, !tbaa !5, !alias.scope !24
  %194 = zext <8 x i8> %wide.load177 to <8 x i32>
  %195 = getelementptr inbounds i8, ptr %146, i64 %offset.idx175
  %wide.load178 = load <8 x i8>, ptr %195, align 1, !tbaa !5, !alias.scope !24
  %196 = zext <8 x i8> %wide.load178 to <8 x i32>
  %197 = getelementptr inbounds i8, ptr %142, i64 %189
  %wide.load179 = load <8 x i8>, ptr %197, align 1, !tbaa !5, !alias.scope !27
  %198 = zext <8 x i8> %wide.load179 to <8 x i32>
  %199 = getelementptr inbounds i8, ptr %142, i64 %192
  %wide.load180 = load <8 x i8>, ptr %199, align 1, !tbaa !5, !alias.scope !27
  %200 = zext <8 x i8> %wide.load180 to <8 x i32>
  %201 = getelementptr inbounds i8, ptr %142, i64 %offset.idx175
  %wide.load181 = load <8 x i8>, ptr %201, align 1, !tbaa !5, !alias.scope !27
  %202 = zext <8 x i8> %wide.load181 to <8 x i32>
  %203 = shl nuw nsw <8 x i32> %202, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
  %204 = getelementptr inbounds i8, ptr %149, i64 %189
  %wide.load182 = load <8 x i8>, ptr %204, align 1, !tbaa !5, !alias.scope !29
  %205 = zext <8 x i8> %wide.load182 to <8 x i32>
  %206 = getelementptr inbounds i8, ptr %149, i64 %192
  %wide.load183 = load <8 x i8>, ptr %206, align 1, !tbaa !5, !alias.scope !29
  %207 = zext <8 x i8> %wide.load183 to <8 x i32>
  %208 = getelementptr inbounds i8, ptr %149, i64 %offset.idx175
  %wide.load184 = load <8 x i8>, ptr %208, align 1, !tbaa !5, !alias.scope !29
  %209 = zext <8 x i8> %wide.load184 to <8 x i32>
  %210 = add nuw nsw <8 x i32> %198, %196
  %211 = add nuw nsw <8 x i32> %210, %200
  %212 = add nuw nsw <8 x i32> %211, %209
  %213 = shl nuw nsw <8 x i32> %212, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %214 = add nuw nsw <8 x i32> %191, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %215 = add nuw nsw <8 x i32> %214, %194
  %216 = add nuw nsw <8 x i32> %215, %203
  %217 = add nuw nsw <8 x i32> %216, %205
  %218 = add nuw nsw <8 x i32> %217, %207
  %219 = add nuw nsw <8 x i32> %218, %213
  %220 = lshr <8 x i32> %219, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>
  %221 = trunc <8 x i32> %220 to <8 x i8>
  %222 = getelementptr inbounds i8, ptr %151, i64 %offset.idx175
  store <8 x i8> %221, ptr %222, align 1, !tbaa !5, !alias.scope !31, !noalias !33
  %index.next185 = add nuw i64 %index174, 8
  %223 = icmp eq i64 %index.next185, %n.vec172
  br i1 %223, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !34

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

vec.epilog.scalar.ph.preheader:                   ; preds = %vec.epilog.middle.block, %vector.memcheck, %iter.check, %vec.epilog.iter.check
  %indvars.iv126.ph = phi i64 [ %123, %iter.check ], [ %123, %vector.memcheck ], [ %ind.end173, %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.iv126 = phi i64 [ %indvars.iv.next127, %vec.epilog.scalar.ph ], [ %indvars.iv126.ph, %vec.epilog.scalar.ph.preheader ]
  %224 = add nsw i64 %indvars.iv126, -1
  %225 = getelementptr inbounds i8, ptr %146, i64 %224
  %226 = load i8, ptr %225, align 1, !tbaa !5
  %227 = zext i8 %226 to i32
  %indvars.iv.next127 = add nsw i64 %indvars.iv126, 1
  %228 = getelementptr inbounds i8, ptr %146, i64 %indvars.iv.next127
  %229 = load i8, ptr %228, align 1, !tbaa !5
  %230 = zext i8 %229 to i32
  %231 = getelementptr inbounds i8, ptr %146, i64 %indvars.iv126
  %232 = load i8, ptr %231, align 1, !tbaa !5
  %233 = zext i8 %232 to i32
  %234 = getelementptr inbounds i8, ptr %142, i64 %224
  %235 = load i8, ptr %234, align 1, !tbaa !5
  %236 = zext i8 %235 to i32
  %237 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv.next127
  %238 = load i8, ptr %237, align 1, !tbaa !5
  %239 = zext i8 %238 to i32
  %240 = getelementptr inbounds i8, ptr %142, i64 %indvars.iv126
  %241 = load i8, ptr %240, align 1, !tbaa !5
  %242 = zext i8 %241 to i32
  %243 = shl nuw nsw i32 %242, 2
  %244 = getelementptr inbounds i8, ptr %149, i64 %224
  %245 = load i8, ptr %244, align 1, !tbaa !5
  %246 = zext i8 %245 to i32
  %247 = getelementptr inbounds i8, ptr %149, i64 %indvars.iv.next127
  %248 = load i8, ptr %247, align 1, !tbaa !5
  %249 = zext i8 %248 to i32
  %250 = getelementptr inbounds i8, ptr %149, i64 %indvars.iv126
  %251 = load i8, ptr %250, align 1, !tbaa !5
  %252 = zext i8 %251 to i32
  %253 = add nuw nsw i32 %236, %233
  %reass.add.us = add nuw nsw i32 %253, %239
  %reass.add102.us = add nuw nsw i32 %reass.add.us, %252
  %reass.mul.us = shl nuw nsw i32 %reass.add102.us, 1
  %254 = add nuw nsw i32 %227, 8
  %255 = add nuw nsw i32 %254, %230
  %256 = add nuw nsw i32 %255, %243
  %257 = add nuw nsw i32 %256, %246
  %258 = add nuw nsw i32 %257, %249
  %259 = add nuw nsw i32 %258, %reass.mul.us
  %260 = lshr i32 %259, 4
  %261 = trunc nuw i32 %260 to i8
  %262 = getelementptr inbounds i8, ptr %151, i64 %indvars.iv126
  store i8 %261, ptr %262, align 1, !tbaa !5
  %exitcond130.not = icmp eq i64 %indvars.iv.next127, %wide.trip.count129
  br i1 %exitcond130.not, label %..loopexit_crit_edge.us, label %vec.epilog.scalar.ph, !llvm.loop !35

..loopexit_crit_edge.us:                          ; preds = %vec.epilog.scalar.ph, %vec.epilog.middle.block, %middle.block
  %indvars.iv.next132 = add nuw nsw i64 %indvars.iv131, 1
  %exitcond135.not = icmp eq i64 %indvars.iv.next132, %wide.trip.count134
  br i1 %exitcond135.not, label %.loopexit103, label %iter.check, !llvm.loop !36

263:                                              ; preds = %.peel.next124, %263
  %indvars.iv118 = phi i64 [ 1, %.peel.next124 ], [ %indvars.iv.next119, %263 ]
  %264 = mul nsw i64 %indvars.iv118, %52
  %gep110 = getelementptr i8, ptr %invariant.gep109, i64 %264
  %265 = getelementptr inbounds i8, ptr %gep110, i64 -1
  %266 = getelementptr inbounds i8, ptr %265, i64 %84
  %indvars.iv.next119 = add nuw nsw i64 %indvars.iv118, 1
  %.not100 = icmp ult i64 %indvars.iv118, %51
  %267 = select i1 %.not100, i32 %4, i32 %49
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i8, ptr %265, i64 %268
  %270 = load i8, ptr %266, align 1, !tbaa !5
  %271 = zext i8 %270 to i16
  %272 = getelementptr inbounds i8, ptr %266, i64 -1
  %273 = load i8, ptr %272, align 1, !tbaa !5
  %274 = zext i8 %273 to i16
  %275 = load i8, ptr %265, align 1, !tbaa !5
  %276 = zext i8 %275 to i16
  %277 = getelementptr inbounds i8, ptr %gep110, i64 -2
  %278 = load i8, ptr %277, align 1, !tbaa !5
  %279 = zext i8 %278 to i16
  %280 = add nuw nsw i16 %279, %276
  %281 = shl nuw nsw i16 %280, 2
  %282 = load i8, ptr %269, align 1, !tbaa !5
  %283 = zext i8 %282 to i16
  %284 = getelementptr inbounds i8, ptr %269, i64 -1
  %285 = load i8, ptr %284, align 1, !tbaa !5
  %286 = zext i8 %285 to i16
  %287 = add nuw nsw i16 %274, %271
  %288 = add nuw nsw i16 %287, %283
  %289 = add nuw nsw i16 %288, %286
  %290 = shl nuw nsw i16 %289, 1
  %291 = add nuw nsw i16 %281, 8
  %292 = add nuw nsw i16 %291, %290
  %293 = lshr i16 %292, 4
  %294 = trunc nuw i16 %293 to i8
  %295 = mul nsw i64 %indvars.iv118, %53
  %gep142 = getelementptr i8, ptr %invariant.gep141, i64 %295
  store i8 %294, ptr %gep142, align 1, !tbaa !5
  %exitcond122.not = icmp eq i64 %indvars.iv.next119, %wide.trip.count121
  br i1 %exitcond122.not, label %.preheader, label %263, !llvm.loop !37

.loopexit103:                                     ; preds = %..loopexit_crit_edge.us, %.preheader105, %.preheader104, %.lr.ph114, %.preheader, %46
  %.095 = phi i32 [ -1, %46 ], [ 0, %.preheader ], [ 0, %.lr.ph114 ], [ 0, %.preheader104 ], [ 0, %.preheader105 ], [ 0, %..loopexit_crit_edge.us ]
  ret i32 %.095
}

attributes #0 = { 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" }
attributes #1 = { mustprogress 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" }

!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++ 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 = !{!17, !15, !12}
!21 = distinct !{!21, !9, !22, !23}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = !{!28}
!28 = distinct !{!28, !26}
!29 = !{!30}
!30 = distinct !{!30, !26}
!31 = !{!32}
!32 = distinct !{!32, !26}
!33 = !{!30, !28, !25}
!34 = distinct !{!34, !9, !22, !23}
!35 = distinct !{!35, !9, !22}
!36 = distinct !{!36, !9}
!37 = distinct !{!37, !9, !10}


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