; LLVM IR from modlfo/AudioEngine :: AudioEngine/JuceLibraryCode/modules/juce_graphics/image_formats/jpglib (2x2)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.jpeg_decompress_struct = type { ptr, ptr, ptr, ptr, i8, i32, ptr, i32, i32, i32, i32, i32, i32, i32, double, i8, i8, i32, i8, i8, i8, i32, i8, i32, i8, i8, i8, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, ptr, [4 x ptr], [4 x ptr], [4 x ptr], i32, ptr, i8, i8, [16 x i8], [16 x i8], [16 x i8], i32, i8, i8, i8, i8, i16, i16, i8, i8, i8, ptr, i32, i32, i32, i32, ptr, i32, [4 x ptr], i32, i32, i32, [10 x i32], i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.jpeg_component_info = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, ptr, ptr }

; 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: nounwind uwtable
define dso_local void @jpeg_idct_2x2(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca [16 x i32], align 16
  %21 = alloca i32, align 4
  %22 = alloca i8, align 1
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store i32 %4, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.jpeg_decompress_struct, ptr %23, i32 0, i32 65
  %25 = load ptr, ptr %24, align 8, !tbaa !11
  %26 = getelementptr inbounds i8, ptr %25, i64 128
  store ptr %26, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 64, ptr %20) #2
  %27 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %27, ptr %14, align 8, !tbaa !5
  %28 = load ptr, ptr %7, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.jpeg_component_info, ptr %28, i32 0, i32 20
  %30 = load ptr, ptr %29, align 8, !tbaa !15
  store ptr %30, ptr %15, align 8, !tbaa !5
  %31 = getelementptr inbounds [16 x i32], ptr %20, i64 0, i64 0
  store ptr %31, ptr %16, align 8, !tbaa !5
  store i32 8, ptr %19, align 4, !tbaa !9
  br label %32

32:                                               ; preds = %163, %5
  %33 = load i32, ptr %19, align 4, !tbaa !9
  %34 = icmp sgt i32 %33, 0
  br i1 %34, label %35, label %172

35:                                               ; preds = %32
  %36 = load i32, ptr %19, align 4, !tbaa !9
  %37 = icmp eq i32 %36, 6
  br i1 %37, label %44, label %38

38:                                               ; preds = %35
  %39 = load i32, ptr %19, align 4, !tbaa !9
  %40 = icmp eq i32 %39, 4
  br i1 %40, label %44, label %41

41:                                               ; preds = %38
  %42 = load i32, ptr %19, align 4, !tbaa !9
  %43 = icmp eq i32 %42, 2
  br i1 %43, label %44, label %45

44:                                               ; preds = %41, %38, %35
  br label %163

45:                                               ; preds = %41
  %46 = load ptr, ptr %14, align 8, !tbaa !5
  %47 = getelementptr inbounds i16, ptr %46, i64 8
  %48 = load i16, ptr %47, align 2, !tbaa !17
  %49 = sext i16 %48 to i32
  %50 = icmp eq i32 %49, 0
  br i1 %50, label %51, label %85

51:                                               ; preds = %45
  %52 = load ptr, ptr %14, align 8, !tbaa !5
  %53 = getelementptr inbounds i16, ptr %52, i64 24
  %54 = load i16, ptr %53, align 2, !tbaa !17
  %55 = sext i16 %54 to i32
  %56 = icmp eq i32 %55, 0
  br i1 %56, label %57, label %85

57:                                               ; preds = %51
  %58 = load ptr, ptr %14, align 8, !tbaa !5
  %59 = getelementptr inbounds i16, ptr %58, i64 40
  %60 = load i16, ptr %59, align 2, !tbaa !17
  %61 = sext i16 %60 to i32
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %63, label %85

63:                                               ; preds = %57
  %64 = load ptr, ptr %14, align 8, !tbaa !5
  %65 = getelementptr inbounds i16, ptr %64, i64 56
  %66 = load i16, ptr %65, align 2, !tbaa !17
  %67 = sext i16 %66 to i32
  %68 = icmp eq i32 %67, 0
  br i1 %68, label %69, label %85

69:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #2
  %70 = load ptr, ptr %14, align 8, !tbaa !5
  %71 = getelementptr inbounds i16, ptr %70, i64 0
  %72 = load i16, ptr %71, align 2, !tbaa !17
  %73 = sext i16 %72 to i32
  %74 = load ptr, ptr %15, align 8, !tbaa !5
  %75 = getelementptr inbounds i32, ptr %74, i64 0
  %76 = load i32, ptr %75, align 4, !tbaa !9
  %77 = mul nsw i32 %73, %76
  %78 = shl i32 %77, 2
  store i32 %78, ptr %21, align 4, !tbaa !9
  %79 = load i32, ptr %21, align 4, !tbaa !9
  %80 = load ptr, ptr %16, align 8, !tbaa !5
  %81 = getelementptr inbounds i32, ptr %80, i64 0
  store i32 %79, ptr %81, align 4, !tbaa !9
  %82 = load i32, ptr %21, align 4, !tbaa !9
  %83 = load ptr, ptr %16, align 8, !tbaa !5
  %84 = getelementptr inbounds i32, ptr %83, i64 8
  store i32 %82, ptr %84, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  br label %163

