; LLVM IR from hadryansalles/Luz :: deps/optick (optick_miniz)

; 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.mz_stream_s = type { ptr, i32, i64, ptr, i32, i64, ptr, ptr, ptr, ptr, ptr, i32, i64, i64 }
%struct.inflate_state = type { %struct.tinfl_decompressor_tag, i32, i32, i32, i32, i32, [32768 x i8], i32 }
%struct.tinfl_decompressor_tag = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i64, i64, [3 x %struct.tinfl_huff_table], [4 x i8], [457 x i8] }
%struct.tinfl_huff_table = type { [288 x i8], [1024 x i16], [576 x i16] }

; 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: mustprogress uwtable
define dso_local i32 @mz_inflate(ptr noundef %0, i32 noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 8, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %15 = load ptr, ptr %4, align 8, !tbaa !5
  %16 = icmp ne ptr %15, null
  br i1 %16, label %17, label %22

17:                                               ; preds = %2
  %18 = load ptr, ptr %4, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.mz_stream_s, ptr %18, i32 0, i32 7
  %20 = load ptr, ptr %19, align 8, !tbaa !11
  %21 = icmp ne ptr %20, null
  br i1 %21, label %23, label %22

22:                                               ; preds = %17, %2
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

23:                                               ; preds = %17
  %24 = load i32, ptr %5, align 4, !tbaa !9
  %25 = icmp eq i32 %24, 1
  br i1 %25, label %26, label %27

26:                                               ; preds = %23
  store i32 2, ptr %5, align 4, !tbaa !9
  br label %27

27:                                               ; preds = %26, %23
  %28 = load i32, ptr %5, align 4, !tbaa !9
  %29 = icmp ne i32 %28, 0
  br i1 %29, label %30, label %37

30:                                               ; preds = %27
  %31 = load i32, ptr %5, align 4, !tbaa !9
  %32 = icmp ne i32 %31, 2
  br i1 %32, label %33, label %37

33:                                               ; preds = %30
  %34 = load i32, ptr %5, align 4, !tbaa !9
  %35 = icmp ne i32 %34, 4
  br i1 %35, label %36, label %37

36:                                               ; preds = %33
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

37:                                               ; preds = %33, %30, %27
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.mz_stream_s, ptr %38, i32 0, i32 7
  %40 = load ptr, ptr %39, align 8, !tbaa !11
  store ptr %40, ptr %6, align 8, !tbaa !5
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.inflate_state, ptr %41, i32 0, i32 5
  %43 = load i32, ptr %42, align 8, !tbaa !14
  %44 = icmp sgt i32 %43, 0
  br i1 %44, label %45, label %48

45:                                               ; preds = %37
  %46 = load i32, ptr %9, align 4, !tbaa !9
  %47 = or i32 %46, 1
  store i32 %47, ptr %9, align 4, !tbaa !9
  br label %48

48:                                               ; preds = %45, %37
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.mz_stream_s, ptr %49, i32 0, i32 1
  %51 = load i32, ptr %50, align 8, !tbaa !18
  %52 = zext i32 %51 to i64
  store i64 %52, ptr %12, align 8, !tbaa !19
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.inflate_state, ptr %53, i32 0, i32 3
  %55 = load i32, ptr %54, align 8, !tbaa !20
  store i32 %55, ptr %8, align 4, !tbaa !9
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.inflate_state, ptr %56, i32 0, i32 3
  store i32 0, ptr %57, align 8, !tbaa !20
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.inflate_state, ptr %58, i32 0, i32 7
  %60 = load i32, ptr %59, align 4, !tbaa !21
  %61 = icmp slt i32 %60, 0
  br i1 %61, label %62, label %63

62:                                               ; preds = %48
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

63:                                               ; preds = %48
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.inflate_state, ptr %64, i32 0, i32 4
  %66 = load i32, ptr %65, align 4, !tbaa !22
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %68, label %72

68:                                               ; preds = %63
  %69 = load i32, ptr %5, align 4, !tbaa !9
  %70 = icmp ne i32 %69, 4
  br i1 %70, label %71, label %72

71:                                               ; preds = %68
  store i32 -2, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

72:                                               ; preds = %68, %63
  %73 = load i32, ptr %5, align 4, !tbaa !9
  %74 = icmp eq i32 %73, 4
  %75 = zext i1 %74 to i32
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.inflate_state, ptr %76, i32 0, i32 4
  %78 = load i32, ptr %77, align 4, !tbaa !22
  %79 = or i32 %78, %75
  store i32 %79, ptr %77, align 4, !tbaa !22
  %80 = load i32, ptr %5, align 4, !tbaa !9
  %81 = icmp eq i32 %80, 4
  br i1 %81, label %82, label %170

82:                                               ; preds = %72
  %83 = load i32, ptr %8, align 4, !tbaa !9
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %85, label %170

85:                                               ; preds = %82
  %86 = load i32, ptr %9, align 4, !tbaa !9
  %87 = or i32 %86, 4
  store i32 %87, ptr %9, align 4, !tbaa !9
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.mz_stream_s, ptr %88, i32 0, i32 1
  %90 = load i32, ptr %89, align 8, !tbaa !18
  %91 = zext i32 %90 to i64
  store i64 %91, ptr %10, align 8, !tbaa !19
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.mz_stream_s, ptr %92, i32 0, i32 4
  %94 = load i32, ptr %93, align 8, !tbaa !23
  %95 = zext i32 %94 to i64
  store i64 %95, ptr %11, align 8, !tbaa !19
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.inflate_state, ptr %96, i32 0, i32 0
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.mz_stream_s, ptr %98, i32 0, i32 0
  %100 = load ptr, ptr %99, align 8, !tbaa !24
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.mz_stream_s, ptr %101, i32 0, i32 3
  %103 = load ptr, ptr %102, align 8, !tbaa !25
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.mz_stream_s, ptr %104, i32 0, i32 3
  %106 = load ptr, ptr %105, align 8, !tbaa !25
  %107 = load i32, ptr %9, align 4, !tbaa !9
  %108 = call i32 @tinfl_decompress(ptr noundef %97, ptr noundef %100, ptr noundef %10, ptr noundef %103, ptr noundef %106, ptr noundef %11, i32 noundef %107)
  store i32 %108, ptr %13, align 4, !tbaa !26
  %109 = load i32, ptr %13, align 4, !tbaa !26
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.inflate_state, ptr %110, i32 0, i32 7
  store i32 %109, ptr %111, align 4, !tbaa !21
  %112 = load i64, ptr %10, align 8, !tbaa !19
  %113 = trunc i64 %112 to i32
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.mz_stream_s, ptr %114, i32 0, i32 0
  %116 = load ptr, ptr %115, align 8, !tbaa !24
  %117 = zext i32 %113 to i64
  %118 = getelementptr inbounds i8, ptr %116, i64 %117
  store ptr %118, ptr %115, align 8, !tbaa !24
  %119 = load i64, ptr %10, align 8, !tbaa !19
  %120 = trunc i64 %119 to i32
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.mz_stream_s, ptr %121, i32 0, i32 1
  %123 = load i32, ptr %122, align 8, !tbaa !18
  %124 = sub i32 %123, %120
  store i32 %124, ptr %122, align 8, !tbaa !18
  %125 = load i64, ptr %10, align 8, !tbaa !19
  %126 = trunc i64 %125 to i32
  %127 = zext i32 %126 to i64
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.mz_stream_s, ptr %128, i32 0, i32 2
  %130 = load i64, ptr %129, align 8, !tbaa !27
  %131 = add i64 %130, %127
  store i64 %131, ptr %129, align 8, !tbaa !27
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.inflate_state, ptr %132, i32 0, i32 0
  %134 = getelementptr inbounds %struct.tinfl_decompressor_tag, ptr %133, i32 0, i32 7
  %135 = load i32, ptr %134, align 4, !tbaa !28
  %136 = zext i32 %135 to i64
  %137 = load ptr, ptr %4, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.mz_stream_s, ptr %137, i32 0, i32 12
  store i64 %136, ptr %138, align 8, !tbaa !29
  %139 = load i64, ptr %11, align 8, !tbaa !19
  %140 = trunc i64 %139 to i32
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.mz_stream_s, ptr %141, i32 0, i32 3
  %143 = load ptr, ptr %142, align 8, !tbaa !25
  %144 = zext i32 %140 to i64
  %145 = getelementptr inbounds i8, ptr %143, i64 %144
  store ptr %145, ptr %142, align 8, !tbaa !25
  %146 = load i64, ptr %11, align 8, !tbaa !19
  %147 = trunc i64 %146 to i32
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.mz_stream_s, ptr %148, i32 0, i32 4
  %150 = load i32, ptr %149, align 8, !tbaa !23
  %151 = sub i32 %150, %147
  store i32 %151, ptr %149, align 8, !tbaa !23
  %152 = load i64, ptr %11, align 8, !tbaa !19
  %153 = trunc i64 %152 to i32
  %154 = zext i32 %153 to i64
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.mz_stream_s, ptr %155, i32 0, i32 5
  %157 = load i64, ptr %156, align 8, !tbaa !30
  %158 = add i64 %157, %154
  store i64 %158, ptr %156, align 8, !tbaa !30
  %159 = load i32, ptr %13, align 4, !tbaa !26
  %160 = icmp slt i32 %159, 0
  br i1 %160, label %161, label %162

161:                                              ; preds = %85
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

162:                                              ; preds = %85
  %163 = load i32, ptr %13, align 4, !tbaa !26
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %165, label %168

165:                                              ; preds = %162
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.inflate_state, ptr %166, i32 0, i32 7
  store i32 -1, ptr %167, align 4, !tbaa !21
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

168:                                              ; preds = %162
  br label %169

169:                                              ; preds = %168
  store i32 1, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

170:                                              ; preds = %82, %72
  %171 = load i32, ptr %5, align 4, !tbaa !9
  %172 = icmp ne i32 %171, 4
  br i1 %172, label %173, label %176

173:                                              ; preds = %170
  %174 = load i32, ptr %9, align 4, !tbaa !9
  %175 = or i32 %174, 2
  store i32 %175, ptr %9, align 4, !tbaa !9
  br label %176

176:                                              ; preds = %173, %170
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.inflate_state, ptr %177, i32 0, i32 2
  %179 = load i32, ptr %178, align 4, !tbaa !31
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %256

181:                                              ; preds = %176
  %182 = load ptr, ptr %6, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.inflate_state, ptr %182, i32 0, i32 2
  %184 = load i32, ptr %183, align 4, !tbaa !31
  %185 = load ptr, ptr %4, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.mz_stream_s, ptr %185, i32 0, i32 4
  %187 = load i32, ptr %186, align 8, !tbaa !23
  %188 = icmp ult i32 %184, %187
  br i1 %188, label %189, label %193

189:                                              ; preds = %181
  %190 = load ptr, ptr %6, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.inflate_state, ptr %190, i32 0, i32 2
  %192 = load i32, ptr %191, align 4, !tbaa !31
  br label %197

193:                                              ; preds = %181
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.mz_stream_s, ptr %194, i32 0, i32 4
  %196 = load i32, ptr %195, align 8, !tbaa !23
  br label %197

197:                                              ; preds = %193, %189
  %198 = phi i32 [ %192, %189 ], [ %196, %193 ]
  store i32 %198, ptr %7, align 4, !tbaa !9
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.mz_stream_s, ptr %199, i32 0, i32 3
  %201 = load ptr, ptr %200, align 8, !tbaa !25
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.inflate_state, ptr %202, i32 0, i32 6
  %204 = getelementptr inbounds [32768 x i8], ptr %203, i64 0, i64 0
  %205 = load ptr, ptr %6, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.inflate_state, ptr %205, i32 0, i32 1
  %207 = load i32, ptr %206, align 8, !tbaa !32
  %208 = zext i32 %207 to i64
  %209 = getelementptr inbounds i8, ptr %204, i64 %208
  %210 = load i32, ptr %7, align 4, !tbaa !9
  %211 = zext i32 %210 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %201, ptr align 1 %209, i64 %211, i1 false)
  %212 = load i32, ptr %7, align 4, !tbaa !9
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.mz_stream_s, ptr %213, i32 0, i32 3
  %215 = load ptr, ptr %214, align 8, !tbaa !25
  %216 = zext i32 %212 to i64
  %217 = getelementptr inbounds i8, ptr %215, i64 %216
  store ptr %217, ptr %214, align 8, !tbaa !25
  %218 = load i32, ptr %7, align 4, !tbaa !9
  %219 = load ptr, ptr %4, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.mz_stream_s, ptr %219, i32 0, i32 4
  %221 = load i32, ptr %220, align 8, !tbaa !23
  %222 = sub i32 %221, %218
  store i32 %222, ptr %220, align 8, !tbaa !23
  %223 = load i32, ptr %7, align 4, !tbaa !9
  %224 = zext i32 %223 to i64
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.mz_stream_s, ptr %225, i32 0, i32 5
  %227 = load i64, ptr %226, align 8, !tbaa !30
  %228 = add i64 %227, %224
  store i64 %228, ptr %226, align 8, !tbaa !30
  %229 = load i32, ptr %7, align 4, !tbaa !9
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.inflate_state, ptr %230, i32 0, i32 2
  %232 = load i32, ptr %231, align 4, !tbaa !31
  %233 = sub i32 %232, %229
  store i32 %233, ptr %231, align 4, !tbaa !31
  %234 = load ptr, ptr %6, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.inflate_state, ptr %234, i32 0, i32 1
  %236 = load i32, ptr %235, align 8, !tbaa !32
  %237 = load i32, ptr %7, align 4, !tbaa !9
  %238 = add i32 %236, %237
  %239 = and i32 %238, 32767
  %240 = load ptr, ptr %6, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.inflate_state, ptr %240, i32 0, i32 1
  store i32 %239, ptr %241, align 8, !tbaa !32
  %242 = load ptr, ptr %6, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.inflate_state, ptr %242, i32 0, i32 7
  %244 = load i32, ptr %243, align 4, !tbaa !21
  %245 = icmp eq i32 %244, 0
  br i1 %245, label %246, label %252

246:                                              ; preds = %197
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.inflate_state, ptr %247, i32 0, i32 2
  %249 = load i32, ptr %248, align 4, !tbaa !31
  %250 = icmp ne i32 %249, 0
  %251 = xor i1 %250, true
  br label %252

252:                                              ; preds = %246, %197
  %253 = phi i1 [ false, %197 ], [ %251, %246 ]
  %254 = zext i1 %253 to i64
  %255 = select i1 %253, i32 1, i32 0
  store i32 %255, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

256:                                              ; preds = %176
  br label %257

257:                                              ; preds = %432, %256
  %258 = load ptr, ptr %4, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.mz_stream_s, ptr %258, i32 0, i32 1
  %260 = load i32, ptr %259, align 8, !tbaa !18
  %261 = zext i32 %260 to i64
  store i64 %261, ptr %10, align 8, !tbaa !19
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.inflate_state, ptr %262, i32 0, i32 1
  %264 = load i32, ptr %263, align 8, !tbaa !32
  %265 = sub i32 32768, %264
  %266 = zext i32 %265 to i64
  store i64 %266, ptr %11, align 8, !tbaa !19
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.inflate_state, ptr %267, i32 0, i32 0
  %269 = load ptr, ptr %4, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.mz_stream_s, ptr %269, i32 0, i32 0
  %271 = load ptr, ptr %270, align 8, !tbaa !24
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.inflate_state, ptr %272, i32 0, i32 6
  %274 = getelementptr inbounds [32768 x i8], ptr %273, i64 0, i64 0
  %275 = load ptr, ptr %6, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.inflate_state, ptr %275, i32 0, i32 6
  %277 = getelementptr inbounds [32768 x i8], ptr %276, i64 0, i64 0
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.inflate_state, ptr %278, i32 0, i32 1
  %280 = load i32, ptr %279, align 8, !tbaa !32
  %281 = zext i32 %280 to i64
  %282 = getelementptr inbounds i8, ptr %277, i64 %281
  %283 = load i32, ptr %9, align 4, !tbaa !9
  %284 = call i32 @tinfl_decompress(ptr noundef %268, ptr noundef %271, ptr noundef %10, ptr noundef %274, ptr noundef %282, ptr noundef %11, i32 noundef %283)
  store i32 %284, ptr %13, align 4, !tbaa !26
  %285 = load i32, ptr %13, align 4, !tbaa !26
  %286 = load ptr, ptr %6, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.inflate_state, ptr %286, i32 0, i32 7
  store i32 %285, ptr %287, align 4, !tbaa !21
  %288 = load i64, ptr %10, align 8, !tbaa !19
  %289 = trunc i64 %288 to i32
  %290 = load ptr, ptr %4, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.mz_stream_s, ptr %290, i32 0, i32 0
  %292 = load ptr, ptr %291, align 8, !tbaa !24
  %293 = zext i32 %289 to i64
  %294 = getelementptr inbounds i8, ptr %292, i64 %293
  store ptr %294, ptr %291, align 8, !tbaa !24
  %295 = load i64, ptr %10, align 8, !tbaa !19
  %296 = trunc i64 %295 to i32
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.mz_stream_s, ptr %297, i32 0, i32 1
  %299 = load i32, ptr %298, align 8, !tbaa !18
  %300 = sub i32 %299, %296
  store i32 %300, ptr %298, align 8, !tbaa !18
  %301 = load i64, ptr %10, align 8, !tbaa !19
  %302 = trunc i64 %301 to i32
  %303 = zext i32 %302 to i64
  %304 = load ptr, ptr %4, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.mz_stream_s, ptr %304, i32 0, i32 2
  %306 = load i64, ptr %305, align 8, !tbaa !27
  %307 = add i64 %306, %303
  store i64 %307, ptr %305, align 8, !tbaa !27
  %308 = load ptr, ptr %6, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.inflate_state, ptr %308, i32 0, i32 0
  %310 = getelementptr inbounds %struct.tinfl_decompressor_tag, ptr %309, i32 0, i32 7
  %311 = load i32, ptr %310, align 4, !tbaa !28
  %312 = zext i32 %311 to i64
  %313 = load ptr, ptr %4, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.mz_stream_s, ptr %313, i32 0, i32 12
  store i64 %312, ptr %314, align 8, !tbaa !29
  %315 = load i64, ptr %11, align 8, !tbaa !19
  %316 = trunc i64 %315 to i32
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.inflate_state, ptr %317, i32 0, i32 2
  store i32 %316, ptr %318, align 4, !tbaa !31
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.inflate_state, ptr %319, i32 0, i32 2
  %321 = load i32, ptr %320, align 4, !tbaa !31
  %322 = load ptr, ptr %4, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.mz_stream_s, ptr %322, i32 0, i32 4
  %324 = load i32, ptr %323, align 8, !tbaa !23
  %325 = icmp ult i32 %321, %324
  br i1 %325, label %326, label %330

326:                                              ; preds = %257
  %327 = load ptr, ptr %6, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.inflate_state, ptr %327, i32 0, i32 2
  %329 = load i32, ptr %328, align 4, !tbaa !31
  br label %334

330:                                              ; preds = %257
  %331 = load ptr, ptr %4, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.mz_stream_s, ptr %331, i32 0, i32 4
  %333 = load i32, ptr %332, align 8, !tbaa !23
  br label %334

334:                                              ; preds = %330, %326
  %335 = phi i32 [ %329, %326 ], [ %333, %330 ]
  store i32 %335, ptr %7, align 4, !tbaa !9
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.mz_stream_s, ptr %336, i32 0, i32 3
  %338 = load ptr, ptr %337, align 8, !tbaa !25
  %339 = load ptr, ptr %6, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.inflate_state, ptr %339, i32 0, i32 6
  %341 = getelementptr inbounds [32768 x i8], ptr %340, i64 0, i64 0
  %342 = load ptr, ptr %6, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.inflate_state, ptr %342, i32 0, i32 1
  %344 = load i32, ptr %343, align 8, !tbaa !32
  %345 = zext i32 %344 to i64
  %346 = getelementptr inbounds i8, ptr %341, i64 %345
  %347 = load i32, ptr %7, align 4, !tbaa !9
  %348 = zext i32 %347 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %338, ptr align 1 %346, i64 %348, i1 false)
  %349 = load i32, ptr %7, align 4, !tbaa !9
  %350 = load ptr, ptr %4, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.mz_stream_s, ptr %350, i32 0, i32 3
  %352 = load ptr, ptr %351, align 8, !tbaa !25
  %353 = zext i32 %349 to i64
  %354 = getelementptr inbounds i8, ptr %352, i64 %353
  store ptr %354, ptr %351, align 8, !tbaa !25
  %355 = load i32, ptr %7, align 4, !tbaa !9
  %356 = load ptr, ptr %4, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.mz_stream_s, ptr %356, i32 0, i32 4
  %358 = load i32, ptr %357, align 8, !tbaa !23
  %359 = sub i32 %358, %355
  store i32 %359, ptr %357, align 8, !tbaa !23
  %360 = load i32, ptr %7, align 4, !tbaa !9
  %361 = zext i32 %360 to i64
  %362 = load ptr, ptr %4, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.mz_stream_s, ptr %362, i32 0, i32 5
  %364 = load i64, ptr %363, align 8, !tbaa !30
  %365 = add i64 %364, %361
  store i64 %365, ptr %363, align 8, !tbaa !30
  %366 = load i32, ptr %7, align 4, !tbaa !9
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.inflate_state, ptr %367, i32 0, i32 2
  %369 = load i32, ptr %368, align 4, !tbaa !31
  %370 = sub i32 %369, %366
  store i32 %370, ptr %368, align 4, !tbaa !31
  %371 = load ptr, ptr %6, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.inflate_state, ptr %371, i32 0, i32 1
  %373 = load i32, ptr %372, align 8, !tbaa !32
  %374 = load i32, ptr %7, align 4, !tbaa !9
  %375 = add i32 %373, %374
  %376 = and i32 %375, 32767
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.inflate_state, ptr %377, i32 0, i32 1
  store i32 %376, ptr %378, align 8, !tbaa !32
  %379 = load i32, ptr %13, align 4, !tbaa !26
  %380 = icmp slt i32 %379, 0
  br i1 %380, label %381, label %382

381:                                              ; preds = %334
  store i32 -3, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

382:                                              ; preds = %334
  %383 = load i32, ptr %13, align 4, !tbaa !26
  %384 = icmp eq i32 %383, 1
  br i1 %384, label %385, label %389

385:                                              ; preds = %382
  %386 = load i64, ptr %12, align 8, !tbaa !19
  %387 = icmp ne i64 %386, 0
  br i1 %387, label %389, label %388

388:                                              ; preds = %385
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

389:                                              ; preds = %385, %382
  %390 = load i32, ptr %5, align 4, !tbaa !9
  %391 = icmp eq i32 %390, 4
  br i1 %391, label %392, label %410

392:                                              ; preds = %389
  %393 = load i32, ptr %13, align 4, !tbaa !26
  %394 = icmp eq i32 %393, 0
  br i1 %394, label %395, label %402

395:                                              ; preds = %392
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.inflate_state, ptr %396, i32 0, i32 2
  %398 = load i32, ptr %397, align 4, !tbaa !31
  %399 = icmp ne i32 %398, 0
  %400 = zext i1 %399 to i64
  %401 = select i1 %399, i32 -5, i32 1
  store i32 %401, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

402:                                              ; preds = %392
  %403 = load ptr, ptr %4, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.mz_stream_s, ptr %403, i32 0, i32 4
  %405 = load i32, ptr %404, align 8, !tbaa !23
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %408, label %407

407:                                              ; preds = %402
  store i32 -5, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

408:                                              ; preds = %402
  br label %409

409:                                              ; preds = %408
  br label %430

410:                                              ; preds = %389
  %411 = load i32, ptr %13, align 4, !tbaa !26
  %412 = icmp eq i32 %411, 0
  br i1 %412, label %428, label %413

413:                                              ; preds = %410
  %414 = load ptr, ptr %4, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.mz_stream_s, ptr %414, i32 0, i32 1
  %416 = load i32, ptr %415, align 8, !tbaa !18
  %417 = icmp ne i32 %416, 0
  br i1 %417, label %418, label %428

418:                                              ; preds = %413
  %419 = load ptr, ptr %4, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.mz_stream_s, ptr %419, i32 0, i32 4
  %421 = load i32, ptr %420, align 8, !tbaa !23
  %422 = icmp ne i32 %421, 0
  br i1 %422, label %423, label %428

423:                                              ; preds = %418
  %424 = load ptr, ptr %6, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.inflate_state, ptr %424, i32 0, i32 2
  %426 = load i32, ptr %425, align 4, !tbaa !31
  %427 = icmp ne i32 %426, 0
  br i1 %427, label %428, label %429

428:                                              ; preds = %423, %418, %413, %410
  br label %433

429:                                              ; preds = %423
  br label %430

430:                                              ; preds = %429, %409
  br label %431

431:                                              ; preds = %430
  br label %432

432:                                              ; preds = %431
  br label %257, !llvm.loop !33

433:                                              ; preds = %428
  %434 = load i32, ptr %13, align 4, !tbaa !26
  %435 = icmp eq i32 %434, 0
  br i1 %435, label %436, label %442

436:                                              ; preds = %433
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.inflate_state, ptr %437, i32 0, i32 2
  %439 = load i32, ptr %438, align 4, !tbaa !31
  %440 = icmp ne i32 %439, 0
  %441 = xor i1 %440, true
  br label %442

442:                                              ; preds = %436, %433
  %443 = phi i1 [ false, %433 ], [ %441, %436 ]
  %444 = zext i1 %443 to i64
  %445 = select i1 %443, i32 1, i32 0
  store i32 %445, ptr %3, align 4
  store i32 1, ptr %14, align 4
  br label %446

446:                                              ; preds = %442, %407, %395, %388, %381, %252, %169, %165, %161, %71, %62, %36, %22
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  %447 = load i32, ptr %3, align 4
  ret i32 %447
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local i32 @tinfl_decompress(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

; 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) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 56}
!12 = !{!"_ZTS11mz_stream_s", !6, i64 0, !10, i64 8, !13, i64 16, !6, i64 24, !10, i64 32, !13, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !13, i64 96, !13, i64 104}
!13 = !{!"long", !7, i64 0}
!14 = !{!15, !10, i64 11016}
!15 = !{!"_ZTS13inflate_state", !16, i64 0, !10, i64 11000, !10, i64 11004, !10, i64 11008, !10, i64 11012, !10, i64 11016, !7, i64 11020, !17, i64 43788}
!16 = !{!"_ZTS22tinfl_decompressor_tag", !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, !7, i64 44, !13, i64 56, !13, i64 64, !7, i64 72, !7, i64 10536, !7, i64 10540}
!17 = !{!"_ZTS12tinfl_status", !7, i64 0}
!18 = !{!12, !10, i64 8}
!19 = !{!13, !13, i64 0}
!20 = !{!15, !10, i64 11008}
!21 = !{!15, !17, i64 43788}
!22 = !{!15, !10, i64 11012}
!23 = !{!12, !10, i64 32}
!24 = !{!12, !6, i64 0}
!25 = !{!12, !6, i64 24}
!26 = !{!17, !17, i64 0}
!27 = !{!12, !13, i64 16}
!28 = !{!15, !10, i64 28}
!29 = !{!12, !13, i64 96}
!30 = !{!12, !13, i64 40}
!31 = !{!15, !10, i64 11004}
!32 = !{!15, !10, i64 11000}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local range(i32 -5, 2) i32 @mz_inflate(ptr noundef %0, i32 noundef %1) local_unnamed_addr #1 {
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #4
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %.loopexit, label %5

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 56
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %.not130 = icmp eq ptr %7, null
  br i1 %.not130, label %.loopexit, label %8

8:                                                ; preds = %5
  %9 = icmp eq i32 %1, 1
  %spec.store.select = select i1 %9, i32 2, i32 %1
  %10 = icmp ne i32 %spec.store.select, 4
  switch i32 %spec.store.select, label %.loopexit [
    i32 4, label %11
    i32 2, label %11
    i32 0, label %11
  ]

11:                                               ; preds = %8, %8, %8
  %12 = getelementptr inbounds i8, ptr %7, i64 11016
  %13 = load i32, ptr %12, align 8, !tbaa !12
  %14 = icmp sgt i32 %13, 0
  %spec.select = select i1 %14, i32 9, i32 8
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = load i32, ptr %15, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %7, i64 11008
  %18 = load i32, ptr %17, align 8, !tbaa !17
  store i32 0, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %7, i64 43788
  %20 = load i32, ptr %19, align 4, !tbaa !18
  %21 = icmp slt i32 %20, 0
  br i1 %21, label %.loopexit, label %22

22:                                               ; preds = %11
  %23 = getelementptr inbounds i8, ptr %7, i64 11012
  %24 = load i32, ptr %23, align 4, !tbaa !19
  %25 = icmp ne i32 %24, 0
  %or.cond5 = and i1 %10, %25
  br i1 %or.cond5, label %.loopexit, label %26

26:                                               ; preds = %22
  %27 = icmp eq i32 %spec.store.select, 4
  %28 = zext i1 %27 to i32
  %29 = or i32 %24, %28
  store i32 %29, ptr %23, align 4, !tbaa !19
  %30 = icmp ne i32 %18, 0
  %or.cond7 = select i1 %27, i1 %30, i1 false
  br i1 %or.cond7, label %31, label %68

31:                                               ; preds = %26
  %32 = or disjoint i32 %spec.select, 4
  %33 = zext i32 %16 to i64
  store i64 %33, ptr %3, align 8, !tbaa !20
  %34 = getelementptr inbounds i8, ptr %0, i64 32
  %35 = load i32, ptr %34, align 8, !tbaa !21
  %36 = zext i32 %35 to i64
  store i64 %36, ptr %4, align 8, !tbaa !20
  %37 = load ptr, ptr %0, align 8, !tbaa !22
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = load ptr, ptr %38, align 8, !tbaa !23
  %40 = call i32 @tinfl_decompress(ptr noundef nonnull %7, ptr noundef %37, ptr noundef nonnull %3, ptr noundef %39, ptr noundef %39, ptr noundef nonnull %4, i32 noundef %32)
  store i32 %40, ptr %19, align 4, !tbaa !18
  %41 = load i64, ptr %3, align 8, !tbaa !20
  %42 = load ptr, ptr %0, align 8, !tbaa !22
  %43 = and i64 %41, 4294967295
  %44 = getelementptr inbounds i8, ptr %42, i64 %43
  store ptr %44, ptr %0, align 8, !tbaa !22
  %45 = trunc i64 %41 to i32
  %46 = load i32, ptr %15, align 8, !tbaa !16
  %47 = sub i32 %46, %45
  store i32 %47, ptr %15, align 8, !tbaa !16
  %48 = getelementptr inbounds i8, ptr %0, i64 16
  %49 = load i64, ptr %48, align 8, !tbaa !24
  %50 = add i64 %49, %43
  store i64 %50, ptr %48, align 8, !tbaa !24
  %51 = getelementptr inbounds i8, ptr %7, i64 28
  %52 = load i32, ptr %51, align 4, !tbaa !25
  %53 = zext i32 %52 to i64
  %54 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %53, ptr %54, align 8, !tbaa !26
  %55 = load i64, ptr %4, align 8, !tbaa !20
  %56 = load ptr, ptr %38, align 8, !tbaa !23
  %57 = and i64 %55, 4294967295
  %58 = getelementptr inbounds i8, ptr %56, i64 %57
  store ptr %58, ptr %38, align 8, !tbaa !23
  %59 = trunc i64 %55 to i32
  %60 = load i32, ptr %34, align 8, !tbaa !21
  %61 = sub i32 %60, %59
  store i32 %61, ptr %34, align 8, !tbaa !21
  %62 = getelementptr inbounds i8, ptr %0, i64 40
  %63 = load i64, ptr %62, align 8, !tbaa !27
  %64 = add i64 %63, %57
  store i64 %64, ptr %62, align 8, !tbaa !27
  %65 = icmp slt i32 %40, 0
  br i1 %65, label %.loopexit, label %66

66:                                               ; preds = %31
  %.not139 = icmp eq i32 %40, 0
  br i1 %.not139, label %.loopexit, label %67

67:                                               ; preds = %66
  store i32 -1, ptr %19, align 4, !tbaa !18
  br label %.loopexit

68:                                               ; preds = %26
  %69 = or disjoint i32 %spec.select, 2
  %spec.select140 = select i1 %10, i32 %69, i32 %spec.select
  %70 = getelementptr inbounds i8, ptr %7, i64 11004
  %71 = load i32, ptr %70, align 4, !tbaa !28
  %.not131 = icmp eq i32 %71, 0
  br i1 %.not131, label %.preheader, label %81

.preheader:                                       ; preds = %68
  %72 = getelementptr inbounds i8, ptr %7, i64 11000
  %73 = getelementptr inbounds i8, ptr %7, i64 11020
  %74 = getelementptr inbounds i8, ptr %0, i64 16
  %75 = getelementptr inbounds i8, ptr %7, i64 28
  %76 = getelementptr inbounds i8, ptr %0, i64 96
  %77 = getelementptr inbounds i8, ptr %0, i64 32
  %78 = getelementptr inbounds i8, ptr %0, i64 24
  %79 = getelementptr inbounds i8, ptr %0, i64 40
  %80 = icmp ne i32 %16, 0
  %.pre152 = load i32, ptr %72, align 8, !tbaa !29
  br label %108

81:                                               ; preds = %68
  %82 = getelementptr inbounds i8, ptr %0, i64 32
  %83 = load i32, ptr %82, align 8, !tbaa !21
  %. = tail call i32 @llvm.umin.i32(i32 %71, i32 %83)
  %84 = getelementptr inbounds i8, ptr %0, i64 24
  %85 = load ptr, ptr %84, align 8, !tbaa !23
  %86 = getelementptr inbounds i8, ptr %7, i64 11020
  %87 = getelementptr inbounds i8, ptr %7, i64 11000
  %88 = load i32, ptr %87, align 8, !tbaa !29
  %89 = zext i32 %88 to i64
  %90 = getelementptr inbounds i8, ptr %86, i64 %89
  %91 = zext i32 %. to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %85, ptr nonnull align 1 %90, i64 %91, i1 false)
  %92 = load ptr, ptr %84, align 8, !tbaa !23
  %93 = getelementptr inbounds i8, ptr %92, i64 %91
  store ptr %93, ptr %84, align 8, !tbaa !23
  %94 = load i32, ptr %82, align 8, !tbaa !21
  %95 = sub i32 %94, %.
  store i32 %95, ptr %82, align 8, !tbaa !21
  %96 = getelementptr inbounds i8, ptr %0, i64 40
  %97 = load i64, ptr %96, align 8, !tbaa !27
  %98 = add i64 %97, %91
  store i64 %98, ptr %96, align 8, !tbaa !27
  %99 = load i32, ptr %70, align 4, !tbaa !28
  %100 = sub i32 %99, %.
  store i32 %100, ptr %70, align 4, !tbaa !28
  %101 = load i32, ptr %87, align 8, !tbaa !29
  %102 = add i32 %101, %.
  %103 = and i32 %102, 32767
  store i32 %103, ptr %87, align 8, !tbaa !29
  %104 = load i32, ptr %19, align 4, !tbaa !18
  %105 = icmp eq i32 %104, 0
  br i1 %105, label %106, label %.loopexit

106:                                              ; preds = %81
  %.not138 = icmp eq i32 %99, %.
  %107 = zext i1 %.not138 to i32
  br label %.loopexit

108:                                              ; preds = %.backedge, %.preheader
  %109 = phi i32 [ %.pre152, %.preheader ], [ %147, %.backedge ]
  %110 = phi i32 [ %16, %.preheader ], [ %.be, %.backedge ]
  %111 = zext i32 %110 to i64
  store i64 %111, ptr %3, align 8, !tbaa !20
  %112 = sub i32 32768, %109
  %113 = zext i32 %112 to i64
  store i64 %113, ptr %4, align 8, !tbaa !20
  %114 = load ptr, ptr %0, align 8, !tbaa !22
  %115 = zext i32 %109 to i64
  %116 = getelementptr inbounds i8, ptr %73, i64 %115
  %117 = call i32 @tinfl_decompress(ptr noundef nonnull %7, ptr noundef %114, ptr noundef nonnull %3, ptr noundef nonnull %73, ptr noundef nonnull %116, ptr noundef nonnull %4, i32 noundef %spec.select140)
  store i32 %117, ptr %19, align 4, !tbaa !18
  %118 = load i64, ptr %3, align 8, !tbaa !20
  %119 = load ptr, ptr %0, align 8, !tbaa !22
  %120 = and i64 %118, 4294967295
  %121 = getelementptr inbounds i8, ptr %119, i64 %120
  store ptr %121, ptr %0, align 8, !tbaa !22
  %122 = trunc i64 %118 to i32
  %123 = load i32, ptr %15, align 8, !tbaa !16
  %124 = sub i32 %123, %122
  store i32 %124, ptr %15, align 8, !tbaa !16
  %125 = load i64, ptr %74, align 8, !tbaa !24
  %126 = add i64 %125, %120
  store i64 %126, ptr %74, align 8, !tbaa !24
  %127 = load i32, ptr %75, align 4, !tbaa !25
  %128 = zext i32 %127 to i64
  store i64 %128, ptr %76, align 8, !tbaa !26
  %129 = load i64, ptr %4, align 8, !tbaa !20
  %130 = trunc i64 %129 to i32
  store i32 %130, ptr %70, align 4, !tbaa !28
  %131 = load i32, ptr %77, align 8, !tbaa !21
  %.141 = call i32 @llvm.umin.i32(i32 %131, i32 %130)
  %132 = load ptr, ptr %78, align 8, !tbaa !23
  %133 = load i32, ptr %72, align 8, !tbaa !29
  %134 = zext i32 %133 to i64
  %135 = getelementptr inbounds i8, ptr %73, i64 %134
  %136 = zext i32 %.141 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %132, ptr nonnull align 1 %135, i64 %136, i1 false)
  %137 = load ptr, ptr %78, align 8, !tbaa !23
  %138 = getelementptr inbounds i8, ptr %137, i64 %136
  store ptr %138, ptr %78, align 8, !tbaa !23
  %139 = load i32, ptr %77, align 8, !tbaa !21
  %140 = sub i32 %139, %.141
  store i32 %140, ptr %77, align 8, !tbaa !21
  %141 = load i64, ptr %79, align 8, !tbaa !27
  %142 = add i64 %141, %136
  store i64 %142, ptr %79, align 8, !tbaa !27
  %143 = load i32, ptr %70, align 4, !tbaa !28
  %144 = sub i32 %143, %.141
  store i32 %144, ptr %70, align 4, !tbaa !28
  %145 = load i32, ptr %72, align 8, !tbaa !29
  %146 = add i32 %145, %.141
  %147 = and i32 %146, 32767
  store i32 %147, ptr %72, align 8, !tbaa !29
  %148 = icmp slt i32 %117, 0
  br i1 %148, label %.loopexit, label %149

149:                                              ; preds = %108
  %150 = icmp ne i32 %117, 1
  %or.cond9 = select i1 %150, i1 true, i1 %80
  br i1 %or.cond9, label %151, label %.loopexit

151:                                              ; preds = %149
  %152 = icmp eq i32 %117, 0
  br i1 %27, label %153, label %157

153:                                              ; preds = %151
  br i1 %152, label %154, label %156

154:                                              ; preds = %153
  %.not137 = icmp eq i32 %143, %.141
  %155 = select i1 %.not137, i32 1, i32 -5
  br label %.loopexit

156:                                              ; preds = %153
  %.not136 = icmp eq i32 %139, %.141
  br i1 %.not136, label %.loopexit, label %._crit_edge

._crit_edge:                                      ; preds = %156
  %.pre.pre = load i32, ptr %15, align 8, !tbaa !16
  br label %.backedge

.backedge:                                        ; preds = %._crit_edge, %158
  %.be = phi i32 [ %.pre.pre, %._crit_edge ], [ %159, %158 ]
  br label %108, !llvm.loop !30

157:                                              ; preds = %151
  br i1 %152, label %.critedge, label %158

158:                                              ; preds = %157
  %159 = load i32, ptr %15, align 8, !tbaa !16
  %.not132 = icmp ne i32 %159, 0
  %.not133 = icmp ne i32 %139, %.141
  %or.cond.not143 = select i1 %.not132, i1 %.not133, i1 false
  %.not134 = icmp eq i32 %143, %.141
  %or.cond142 = select i1 %or.cond.not143, i1 %.not134, i1 false
  br i1 %or.cond142, label %.backedge, label %.loopexit

.critedge:                                        ; preds = %157
  %.not135 = icmp eq i32 %143, %.141
  %160 = zext i1 %.not135 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %158, %156, %149, %108, %.critedge, %81, %106, %66, %31, %22, %11, %8, %2, %5, %154, %67
  %.0 = phi i32 [ -5, %67 ], [ %155, %154 ], [ -2, %5 ], [ -2, %2 ], [ -2, %8 ], [ -3, %11 ], [ -2, %22 ], [ -3, %31 ], [ 1, %66 ], [ 0, %81 ], [ %107, %106 ], [ %160, %.critedge ], [ 0, %158 ], [ -5, %156 ], [ -5, %149 ], [ -3, %108 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #4
  ret i32 %.0
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local i32 @tinfl_decompress(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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, !7, i64 56}
!6 = !{!"_ZTS11mz_stream_s", !7, i64 0, !10, i64 8, !11, i64 16, !7, i64 24, !10, i64 32, !11, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !10, i64 88, !11, i64 96, !11, i64 104}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!13, !10, i64 11016}
!13 = !{!"_ZTS13inflate_state", !14, i64 0, !10, i64 11000, !10, i64 11004, !10, i64 11008, !10, i64 11012, !10, i64 11016, !8, i64 11020, !15, i64 43788}
!14 = !{!"_ZTS22tinfl_decompressor_tag", !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, !8, i64 44, !11, i64 56, !11, i64 64, !8, i64 72, !8, i64 10536, !8, i64 10540}
!15 = !{!"_ZTS12tinfl_status", !8, i64 0}
!16 = !{!6, !10, i64 8}
!17 = !{!13, !10, i64 11008}
!18 = !{!13, !15, i64 43788}
!19 = !{!13, !10, i64 11012}
!20 = !{!11, !11, i64 0}
!21 = !{!6, !10, i64 32}
!22 = !{!6, !7, i64 0}
!23 = !{!6, !7, i64 24}
!24 = !{!6, !11, i64 16}
!25 = !{!13, !10, i64 28}
!26 = !{!6, !11, i64 96}
!27 = !{!6, !11, i64 40}
!28 = !{!13, !10, i64 11004}
!29 = !{!13, !10, i64 11000}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass