; LLVM IR from cpuimage/cpuimagelib :: cpuimage (CPUImageSharpenFilter)

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @ycbcr2rgb(i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @CPUImageBoxBlurFilter(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #4

; Function Attrs: nounwind uwtable
define dso_local void @CPUImageSharpenFilter(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, float noundef %5, i32 noundef %6, i32 noundef %7) #4 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca float, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca [65536 x i8], align 16
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i8, align 1
  %34 = alloca i8, align 1
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  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 float %5, ptr %14, align 4, !tbaa !11
  store i32 %6, ptr %15, align 4, !tbaa !9
  store i32 %7, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %49 = load i32, ptr %13, align 4, !tbaa !9
  %50 = load i32, ptr %11, align 4, !tbaa !9
  %51 = sdiv i32 %49, %50
  store i32 %51, ptr %17, align 4, !tbaa !9
  %52 = load i32, ptr %16, align 4, !tbaa !9
  %53 = icmp slt i32 %52, 100
  br i1 %53, label %54, label %56

54:                                               ; preds = %8
  %55 = load i32, ptr %16, align 4, !tbaa !9
  br label %57

56:                                               ; preds = %8
  br label %57

57:                                               ; preds = %56, %54
  %58 = phi i32 [ %55, %54 ], [ 100, %56 ]
  %59 = icmp sgt i32 %58, 0
  br i1 %59, label %60, label %68

60:                                               ; preds = %57
  %61 = load i32, ptr %16, align 4, !tbaa !9
  %62 = icmp slt i32 %61, 100
  br i1 %62, label %63, label %65

63:                                               ; preds = %60
  %64 = load i32, ptr %16, align 4, !tbaa !9
  br label %66

65:                                               ; preds = %60
  br label %66

66:                                               ; preds = %65, %63
  %67 = phi i32 [ %64, %63 ], [ 100, %65 ]
  br label %69

68:                                               ; preds = %57
  br label %69

69:                                               ; preds = %68, %66
  %70 = phi i32 [ %67, %66 ], [ 0, %68 ]
  store i32 %70, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %71 = load i32, ptr %16, align 4, !tbaa !9
  %72 = sub nsw i32 100, %71
  %73 = mul nsw i32 256, %72
  %74 = sdiv i32 %73, 100
  store i32 %74, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %75 = load i32, ptr %16, align 4, !tbaa !9
  %76 = sub nsw i32 100, %75
  %77 = sub nsw i32 100, %76
  %78 = mul nsw i32 256, %77
  %79 = sdiv i32 %78, 100
  store i32 %79, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 65536, ptr %20) #5
  call void @llvm.memset.p0.i64(ptr align 16 %20, i8 0, i64 65536, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %80

80:                                               ; preds = %186, %69
  %81 = load i32, ptr %21, align 4, !tbaa !9
  %82 = icmp ult i32 %81, 256
  br i1 %82, label %84, label %83

83:                                               ; preds = %80
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %189

84:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %85 = getelementptr inbounds [65536 x i8], ptr %20, i64 0, i64 0
  %86 = load i32, ptr %21, align 4, !tbaa !9
  %87 = shl i32 %86, 8
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %85, i64 %88
  store ptr %89, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %90

90:                                               ; preds = %182, %84
  %91 = load i32, ptr %24, align 4, !tbaa !9
  %92 = icmp ult i32 %91, 256
  br i1 %92, label %94, label %93

93:                                               ; preds = %90
  store i32 5, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %185

94:                                               ; preds = %90
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #5
  %95 = load i32, ptr %15, align 4, !tbaa !9
  %96 = load i32, ptr %21, align 4, !tbaa !9
  %97 = load i32, ptr %24, align 4, !tbaa !9
  %98 = sub i32 %96, %97
  %99 = mul i32 %95, %98
  %100 = add i32 %99, 128
  %101 = icmp ult i32 %100, 255
  br i1 %101, label %102, label %109

102:                                              ; preds = %94
  %103 = load i32, ptr %15, align 4, !tbaa !9
  %104 = load i32, ptr %21, align 4, !tbaa !9
  %105 = load i32, ptr %24, align 4, !tbaa !9
  %106 = sub i32 %104, %105
  %107 = mul i32 %103, %106
  %108 = add i32 %107, 128
  br label %119

109:                                              ; preds = %94
  %110 = load i32, ptr %15, align 4, !tbaa !9
  %111 = load i32, ptr %21, align 4, !tbaa !9
  %112 = load i32, ptr %24, align 4, !tbaa !9
  %113 = sub i32 %111, %112
  %114 = mul i32 %110, %113
  %115 = add i32 %114, 128
  %116 = icmp ult i32 %115, 0
  %117 = zext i1 %116 to i64
  %118 = select i1 %116, i32 0, i32 255
  br label %119

119:                                              ; preds = %109, %102
  %120 = phi i32 [ %108, %102 ], [ %118, %109 ]
  %121 = trunc i32 %120 to i8
  store i8 %121, ptr %25, align 1, !tbaa !13
  %122 = load i32, ptr %21, align 4, !tbaa !9
  %123 = icmp ule i32 %122, 128
  br i1 %123, label %124, label %130

124:                                              ; preds = %119
  %125 = load i8, ptr %25, align 1, !tbaa !13
  %126 = zext i8 %125 to i32
  %127 = load i32, ptr %21, align 4, !tbaa !9
  %128 = mul i32 %126, %127
  %129 = udiv i32 %128, 128
  br label %139

130:                                              ; preds = %119
  %131 = load i8, ptr %25, align 1, !tbaa !13
  %132 = zext i8 %131 to i32
  %133 = sub nsw i32 255, %132
  %134 = load i32, ptr %21, align 4, !tbaa !9
  %135 = sub i32 255, %134
  %136 = mul i32 %133, %135
  %137 = udiv i32 %136, 128
  %138 = sub i32 255, %137
  br label %139

139:                                              ; preds = %130, %124
  %140 = phi i32 [ %129, %124 ], [ %138, %130 ]
  %141 = trunc i32 %140 to i8
  store i8 %141, ptr %25, align 1, !tbaa !13
  %142 = load i32, ptr %21, align 4, !tbaa !9
  %143 = load i32, ptr %18, align 4, !tbaa !9
  %144 = mul i32 %142, %143
  %145 = load i8, ptr %25, align 1, !tbaa !13
  %146 = zext i8 %145 to i32
  %147 = load i32, ptr %19, align 4, !tbaa !9
  %148 = mul nsw i32 %146, %147
  %149 = add i32 %144, %148
  %150 = lshr i32 %149, 8
  %151 = icmp ult i32 %150, 255
  br i1 %151, label %152, label %162

152:                                              ; preds = %139
  %153 = load i32, ptr %21, align 4, !tbaa !9
  %154 = load i32, ptr %18, align 4, !tbaa !9
  %155 = mul i32 %153, %154
  %156 = load i8, ptr %25, align 1, !tbaa !13
  %157 = zext i8 %156 to i32
  %158 = load i32, ptr %19, align 4, !tbaa !9
  %159 = mul nsw i32 %157, %158
  %160 = add i32 %155, %159
  %161 = lshr i32 %160, 8
  br label %175

162:                                              ; preds = %139
  %163 = load i32, ptr %21, align 4, !tbaa !9
  %164 = load i32, ptr %18, align 4, !tbaa !9
  %165 = mul i32 %163, %164
  %166 = load i8, ptr %25, align 1, !tbaa !13
  %167 = zext i8 %166 to i32
  %168 = load i32, ptr %19, align 4, !tbaa !9
  %169 = mul nsw i32 %167, %168
  %170 = add i32 %165, %169
  %171 = lshr i32 %170, 8
  %172 = icmp ult i32 %171, 0
  %173 = zext i1 %172 to i64
  %174 = select i1 %172, i32 0, i32 255
  br label %175

175:                                              ; preds = %162, %152
  %176 = phi i32 [ %161, %152 ], [ %174, %162 ]
  %177 = trunc i32 %176 to i8
  %178 = load ptr, ptr %23, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %178, i64 0
  store i8 %177, ptr %179, align 1, !tbaa !13
  %180 = load ptr, ptr %23, align 8, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %180, i32 1
  store ptr %181, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #5
  br label %182

182:                                              ; preds = %175
  %183 = load i32, ptr %24, align 4, !tbaa !9
  %184 = add i32 %183, 1
  store i32 %184, ptr %24, align 4, !tbaa !9
  br label %90, !llvm.loop !14

185:                                              ; preds = %93
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %186

186:                                              ; preds = %185
  %187 = load i32, ptr %21, align 4, !tbaa !9
  %188 = add i32 %187, 1
  store i32 %188, ptr %21, align 4, !tbaa !9
  br label %80, !llvm.loop !16

189:                                              ; preds = %83
  %190 = load i32, ptr %17, align 4, !tbaa !9
  switch i32 %190, label %492 [
    i32 4, label %191
    i32 3, label %191
    i32 1, label %409
  ]

191:                                              ; preds = %189, %189
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %192 = load i32, ptr %11, align 4, !tbaa !9
  %193 = load i32, ptr %12, align 4, !tbaa !9
  %194 = mul nsw i32 %192, %193
  %195 = sext i32 %194 to i64
  %196 = mul i64 %195, 1
  %197 = call noalias ptr @malloc(i64 noundef %196) #6
  store ptr %197, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %198 = load i32, ptr %11, align 4, !tbaa !9
  %199 = load i32, ptr %12, align 4, !tbaa !9
  %200 = mul nsw i32 %198, %199
  %201 = sext i32 %200 to i64
  %202 = mul i64 %201, 1
  %203 = call noalias ptr @malloc(i64 noundef %202) #6
  store ptr %203, ptr %27, align 8, !tbaa !5
  %204 = load ptr, ptr %27, align 8, !tbaa !5
  %205 = icmp eq ptr %204, null
  br i1 %205, label %209, label %206

206:                                              ; preds = %191
  %207 = load ptr, ptr %26, align 8, !tbaa !5
  %208 = icmp eq ptr %207, null
  br i1 %208, label %209, label %220

209:                                              ; preds = %206, %191
  %210 = load ptr, ptr %26, align 8, !tbaa !5
  %211 = icmp ne ptr %210, null
  br i1 %211, label %212, label %214

212:                                              ; preds = %209
  %213 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %213) #5
  br label %214

214:                                              ; preds = %212, %209
  %215 = load ptr, ptr %27, align 8, !tbaa !5
  %216 = icmp ne ptr %215, null
  br i1 %216, label %217, label %219

217:                                              ; preds = %214
  %218 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %218) #5
  br label %219

219:                                              ; preds = %217, %214
  store i32 1, ptr %22, align 4
  br label %407

220:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %221

221:                                              ; preds = %289, %220
  %222 = load i32, ptr %28, align 4, !tbaa !9
  %223 = load i32, ptr %12, align 4, !tbaa !9
  %224 = icmp slt i32 %222, %223
  br i1 %224, label %226, label %225

225:                                              ; preds = %221
  store i32 9, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %292

226:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %227 = load ptr, ptr %9, align 8, !tbaa !5
  %228 = load i32, ptr %28, align 4, !tbaa !9
  %229 = load i32, ptr %13, align 4, !tbaa !9
  %230 = mul nsw i32 %228, %229
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %227, i64 %231
  store ptr %232, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %233 = load ptr, ptr %26, align 8, !tbaa !5
  %234 = load i32, ptr %28, align 4, !tbaa !9
  %235 = load i32, ptr %11, align 4, !tbaa !9
  %236 = mul nsw i32 %234, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i8, ptr %233, i64 %237
  store ptr %238, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %239 = load ptr, ptr %27, align 8, !tbaa !5
  %240 = load i32, ptr %28, align 4, !tbaa !9
  %241 = load i32, ptr %11, align 4, !tbaa !9
  %242 = mul nsw i32 %240, %241
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds i8, ptr %239, i64 %243
  store ptr %244, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %245

245:                                              ; preds = %285, %226
  %246 = load i32, ptr %32, align 4, !tbaa !9
  %247 = load i32, ptr %11, align 4, !tbaa !9
  %248 = icmp slt i32 %246, %247
  br i1 %248, label %250, label %249

249:                                              ; preds = %245
  store i32 12, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %288

250:                                              ; preds = %245
  %251 = load ptr, ptr %29, align 8, !tbaa !5
  %252 = getelementptr inbounds i8, ptr %251, i64 0
  %253 = load i8, ptr %252, align 1, !tbaa !13
  %254 = zext i8 %253 to i32
  %255 = mul nsw i32 19595, %254
  %256 = load ptr, ptr %29, align 8, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %256, i64 1
  %258 = load i8, ptr %257, align 1, !tbaa !13
  %259 = zext i8 %258 to i32
  %260 = mul nsw i32 38470, %259
  %261 = add nsw i32 %255, %260
  %262 = load ptr, ptr %29, align 8, !tbaa !5
  %263 = getelementptr inbounds i8, ptr %262, i64 2
  %264 = load i8, ptr %263, align 1, !tbaa !13
  %265 = zext i8 %264 to i32
  %266 = mul nsw i32 7471, %265
  %267 = add nsw i32 %261, %266
  %268 = ashr i32 %267, 16
  %269 = trunc i32 %268 to i8
  %270 = load ptr, ptr %30, align 8, !tbaa !5
  %271 = getelementptr inbounds i8, ptr %270, i64 0
  store i8 %269, ptr %271, align 1, !tbaa !13
  %272 = load ptr, ptr %30, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %272, i64 0
  %274 = load i8, ptr %273, align 1, !tbaa !13
  %275 = load ptr, ptr %31, align 8, !tbaa !5
  %276 = getelementptr inbounds i8, ptr %275, i64 0
  store i8 %274, ptr %276, align 1, !tbaa !13
  %277 = load i32, ptr %17, align 4, !tbaa !9
  %278 = load ptr, ptr %29, align 8, !tbaa !5
  %279 = sext i32 %277 to i64
  %280 = getelementptr inbounds i8, ptr %278, i64 %279
  store ptr %280, ptr %29, align 8, !tbaa !5
  %281 = load ptr, ptr %30, align 8, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %281, i32 1
  store ptr %282, ptr %30, align 8, !tbaa !5
  %283 = load ptr, ptr %31, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i32 1
  store ptr %284, ptr %31, align 8, !tbaa !5
  br label %285

285:                                              ; preds = %250
  %286 = load i32, ptr %32, align 4, !tbaa !9
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr %32, align 4, !tbaa !9
  br label %245, !llvm.loop !17

288:                                              ; preds = %249
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %28, align 4, !tbaa !9
  %291 = add nsw i32 %290, 1
  store i32 %291, ptr %28, align 4, !tbaa !9
  br label %221, !llvm.loop !18

292:                                              ; preds = %225
  %293 = load ptr, ptr %26, align 8, !tbaa !5
  %294 = load ptr, ptr %27, align 8, !tbaa !5
  %295 = load i32, ptr %11, align 4, !tbaa !9
  %296 = load i32, ptr %12, align 4, !tbaa !9
  %297 = load i32, ptr %11, align 4, !tbaa !9
  %298 = load float, ptr %14, align 4, !tbaa !11
  %299 = fptosi float %298 to i32
  call void @CPUImageBoxBlurFilter(ptr noundef %293, ptr noundef %294, i32 noundef %295, i32 noundef %296, i32 noundef %297, i32 noundef %299)
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %300

300:                                              ; preds = %401, %292
  %301 = load i32, ptr %35, align 4, !tbaa !9
  %302 = load i32, ptr %12, align 4, !tbaa !9
  %303 = icmp slt i32 %301, %302
  br i1 %303, label %305, label %304

304:                                              ; preds = %300
  store i32 15, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %404

305:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %306 = load ptr, ptr %9, align 8, !tbaa !5
  %307 = load i32, ptr %35, align 4, !tbaa !9
  %308 = load i32, ptr %13, align 4, !tbaa !9
  %309 = mul nsw i32 %307, %308
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i8, ptr %306, i64 %310
  store ptr %311, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %312 = load ptr, ptr %10, align 8, !tbaa !5
  %313 = load i32, ptr %35, align 4, !tbaa !9
  %314 = load i32, ptr %13, align 4, !tbaa !9
  %315 = mul nsw i32 %313, %314
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i8, ptr %312, i64 %316
  store ptr %317, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %318 = load ptr, ptr %26, align 8, !tbaa !5
  %319 = load i32, ptr %35, align 4, !tbaa !9
  %320 = load i32, ptr %11, align 4, !tbaa !9
  %321 = mul nsw i32 %319, %320
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds i8, ptr %318, i64 %322
  store ptr %323, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %324 = load ptr, ptr %27, align 8, !tbaa !5
  %325 = load i32, ptr %35, align 4, !tbaa !9
  %326 = load i32, ptr %11, align 4, !tbaa !9
  %327 = mul nsw i32 %325, %326
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i8, ptr %324, i64 %328
  store ptr %329, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %330

330:                                              ; preds = %397, %305
  %331 = load i32, ptr %40, align 4, !tbaa !9
  %332 = load i32, ptr %11, align 4, !tbaa !9
  %333 = icmp slt i32 %331, %332
  br i1 %333, label %335, label %334

334:                                              ; preds = %330
  store i32 18, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  br label %400

335:                                              ; preds = %330
  %336 = load ptr, ptr %36, align 8, !tbaa !5
  %337 = getelementptr inbounds i8, ptr %336, i64 2
  %338 = load i8, ptr %337, align 1, !tbaa !13
  %339 = zext i8 %338 to i32
  %340 = load ptr, ptr %38, align 8, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %340, i64 0
  %342 = load i8, ptr %341, align 1, !tbaa !13
  %343 = zext i8 %342 to i32
  %344 = sub nsw i32 %339, %343
  %345 = mul nsw i32 36962, %344
  %346 = ashr i32 %345, 16
  %347 = add nsw i32 %346, 128
  %348 = trunc i32 %347 to i8
  store i8 %348, ptr %33, align 1, !tbaa !13
  %349 = load ptr, ptr %36, align 8, !tbaa !5
  %350 = getelementptr inbounds i8, ptr %349, i64 0
  %351 = load i8, ptr %350, align 1, !tbaa !13
  %352 = zext i8 %351 to i32
  %353 = load ptr, ptr %38, align 8, !tbaa !5
  %354 = getelementptr inbounds i8, ptr %353, i64 0
  %355 = load i8, ptr %354, align 1, !tbaa !13
  %356 = zext i8 %355 to i32
  %357 = sub nsw i32 %352, %356
  %358 = mul nsw i32 46727, %357
  %359 = ashr i32 %358, 16
  %360 = add nsw i32 %359, 128
  %361 = trunc i32 %360 to i8
  store i8 %361, ptr %34, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %362 = getelementptr inbounds [65536 x i8], ptr %20, i64 0, i64 0
  %363 = load ptr, ptr %38, align 8, !tbaa !5
  %364 = getelementptr inbounds i8, ptr %363, i64 0
  %365 = load i8, ptr %364, align 1, !tbaa !13
  %366 = zext i8 %365 to i32
  %367 = shl i32 %366, 8
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i8, ptr %362, i64 %368
  store ptr %369, ptr %41, align 8, !tbaa !5
  %370 = load ptr, ptr %41, align 8, !tbaa !5
  %371 = load ptr, ptr %39, align 8, !tbaa !5
  %372 = getelementptr inbounds i8, ptr %371, i64 0
  %373 = load i8, ptr %372, align 1, !tbaa !13
  %374 = zext i8 %373 to i64
  %375 = getelementptr inbounds i8, ptr %370, i64 %374
  %376 = load i8, ptr %375, align 1, !tbaa !13
  %377 = load i8, ptr %33, align 1, !tbaa !13
  %378 = load i8, ptr %34, align 1, !tbaa !13
  %379 = load ptr, ptr %37, align 8, !tbaa !5
  %380 = getelementptr inbounds i8, ptr %379, i64 0
  %381 = load ptr, ptr %37, align 8, !tbaa !5
  %382 = getelementptr inbounds i8, ptr %381, i64 1
  %383 = load ptr, ptr %37, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i64 2
  call void @ycbcr2rgb(i8 noundef zeroext %376, i8 noundef zeroext %377, i8 noundef zeroext %378, ptr noundef %380, ptr noundef %382, ptr noundef %384)
  %385 = load ptr, ptr %38, align 8, !tbaa !5
  %386 = getelementptr inbounds i8, ptr %385, i32 1
  store ptr %386, ptr %38, align 8, !tbaa !5
  %387 = load ptr, ptr %39, align 8, !tbaa !5
  %388 = getelementptr inbounds i8, ptr %387, i32 1
  store ptr %388, ptr %39, align 8, !tbaa !5
  %389 = load i32, ptr %17, align 4, !tbaa !9
  %390 = load ptr, ptr %37, align 8, !tbaa !5
  %391 = sext i32 %389 to i64
  %392 = getelementptr inbounds i8, ptr %390, i64 %391
  store ptr %392, ptr %37, align 8, !tbaa !5
  %393 = load i32, ptr %17, align 4, !tbaa !9
  %394 = load ptr, ptr %36, align 8, !tbaa !5
  %395 = sext i32 %393 to i64
  %396 = getelementptr inbounds i8, ptr %394, i64 %395
  store ptr %396, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  br label %397

397:                                              ; preds = %335
  %398 = load i32, ptr %40, align 4, !tbaa !9
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %40, align 4, !tbaa !9
  br label %330, !llvm.loop !19

400:                                              ; preds = %334
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %401

401:                                              ; preds = %400
  %402 = load i32, ptr %35, align 4, !tbaa !9
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %35, align 4, !tbaa !9
  br label %300, !llvm.loop !20

404:                                              ; preds = %304
  %405 = load ptr, ptr %26, align 8, !tbaa !5
  call void @free(ptr noundef %405) #5
  %406 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %406) #5
  store i32 8, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #5
  br label %407

407:                                              ; preds = %404, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %408 = load i32, ptr %22, align 4
  switch i32 %408, label %494 [
    i32 8, label %493
  ]

409:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %410 = load i32, ptr %11, align 4, !tbaa !9
  %411 = load i32, ptr %12, align 4, !tbaa !9
  %412 = mul nsw i32 %410, %411
  %413 = sext i32 %412 to i64
  %414 = mul i64 %413, 1
  %415 = call noalias ptr @malloc(i64 noundef %414) #6
  store ptr %415, ptr %42, align 8, !tbaa !5
  %416 = load ptr, ptr %42, align 8, !tbaa !5
  %417 = icmp eq ptr %416, null
  br i1 %417, label %418, label %419

418:                                              ; preds = %409
  store i32 1, ptr %22, align 4
  br label %489

419:                                              ; preds = %409
  %420 = load ptr, ptr %9, align 8, !tbaa !5
  %421 = load ptr, ptr %42, align 8, !tbaa !5
  %422 = load i32, ptr %11, align 4, !tbaa !9
  %423 = load i32, ptr %12, align 4, !tbaa !9
  %424 = load i32, ptr %11, align 4, !tbaa !9
  %425 = load float, ptr %14, align 4, !tbaa !11
  %426 = fptosi float %425 to i32
  call void @CPUImageBoxBlurFilter(ptr noundef %420, ptr noundef %421, i32 noundef %422, i32 noundef %423, i32 noundef %424, i32 noundef %426)
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %427

427:                                              ; preds = %484, %419
  %428 = load i32, ptr %43, align 4, !tbaa !9
  %429 = load i32, ptr %12, align 4, !tbaa !9
  %430 = icmp slt i32 %428, %429
  br i1 %430, label %432, label %431

431:                                              ; preds = %427
  store i32 21, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  br label %487

432:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %433 = load ptr, ptr %9, align 8, !tbaa !5
  %434 = load i32, ptr %43, align 4, !tbaa !9
  %435 = load i32, ptr %11, align 4, !tbaa !9
  %436 = mul nsw i32 %434, %435
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i8, ptr %433, i64 %437
  store ptr %438, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %439 = load ptr, ptr %42, align 8, !tbaa !5
  %440 = load i32, ptr %43, align 4, !tbaa !9
  %441 = load i32, ptr %11, align 4, !tbaa !9
  %442 = mul nsw i32 %440, %441
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds i8, ptr %439, i64 %443
  store ptr %444, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %445 = load ptr, ptr %10, align 8, !tbaa !5
  %446 = load i32, ptr %43, align 4, !tbaa !9
  %447 = load i32, ptr %11, align 4, !tbaa !9
  %448 = mul nsw i32 %446, %447
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i8, ptr %445, i64 %449
  store ptr %450, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %480, %432
  %452 = load i32, ptr %47, align 4, !tbaa !9
  %453 = load i32, ptr %11, align 4, !tbaa !9
  %454 = icmp slt i32 %452, %453
  br i1 %454, label %456, label %455

455:                                              ; preds = %451
  store i32 24, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  br label %483

456:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %457 = getelementptr inbounds [65536 x i8], ptr %20, i64 0, i64 0
  %458 = load ptr, ptr %44, align 8, !tbaa !5
  %459 = getelementptr inbounds i8, ptr %458, i64 0
  %460 = load i8, ptr %459, align 1, !tbaa !13
  %461 = zext i8 %460 to i32
  %462 = shl i32 %461, 8
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds i8, ptr %457, i64 %463
  store ptr %464, ptr %48, align 8, !tbaa !5
  %465 = load ptr, ptr %48, align 8, !tbaa !5
  %466 = load ptr, ptr %46, align 8, !tbaa !5
  %467 = getelementptr inbounds i8, ptr %466, i64 0
  %468 = load i8, ptr %467, align 1, !tbaa !13
  %469 = zext i8 %468 to i64
  %470 = getelementptr inbounds i8, ptr %465, i64 %469
  %471 = load i8, ptr %470, align 1, !tbaa !13
  %472 = load ptr, ptr %46, align 8, !tbaa !5
  %473 = getelementptr inbounds i8, ptr %472, i64 0
  store i8 %471, ptr %473, align 1, !tbaa !13
  %474 = load ptr, ptr %45, align 8, !tbaa !5
  %475 = getelementptr inbounds i8, ptr %474, i32 1
  store ptr %475, ptr %45, align 8, !tbaa !5
  %476 = load ptr, ptr %46, align 8, !tbaa !5
  %477 = getelementptr inbounds i8, ptr %476, i32 1
  store ptr %477, ptr %46, align 8, !tbaa !5
  %478 = load ptr, ptr %44, align 8, !tbaa !5
  %479 = getelementptr inbounds i8, ptr %478, i32 1
  store ptr %479, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  br label %480

480:                                              ; preds = %456
  %481 = load i32, ptr %47, align 4, !tbaa !9
  %482 = add nsw i32 %481, 1
  store i32 %482, ptr %47, align 4, !tbaa !9
  br label %451, !llvm.loop !21

483:                                              ; preds = %455
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  br label %484

484:                                              ; preds = %483
  %485 = load i32, ptr %43, align 4, !tbaa !9
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %43, align 4, !tbaa !9
  br label %427, !llvm.loop !22

487:                                              ; preds = %431
  %488 = load ptr, ptr %42, align 8, !tbaa !5
  call void @free(ptr noundef %488) #5
  store i32 0, ptr %22, align 4
  br label %489

489:                                              ; preds = %487, %418
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  %490 = load i32, ptr %22, align 4
  switch i32 %490, label %494 [
    i32 0, label %491
  ]

491:                                              ; preds = %489
  br label %493

492:                                              ; preds = %189
  br label %493

493:                                              ; preds = %492, %491, %407
  store i32 0, ptr %22, align 4
  br label %494

494:                                              ; preds = %493, %489, %407
  call void @llvm.lifetime.end.p0(i64 65536, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  %495 = load i32, ptr %22, align 4
  switch i32 %495, label %497 [
    i32 0, label %496
    i32 1, label %496
  ]

496:                                              ; preds = %494, %494
  ret void

497:                                              ; preds = %494
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nounwind allocsize(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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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 #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }

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

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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @ycbcr2rgb(i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local void @CPUImageBoxBlurFilter(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local void @CPUImageSharpenFilter(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, float noundef %5, i32 noundef %6, i32 noundef %7) local_unnamed_addr #4 {
  %9 = alloca [65536 x i8], align 16
  %10 = tail call i32 @llvm.smin.i32(i32 %7, i32 100)
  %11 = tail call i32 @llvm.smax.i32(i32 %10, i32 0)
  %.tr = trunc nsw i32 %11 to i16
  %12 = shl nuw nsw i16 %.tr, 8
  %.lhs.trunc = sub nuw nsw i16 25600, %12
  %13 = udiv i16 %.lhs.trunc, 100
  %14 = udiv i16 %12, 100
  %.zext188 = zext nneg i16 %14 to i32
  call void @llvm.lifetime.start.p0(i64 65536, ptr nonnull %9) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(65536) %9, i8 0, i64 65536, i1 false)
  %15 = zext nneg i16 %13 to i64
  %broadcast.splatinsert268 = insertelement <16 x i32> poison, i32 %6, i64 0
  %broadcast.splat269 = shufflevector <16 x i32> %broadcast.splatinsert268, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert272 = insertelement <16 x i32> poison, i32 %.zext188, i64 0
  %broadcast.splat273 = shufflevector <16 x i32> %broadcast.splatinsert272, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert249 = insertelement <16 x i32> poison, i32 %6, i64 0
  %broadcast.splat250 = shufflevector <16 x i32> %broadcast.splatinsert249, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert251 = insertelement <16 x i32> poison, i32 %.zext188, i64 0
  %broadcast.splat252 = shufflevector <16 x i32> %broadcast.splatinsert251, <16 x i32> poison, <16 x i32> zeroinitializer
  br label %18

16:                                               ; preds = %.split192.us
  %17 = sdiv i32 %4, %2
  switch i32 %17, label %.critedge [
    i32 4, label %55
    i32 3, label %55
    i32 1, label %171
  ]

18:                                               ; preds = %8, %.split192.us
  %indvars.iv = phi i64 [ 0, %8 ], [ %indvars.iv.next, %.split192.us ]
  %19 = shl nuw nsw i64 %indvars.iv, 8
  %20 = getelementptr inbounds i8, ptr %9, i64 %19
  %21 = icmp ult i64 %indvars.iv, 129
  %22 = mul nuw nsw i64 %indvars.iv, %15
  %23 = trunc nuw nsw i64 %indvars.iv to i32
  %24 = trunc nuw nsw i64 %22 to i32
  br i1 %21, label %vector.ph, label %vector.ph257

vector.ph257:                                     ; preds = %18
  %25 = trunc i64 %indvars.iv to i32
  %26 = sub i32 255, %25
  %broadcast.splatinsert266 = insertelement <16 x i32> poison, i32 %23, i64 0
  %broadcast.splat267 = shufflevector <16 x i32> %broadcast.splatinsert266, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert270 = insertelement <16 x i32> poison, i32 %26, i64 0
  %broadcast.splat271 = shufflevector <16 x i32> %broadcast.splatinsert270, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert274 = insertelement <16 x i32> poison, i32 %24, i64 0
  %broadcast.splat275 = shufflevector <16 x i32> %broadcast.splatinsert274, <16 x i32> poison, <16 x i32> zeroinitializer
  br label %vector.body261

vector.body261:                                   ; preds = %vector.body261, %vector.ph257
  %index262 = phi i64 [ 0, %vector.ph257 ], [ %index.next276, %vector.body261 ]
  %vec.ind263 = phi <16 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>, %vector.ph257 ], [ %vec.ind.next264, %vector.body261 ]
  %next.gep265 = getelementptr i8, ptr %20, i64 %index262
  %27 = sub nsw <16 x i32> %broadcast.splat267, %vec.ind263
  %28 = mul <16 x i32> %27, %broadcast.splat269
  %29 = add <16 x i32> %28, <i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128>
  %30 = tail call <16 x i32> @llvm.umin.v16i32(<16 x i32> %29, <16 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>)
  %31 = xor <16 x i32> %30, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
  %32 = mul nuw nsw <16 x i32> %31, %broadcast.splat271
  %33 = lshr <16 x i32> %32, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
  %34 = sub nuw nsw <16 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>, %33
  %35 = mul nuw nsw <16 x i32> %34, %broadcast.splat273
  %36 = add nuw <16 x i32> %35, %broadcast.splat275
  %37 = icmp ult <16 x i32> %36, <i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280>
  %38 = lshr <16 x i32> %36, <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>
  %39 = trunc <16 x i32> %38 to <16 x i8>
  %40 = select <16 x i1> %37, <16 x i8> %39, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
  store <16 x i8> %40, ptr %next.gep265, align 16, !tbaa !5
  %index.next276 = add nuw i64 %index262, 16
  %vec.ind.next264 = add <16 x i32> %vec.ind263, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
  %41 = icmp eq i64 %index.next276, 256
  br i1 %41, label %.split192.us, label %vector.body261, !llvm.loop !8

vector.ph:                                        ; preds = %18
  %broadcast.splatinsert = insertelement <16 x i32> poison, i32 %23, i64 0
  %broadcast.splat = shufflevector <16 x i32> %broadcast.splatinsert, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert253 = insertelement <16 x i32> poison, i32 %24, i64 0
  %broadcast.splat254 = shufflevector <16 x i32> %broadcast.splatinsert253, <16 x i32> poison, <16 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <16 x i32> [ <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %20, i64 %index
  %42 = sub nsw <16 x i32> %broadcast.splat, %vec.ind
  %43 = mul <16 x i32> %42, %broadcast.splat250
  %44 = add <16 x i32> %43, <i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128, i32 128>
  %45 = tail call <16 x i32> @llvm.umin.v16i32(<16 x i32> %44, <16 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>)
  %46 = mul nuw nsw <16 x i32> %45, %broadcast.splat
  %47 = lshr <16 x i32> %46, <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
  %48 = mul nuw nsw <16 x i32> %47, %broadcast.splat252
  %49 = add nuw nsw <16 x i32> %48, %broadcast.splat254
  %50 = icmp ult <16 x i32> %49, <i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280, i32 65280>
  %51 = lshr <16 x i32> %49, <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>
  %52 = trunc <16 x i32> %51 to <16 x i8>
  %53 = select <16 x i1> %50, <16 x i8> %52, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
  store <16 x i8> %53, ptr %next.gep, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 16
  %vec.ind.next = add <16 x i32> %vec.ind, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
  %54 = icmp eq i64 %index.next, 256
  br i1 %54, label %.split192.us, label %vector.body, !llvm.loop !12

.split192.us:                                     ; preds = %vector.body261, %vector.body
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond227.not = icmp eq i64 %indvars.iv.next, 256
  br i1 %exitcond227.not, label %16, label %18, !llvm.loop !13

55:                                               ; preds = %16, %16
  %56 = mul nsw i32 %3, %2
  %57 = sext i32 %56 to i64
  %58 = tail call noalias ptr @malloc(i64 noundef %57) #7
  %59 = tail call noalias ptr @malloc(i64 noundef %57) #7
  %60 = icmp ne ptr %59, null
  %61 = icmp ne ptr %58, null
  %or.cond.not = and i1 %61, %60
  br i1 %or.cond.not, label %.preheader, label %124

.preheader:                                       ; preds = %55
  %62 = icmp sgt i32 %3, 0
  br i1 %62, label %.lr.ph206, label %._crit_edge218.sink.split

.lr.ph206:                                        ; preds = %.preheader
  %63 = icmp sgt i32 %2, 0
  %64 = zext nneg i32 %17 to i64
  br i1 %63, label %.lr.ph.us208.preheader, label %._crit_edge218.sink.split

.lr.ph.us208.preheader:                           ; preds = %.lr.ph206
  %65 = sext i32 %4 to i64
  %66 = zext nneg i32 %2 to i64
  %wide.trip.count237 = zext nneg i32 %3 to i64
  %xtraiter279 = and i32 %2, 1
  %67 = icmp eq i32 %2, 1
  %unroll_iter282 = and i32 %2, 2147483646
  %lcmp.mod281.not = icmp eq i32 %xtraiter279, 0
  br label %.lr.ph.us208

.lr.ph.us208:                                     ; preds = %.lr.ph.us208.preheader, %._crit_edge.us209
  %indvars.iv234 = phi i64 [ 0, %.lr.ph.us208.preheader ], [ %indvars.iv.next235, %._crit_edge.us209 ]
  %68 = mul nsw i64 %indvars.iv234, %65
  %69 = getelementptr inbounds i8, ptr %0, i64 %68
  %70 = mul nuw nsw i64 %indvars.iv234, %66
  %71 = getelementptr inbounds i8, ptr %58, i64 %70
  %72 = getelementptr inbounds i8, ptr %59, i64 %70
  br i1 %67, label %._crit_edge.us209.unr-lcssa, label %.lr.ph.us208.new

.lr.ph.us208.new:                                 ; preds = %.lr.ph.us208, %.lr.ph.us208.new
  %.0171203.us = phi ptr [ %108, %.lr.ph.us208.new ], [ %72, %.lr.ph.us208 ]
  %.0172202.us = phi ptr [ %107, %.lr.ph.us208.new ], [ %71, %.lr.ph.us208 ]
  %.0173201.us = phi ptr [ %106, %.lr.ph.us208.new ], [ %69, %.lr.ph.us208 ]
  %niter283 = phi i32 [ %niter283.next.1, %.lr.ph.us208.new ], [ 0, %.lr.ph.us208 ]
  %73 = load i8, ptr %.0173201.us, align 1, !tbaa !5
  %74 = zext i8 %73 to i32
  %75 = mul nuw nsw i32 %74, 19595
  %76 = getelementptr inbounds i8, ptr %.0173201.us, i64 1
  %77 = load i8, ptr %76, align 1, !tbaa !5
  %78 = zext i8 %77 to i32
  %79 = mul nuw nsw i32 %78, 38470
  %80 = add nuw nsw i32 %79, %75
  %81 = getelementptr inbounds i8, ptr %.0173201.us, i64 2
  %82 = load i8, ptr %81, align 1, !tbaa !5
  %83 = zext i8 %82 to i32
  %84 = mul nuw nsw i32 %83, 7471
  %85 = add nuw nsw i32 %80, %84
  %86 = lshr i32 %85, 16
  %87 = trunc nuw i32 %86 to i8
  store i8 %87, ptr %.0172202.us, align 1, !tbaa !5
  store i8 %87, ptr %.0171203.us, align 1, !tbaa !5
  %88 = getelementptr inbounds i8, ptr %.0173201.us, i64 %64
  %89 = getelementptr inbounds i8, ptr %.0172202.us, i64 1
  %90 = getelementptr inbounds i8, ptr %.0171203.us, i64 1
  %91 = load i8, ptr %88, align 1, !tbaa !5
  %92 = zext i8 %91 to i32
  %93 = mul nuw nsw i32 %92, 19595
  %94 = getelementptr inbounds i8, ptr %88, i64 1
  %95 = load i8, ptr %94, align 1, !tbaa !5
  %96 = zext i8 %95 to i32
  %97 = mul nuw nsw i32 %96, 38470
  %98 = add nuw nsw i32 %97, %93
  %99 = getelementptr inbounds i8, ptr %88, i64 2
  %100 = load i8, ptr %99, align 1, !tbaa !5
  %101 = zext i8 %100 to i32
  %102 = mul nuw nsw i32 %101, 7471
  %103 = add nuw nsw i32 %98, %102
  %104 = lshr i32 %103, 16
  %105 = trunc nuw i32 %104 to i8
  store i8 %105, ptr %89, align 1, !tbaa !5
  store i8 %105, ptr %90, align 1, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %88, i64 %64
  %107 = getelementptr inbounds i8, ptr %.0172202.us, i64 2
  %108 = getelementptr inbounds i8, ptr %.0171203.us, i64 2
  %niter283.next.1 = add i32 %niter283, 2
  %niter283.ncmp.1 = icmp eq i32 %niter283.next.1, %unroll_iter282
  br i1 %niter283.ncmp.1, label %._crit_edge.us209.unr-lcssa, label %.lr.ph.us208.new, !llvm.loop !14

._crit_edge.us209.unr-lcssa:                      ; preds = %.lr.ph.us208.new, %.lr.ph.us208
  %.0171203.us.unr = phi ptr [ %72, %.lr.ph.us208 ], [ %108, %.lr.ph.us208.new ]
  %.0172202.us.unr = phi ptr [ %71, %.lr.ph.us208 ], [ %107, %.lr.ph.us208.new ]
  %.0173201.us.unr = phi ptr [ %69, %.lr.ph.us208 ], [ %106, %.lr.ph.us208.new ]
  br i1 %lcmp.mod281.not, label %._crit_edge.us209, label %._crit_edge.us209.epilog-lcssa

._crit_edge.us209.epilog-lcssa:                   ; preds = %._crit_edge.us209.unr-lcssa
  %109 = load i8, ptr %.0173201.us.unr, align 1, !tbaa !5
  %110 = zext i8 %109 to i32
  %111 = mul nuw nsw i32 %110, 19595
  %112 = getelementptr inbounds i8, ptr %.0173201.us.unr, i64 1
  %113 = load i8, ptr %112, align 1, !tbaa !5
  %114 = zext i8 %113 to i32
  %115 = mul nuw nsw i32 %114, 38470
  %116 = add nuw nsw i32 %115, %111
  %117 = getelementptr inbounds i8, ptr %.0173201.us.unr, i64 2
  %118 = load i8, ptr %117, align 1, !tbaa !5
  %119 = zext i8 %118 to i32
  %120 = mul nuw nsw i32 %119, 7471
  %121 = add nuw nsw i32 %116, %120
  %122 = lshr i32 %121, 16
  %123 = trunc nuw i32 %122 to i8
  store i8 %123, ptr %.0172202.us.unr, align 1, !tbaa !5
  store i8 %123, ptr %.0171203.us.unr, align 1, !tbaa !5
  br label %._crit_edge.us209

._crit_edge.us209:                                ; preds = %._crit_edge.us209.unr-lcssa, %._crit_edge.us209.epilog-lcssa
  %indvars.iv.next235 = add nuw nsw i64 %indvars.iv234, 1
  %exitcond238.not = icmp eq i64 %indvars.iv.next235, %wide.trip.count237
  br i1 %exitcond238.not, label %._crit_edge207, label %.lr.ph.us208, !llvm.loop !15

124:                                              ; preds = %55
  %.not183 = icmp eq ptr %58, null
  br i1 %.not183, label %126, label %125

125:                                              ; preds = %124
  tail call void @free(ptr noundef nonnull %58) #6
  br label %126

126:                                              ; preds = %125, %124
  %.not184 = icmp eq ptr %59, null
  br i1 %.not184, label %.critedge, label %127

127:                                              ; preds = %126
  tail call void @free(ptr noundef nonnull %59) #6
  br label %.critedge

._crit_edge207:                                   ; preds = %._crit_edge.us209
  %128 = fptosi float %5 to i32
  tail call void @CPUImageBoxBlurFilter(ptr noundef nonnull %58, ptr noundef nonnull %59, i32 noundef %2, i32 noundef %3, i32 noundef %2, i32 noundef %128)
  br i1 %62, label %.lr.ph217, label %._crit_edge218

.lr.ph217:                                        ; preds = %._crit_edge207
  %129 = sext i32 %17 to i64
  %130 = sext i32 %4 to i64
  %131 = zext nneg i32 %2 to i64
  %wide.trip.count243 = zext nneg i32 %3 to i64
  br label %.lr.ph.us219

.lr.ph.us219:                                     ; preds = %.lr.ph217, %._crit_edge.us220
  %indvars.iv240 = phi i64 [ 0, %.lr.ph217 ], [ %indvars.iv.next241, %._crit_edge.us220 ]
  %132 = mul nsw i64 %indvars.iv240, %130
  %133 = getelementptr inbounds i8, ptr %0, i64 %132
  %134 = getelementptr inbounds i8, ptr %1, i64 %132
  %135 = mul nuw nsw i64 %indvars.iv240, %131
  %136 = getelementptr inbounds i8, ptr %58, i64 %135
  %137 = getelementptr inbounds i8, ptr %59, i64 %135
  br label %138

138:                                              ; preds = %.lr.ph.us219, %138
  %.0163214.us = phi i32 [ 0, %.lr.ph.us219 ], [ %169, %138 ]
  %.0164213.us = phi ptr [ %137, %.lr.ph.us219 ], [ %166, %138 ]
  %.0165212.us = phi ptr [ %136, %.lr.ph.us219 ], [ %165, %138 ]
  %.0166211.us = phi ptr [ %134, %.lr.ph.us219 ], [ %167, %138 ]
  %.0167210.us = phi ptr [ %133, %.lr.ph.us219 ], [ %168, %138 ]
  %139 = getelementptr inbounds i8, ptr %.0167210.us, i64 2
  %140 = load i8, ptr %139, align 1, !tbaa !5
  %141 = zext i8 %140 to i32
  %142 = load i8, ptr %.0165212.us, align 1, !tbaa !5
  %143 = zext i8 %142 to i32
  %144 = sub nsw i32 %141, %143
  %145 = mul nsw i32 %144, 36962
  %146 = lshr i32 %145, 16
  %147 = trunc i32 %146 to i8
  %148 = xor i8 %147, -128
  %149 = load i8, ptr %.0167210.us, align 1, !tbaa !5
  %150 = zext i8 %149 to i32
  %151 = sub nsw i32 %150, %143
  %152 = mul nsw i32 %151, 46727
  %153 = lshr i32 %152, 16
  %154 = trunc i32 %153 to i8
  %155 = xor i8 %154, -128
  %156 = shl nuw nsw i32 %143, 8
  %157 = zext nneg i32 %156 to i64
  %158 = getelementptr inbounds i8, ptr %9, i64 %157
  %159 = load i8, ptr %.0164213.us, align 1, !tbaa !5
  %160 = zext i8 %159 to i64
  %161 = getelementptr inbounds i8, ptr %158, i64 %160
  %162 = load i8, ptr %161, align 1, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %.0166211.us, i64 1
  %164 = getelementptr inbounds i8, ptr %.0166211.us, i64 2
  tail call void @ycbcr2rgb(i8 noundef zeroext %162, i8 noundef zeroext %148, i8 noundef zeroext %155, ptr noundef %.0166211.us, ptr noundef nonnull %163, ptr noundef nonnull %164)
  %165 = getelementptr inbounds i8, ptr %.0165212.us, i64 1
  %166 = getelementptr inbounds i8, ptr %.0164213.us, i64 1
  %167 = getelementptr inbounds i8, ptr %.0166211.us, i64 %129
  %168 = getelementptr inbounds i8, ptr %.0167210.us, i64 %129
  %169 = add nuw nsw i32 %.0163214.us, 1
  %exitcond239.not = icmp eq i32 %169, %2
  br i1 %exitcond239.not, label %._crit_edge.us220, label %138, !llvm.loop !16

._crit_edge.us220:                                ; preds = %138
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %exitcond244.not = icmp eq i64 %indvars.iv.next241, %wide.trip.count243
  br i1 %exitcond244.not, label %._crit_edge218, label %.lr.ph.us219, !llvm.loop !17

._crit_edge218.sink.split:                        ; preds = %.lr.ph206, %.preheader
  %170 = fptosi float %5 to i32
  tail call void @CPUImageBoxBlurFilter(ptr noundef nonnull %58, ptr noundef nonnull %59, i32 noundef %2, i32 noundef %3, i32 noundef %2, i32 noundef %170)
  br label %._crit_edge218

._crit_edge218:                                   ; preds = %._crit_edge.us220, %._crit_edge218.sink.split, %._crit_edge207
  tail call void @free(ptr noundef %58) #6
  tail call void @free(ptr noundef %59) #6
  br label %.critedge

171:                                              ; preds = %16
  %172 = mul nsw i32 %3, %2
  %173 = sext i32 %172 to i64
  %174 = tail call noalias ptr @malloc(i64 noundef %173) #7
  %.not = icmp eq ptr %174, null
  br i1 %.not, label %.critedge, label %175

175:                                              ; preds = %171
  %176 = fptosi float %5 to i32
  tail call void @CPUImageBoxBlurFilter(ptr noundef %0, ptr noundef nonnull %174, i32 noundef %2, i32 noundef %3, i32 noundef %2, i32 noundef %176)
  %177 = icmp sgt i32 %3, 0
  %178 = icmp sgt i32 %2, 0
  %or.cond = and i1 %177, %178
  br i1 %or.cond, label %.lr.ph.us.preheader, label %._crit_edge200

.lr.ph.us.preheader:                              ; preds = %175
  %179 = zext nneg i32 %2 to i64
  %wide.trip.count = zext nneg i32 %3 to i64
  %xtraiter = and i32 %2, 3
  %180 = icmp ult i32 %2, 4
  %unroll_iter = and i32 %2, 2147483644
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %._crit_edge.us
  %indvars.iv229 = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next230, %._crit_edge.us ]
  %181 = mul nuw nsw i64 %indvars.iv229, %179
  %182 = getelementptr inbounds i8, ptr %0, i64 %181
  %183 = getelementptr inbounds i8, ptr %1, i64 %181
  br i1 %180, label %._crit_edge.us.unr-lcssa, label %.lr.ph.us.new

.lr.ph.us.new:                                    ; preds = %.lr.ph.us, %.lr.ph.us.new
  %.0157195.us = phi ptr [ %222, %.lr.ph.us.new ], [ %183, %.lr.ph.us ]
  %.0159194.us = phi ptr [ %223, %.lr.ph.us.new ], [ %182, %.lr.ph.us ]
  %niter = phi i32 [ %niter.next.3, %.lr.ph.us.new ], [ 0, %.lr.ph.us ]
  %184 = load i8, ptr %.0159194.us, align 1, !tbaa !5
  %185 = zext i8 %184 to i64
  %186 = shl nuw nsw i64 %185, 8
  %187 = getelementptr inbounds i8, ptr %9, i64 %186
  %188 = load i8, ptr %.0157195.us, align 1, !tbaa !5
  %189 = zext i8 %188 to i64
  %190 = getelementptr inbounds i8, ptr %187, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !5
  store i8 %191, ptr %.0157195.us, align 1, !tbaa !5
  %192 = getelementptr inbounds i8, ptr %.0157195.us, i64 1
  %193 = getelementptr inbounds i8, ptr %.0159194.us, i64 1
  %194 = load i8, ptr %193, align 1, !tbaa !5
  %195 = zext i8 %194 to i64
  %196 = shl nuw nsw i64 %195, 8
  %197 = getelementptr inbounds i8, ptr %9, i64 %196
  %198 = load i8, ptr %192, align 1, !tbaa !5
  %199 = zext i8 %198 to i64
  %200 = getelementptr inbounds i8, ptr %197, i64 %199
  %201 = load i8, ptr %200, align 1, !tbaa !5
  store i8 %201, ptr %192, align 1, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %.0157195.us, i64 2
  %203 = getelementptr inbounds i8, ptr %.0159194.us, i64 2
  %204 = load i8, ptr %203, align 1, !tbaa !5
  %205 = zext i8 %204 to i64
  %206 = shl nuw nsw i64 %205, 8
  %207 = getelementptr inbounds i8, ptr %9, i64 %206
  %208 = load i8, ptr %202, align 1, !tbaa !5
  %209 = zext i8 %208 to i64
  %210 = getelementptr inbounds i8, ptr %207, i64 %209
  %211 = load i8, ptr %210, align 1, !tbaa !5
  store i8 %211, ptr %202, align 1, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %.0157195.us, i64 3
  %213 = getelementptr inbounds i8, ptr %.0159194.us, i64 3
  %214 = load i8, ptr %213, align 1, !tbaa !5
  %215 = zext i8 %214 to i64
  %216 = shl nuw nsw i64 %215, 8
  %217 = getelementptr inbounds i8, ptr %9, i64 %216
  %218 = load i8, ptr %212, align 1, !tbaa !5
  %219 = zext i8 %218 to i64
  %220 = getelementptr inbounds i8, ptr %217, i64 %219
  %221 = load i8, ptr %220, align 1, !tbaa !5
  store i8 %221, ptr %212, align 1, !tbaa !5
  %222 = getelementptr inbounds i8, ptr %.0157195.us, i64 4
  %223 = getelementptr inbounds i8, ptr %.0159194.us, i64 4
  %niter.next.3 = add i32 %niter, 4
  %niter.ncmp.3 = icmp eq i32 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.us.unr-lcssa, label %.lr.ph.us.new, !llvm.loop !18

._crit_edge.us.unr-lcssa:                         ; preds = %.lr.ph.us.new, %.lr.ph.us
  %.0157195.us.unr = phi ptr [ %183, %.lr.ph.us ], [ %222, %.lr.ph.us.new ]
  %.0159194.us.unr = phi ptr [ %182, %.lr.ph.us ], [ %223, %.lr.ph.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.us.unr-lcssa, %.epil.preheader
  %.0157195.us.epil = phi ptr [ %232, %.epil.preheader ], [ %.0157195.us.unr, %._crit_edge.us.unr-lcssa ]
  %.0159194.us.epil = phi ptr [ %233, %.epil.preheader ], [ %.0159194.us.unr, %._crit_edge.us.unr-lcssa ]
  %epil.iter = phi i32 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.us.unr-lcssa ]
  %224 = load i8, ptr %.0159194.us.epil, align 1, !tbaa !5
  %225 = zext i8 %224 to i64
  %226 = shl nuw nsw i64 %225, 8
  %227 = getelementptr inbounds i8, ptr %9, i64 %226
  %228 = load i8, ptr %.0157195.us.epil, align 1, !tbaa !5
  %229 = zext i8 %228 to i64
  %230 = getelementptr inbounds i8, ptr %227, i64 %229
  %231 = load i8, ptr %230, align 1, !tbaa !5
  store i8 %231, ptr %.0157195.us.epil, align 1, !tbaa !5
  %232 = getelementptr inbounds i8, ptr %.0157195.us.epil, i64 1
  %233 = getelementptr inbounds i8, ptr %.0159194.us.epil, i64 1
  %epil.iter.next = add i32 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i32 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge.us, label %.epil.preheader, !llvm.loop !19

._crit_edge.us:                                   ; preds = %.epil.preheader, %._crit_edge.us.unr-lcssa
  %indvars.iv.next230 = add nuw nsw i64 %indvars.iv229, 1
  %exitcond232.not = icmp eq i64 %indvars.iv.next230, %wide.trip.count
  br i1 %exitcond232.not, label %._crit_edge200, label %.lr.ph.us, !llvm.loop !21

._crit_edge200:                                   ; preds = %._crit_edge.us, %175
  tail call void @free(ptr noundef %174) #6
  br label %.critedge

.critedge:                                        ; preds = %._crit_edge200, %._crit_edge218, %127, %126, %171, %16
  call void @llvm.lifetime.end.p0(i64 65536, ptr nonnull %9) #6
  ret void
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <16 x i32> @llvm.umin.v16i32(<16 x i32>, <16 x i32>) #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }

!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, !11}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !9, !10, !11}
!13 = distinct !{!13, !9}
!14 = distinct !{!14, !9}
!15 = distinct !{!15, !9}
!16 = distinct !{!16, !9}
!17 = distinct !{!17, !9}
!18 = distinct !{!18, !9}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.unroll.disable"}
!21 = distinct !{!21, !9}


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