; LLVM IR from itchio/go-brotli :: dec (decode)

; 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.BrotliDecoderStateStruct = type { i32, i32, %struct.BrotliBitReader, ptr, ptr, ptr, %union.anon, i32, i32, i32, i32, i32, i32, i32, [4 x i32], i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.HuffmanTreeGroup, %struct.HuffmanTreeGroup, %struct.HuffmanTreeGroup, ptr, ptr, i32, i32, i32, i32, [3 x i32], [3 x i32], [6 x i32], i32, i32, i32, i32, ptr, ptr, i8, i32, i32, i32, i32, i64, i64, i32, i32, i32, [32 x %struct.HuffmanCode], ptr, [720 x i16], [32 x i32], [18 x i8], [16 x i16], i32, ptr, i32, i32, i32, [646 x %struct.HuffmanCode], i32, [65 x i32], i32, i32, i32, i32, i32, i32, i32, i16, i32, i32, i32, ptr, ptr, ptr, [8 x i32] }
%struct.BrotliBitReader = type { i64, i32, ptr, i64 }
%union.anon = type { i64 }
%struct.HuffmanTreeGroup = type { ptr, ptr, i16, i16 }
%struct.HuffmanCode = type { i8, 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: nounwind uwtable
define dso_local i32 @BrotliDecoderDecompressStream(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #1 {
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store ptr %2, ptr %10, align 8, !tbaa !5
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 1, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %26 = load ptr, ptr %8, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %26, i32 0, i32 2
  store ptr %27, ptr %15, align 8, !tbaa !5
  %28 = load ptr, ptr %13, align 8, !tbaa !5
  %29 = icmp ne ptr %28, null
  br i1 %29, label %30, label %35

30:                                               ; preds = %6
  %31 = load ptr, ptr %8, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %31, i32 0, i32 48
  %33 = load i64, ptr %32, align 8, !tbaa !11
  %34 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 %33, ptr %34, align 8, !tbaa !17
  br label %35

35:                                               ; preds = %30, %6
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %36, i32 0, i32 15
  %38 = load i32, ptr %37, align 4, !tbaa !18
  %39 = icmp slt i32 %38, 0
  br i1 %39, label %40, label %41

40:                                               ; preds = %35
  store i32 0, ptr %7, align 4
  store i32 1, ptr %16, align 4
  br label %856

41:                                               ; preds = %35
  %42 = load ptr, ptr %11, align 8, !tbaa !5
  %43 = load i64, ptr %42, align 8, !tbaa !17
  %44 = icmp ne i64 %43, 0
  br i1 %44, label %45, label %55

45:                                               ; preds = %41
  %46 = load ptr, ptr %12, align 8, !tbaa !5
  %47 = icmp ne ptr %46, null
  br i1 %47, label %48, label %52

48:                                               ; preds = %45
  %49 = load ptr, ptr %12, align 8, !tbaa !5
  %50 = load ptr, ptr %49, align 8, !tbaa !5
  %51 = icmp ne ptr %50, null
  br i1 %51, label %55, label %52

52:                                               ; preds = %48, %45
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = call i32 @SaveErrorCode(ptr noundef %53, i32 noundef -20)
  store i32 %54, ptr %7, align 4
  store i32 1, ptr %16, align 4
  br label %856

55:                                               ; preds = %48, %41
  %56 = load ptr, ptr %11, align 8, !tbaa !5
  %57 = load i64, ptr %56, align 8, !tbaa !17
  %58 = icmp ne i64 %57, 0
  br i1 %58, label %60, label %59

59:                                               ; preds = %55
  store ptr null, ptr %12, align 8, !tbaa !5
  br label %60

60:                                               ; preds = %59, %55
  %61 = load ptr, ptr %8, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %61, i32 0, i32 7
  %63 = load i32, ptr %62, align 8, !tbaa !19
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %65, label %74

65:                                               ; preds = %60
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = load i64, ptr %66, align 8, !tbaa !17
  %68 = load ptr, ptr %15, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.BrotliBitReader, ptr %68, i32 0, i32 3
  store i64 %67, ptr %69, align 8, !tbaa !20
  %70 = load ptr, ptr %10, align 8, !tbaa !5
  %71 = load ptr, ptr %70, align 8, !tbaa !5
  %72 = load ptr, ptr %15, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.BrotliBitReader, ptr %72, i32 0, i32 2
  store ptr %71, ptr %73, align 8, !tbaa !21
  br label %80

74:                                               ; preds = %60
  store i32 2, ptr %14, align 4, !tbaa !9
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %75, i32 0, i32 6
  %77 = getelementptr inbounds [8 x i8], ptr %76, i64 0, i64 0
  %78 = load ptr, ptr %15, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.BrotliBitReader, ptr %78, i32 0, i32 2
  store ptr %77, ptr %79, align 8, !tbaa !21
  br label %80

80:                                               ; preds = %74, %65
  br label %81

81:                                               ; preds = %851, %131, %116, %80
  %82 = load i32, ptr %14, align 4, !tbaa !9
  %83 = icmp ne i32 %82, 1
  br i1 %83, label %84, label %214

84:                                               ; preds = %81
  %85 = load i32, ptr %14, align 4, !tbaa !9
  %86 = icmp eq i32 %85, 2
  br i1 %86, label %87, label %195

87:                                               ; preds = %84
  %88 = load ptr, ptr %8, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %88, i32 0, i32 17
  %90 = load ptr, ptr %89, align 8, !tbaa !22
  %91 = icmp ne ptr %90, null
  br i1 %91, label %92, label %106

92:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %93 = load ptr, ptr %8, align 8, !tbaa !5
  %94 = load ptr, ptr %11, align 8, !tbaa !5
  %95 = load ptr, ptr %12, align 8, !tbaa !5
  %96 = load ptr, ptr %13, align 8, !tbaa !5
  %97 = call i32 @WriteRingBuffer(ptr noundef %93, ptr noundef %94, ptr noundef %95, ptr noundef %96, i32 noundef 1)
  store i32 %97, ptr %17, align 4, !tbaa !9
  %98 = load i32, ptr %17, align 4, !tbaa !9
  %99 = icmp slt i32 %98, 0
  br i1 %99, label %100, label %102

100:                                              ; preds = %92
  %101 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %101, ptr %14, align 4, !tbaa !9
  store i32 2, ptr %16, align 4
  br label %103

102:                                              ; preds = %92
  store i32 0, ptr %16, align 4
  br label %103

103:                                              ; preds = %102, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  %104 = load i32, ptr %16, align 4
  switch i32 %104, label %858 [
    i32 0, label %105
    i32 2, label %852
  ]

105:                                              ; preds = %103
  br label %106

106:                                              ; preds = %105, %87
  %107 = load ptr, ptr %8, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %107, i32 0, i32 7
  %109 = load i32, ptr %108, align 8, !tbaa !19
  %110 = icmp ne i32 %109, 0
  br i1 %110, label %111, label %160

111:                                              ; preds = %106
  %112 = load ptr, ptr %15, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.BrotliBitReader, ptr %112, i32 0, i32 3
  %114 = load i64, ptr %113, align 8, !tbaa !20
  %115 = icmp eq i64 %114, 0
  br i1 %115, label %116, label %127

116:                                              ; preds = %111
  %117 = load ptr, ptr %8, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %117, i32 0, i32 7
  store i32 0, ptr %118, align 8, !tbaa !19
  store i32 1, ptr %14, align 4, !tbaa !9
  %119 = load ptr, ptr %9, align 8, !tbaa !5
  %120 = load i64, ptr %119, align 8, !tbaa !17
  %121 = load ptr, ptr %15, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.BrotliBitReader, ptr %121, i32 0, i32 3
  store i64 %120, ptr %122, align 8, !tbaa !20
  %123 = load ptr, ptr %10, align 8, !tbaa !5
  %124 = load ptr, ptr %123, align 8, !tbaa !5
  %125 = load ptr, ptr %15, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.BrotliBitReader, ptr %125, i32 0, i32 2
  store ptr %124, ptr %126, align 8, !tbaa !21
  br label %81

127:                                              ; preds = %111
  %128 = load ptr, ptr %9, align 8, !tbaa !5
  %129 = load i64, ptr %128, align 8, !tbaa !17
  %130 = icmp ne i64 %129, 0
  br i1 %130, label %131, label %158

131:                                              ; preds = %127
  store i32 1, ptr %14, align 4, !tbaa !9
  %132 = load ptr, ptr %10, align 8, !tbaa !5
  %133 = load ptr, ptr %132, align 8, !tbaa !5
  %134 = load i8, ptr %133, align 1, !tbaa !23
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %135, i32 0, i32 6
  %137 = load ptr, ptr %8, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %137, i32 0, i32 7
  %139 = load i32, ptr %138, align 8, !tbaa !19
  %140 = zext i32 %139 to i64
  %141 = getelementptr inbounds [8 x i8], ptr %136, i64 0, i64 %140
  store i8 %134, ptr %141, align 1, !tbaa !23
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %142, i32 0, i32 7
  %144 = load i32, ptr %143, align 8, !tbaa !19
  %145 = add i32 %144, 1
  store i32 %145, ptr %143, align 8, !tbaa !19
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %146, i32 0, i32 7
  %148 = load i32, ptr %147, align 8, !tbaa !19
  %149 = zext i32 %148 to i64
  %150 = load ptr, ptr %15, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.BrotliBitReader, ptr %150, i32 0, i32 3
  store i64 %149, ptr %151, align 8, !tbaa !20
  %152 = load ptr, ptr %10, align 8, !tbaa !5
  %153 = load ptr, ptr %152, align 8, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %153, i32 1
  store ptr %154, ptr %152, align 8, !tbaa !5
  %155 = load ptr, ptr %9, align 8, !tbaa !5
  %156 = load i64, ptr %155, align 8, !tbaa !17
  %157 = add i64 %156, -1
  store i64 %157, ptr %155, align 8, !tbaa !17
  br label %81

158:                                              ; preds = %127
  br label %159

159:                                              ; preds = %158
  br label %852

160:                                              ; preds = %106
  %161 = load ptr, ptr %15, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.BrotliBitReader, ptr %161, i32 0, i32 2
  %163 = load ptr, ptr %162, align 8, !tbaa !21
  %164 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %163, ptr %164, align 8, !tbaa !5
  %165 = load ptr, ptr %15, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.BrotliBitReader, ptr %165, i32 0, i32 3
  %167 = load i64, ptr %166, align 8, !tbaa !20
  %168 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %167, ptr %168, align 8, !tbaa !17
  br label %169

169:                                              ; preds = %173, %160
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = load i64, ptr %170, align 8, !tbaa !17
  %172 = icmp ne i64 %171, 0
  br i1 %172, label %173, label %194

173:                                              ; preds = %169
  %174 = load ptr, ptr %10, align 8, !tbaa !5
  %175 = load ptr, ptr %174, align 8, !tbaa !5
  %176 = load i8, ptr %175, align 1, !tbaa !23
  %177 = load ptr, ptr %8, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %177, i32 0, i32 6
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %179, i32 0, i32 7
  %181 = load i32, ptr %180, align 8, !tbaa !19
  %182 = zext i32 %181 to i64
  %183 = getelementptr inbounds [8 x i8], ptr %178, i64 0, i64 %182
  store i8 %176, ptr %183, align 1, !tbaa !23
  %184 = load ptr, ptr %8, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %184, i32 0, i32 7
  %186 = load i32, ptr %185, align 8, !tbaa !19
  %187 = add i32 %186, 1
  store i32 %187, ptr %185, align 8, !tbaa !19
  %188 = load ptr, ptr %10, align 8, !tbaa !5
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = getelementptr inbounds i8, ptr %189, i32 1
  store ptr %190, ptr %188, align 8, !tbaa !5
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = load i64, ptr %191, align 8, !tbaa !17
  %193 = add i64 %192, -1
  store i64 %193, ptr %191, align 8, !tbaa !17
  br label %169, !llvm.loop !24

194:                                              ; preds = %169
  br label %852

195:                                              ; preds = %84
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %196, i32 0, i32 7
  %198 = load i32, ptr %197, align 8, !tbaa !19
  %199 = icmp ne i32 %198, 0
  br i1 %199, label %200, label %203

200:                                              ; preds = %195
  %201 = load ptr, ptr %8, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %201, i32 0, i32 7
  store i32 0, ptr %202, align 8, !tbaa !19
  br label %213

203:                                              ; preds = %195
  %204 = load ptr, ptr %15, align 8, !tbaa !5
  call void @BrotliBitReaderUnload(ptr noundef %204)
  %205 = load ptr, ptr %15, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.BrotliBitReader, ptr %205, i32 0, i32 3
  %207 = load i64, ptr %206, align 8, !tbaa !20
  %208 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %207, ptr %208, align 8, !tbaa !17
  %209 = load ptr, ptr %15, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.BrotliBitReader, ptr %209, i32 0, i32 2
  %211 = load ptr, ptr %210, align 8, !tbaa !21
  %212 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %211, ptr %212, align 8, !tbaa !5
  br label %213

213:                                              ; preds = %203, %200
  br label %852

214:                                              ; preds = %81
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %215, i32 0, i32 0
  %217 = load i32, ptr %216, align 8, !tbaa !26
  switch i32 %217, label %851 [
    i32 0, label %218
    i32 1, label %264
    i32 2, label %268
    i32 9, label %333
    i32 10, label %345
    i32 15, label %372
    i32 16, label %421
    i32 17, label %452
    i32 18, label %474
    i32 3, label %505
    i32 4, label %559
    i32 19, label %568
    i32 20, label %587
    i32 21, label %653
    i32 5, label %711
    i32 6, label %711
    i32 7, label %711
    i32 8, label %711
    i32 11, label %720
    i32 13, label %720
    i32 14, label %720
    i32 12, label %792
    i32 22, label %832
  ]

218:                                              ; preds = %214
  %219 = load ptr, ptr %15, align 8, !tbaa !5
  %220 = call i32 @BrotliWarmupBitReader(ptr noundef %219)
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %223, label %222

222:                                              ; preds = %218
  store i32 2, ptr %14, align 4, !tbaa !9
  br label %851

223:                                              ; preds = %218
  %224 = load ptr, ptr %15, align 8, !tbaa !5
  %225 = call i32 @DecodeWindowBits(ptr noundef %224)
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %226, i32 0, i32 74
  store i32 %225, ptr %227, align 4, !tbaa !27
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %228, i32 0, i32 74
  %230 = load i32, ptr %229, align 4, !tbaa !27
  %231 = icmp eq i32 %230, 9
  br i1 %231, label %232, label %233

232:                                              ; preds = %223
  store i32 -13, ptr %14, align 4, !tbaa !9
  br label %851

233:                                              ; preds = %223
  %234 = load ptr, ptr %8, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %234, i32 0, i32 74
  %236 = load i32, ptr %235, align 4, !tbaa !27
  %237 = shl i32 1, %236
  %238 = sub nsw i32 %237, 16
  %239 = load ptr, ptr %8, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %239, i32 0, i32 9
  store i32 %238, ptr %240, align 8, !tbaa !28
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %241, i32 0, i32 3
  %243 = load ptr, ptr %242, align 8, !tbaa !29
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %244, i32 0, i32 5
  %246 = load ptr, ptr %245, align 8, !tbaa !30
  %247 = call ptr %243(ptr noundef %246, i64 noundef 12336)
  %248 = load ptr, ptr %8, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %248, i32 0, i32 27
  store ptr %247, ptr %249, align 8, !tbaa !31
  %250 = load ptr, ptr %8, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %250, i32 0, i32 27
  %252 = load ptr, ptr %251, align 8, !tbaa !31
  %253 = icmp eq ptr %252, null
  br i1 %253, label %254, label %255

254:                                              ; preds = %233
  store i32 -30, ptr %14, align 4, !tbaa !9
  br label %851

255:                                              ; preds = %233
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %256, i32 0, i32 27
  %258 = load ptr, ptr %257, align 8, !tbaa !31
  %259 = getelementptr inbounds %struct.HuffmanCode, ptr %258, i64 1896
  %260 = load ptr, ptr %8, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %260, i32 0, i32 28
  store ptr %259, ptr %261, align 8, !tbaa !32
  %262 = load ptr, ptr %8, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %262, i32 0, i32 0
  store i32 1, ptr %263, align 8, !tbaa !26
  br label %264

264:                                              ; preds = %255, %214
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BrotliDecoderStateMetablockBegin(ptr noundef %265)
  %266 = load ptr, ptr %8, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %266, i32 0, i32 0
  store i32 2, ptr %267, align 8, !tbaa !26
  br label %268

268:                                              ; preds = %264, %214
  %269 = load ptr, ptr %8, align 8, !tbaa !5
  %270 = load ptr, ptr %15, align 8, !tbaa !5
  %271 = call i32 @DecodeMetaBlockLength(ptr noundef %269, ptr noundef %270)
  store i32 %271, ptr %14, align 4, !tbaa !9
  %272 = load i32, ptr %14, align 4, !tbaa !9
  %273 = icmp ne i32 %272, 1
  br i1 %273, label %274, label %275

274:                                              ; preds = %268
  br label %851

275:                                              ; preds = %268
  %276 = load ptr, ptr %8, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %276, i32 0, i32 73
  %278 = load i16, ptr %277, align 8
  %279 = lshr i16 %278, 2
  %280 = and i16 %279, 1
  %281 = zext i16 %280 to i32
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %291, label %283

283:                                              ; preds = %275
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %284, i32 0, i32 73
  %286 = load i16, ptr %285, align 8
  %287 = lshr i16 %286, 1
  %288 = and i16 %287, 1
  %289 = zext i16 %288 to i32
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %297

291:                                              ; preds = %283, %275
  %292 = load ptr, ptr %15, align 8, !tbaa !5
  %293 = call i32 @BrotliJumpToByteBoundary(ptr noundef %292)
  %294 = icmp ne i32 %293, 0
  br i1 %294, label %296, label %295

295:                                              ; preds = %291
  store i32 -14, ptr %14, align 4, !tbaa !9
  br label %851

296:                                              ; preds = %291
  br label %297

297:                                              ; preds = %296, %283
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %298, i32 0, i32 73
  %300 = load i16, ptr %299, align 8
  %301 = lshr i16 %300, 2
  %302 = and i16 %301, 1
  %303 = zext i16 %302 to i32
  %304 = icmp ne i32 %303, 0
  br i1 %304, label %305, label %308

305:                                              ; preds = %297
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %306, i32 0, i32 0
  store i32 10, ptr %307, align 8, !tbaa !26
  br label %851

308:                                              ; preds = %297
  %309 = load ptr, ptr %8, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %309, i32 0, i32 31
  %311 = load i32, ptr %310, align 8, !tbaa !33
  %312 = icmp eq i32 %311, 0
  br i1 %312, label %313, label %316

313:                                              ; preds = %308
  %314 = load ptr, ptr %8, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %314, i32 0, i32 0
  store i32 12, ptr %315, align 8, !tbaa !26
  br label %851

316:                                              ; preds = %308
  %317 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BrotliCalculateRingBufferSize(ptr noundef %317)
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %318, i32 0, i32 73
  %320 = load i16, ptr %319, align 8
  %321 = lshr i16 %320, 1
  %322 = and i16 %321, 1
  %323 = zext i16 %322 to i32
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %325, label %328

325:                                              ; preds = %316
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %326, i32 0, i32 0
  store i32 9, ptr %327, align 8, !tbaa !26
  br label %851

328:                                              ; preds = %316
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %329, i32 0, i32 1
  store i32 0, ptr %330, align 4, !tbaa !34
  %331 = load ptr, ptr %8, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %331, i32 0, i32 0
  store i32 15, ptr %332, align 8, !tbaa !26
  br label %851

333:                                              ; preds = %214
  %334 = load ptr, ptr %11, align 8, !tbaa !5
  %335 = load ptr, ptr %12, align 8, !tbaa !5
  %336 = load ptr, ptr %13, align 8, !tbaa !5
  %337 = load ptr, ptr %8, align 8, !tbaa !5
  %338 = call i32 @CopyUncompressedBlockToOutput(ptr noundef %334, ptr noundef %335, ptr noundef %336, ptr noundef %337)
  store i32 %338, ptr %14, align 4, !tbaa !9
  %339 = load i32, ptr %14, align 4, !tbaa !9
  %340 = icmp ne i32 %339, 1
  br i1 %340, label %341, label %342

341:                                              ; preds = %333
  br label %851

342:                                              ; preds = %333
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %343, i32 0, i32 0
  store i32 12, ptr %344, align 8, !tbaa !26
  br label %851

345:                                              ; preds = %214
  br label %346

346:                                              ; preds = %360, %345
  %347 = load ptr, ptr %8, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %347, i32 0, i32 31
  %349 = load i32, ptr %348, align 8, !tbaa !33
  %350 = icmp sgt i32 %349, 0
  br i1 %350, label %351, label %365

351:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %352 = load ptr, ptr %15, align 8, !tbaa !5
  %353 = call i32 @BrotliSafeReadBits(ptr noundef %352, i32 noundef 8, ptr noundef %18)
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %356, label %355

355:                                              ; preds = %351
  store i32 2, ptr %14, align 4, !tbaa !9
  store i32 7, ptr %16, align 4
  br label %357

356:                                              ; preds = %351
  store i32 0, ptr %16, align 4
  br label %357

357:                                              ; preds = %356, %355
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %358 = load i32, ptr %16, align 4
  switch i32 %358, label %858 [
    i32 0, label %359
    i32 7, label %365
  ]

359:                                              ; preds = %357
  br label %360

360:                                              ; preds = %359
  %361 = load ptr, ptr %8, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %361, i32 0, i32 31
  %363 = load i32, ptr %362, align 8, !tbaa !33
  %364 = add nsw i32 %363, -1
  store i32 %364, ptr %362, align 8, !tbaa !33
  br label %346, !llvm.loop !35

365:                                              ; preds = %357, %346
  %366 = load i32, ptr %14, align 4, !tbaa !9
  %367 = icmp eq i32 %366, 1
  br i1 %367, label %368, label %371

368:                                              ; preds = %365
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %369, i32 0, i32 0
  store i32 12, ptr %370, align 8, !tbaa !26
  br label %371

371:                                              ; preds = %368, %365
  br label %851

372:                                              ; preds = %214
  %373 = load ptr, ptr %8, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %373, i32 0, i32 1
  %375 = load i32, ptr %374, align 4, !tbaa !34
  %376 = icmp sge i32 %375, 3
  br i1 %376, label %377, label %380

377:                                              ; preds = %372
  %378 = load ptr, ptr %8, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %378, i32 0, i32 0
  store i32 3, ptr %379, align 8, !tbaa !26
  br label %851

380:                                              ; preds = %372
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = load ptr, ptr %15, align 8, !tbaa !5
  %383 = load ptr, ptr %8, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %383, i32 0, i32 34
  %385 = load ptr, ptr %8, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %385, i32 0, i32 1
  %387 = load i32, ptr %386, align 4, !tbaa !34
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds [3 x i32], ptr %384, i64 0, i64 %388
  %390 = call i32 @DecodeVarLenUint8(ptr noundef %381, ptr noundef %382, ptr noundef %389)
  store i32 %390, ptr %14, align 4, !tbaa !9
  %391 = load i32, ptr %14, align 4, !tbaa !9
  %392 = icmp ne i32 %391, 1
  br i1 %392, label %393, label %394

393:                                              ; preds = %380
  br label %851

394:                                              ; preds = %380
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %395, i32 0, i32 34
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %397, i32 0, i32 1
  %399 = load i32, ptr %398, align 4, !tbaa !34
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds [3 x i32], ptr %396, i64 0, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !9
  %403 = add i32 %402, 1
  store i32 %403, ptr %401, align 4, !tbaa !9
  %404 = load ptr, ptr %8, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %404, i32 0, i32 34
  %406 = load ptr, ptr %8, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %406, i32 0, i32 1
  %408 = load i32, ptr %407, align 4, !tbaa !34
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [3 x i32], ptr %405, i64 0, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !9
  %412 = icmp ult i32 %411, 2
  br i1 %412, label %413, label %418

413:                                              ; preds = %394
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %414, i32 0, i32 1
  %416 = load i32, ptr %415, align 4, !tbaa !34
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %415, align 4, !tbaa !34
  br label %851

418:                                              ; preds = %394
  %419 = load ptr, ptr %8, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %419, i32 0, i32 0
  store i32 16, ptr %420, align 8, !tbaa !26
  br label %421

421:                                              ; preds = %418, %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %422 = load ptr, ptr %8, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %422, i32 0, i32 1
  %424 = load i32, ptr %423, align 4, !tbaa !34
  %425 = mul nsw i32 %424, 632
  store i32 %425, ptr %19, align 4, !tbaa !9
  %426 = load ptr, ptr %8, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %426, i32 0, i32 34
  %428 = load ptr, ptr %8, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %428, i32 0, i32 1
  %430 = load i32, ptr %429, align 4, !tbaa !34
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds [3 x i32], ptr %427, i64 0, i64 %431
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = add i32 %433, 2
  %435 = load ptr, ptr %8, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %435, i32 0, i32 27
  %437 = load ptr, ptr %436, align 8, !tbaa !31
  %438 = load i32, ptr %19, align 4, !tbaa !9
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds %struct.HuffmanCode, ptr %437, i64 %439
  %441 = load ptr, ptr %8, align 8, !tbaa !5
  %442 = call i32 @ReadHuffmanCode(i32 noundef %434, ptr noundef %440, ptr noundef null, ptr noundef %441)
  store i32 %442, ptr %14, align 4, !tbaa !9
  %443 = load i32, ptr %14, align 4, !tbaa !9
  %444 = icmp ne i32 %443, 1
  br i1 %444, label %445, label %446

445:                                              ; preds = %421
  store i32 6, ptr %16, align 4
  br label %449

446:                                              ; preds = %421
  %447 = load ptr, ptr %8, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %447, i32 0, i32 0
  store i32 17, ptr %448, align 8, !tbaa !26
  store i32 0, ptr %16, align 4
  br label %449

449:                                              ; preds = %446, %445
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  %450 = load i32, ptr %16, align 4
  switch i32 %450, label %858 [
    i32 0, label %451
    i32 6, label %851
  ]

451:                                              ; preds = %449
  br label %452

452:                                              ; preds = %451, %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %453 = load ptr, ptr %8, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %453, i32 0, i32 1
  %455 = load i32, ptr %454, align 4, !tbaa !34
  %456 = mul nsw i32 %455, 396
  store i32 %456, ptr %20, align 4, !tbaa !9
  %457 = load ptr, ptr %8, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %457, i32 0, i32 28
  %459 = load ptr, ptr %458, align 8, !tbaa !32
  %460 = load i32, ptr %20, align 4, !tbaa !9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds %struct.HuffmanCode, ptr %459, i64 %461
  %463 = load ptr, ptr %8, align 8, !tbaa !5
  %464 = call i32 @ReadHuffmanCode(i32 noundef 26, ptr noundef %462, ptr noundef null, ptr noundef %463)
  store i32 %464, ptr %14, align 4, !tbaa !9
  %465 = load i32, ptr %14, align 4, !tbaa !9
  %466 = icmp ne i32 %465, 1
  br i1 %466, label %467, label %468

467:                                              ; preds = %452
  store i32 6, ptr %16, align 4
  br label %471

468:                                              ; preds = %452
  %469 = load ptr, ptr %8, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %469, i32 0, i32 0
  store i32 18, ptr %470, align 8, !tbaa !26
  store i32 0, ptr %16, align 4
  br label %471

471:                                              ; preds = %468, %467
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %472 = load i32, ptr %16, align 4
  switch i32 %472, label %858 [
    i32 0, label %473
    i32 6, label %851
  ]

473:                                              ; preds = %471
  br label %474

474:                                              ; preds = %473, %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %475 = load ptr, ptr %8, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %475, i32 0, i32 1
  %477 = load i32, ptr %476, align 4, !tbaa !34
  %478 = mul nsw i32 %477, 396
  store i32 %478, ptr %21, align 4, !tbaa !9
  %479 = load ptr, ptr %8, align 8, !tbaa !5
  %480 = load ptr, ptr %8, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %480, i32 0, i32 33
  %482 = load ptr, ptr %8, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %482, i32 0, i32 1
  %484 = load i32, ptr %483, align 4, !tbaa !34
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds [3 x i32], ptr %481, i64 0, i64 %485
  %487 = load ptr, ptr %8, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %487, i32 0, i32 28
  %489 = load ptr, ptr %488, align 8, !tbaa !32
  %490 = load i32, ptr %21, align 4, !tbaa !9
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds %struct.HuffmanCode, ptr %489, i64 %491
  %493 = load ptr, ptr %15, align 8, !tbaa !5
  %494 = call i32 @SafeReadBlockLength(ptr noundef %479, ptr noundef %486, ptr noundef %492, ptr noundef %493)
  %495 = icmp ne i32 %494, 0
  br i1 %495, label %497, label %496

496:                                              ; preds = %474
  store i32 2, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %16, align 4
  br label %504

497:                                              ; preds = %474
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %498, i32 0, i32 1
  %500 = load i32, ptr %499, align 4, !tbaa !34
  %501 = add nsw i32 %500, 1
  store i32 %501, ptr %499, align 4, !tbaa !34
  %502 = load ptr, ptr %8, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %502, i32 0, i32 0
  store i32 15, ptr %503, align 8, !tbaa !26
  store i32 6, ptr %16, align 4
  br label %504

504:                                              ; preds = %497, %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %851

505:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %506 = load ptr, ptr %15, align 8, !tbaa !5
  %507 = call i32 @BrotliSafeReadBits(ptr noundef %506, i32 noundef 6, ptr noundef %22)
  %508 = icmp ne i32 %507, 0
  br i1 %508, label %510, label %509

509:                                              ; preds = %505
  store i32 2, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %16, align 4
  br label %556

510:                                              ; preds = %505
  %511 = load i32, ptr %22, align 4, !tbaa !9
  %512 = call i32 @BitMask(i32 noundef 2)
  %513 = and i32 %511, %512
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %514, i32 0, i32 36
  store i32 %513, ptr %515, align 8, !tbaa !36
  %516 = load i32, ptr %22, align 4, !tbaa !9
  %517 = lshr i32 %516, 2
  store i32 %517, ptr %22, align 4, !tbaa !9
  %518 = load i32, ptr %22, align 4, !tbaa !9
  %519 = load ptr, ptr %8, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %519, i32 0, i32 36
  %521 = load i32, ptr %520, align 8, !tbaa !36
  %522 = shl i32 %518, %521
  %523 = add i32 16, %522
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %524, i32 0, i32 37
  store i32 %523, ptr %525, align 4, !tbaa !37
  %526 = load ptr, ptr %8, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %526, i32 0, i32 36
  %528 = load i32, ptr %527, align 8, !tbaa !36
  %529 = call i32 @BitMask(i32 noundef %528)
  %530 = load ptr, ptr %8, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %530, i32 0, i32 38
  store i32 %529, ptr %531, align 8, !tbaa !38
  %532 = load ptr, ptr %8, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %532, i32 0, i32 3
  %534 = load ptr, ptr %533, align 8, !tbaa !29
  %535 = load ptr, ptr %8, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %535, i32 0, i32 5
  %537 = load ptr, ptr %536, align 8, !tbaa !30
  %538 = load ptr, ptr %8, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %538, i32 0, i32 34
  %540 = getelementptr inbounds [3 x i32], ptr %539, i64 0, i64 0
  %541 = load i32, ptr %540, align 4, !tbaa !9
  %542 = zext i32 %541 to i64
  %543 = call ptr %534(ptr noundef %537, i64 noundef %542)
  %544 = load ptr, ptr %8, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %544, i32 0, i32 78
  store ptr %543, ptr %545, align 8, !tbaa !39
  %546 = load ptr, ptr %8, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %546, i32 0, i32 78
  %548 = load ptr, ptr %547, align 8, !tbaa !39
  %549 = icmp eq ptr %548, null
  br i1 %549, label %550, label %551

550:                                              ; preds = %510
  store i32 -21, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %16, align 4
  br label %556

551:                                              ; preds = %510
  %552 = load ptr, ptr %8, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %552, i32 0, i32 1
  store i32 0, ptr %553, align 4, !tbaa !34
  %554 = load ptr, ptr %8, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %554, i32 0, i32 0
  store i32 4, ptr %555, align 8, !tbaa !26
  store i32 0, ptr %16, align 4
  br label %556

556:                                              ; preds = %551, %550, %509
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  %557 = load i32, ptr %16, align 4
  switch i32 %557, label %858 [
    i32 0, label %558
    i32 6, label %851
  ]

558:                                              ; preds = %556
  br label %559

559:                                              ; preds = %558, %214
  %560 = load ptr, ptr %8, align 8, !tbaa !5
  %561 = call i32 @ReadContextModes(ptr noundef %560)
  store i32 %561, ptr %14, align 4, !tbaa !9
  %562 = load i32, ptr %14, align 4, !tbaa !9
  %563 = icmp ne i32 %562, 1
  br i1 %563, label %564, label %565

564:                                              ; preds = %559
  br label %851

565:                                              ; preds = %559
  %566 = load ptr, ptr %8, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %566, i32 0, i32 0
  store i32 19, ptr %567, align 8, !tbaa !26
  br label %568

568:                                              ; preds = %565, %214
  %569 = load ptr, ptr %8, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %569, i32 0, i32 34
  %571 = getelementptr inbounds [3 x i32], ptr %570, i64 0, i64 0
  %572 = load i32, ptr %571, align 4, !tbaa !9
  %573 = shl i32 %572, 6
  %574 = load ptr, ptr %8, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %574, i32 0, i32 76
  %576 = load ptr, ptr %8, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %576, i32 0, i32 77
  %578 = load ptr, ptr %8, align 8, !tbaa !5
  %579 = call i32 @DecodeContextMap(i32 noundef %573, ptr noundef %575, ptr noundef %577, ptr noundef %578)
  store i32 %579, ptr %14, align 4, !tbaa !9
  %580 = load i32, ptr %14, align 4, !tbaa !9
  %581 = icmp ne i32 %580, 1
  br i1 %581, label %582, label %583

582:                                              ; preds = %568
  br label %851

583:                                              ; preds = %568
  %584 = load ptr, ptr %8, align 8, !tbaa !5
  call void @DetectTrivialLiteralBlockTypes(ptr noundef %584)
  %585 = load ptr, ptr %8, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %585, i32 0, i32 0
  store i32 20, ptr %586, align 8, !tbaa !26
  br label %587

587:                                              ; preds = %583, %214
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %588 = load ptr, ptr %8, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %588, i32 0, i32 37
  %590 = load i32, ptr %589, align 4, !tbaa !37
  %591 = load ptr, ptr %8, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %591, i32 0, i32 36
  %593 = load i32, ptr %592, align 8, !tbaa !36
  %594 = shl i32 48, %593
  %595 = add i32 %590, %594
  store i32 %595, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 1, ptr %24, align 4, !tbaa !9
  %596 = load ptr, ptr %8, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %596, i32 0, i32 34
  %598 = getelementptr inbounds [3 x i32], ptr %597, i64 0, i64 2
  %599 = load i32, ptr %598, align 4, !tbaa !9
  %600 = shl i32 %599, 2
  %601 = load ptr, ptr %8, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %601, i32 0, i32 39
  %603 = load ptr, ptr %8, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %603, i32 0, i32 40
  %605 = load ptr, ptr %8, align 8, !tbaa !5
  %606 = call i32 @DecodeContextMap(i32 noundef %600, ptr noundef %602, ptr noundef %604, ptr noundef %605)
  store i32 %606, ptr %14, align 4, !tbaa !9
  %607 = load i32, ptr %14, align 4, !tbaa !9
  %608 = icmp ne i32 %607, 1
  br i1 %608, label %609, label %610

609:                                              ; preds = %587
  store i32 6, ptr %16, align 4
  br label %646

610:                                              ; preds = %587
  %611 = load ptr, ptr %8, align 8, !tbaa !5
  %612 = load ptr, ptr %8, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %612, i32 0, i32 24
  %614 = load ptr, ptr %8, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %614, i32 0, i32 76
  %616 = load i32, ptr %615, align 4, !tbaa !40
  %617 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef %611, ptr noundef %613, i32 noundef 256, i32 noundef %616)
  %618 = load i32, ptr %24, align 4, !tbaa !9
  %619 = and i32 %618, %617
  store i32 %619, ptr %24, align 4, !tbaa !9
  %620 = load ptr, ptr %8, align 8, !tbaa !5
  %621 = load ptr, ptr %8, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %621, i32 0, i32 25
  %623 = load ptr, ptr %8, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %623, i32 0, i32 34
  %625 = getelementptr inbounds [3 x i32], ptr %624, i64 0, i64 1
  %626 = load i32, ptr %625, align 4, !tbaa !9
  %627 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef %620, ptr noundef %622, i32 noundef 704, i32 noundef %626)
  %628 = load i32, ptr %24, align 4, !tbaa !9
  %629 = and i32 %628, %627
  store i32 %629, ptr %24, align 4, !tbaa !9
  %630 = load ptr, ptr %8, align 8, !tbaa !5
  %631 = load ptr, ptr %8, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %631, i32 0, i32 26
  %633 = load i32, ptr %23, align 4, !tbaa !9
  %634 = load ptr, ptr %8, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %634, i32 0, i32 39
  %636 = load i32, ptr %635, align 4, !tbaa !41
  %637 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef %630, ptr noundef %632, i32 noundef %633, i32 noundef %636)
  %638 = load i32, ptr %24, align 4, !tbaa !9
  %639 = and i32 %638, %637
  store i32 %639, ptr %24, align 4, !tbaa !9
  %640 = load i32, ptr %24, align 4, !tbaa !9
  %641 = icmp ne i32 %640, 0
  br i1 %641, label %645, label %642

642:                                              ; preds = %610
  %643 = load ptr, ptr %8, align 8, !tbaa !5
  %644 = call i32 @SaveErrorCode(ptr noundef %643, i32 noundef -22)
  store i32 %644, ptr %7, align 4
  store i32 1, ptr %16, align 4
  br label %646

645:                                              ; preds = %610
  store i32 0, ptr %16, align 4
  br label %646

646:                                              ; preds = %645, %642, %609
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  %647 = load i32, ptr %16, align 4
  switch i32 %647, label %856 [
    i32 0, label %648
    i32 6, label %851
  ]

648:                                              ; preds = %646
  %649 = load ptr, ptr %8, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %649, i32 0, i32 1
  store i32 0, ptr %650, align 4, !tbaa !34
  %651 = load ptr, ptr %8, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %651, i32 0, i32 0
  store i32 21, ptr %652, align 8, !tbaa !26
  br label %653

653:                                              ; preds = %648, %214
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  store ptr null, ptr %25, align 8, !tbaa !5
  %654 = load ptr, ptr %8, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %654, i32 0, i32 1
  %656 = load i32, ptr %655, align 4, !tbaa !34
  switch i32 %656, label %666 [
    i32 0, label %657
    i32 1, label %660
    i32 2, label %663
  ]

657:                                              ; preds = %653
  %658 = load ptr, ptr %8, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %658, i32 0, i32 24
  store ptr %659, ptr %25, align 8, !tbaa !5
  br label %669