85:                                               ; preds = %63, %57, %51, %45
  %86 = load ptr, ptr %14, align 8, !tbaa !5
  %87 = getelementptr inbounds i16, ptr %86, i64 0
  %88 = load i16, ptr %87, align 2, !tbaa !17
  %89 = sext i16 %88 to i32
  %90 = load ptr, ptr %15, align 8, !tbaa !5
  %91 = getelementptr inbounds i32, ptr %90, i64 0
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = mul nsw i32 %89, %92
  %94 = sext i32 %93 to i64
  store i64 %94, ptr %13, align 8, !tbaa !18
  %95 = load i64, ptr %13, align 8, !tbaa !18
  %96 = shl i64 %95, 15
  store i64 %96, ptr %12, align 8, !tbaa !18
  %97 = load ptr, ptr %14, align 8, !tbaa !5
  %98 = getelementptr inbounds i16, ptr %97, i64 56
  %99 = load i16, ptr %98, align 2, !tbaa !17
  %100 = sext i16 %99 to i32
  %101 = load ptr, ptr %15, align 8, !tbaa !5
  %102 = getelementptr inbounds i32, ptr %101, i64 56
  %103 = load i32, ptr %102, align 4, !tbaa !9
  %104 = mul nsw i32 %100, %103
  %105 = sext i32 %104 to i64
  store i64 %105, ptr %13, align 8, !tbaa !18
  %106 = load i64, ptr %13, align 8, !tbaa !18
  %107 = mul nsw i64 %106, -5906
  store i64 %107, ptr %11, align 8, !tbaa !18
  %108 = load ptr, ptr %14, align 8, !tbaa !5
  %109 = getelementptr inbounds i16, ptr %108, i64 40
  %110 = load i16, ptr %109, align 2, !tbaa !17
  %111 = sext i16 %110 to i32
  %112 = load ptr, ptr %15, align 8, !tbaa !5
  %113 = getelementptr inbounds i32, ptr %112, i64 40
  %114 = load i32, ptr %113, align 4, !tbaa !9
  %115 = mul nsw i32 %111, %114
  %116 = sext i32 %115 to i64
  store i64 %116, ptr %13, align 8, !tbaa !18
  %117 = load i64, ptr %13, align 8, !tbaa !18
  %118 = mul nsw i64 %117, 6967
  %119 = load i64, ptr %11, align 8, !tbaa !18
  %120 = add nsw i64 %119, %118
  store i64 %120, ptr %11, align 8, !tbaa !18
  %121 = load ptr, ptr %14, align 8, !tbaa !5
  %122 = getelementptr inbounds i16, ptr %121, i64 24
  %123 = load i16, ptr %122, align 2, !tbaa !17
  %124 = sext i16 %123 to i32
  %125 = load ptr, ptr %15, align 8, !tbaa !5
  %126 = getelementptr inbounds i32, ptr %125, i64 24
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = mul nsw i32 %124, %127
  %129 = sext i32 %128 to i64
  store i64 %129, ptr %13, align 8, !tbaa !18
  %130 = load i64, ptr %13, align 8, !tbaa !18
  %131 = mul nsw i64 %130, -10426
  %132 = load i64, ptr %11, align 8, !tbaa !18
  %133 = add nsw i64 %132, %131
  store i64 %133, ptr %11, align 8, !tbaa !18
  %134 = load ptr, ptr %14, align 8, !tbaa !5
  %135 = getelementptr inbounds i16, ptr %134, i64 8
  %136 = load i16, ptr %135, align 2, !tbaa !17
  %137 = sext i16 %136 to i32
  %138 = load ptr, ptr %15, align 8, !tbaa !5
  %139 = getelementptr inbounds i32, ptr %138, i64 8
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = mul nsw i32 %137, %140
  %142 = sext i32 %141 to i64
  store i64 %142, ptr %13, align 8, !tbaa !18
  %143 = load i64, ptr %13, align 8, !tbaa !18
  %144 = mul nsw i64 %143, 29692
  %145 = load i64, ptr %11, align 8, !tbaa !18
  %146 = add nsw i64 %145, %144
  store i64 %146, ptr %11, align 8, !tbaa !18
  %147 = load i64, ptr %12, align 8, !tbaa !18
  %148 = load i64, ptr %11, align 8, !tbaa !18
  %149 = add nsw i64 %147, %148
  %150 = add nsw i64 %149, 4096
  %151 = ashr i64 %150, 13
  %152 = trunc i64 %151 to i32
  %153 = load ptr, ptr %16, align 8, !tbaa !5
  %154 = getelementptr inbounds i32, ptr %153, i64 0
  store i32 %152, ptr %154, align 4, !tbaa !9
  %155 = load i64, ptr %12, align 8, !tbaa !18
  %156 = load i64, ptr %11, align 8, !tbaa !18
  %157 = sub nsw i64 %155, %156
  %158 = add nsw i64 %157, 4096
  %159 = ashr i64 %158, 13
  %160 = trunc i64 %159 to i32
  %161 = load ptr, ptr %16, align 8, !tbaa !5
  %162 = getelementptr inbounds i32, ptr %161, i64 8
  store i32 %160, ptr %162, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %85, %69, %44
  %164 = load ptr, ptr %14, align 8, !tbaa !5
  %165 = getelementptr inbounds i16, ptr %164, i32 1
  store ptr %165, ptr %14, align 8, !tbaa !5
  %166 = load ptr, ptr %15, align 8, !tbaa !5
  %167 = getelementptr inbounds i32, ptr %166, i32 1
  store ptr %167, ptr %15, align 8, !tbaa !5
  %168 = load ptr, ptr %16, align 8, !tbaa !5
  %169 = getelementptr inbounds i32, ptr %168, i32 1
  store ptr %169, ptr %16, align 8, !tbaa !5
  %170 = load i32, ptr %19, align 4, !tbaa !9
  %171 = add nsw i32 %170, -1
  store i32 %171, ptr %19, align 4, !tbaa !9
  br label %32, !llvm.loop !20

172:                                              ; preds = %32
  %173 = getelementptr inbounds [16 x i32], ptr %20, i64 0, i64 0
  store ptr %173, ptr %16, align 8, !tbaa !5
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %174

174:                                              ; preds = %283, %172
  %175 = load i32, ptr %19, align 4, !tbaa !9
  %176 = icmp slt i32 %175, 2
  br i1 %176, label %177, label %286

177:                                              ; preds = %174
  %178 = load ptr, ptr %9, align 8, !tbaa !5
  %179 = load i32, ptr %19, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds ptr, ptr %178, i64 %180
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  %183 = load i32, ptr %10, align 4, !tbaa !9
  %184 = zext i32 %183 to i64
  %185 = getelementptr inbounds i8, ptr %182, i64 %184
  store ptr %185, ptr %17, align 8, !tbaa !5
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = getelementptr inbounds i32, ptr %186, i64 1
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = icmp eq i32 %188, 0
  br i1 %189, label %190, label %226

190:                                              ; preds = %177
  %191 = load ptr, ptr %16, align 8, !tbaa !5
  %192 = getelementptr inbounds i32, ptr %191, i64 3
  %193 = load i32, ptr %192, align 4, !tbaa !9
  %194 = icmp eq i32 %193, 0
  br i1 %194, label %195, label %226

195:                                              ; preds = %190
  %196 = load ptr, ptr %16, align 8, !tbaa !5
  %197 = getelementptr inbounds i32, ptr %196, i64 5
  %198 = load i32, ptr %197, align 4, !tbaa !9
  %199 = icmp eq i32 %198, 0
  br i1 %199, label %200, label %226

200:                                              ; preds = %195
  %201 = load ptr, ptr %16, align 8, !tbaa !5
  %202 = getelementptr inbounds i32, ptr %201, i64 7
  %203 = load i32, ptr %202, align 4, !tbaa !9
  %204 = icmp eq i32 %203, 0
  br i1 %204, label %205, label %226

205:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #2
  %206 = load ptr, ptr %18, align 8, !tbaa !5
  %207 = load ptr, ptr %16, align 8, !tbaa !5
  %208 = getelementptr inbounds i32, ptr %207, i64 0
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = add nsw i64 %210, 16
  %212 = ashr i64 %211, 5
  %213 = trunc i64 %212 to i32
  %214 = and i32 %213, 1023
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds i8, ptr %206, i64 %215
  %217 = load i8, ptr %216, align 1, !tbaa !22
  store i8 %217, ptr %22, align 1, !tbaa !22
  %218 = load i8, ptr %22, align 1, !tbaa !22
  %219 = load ptr, ptr %17, align 8, !tbaa !5
  %220 = getelementptr inbounds i8, ptr %219, i64 0
  store i8 %218, ptr %220, align 1, !tbaa !22
  %221 = load i8, ptr %22, align 1, !tbaa !22
  %222 = load ptr, ptr %17, align 8, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %222, i64 1
  store i8 %221, ptr %223, align 1, !tbaa !22
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  %225 = getelementptr inbounds i32, ptr %224, i64 8
  store ptr %225, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #2
  br label %283

226:                                              ; preds = %200, %195, %190, %177
  %227 = load ptr, ptr %16, align 8, !tbaa !5
  %228 = getelementptr inbounds i32, ptr %227, i64 0
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = shl i64 %230, 15
  store i64 %231, ptr %12, align 8, !tbaa !18
  %232 = load ptr, ptr %16, align 8, !tbaa !5
  %233 = getelementptr inbounds i32, ptr %232, i64 7
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = mul nsw i64 %235, -5906
  %237 = load ptr, ptr %16, align 8, !tbaa !5
  %238 = getelementptr inbounds i32, ptr %237, i64 5
  %239 = load i32, ptr %238, align 4, !tbaa !9
  %240 = sext i32 %239 to i64
  %241 = mul nsw i64 %240, 6967
  %242 = add nsw i64 %236, %241
  %243 = load ptr, ptr %16, align 8, !tbaa !5
  %244 = getelementptr inbounds i32, ptr %243, i64 3
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = mul nsw i64 %246, -10426
  %248 = add nsw i64 %242, %247
  %249 = load ptr, ptr %16, align 8, !tbaa !5
  %250 = getelementptr inbounds i32, ptr %249, i64 1
  %251 = load i32, ptr %250, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = mul nsw i64 %252, 29692
  %254 = add nsw i64 %248, %253
  store i64 %254, ptr %11, align 8, !tbaa !18
  %255 = load ptr, ptr %18, align 8, !tbaa !5
  %256 = load i64, ptr %12, align 8, !tbaa !18
  %257 = load i64, ptr %11, align 8, !tbaa !18
  %258 = add nsw i64 %256, %257
  %259 = add nsw i64 %258, 524288
  %260 = ashr i64 %259, 20
  %261 = trunc i64 %260 to i32
  %262 = and i32 %261, 1023
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i8, ptr %255, i64 %263
  %265 = load i8, ptr %264, align 1, !tbaa !22
  %266 = load ptr, ptr %17, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 0
  store i8 %265, ptr %267, align 1, !tbaa !22
  %268 = load ptr, ptr %18, align 8, !tbaa !5
  %269 = load i64, ptr %12, align 8, !tbaa !18
  %270 = load i64, ptr %11, align 8, !tbaa !18
  %271 = sub nsw i64 %269, %270
  %272 = add nsw i64 %271, 524288
  %273 = ashr i64 %272, 20
  %274 = trunc i64 %273 to i32
  %275 = and i32 %274, 1023
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i8, ptr %268, i64 %276
  %278 = load i8, ptr %277, align 1, !tbaa !22
  %279 = load ptr, ptr %17, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 1
  store i8 %278, ptr %280, align 1, !tbaa !22
  %281 = load ptr, ptr %16, align 8, !tbaa !5
  %282 = getelementptr inbounds i32, ptr %281, i64 8
  store ptr %282, ptr %16, align 8, !tbaa !5
  br label %283

283:                                              ; preds = %226, %205
  %284 = load i32, ptr %19, align 4, !tbaa !9
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %19, align 4, !tbaa !9
  br label %174, !llvm.loop !23

286:                                              ; preds = %174
  call void @llvm.lifetime.end.p0(i64 64, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #2
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 392}
!12 = !{!"jpeg_decompress_struct", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !7, i64 32, !10, i64 36, !6, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !13, i64 80, !7, i64 88, !7, i64 89, !10, i64 92, !7, i64 96, !7, i64 97, !7, i64 98, !10, i64 100, !7, i64 104, !10, i64 108, !7, i64 112, !7, i64 113, !7, i64 114, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !6, i64 144, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !6, i64 176, !7, i64 184, !7, i64 216, !7, i64 248, !10, i64 280, !6, i64 288, !7, i64 296, !7, i64 297, !7, i64 298, !7, i64 314, !7, i64 330, !10, i64 348, !7, i64 352, !7, i64 353, !7, i64 354, !7, i64 355, !14, i64 356, !14, i64 358, !7, i64 360, !7, i64 361, !7, i64 362, !6, i64 368, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !6, i64 392, !10, i64 400, !7, i64 408, !10, i64 440, !10, i64 444, !10, i64 448, !7, i64 452, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !6, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !6, i64 592}
!13 = !{!"double", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!16, !6, i64 88}
!16 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !7, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !6, i64 88}
!17 = !{!14, !14, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !21}


; 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 nofree norecurse nosync nounwind willreturn memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @jpeg_idct_2x2(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, i32 noundef %4) local_unnamed_addr #0 {
  %6 = getelementptr inbounds i8, ptr %0, i64 392
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 88
  %9 = load ptr, ptr %8, align 8, !tbaa !13
  %10 = getelementptr inbounds i8, ptr %2, i64 16
  %11 = load i16, ptr %10, align 2, !tbaa !15
  %12 = icmp eq i16 %11, 0
  %13 = getelementptr inbounds i8, ptr %2, i64 48
  %14 = load i16, ptr %13, align 2, !tbaa !15
  %15 = icmp eq i16 %14, 0
  %or.cond = select i1 %12, i1 %15, i1 false
  br i1 %or.cond, label %16, label %._crit_edge97

16:                                               ; preds = %5
  %17 = getelementptr inbounds i8, ptr %2, i64 80
  %18 = load i16, ptr %17, align 2, !tbaa !15
  %19 = icmp eq i16 %18, 0
  br i1 %19, label %20, label %._crit_edge97

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %2, i64 112
  %22 = load i16, ptr %21, align 2, !tbaa !15
  %23 = icmp eq i16 %22, 0
  br i1 %23, label %24, label %._crit_edge97

24:                                               ; preds = %20
  %25 = load i16, ptr %2, align 2, !tbaa !15
  %26 = sext i16 %25 to i32
  %27 = load i32, ptr %9, align 4, !tbaa !16
  %28 = shl nsw i32 %26, 2
  %29 = mul i32 %28, %27
  br label %75

._crit_edge97:                                    ; preds = %5, %20, %16
  %30 = phi i16 [ 0, %20 ], [ 0, %16 ], [ %14, %5 ]
  %31 = load i16, ptr %2, align 2, !tbaa !15
  %32 = sext i16 %31 to i32
  %33 = load i32, ptr %9, align 4, !tbaa !16
  %34 = mul nsw i32 %33, %32
  %35 = sext i32 %34 to i64
  %36 = shl nsw i64 %35, 15
  %37 = getelementptr inbounds i8, ptr %2, i64 112
  %38 = load i16, ptr %37, align 2, !tbaa !15
  %39 = sext i16 %38 to i32
  %40 = getelementptr inbounds i8, ptr %9, i64 224
  %41 = load i32, ptr %40, align 4, !tbaa !16
  %42 = mul nsw i32 %41, %39
  %43 = sext i32 %42 to i64
  %44 = mul nsw i64 %43, -5906
  %45 = getelementptr inbounds i8, ptr %2, i64 80
  %46 = load i16, ptr %45, align 2, !tbaa !15
  %47 = sext i16 %46 to i32
  %48 = getelementptr inbounds i8, ptr %9, i64 160
  %49 = load i32, ptr %48, align 4, !tbaa !16
  %50 = mul nsw i32 %49, %47
  %51 = sext i32 %50 to i64
  %52 = mul nsw i64 %51, 6967
  %53 = add nsw i64 %52, %44
  %54 = sext i16 %30 to i32
  %55 = getelementptr inbounds i8, ptr %9, i64 96
  %56 = load i32, ptr %55, align 4, !tbaa !16
  %57 = mul nsw i32 %56, %54
  %58 = sext i32 %57 to i64
  %59 = mul nsw i64 %58, -10426
  %60 = add nsw i64 %53, %59
  %61 = sext i16 %11 to i32
  %62 = getelementptr inbounds i8, ptr %9, i64 32
  %63 = load i32, ptr %62, align 4, !tbaa !16
  %64 = mul nsw i32 %63, %61
  %65 = sext i32 %64 to i64
  %66 = mul nsw i64 %65, 29692
  %67 = add nsw i64 %60, %66
  %68 = or disjoint i64 %36, 4096
  %69 = add nsw i64 %68, %67
  %70 = lshr i64 %69, 13
  %71 = trunc i64 %70 to i32
  %72 = sub nsw i64 %68, %67
  %73 = lshr i64 %72, 13
  %74 = trunc i64 %73 to i32
  br label %75

75:                                               ; preds = %24, %._crit_edge97
  %.sroa.27.0 = phi i32 [ %29, %24 ], [ %74, %._crit_edge97 ]
  %.sroa.0.0 = phi i32 [ %29, %24 ], [ %71, %._crit_edge97 ]
  %76 = getelementptr inbounds i8, ptr %2, i64 2
  %77 = getelementptr inbounds i8, ptr %9, i64 4
  %78 = getelementptr inbounds i8, ptr %2, i64 18
  %79 = load i16, ptr %78, align 2, !tbaa !15
  %80 = icmp eq i16 %79, 0
  %81 = getelementptr inbounds i8, ptr %2, i64 50
  %82 = load i16, ptr %81, align 2, !tbaa !15
  %83 = icmp eq i16 %82, 0
  %or.cond113 = select i1 %80, i1 %83, i1 false
  br i1 %or.cond113, label %84, label %._crit_edge99

84:                                               ; preds = %75
  %85 = getelementptr inbounds i8, ptr %2, i64 82
  %86 = load i16, ptr %85, align 2, !tbaa !15
  %87 = icmp eq i16 %86, 0
  br i1 %87, label %88, label %._crit_edge99

88:                                               ; preds = %84
  %89 = getelementptr inbounds i8, ptr %2, i64 114
  %90 = load i16, ptr %89, align 2, !tbaa !15
  %91 = icmp eq i16 %90, 0
  br i1 %91, label %137, label %._crit_edge99

._crit_edge99:                                    ; preds = %75, %88, %84
  %92 = phi i16 [ 0, %88 ], [ 0, %84 ], [ %82, %75 ]
  %93 = load i16, ptr %76, align 2, !tbaa !15
  %94 = sext i16 %93 to i32
  %95 = load i32, ptr %77, align 4, !tbaa !16
  %96 = mul nsw i32 %95, %94
  %97 = sext i32 %96 to i64
  %98 = shl nsw i64 %97, 15
  %99 = getelementptr inbounds i8, ptr %2, i64 114
  %100 = load i16, ptr %99, align 2, !tbaa !15
  %101 = sext i16 %100 to i32
  %102 = getelementptr inbounds i8, ptr %9, i64 228
  %103 = load i32, ptr %102, align 4, !tbaa !16
  %104 = mul nsw i32 %103, %101
  %105 = sext i32 %104 to i64
  %106 = mul nsw i64 %105, -5906
  %107 = getelementptr inbounds i8, ptr %2, i64 82
  %108 = load i16, ptr %107, align 2, !tbaa !15
  %109 = sext i16 %108 to i32
  %110 = getelementptr inbounds i8, ptr %9, i64 164
  %111 = load i32, ptr %110, align 4, !tbaa !16
  %112 = mul nsw i32 %111, %109
  %113 = sext i32 %112 to i64
  %114 = mul nsw i64 %113, 6967
  %115 = add nsw i64 %114, %106
  %116 = sext i16 %92 to i32
  %117 = getelementptr inbounds i8, ptr %9, i64 100
  %118 = load i32, ptr %117, align 4, !tbaa !16
  %119 = mul nsw i32 %118, %116
  %120 = sext i32 %119 to i64
  %121 = mul nsw i64 %120, -10426
  %122 = add nsw i64 %115, %121
  %123 = sext i16 %79 to i32
  %124 = getelementptr inbounds i8, ptr %9, i64 36
  %125 = load i32, ptr %124, align 4, !tbaa !16
  %126 = mul nsw i32 %125, %123
  %127 = sext i32 %126 to i64
  %128 = mul nsw i64 %127, 29692
  %129 = add nsw i64 %122, %128
  %130 = or disjoint i64 %98, 4096
  %131 = add nsw i64 %130, %129
  %132 = lshr i64 %131, 13
  %133 = trunc i64 %132 to i32
  %134 = sub nsw i64 %130, %129
  %135 = lshr i64 %134, 13
  %136 = trunc i64 %135 to i32
  br label %143

137:                                              ; preds = %88
  %138 = load i16, ptr %76, align 2, !tbaa !15
  %139 = sext i16 %138 to i32
  %140 = load i32, ptr %77, align 4, !tbaa !16
  %141 = shl nsw i32 %139, 2
  %142 = mul i32 %141, %140
  br label %143

143:                                              ; preds = %137, %._crit_edge99
  %.sroa.31.0 = phi i32 [ %142, %137 ], [ %136, %._crit_edge99 ]
  %.sroa.6.0 = phi i32 [ %142, %137 ], [ %133, %._crit_edge99 ]
  %144 = getelementptr inbounds i8, ptr %2, i64 6
  %145 = getelementptr inbounds i8, ptr %9, i64 12
  %146 = getelementptr inbounds i8, ptr %2, i64 22
  %147 = load i16, ptr %146, align 2, !tbaa !15
  %148 = icmp eq i16 %147, 0
  %149 = getelementptr inbounds i8, ptr %2, i64 54
  %150 = load i16, ptr %149, align 2, !tbaa !15
  %151 = icmp eq i16 %150, 0
  %or.cond114 = select i1 %148, i1 %151, i1 false
  br i1 %or.cond114, label %152, label %._crit_edge103

152:                                              ; preds = %143
  %153 = getelementptr inbounds i8, ptr %2, i64 86
  %154 = load i16, ptr %153, align 2, !tbaa !15
  %155 = icmp eq i16 %154, 0
  br i1 %155, label %156, label %._crit_edge103

156:                                              ; preds = %152
  %157 = getelementptr inbounds i8, ptr %2, i64 118
  %158 = load i16, ptr %157, align 2, !tbaa !15
  %159 = icmp eq i16 %158, 0
  br i1 %159, label %205, label %._crit_edge103

._crit_edge103:                                   ; preds = %143, %156, %152
  %160 = phi i16 [ 0, %156 ], [ 0, %152 ], [ %150, %143 ]
  %161 = load i16, ptr %144, align 2, !tbaa !15
  %162 = sext i16 %161 to i32
  %163 = load i32, ptr %145, align 4, !tbaa !16
  %164 = mul nsw i32 %163, %162
  %165 = sext i32 %164 to i64
  %166 = shl nsw i64 %165, 15
  %167 = getelementptr inbounds i8, ptr %2, i64 118
  %168 = load i16, ptr %167, align 2, !tbaa !15
  %169 = sext i16 %168 to i32
  %170 = getelementptr inbounds i8, ptr %9, i64 236
  %171 = load i32, ptr %170, align 4, !tbaa !16
  %172 = mul nsw i32 %171, %169
  %173 = sext i32 %172 to i64
  %174 = mul nsw i64 %173, -5906
  %175 = getelementptr inbounds i8, ptr %2, i64 86
  %176 = load i16, ptr %175, align 2, !tbaa !15
  %177 = sext i16 %176 to i32
  %178 = getelementptr inbounds i8, ptr %9, i64 172
  %179 = load i32, ptr %178, align 4, !tbaa !16
  %180 = mul nsw i32 %179, %177
  %181 = sext i32 %180 to i64
  %182 = mul nsw i64 %181, 6967
  %183 = add nsw i64 %182, %174
  %184 = sext i16 %160 to i32
  %185 = getelementptr inbounds i8, ptr %9, i64 108
  %186 = load i32, ptr %185, align 4, !tbaa !16
  %187 = mul nsw i32 %186, %184
  %188 = sext i32 %187 to i64
  %189 = mul nsw i64 %188, -10426
  %190 = add nsw i64 %183, %189
  %191 = sext i16 %147 to i32
  %192 = getelementptr inbounds i8, ptr %9, i64 44
  %193 = load i32, ptr %192, align 4, !tbaa !16
  %194 = mul nsw i32 %193, %191
  %195 = sext i32 %194 to i64
  %196 = mul nsw i64 %195, 29692
  %197 = add nsw i64 %190, %196
  %198 = or disjoint i64 %166, 4096
  %199 = add nsw i64 %198, %197
  %200 = lshr i64 %199, 13
  %201 = trunc i64 %200 to i32
  %202 = sub nsw i64 %198, %197
  %203 = lshr i64 %202, 13
  %204 = trunc i64 %203 to i32
  br label %211

205:                                              ; preds = %156
  %206 = load i16, ptr %144, align 2, !tbaa !15
  %207 = sext i16 %206 to i32
  %208 = load i32, ptr %145, align 4, !tbaa !16
  %209 = shl nsw i32 %207, 2
  %210 = mul i32 %209, %208
  br label %211

211:                                              ; preds = %205, %._crit_edge103
  %.sroa.36.0 = phi i32 [ %210, %205 ], [ %204, %._crit_edge103 ]
  %.sroa.11.0 = phi i32 [ %210, %205 ], [ %201, %._crit_edge103 ]
  %212 = getelementptr inbounds i8, ptr %2, i64 10
  %213 = getelementptr inbounds i8, ptr %9, i64 20
  %214 = getelementptr inbounds i8, ptr %2, i64 26
  %215 = load i16, ptr %214, align 2, !tbaa !15
  %216 = icmp eq i16 %215, 0
  %217 = getelementptr inbounds i8, ptr %2, i64 58
  %218 = load i16, ptr %217, align 2, !tbaa !15
  %219 = icmp eq i16 %218, 0
  %or.cond115 = select i1 %216, i1 %219, i1 false
  br i1 %or.cond115, label %220, label %._crit_edge107

220:                                              ; preds = %211
  %221 = getelementptr inbounds i8, ptr %2, i64 90
  %222 = load i16, ptr %221, align 2, !tbaa !15
  %223 = icmp eq i16 %222, 0
  br i1 %223, label %224, label %._crit_edge107

224:                                              ; preds = %220
  %225 = getelementptr inbounds i8, ptr %2, i64 122
  %226 = load i16, ptr %225, align 2, !tbaa !15
  %227 = icmp eq i16 %226, 0
  br i1 %227, label %273, label %._crit_edge107

._crit_edge107:                                   ; preds = %211, %224, %220
  %228 = phi i16 [ 0, %224 ], [ 0, %220 ], [ %218, %211 ]
  %229 = load i16, ptr %212, align 2, !tbaa !15
  %230 = sext i16 %229 to i32
  %231 = load i32, ptr %213, align 4, !tbaa !16
  %232 = mul nsw i32 %231, %230
  %233 = sext i32 %232 to i64
  %234 = shl nsw i64 %233, 15
  %235 = getelementptr inbounds i8, ptr %2, i64 122
  %236 = load i16, ptr %235, align 2, !tbaa !15
  %237 = sext i16 %236 to i32
  %238 = getelementptr inbounds i8, ptr %9, i64 244
  %239 = load i32, ptr %238, align 4, !tbaa !16
  %240 = mul nsw i32 %239, %237
  %241 = sext i32 %240 to i64
  %242 = mul nsw i64 %241, -5906
  %243 = getelementptr inbounds i8, ptr %2, i64 90
  %244 = load i16, ptr %243, align 2, !tbaa !15
  %245 = sext i16 %244 to i32
  %246 = getelementptr inbounds i8, ptr %9, i64 180
  %247 = load i32, ptr %246, align 4, !tbaa !16
  %248 = mul nsw i32 %247, %245
  %249 = sext i32 %248 to i64
  %250 = mul nsw i64 %249, 6967
  %251 = add nsw i64 %250, %242
  %252 = sext i16 %228 to i32
  %253 = getelementptr inbounds i8, ptr %9, i64 116
  %254 = load i32, ptr %253, align 4, !tbaa !16
  %255 = mul nsw i32 %254, %252
  %256 = sext i32 %255 to i64
  %257 = mul nsw i64 %256, -10426
  %258 = add nsw i64 %251, %257
  %259 = sext i16 %215 to i32
  %260 = getelementptr inbounds i8, ptr %9, i64 52
  %261 = load i32, ptr %260, align 4, !tbaa !16
  %262 = mul nsw i32 %261, %259
  %263 = sext i32 %262 to i64
  %264 = mul nsw i64 %263, 29692
  %265 = add nsw i64 %258, %264
  %266 = or disjoint i64 %234, 4096
  %267 = add nsw i64 %266, %265
  %268 = lshr i64 %267, 13
  %269 = trunc i64 %268 to i32
  %270 = sub nsw i64 %266, %265
  %271 = lshr i64 %270, 13
  %272 = trunc i64 %271 to i32
  br label %279

273:                                              ; preds = %224
  %274 = load i16, ptr %212, align 2, !tbaa !15
  %275 = sext i16 %274 to i32
  %276 = load i32, ptr %213, align 4, !tbaa !16
  %277 = shl nsw i32 %275, 2
  %278 = mul i32 %277, %276
  br label %279

279:                                              ; preds = %273, %._crit_edge107
  %.sroa.42.0 = phi i32 [ %278, %273 ], [ %272, %._crit_edge107 ]
  %.sroa.17.0 = phi i32 [ %278, %273 ], [ %269, %._crit_edge107 ]
  %280 = getelementptr inbounds i8, ptr %2, i64 14
  %281 = getelementptr inbounds i8, ptr %9, i64 28
  %282 = getelementptr inbounds i8, ptr %2, i64 30
  %283 = load i16, ptr %282, align 2, !tbaa !15
  %284 = icmp eq i16 %283, 0
  %285 = getelementptr inbounds i8, ptr %2, i64 62
  %286 = load i16, ptr %285, align 2, !tbaa !15
  %287 = icmp eq i16 %286, 0
  %or.cond116 = select i1 %284, i1 %287, i1 false
  br i1 %or.cond116, label %288, label %._crit_edge110

288:                                              ; preds = %279
  %289 = getelementptr inbounds i8, ptr %2, i64 94
  %290 = load i16, ptr %289, align 2, !tbaa !15
  %291 = icmp eq i16 %290, 0
  br i1 %291, label %292, label %._crit_edge110

292:                                              ; preds = %288
  %293 = getelementptr inbounds i8, ptr %2, i64 126
  %294 = load i16, ptr %293, align 2, !tbaa !15
  %295 = icmp eq i16 %294, 0
  br i1 %295, label %341, label %._crit_edge110

._crit_edge110:                                   ; preds = %279, %292, %288
  %296 = phi i16 [ 0, %292 ], [ 0, %288 ], [ %286, %279 ]
  %297 = load i16, ptr %280, align 2, !tbaa !15
  %298 = sext i16 %297 to i32
  %299 = load i32, ptr %281, align 4, !tbaa !16
  %300 = mul nsw i32 %299, %298
  %301 = sext i32 %300 to i64
  %302 = shl nsw i64 %301, 15
  %303 = getelementptr inbounds i8, ptr %2, i64 126
  %304 = load i16, ptr %303, align 2, !tbaa !15
  %305 = sext i16 %304 to i32
  %306 = getelementptr inbounds i8, ptr %9, i64 252
  %307 = load i32, ptr %306, align 4, !tbaa !16
  %308 = mul nsw i32 %307, %305
  %309 = sext i32 %308 to i64
  %310 = mul nsw i64 %309, -5906
  %311 = getelementptr inbounds i8, ptr %2, i64 94
  %312 = load i16, ptr %311, align 2, !tbaa !15
  %313 = sext i16 %312 to i32
  %314 = getelementptr inbounds i8, ptr %9, i64 188
  %315 = load i32, ptr %314, align 4, !tbaa !16
  %316 = mul nsw i32 %315, %313
  %317 = sext i32 %316 to i64
  %318 = mul nsw i64 %317, 6967
  %319 = add nsw i64 %318, %310
  %320 = sext i16 %296 to i32
  %321 = getelementptr inbounds i8, ptr %9, i64 124
  %322 = load i32, ptr %321, align 4, !tbaa !16
  %323 = mul nsw i32 %322, %320
  %324 = sext i32 %323 to i64
  %325 = mul nsw i64 %324, -10426
  %326 = add nsw i64 %319, %325
  %327 = sext i16 %283 to i32
  %328 = getelementptr inbounds i8, ptr %9, i64 60
  %329 = load i32, ptr %328, align 4, !tbaa !16
  %330 = mul nsw i32 %329, %327
  %331 = sext i32 %330 to i64
  %332 = mul nsw i64 %331, 29692
  %333 = add nsw i64 %326, %332
  %334 = or disjoint i64 %302, 4096
  %335 = add nsw i64 %334, %333
  %336 = lshr i64 %335, 13
  %337 = trunc i64 %336 to i32
  %338 = sub nsw i64 %334, %333
  %339 = lshr i64 %338, 13
  %340 = trunc i64 %339 to i32
  br label %.preheader

341:                                              ; preds = %292
  %342 = load i16, ptr %280, align 2, !tbaa !15
  %343 = sext i16 %342 to i32
  %344 = load i32, ptr %281, align 4, !tbaa !16
  %345 = shl nsw i32 %343, 2
  %346 = mul i32 %345, %344
  br label %.preheader

.preheader:                                       ; preds = %341, %._crit_edge110
  %.sroa.48.0 = phi i32 [ %346, %341 ], [ %340, %._crit_edge110 ]
  %.sroa.23.0 = phi i32 [ %346, %341 ], [ %337, %._crit_edge110 ]
  %347 = getelementptr inbounds i8, ptr %7, i64 128
  %348 = zext i32 %4 to i64
  %349 = load ptr, ptr %3, align 8, !tbaa !17
  %350 = getelementptr inbounds i8, ptr %349, i64 %348
  %351 = icmp eq i32 %.sroa.6.0, 0
  %352 = icmp eq i32 %.sroa.11.0, 0
  %or.cond117 = select i1 %351, i1 %352, i1 false
  %353 = icmp eq i32 %.sroa.17.0, 0
  %or.cond118 = select i1 %or.cond117, i1 %353, i1 false
  %354 = icmp eq i32 %.sroa.23.0, 0
  %or.cond119 = select i1 %or.cond118, i1 %354, i1 false
  br i1 %or.cond119, label %355, label %362

355:                                              ; preds = %.preheader
  %356 = add i32 %.sroa.0.0, 16
  %357 = lshr i32 %356, 5
  %358 = and i32 %357, 1023
  %359 = zext nneg i32 %358 to i64
  %360 = getelementptr inbounds i8, ptr %347, i64 %359
  %361 = load i8, ptr %360, align 1, !tbaa !18
  store i8 %361, ptr %350, align 1, !tbaa !18
  br label %387

362:                                              ; preds = %.preheader
  %363 = sext i32 %.sroa.0.0 to i64
  %364 = shl nsw i64 %363, 15
  %365 = zext i32 %.sroa.23.0 to i64
  %366 = mul nsw i64 %365, -5906
  %367 = zext i32 %.sroa.17.0 to i64
  %368 = mul nuw nsw i64 %367, 6967
  %369 = zext i32 %.sroa.11.0 to i64
  %370 = mul nsw i64 %369, -10426
  %371 = zext i32 %.sroa.6.0 to i64
  %372 = mul nuw nsw i64 %371, 29692
  %373 = add nsw i64 %366, %372
  %374 = add nsw i64 %373, %368
  %375 = add nsw i64 %374, %370
  %376 = add nsw i64 %364, 524288
  %377 = add nsw i64 %376, %375
  %378 = lshr i64 %377, 20
  %379 = and i64 %378, 1023
  %380 = getelementptr inbounds i8, ptr %347, i64 %379
  %381 = load i8, ptr %380, align 1, !tbaa !18
  store i8 %381, ptr %350, align 1, !tbaa !18
  %382 = sub nsw i64 %376, %375
  %383 = lshr i64 %382, 20
  %384 = and i64 %383, 1023
  %385 = getelementptr inbounds i8, ptr %347, i64 %384
  %386 = load i8, ptr %385, align 1, !tbaa !18
  br label %387

387:                                              ; preds = %362, %355
  %.sink = phi i8 [ %386, %362 ], [ %361, %355 ]
  %388 = getelementptr inbounds i8, ptr %350, i64 1
  store i8 %.sink, ptr %388, align 1, !tbaa !18
  %389 = getelementptr inbounds i8, ptr %3, i64 8
  %390 = load ptr, ptr %389, align 8, !tbaa !17
  %391 = getelementptr inbounds i8, ptr %390, i64 %348
  %392 = icmp eq i32 %.sroa.31.0, 0
  %393 = icmp eq i32 %.sroa.36.0, 0
  %or.cond121 = select i1 %392, i1 %393, i1 false
  %394 = icmp eq i32 %.sroa.42.0, 0
  %or.cond122 = select i1 %or.cond121, i1 %394, i1 false
  %395 = icmp eq i32 %.sroa.48.0, 0
  %or.cond123 = select i1 %or.cond122, i1 %395, i1 false
  br i1 %or.cond123, label %421, label %396

396:                                              ; preds = %387
  %397 = sext i32 %.sroa.27.0 to i64
  %398 = shl nsw i64 %397, 15
  %399 = zext i32 %.sroa.48.0 to i64
  %400 = mul nsw i64 %399, -5906
  %401 = zext i32 %.sroa.42.0 to i64
  %402 = mul nuw nsw i64 %401, 6967
  %403 = zext i32 %.sroa.36.0 to i64
  %404 = mul nsw i64 %403, -10426
  %405 = zext i32 %.sroa.31.0 to i64
  %406 = mul nuw nsw i64 %405, 29692
  %407 = add nsw i64 %400, %406
  %408 = add nsw i64 %407, %402
  %409 = add nsw i64 %408, %404
  %410 = add nsw i64 %398, 524288
  %411 = add nsw i64 %410, %409
  %412 = lshr i64 %411, 20
  %413 = and i64 %412, 1023
  %414 = getelementptr inbounds i8, ptr %347, i64 %413
  %415 = load i8, ptr %414, align 1, !tbaa !18
  store i8 %415, ptr %391, align 1, !tbaa !18
  %416 = sub nsw i64 %410, %409
  %417 = lshr i64 %416, 20
  %418 = and i64 %417, 1023
  %419 = getelementptr inbounds i8, ptr %347, i64 %418
  %420 = load i8, ptr %419, align 1, !tbaa !18
  br label %428

421:                                              ; preds = %387
  %422 = add i32 %.sroa.27.0, 16
  %423 = lshr i32 %422, 5
  %424 = and i32 %423, 1023
  %425 = zext nneg i32 %424 to i64
  %426 = getelementptr inbounds i8, ptr %347, i64 %425
  %427 = load i8, ptr %426, align 1, !tbaa !18
  store i8 %427, ptr %391, align 1, !tbaa !18
  br label %428

428:                                              ; preds = %421, %396
  %.sink124 = phi i8 [ %427, %421 ], [ %420, %396 ]
  %429 = getelementptr inbounds i8, ptr %391, i64 1
  store i8 %.sink124, ptr %429, align 1, !tbaa !18
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 392}
!6 = !{!"jpeg_decompress_struct", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !8, i64 32, !10, i64 36, !7, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !11, i64 80, !8, i64 88, !8, i64 89, !10, i64 92, !8, i64 96, !8, i64 97, !8, i64 98, !10, i64 100, !8, i64 104, !10, i64 108, !8, i64 112, !8, i64 113, !8, i64 114, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !7, i64 176, !8, i64 184, !8, i64 216, !8, i64 248, !10, i64 280, !7, i64 288, !8, i64 296, !8, i64 297, !8, i64 298, !8, i64 314, !8, i64 330, !10, i64 348, !8, i64 352, !8, i64 353, !8, i64 354, !8, i64 355, !12, i64 356, !12, i64 358, !8, i64 360, !8, i64 361, !8, i64 362, !7, i64 368, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !7, i64 392, !10, i64 400, !8, i64 408, !10, i64 440, !10, i64 444, !10, i64 448, !8, i64 452, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !7, i64 512, !7, i64 520, !7, i64 528, !7, i64 536, !7, i64 544, !7, i64 552, !7, i64 560, !7, i64 568, !7, i64 576, !7, i64 584, !7, i64 592}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!"short", !8, i64 0}
!13 = !{!14, !7, i64 88}
!14 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !8, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !7, i64 80, !7, i64 88}
!15 = !{!12, !12, i64 0}
!16 = !{!10, !10, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!8, !8, i64 0}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass