; LLVM IR from dloebl/cgif :: src (cgif_raw)

; 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.LZWResult = type { ptr, i32 }
%struct.CGIFRaw_FrameConfig = type { ptr, ptr, i32, i16, i16, i16, i16, i16, i16, i8, i8 }
%struct.CGIFRaw = type { %struct.CGIFRaw_Config, i32 }
%struct.CGIFRaw_Config = type { ptr, ptr, ptr, i32, i16, i16, i16, i16 }

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @calcNextPower2Ex(i16 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @writeDummyBytes(ptr noundef, ptr noundef, i32 noundef) #3

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @cgif_raw_addframe(ptr noundef %0, ptr noundef %1) #3 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca [10 x i8], align 1
  %7 = alloca [8 x i8], align 1
  %8 = alloca %struct.LZWResult, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca i16, align 2
  %20 = alloca i16, align 2
  %21 = alloca i16, align 2
  %22 = alloca i16, align 2
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i16, align 2
  %31 = alloca i16, align 2
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 10, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %32, i32 0, i32 8
  %34 = load i16, ptr %33, align 2, !tbaa !9
  %35 = zext i16 %34 to i32
  store i32 %35, ptr %11, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %36, i32 0, i32 2
  %38 = load i32, ptr %37, align 8, !tbaa !14
  %39 = zext i32 %38 to i64
  %40 = and i64 %39, 2
  %41 = icmp ne i64 %40, 0
  %42 = zext i1 %41 to i64
  %43 = select i1 %41, i32 1, i32 0
  store i32 %43, ptr %12, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #6
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.CGIFRaw, ptr %44, i32 0, i32 1
  %46 = load i32, ptr %45, align 8, !tbaa !15
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %57

48:                                               ; preds = %2
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.CGIFRaw, ptr %49, i32 0, i32 1
  %51 = load i32, ptr %50, align 8, !tbaa !15
  %52 = icmp ne i32 %51, 6
  br i1 %52, label %53, label %57

53:                                               ; preds = %48
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.CGIFRaw, ptr %54, i32 0, i32 1
  %56 = load i32, ptr %55, align 8, !tbaa !15
  store i32 %56, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %555

57:                                               ; preds = %48, %2
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %58, i32 0, i32 8
  %60 = load i16, ptr %59, align 2, !tbaa !9
  %61 = zext i16 %60 to i32
  %62 = icmp sgt i32 %61, 256
  br i1 %62, label %63, label %69

63:                                               ; preds = %57
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.CGIFRaw, ptr %64, i32 0, i32 1
  store i32 -1, ptr %65, align 8, !tbaa !15
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.CGIFRaw, ptr %66, i32 0, i32 1
  %68 = load i32, ptr %67, align 8, !tbaa !15
  store i32 %68, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %555

69:                                               ; preds = %57
  store i32 0, ptr %10, align 4, !tbaa !13
  %70 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 1 %70, i8 0, i64 10, i1 false)
  %71 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  store i8 44, ptr %71, align 1, !tbaa !18
  %72 = load i32, ptr %11, align 4, !tbaa !13
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %104

74:                                               ; preds = %69
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %75, i32 0, i32 8
  %77 = load i16, ptr %76, align 2, !tbaa !9
  %78 = call zeroext i8 @calcNextPower2Ex(i16 noundef zeroext %77)
  store i8 %78, ptr %15, align 1, !tbaa !18
  %79 = load i8, ptr %15, align 1, !tbaa !18
  %80 = zext i8 %79 to i32
  %81 = icmp slt i32 %80, 1
  br i1 %81, label %82, label %83

82:                                               ; preds = %74
  br label %86

83:                                               ; preds = %74
  %84 = load i8, ptr %15, align 1, !tbaa !18
  %85 = zext i8 %84 to i32
  br label %86

86:                                               ; preds = %83, %82
  %87 = phi i32 [ 1, %82 ], [ %85, %83 ]
  %88 = trunc i32 %87 to i8
  store i8 %88, ptr %15, align 1, !tbaa !18
  %89 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %90 = getelementptr inbounds i8, ptr %89, i64 9
  store i8 -128, ptr %90, align 1, !tbaa !18
  %91 = load i8, ptr %15, align 1, !tbaa !18
  %92 = zext i8 %91 to i32
  %93 = sub nsw i32 %92, 1
  %94 = shl i32 %93, 0
  %95 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %96 = getelementptr inbounds i8, ptr %95, i64 9
  %97 = load i8, ptr %96, align 1, !tbaa !18
  %98 = zext i8 %97 to i32
  %99 = or i32 %98, %94
  %100 = trunc i32 %99 to i8
  store i8 %100, ptr %96, align 1, !tbaa !18
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %101, i32 0, i32 8
  %103 = load i16, ptr %102, align 2, !tbaa !9
  store i16 %103, ptr %13, align 2, !tbaa !19
  br label %109

104:                                              ; preds = %69
  %105 = load ptr, ptr %4, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.CGIFRaw, ptr %105, i32 0, i32 0
  %107 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %106, i32 0, i32 6
  %108 = load i16, ptr %107, align 8, !tbaa !20
  store i16 %108, ptr %13, align 2, !tbaa !19
  br label %109

109:                                              ; preds = %104, %86
  %110 = load i32, ptr %12, align 4, !tbaa !13
  %111 = shl i32 %110, 6
  %112 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %113 = getelementptr inbounds i8, ptr %112, i64 9
  %114 = load i8, ptr %113, align 1, !tbaa !18
  %115 = zext i8 %114 to i32
  %116 = or i32 %115, %111
  %117 = trunc i32 %116 to i8
  store i8 %117, ptr %113, align 1, !tbaa !18
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.CGIFRaw, ptr %118, i32 0, i32 0
  %120 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %119, i32 0, i32 3
  %121 = load i32, ptr %120, align 8, !tbaa !21
  %122 = zext i32 %121 to i64
  %123 = and i64 %122, 1
  %124 = icmp ne i64 %123, 0
  br i1 %124, label %125, label %147

125:                                              ; preds = %109
  %126 = load ptr, ptr %5, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %126, i32 0, i32 2
  %128 = load i32, ptr %127, align 8, !tbaa !14
  %129 = zext i32 %128 to i64
  %130 = and i64 %129, 1
  %131 = icmp ne i64 %130, 0
  br i1 %131, label %132, label %147

132:                                              ; preds = %125
  %133 = load ptr, ptr %5, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %133, i32 0, i32 10
  %135 = load i8, ptr %134, align 1, !tbaa !22
  %136 = zext i8 %135 to i32
  %137 = load i16, ptr %13, align 2, !tbaa !19
  %138 = zext i16 %137 to i32
  %139 = icmp sge i32 %136, %138
  br i1 %139, label %140, label %147

140:                                              ; preds = %132
  %141 = load ptr, ptr %5, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %141, i32 0, i32 10
  %143 = load i8, ptr %142, align 1, !tbaa !22
  %144 = zext i8 %143 to i32
  %145 = add nsw i32 %144, 1
  %146 = trunc i32 %145 to i16
  store i16 %146, ptr %13, align 2, !tbaa !19
  br label %147