660:                                              ; preds = %653
  %661 = load ptr, ptr %8, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %661, i32 0, i32 25
  store ptr %662, ptr %25, align 8, !tbaa !5
  br label %669

663:                                              ; preds = %653
  %664 = load ptr, ptr %8, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %664, i32 0, i32 26
  store ptr %665, ptr %25, align 8, !tbaa !5
  br label %669

666:                                              ; preds = %653
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = call i32 @SaveErrorCode(ptr noundef %667, i32 noundef -31)
  store i32 %668, ptr %7, align 4
  store i32 1, ptr %16, align 4
  br label %673

669:                                              ; preds = %663, %660, %657
  %670 = load ptr, ptr %25, align 8, !tbaa !5
  %671 = load ptr, ptr %8, align 8, !tbaa !5
  %672 = call i32 @HuffmanTreeGroupDecode(ptr noundef %670, ptr noundef %671)
  store i32 %672, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %16, align 4
  br label %673

673:                                              ; preds = %669, %666
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  %674 = load i32, ptr %16, align 4
  switch i32 %674, label %856 [
    i32 0, label %675
  ]

675:                                              ; preds = %673
  %676 = load i32, ptr %14, align 4, !tbaa !9
  %677 = icmp ne i32 %676, 1
  br i1 %677, label %678, label %679

678:                                              ; preds = %675
  br label %851

679:                                              ; preds = %675
  %680 = load ptr, ptr %8, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %680, i32 0, i32 1
  %682 = load i32, ptr %681, align 4, !tbaa !34
  %683 = add nsw i32 %682, 1
  store i32 %683, ptr %681, align 4, !tbaa !34
  %684 = load ptr, ptr %8, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %684, i32 0, i32 1
  %686 = load i32, ptr %685, align 4, !tbaa !34
  %687 = icmp sge i32 %686, 3
  br i1 %687, label %688, label %710

688:                                              ; preds = %679
  %689 = load ptr, ptr %8, align 8, !tbaa !5
  call void @PrepareLiteralDecoding(ptr noundef %689)
  %690 = load ptr, ptr %8, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %690, i32 0, i32 40
  %692 = load ptr, ptr %691, align 8, !tbaa !42
  %693 = load ptr, ptr %8, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %693, i32 0, i32 23
  store ptr %692, ptr %694, align 8, !tbaa !43
  %695 = load ptr, ptr %8, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %695, i32 0, i32 25
  %697 = getelementptr inbounds %struct.HuffmanTreeGroup, ptr %696, i32 0, i32 0
  %698 = load ptr, ptr %697, align 8, !tbaa !44
  %699 = getelementptr inbounds ptr, ptr %698, i64 0
  %700 = load ptr, ptr %699, align 8, !tbaa !5
  %701 = load ptr, ptr %8, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %701, i32 0, i32 19
  store ptr %700, ptr %702, align 8, !tbaa !45
  %703 = load ptr, ptr %8, align 8, !tbaa !5
  %704 = call i32 @BrotliEnsureRingBuffer(ptr noundef %703)
  %705 = icmp ne i32 %704, 0
  br i1 %705, label %707, label %706

706:                                              ; preds = %688
  store i32 -27, ptr %14, align 4, !tbaa !9
  br label %851

707:                                              ; preds = %688
  %708 = load ptr, ptr %8, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %708, i32 0, i32 0
  store i32 5, ptr %709, align 8, !tbaa !26
  br label %710

710:                                              ; preds = %707, %679
  br label %851

711:                                              ; preds = %214, %214, %214, %214
  %712 = load ptr, ptr %8, align 8, !tbaa !5
  %713 = call i32 @ProcessCommands(ptr noundef %712)
  store i32 %713, ptr %14, align 4, !tbaa !9
  %714 = load i32, ptr %14, align 4, !tbaa !9
  %715 = icmp eq i32 %714, 2
  br i1 %715, label %716, label %719

716:                                              ; preds = %711
  %717 = load ptr, ptr %8, align 8, !tbaa !5
  %718 = call i32 @SafeProcessCommands(ptr noundef %717)
  store i32 %718, ptr %14, align 4, !tbaa !9
  br label %719

719:                                              ; preds = %716, %711
  br label %851

720:                                              ; preds = %214, %214, %214
  %721 = load ptr, ptr %8, align 8, !tbaa !5
  %722 = load ptr, ptr %11, align 8, !tbaa !5
  %723 = load ptr, ptr %12, align 8, !tbaa !5
  %724 = load ptr, ptr %13, align 8, !tbaa !5
  %725 = call i32 @WriteRingBuffer(ptr noundef %721, ptr noundef %722, ptr noundef %723, ptr noundef %724, i32 noundef 0)
  store i32 %725, ptr %14, align 4, !tbaa !9
  %726 = load i32, ptr %14, align 4, !tbaa !9
  %727 = icmp ne i32 %726, 1
  br i1 %727, label %728, label %729

728:                                              ; preds = %720
  br label %851

729:                                              ; preds = %720
  %730 = load ptr, ptr %8, align 8, !tbaa !5
  call void @WrapRingBuffer(ptr noundef %730)
  %731 = load ptr, ptr %8, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %731, i32 0, i32 11
  %733 = load i32, ptr %732, align 8, !tbaa !46
  %734 = load ptr, ptr %8, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %734, i32 0, i32 74
  %736 = load i32, ptr %735, align 4, !tbaa !27
  %737 = shl i32 1, %736
  %738 = icmp eq i32 %733, %737
  br i1 %738, label %739, label %745

739:                                              ; preds = %729
  %740 = load ptr, ptr %8, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %740, i32 0, i32 9
  %742 = load i32, ptr %741, align 8, !tbaa !28
  %743 = load ptr, ptr %8, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %743, i32 0, i32 10
  store i32 %742, ptr %744, align 4, !tbaa !47
  br label %745

745:                                              ; preds = %739, %729
  %746 = load ptr, ptr %8, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %746, i32 0, i32 0
  %748 = load i32, ptr %747, align 8, !tbaa !26
  %749 = icmp eq i32 %748, 13
  br i1 %749, label %750, label %762

750:                                              ; preds = %745
  %751 = load ptr, ptr %8, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %751, i32 0, i32 31
  %753 = load i32, ptr %752, align 8, !tbaa !33
  %754 = icmp eq i32 %753, 0
  br i1 %754, label %755, label %758

755:                                              ; preds = %750
  %756 = load ptr, ptr %8, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %756, i32 0, i32 0
  store i32 12, ptr %757, align 8, !tbaa !26
  br label %761

758:                                              ; preds = %750
  %759 = load ptr, ptr %8, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %759, i32 0, i32 0
  store i32 5, ptr %760, align 8, !tbaa !26
  br label %761

761:                                              ; preds = %758, %755
  br label %851

762:                                              ; preds = %745
  %763 = load ptr, ptr %8, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %763, i32 0, i32 0
  %765 = load i32, ptr %764, align 8, !tbaa !26
  %766 = icmp eq i32 %765, 14
  br i1 %766, label %767, label %770

767:                                              ; preds = %762
  %768 = load ptr, ptr %8, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %768, i32 0, i32 0
  store i32 8, ptr %769, align 8, !tbaa !26
  br label %790

770:                                              ; preds = %762
  %771 = load ptr, ptr %8, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %771, i32 0, i32 1
  %773 = load i32, ptr %772, align 4, !tbaa !34
  %774 = icmp eq i32 %773, 0
  br i1 %774, label %775, label %787

775:                                              ; preds = %770
  %776 = load ptr, ptr %8, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %776, i32 0, i32 31
  %778 = load i32, ptr %777, align 8, !tbaa !33
  %779 = icmp eq i32 %778, 0
  br i1 %779, label %780, label %783

780:                                              ; preds = %775
  %781 = load ptr, ptr %8, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %781, i32 0, i32 0
  store i32 12, ptr %782, align 8, !tbaa !26
  br label %786

783:                                              ; preds = %775
  %784 = load ptr, ptr %8, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %784, i32 0, i32 0
  store i32 7, ptr %785, align 8, !tbaa !26
  br label %786

786:                                              ; preds = %783, %780
  br label %851

787:                                              ; preds = %770
  %788 = load ptr, ptr %8, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %788, i32 0, i32 0
  store i32 6, ptr %789, align 8, !tbaa !26
  br label %790

790:                                              ; preds = %787, %767
  br label %791

791:                                              ; preds = %790
  br label %851

792:                                              ; preds = %214
  %793 = load ptr, ptr %8, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %793, i32 0, i32 31
  %795 = load i32, ptr %794, align 8, !tbaa !33
  %796 = icmp slt i32 %795, 0
  br i1 %796, label %797, label %798

797:                                              ; preds = %792
  store i32 -10, ptr %14, align 4, !tbaa !9
  br label %851

798:                                              ; preds = %792
  %799 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BrotliDecoderStateCleanupAfterMetablock(ptr noundef %799)
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %800, i32 0, i32 73
  %802 = load i16, ptr %801, align 8
  %803 = and i16 %802, 1
  %804 = zext i16 %803 to i32
  %805 = icmp ne i32 %804, 0
  br i1 %805, label %809, label %806

806:                                              ; preds = %798
  %807 = load ptr, ptr %8, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %807, i32 0, i32 0
  store i32 1, ptr %808, align 8, !tbaa !26
  br label %851

809:                                              ; preds = %798
  %810 = load ptr, ptr %15, align 8, !tbaa !5
  %811 = call i32 @BrotliJumpToByteBoundary(ptr noundef %810)
  %812 = icmp ne i32 %811, 0
  br i1 %812, label %814, label %813

813:                                              ; preds = %809
  store i32 -15, ptr %14, align 4, !tbaa !9
  br label %851

814:                                              ; preds = %809
  %815 = load ptr, ptr %8, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %815, i32 0, i32 7
  %817 = load i32, ptr %816, align 8, !tbaa !19
  %818 = icmp eq i32 %817, 0
  br i1 %818, label %819, label %829

819:                                              ; preds = %814
  %820 = load ptr, ptr %15, align 8, !tbaa !5
  call void @BrotliBitReaderUnload(ptr noundef %820)
  %821 = load ptr, ptr %15, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.BrotliBitReader, ptr %821, i32 0, i32 3
  %823 = load i64, ptr %822, align 8, !tbaa !20
  %824 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %823, ptr %824, align 8, !tbaa !17
  %825 = load ptr, ptr %15, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.BrotliBitReader, ptr %825, i32 0, i32 2
  %827 = load ptr, ptr %826, align 8, !tbaa !21
  %828 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %827, ptr %828, align 8, !tbaa !5
  br label %829

829:                                              ; preds = %819, %814
  %830 = load ptr, ptr %8, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %830, i32 0, i32 0
  store i32 22, ptr %831, align 8, !tbaa !26
  br label %832

832:                                              ; preds = %829, %214
  %833 = load ptr, ptr %8, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %833, i32 0, i32 17
  %835 = load ptr, ptr %834, align 8, !tbaa !22
  %836 = icmp ne ptr %835, null
  br i1 %836, label %837, label %847

837:                                              ; preds = %832
  %838 = load ptr, ptr %8, align 8, !tbaa !5
  %839 = load ptr, ptr %11, align 8, !tbaa !5
  %840 = load ptr, ptr %12, align 8, !tbaa !5
  %841 = load ptr, ptr %13, align 8, !tbaa !5
  %842 = call i32 @WriteRingBuffer(ptr noundef %838, ptr noundef %839, ptr noundef %840, ptr noundef %841, i32 noundef 1)
  store i32 %842, ptr %14, align 4, !tbaa !9
  %843 = load i32, ptr %14, align 4, !tbaa !9
  %844 = icmp ne i32 %843, 1
  br i1 %844, label %845, label %846

845:                                              ; preds = %837
  br label %851

846:                                              ; preds = %837
  br label %847

847:                                              ; preds = %846, %832
  %848 = load ptr, ptr %8, align 8, !tbaa !5
  %849 = load i32, ptr %14, align 4, !tbaa !9
  %850 = call i32 @SaveErrorCode(ptr noundef %848, i32 noundef %849)
  store i32 %850, ptr %7, align 4
  store i32 1, ptr %16, align 4
  br label %856

851:                                              ; preds = %845, %813, %806, %797, %791, %786, %761, %728, %719, %710, %706, %678, %646, %582, %564, %556, %504, %471, %449, %413, %393, %377, %371, %342, %341, %328, %325, %313, %305, %295, %274, %254, %232, %222, %214
  br label %81

852:                                              ; preds = %213, %194, %159, %103
  %853 = load ptr, ptr %8, align 8, !tbaa !5
  %854 = load i32, ptr %14, align 4, !tbaa !9
  %855 = call i32 @SaveErrorCode(ptr noundef %853, i32 noundef %854)
  store i32 %855, ptr %7, align 4
  store i32 1, ptr %16, align 4
  br label %856

856:                                              ; preds = %852, %847, %673, %646, %52, %40
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  %857 = load i32, ptr %7, align 4
  ret i32 %857

858:                                              ; preds = %556, %471, %449, %357, %103
  unreachable
}

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @SaveErrorCode(ptr noundef, i32 noundef) #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @WriteRingBuffer(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @BrotliBitReaderUnload(ptr noundef) #3

declare hidden i32 @BrotliWarmupBitReader(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare hidden i32 @DecodeWindowBits(ptr noundef) #1

declare hidden void @BrotliDecoderStateMetablockBegin(ptr noundef) #4

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @DecodeMetaBlockLength(ptr noundef, ptr noundef) #2

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

; Function Attrs: noinline nounwind uwtable
declare hidden void @BrotliCalculateRingBufferSize(ptr noundef) #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @CopyUncompressedBlockToOutput(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @DecodeVarLenUint8(ptr noundef, ptr noundef, ptr noundef) #2

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

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @BitMask(i32 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @ReadContextModes(ptr noundef) #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @DetectTrivialLiteralBlockTypes(ptr noundef) #3

declare hidden i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #4

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @PrepareLiteralDecoding(ptr noundef) #3

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @BrotliEnsureRingBuffer(ptr noundef) #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @ProcessCommands(ptr noundef) #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @SafeProcessCommands(ptr noundef) #2

; Function Attrs: noinline nounwind uwtable
declare hidden void @WrapRingBuffer(ptr noundef) #2

declare hidden void @BrotliDecoderStateCleanupAfterMetablock(ptr noundef) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !14, i64 400}
!12 = !{!"BrotliDecoderStateStruct", !10, i64 0, !10, i64 4, !13, i64 8, !6, i64 40, !6, i64 48, !6, i64 56, !7, i64 64, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !7, i64 100, !10, i64 116, !10, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !15, i64 184, !15, i64 208, !15, i64 232, !6, i64 256, !6, i64 264, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !7, i64 288, !7, i64 300, !7, i64 312, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !6, i64 352, !6, i64 360, !7, i64 368, !10, i64 372, !10, i64 376, !10, i64 380, !10, i64 384, !14, i64 392, !14, i64 400, !10, i64 408, !10, i64 412, !10, i64 416, !7, i64 420, !6, i64 552, !7, i64 560, !7, i64 2000, !7, i64 2128, !7, i64 2146, !10, i64 2180, !6, i64 2184, !10, i64 2192, !10, i64 2196, !10, i64 2200, !7, i64 2204, !10, i64 4788, !7, i64 4792, !10, i64 5052, !10, i64 5056, !10, i64 5060, !10, i64 5064, !10, i64 5068, !10, i64 5072, !10, i64 5076, !10, i64 5080, !10, i64 5080, !10, i64 5080, !10, i64 5080, !10, i64 5080, !10, i64 5080, !10, i64 5084, !10, i64 5088, !10, i64 5092, !6, i64 5096, !6, i64 5104, !6, i64 5112, !7, i64 5120}
!13 = !{!"", !14, i64 0, !10, i64 8, !6, i64 16, !14, i64 24}
!14 = !{!"long", !7, i64 0}
!15 = !{!"", !6, i64 0, !6, i64 8, !16, i64 16, !16, i64 18}
!16 = !{!"short", !7, i64 0}
!17 = !{!14, !14, i64 0}
!18 = !{!12, !10, i64 116}
!19 = !{!12, !10, i64 72}
!20 = !{!13, !14, i64 24}
!21 = !{!13, !6, i64 16}
!22 = !{!12, !6, i64 128}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!12, !10, i64 0}
!27 = !{!12, !10, i64 5084}
!28 = !{!12, !10, i64 80}
!29 = !{!12, !6, i64 40}
!30 = !{!12, !6, i64 56}
!31 = !{!12, !6, i64 256}
!32 = !{!12, !6, i64 264}
!33 = !{!12, !10, i64 280}
!34 = !{!12, !10, i64 4}
!35 = distinct !{!35, !25}
!36 = !{!12, !10, i64 336}
!37 = !{!12, !10, i64 340}
!38 = !{!12, !10, i64 344}
!39 = !{!12, !6, i64 5104}
!40 = !{!12, !10, i64 5092}
!41 = !{!12, !10, i64 348}
!42 = !{!12, !6, i64 352}
!43 = !{!12, !6, i64 176}
!44 = !{!12, !6, i64 208}
!45 = !{!12, !6, i64 144}
!46 = !{!12, !10, i64 88}
!47 = !{!12, !10, i64 84}


; 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.HuffmanCode = type { i8, i16 }

; 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: nounwind uwtable
define dso_local i32 @BrotliDecoderDecompressStream(ptr noundef %0, ptr nocapture noundef %1, ptr nocapture noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #1 {
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %.not = icmp eq ptr %5, null
  br i1 %.not, label %13, label %10

10:                                               ; preds = %6
  %11 = getelementptr inbounds i8, ptr %0, i64 400
  %12 = load i64, ptr %11, align 8, !tbaa !5
  store i64 %12, ptr %5, align 8, !tbaa !15
  br label %13

13:                                               ; preds = %10, %6
  %14 = getelementptr inbounds i8, ptr %0, i64 116
  %15 = load i32, ptr %14, align 4, !tbaa !16
  %16 = icmp slt i32 %15, 0
  br i1 %16, label %328, label %17

17:                                               ; preds = %13
  %18 = load i64, ptr %3, align 8, !tbaa !15
  %.not291 = icmp eq i64 %18, 0
  br i1 %.not291, label %24, label %19

19:                                               ; preds = %17
  %.not292 = icmp eq ptr %4, null
  br i1 %.not292, label %22, label %20

20:                                               ; preds = %19
  %21 = load ptr, ptr %4, align 8, !tbaa !17
  %.not293 = icmp eq ptr %21, null
  br i1 %.not293, label %22, label %24

22:                                               ; preds = %20, %19
  %23 = tail call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef -20)
  br label %328

24:                                               ; preds = %20, %17
  %spec.select = phi ptr [ %4, %20 ], [ null, %17 ]
  %25 = getelementptr inbounds i8, ptr %0, i64 72
  %26 = load i32, ptr %25, align 8, !tbaa !18
  %27 = icmp eq i32 %26, 0
  br i1 %27, label %28, label %32

28:                                               ; preds = %24
  %29 = load i64, ptr %1, align 8, !tbaa !15
  %30 = getelementptr inbounds i8, ptr %0, i64 32
  store i64 %29, ptr %30, align 8, !tbaa !19
  %31 = load ptr, ptr %2, align 8, !tbaa !17
  br label %34

32:                                               ; preds = %24
  %33 = getelementptr inbounds i8, ptr %0, i64 64
  br label %34

34:                                               ; preds = %32, %28
  %.sink = phi ptr [ %31, %28 ], [ %33, %32 ]
  %.0257 = phi i32 [ 1, %28 ], [ 2, %32 ]
  %35 = getelementptr inbounds i8, ptr %0, i64 24
  store ptr %.sink, ptr %35, align 8
  %36 = getelementptr inbounds i8, ptr %0, i64 128
  %37 = getelementptr inbounds i8, ptr %0, i64 32
  %38 = getelementptr inbounds i8, ptr %0, i64 64
  %39 = getelementptr inbounds i8, ptr %0, i64 280
  %40 = getelementptr inbounds i8, ptr %0, i64 5080
  %41 = getelementptr inbounds i8, ptr %0, i64 88
  %42 = getelementptr inbounds i8, ptr %0, i64 5084
  %43 = getelementptr inbounds i8, ptr %0, i64 80
  %44 = getelementptr inbounds i8, ptr %0, i64 84
  %45 = getelementptr inbounds i8, ptr %0, i64 4
  %46 = getelementptr inbounds i8, ptr %0, i64 336
  %47 = getelementptr inbounds i8, ptr %0, i64 340
  %48 = getelementptr inbounds i8, ptr %0, i64 344
  %49 = getelementptr inbounds i8, ptr %0, i64 40
  %50 = getelementptr inbounds i8, ptr %0, i64 56
  %51 = getelementptr inbounds i8, ptr %0, i64 300
  %52 = getelementptr inbounds i8, ptr %0, i64 5104
  %53 = getelementptr inbounds i8, ptr %0, i64 5092
  %54 = getelementptr inbounds i8, ptr %0, i64 5096
  %55 = getelementptr inbounds i8, ptr %0, i64 308
  %56 = getelementptr inbounds i8, ptr %0, i64 348
  %57 = getelementptr inbounds i8, ptr %0, i64 352
  %58 = getelementptr inbounds i8, ptr %0, i64 184
  %59 = getelementptr inbounds i8, ptr %0, i64 208
  %60 = getelementptr inbounds i8, ptr %0, i64 304
  %61 = getelementptr inbounds i8, ptr %0, i64 232
  %62 = getelementptr inbounds i8, ptr %0, i64 176
  %63 = getelementptr inbounds i8, ptr %0, i64 144
  %64 = getelementptr inbounds i8, ptr %0, i64 256
  %65 = getelementptr inbounds i8, ptr %0, i64 264
  %66 = getelementptr inbounds i8, ptr %0, i64 288
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %34
  %.1258 = phi i32 [ %.0257, %34 ], [ %.1258.be, %.backedge.backedge ]
  switch i32 %.1258, label %108 [
    i32 1, label %114
    i32 2, label %67
  ]

67:                                               ; preds = %.backedge
  %68 = load ptr, ptr %36, align 8, !tbaa !20
  %.not322 = icmp eq ptr %68, null
  br i1 %.not322, label %72, label %69

69:                                               ; preds = %67
  %70 = call i32 @WriteRingBuffer(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, i32 noundef 1)
  %71 = icmp slt i32 %70, 0
  br i1 %71, label %.loopexit, label %72

72:                                               ; preds = %69, %67
  %73 = load i32, ptr %25, align 8, !tbaa !18
  %.not323 = icmp eq i32 %73, 0
  br i1 %.not323, label %94, label %74

74:                                               ; preds = %72
  %75 = load i64, ptr %37, align 8, !tbaa !19
  %76 = icmp eq i64 %75, 0
  br i1 %76, label %77, label %80

77:                                               ; preds = %74
  store i32 0, ptr %25, align 8, !tbaa !18
  %78 = load i64, ptr %1, align 8, !tbaa !15
  store i64 %78, ptr %37, align 8, !tbaa !19
  %79 = load ptr, ptr %2, align 8, !tbaa !17
  store ptr %79, ptr %35, align 8, !tbaa !21
  br label %.backedge.backedge

80:                                               ; preds = %74
  %81 = load i64, ptr %1, align 8, !tbaa !15
  %.not325 = icmp eq i64 %81, 0
  br i1 %.not325, label %.loopexit, label %82

82:                                               ; preds = %80
  %83 = load ptr, ptr %2, align 8, !tbaa !17
  %84 = load i8, ptr %83, align 1, !tbaa !22
  %85 = zext i32 %73 to i64
  %86 = getelementptr inbounds [8 x i8], ptr %38, i64 0, i64 %85
  store i8 %84, ptr %86, align 1, !tbaa !22
  %87 = load i32, ptr %25, align 8, !tbaa !18
  %88 = add i32 %87, 1
  store i32 %88, ptr %25, align 8, !tbaa !18
  %89 = zext i32 %88 to i64
  store i64 %89, ptr %37, align 8, !tbaa !19
  %90 = load ptr, ptr %2, align 8, !tbaa !17
  %91 = getelementptr inbounds i8, ptr %90, i64 1
  store ptr %91, ptr %2, align 8, !tbaa !17
  %92 = load i64, ptr %1, align 8, !tbaa !15
  %93 = add i64 %92, -1
  store i64 %93, ptr %1, align 8, !tbaa !15
  br label %.backedge.backedge

94:                                               ; preds = %72
  %95 = load ptr, ptr %35, align 8, !tbaa !21
  store ptr %95, ptr %2, align 8, !tbaa !17
  %96 = load i64, ptr %37, align 8, !tbaa !19
  store i64 %96, ptr %1, align 8, !tbaa !15
  %.not324360 = icmp eq i64 %96, 0
  br i1 %.not324360, label %.loopexit, label %.lr.ph361

.lr.ph361:                                        ; preds = %94, %.lr.ph361
  %97 = phi i32 [ %103, %.lr.ph361 ], [ 0, %94 ]
  %98 = phi ptr [ %105, %.lr.ph361 ], [ %95, %94 ]
  %99 = load i8, ptr %98, align 1, !tbaa !22
  %100 = zext i32 %97 to i64
  %101 = getelementptr inbounds [8 x i8], ptr %38, i64 0, i64 %100
  store i8 %99, ptr %101, align 1, !tbaa !22
  %102 = load i32, ptr %25, align 8, !tbaa !18
  %103 = add i32 %102, 1
  store i32 %103, ptr %25, align 8, !tbaa !18
  %104 = load ptr, ptr %2, align 8, !tbaa !17
  %105 = getelementptr inbounds i8, ptr %104, i64 1
  store ptr %105, ptr %2, align 8, !tbaa !17
  %106 = load i64, ptr %1, align 8, !tbaa !15
  %107 = add i64 %106, -1
  store i64 %107, ptr %1, align 8, !tbaa !15
  %.not324 = icmp eq i64 %107, 0
  br i1 %.not324, label %.loopexit, label %.lr.ph361, !llvm.loop !23

108:                                              ; preds = %.backedge
  %109 = load i32, ptr %25, align 8, !tbaa !18
  %.not321 = icmp eq i32 %109, 0
  br i1 %.not321, label %111, label %110

110:                                              ; preds = %108
  store i32 0, ptr %25, align 8, !tbaa !18
  br label %.loopexit

111:                                              ; preds = %108
  call void @BrotliBitReaderUnload(ptr noundef nonnull %9)
  %112 = load i64, ptr %37, align 8, !tbaa !19
  store i64 %112, ptr %1, align 8, !tbaa !15
  %113 = load ptr, ptr %35, align 8, !tbaa !21
  store ptr %113, ptr %2, align 8, !tbaa !17
  br label %.loopexit

114:                                              ; preds = %.backedge
  %115 = load i32, ptr %0, align 8, !tbaa !25
  switch i32 %115, label %.backedge.backedge [
    i32 0, label %118
    i32 1, label %132
    i32 2, label %133
    i32 9, label %153
    i32 10, label %.preheader
    i32 15, label %161
    i32 16, label %._crit_edge368
    i32 17, label %193
    i32 18, label %200
    i32 3, label %212
    i32 4, label %230
    i32 19, label %233
    i32 20, label %238
    i32 21, label %257
    i32 5, label %274
    i32 6, label %274
    i32 7, label %274
    i32 8, label %274
    i32 11, label %279
    i32 13, label %279
    i32 14, label %279
    i32 12, label %305
    i32 22, label %321
  ]

.backedge.backedge:                               ; preds = %.lr.ph, %114, %143, %147, %151, %152, %155, %164, %180, %311, %133, %153, %.critedge.loopexit, %165, %230, %233, %262, %273, %264, %277, %274, %279, %294, %293, %303, %302, %295, %304, %323, %118, %120, %123, %138, %200, %209, %268, %305, %312, %183, %193, %.thread337, %238, %77, %82
  %.1258.be = phi i32 [ 1, %77 ], [ 1, %82 ], [ 1, %114 ], [ %324, %323 ], [ 1, %311 ], [ %280, %279 ], [ 1, %293 ], [ 1, %294 ], [ 1, %295 ], [ 1, %302 ], [ 1, %303 ], [ 1, %304 ], [ %278, %277 ], [ %275, %274 ], [ %263, %262 ], [ 1, %273 ], [ 1, %264 ], [ %236, %233 ], [ %231, %230 ], [ 1, %164 ], [ %168, %165 ], [ 1, %180 ], [ 1, %.critedge.loopexit ], [ %154, %153 ], [ 1, %155 ], [ %134, %133 ], [ 1, %143 ], [ 1, %147 ], [ 1, %151 ], [ 1, %152 ], [ 2, %118 ], [ -13, %120 ], [ -30, %123 ], [ -14, %138 ], [ 1, %209 ], [ 2, %200 ], [ -27, %268 ], [ -10, %305 ], [ -15, %312 ], [ %192, %183 ], [ %199, %193 ], [ %.9.ph, %.thread337 ], [ %243, %238 ], [ 2, %.lr.ph ]
  br label %.backedge

._crit_edge368:                                   ; preds = %114
  %.pre369 = load i32, ptr %45, align 4, !tbaa !26
  %.pre372 = sext i32 %.pre369 to i64
  br label %183

.preheader:                                       ; preds = %114
  %116 = load i32, ptr %39, align 8, !tbaa !27
  %117 = icmp slt i32 %116, 1
  br i1 %117, label %.critedge.loopexit, label %.lr.ph

118:                                              ; preds = %114
  %119 = call i32 @BrotliWarmupBitReader(ptr noundef nonnull %9) #5
  %.not314 = icmp eq i32 %119, 0
  br i1 %.not314, label %.backedge.backedge, label %120

120:                                              ; preds = %118
  %121 = call i32 @DecodeWindowBits(ptr noundef nonnull %9)
  store i32 %121, ptr %42, align 4, !tbaa !28
  %122 = icmp eq i32 %121, 9
  br i1 %122, label %.backedge.backedge, label %123

123:                                              ; preds = %120
  %124 = shl nuw i32 1, %121
  %125 = add nsw i32 %124, -16
  store i32 %125, ptr %43, align 8, !tbaa !29
  %126 = load ptr, ptr %49, align 8, !tbaa !30
  %127 = load ptr, ptr %50, align 8, !tbaa !31
  %128 = call ptr %126(ptr noundef %127, i64 noundef 12336) #5
  store ptr %128, ptr %64, align 8, !tbaa !32
  %129 = icmp eq ptr %128, null
  br i1 %129, label %.backedge.backedge, label %130

130:                                              ; preds = %123
  %131 = getelementptr inbounds i8, ptr %128, i64 7584
  store ptr %131, ptr %65, align 8, !tbaa !33
  store i32 1, ptr %0, align 8, !tbaa !25
  br label %132

132:                                              ; preds = %130, %114
  call void @BrotliDecoderStateMetablockBegin(ptr noundef nonnull %0) #5
  store i32 2, ptr %0, align 8, !tbaa !25
  br label %133

133:                                              ; preds = %132, %114
  %134 = call i32 @DecodeMetaBlockLength(ptr noundef nonnull %0, ptr noundef nonnull %9)
  %.not315 = icmp eq i32 %134, 1
  br i1 %.not315, label %135, label %.backedge.backedge

135:                                              ; preds = %133
  %136 = load i16, ptr %40, align 8
  %137 = and i16 %136, 6
  %or.cond = icmp eq i16 %137, 0
  br i1 %or.cond, label %140, label %138

138:                                              ; preds = %135
  %139 = call i32 @BrotliJumpToByteBoundary(ptr noundef nonnull %9)
  %.not318 = icmp eq i32 %139, 0
  br i1 %.not318, label %.backedge.backedge, label %._crit_edge370

._crit_edge370:                                   ; preds = %138
  %.pre371 = load i16, ptr %40, align 8
  br label %140

140:                                              ; preds = %._crit_edge370, %135
  %141 = phi i16 [ %.pre371, %._crit_edge370 ], [ %136, %135 ]
  %142 = and i16 %141, 4
  %.not319 = icmp eq i16 %142, 0
  br i1 %.not319, label %144, label %143

143:                                              ; preds = %140
  store i32 10, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

144:                                              ; preds = %140
  %145 = load i32, ptr %39, align 8, !tbaa !27
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %148

147:                                              ; preds = %144
  store i32 12, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

148:                                              ; preds = %144
  call void @BrotliCalculateRingBufferSize(ptr noundef nonnull %0)
  %149 = load i16, ptr %40, align 8
  %150 = and i16 %149, 2
  %.not320 = icmp eq i16 %150, 0
  br i1 %.not320, label %152, label %151

151:                                              ; preds = %148
  store i32 9, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

152:                                              ; preds = %148
  store i32 0, ptr %45, align 4, !tbaa !26
  store i32 15, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

153:                                              ; preds = %114
  %154 = call i32 @CopyUncompressedBlockToOutput(ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, ptr noundef nonnull %0)
  %.not313 = icmp eq i32 %154, 1
  br i1 %.not313, label %155, label %.backedge.backedge

155:                                              ; preds = %153
  store i32 12, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

.lr.ph:                                           ; preds = %.preheader, %157
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %156 = call i32 @BrotliSafeReadBits(ptr noundef nonnull %9, i32 noundef 8, ptr noundef nonnull %7)
  %.not312 = icmp eq i32 %156, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br i1 %.not312, label %.backedge.backedge, label %157

157:                                              ; preds = %.lr.ph
  %158 = load i32, ptr %39, align 8, !tbaa !27
  %159 = add nsw i32 %158, -1
  store i32 %159, ptr %39, align 8, !tbaa !27
  %160 = icmp slt i32 %158, 2
  br i1 %160, label %.critedge.loopexit, label %.lr.ph, !llvm.loop !34

.critedge.loopexit:                               ; preds = %157, %.preheader
  store i32 12, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

161:                                              ; preds = %114
  %162 = load i32, ptr %45, align 4, !tbaa !26
  %163 = icmp sgt i32 %162, 2
  br i1 %163, label %164, label %165

164:                                              ; preds = %161
  store i32 3, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

165:                                              ; preds = %161
  %166 = sext i32 %162 to i64
  %167 = getelementptr inbounds [3 x i32], ptr %51, i64 0, i64 %166
  %168 = call i32 @DecodeVarLenUint8(ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull %167)
  %.not308 = icmp eq i32 %168, 1
  br i1 %.not308, label %169, label %.backedge.backedge

169:                                              ; preds = %165
  %170 = load i32, ptr %45, align 4, !tbaa !26
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds [3 x i32], ptr %51, i64 0, i64 %171
  %173 = load i32, ptr %172, align 4, !tbaa !35
  %174 = add i32 %173, 1
  store i32 %174, ptr %172, align 4, !tbaa !35
  %175 = load i32, ptr %45, align 4, !tbaa !26
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds [3 x i32], ptr %51, i64 0, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !35
  %179 = icmp ult i32 %178, 2
  br i1 %179, label %180, label %182

180:                                              ; preds = %169
  %181 = add nsw i32 %175, 1
  store i32 %181, ptr %45, align 4, !tbaa !26
  br label %.backedge.backedge

182:                                              ; preds = %169
  store i32 16, ptr %0, align 8, !tbaa !25
  br label %183

183:                                              ; preds = %._crit_edge368, %182
  %.pre-phi = phi i64 [ %.pre372, %._crit_edge368 ], [ %176, %182 ]
  %184 = phi i32 [ %.pre369, %._crit_edge368 ], [ %175, %182 ]
  %185 = mul nsw i32 %184, 632
  %186 = getelementptr inbounds [3 x i32], ptr %51, i64 0, i64 %.pre-phi
  %187 = load i32, ptr %186, align 4, !tbaa !35
  %188 = add i32 %187, 2
  %189 = load ptr, ptr %64, align 8, !tbaa !32
  %190 = sext i32 %185 to i64
  %191 = getelementptr inbounds %struct.HuffmanCode, ptr %189, i64 %190
  %192 = call i32 @ReadHuffmanCode(i32 noundef %188, ptr noundef %191, ptr noundef null, ptr noundef nonnull %0)
  %.not309 = icmp eq i32 %192, 1
  br i1 %.not309, label %.thread, label %.backedge.backedge

.thread:                                          ; preds = %183
  store i32 17, ptr %0, align 8, !tbaa !25
  br label %193

193:                                              ; preds = %.thread, %114
  %194 = load i32, ptr %45, align 4, !tbaa !26
  %195 = mul nsw i32 %194, 396
  %196 = load ptr, ptr %65, align 8, !tbaa !33
  %197 = sext i32 %195 to i64
  %198 = getelementptr inbounds %struct.HuffmanCode, ptr %196, i64 %197
  %199 = call i32 @ReadHuffmanCode(i32 noundef 26, ptr noundef %198, ptr noundef null, ptr noundef nonnull %0)
  %.not310 = icmp eq i32 %199, 1
  br i1 %.not310, label %.thread334, label %.backedge.backedge

.thread334:                                       ; preds = %193
  store i32 18, ptr %0, align 8, !tbaa !25
  br label %200

200:                                              ; preds = %.thread334, %114
  %201 = load i32, ptr %45, align 4, !tbaa !26
  %202 = mul nsw i32 %201, 396
  %203 = sext i32 %201 to i64
  %204 = getelementptr inbounds [3 x i32], ptr %66, i64 0, i64 %203
  %205 = load ptr, ptr %65, align 8, !tbaa !33
  %206 = sext i32 %202 to i64
  %207 = getelementptr inbounds %struct.HuffmanCode, ptr %205, i64 %206
  %208 = call i32 @SafeReadBlockLength(ptr noundef nonnull %0, ptr noundef nonnull %204, ptr noundef %207, ptr noundef nonnull %9)
  %.not311 = icmp eq i32 %208, 0
  br i1 %.not311, label %.backedge.backedge, label %209

209:                                              ; preds = %200
  %210 = load i32, ptr %45, align 4, !tbaa !26
  %211 = add nsw i32 %210, 1
  store i32 %211, ptr %45, align 4, !tbaa !26
  store i32 15, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

212:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #5
  %213 = call i32 @BrotliSafeReadBits(ptr noundef nonnull %9, i32 noundef 6, ptr noundef nonnull %8)
  %.not301 = icmp eq i32 %213, 0
  br i1 %.not301, label %.thread337, label %214

214:                                              ; preds = %212
  %215 = load i32, ptr %8, align 4, !tbaa !35
  %216 = call i32 @BitMask(i32 noundef 2)
  %217 = and i32 %216, %215
  store i32 %217, ptr %46, align 8, !tbaa !36
  %218 = load i32, ptr %8, align 4, !tbaa !35
  %219 = lshr i32 %218, 2
  store i32 %219, ptr %8, align 4, !tbaa !35
  %220 = shl i32 %219, %217
  %221 = add i32 %220, 16
  store i32 %221, ptr %47, align 4, !tbaa !37
  %222 = call i32 @BitMask(i32 noundef %217)
  store i32 %222, ptr %48, align 8, !tbaa !38
  %223 = load ptr, ptr %49, align 8, !tbaa !30
  %224 = load ptr, ptr %50, align 8, !tbaa !31
  %225 = load i32, ptr %51, align 4, !tbaa !35
  %226 = zext i32 %225 to i64
  %227 = call ptr %223(ptr noundef %224, i64 noundef %226) #5
  store ptr %227, ptr %52, align 8, !tbaa !39
  %228 = icmp eq ptr %227, null
  br i1 %228, label %.thread337, label %229

.thread337:                                       ; preds = %212, %214
  %.9.ph = phi i32 [ -21, %214 ], [ 2, %212 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  br label %.backedge.backedge

229:                                              ; preds = %214
  store i32 0, ptr %45, align 4, !tbaa !26
  store i32 4, ptr %0, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  br label %230

230:                                              ; preds = %229, %114
  %231 = call i32 @ReadContextModes(ptr noundef nonnull %0)
  %.not302 = icmp eq i32 %231, 1
  br i1 %.not302, label %232, label %.backedge.backedge

232:                                              ; preds = %230
  store i32 19, ptr %0, align 8, !tbaa !25
  br label %233

233:                                              ; preds = %232, %114
  %234 = load i32, ptr %51, align 4, !tbaa !35
  %235 = shl i32 %234, 6
  %236 = call i32 @DecodeContextMap(i32 noundef %235, ptr noundef nonnull %53, ptr noundef nonnull %54, ptr noundef nonnull %0)
  %.not303 = icmp eq i32 %236, 1
  br i1 %.not303, label %237, label %.backedge.backedge

237:                                              ; preds = %233
  call void @DetectTrivialLiteralBlockTypes(ptr noundef nonnull %0)
  store i32 20, ptr %0, align 8, !tbaa !25
  br label %238

238:                                              ; preds = %237, %114
  %239 = load i32, ptr %47, align 4, !tbaa !37
  %240 = load i32, ptr %46, align 8, !tbaa !36
  %241 = load i32, ptr %55, align 4, !tbaa !35
  %242 = shl i32 %241, 2
  %243 = call i32 @DecodeContextMap(i32 noundef %242, ptr noundef nonnull %56, ptr noundef nonnull %57, ptr noundef nonnull %0)
  %.not304 = icmp eq i32 %243, 1
  br i1 %.not304, label %244, label %.backedge.backedge

244:                                              ; preds = %238
  %245 = shl i32 48, %240
  %246 = add i32 %245, %239
  %247 = load i32, ptr %53, align 4, !tbaa !40
  %248 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef nonnull %0, ptr noundef nonnull %58, i32 noundef 256, i32 noundef %247) #5
  %249 = and i32 %248, 1
  %250 = load i32, ptr %60, align 4, !tbaa !35
  %251 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef nonnull %0, ptr noundef nonnull %59, i32 noundef 704, i32 noundef %250) #5
  %252 = and i32 %249, %251
  %253 = load i32, ptr %56, align 4, !tbaa !41
  %254 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef nonnull %0, ptr noundef nonnull %61, i32 noundef %246, i32 noundef %253) #5
  %255 = and i32 %252, %254
  %.not305 = icmp eq i32 %255, 0
  br i1 %.not305, label %.thread341, label %.thread373

.thread341:                                       ; preds = %244
  %256 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef -22)
  br label %328

.thread373:                                       ; preds = %244
  store i32 0, ptr %45, align 4, !tbaa !26
  store i32 21, ptr %0, align 8, !tbaa !25
  br label %262

257:                                              ; preds = %114
  %.pre = load i32, ptr %45, align 4, !tbaa !26
  switch i32 %.pre, label %260 [
    i32 0, label %262
    i32 1, label %258
    i32 2, label %259
  ]

258:                                              ; preds = %257
  br label %262

259:                                              ; preds = %257
  br label %262

260:                                              ; preds = %257
  %261 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef -31)
  br label %328

262:                                              ; preds = %.thread373, %257, %258, %259
  %.0 = phi ptr [ %61, %259 ], [ %59, %258 ], [ %58, %257 ], [ %58, %.thread373 ]
  %263 = call i32 @HuffmanTreeGroupDecode(ptr noundef nonnull %.0, ptr noundef nonnull %0)
  %.not306 = icmp eq i32 %263, 1
  br i1 %.not306, label %264, label %.backedge.backedge

264:                                              ; preds = %262
  %265 = load i32, ptr %45, align 4, !tbaa !26
  %266 = add nsw i32 %265, 1
  store i32 %266, ptr %45, align 4, !tbaa !26
  %267 = icmp sgt i32 %265, 1
  br i1 %267, label %268, label %.backedge.backedge

268:                                              ; preds = %264
  call void @PrepareLiteralDecoding(ptr noundef nonnull %0)
  %269 = load ptr, ptr %57, align 8, !tbaa !42
  store ptr %269, ptr %62, align 8, !tbaa !43
  %270 = load ptr, ptr %59, align 8, !tbaa !44
  %271 = load ptr, ptr %270, align 8, !tbaa !17
  store ptr %271, ptr %63, align 8, !tbaa !45
  %272 = call i32 @BrotliEnsureRingBuffer(ptr noundef nonnull %0)
  %.not307 = icmp eq i32 %272, 0
  br i1 %.not307, label %.backedge.backedge, label %273

273:                                              ; preds = %268
  store i32 5, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

274:                                              ; preds = %114, %114, %114, %114
  %275 = call i32 @ProcessCommands(ptr noundef nonnull %0)
  %276 = icmp eq i32 %275, 2
  br i1 %276, label %277, label %.backedge.backedge

277:                                              ; preds = %274
  %278 = call i32 @SafeProcessCommands(ptr noundef nonnull %0)
  br label %.backedge.backedge

279:                                              ; preds = %114, %114, %114
  %280 = call i32 @WriteRingBuffer(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, i32 noundef 0)
  %.not300 = icmp eq i32 %280, 1
  br i1 %.not300, label %281, label %.backedge.backedge

281:                                              ; preds = %279
  call void @WrapRingBuffer(ptr noundef nonnull %0)
  %282 = load i32, ptr %41, align 8, !tbaa !46
  %283 = load i32, ptr %42, align 4, !tbaa !28
  %284 = shl nuw i32 1, %283
  %285 = icmp eq i32 %282, %284
  br i1 %285, label %286, label %288

286:                                              ; preds = %281
  %287 = load i32, ptr %43, align 8, !tbaa !29
  store i32 %287, ptr %44, align 4, !tbaa !47
  br label %288

288:                                              ; preds = %286, %281
  %289 = load i32, ptr %0, align 8, !tbaa !25
  switch i32 %289, label %296 [
    i32 13, label %290
    i32 14, label %295
  ]

290:                                              ; preds = %288
  %291 = load i32, ptr %39, align 8, !tbaa !27
  %292 = icmp eq i32 %291, 0
  br i1 %292, label %293, label %294

293:                                              ; preds = %290
  store i32 12, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

294:                                              ; preds = %290
  store i32 5, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

295:                                              ; preds = %288
  store i32 8, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

296:                                              ; preds = %288
  %297 = load i32, ptr %45, align 4, !tbaa !26
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %304

299:                                              ; preds = %296
  %300 = load i32, ptr %39, align 8, !tbaa !27
  %301 = icmp eq i32 %300, 0
  br i1 %301, label %302, label %303

302:                                              ; preds = %299
  store i32 12, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

303:                                              ; preds = %299
  store i32 7, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

304:                                              ; preds = %296
  store i32 6, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

305:                                              ; preds = %114
  %306 = load i32, ptr %39, align 8, !tbaa !27
  %307 = icmp slt i32 %306, 0
  br i1 %307, label %.backedge.backedge, label %308

308:                                              ; preds = %305
  call void @BrotliDecoderStateCleanupAfterMetablock(ptr noundef nonnull %0) #5
  %309 = load i16, ptr %40, align 8
  %310 = and i16 %309, 1
  %.not296 = icmp eq i16 %310, 0
  br i1 %.not296, label %311, label %312

311:                                              ; preds = %308
  store i32 1, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

312:                                              ; preds = %308
  %313 = call i32 @BrotliJumpToByteBoundary(ptr noundef nonnull %9)
  %.not297 = icmp eq i32 %313, 0
  br i1 %.not297, label %.backedge.backedge, label %314

314:                                              ; preds = %312
  %315 = load i32, ptr %25, align 8, !tbaa !18
  %316 = icmp eq i32 %315, 0
  br i1 %316, label %317, label %320

317:                                              ; preds = %314
  call void @BrotliBitReaderUnload(ptr noundef nonnull %9)
  %318 = load i64, ptr %37, align 8, !tbaa !19
  store i64 %318, ptr %1, align 8, !tbaa !15
  %319 = load ptr, ptr %35, align 8, !tbaa !21
  store ptr %319, ptr %2, align 8, !tbaa !17
  br label %320

320:                                              ; preds = %317, %314
  store i32 22, ptr %0, align 8, !tbaa !25
  br label %321

321:                                              ; preds = %320, %114
  %322 = load ptr, ptr %36, align 8, !tbaa !20
  %.not298 = icmp eq ptr %322, null
  br i1 %.not298, label %325, label %323

323:                                              ; preds = %321
  %324 = call i32 @WriteRingBuffer(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, i32 noundef 1)
  %.not299 = icmp eq i32 %324, 1
  br i1 %.not299, label %325, label %.backedge.backedge

325:                                              ; preds = %323, %321
  %326 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef 1)
  br label %328

.loopexit:                                        ; preds = %69, %80, %.lr.ph361, %94, %110, %111
  %.14 = phi i32 [ %.1258, %110 ], [ %.1258, %111 ], [ 2, %94 ], [ 2, %.lr.ph361 ], [ 2, %80 ], [ %70, %69 ]
  %327 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef %.14)
  br label %328

328:                                              ; preds = %260, %.thread341, %13, %.loopexit, %325, %22
  %.5 = phi i32 [ %327, %.loopexit ], [ %326, %325 ], [ %261, %260 ], [ %23, %22 ], [ 0, %13 ], [ %256, %.thread341 ]
  ret i32 %.5
}

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @SaveErrorCode(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @WriteRingBuffer(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @BrotliBitReaderUnload(ptr noundef) local_unnamed_addr #3

declare hidden i32 @BrotliWarmupBitReader(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden i32 @DecodeWindowBits(ptr noundef) local_unnamed_addr #1

declare hidden void @BrotliDecoderStateMetablockBegin(ptr noundef) local_unnamed_addr #4

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @DecodeMetaBlockLength(ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: noinline nounwind uwtable
declare hidden void @BrotliCalculateRingBufferSize(ptr noundef) local_unnamed_addr #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @CopyUncompressedBlockToOutput(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @DecodeVarLenUint8(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @BitMask(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @ReadContextModes(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @DetectTrivialLiteralBlockTypes(ptr noundef) local_unnamed_addr #3

declare hidden i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @PrepareLiteralDecoding(ptr noundef) local_unnamed_addr #3

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @BrotliEnsureRingBuffer(ptr noundef) local_unnamed_addr #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @ProcessCommands(ptr noundef) local_unnamed_addr #2

; Function Attrs: noinline nounwind uwtable
declare hidden i32 @SafeProcessCommands(ptr noundef) local_unnamed_addr #2

; Function Attrs: noinline nounwind uwtable
declare hidden void @WrapRingBuffer(ptr noundef) local_unnamed_addr #2

declare hidden void @BrotliDecoderStateCleanupAfterMetablock(ptr noundef) local_unnamed_addr #4

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

!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 400}
!6 = !{!"BrotliDecoderStateStruct", !7, i64 0, !7, i64 4, !10, i64 8, !12, i64 40, !12, i64 48, !12, i64 56, !8, i64 64, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !8, i64 100, !7, i64 116, !7, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !13, i64 184, !13, i64 208, !13, i64 232, !12, i64 256, !12, i64 264, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !8, i64 288, !8, i64 300, !8, i64 312, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !12, i64 352, !12, i64 360, !8, i64 368, !7, i64 372, !7, i64 376, !7, i64 380, !7, i64 384, !11, i64 392, !11, i64 400, !7, i64 408, !7, i64 412, !7, i64 416, !8, i64 420, !12, i64 552, !8, i64 560, !8, i64 2000, !8, i64 2128, !8, i64 2146, !7, i64 2180, !12, i64 2184, !7, i64 2192, !7, i64 2196, !7, i64 2200, !8, i64 2204, !7, i64 4788, !8, i64 4792, !7, i64 5052, !7, i64 5056, !7, i64 5060, !7, i64 5064, !7, i64 5068, !7, i64 5072, !7, i64 5076, !7, i64 5080, !7, i64 5080, !7, i64 5080, !7, i64 5080, !7, i64 5080, !7, i64 5080, !7, i64 5084, !7, i64 5088, !7, i64 5092, !12, i64 5096, !12, i64 5104, !12, i64 5112, !8, i64 5120}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !7, i64 8, !12, i64 16, !11, i64 24}
!11 = !{!"long", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"", !12, i64 0, !12, i64 8, !14, i64 16, !14, i64 18}
!14 = !{!"short", !8, i64 0}
!15 = !{!11, !11, i64 0}
!16 = !{!6, !7, i64 116}
!17 = !{!12, !12, i64 0}
!18 = !{!6, !7, i64 72}
!19 = !{!10, !11, i64 24}
!20 = !{!6, !12, i64 128}
!21 = !{!10, !12, i64 16}
!22 = !{!8, !8, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!6, !7, i64 0}
!26 = !{!6, !7, i64 4}
!27 = !{!6, !7, i64 280}
!28 = !{!6, !7, i64 5084}
!29 = !{!6, !7, i64 80}
!30 = !{!6, !12, i64 40}
!31 = !{!6, !12, i64 56}
!32 = !{!6, !12, i64 256}
!33 = !{!6, !12, i64 264}
!34 = distinct !{!34, !24}
!35 = !{!7, !7, i64 0}
!36 = !{!6, !7, i64 336}
!37 = !{!6, !7, i64 340}
!38 = !{!6, !7, i64 344}
!39 = !{!6, !12, i64 5104}
!40 = !{!6, !7, i64 5092}
!41 = !{!6, !7, i64 348}
!42 = !{!6, !12, i64 352}
!43 = !{!6, !12, i64 176}
!44 = !{!6, !12, i64 208}
!45 = !{!6, !12, i64 144}
!46 = !{!6, !7, i64 88}
!47 = !{!6, !7, i64 84}


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