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

; 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 @CPUImageGaussianBlurFilter(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) #4

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

52:                                               ; preds = %7
  %53 = load i32, ptr %14, align 4, !tbaa !9
  br label %55

54:                                               ; preds = %7
  br label %55

55:                                               ; preds = %54, %52
  %56 = phi i32 [ %53, %52 ], [ 100, %54 ]
  %57 = icmp sgt i32 %56, 0
  br i1 %57, label %58, label %66

58:                                               ; preds = %55
  %59 = load i32, ptr %14, align 4, !tbaa !9
  %60 = icmp slt i32 %59, 100
  br i1 %60, label %61, label %63

61:                                               ; preds = %58
  %62 = load i32, ptr %14, align 4, !tbaa !9
  br label %64

63:                                               ; preds = %58
  br label %64

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

66:                                               ; preds = %55
  br label %67

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

78:                                               ; preds = %178, %67
  %79 = load i32, ptr %19, align 4, !tbaa !9
  %80 = icmp ult i32 %79, 256
  br i1 %80, label %82, label %81

81:                                               ; preds = %78
  store i32 2, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %181

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

88:                                               ; preds = %174, %82
  %89 = load i32, ptr %22, align 4, !tbaa !9
  %90 = icmp ult i32 %89, 256
  br i1 %90, label %92, label %91

91:                                               ; preds = %88
  store i32 5, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  br label %177

92:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #5
  %93 = load i32, ptr %19, align 4, !tbaa !9
  %94 = load i32, ptr %22, align 4, !tbaa !9
  %95 = sub i32 %93, %94
  %96 = add i32 %95, 128
  %97 = icmp ult i32 %96, 255
  br i1 %97, label %98, label %103

98:                                               ; preds = %92
  %99 = load i32, ptr %19, align 4, !tbaa !9
  %100 = load i32, ptr %22, align 4, !tbaa !9
  %101 = sub i32 %99, %100
  %102 = add i32 %101, 128
  br label %111

103:                                              ; preds = %92
  %104 = load i32, ptr %19, align 4, !tbaa !9
  %105 = load i32, ptr %22, align 4, !tbaa !9
  %106 = sub i32 %104, %105
  %107 = add i32 %106, 128
  %108 = icmp ult i32 %107, 0
  %109 = zext i1 %108 to i64
  %110 = select i1 %108, i32 0, i32 255
  br label %111

111:                                              ; preds = %103, %98
  %112 = phi i32 [ %102, %98 ], [ %110, %103 ]
  %113 = trunc i32 %112 to i8
  store i8 %113, ptr %23, align 1, !tbaa !13
  %114 = load i32, ptr %19, align 4, !tbaa !9
  %115 = icmp ule i32 %114, 128
  br i1 %115, label %116, label %122

116:                                              ; preds = %111
  %117 = load i8, ptr %23, align 1, !tbaa !13
  %118 = zext i8 %117 to i32
  %119 = load i32, ptr %19, align 4, !tbaa !9
  %120 = mul i32 %118, %119
  %121 = udiv i32 %120, 128
  br label %131

122:                                              ; preds = %111
  %123 = load i8, ptr %23, align 1, !tbaa !13
  %124 = zext i8 %123 to i32
  %125 = sub nsw i32 255, %124
  %126 = load i32, ptr %19, align 4, !tbaa !9
  %127 = sub i32 255, %126
  %128 = mul i32 %125, %127
  %129 = udiv i32 %128, 128
  %130 = sub i32 255, %129
  br label %131

131:                                              ; preds = %122, %116
  %132 = phi i32 [ %121, %116 ], [ %130, %122 ]
  %133 = trunc i32 %132 to i8
  store i8 %133, ptr %23, align 1, !tbaa !13
  %134 = load i32, ptr %19, align 4, !tbaa !9
  %135 = load i32, ptr %16, align 4, !tbaa !9
  %136 = mul i32 %134, %135
  %137 = load i8, ptr %23, align 1, !tbaa !13
  %138 = zext i8 %137 to i32
  %139 = load i32, ptr %17, align 4, !tbaa !9
  %140 = mul nsw i32 %138, %139
  %141 = add i32 %136, %140
  %142 = lshr i32 %141, 8
  %143 = icmp ult i32 %142, 255
  br i1 %143, label %144, label %154

144:                                              ; preds = %131
  %145 = load i32, ptr %19, align 4, !tbaa !9
  %146 = load i32, ptr %16, align 4, !tbaa !9
  %147 = mul i32 %145, %146
  %148 = load i8, ptr %23, align 1, !tbaa !13
  %149 = zext i8 %148 to i32
  %150 = load i32, ptr %17, align 4, !tbaa !9
  %151 = mul nsw i32 %149, %150
  %152 = add i32 %147, %151
  %153 = lshr i32 %152, 8
  br label %167

154:                                              ; preds = %131
  %155 = load i32, ptr %19, align 4, !tbaa !9
  %156 = load i32, ptr %16, align 4, !tbaa !9
  %157 = mul i32 %155, %156
  %158 = load i8, ptr %23, align 1, !tbaa !13
  %159 = zext i8 %158 to i32
  %160 = load i32, ptr %17, align 4, !tbaa !9
  %161 = mul nsw i32 %159, %160
  %162 = add i32 %157, %161
  %163 = lshr i32 %162, 8
  %164 = icmp ult i32 %163, 0
  %165 = zext i1 %164 to i64
  %166 = select i1 %164, i32 0, i32 255
  br label %167

167:                                              ; preds = %154, %144
  %168 = phi i32 [ %153, %144 ], [ %166, %154 ]
  %169 = trunc i32 %168 to i8
  %170 = load ptr, ptr %21, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i64 0
  store i8 %169, ptr %171, align 1, !tbaa !13
  %172 = load ptr, ptr %21, align 8, !tbaa !5
  %173 = getelementptr inbounds i8, ptr %172, i32 1
  store ptr %173, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  br label %174

174:                                              ; preds = %167
  %175 = load i32, ptr %22, align 4, !tbaa !9
  %176 = add i32 %175, 1
  store i32 %176, ptr %22, align 4, !tbaa !9
  br label %88, !llvm.loop !14

177:                                              ; preds = %91
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %178

178:                                              ; preds = %177
  %179 = load i32, ptr %19, align 4, !tbaa !9
  %180 = add i32 %179, 1
  store i32 %180, ptr %19, align 4, !tbaa !9
  br label %78, !llvm.loop !16

181:                                              ; preds = %81
  %182 = load i32, ptr %15, align 4, !tbaa !9
  switch i32 %182, label %495 [
    i32 4, label %183
    i32 3, label %183
    i32 1, label %400
  ]

183:                                              ; preds = %181, %181
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %184 = load i32, ptr %10, align 4, !tbaa !9
  %185 = load i32, ptr %11, align 4, !tbaa !9
  %186 = mul nsw i32 %184, %185
  %187 = sext i32 %186 to i64
  %188 = mul i64 %187, 1
  %189 = call noalias ptr @malloc(i64 noundef %188) #6
  store ptr %189, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %190 = load i32, ptr %10, align 4, !tbaa !9
  %191 = load i32, ptr %11, align 4, !tbaa !9
  %192 = mul nsw i32 %190, %191
  %193 = sext i32 %192 to i64
  %194 = mul i64 %193, 1
  %195 = call noalias ptr @malloc(i64 noundef %194) #6
  store ptr %195, ptr %25, align 8, !tbaa !5
  %196 = load ptr, ptr %25, align 8, !tbaa !5
  %197 = icmp eq ptr %196, null
  br i1 %197, label %201, label %198

198:                                              ; preds = %183
  %199 = load ptr, ptr %24, align 8, !tbaa !5
  %200 = icmp eq ptr %199, null
  br i1 %200, label %201, label %212

201:                                              ; preds = %198, %183
  %202 = load ptr, ptr %25, align 8, !tbaa !5
  %203 = icmp ne ptr %202, null
  br i1 %203, label %204, label %206

204:                                              ; preds = %201
  %205 = load ptr, ptr %25, align 8, !tbaa !5
  call void @free(ptr noundef %205) #5
  br label %206

206:                                              ; preds = %204, %201
  %207 = load ptr, ptr %24, align 8, !tbaa !5
  %208 = icmp ne ptr %207, null
  br i1 %208, label %209, label %211

209:                                              ; preds = %206
  %210 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %210) #5
  br label %211

211:                                              ; preds = %209, %206
  store i32 1, ptr %20, align 4
  br label %398

212:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %213

213:                                              ; preds = %281, %212
  %214 = load i32, ptr %26, align 4, !tbaa !9
  %215 = load i32, ptr %11, align 4, !tbaa !9
  %216 = icmp slt i32 %214, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %213
  store i32 9, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  br label %284

218:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = load i32, ptr %26, align 4, !tbaa !9
  %221 = load i32, ptr %12, align 4, !tbaa !9
  %222 = mul nsw i32 %220, %221
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i8, ptr %219, i64 %223
  store ptr %224, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %225 = load ptr, ptr %24, align 8, !tbaa !5
  %226 = load i32, ptr %26, align 4, !tbaa !9
  %227 = load i32, ptr %10, align 4, !tbaa !9
  %228 = mul nsw i32 %226, %227
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds i8, ptr %225, i64 %229
  store ptr %230, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %231 = load ptr, ptr %25, align 8, !tbaa !5
  %232 = load i32, ptr %26, align 4, !tbaa !9
  %233 = load i32, ptr %10, align 4, !tbaa !9
  %234 = mul nsw i32 %232, %233
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i8, ptr %231, i64 %235
  store ptr %236, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %237

237:                                              ; preds = %277, %218
  %238 = load i32, ptr %30, align 4, !tbaa !9
  %239 = load i32, ptr %10, align 4, !tbaa !9
  %240 = icmp slt i32 %238, %239
  br i1 %240, label %242, label %241

241:                                              ; preds = %237
  store i32 12, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  br label %280

242:                                              ; preds = %237
  %243 = load ptr, ptr %27, align 8, !tbaa !5
  %244 = getelementptr inbounds i8, ptr %243, i64 0
  %245 = load i8, ptr %244, align 1, !tbaa !13
  %246 = zext i8 %245 to i32
  %247 = mul nsw i32 19595, %246
  %248 = load ptr, ptr %27, align 8, !tbaa !5
  %249 = getelementptr inbounds i8, ptr %248, i64 1
  %250 = load i8, ptr %249, align 1, !tbaa !13
  %251 = zext i8 %250 to i32
  %252 = mul nsw i32 38470, %251
  %253 = add nsw i32 %247, %252
  %254 = load ptr, ptr %27, align 8, !tbaa !5
  %255 = getelementptr inbounds i8, ptr %254, i64 2
  %256 = load i8, ptr %255, align 1, !tbaa !13
  %257 = zext i8 %256 to i32
  %258 = mul nsw i32 7471, %257
  %259 = add nsw i32 %253, %258
  %260 = ashr i32 %259, 16
  %261 = trunc i32 %260 to i8
  %262 = load ptr, ptr %28, align 8, !tbaa !5
  %263 = getelementptr inbounds i8, ptr %262, i64 0
  store i8 %261, ptr %263, align 1, !tbaa !13
  %264 = load ptr, ptr %28, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %264, i64 0
  %266 = load i8, ptr %265, align 1, !tbaa !13
  %267 = load ptr, ptr %29, align 8, !tbaa !5
  %268 = getelementptr inbounds i8, ptr %267, i64 0
  store i8 %266, ptr %268, align 1, !tbaa !13
  %269 = load i32, ptr %15, align 4, !tbaa !9
  %270 = load ptr, ptr %27, align 8, !tbaa !5
  %271 = sext i32 %269 to i64
  %272 = getelementptr inbounds i8, ptr %270, i64 %271
  store ptr %272, ptr %27, align 8, !tbaa !5
  %273 = load ptr, ptr %28, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i32 1
  store ptr %274, ptr %28, align 8, !tbaa !5
  %275 = load ptr, ptr %29, align 8, !tbaa !5
  %276 = getelementptr inbounds i8, ptr %275, i32 1
  store ptr %276, ptr %29, align 8, !tbaa !5
  br label %277

277:                                              ; preds = %242
  %278 = load i32, ptr %30, align 4, !tbaa !9
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %30, align 4, !tbaa !9
  br label %237, !llvm.loop !17

280:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %26, align 4, !tbaa !9
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %26, align 4, !tbaa !9
  br label %213, !llvm.loop !18

284:                                              ; preds = %217
  %285 = load ptr, ptr %24, align 8, !tbaa !5
  %286 = load ptr, ptr %25, align 8, !tbaa !5
  %287 = load i32, ptr %10, align 4, !tbaa !9
  %288 = load i32, ptr %11, align 4, !tbaa !9
  %289 = load i32, ptr %10, align 4, !tbaa !9
  %290 = load float, ptr %13, align 4, !tbaa !11
  call void @CPUImageGaussianBlurFilter(ptr noundef %285, ptr noundef %286, i32 noundef %287, i32 noundef %288, i32 noundef %289, float noundef %290)
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %291

291:                                              ; preds = %392, %284
  %292 = load i32, ptr %33, align 4, !tbaa !9
  %293 = load i32, ptr %11, align 4, !tbaa !9
  %294 = icmp slt i32 %292, %293
  br i1 %294, label %296, label %295

295:                                              ; preds = %291
  store i32 15, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %395

296:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = load i32, ptr %33, align 4, !tbaa !9
  %299 = load i32, ptr %12, align 4, !tbaa !9
  %300 = mul nsw i32 %298, %299
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i8, ptr %297, i64 %301
  store ptr %302, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %303 = load ptr, ptr %9, align 8, !tbaa !5
  %304 = load i32, ptr %33, align 4, !tbaa !9
  %305 = load i32, ptr %12, align 4, !tbaa !9
  %306 = mul nsw i32 %304, %305
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i8, ptr %303, i64 %307
  store ptr %308, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %309 = load ptr, ptr %24, align 8, !tbaa !5
  %310 = load i32, ptr %33, align 4, !tbaa !9
  %311 = load i32, ptr %10, align 4, !tbaa !9
  %312 = mul nsw i32 %310, %311
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds i8, ptr %309, i64 %313
  store ptr %314, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %315 = load ptr, ptr %25, align 8, !tbaa !5
  %316 = load i32, ptr %33, align 4, !tbaa !9
  %317 = load i32, ptr %10, align 4, !tbaa !9
  %318 = mul nsw i32 %316, %317
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds i8, ptr %315, i64 %319
  store ptr %320, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %321

321:                                              ; preds = %388, %296
  %322 = load i32, ptr %38, align 4, !tbaa !9
  %323 = load i32, ptr %10, align 4, !tbaa !9
  %324 = icmp slt i32 %322, %323
  br i1 %324, label %326, label %325

325:                                              ; preds = %321
  store i32 18, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %391

326:                                              ; preds = %321
  %327 = load ptr, ptr %34, align 8, !tbaa !5
  %328 = getelementptr inbounds i8, ptr %327, i64 2
  %329 = load i8, ptr %328, align 1, !tbaa !13
  %330 = zext i8 %329 to i32
  %331 = load ptr, ptr %36, align 8, !tbaa !5
  %332 = getelementptr inbounds i8, ptr %331, i64 0
  %333 = load i8, ptr %332, align 1, !tbaa !13
  %334 = zext i8 %333 to i32
  %335 = sub nsw i32 %330, %334
  %336 = mul nsw i32 36962, %335
  %337 = ashr i32 %336, 16
  %338 = add nsw i32 %337, 128
  %339 = trunc i32 %338 to i8
  store i8 %339, ptr %31, align 1, !tbaa !13
  %340 = load ptr, ptr %34, 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 = load ptr, ptr %36, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i64 0
  %346 = load i8, ptr %345, align 1, !tbaa !13
  %347 = zext i8 %346 to i32
  %348 = sub nsw i32 %343, %347
  %349 = mul nsw i32 46727, %348
  %350 = ashr i32 %349, 16
  %351 = add nsw i32 %350, 128
  %352 = trunc i32 %351 to i8
  store i8 %352, ptr %32, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %353 = getelementptr inbounds [65536 x i8], ptr %18, i64 0, i64 0
  %354 = load ptr, ptr %36, align 8, !tbaa !5
  %355 = getelementptr inbounds i8, ptr %354, i64 0
  %356 = load i8, ptr %355, align 1, !tbaa !13
  %357 = zext i8 %356 to i32
  %358 = shl i32 %357, 8
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i8, ptr %353, i64 %359
  store ptr %360, ptr %39, align 8, !tbaa !5
  %361 = load ptr, ptr %39, align 8, !tbaa !5
  %362 = load ptr, ptr %37, align 8, !tbaa !5
  %363 = getelementptr inbounds i8, ptr %362, i64 0
  %364 = load i8, ptr %363, align 1, !tbaa !13
  %365 = zext i8 %364 to i64
  %366 = getelementptr inbounds i8, ptr %361, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !13
  %368 = load i8, ptr %31, align 1, !tbaa !13
  %369 = load i8, ptr %32, align 1, !tbaa !13
  %370 = load ptr, ptr %35, align 8, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %370, i64 0
  %372 = load ptr, ptr %35, align 8, !tbaa !5
  %373 = getelementptr inbounds i8, ptr %372, i64 1
  %374 = load ptr, ptr %35, align 8, !tbaa !5
  %375 = getelementptr inbounds i8, ptr %374, i64 2
  call void @ycbcr2rgb(i8 noundef zeroext %367, i8 noundef zeroext %368, i8 noundef zeroext %369, ptr noundef %371, ptr noundef %373, ptr noundef %375)
  %376 = load ptr, ptr %36, align 8, !tbaa !5
  %377 = getelementptr inbounds i8, ptr %376, i32 1
  store ptr %377, ptr %36, align 8, !tbaa !5
  %378 = load ptr, ptr %37, align 8, !tbaa !5
  %379 = getelementptr inbounds i8, ptr %378, i32 1
  store ptr %379, ptr %37, align 8, !tbaa !5
  %380 = load i32, ptr %15, align 4, !tbaa !9
  %381 = load ptr, ptr %35, align 8, !tbaa !5
  %382 = sext i32 %380 to i64
  %383 = getelementptr inbounds i8, ptr %381, i64 %382
  store ptr %383, ptr %35, align 8, !tbaa !5
  %384 = load i32, ptr %15, align 4, !tbaa !9
  %385 = load ptr, ptr %34, align 8, !tbaa !5
  %386 = sext i32 %384 to i64
  %387 = getelementptr inbounds i8, ptr %385, i64 %386
  store ptr %387, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %388

388:                                              ; preds = %326
  %389 = load i32, ptr %38, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %38, align 4, !tbaa !9
  br label %321, !llvm.loop !19

391:                                              ; preds = %325
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %392

392:                                              ; preds = %391
  %393 = load i32, ptr %33, align 4, !tbaa !9
  %394 = add nsw i32 %393, 1
  store i32 %394, ptr %33, align 4, !tbaa !9
  br label %291, !llvm.loop !20

395:                                              ; preds = %295
  %396 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %396) #5
  %397 = load ptr, ptr %25, align 8, !tbaa !5
  call void @free(ptr noundef %397) #5
  store i32 8, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #5
  br label %398

398:                                              ; preds = %395, %211
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  %399 = load i32, ptr %20, align 4
  switch i32 %399, label %497 [
    i32 8, label %496
  ]

400:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %401 = load i32, ptr %10, align 4, !tbaa !9
  %402 = load i32, ptr %11, align 4, !tbaa !9
  %403 = mul nsw i32 %401, %402
  %404 = sext i32 %403 to i64
  %405 = mul i64 %404, 1
  %406 = call noalias ptr @malloc(i64 noundef %405) #6
  store ptr %406, ptr %40, align 8, !tbaa !5
  %407 = load ptr, ptr %40, align 8, !tbaa !5
  %408 = icmp eq ptr %407, null
  br i1 %408, label %409, label %410

409:                                              ; preds = %400
  store i32 1, ptr %20, align 4
  br label %492

410:                                              ; preds = %400
  %411 = load ptr, ptr %8, align 8, !tbaa !5
  %412 = load ptr, ptr %40, align 8, !tbaa !5
  %413 = load i32, ptr %10, align 4, !tbaa !9
  %414 = load i32, ptr %11, align 4, !tbaa !9
  %415 = load i32, ptr %10, align 4, !tbaa !9
  %416 = load float, ptr %13, align 4, !tbaa !11
  call void @CPUImageGaussianBlurFilter(ptr noundef %411, ptr noundef %412, i32 noundef %413, i32 noundef %414, i32 noundef %415, float noundef %416)
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %417

417:                                              ; preds = %487, %410
  %418 = load i32, ptr %41, align 4, !tbaa !9
  %419 = load i32, ptr %11, align 4, !tbaa !9
  %420 = icmp slt i32 %418, %419
  br i1 %420, label %422, label %421

421:                                              ; preds = %417
  store i32 21, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %490

422:                                              ; preds = %417
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %423 = load ptr, ptr %8, align 8, !tbaa !5
  %424 = load i32, ptr %41, align 4, !tbaa !9
  %425 = load i32, ptr %10, align 4, !tbaa !9
  %426 = mul nsw i32 %424, %425
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds i8, ptr %423, i64 %427
  store ptr %428, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %429 = load ptr, ptr %40, align 8, !tbaa !5
  %430 = load i32, ptr %41, align 4, !tbaa !9
  %431 = load i32, ptr %10, align 4, !tbaa !9
  %432 = mul nsw i32 %430, %431
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds i8, ptr %429, i64 %433
  store ptr %434, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %435 = load ptr, ptr %9, align 8, !tbaa !5
  %436 = load i32, ptr %41, align 4, !tbaa !9
  %437 = load i32, ptr %10, align 4, !tbaa !9
  %438 = mul nsw i32 %436, %437
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds i8, ptr %435, i64 %439
  store ptr %440, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  store i32 0, ptr %45, align 4, !tbaa !9
  br label %441

441:                                              ; preds = %483, %422
  %442 = load i32, ptr %45, align 4, !tbaa !9
  %443 = load i32, ptr %10, align 4, !tbaa !9
  %444 = icmp slt i32 %442, %443
  br i1 %444, label %446, label %445

445:                                              ; preds = %441
  store i32 24, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  br label %486

446:                                              ; preds = %441
  %447 = load ptr, ptr %42, align 8, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %447, i64 0
  %449 = load i8, ptr %448, align 1, !tbaa !13
  %450 = zext i8 %449 to i32
  %451 = load ptr, ptr %44, align 8, !tbaa !5
  %452 = getelementptr inbounds i8, ptr %451, i64 0
  %453 = load i8, ptr %452, align 1, !tbaa !13
  %454 = zext i8 %453 to i32
  %455 = sub nsw i32 %450, %454
  %456 = add nsw i32 %455, 128
  %457 = trunc i32 %456 to i8
  %458 = load ptr, ptr %44, align 8, !tbaa !5
  %459 = getelementptr inbounds i8, ptr %458, i64 0
  store i8 %457, ptr %459, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %460 = getelementptr inbounds [65536 x i8], ptr %18, i64 0, i64 0
  %461 = load ptr, ptr %42, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i64 0
  %463 = load i8, ptr %462, align 1, !tbaa !13
  %464 = zext i8 %463 to i32
  %465 = shl i32 %464, 8
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds i8, ptr %460, i64 %466
  store ptr %467, ptr %46, align 8, !tbaa !5
  %468 = load ptr, ptr %46, align 8, !tbaa !5
  %469 = load ptr, ptr %44, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i64 0
  %471 = load i8, ptr %470, align 1, !tbaa !13
  %472 = zext i8 %471 to i64
  %473 = getelementptr inbounds i8, ptr %468, i64 %472
  %474 = load i8, ptr %473, align 1, !tbaa !13
  %475 = load ptr, ptr %44, align 8, !tbaa !5
  %476 = getelementptr inbounds i8, ptr %475, i64 0
  store i8 %474, ptr %476, align 1, !tbaa !13
  %477 = load ptr, ptr %43, align 8, !tbaa !5
  %478 = getelementptr inbounds i8, ptr %477, i32 1
  store ptr %478, ptr %43, align 8, !tbaa !5
  %479 = load ptr, ptr %44, align 8, !tbaa !5
  %480 = getelementptr inbounds i8, ptr %479, i32 1
  store ptr %480, ptr %44, align 8, !tbaa !5
  %481 = load ptr, ptr %42, align 8, !tbaa !5
  %482 = getelementptr inbounds i8, ptr %481, i32 1
  store ptr %482, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  br label %483

483:                                              ; preds = %446
  %484 = load i32, ptr %45, align 4, !tbaa !9
  %485 = add nsw i32 %484, 1
  store i32 %485, ptr %45, align 4, !tbaa !9
  br label %441, !llvm.loop !21

486:                                              ; preds = %445
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %487

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

490:                                              ; preds = %421
  %491 = load ptr, ptr %40, align 8, !tbaa !5
  call void @free(ptr noundef %491) #5
  store i32 0, ptr %20, align 4
  br label %492

492:                                              ; preds = %490, %409
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  %493 = load i32, ptr %20, align 4
  switch i32 %493, label %497 [
    i32 0, label %494
  ]

494:                                              ; preds = %492
  br label %496

495:                                              ; preds = %181
  br label %496

496:                                              ; preds = %495, %494, %398
  store i32 0, ptr %20, align 4
  br label %497

497:                                              ; preds = %496, %492, %398
  call void @llvm.lifetime.end.p0(i64 65536, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  %498 = load i32, ptr %20, align 4
  switch i32 %498, label %500 [
    i32 0, label %499
    i32 1, label %499
  ]

499:                                              ; preds = %497, %497
  ret void

500:                                              ; preds = %497
  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 @CPUImageGaussianBlurFilter(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, float noundef) local_unnamed_addr #4

; 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
define dso_local void @CPUImageUnsharpMaskFilter(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, float noundef %5, i32 noundef %6) local_unnamed_addr #4 {
  %8 = alloca [65536 x i8], align 16
  %9 = tail call i32 @llvm.smin.i32(i32 %6, i32 100)
  %10 = tail call i32 @llvm.smax.i32(i32 %9, i32 0)
  %.tr = trunc nsw i32 %10 to i16
  %11 = shl nuw nsw i16 %.tr, 8
  %.lhs.trunc = sub nuw nsw i16 25600, %11
  %12 = udiv i16 %.lhs.trunc, 100
  %13 = udiv i16 %11, 100
  %.zext188 = zext nneg i16 %13 to i32
  call void @llvm.lifetime.start.p0(i64 65536, ptr nonnull %8) #6
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(65536) %8, i8 0, i64 65536, i1 false)
  %14 = zext nneg i16 %12 to i64
  %broadcast.splatinsert270 = insertelement <16 x i32> poison, i32 %.zext188, i64 0
  %broadcast.splat271 = shufflevector <16 x i32> %broadcast.splatinsert270, <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 %17

15:                                               ; preds = %.split192.us
  %16 = sdiv i32 %4, %2
  switch i32 %16, label %.critedge [
    i32 4, label %51
    i32 3, label %51
    i32 1, label %165
  ]

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

vector.ph257:                                     ; preds = %17
  %26 = sub i32 255, %24
  %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.splatinsert268 = insertelement <16 x i32> poison, i32 %26, 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 %25, i64 0
  %broadcast.splat273 = shufflevector <16 x i32> %broadcast.splatinsert272, <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.next274, %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 %19, i64 %index262
  %27 = sub nsw <16 x i32> %broadcast.splat267, %vec.ind263
  %28 = tail call <16 x i32> @llvm.umin.v16i32(<16 x i32> %27, <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>)
  %29 = xor <16 x i32> %28, <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>
  %30 = mul nuw nsw <16 x i32> %29, %broadcast.splat269
  %31 = lshr <16 x i32> %30, <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>
  %32 = 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>, %31
  %33 = mul nuw nsw <16 x i32> %32, %broadcast.splat271
  %34 = add nuw <16 x i32> %33, %broadcast.splat273
  %35 = icmp ult <16 x i32> %34, <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>
  %36 = lshr <16 x i32> %34, <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>
  %37 = trunc <16 x i32> %36 to <16 x i8>
  %38 = select <16 x i1> %35, <16 x i8> %37, <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> %38, ptr %next.gep265, align 16, !tbaa !5
  %index.next274 = 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>
  %39 = icmp eq i64 %index.next274, 256
  br i1 %39, label %.split192.us, label %vector.body261, !llvm.loop !8

vector.ph:                                        ; preds = %17
  %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.splatinsert249 = insertelement <16 x i32> poison, i32 %24, i64 0
  %broadcast.splat250 = shufflevector <16 x i32> %broadcast.splatinsert249, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert253 = insertelement <16 x i32> poison, i32 %25, 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 %19, i64 %index
  %40 = sub nsw <16 x i32> %broadcast.splat, %vec.ind
  %41 = tail call <16 x i32> @llvm.umin.v16i32(<16 x i32> %40, <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>)
  %42 = mul nuw nsw <16 x i32> %41, %broadcast.splat250
  %43 = lshr <16 x i32> %42, <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>
  %44 = mul nuw nsw <16 x i32> %43, %broadcast.splat252
  %45 = add nuw nsw <16 x i32> %44, %broadcast.splat254
  %46 = icmp ult <16 x i32> %45, <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>
  %47 = lshr <16 x i32> %45, <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>
  %48 = trunc <16 x i32> %47 to <16 x i8>
  %49 = select <16 x i1> %46, <16 x i8> %48, <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> %49, 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>
  %50 = icmp eq i64 %index.next, 256
  br i1 %50, 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 %15, label %17, !llvm.loop !13

51:                                               ; preds = %15, %15
  %52 = mul nsw i32 %3, %2
  %53 = sext i32 %52 to i64
  %54 = tail call noalias ptr @malloc(i64 noundef %53) #7
  %55 = tail call noalias ptr @malloc(i64 noundef %53) #7
  %56 = icmp ne ptr %55, null
  %57 = icmp ne ptr %54, null
  %or.cond.not = and i1 %57, %56
  br i1 %or.cond.not, label %.preheader, label %120

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

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

.lr.ph.us208.preheader:                           ; preds = %.lr.ph206
  %61 = sext i32 %4 to i64
  %62 = zext nneg i32 %2 to i64
  %wide.trip.count237 = zext nneg i32 %3 to i64
  %xtraiter277 = and i32 %2, 1
  %63 = icmp eq i32 %2, 1
  %unroll_iter279 = and i32 %2, 2147483646
  %lcmp.mod278.not = icmp eq i32 %xtraiter277, 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 ]
  %64 = mul nsw i64 %indvars.iv234, %61
  %65 = getelementptr inbounds i8, ptr %0, i64 %64
  %66 = mul nuw nsw i64 %indvars.iv234, %62
  %67 = getelementptr inbounds i8, ptr %54, i64 %66
  %68 = getelementptr inbounds i8, ptr %55, i64 %66
  br i1 %63, 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 [ %104, %.lr.ph.us208.new ], [ %68, %.lr.ph.us208 ]
  %.0172202.us = phi ptr [ %103, %.lr.ph.us208.new ], [ %67, %.lr.ph.us208 ]
  %.0173201.us = phi ptr [ %102, %.lr.ph.us208.new ], [ %65, %.lr.ph.us208 ]
  %niter280 = phi i32 [ %niter280.next.1, %.lr.ph.us208.new ], [ 0, %.lr.ph.us208 ]
  %69 = load i8, ptr %.0173201.us, align 1, !tbaa !5
  %70 = zext i8 %69 to i32
  %71 = mul nuw nsw i32 %70, 19595
  %72 = getelementptr inbounds i8, ptr %.0173201.us, i64 1
  %73 = load i8, ptr %72, align 1, !tbaa !5
  %74 = zext i8 %73 to i32
  %75 = mul nuw nsw i32 %74, 38470
  %76 = add nuw nsw i32 %75, %71
  %77 = getelementptr inbounds i8, ptr %.0173201.us, i64 2
  %78 = load i8, ptr %77, align 1, !tbaa !5
  %79 = zext i8 %78 to i32
  %80 = mul nuw nsw i32 %79, 7471
  %81 = add nuw nsw i32 %76, %80
  %82 = lshr i32 %81, 16
  %83 = trunc nuw i32 %82 to i8
  store i8 %83, ptr %.0172202.us, align 1, !tbaa !5
  store i8 %83, ptr %.0171203.us, align 1, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %.0173201.us, i64 %60
  %85 = getelementptr inbounds i8, ptr %.0172202.us, i64 1
  %86 = getelementptr inbounds i8, ptr %.0171203.us, i64 1
  %87 = load i8, ptr %84, align 1, !tbaa !5
  %88 = zext i8 %87 to i32
  %89 = mul nuw nsw i32 %88, 19595
  %90 = getelementptr inbounds i8, ptr %84, i64 1
  %91 = load i8, ptr %90, align 1, !tbaa !5
  %92 = zext i8 %91 to i32
  %93 = mul nuw nsw i32 %92, 38470
  %94 = add nuw nsw i32 %93, %89
  %95 = getelementptr inbounds i8, ptr %84, i64 2
  %96 = load i8, ptr %95, align 1, !tbaa !5
  %97 = zext i8 %96 to i32
  %98 = mul nuw nsw i32 %97, 7471
  %99 = add nuw nsw i32 %94, %98
  %100 = lshr i32 %99, 16
  %101 = trunc nuw i32 %100 to i8
  store i8 %101, ptr %85, align 1, !tbaa !5
  store i8 %101, ptr %86, align 1, !tbaa !5
  %102 = getelementptr inbounds i8, ptr %84, i64 %60
  %103 = getelementptr inbounds i8, ptr %.0172202.us, i64 2
  %104 = getelementptr inbounds i8, ptr %.0171203.us, i64 2
  %niter280.next.1 = add i32 %niter280, 2
  %niter280.ncmp.1 = icmp eq i32 %niter280.next.1, %unroll_iter279
  br i1 %niter280.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 [ %68, %.lr.ph.us208 ], [ %104, %.lr.ph.us208.new ]
  %.0172202.us.unr = phi ptr [ %67, %.lr.ph.us208 ], [ %103, %.lr.ph.us208.new ]
  %.0173201.us.unr = phi ptr [ %65, %.lr.ph.us208 ], [ %102, %.lr.ph.us208.new ]
  br i1 %lcmp.mod278.not, label %._crit_edge.us209, label %._crit_edge.us209.epilog-lcssa

._crit_edge.us209.epilog-lcssa:                   ; preds = %._crit_edge.us209.unr-lcssa
  %105 = load i8, ptr %.0173201.us.unr, align 1, !tbaa !5
  %106 = zext i8 %105 to i32
  %107 = mul nuw nsw i32 %106, 19595
  %108 = getelementptr inbounds i8, ptr %.0173201.us.unr, i64 1
  %109 = load i8, ptr %108, align 1, !tbaa !5
  %110 = zext i8 %109 to i32
  %111 = mul nuw nsw i32 %110, 38470
  %112 = add nuw nsw i32 %111, %107
  %113 = getelementptr inbounds i8, ptr %.0173201.us.unr, i64 2
  %114 = load i8, ptr %113, align 1, !tbaa !5
  %115 = zext i8 %114 to i32
  %116 = mul nuw nsw i32 %115, 7471
  %117 = add nuw nsw i32 %112, %116
  %118 = lshr i32 %117, 16
  %119 = trunc nuw i32 %118 to i8
  store i8 %119, ptr %.0172202.us.unr, align 1, !tbaa !5
  store i8 %119, 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

120:                                              ; preds = %51
  %.not183 = icmp eq ptr %55, null
  br i1 %.not183, label %122, label %121

121:                                              ; preds = %120
  tail call void @free(ptr noundef nonnull %55) #6
  br label %122

122:                                              ; preds = %121, %120
  %.not184 = icmp eq ptr %54, null
  br i1 %.not184, label %.critedge, label %123

123:                                              ; preds = %122
  tail call void @free(ptr noundef nonnull %54) #6
  br label %.critedge

._crit_edge207:                                   ; preds = %._crit_edge.us209
  tail call void @CPUImageGaussianBlurFilter(ptr noundef nonnull %54, ptr noundef nonnull %55, i32 noundef %2, i32 noundef %3, i32 noundef %2, float noundef %5)
  br i1 %58, label %.lr.ph217, label %._crit_edge218

.lr.ph217:                                        ; preds = %._crit_edge207
  %124 = sext i32 %16 to i64
  %125 = sext i32 %4 to i64
  %126 = 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 ]
  %127 = mul nsw i64 %indvars.iv240, %125
  %128 = getelementptr inbounds i8, ptr %0, i64 %127
  %129 = getelementptr inbounds i8, ptr %1, i64 %127
  %130 = mul nuw nsw i64 %indvars.iv240, %126
  %131 = getelementptr inbounds i8, ptr %54, i64 %130
  %132 = getelementptr inbounds i8, ptr %55, i64 %130
  br label %133

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

._crit_edge.us220:                                ; preds = %133
  %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
  tail call void @CPUImageGaussianBlurFilter(ptr noundef nonnull %54, ptr noundef nonnull %55, i32 noundef %2, i32 noundef %3, i32 noundef %2, float noundef %5)
  br label %._crit_edge218

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

165:                                              ; preds = %15
  %166 = mul nsw i32 %3, %2
  %167 = sext i32 %166 to i64
  %168 = tail call noalias ptr @malloc(i64 noundef %167) #7
  %.not = icmp eq ptr %168, null
  br i1 %.not, label %.critedge, label %169

169:                                              ; preds = %165
  tail call void @CPUImageGaussianBlurFilter(ptr noundef %0, ptr noundef nonnull %168, i32 noundef %2, i32 noundef %3, i32 noundef %2, float noundef %5)
  %170 = icmp sgt i32 %3, 0
  %171 = icmp sgt i32 %2, 0
  %or.cond = and i1 %170, %171
  br i1 %or.cond, label %.lr.ph.us.preheader, label %._crit_edge200

.lr.ph.us.preheader:                              ; preds = %169
  %172 = zext nneg i32 %2 to i64
  %wide.trip.count = zext nneg i32 %3 to i64
  %xtraiter = and i32 %2, 1
  %173 = icmp eq i32 %2, 1
  %unroll_iter = and i32 %2, 2147483646
  %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 ]
  %174 = mul nuw nsw i64 %indvars.iv229, %172
  %175 = getelementptr inbounds i8, ptr %0, i64 %174
  %176 = getelementptr inbounds i8, ptr %1, i64 %174
  br i1 %173, 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 [ %201, %.lr.ph.us.new ], [ %176, %.lr.ph.us ]
  %.0159194.us = phi ptr [ %202, %.lr.ph.us.new ], [ %175, %.lr.ph.us ]
  %niter = phi i32 [ %niter.next.1, %.lr.ph.us.new ], [ 0, %.lr.ph.us ]
  %177 = load i8, ptr %.0159194.us, align 1, !tbaa !5
  %178 = load i8, ptr %.0157195.us, align 1, !tbaa !5
  %179 = sub i8 %177, %178
  %180 = xor i8 %179, -128
  store i8 %180, ptr %.0157195.us, align 1, !tbaa !5
  %181 = load i8, ptr %.0159194.us, align 1, !tbaa !5
  %182 = zext i8 %181 to i64
  %183 = shl nuw nsw i64 %182, 8
  %184 = getelementptr inbounds i8, ptr %8, i64 %183
  %185 = zext i8 %180 to i64
  %186 = getelementptr inbounds i8, ptr %184, i64 %185
  %187 = load i8, ptr %186, align 1, !tbaa !5
  store i8 %187, ptr %.0157195.us, align 1, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %.0157195.us, i64 1
  %189 = getelementptr inbounds i8, ptr %.0159194.us, i64 1
  %190 = load i8, ptr %189, align 1, !tbaa !5
  %191 = load i8, ptr %188, align 1, !tbaa !5
  %192 = sub i8 %190, %191
  %193 = xor i8 %192, -128
  store i8 %193, ptr %188, align 1, !tbaa !5
  %194 = load i8, ptr %189, align 1, !tbaa !5
  %195 = zext i8 %194 to i64
  %196 = shl nuw nsw i64 %195, 8
  %197 = getelementptr inbounds i8, ptr %8, i64 %196
  %198 = zext i8 %193 to i64
  %199 = getelementptr inbounds i8, ptr %197, i64 %198
  %200 = load i8, ptr %199, align 1, !tbaa !5
  store i8 %200, ptr %188, align 1, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %.0157195.us, i64 2
  %202 = getelementptr inbounds i8, ptr %.0159194.us, i64 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, 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 [ %176, %.lr.ph.us ], [ %201, %.lr.ph.us.new ]
  %.0159194.us.unr = phi ptr [ %175, %.lr.ph.us ], [ %202, %.lr.ph.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %203 = load i8, ptr %.0159194.us.unr, align 1, !tbaa !5
  %204 = load i8, ptr %.0157195.us.unr, align 1, !tbaa !5
  %205 = sub i8 %203, %204
  %206 = xor i8 %205, -128
  store i8 %206, ptr %.0157195.us.unr, align 1, !tbaa !5
  %207 = load i8, ptr %.0159194.us.unr, align 1, !tbaa !5
  %208 = zext i8 %207 to i64
  %209 = shl nuw nsw i64 %208, 8
  %210 = getelementptr inbounds i8, ptr %8, i64 %209
  %211 = zext i8 %206 to i64
  %212 = getelementptr inbounds i8, ptr %210, i64 %211
  %213 = load i8, ptr %212, align 1, !tbaa !5
  store i8 %213, ptr %.0157195.us.unr, align 1, !tbaa !5
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-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 !19

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

.critedge:                                        ; preds = %._crit_edge200, %._crit_edge218, %123, %122, %165, %15
  call void @llvm.lifetime.end.p0(i64 65536, ptr nonnull %8) #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, !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