147:                                              ; preds = %140, %132, %125, %109
  %148 = load i16, ptr %13, align 2, !tbaa !19
  %149 = call zeroext i8 @calcInitCodeLen(i16 noundef zeroext %148)
  store i8 %149, ptr %16, align 1, !tbaa !18
  %150 = load i8, ptr %16, align 1, !tbaa !18
  %151 = zext i8 %150 to i32
  %152 = sub nsw i32 %151, 1
  %153 = zext i32 %152 to i64
  %154 = shl i64 1, %153
  %155 = trunc i64 %154 to i16
  store i16 %155, ptr %14, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #6
  %156 = load i8, ptr %16, align 1, !tbaa !18
  %157 = zext i8 %156 to i32
  %158 = sub nsw i32 %157, 1
  %159 = trunc i32 %158 to i8
  store i8 %159, ptr %18, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #6
  %160 = load ptr, ptr %5, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %160, i32 0, i32 3
  %162 = load i16, ptr %161, align 4, !tbaa !23
  %163 = call zeroext i16 @hU16toLE(i16 noundef zeroext %162)
  store i16 %163, ptr %19, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #6
  %164 = load ptr, ptr %5, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %164, i32 0, i32 4
  %166 = load i16, ptr %165, align 2, !tbaa !24
  %167 = call zeroext i16 @hU16toLE(i16 noundef zeroext %166)
  store i16 %167, ptr %20, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #6
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %168, i32 0, i32 5
  %170 = load i16, ptr %169, align 8, !tbaa !25
  %171 = call zeroext i16 @hU16toLE(i16 noundef zeroext %170)
  store i16 %171, ptr %21, align 2, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #6
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %172, i32 0, i32 6
  %174 = load i16, ptr %173, align 2, !tbaa !26
  %175 = call zeroext i16 @hU16toLE(i16 noundef zeroext %174)
  store i16 %175, ptr %22, align 2, !tbaa !19
  %176 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %177 = getelementptr inbounds i8, ptr %176, i64 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %177, ptr align 2 %19, i64 2, i1 false)
  %178 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %179 = getelementptr inbounds i8, ptr %178, i64 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %179, ptr align 2 %20, i64 2, i1 false)
  %180 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %181 = getelementptr inbounds i8, ptr %180, i64 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %181, ptr align 2 %21, i64 2, i1 false)
  %182 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %183 = getelementptr inbounds i8, ptr %182, i64 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %183, ptr align 2 %22, i64 2, i1 false)
  %184 = load i32, ptr %12, align 4, !tbaa !13
  %185 = icmp ne i32 %184, 0
  br i1 %185, label %186, label %369

186:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %187, i32 0, i32 3
  %189 = load i16, ptr %188, align 4, !tbaa !23
  %190 = zext i16 %189 to i32
  %191 = load ptr, ptr %5, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %191, i32 0, i32 4
  %193 = load i16, ptr %192, align 2, !tbaa !24
  %194 = zext i16 %193 to i32
  %195 = mul i32 %190, %194
  %196 = zext i32 %195 to i64
  %197 = call noalias ptr @malloc(i64 noundef %196) #7
  store ptr %197, ptr %23, align 8, !tbaa !5
  %198 = load ptr, ptr %23, align 8, !tbaa !5
  %199 = icmp eq ptr %198, null
  br i1 %199, label %200, label %206

200:                                              ; preds = %186
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.CGIFRaw, ptr %201, i32 0, i32 1
  store i32 2, ptr %202, align 8, !tbaa !15
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.CGIFRaw, ptr %203, i32 0, i32 1
  %205 = load i32, ptr %204, align 8, !tbaa !15
  store i32 %205, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %366

206:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %207 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %207, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 0, ptr %25, align 4, !tbaa !13
  br label %208

208:                                              ; preds = %240, %206
  %209 = load i32, ptr %25, align 4, !tbaa !13
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %210, i32 0, i32 4
  %212 = load i16, ptr %211, align 2, !tbaa !24
  %213 = zext i16 %212 to i32
  %214 = icmp ult i32 %209, %213
  br i1 %214, label %216, label %215

215:                                              ; preds = %208
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %243

216:                                              ; preds = %208
  %217 = load ptr, ptr %24, align 8, !tbaa !5
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %218, i32 0, i32 1
  %220 = load ptr, ptr %219, align 8, !tbaa !27
  %221 = load i32, ptr %25, align 4, !tbaa !13
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %222, i32 0, i32 3
  %224 = load i16, ptr %223, align 4, !tbaa !23
  %225 = zext i16 %224 to i32
  %226 = mul i32 %221, %225
  %227 = zext i32 %226 to i64
  %228 = getelementptr inbounds i8, ptr %220, i64 %227
  %229 = load ptr, ptr %5, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %229, i32 0, i32 3
  %231 = load i16, ptr %230, align 4, !tbaa !23
  %232 = zext i16 %231 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %217, ptr align 1 %228, i64 %232, i1 false)
  %233 = load ptr, ptr %5, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %233, i32 0, i32 3
  %235 = load i16, ptr %234, align 4, !tbaa !23
  %236 = zext i16 %235 to i32
  %237 = load ptr, ptr %24, align 8, !tbaa !5
  %238 = sext i32 %236 to i64
  %239 = getelementptr inbounds i8, ptr %237, i64 %238
  store ptr %239, ptr %24, align 8, !tbaa !5
  br label %240

240:                                              ; preds = %216
  %241 = load i32, ptr %25, align 4, !tbaa !13
  %242 = add i32 %241, 8
  store i32 %242, ptr %25, align 4, !tbaa !13
  br label %208, !llvm.loop !28

243:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  store i32 4, ptr %26, align 4, !tbaa !13
  br label %244

244:                                              ; preds = %276, %243
  %245 = load i32, ptr %26, align 4, !tbaa !13
  %246 = load ptr, ptr %5, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %246, i32 0, i32 4
  %248 = load i16, ptr %247, align 2, !tbaa !24
  %249 = zext i16 %248 to i32
  %250 = icmp ult i32 %245, %249
  br i1 %250, label %252, label %251

251:                                              ; preds = %244
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %279

252:                                              ; preds = %244
  %253 = load ptr, ptr %24, align 8, !tbaa !5
  %254 = load ptr, ptr %5, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %254, i32 0, i32 1
  %256 = load ptr, ptr %255, align 8, !tbaa !27
  %257 = load i32, ptr %26, align 4, !tbaa !13
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %258, i32 0, i32 3
  %260 = load i16, ptr %259, align 4, !tbaa !23
  %261 = zext i16 %260 to i32
  %262 = mul i32 %257, %261
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds i8, ptr %256, i64 %263
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %265, i32 0, i32 3
  %267 = load i16, ptr %266, align 4, !tbaa !23
  %268 = zext i16 %267 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %253, ptr align 1 %264, i64 %268, i1 false)
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %269, i32 0, i32 3
  %271 = load i16, ptr %270, align 4, !tbaa !23
  %272 = zext i16 %271 to i32
  %273 = load ptr, ptr %24, align 8, !tbaa !5
  %274 = sext i32 %272 to i64
  %275 = getelementptr inbounds i8, ptr %273, i64 %274
  store ptr %275, ptr %24, align 8, !tbaa !5
  br label %276

276:                                              ; preds = %252
  %277 = load i32, ptr %26, align 4, !tbaa !13
  %278 = add i32 %277, 8
  store i32 %278, ptr %26, align 4, !tbaa !13
  br label %244, !llvm.loop !30

279:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 2, ptr %27, align 4, !tbaa !13
  br label %280

280:                                              ; preds = %312, %279
  %281 = load i32, ptr %27, align 4, !tbaa !13
  %282 = load ptr, ptr %5, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %282, i32 0, i32 4
  %284 = load i16, ptr %283, align 2, !tbaa !24
  %285 = zext i16 %284 to i32
  %286 = icmp ult i32 %281, %285
  br i1 %286, label %288, label %287

287:                                              ; preds = %280
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %315

288:                                              ; preds = %280
  %289 = load ptr, ptr %24, align 8, !tbaa !5
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %290, i32 0, i32 1
  %292 = load ptr, ptr %291, align 8, !tbaa !27
  %293 = load i32, ptr %27, align 4, !tbaa !13
  %294 = load ptr, ptr %5, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %294, i32 0, i32 3
  %296 = load i16, ptr %295, align 4, !tbaa !23
  %297 = zext i16 %296 to i32
  %298 = mul i32 %293, %297
  %299 = zext i32 %298 to i64
  %300 = getelementptr inbounds i8, ptr %292, i64 %299
  %301 = load ptr, ptr %5, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %301, i32 0, i32 3
  %303 = load i16, ptr %302, align 4, !tbaa !23
  %304 = zext i16 %303 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %289, ptr align 1 %300, i64 %304, i1 false)
  %305 = load ptr, ptr %5, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %305, i32 0, i32 3
  %307 = load i16, ptr %306, align 4, !tbaa !23
  %308 = zext i16 %307 to i32
  %309 = load ptr, ptr %24, align 8, !tbaa !5
  %310 = sext i32 %308 to i64
  %311 = getelementptr inbounds i8, ptr %309, i64 %310
  store ptr %311, ptr %24, align 8, !tbaa !5
  br label %312

312:                                              ; preds = %288
  %313 = load i32, ptr %27, align 4, !tbaa !13
  %314 = add i32 %313, 4
  store i32 %314, ptr %27, align 4, !tbaa !13
  br label %280, !llvm.loop !31

315:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 1, ptr %28, align 4, !tbaa !13
  br label %316

316:                                              ; preds = %348, %315
  %317 = load i32, ptr %28, align 4, !tbaa !13
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %318, i32 0, i32 4
  %320 = load i16, ptr %319, align 2, !tbaa !24
  %321 = zext i16 %320 to i32
  %322 = icmp ult i32 %317, %321
  br i1 %322, label %324, label %323

323:                                              ; preds = %316
  store i32 11, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  br label %351

324:                                              ; preds = %316
  %325 = load ptr, ptr %24, align 8, !tbaa !5
  %326 = load ptr, ptr %5, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %326, i32 0, i32 1
  %328 = load ptr, ptr %327, align 8, !tbaa !27
  %329 = load i32, ptr %28, align 4, !tbaa !13
  %330 = load ptr, ptr %5, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %330, i32 0, i32 3
  %332 = load i16, ptr %331, align 4, !tbaa !23
  %333 = zext i16 %332 to i32
  %334 = mul i32 %329, %333
  %335 = zext i32 %334 to i64
  %336 = getelementptr inbounds i8, ptr %328, i64 %335
  %337 = load ptr, ptr %5, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %337, i32 0, i32 3
  %339 = load i16, ptr %338, align 4, !tbaa !23
  %340 = zext i16 %339 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %325, ptr align 1 %336, i64 %340, i1 false)
  %341 = load ptr, ptr %5, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %341, i32 0, i32 3
  %343 = load i16, ptr %342, align 4, !tbaa !23
  %344 = zext i16 %343 to i32
  %345 = load ptr, ptr %24, align 8, !tbaa !5
  %346 = sext i32 %344 to i64
  %347 = getelementptr inbounds i8, ptr %345, i64 %346
  store ptr %347, ptr %24, align 8, !tbaa !5
  br label %348

348:                                              ; preds = %324
  %349 = load i32, ptr %28, align 4, !tbaa !13
  %350 = add i32 %349, 2
  store i32 %350, ptr %28, align 4, !tbaa !13
  br label %316, !llvm.loop !32

351:                                              ; preds = %323
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %352, i32 0, i32 3
  %354 = load i16, ptr %353, align 4, !tbaa !23
  %355 = zext i16 %354 to i32
  %356 = load ptr, ptr %5, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %356, i32 0, i32 4
  %358 = load i16, ptr %357, align 2, !tbaa !24
  %359 = zext i16 %358 to i32
  %360 = mul i32 %355, %359
  %361 = load ptr, ptr %23, align 8, !tbaa !5
  %362 = load i16, ptr %14, align 2, !tbaa !19
  %363 = load i8, ptr %16, align 1, !tbaa !18
  %364 = call i32 @LZW_GenerateStream(ptr noundef %8, i32 noundef %360, ptr noundef %361, i16 noundef zeroext %362, i8 noundef zeroext %363)
  store i32 %364, ptr %9, align 4, !tbaa !13
  %365 = load ptr, ptr %23, align 8, !tbaa !5
  call void @free(ptr noundef %365) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  store i32 0, ptr %17, align 4
  br label %366

366:                                              ; preds = %351, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  %367 = load i32, ptr %17, align 4
  switch i32 %367, label %554 [
    i32 0, label %368
  ]

368:                                              ; preds = %366
  br label %385

369:                                              ; preds = %147
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %370, i32 0, i32 3
  %372 = load i16, ptr %371, align 4, !tbaa !23
  %373 = zext i16 %372 to i32
  %374 = load ptr, ptr %5, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %374, i32 0, i32 4
  %376 = load i16, ptr %375, align 2, !tbaa !24
  %377 = zext i16 %376 to i32
  %378 = mul i32 %373, %377
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %379, i32 0, i32 1
  %381 = load ptr, ptr %380, align 8, !tbaa !27
  %382 = load i16, ptr %14, align 2, !tbaa !19
  %383 = load i8, ptr %16, align 1, !tbaa !18
  %384 = call i32 @LZW_GenerateStream(ptr noundef %8, i32 noundef %378, ptr noundef %381, i16 noundef zeroext %382, i8 noundef zeroext %383)
  store i32 %384, ptr %9, align 4, !tbaa !13
  br label %385

385:                                              ; preds = %369, %368
  %386 = load i32, ptr %9, align 4, !tbaa !13
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %388, label %393

388:                                              ; preds = %385
  %389 = load i32, ptr %9, align 4, !tbaa !13
  %390 = load ptr, ptr %4, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.CGIFRaw, ptr %390, i32 0, i32 1
  store i32 %389, ptr %391, align 8, !tbaa !15
  %392 = load i32, ptr %9, align 4, !tbaa !13
  store i32 %392, ptr %3, align 4
  store i32 1, ptr %17, align 4
  br label %554

393:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %394 = load ptr, ptr %4, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.CGIFRaw, ptr %394, i32 0, i32 0
  %396 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %395, i32 0, i32 3
  %397 = load i32, ptr %396, align 8, !tbaa !21
  %398 = zext i32 %397 to i64
  %399 = and i64 %398, 1
  %400 = load ptr, ptr %5, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %400, i32 0, i32 2
  %402 = load i32, ptr %401, align 8, !tbaa !14
  %403 = zext i32 %402 to i64
  %404 = and i64 %403, 1
  %405 = or i64 %399, %404
  %406 = trunc i64 %405 to i32
  store i32 %406, ptr %29, align 4, !tbaa !13
  %407 = load i32, ptr %29, align 4, !tbaa !13
  %408 = icmp ne i32 %407, 0
  br i1 %408, label %409, label %453

409:                                              ; preds = %393
  %410 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 1 %410, i8 0, i64 8, i1 false)
  %411 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 0
  store i8 33, ptr %411, align 1, !tbaa !18
  %412 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 1
  store i8 -7, ptr %412, align 1, !tbaa !18
  %413 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 2
  store i8 4, ptr %413, align 1, !tbaa !18
  %414 = load ptr, ptr %5, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %414, i32 0, i32 9
  %416 = load i8, ptr %415, align 8, !tbaa !33
  %417 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 3
  store i8 %416, ptr %417, align 1, !tbaa !18
  %418 = load ptr, ptr %5, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %418, i32 0, i32 2
  %420 = load i32, ptr %419, align 8, !tbaa !14
  %421 = zext i32 %420 to i64
  %422 = and i64 %421, 1
  %423 = icmp ne i64 %422, 0
  br i1 %423, label %424, label %434

424:                                              ; preds = %409
  %425 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 3
  %426 = load i8, ptr %425, align 1, !tbaa !18
  %427 = zext i8 %426 to i32
  %428 = or i32 %427, 1
  %429 = trunc i32 %428 to i8
  store i8 %429, ptr %425, align 1, !tbaa !18
  %430 = load ptr, ptr %5, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %430, i32 0, i32 10
  %432 = load i8, ptr %431, align 1, !tbaa !22
  %433 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 6
  store i8 %432, ptr %433, align 1, !tbaa !18
  br label %434

434:                                              ; preds = %424, %409
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #6
  %435 = load ptr, ptr %5, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %435, i32 0, i32 7
  %437 = load i16, ptr %436, align 4, !tbaa !34
  %438 = call zeroext i16 @hU16toLE(i16 noundef zeroext %437)
  store i16 %438, ptr %30, align 2, !tbaa !19
  %439 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 0
  %440 = getelementptr inbounds i8, ptr %439, i64 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %440, ptr align 2 %30, i64 2, i1 false)
  %441 = load ptr, ptr %4, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.CGIFRaw, ptr %441, i32 0, i32 0
  %443 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %442, i32 0, i32 0
  %444 = load ptr, ptr %443, align 8, !tbaa !35
  %445 = load ptr, ptr %4, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.CGIFRaw, ptr %445, i32 0, i32 0
  %447 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %446, i32 0, i32 1
  %448 = load ptr, ptr %447, align 8, !tbaa !36
  %449 = getelementptr inbounds [8 x i8], ptr %7, i64 0, i64 0
  %450 = call i32 %444(ptr noundef %448, ptr noundef %449, i64 noundef 8)
  %451 = load i32, ptr %10, align 4, !tbaa !13
  %452 = or i32 %451, %450
  store i32 %452, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #6
  br label %453

453:                                              ; preds = %434, %393
  %454 = load ptr, ptr %4, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.CGIFRaw, ptr %454, i32 0, i32 0
  %456 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %455, i32 0, i32 0
  %457 = load ptr, ptr %456, align 8, !tbaa !35
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.CGIFRaw, ptr %458, i32 0, i32 0
  %460 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %459, i32 0, i32 1
  %461 = load ptr, ptr %460, align 8, !tbaa !36
  %462 = getelementptr inbounds [10 x i8], ptr %6, i64 0, i64 0
  %463 = call i32 %457(ptr noundef %461, ptr noundef %462, i64 noundef 10)
  %464 = load i32, ptr %10, align 4, !tbaa !13
  %465 = or i32 %464, %463
  store i32 %465, ptr %10, align 4, !tbaa !13
  %466 = load i32, ptr %11, align 4, !tbaa !13
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %468, label %512

468:                                              ; preds = %453
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.CGIFRaw, ptr %469, i32 0, i32 0
  %471 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %470, i32 0, i32 0
  %472 = load ptr, ptr %471, align 8, !tbaa !35
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.CGIFRaw, ptr %473, i32 0, i32 0
  %475 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %474, i32 0, i32 1
  %476 = load ptr, ptr %475, align 8, !tbaa !36
  %477 = load ptr, ptr %5, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %477, i32 0, i32 0
  %479 = load ptr, ptr %478, align 8, !tbaa !37
  %480 = load ptr, ptr %5, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %480, i32 0, i32 8
  %482 = load i16, ptr %481, align 2, !tbaa !9
  %483 = zext i16 %482 to i32
  %484 = mul nsw i32 %483, 3
  %485 = sext i32 %484 to i64
  %486 = call i32 %472(ptr noundef %476, ptr noundef %479, i64 noundef %485)
  %487 = load i32, ptr %10, align 4, !tbaa !13
  %488 = or i32 %487, %486
  store i32 %488, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #6
  %489 = load i8, ptr %15, align 1, !tbaa !18
  %490 = zext i8 %489 to i32
  %491 = shl i32 1, %490
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.CGIFRaw_FrameConfig, ptr %492, i32 0, i32 8
  %494 = load i16, ptr %493, align 2, !tbaa !9
  %495 = zext i16 %494 to i32
  %496 = sub nsw i32 %491, %495
  %497 = mul nsw i32 %496, 3
  %498 = trunc i32 %497 to i16
  store i16 %498, ptr %31, align 2, !tbaa !19
  %499 = load ptr, ptr %4, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.CGIFRaw, ptr %499, i32 0, i32 0
  %501 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %500, i32 0, i32 0
  %502 = load ptr, ptr %501, align 8, !tbaa !35
  %503 = load ptr, ptr %4, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.CGIFRaw, ptr %503, i32 0, i32 0
  %505 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %504, i32 0, i32 1
  %506 = load ptr, ptr %505, align 8, !tbaa !36
  %507 = load i16, ptr %31, align 2, !tbaa !19
  %508 = zext i16 %507 to i32
  %509 = call i32 @writeDummyBytes(ptr noundef %502, ptr noundef %506, i32 noundef %508)
  %510 = load i32, ptr %10, align 4, !tbaa !13
  %511 = or i32 %510, %509
  store i32 %511, ptr %10, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #6
  br label %512

512:                                              ; preds = %468, %453
  %513 = load ptr, ptr %4, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.CGIFRaw, ptr %513, i32 0, i32 0
  %515 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %514, i32 0, i32 0
  %516 = load ptr, ptr %515, align 8, !tbaa !35
  %517 = load ptr, ptr %4, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.CGIFRaw, ptr %517, i32 0, i32 0
  %519 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %518, i32 0, i32 1
  %520 = load ptr, ptr %519, align 8, !tbaa !36
  %521 = call i32 %516(ptr noundef %520, ptr noundef %18, i64 noundef 1)
  %522 = load i32, ptr %10, align 4, !tbaa !13
  %523 = or i32 %522, %521
  store i32 %523, ptr %10, align 4, !tbaa !13
  %524 = load ptr, ptr %4, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.CGIFRaw, ptr %524, i32 0, i32 0
  %526 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %525, i32 0, i32 0
  %527 = load ptr, ptr %526, align 8, !tbaa !35
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.CGIFRaw, ptr %528, i32 0, i32 0
  %530 = getelementptr inbounds %struct.CGIFRaw_Config, ptr %529, i32 0, i32 1
  %531 = load ptr, ptr %530, align 8, !tbaa !36
  %532 = getelementptr inbounds %struct.LZWResult, ptr %8, i32 0, i32 0
  %533 = load ptr, ptr %532, align 8, !tbaa !38
  %534 = getelementptr inbounds %struct.LZWResult, ptr %8, i32 0, i32 1
  %535 = load i32, ptr %534, align 8, !tbaa !40
  %536 = zext i32 %535 to i64
  %537 = call i32 %527(ptr noundef %531, ptr noundef %533, i64 noundef %536)
  %538 = load i32, ptr %10, align 4, !tbaa !13
  %539 = or i32 %538, %537
  store i32 %539, ptr %10, align 4, !tbaa !13
  %540 = load i32, ptr %10, align 4, !tbaa !13
  %541 = icmp ne i32 %540, 0
  br i1 %541, label %542, label %545

542:                                              ; preds = %512
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.CGIFRaw, ptr %543, i32 0, i32 1
  store i32 1, ptr %544, align 8, !tbaa !15
  br label %548

545:                                              ; preds = %512
  %546 = load ptr, ptr %4, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.CGIFRaw, ptr %546, i32 0, i32 1
  store i32 0, ptr %547, align 8, !tbaa !15
  br label %548

548:                                              ; preds = %545, %542
  %549 = getelementptr inbounds %struct.LZWResult, ptr %8, i32 0, i32 0
  %550 = load ptr, ptr %549, align 8, !tbaa !38
  call void @free(ptr noundef %550) #6
  %551 = load ptr, ptr %4, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.CGIFRaw, ptr %551, i32 0, i32 1
  %553 = load i32, ptr %552, align 8, !tbaa !15
  store i32 %553, ptr %3, align 4
  store i32 1, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  br label %554

554:                                              ; preds = %548, %388, %366
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #6
  br label %555

555:                                              ; preds = %554, %63, %53
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 10, ptr %6) #6
  %556 = load i32, ptr %3, align 4
  ret i32 %556
}

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

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @calcInitCodeLen(i16 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @hU16toLE(i16 noundef zeroext) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @LZW_GenerateStream(ptr noundef, i32 noundef, ptr noundef, i16 noundef zeroext, i8 noundef zeroext) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !12, i64 30}
!10 = !{!"", !6, i64 0, !6, i64 8, !11, i64 16, !12, i64 20, !12, i64 22, !12, i64 24, !12, i64 26, !12, i64 28, !12, i64 30, !7, i64 32, !7, i64 33}
!11 = !{!"int", !7, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!10, !11, i64 16}
!15 = !{!16, !11, i64 40}
!16 = !{!"", !17, i64 0, !11, i64 40}
!17 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !11, i64 24, !12, i64 28, !12, i64 30, !12, i64 32, !12, i64 34}
!18 = !{!7, !7, i64 0}
!19 = !{!12, !12, i64 0}
!20 = !{!16, !12, i64 32}
!21 = !{!16, !11, i64 24}
!22 = !{!10, !7, i64 33}
!23 = !{!10, !12, i64 20}
!24 = !{!10, !12, i64 22}
!25 = !{!10, !12, i64 24}
!26 = !{!10, !12, i64 26}
!27 = !{!10, !6, i64 8}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !29}
!33 = !{!10, !7, i64 32}
!34 = !{!10, !12, i64 28}
!35 = !{!16, !6, i64 0}
!36 = !{!16, !6, i64 8}
!37 = !{!10, !6, i64 0}
!38 = !{!39, !6, i64 0}
!39 = !{!"", !6, i64 0, !11, i64 8}
!40 = !{!39, !11, i64 8}


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

%struct.LZWResult = type { ptr, i32 }

; 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 nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @calcNextPower2Ex(i16 noundef zeroext) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @writeDummyBytes(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

; 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 nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
define dso_local i32 @cgif_raw_addframe(ptr nocapture noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #3 {
  %3 = alloca [10 x i8], align 1
  %4 = alloca [8 x i8], align 8
  %5 = alloca %struct.LZWResult, align 8
  %6 = alloca i8, align 1
  call void @llvm.lifetime.start.p0(i64 10, ptr nonnull %3) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  %7 = getelementptr inbounds i8, ptr %1, i64 30
  %8 = load i16, ptr %7, align 2, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load i32, ptr %9, align 8, !tbaa !12
  %11 = and i32 %10, 2
  %.not.not = icmp eq i32 %11, 0
  %12 = getelementptr inbounds i8, ptr %0, i64 40
  %13 = load i32, ptr %12, align 8, !tbaa !13
  switch i32 %13, label %226 [
    i32 0, label %14
    i32 6, label %14
  ]

14:                                               ; preds = %2, %2
  %15 = icmp ugt i16 %8, 256
  br i1 %15, label %16, label %17

16:                                               ; preds = %14
  store i32 -1, ptr %12, align 8, !tbaa !13
  br label %226

17:                                               ; preds = %14
  store i8 44, ptr %3, align 1, !tbaa !16
  %.not149 = icmp eq i16 %8, 0
  br i1 %.not149, label %23, label %18

18:                                               ; preds = %17
  %19 = tail call zeroext i8 @calcNextPower2Ex(i16 noundef zeroext %8)
  %narrow = tail call i8 @llvm.umax.i8(i8 %19, i8 1)
  %20 = add i8 %narrow, 127
  %21 = or i8 %20, -128
  %22 = zext nneg i8 %narrow to i32
  br label %25

23:                                               ; preds = %17
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  br label %25

25:                                               ; preds = %23, %18
  %26 = phi i8 [ %21, %18 ], [ 0, %23 ]
  %.0143 = phi i32 [ %22, %18 ], [ 0, %23 ]
  %.0141.in = phi ptr [ %7, %18 ], [ %24, %23 ]
  %.0141 = load i16, ptr %.0141.in, align 2, !tbaa !17
  %27 = getelementptr inbounds i8, ptr %3, i64 9
  %.tr = trunc nuw nsw i32 %11 to i8
  %28 = shl nuw nsw i8 %.tr, 5
  %29 = or i8 %26, %28
  store i8 %29, ptr %27, align 1, !tbaa !16
  %30 = getelementptr inbounds i8, ptr %0, i64 24
  %31 = load i32, ptr %30, align 8, !tbaa !18
  %32 = and i32 %31, 1
  %.not150 = icmp eq i32 %32, 0
  br i1 %.not150, label %41, label %33

33:                                               ; preds = %25
  %34 = load i32, ptr %9, align 8, !tbaa !12
  %35 = and i32 %34, 1
  %.not151 = icmp eq i32 %35, 0
  br i1 %.not151, label %41, label %36

36:                                               ; preds = %33
  %37 = getelementptr inbounds i8, ptr %1, i64 33
  %38 = load i8, ptr %37, align 1, !tbaa !19
  %39 = zext i8 %38 to i16
  %.not152 = icmp ugt i16 %.0141, %39
  %40 = add nuw nsw i16 %39, 1
  %spec.select = select i1 %.not152, i16 %.0141, i16 %40
  br label %41

41:                                               ; preds = %36, %33, %25
  %.1142 = phi i16 [ %.0141, %33 ], [ %.0141, %25 ], [ %spec.select, %36 ]
  %42 = tail call zeroext i8 @calcInitCodeLen(i16 noundef zeroext %.1142)
  %43 = zext i8 %42 to i32
  %44 = add nsw i32 %43, -1
  %45 = zext nneg i32 %44 to i64
  %46 = shl nuw i64 1, %45
  %47 = trunc i64 %46 to i16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #6
  %48 = trunc i32 %44 to i8
  store i8 %48, ptr %6, align 1, !tbaa !16
  %49 = getelementptr inbounds i8, ptr %1, i64 20
  %50 = load i16, ptr %49, align 4, !tbaa !20
  %51 = tail call zeroext i16 @hU16toLE(i16 noundef zeroext %50)
  %52 = getelementptr inbounds i8, ptr %1, i64 22
  %53 = load i16, ptr %52, align 2, !tbaa !21
  %54 = tail call zeroext i16 @hU16toLE(i16 noundef zeroext %53)
  %55 = getelementptr inbounds i8, ptr %1, i64 24
  %56 = load i16, ptr %55, align 8, !tbaa !22
  %57 = tail call zeroext i16 @hU16toLE(i16 noundef zeroext %56)
  %58 = getelementptr inbounds i8, ptr %1, i64 26
  %59 = load i16, ptr %58, align 2, !tbaa !23
  %60 = tail call zeroext i16 @hU16toLE(i16 noundef zeroext %59)
  %61 = getelementptr inbounds i8, ptr %3, i64 5
  store i16 %51, ptr %61, align 1
  %62 = getelementptr inbounds i8, ptr %3, i64 7
  store i16 %54, ptr %62, align 1
  %63 = getelementptr inbounds i8, ptr %3, i64 3
  store i16 %57, ptr %63, align 1
  %64 = getelementptr inbounds i8, ptr %3, i64 1
  store i16 %60, ptr %64, align 1
  %65 = load i16, ptr %49, align 4, !tbaa !20
  %66 = load i16, ptr %52, align 2, !tbaa !21
  br i1 %.not.not, label %152, label %67

67:                                               ; preds = %41
  %68 = zext i16 %65 to i64
  %69 = zext i16 %66 to i64
  %70 = mul nuw nsw i64 %69, %68
  %71 = tail call noalias ptr @malloc(i64 noundef %70) #7
  %.not153 = icmp eq ptr %71, null
  br i1 %.not153, label %.thread, label %.preheader161

.preheader161:                                    ; preds = %67
  %72 = zext i16 %66 to i32
  %.not = icmp eq i16 %66, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader161
  %73 = getelementptr inbounds i8, ptr %1, i64 8
  %74 = load ptr, ptr %73, align 8, !tbaa !24
  %75 = zext i16 %65 to i64
  %76 = zext i16 %66 to i64
  %77 = add nsw i64 %76, -1
  %78 = lshr i64 %77, 3
  %79 = add nuw nsw i64 %78, 1
  %xtraiter = and i64 %79, 3
  %80 = icmp ult i16 %66, 25
  br i1 %80, label %.preheader160.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %79, 4611686018427387900
  br label %91

.thread:                                          ; preds = %67
  store i32 2, ptr %12, align 8, !tbaa !13
  br label %225

.preheader160.unr-lcssa:                          ; preds = %91, %.lr.ph
  %.lcssa198.ph = phi ptr [ poison, %.lr.ph ], [ %103, %91 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.3, %91 ]
  %.0138162.unr = phi ptr [ %71, %.lr.ph ], [ %103, %91 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader160, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader160.unr-lcssa, %.epil.preheader
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.epil.preheader ], [ %indvars.iv.unr, %.preheader160.unr-lcssa ]
  %.0138162.epil = phi ptr [ %83, %.epil.preheader ], [ %.0138162.unr, %.preheader160.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader160.unr-lcssa ]
  %81 = mul nuw nsw i64 %indvars.iv.epil, %75
  %82 = getelementptr inbounds i8, ptr %74, i64 %81
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0138162.epil, ptr align 1 %82, i64 %68, i1 false)
  %83 = getelementptr inbounds i8, ptr %.0138162.epil, i64 %68
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 8
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader160, label %.epil.preheader, !llvm.loop !25

.preheader160:                                    ; preds = %.epil.preheader, %.preheader160.unr-lcssa
  %.lcssa198 = phi ptr [ %.lcssa198.ph, %.preheader160.unr-lcssa ], [ %83, %.epil.preheader ]
  %84 = icmp ugt i16 %66, 4
  br i1 %84, label %.lr.ph167, label %.preheader159

.lr.ph167:                                        ; preds = %.preheader160
  %85 = getelementptr inbounds i8, ptr %1, i64 8
  %86 = zext i16 %65 to i64
  %.pre = load ptr, ptr %85, align 8, !tbaa !24
  %87 = add nsw i64 %76, -5
  %88 = lshr i64 %87, 3
  %89 = add nuw nsw i64 %88, 1
  %xtraiter201 = and i64 %89, 3
  %90 = icmp ult i64 %87, 24
  br i1 %90, label %.preheader159.loopexit.unr-lcssa, label %.lr.ph167.new

.lr.ph167.new:                                    ; preds = %.lr.ph167
  %unroll_iter205 = and i64 %89, 4611686018427387900
  br label %114

91:                                               ; preds = %91, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.3, %91 ]
  %.0138162 = phi ptr [ %71, %.lr.ph.new ], [ %103, %91 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %91 ]
  %92 = mul nuw nsw i64 %indvars.iv, %75
  %93 = getelementptr inbounds i8, ptr %74, i64 %92
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0138162, ptr align 1 %93, i64 %68, i1 false)
  %94 = getelementptr inbounds i8, ptr %.0138162, i64 %68
  %indvars.iv.next = or disjoint i64 %indvars.iv, 8
  %95 = mul nuw nsw i64 %indvars.iv.next, %75
  %96 = getelementptr inbounds i8, ptr %74, i64 %95
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %94, ptr align 1 %96, i64 %68, i1 false)
  %97 = getelementptr inbounds i8, ptr %94, i64 %68
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 16
  %98 = mul nuw nsw i64 %indvars.iv.next.1, %75
  %99 = getelementptr inbounds i8, ptr %74, i64 %98
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %97, ptr align 1 %99, i64 %68, i1 false)
  %100 = getelementptr inbounds i8, ptr %97, i64 %68
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 24
  %101 = mul nuw nsw i64 %indvars.iv.next.2, %75
  %102 = getelementptr inbounds i8, ptr %74, i64 %101
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %100, ptr align 1 %102, i64 %68, i1 false)
  %103 = getelementptr inbounds i8, ptr %100, i64 %68
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 32
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3.not = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3.not, label %.preheader160.unr-lcssa, label %91, !llvm.loop !27

.preheader159.loopexit.unr-lcssa:                 ; preds = %114, %.lr.ph167
  %.lcssa197.ph = phi ptr [ poison, %.lr.ph167 ], [ %126, %114 ]
  %indvars.iv179.unr = phi i64 [ 4, %.lr.ph167 ], [ %indvars.iv.next180.3, %114 ]
  %.1139165.unr = phi ptr [ %.lcssa198, %.lr.ph167 ], [ %126, %114 ]
  %lcmp.mod203.not = icmp eq i64 %xtraiter201, 0
  br i1 %lcmp.mod203.not, label %.preheader159, label %.epil.preheader200

.epil.preheader200:                               ; preds = %.preheader159.loopexit.unr-lcssa, %.epil.preheader200
  %indvars.iv179.epil = phi i64 [ %indvars.iv.next180.epil, %.epil.preheader200 ], [ %indvars.iv179.unr, %.preheader159.loopexit.unr-lcssa ]
  %.1139165.epil = phi ptr [ %106, %.epil.preheader200 ], [ %.1139165.unr, %.preheader159.loopexit.unr-lcssa ]
  %epil.iter202 = phi i64 [ %epil.iter202.next, %.epil.preheader200 ], [ 0, %.preheader159.loopexit.unr-lcssa ]
  %104 = mul nuw nsw i64 %indvars.iv179.epil, %86
  %105 = getelementptr inbounds i8, ptr %.pre, i64 %104
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.1139165.epil, ptr align 1 %105, i64 %68, i1 false)
  %106 = getelementptr inbounds i8, ptr %.1139165.epil, i64 %68
  %indvars.iv.next180.epil = add nuw nsw i64 %indvars.iv179.epil, 8
  %epil.iter202.next = add i64 %epil.iter202, 1
  %epil.iter202.cmp.not = icmp eq i64 %epil.iter202.next, %xtraiter201
  br i1 %epil.iter202.cmp.not, label %.preheader159, label %.epil.preheader200, !llvm.loop !29

.preheader159:                                    ; preds = %.preheader159.loopexit.unr-lcssa, %.epil.preheader200, %.preheader160
  %.1139.lcssa = phi ptr [ %.lcssa198, %.preheader160 ], [ %.lcssa197.ph, %.preheader159.loopexit.unr-lcssa ], [ %106, %.epil.preheader200 ]
  %107 = icmp ugt i16 %66, 2
  br i1 %107, label %.lr.ph171, label %.preheader

.lr.ph171:                                        ; preds = %.preheader159
  %108 = getelementptr inbounds i8, ptr %1, i64 8
  %109 = zext i16 %65 to i64
  %110 = add nsw i64 %76, -3
  %111 = icmp ult i64 %110, 4
  br i1 %111, label %.preheader.loopexit.unr-lcssa, label %.lr.ph171.new

.lr.ph171.new:                                    ; preds = %.lr.ph171
  %112 = lshr i64 %110, 2
  %113 = add nuw nsw i64 %112, 1
  %unroll_iter212 = and i64 %113, 9223372036854775806
  br label %135

114:                                              ; preds = %114, %.lr.ph167.new
  %indvars.iv179 = phi i64 [ 4, %.lr.ph167.new ], [ %indvars.iv.next180.3, %114 ]
  %.1139165 = phi ptr [ %.lcssa198, %.lr.ph167.new ], [ %126, %114 ]
  %niter206 = phi i64 [ 0, %.lr.ph167.new ], [ %niter206.next.3, %114 ]
  %115 = mul nuw nsw i64 %indvars.iv179, %86
  %116 = getelementptr inbounds i8, ptr %.pre, i64 %115
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.1139165, ptr align 1 %116, i64 %68, i1 false)
  %117 = getelementptr inbounds i8, ptr %.1139165, i64 %68
  %indvars.iv.next180 = add nuw nsw i64 %indvars.iv179, 8
  %118 = mul nuw nsw i64 %indvars.iv.next180, %86
  %119 = getelementptr inbounds i8, ptr %.pre, i64 %118
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %117, ptr align 1 %119, i64 %68, i1 false)
  %120 = getelementptr inbounds i8, ptr %117, i64 %68
  %indvars.iv.next180.1 = add nuw nsw i64 %indvars.iv179, 16
  %121 = mul nuw nsw i64 %indvars.iv.next180.1, %86
  %122 = getelementptr inbounds i8, ptr %.pre, i64 %121
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %120, ptr align 1 %122, i64 %68, i1 false)
  %123 = getelementptr inbounds i8, ptr %120, i64 %68
  %indvars.iv.next180.2 = add nuw nsw i64 %indvars.iv179, 24
  %124 = mul nuw nsw i64 %indvars.iv.next180.2, %86
  %125 = getelementptr inbounds i8, ptr %.pre, i64 %124
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %123, ptr align 1 %125, i64 %68, i1 false)
  %126 = getelementptr inbounds i8, ptr %123, i64 %68
  %indvars.iv.next180.3 = add nuw nsw i64 %indvars.iv179, 32
  %niter206.next.3 = add i64 %niter206, 4
  %niter206.ncmp.3.not = icmp eq i64 %niter206.next.3, %unroll_iter205
  br i1 %niter206.ncmp.3.not, label %.preheader159.loopexit.unr-lcssa, label %114, !llvm.loop !30

.preheader.loopexit.unr-lcssa:                    ; preds = %135, %.lr.ph171
  %.lcssa.ph = phi ptr [ poison, %.lr.ph171 ], [ %143, %135 ]
  %indvars.iv182.unr = phi i64 [ 2, %.lr.ph171 ], [ %indvars.iv.next183.1, %135 ]
  %.2140169.unr = phi ptr [ %.1139.lcssa, %.lr.ph171 ], [ %143, %135 ]
  %127 = and i64 %110, 4
  %lcmp.mod210.not.not = icmp eq i64 %127, 0
  br i1 %lcmp.mod210.not.not, label %.preheader.loopexit.epilog-lcssa, label %.preheader

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %128 = load ptr, ptr %108, align 8, !tbaa !24
  %129 = mul nuw nsw i64 %indvars.iv182.unr, %109
  %130 = getelementptr inbounds i8, ptr %128, i64 %129
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.2140169.unr, ptr align 1 %130, i64 %68, i1 false)
  %131 = getelementptr inbounds i8, ptr %.2140169.unr, i64 %68
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader159
  %.2140.lcssa = phi ptr [ %.1139.lcssa, %.preheader159 ], [ %.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ %131, %.preheader.loopexit.epilog-lcssa ]
  %.not194 = icmp eq i16 %66, 1
  br i1 %.not194, label %._crit_edge, label %.lr.ph175

.lr.ph175:                                        ; preds = %.preheader
  %132 = getelementptr inbounds i8, ptr %1, i64 8
  %133 = zext i16 %65 to i64
  %134 = zext i16 %66 to i64
  br label %144

135:                                              ; preds = %135, %.lr.ph171.new
  %indvars.iv182 = phi i64 [ 2, %.lr.ph171.new ], [ %indvars.iv.next183.1, %135 ]
  %.2140169 = phi ptr [ %.1139.lcssa, %.lr.ph171.new ], [ %143, %135 ]
  %niter213 = phi i64 [ 0, %.lr.ph171.new ], [ %niter213.next.1, %135 ]
  %136 = load ptr, ptr %108, align 8, !tbaa !24
  %137 = mul nuw nsw i64 %indvars.iv182, %109
  %138 = getelementptr inbounds i8, ptr %136, i64 %137
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.2140169, ptr align 1 %138, i64 %68, i1 false)
  %139 = getelementptr inbounds i8, ptr %.2140169, i64 %68
  %indvars.iv.next183 = add nuw nsw i64 %indvars.iv182, 4
  %140 = load ptr, ptr %108, align 8, !tbaa !24
  %141 = mul nuw nsw i64 %indvars.iv.next183, %109
  %142 = getelementptr inbounds i8, ptr %140, i64 %141
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %139, ptr align 1 %142, i64 %68, i1 false)
  %143 = getelementptr inbounds i8, ptr %139, i64 %68
  %indvars.iv.next183.1 = add nuw nsw i64 %indvars.iv182, 8
  %niter213.next.1 = add i64 %niter213, 2
  %niter213.ncmp.1.not = icmp eq i64 %niter213.next.1, %unroll_iter212
  br i1 %niter213.ncmp.1.not, label %.preheader.loopexit.unr-lcssa, label %135, !llvm.loop !31

144:                                              ; preds = %.lr.ph175, %144
  %indvars.iv185 = phi i64 [ 1, %.lr.ph175 ], [ %indvars.iv.next186, %144 ]
  %.3173 = phi ptr [ %.2140.lcssa, %.lr.ph175 ], [ %148, %144 ]
  %145 = load ptr, ptr %132, align 8, !tbaa !24
  %146 = mul nuw nsw i64 %indvars.iv185, %133
  %147 = getelementptr inbounds i8, ptr %145, i64 %146
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.3173, ptr align 1 %147, i64 %68, i1 false)
  %148 = getelementptr inbounds i8, ptr %.3173, i64 %68
  %indvars.iv.next186 = add nuw nsw i64 %indvars.iv185, 2
  %149 = icmp ult i64 %indvars.iv.next186, %134
  br i1 %149, label %144, label %._crit_edge, !llvm.loop !32

._crit_edge:                                      ; preds = %144, %.preheader161, %.preheader
  %.pre-phi = zext i16 %65 to i32
  %150 = mul nuw i32 %72, %.pre-phi
  %151 = call i32 @LZW_GenerateStream(ptr noundef nonnull %5, i32 noundef %150, ptr noundef nonnull %71, i16 noundef zeroext %47, i8 noundef zeroext %42)
  call void @free(ptr noundef %71) #6
  br label %159

152:                                              ; preds = %41
  %153 = zext i16 %65 to i32
  %154 = zext i16 %66 to i32
  %155 = mul nuw i32 %154, %153
  %156 = getelementptr inbounds i8, ptr %1, i64 8
  %157 = load ptr, ptr %156, align 8, !tbaa !24
  %158 = call i32 @LZW_GenerateStream(ptr noundef nonnull %5, i32 noundef %155, ptr noundef %157, i16 noundef zeroext %47, i8 noundef zeroext %42)
  br label %159

159:                                              ; preds = %._crit_edge, %152
  %.1131 = phi i32 [ %151, %._crit_edge ], [ %158, %152 ]
  %.not154 = icmp eq i32 %.1131, 0
  br i1 %.not154, label %161, label %160

160:                                              ; preds = %159
  store i32 %.1131, ptr %12, align 8, !tbaa !13
  br label %225

161:                                              ; preds = %159
  %162 = load i32, ptr %30, align 8, !tbaa !18
  %163 = load i32, ptr %9, align 8, !tbaa !12
  %164 = or i32 %163, %162
  %165 = and i32 %164, 1
  %.not155 = icmp eq i32 %165, 0
  br i1 %.not155, label %185, label %166

166:                                              ; preds = %161
  store i64 325921, ptr %4, align 8
  %167 = getelementptr inbounds i8, ptr %1, i64 32
  %168 = load i8, ptr %167, align 8, !tbaa !33
  %169 = getelementptr inbounds i8, ptr %4, i64 3
  store i8 %168, ptr %169, align 1, !tbaa !16
  %170 = and i32 %163, 1
  %.not156 = icmp eq i32 %170, 0
  br i1 %.not156, label %176, label %171

171:                                              ; preds = %166
  %172 = or i8 %168, 1
  store i8 %172, ptr %169, align 1, !tbaa !16
  %173 = getelementptr inbounds i8, ptr %1, i64 33
  %174 = load i8, ptr %173, align 1, !tbaa !19
  %175 = getelementptr inbounds i8, ptr %4, i64 6
  store i8 %174, ptr %175, align 2, !tbaa !16
  br label %176

176:                                              ; preds = %171, %166
  %177 = getelementptr inbounds i8, ptr %1, i64 28
  %178 = load i16, ptr %177, align 4, !tbaa !34
  %179 = call zeroext i16 @hU16toLE(i16 noundef zeroext %178)
  %180 = getelementptr inbounds i8, ptr %4, i64 4
  store i16 %179, ptr %180, align 4
  %181 = load ptr, ptr %0, align 8, !tbaa !35
  %182 = getelementptr inbounds i8, ptr %0, i64 8
  %183 = load ptr, ptr %182, align 8, !tbaa !36
  %184 = call i32 %181(ptr noundef %183, ptr noundef nonnull %4, i64 noundef 8) #6
  br label %185

185:                                              ; preds = %176, %161
  %.0132 = phi i32 [ %184, %176 ], [ 0, %161 ]
  %186 = load ptr, ptr %0, align 8, !tbaa !35
  %187 = getelementptr inbounds i8, ptr %0, i64 8
  %188 = load ptr, ptr %187, align 8, !tbaa !36
  %189 = call i32 %186(ptr noundef %188, ptr noundef nonnull %3, i64 noundef 10) #6
  %190 = or i32 %189, %.0132
  br i1 %.not149, label %210, label %191

191:                                              ; preds = %185
  %192 = load ptr, ptr %0, align 8, !tbaa !35
  %193 = load ptr, ptr %187, align 8, !tbaa !36
  %194 = load ptr, ptr %1, align 8, !tbaa !37
  %195 = load i16, ptr %7, align 2, !tbaa !5
  %196 = zext i16 %195 to i64
  %197 = mul nuw nsw i64 %196, 3
  %198 = call i32 %192(ptr noundef %193, ptr noundef %194, i64 noundef %197) #6
  %199 = shl nuw i32 1, %.0143
  %200 = load i16, ptr %7, align 2, !tbaa !5
  %201 = trunc i32 %199 to i16
  %202 = sub i16 %201, %200
  %203 = mul i16 %202, 3
  %204 = load ptr, ptr %0, align 8, !tbaa !35
  %205 = load ptr, ptr %187, align 8, !tbaa !36
  %206 = zext i16 %203 to i32
  %207 = call i32 @writeDummyBytes(ptr noundef %204, ptr noundef %205, i32 noundef %206)
  %208 = or i32 %198, %207
  %209 = or i32 %208, %190
  br label %210

210:                                              ; preds = %191, %185
  %.1133 = phi i32 [ %209, %191 ], [ %190, %185 ]
  %211 = load ptr, ptr %0, align 8, !tbaa !35
  %212 = load ptr, ptr %187, align 8, !tbaa !36
  %213 = call i32 %211(ptr noundef %212, ptr noundef nonnull %6, i64 noundef 1) #6
  %214 = or i32 %213, %.1133
  %215 = load ptr, ptr %0, align 8, !tbaa !35
  %216 = load ptr, ptr %187, align 8, !tbaa !36
  %217 = load ptr, ptr %5, align 8, !tbaa !38
  %218 = getelementptr inbounds i8, ptr %5, i64 8
  %219 = load i32, ptr %218, align 8, !tbaa !40
  %220 = zext i32 %219 to i64
  %221 = call i32 %215(ptr noundef %216, ptr noundef %217, i64 noundef %220) #6
  %222 = or i32 %214, %221
  %.not157 = icmp ne i32 %222, 0
  %. = zext i1 %.not157 to i32
  store i32 %., ptr %12, align 8, !tbaa !13
  %223 = load ptr, ptr %5, align 8, !tbaa !38
  call void @free(ptr noundef %223) #6
  %224 = load i32, ptr %12, align 8, !tbaa !13
  br label %225

225:                                              ; preds = %.thread, %210, %160
  %.1 = phi i32 [ %.1131, %160 ], [ %224, %210 ], [ 2, %.thread ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #6
  br label %226

226:                                              ; preds = %2, %225, %16
  %.2 = phi i32 [ -1, %16 ], [ %.1, %225 ], [ %13, %2 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 10, ptr nonnull %3) #6
  ret i32 %.2
}

; Function Attrs: nounwind uwtable
declare hidden zeroext i8 @calcInitCodeLen(i16 noundef zeroext) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden zeroext i16 @hU16toLE(i16 noundef zeroext) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @LZW_GenerateStream(ptr noundef, i32 noundef, ptr noundef, i16 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #3

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { 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 #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, !11, i64 30}
!6 = !{!"", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 20, !11, i64 22, !11, i64 24, !11, i64 26, !11, i64 28, !11, i64 30, !8, i64 32, !8, i64 33}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = !{!6, !10, i64 16}
!13 = !{!14, !10, i64 40}
!14 = !{!"", !15, i64 0, !10, i64 40}
!15 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !11, i64 28, !11, i64 30, !11, i64 32, !11, i64 34}
!16 = !{!8, !8, i64 0}
!17 = !{!11, !11, i64 0}
!18 = !{!14, !10, i64 24}
!19 = !{!6, !8, i64 33}
!20 = !{!6, !11, i64 20}
!21 = !{!6, !11, i64 22}
!22 = !{!6, !11, i64 24}
!23 = !{!6, !11, i64 26}
!24 = !{!6, !7, i64 8}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !26}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}
!33 = !{!6, !8, i64 32}
!34 = !{!6, !11, i64 28}
!35 = !{!14, !7, i64 0}
!36 = !{!14, !7, i64 8}
!37 = !{!6, !7, i64 0}
!38 = !{!39, !7, i64 0}
!39 = !{!"", !7, i64 0, !10, i64 8}
!40 = !{!39, !10, i64 8}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass