; LLVM IR from DanEngelbrecht/longtail :: lib/brotli/ext/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.BrotliDistanceCodeLimit = type { i32, i32 }
%struct.BrotliDecoderStateStruct = type { i32, i32, %struct.BrotliBitReader, ptr, ptr, ptr, %union.anon, i64, i32, i32, i32, i32, i32, i32, [4 x i32], i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, %struct.HuffmanTreeGroup, %struct.HuffmanTreeGroup, %struct.HuffmanTreeGroup, ptr, ptr, i32, i32, [3 x i64], i64, [3 x i64], [6 x i64], i64, i64, i64, ptr, ptr, i64, i64, i64, [65 x i32], i32, i32, i8, ptr, ptr, ptr, i64, i32, i32, i32, i32, i32, i32, i64, ptr, ptr, ptr, ptr, [8 x i32], %union.anon.0 }
%struct.BrotliBitReader = type { i64, i64, ptr, ptr, ptr }
%union.anon = type { i64 }
%struct.HuffmanTreeGroup = type { ptr, ptr, i16, i16, i16 }
%union.anon.0 = type { %struct.BrotliMetablockBodyArena }
%struct.BrotliMetablockBodyArena = type { [544 x i8], [544 x i64] }
%struct.HuffmanCode = type { i8, i16 }
%struct.BrotliMetablockHeaderArena = type { i32, i32, i32, i64, i64, i64, i64, i64, i64, [32 x %struct.HuffmanCode], ptr, [720 x i16], [32 x i32], [18 x i8], [16 x i16], i32, ptr, i64, i64, i64, [646 x %struct.HuffmanCode] }
%struct.BrotliDecoderCompoundDictionary = type { i32, i32, i32, i32, i32, i32, [16 x ptr], [16 x i32], i32, [256 x i8] }

; 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 i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i32, align 4
  %32 = alloca %struct.BrotliDistanceCodeLimit, align 4
  %33 = alloca ptr, align 8
  %34 = 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
  %35 = load ptr, ptr %8, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %35, i32 0, i32 2
  store ptr %36, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %37 = load ptr, ptr %9, align 8, !tbaa !5
  %38 = load i64, ptr %37, align 8, !tbaa !11
  store i64 %38, ptr %16, align 8, !tbaa !11
  %39 = load ptr, ptr %13, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %41, label %46

41:                                               ; preds = %6
  %42 = load ptr, ptr %8, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %42, i32 0, i32 40
  %44 = load i64, ptr %43, align 8, !tbaa !13
  %45 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 %44, ptr %45, align 8, !tbaa !11
  br label %46

46:                                               ; preds = %41, %6
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %47, i32 0, i32 15
  %49 = load i32, ptr %48, align 8, !tbaa !18
  %50 = icmp slt i32 %49, 0
  br i1 %50, label %51, label %52

51:                                               ; preds = %46
  store i32 0, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %1010

52:                                               ; preds = %46
  %53 = load ptr, ptr %11, align 8, !tbaa !5
  %54 = load i64, ptr %53, align 8, !tbaa !11
  %55 = icmp ne i64 %54, 0
  br i1 %55, label %56, label %70

56:                                               ; preds = %52
  %57 = load ptr, ptr %12, align 8, !tbaa !5
  %58 = icmp ne ptr %57, null
  br i1 %58, label %59, label %63

59:                                               ; preds = %56
  %60 = load ptr, ptr %12, align 8, !tbaa !5
  %61 = load ptr, ptr %60, align 8, !tbaa !5
  %62 = icmp ne ptr %61, null
  br i1 %62, label %70, label %63

63:                                               ; preds = %59, %56
  %64 = load ptr, ptr %8, align 8, !tbaa !5
  %65 = load i64, ptr %16, align 8, !tbaa !11
  %66 = load ptr, ptr %9, align 8, !tbaa !5
  %67 = load i64, ptr %66, align 8, !tbaa !11
  %68 = sub i64 %65, %67
  %69 = call i32 @SaveErrorCode(ptr noundef %64, i32 noundef -20, i64 noundef %68)
  store i32 %69, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %1010

70:                                               ; preds = %59, %52
  %71 = load ptr, ptr %11, align 8, !tbaa !5
  %72 = load i64, ptr %71, align 8, !tbaa !11
  %73 = icmp ne i64 %72, 0
  br i1 %73, label %75, label %74

74:                                               ; preds = %70
  store ptr null, ptr %12, align 8, !tbaa !5
  br label %75

75:                                               ; preds = %74, %70
  %76 = load ptr, ptr %8, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %76, i32 0, i32 7
  %78 = load i64, ptr %77, align 8, !tbaa !19
  %79 = icmp eq i64 %78, 0
  br i1 %79, label %80, label %86

80:                                               ; preds = %75
  %81 = load ptr, ptr %15, align 8, !tbaa !5
  %82 = load ptr, ptr %10, align 8, !tbaa !5
  %83 = load ptr, ptr %82, align 8, !tbaa !5
  %84 = load ptr, ptr %9, align 8, !tbaa !5
  %85 = load i64, ptr %84, align 8, !tbaa !11
  call void @BrotliBitReaderSetInput(ptr noundef %81, ptr noundef %83, i64 noundef %85)
  br label %94

86:                                               ; preds = %75
  store i32 2, ptr %14, align 4, !tbaa !9
  %87 = load ptr, ptr %15, align 8, !tbaa !5
  %88 = load ptr, ptr %8, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %88, i32 0, i32 6
  %90 = getelementptr inbounds [8 x i8], ptr %89, i64 0, i64 0
  %91 = load ptr, ptr %8, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %91, i32 0, i32 7
  %93 = load i64, ptr %92, align 8, !tbaa !19
  call void @BrotliBitReaderSetInput(ptr noundef %87, ptr noundef %90, i64 noundef %93)
  br label %94

94:                                               ; preds = %86, %80
  br label %95

95:                                               ; preds = %1001, %908, %145, %133, %94
  %96 = load i32, ptr %14, align 4, !tbaa !9
  %97 = icmp ne i32 %96, 1
  br i1 %97, label %98, label %225

98:                                               ; preds = %95
  %99 = load i32, ptr %14, align 4, !tbaa !9
  %100 = icmp eq i32 %99, 2
  br i1 %100, label %101, label %207

101:                                              ; preds = %98
  %102 = load ptr, ptr %8, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %102, i32 0, i32 17
  %104 = load ptr, ptr %103, align 8, !tbaa !20
  %105 = icmp ne ptr %104, null
  br i1 %105, label %106, label %120

106:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %107 = load ptr, ptr %8, align 8, !tbaa !5
  %108 = load ptr, ptr %11, align 8, !tbaa !5
  %109 = load ptr, ptr %12, align 8, !tbaa !5
  %110 = load ptr, ptr %13, align 8, !tbaa !5
  %111 = call i32 @WriteRingBuffer(ptr noundef %107, ptr noundef %108, ptr noundef %109, ptr noundef %110, i32 noundef 1)
  store i32 %111, ptr %18, align 4, !tbaa !9
  %112 = load i32, ptr %18, align 4, !tbaa !9
  %113 = icmp slt i32 %112, 0
  br i1 %113, label %114, label %116

114:                                              ; preds = %106
  %115 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %115, ptr %14, align 4, !tbaa !9
  store i32 2, ptr %17, align 4
  br label %117

116:                                              ; preds = %106
  store i32 0, ptr %17, align 4
  br label %117

117:                                              ; preds = %116, %114
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %118 = load i32, ptr %17, align 4
  switch i32 %118, label %1012 [
    i32 0, label %119
    i32 2, label %1002
  ]

119:                                              ; preds = %117
  br label %120

120:                                              ; preds = %119, %101
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %121, i32 0, i32 7
  %123 = load i64, ptr %122, align 8, !tbaa !19
  %124 = icmp ne i64 %123, 0
  br i1 %124, label %125, label %174

125:                                              ; preds = %120
  %126 = load ptr, ptr %15, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.BrotliBitReader, ptr %126, i32 0, i32 2
  %128 = load ptr, ptr %127, align 8, !tbaa !21
  %129 = load ptr, ptr %15, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.BrotliBitReader, ptr %129, i32 0, i32 4
  %131 = load ptr, ptr %130, align 8, !tbaa !22
  %132 = icmp eq ptr %128, %131
  br i1 %132, label %133, label %141

133:                                              ; preds = %125
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %134, i32 0, i32 7
  store i64 0, ptr %135, align 8, !tbaa !19
  store i32 1, ptr %14, align 4, !tbaa !9
  %136 = load ptr, ptr %15, align 8, !tbaa !5
  %137 = load ptr, ptr %10, align 8, !tbaa !5
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load i64, ptr %139, align 8, !tbaa !11
  call void @BrotliBitReaderSetInput(ptr noundef %136, ptr noundef %138, i64 noundef %140)
  br label %95

141:                                              ; preds = %125
  %142 = load ptr, ptr %9, align 8, !tbaa !5
  %143 = load i64, ptr %142, align 8, !tbaa !11
  %144 = icmp ne i64 %143, 0
  br i1 %144, label %145, label %172

145:                                              ; preds = %141
  store i32 1, ptr %14, align 4, !tbaa !9
  %146 = load ptr, ptr %10, align 8, !tbaa !5
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  %148 = load i8, ptr %147, align 1, !tbaa !23
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %149, i32 0, i32 6
  %151 = load ptr, ptr %8, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %151, i32 0, i32 7
  %153 = load i64, ptr %152, align 8, !tbaa !19
  %154 = getelementptr inbounds [8 x i8], ptr %150, i64 0, i64 %153
  store i8 %148, ptr %154, align 1, !tbaa !23
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %155, i32 0, i32 7
  %157 = load i64, ptr %156, align 8, !tbaa !19
  %158 = add i64 %157, 1
  store i64 %158, ptr %156, align 8, !tbaa !19
  %159 = load ptr, ptr %15, align 8, !tbaa !5
  %160 = load ptr, ptr %8, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %160, i32 0, i32 6
  %162 = getelementptr inbounds [8 x i8], ptr %161, i64 0, i64 0
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %163, i32 0, i32 7
  %165 = load i64, ptr %164, align 8, !tbaa !19
  call void @BrotliBitReaderSetInput(ptr noundef %159, ptr noundef %162, i64 noundef %165)
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = load ptr, ptr %166, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i32 1
  store ptr %168, ptr %166, align 8, !tbaa !5
  %169 = load ptr, ptr %9, align 8, !tbaa !5
  %170 = load i64, ptr %169, align 8, !tbaa !11
  %171 = add i64 %170, -1
  store i64 %171, ptr %169, align 8, !tbaa !11
  br label %95

172:                                              ; preds = %141
  br label %173

173:                                              ; preds = %172
  br label %1002

174:                                              ; preds = %120
  %175 = load ptr, ptr %15, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.BrotliBitReader, ptr %175, i32 0, i32 2
  %177 = load ptr, ptr %176, align 8, !tbaa !21
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %177, ptr %178, align 8, !tbaa !5
  %179 = load ptr, ptr %15, align 8, !tbaa !5
  %180 = call i64 @BrotliBitReaderGetAvailIn(ptr noundef %179)
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %180, ptr %181, align 8, !tbaa !11
  br label %182

182:                                              ; preds = %186, %174
  %183 = load ptr, ptr %9, align 8, !tbaa !5
  %184 = load i64, ptr %183, align 8, !tbaa !11
  %185 = icmp ne i64 %184, 0
  br i1 %185, label %186, label %206

186:                                              ; preds = %182
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = load ptr, ptr %187, align 8, !tbaa !5
  %189 = load i8, ptr %188, align 1, !tbaa !23
  %190 = load ptr, ptr %8, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %190, i32 0, i32 6
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %192, i32 0, i32 7
  %194 = load i64, ptr %193, align 8, !tbaa !19
  %195 = getelementptr inbounds [8 x i8], ptr %191, i64 0, i64 %194
  store i8 %189, ptr %195, align 1, !tbaa !23
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %196, i32 0, i32 7
  %198 = load i64, ptr %197, align 8, !tbaa !19
  %199 = add i64 %198, 1
  store i64 %199, ptr %197, align 8, !tbaa !19
  %200 = load ptr, ptr %10, align 8, !tbaa !5
  %201 = load ptr, ptr %200, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i32 1
  store ptr %202, ptr %200, align 8, !tbaa !5
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = load i64, ptr %203, align 8, !tbaa !11
  %205 = add i64 %204, -1
  store i64 %205, ptr %203, align 8, !tbaa !11
  br label %182, !llvm.loop !24

206:                                              ; preds = %182
  br label %1002

207:                                              ; preds = %98
  %208 = load ptr, ptr %8, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %208, i32 0, i32 7
  %210 = load i64, ptr %209, align 8, !tbaa !19
  %211 = icmp ne i64 %210, 0
  br i1 %211, label %212, label %215

212:                                              ; preds = %207
  %213 = load ptr, ptr %8, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %213, i32 0, i32 7
  store i64 0, ptr %214, align 8, !tbaa !19
  br label %224

215:                                              ; preds = %207
  %216 = load ptr, ptr %15, align 8, !tbaa !5
  call void @BrotliBitReaderUnload(ptr noundef %216)
  %217 = load ptr, ptr %15, align 8, !tbaa !5
  %218 = call i64 @BrotliBitReaderGetAvailIn(ptr noundef %217)
  %219 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %218, ptr %219, align 8, !tbaa !11
  %220 = load ptr, ptr %15, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.BrotliBitReader, ptr %220, i32 0, i32 2
  %222 = load ptr, ptr %221, align 8, !tbaa !21
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %222, ptr %223, align 8, !tbaa !5
  br label %224

224:                                              ; preds = %215, %212
  br label %1002

225:                                              ; preds = %95
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %226, i32 0, i32 0
  %228 = load i32, ptr %227, align 8, !tbaa !26
  switch i32 %228, label %1001 [
    i32 0, label %229
    i32 1, label %254
    i32 2, label %290
    i32 3, label %323
    i32 4, label %327
    i32 17, label %402
    i32 18, label %422
    i32 19, label %471
    i32 20, label %504
    i32 21, label %528
    i32 11, label %559
    i32 12, label %571
    i32 5, label %580
    i32 6, label %626
    i32 22, label %635
    i32 23, label %654
    i32 24, label %756
    i32 25, label %799
    i32 7, label %822
    i32 8, label %822
    i32 9, label %822
    i32 10, label %822
    i32 13, label %831
    i32 15, label %831
    i32 16, label %831
    i32 14, label %940
    i32 26, label %978
  ]

229:                                              ; preds = %225
  %230 = load ptr, ptr %15, align 8, !tbaa !5
  %231 = call i32 @BrotliWarmupBitReader(ptr noundef %230)
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %234, label %233

233:                                              ; preds = %229
  store i32 2, ptr %14, align 4, !tbaa !9
  br label %1001

234:                                              ; preds = %229
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = call i32 @DecodeWindowBits(ptr noundef %235, ptr noundef %236)
  store i32 %237, ptr %14, align 4, !tbaa !9
  %238 = load i32, ptr %14, align 4, !tbaa !9
  %239 = icmp ne i32 %238, 1
  br i1 %239, label %240, label %241

240:                                              ; preds = %234
  br label %1001

241:                                              ; preds = %234
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %242, i32 0, i32 55
  %244 = load i32, ptr %243, align 4
  %245 = lshr i32 %244, 5
  %246 = and i32 %245, 1
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %251

248:                                              ; preds = %241
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %249, i32 0, i32 0
  store i32 1, ptr %250, align 8, !tbaa !26
  br label %1001

251:                                              ; preds = %241
  %252 = load ptr, ptr %8, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %252, i32 0, i32 0
  store i32 2, ptr %253, align 8, !tbaa !26
  br label %1001

254:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %255 = load ptr, ptr %15, align 8, !tbaa !5
  %256 = call i32 @BrotliSafeReadBits(ptr noundef %255, i64 noundef 6, ptr noundef %19)
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %259, label %258

258:                                              ; preds = %254
  store i32 2, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %17, align 4
  br label %287

259:                                              ; preds = %254
  %260 = load i64, ptr %19, align 8, !tbaa !11
  %261 = and i64 %260, 63
  %262 = trunc i64 %261 to i32
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %263, i32 0, i32 55
  %265 = load i32, ptr %264, align 4
  %266 = and i32 %262, 63
  %267 = shl i32 %266, 6
  %268 = and i32 %265, -4033
  %269 = or i32 %268, %267
  store i32 %269, ptr %264, align 4
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %270, i32 0, i32 55
  %272 = load i32, ptr %271, align 4
  %273 = lshr i32 %272, 6
  %274 = and i32 %273, 63
  %275 = icmp slt i32 %274, 10
  br i1 %275, label %283, label %276

276:                                              ; preds = %259
  %277 = load ptr, ptr %8, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %277, i32 0, i32 55
  %279 = load i32, ptr %278, align 4
  %280 = lshr i32 %279, 6
  %281 = and i32 %280, 63
  %282 = icmp sgt i32 %281, 30
  br i1 %282, label %283, label %284

283:                                              ; preds = %276, %259
  store i32 -13, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %17, align 4
  br label %287

284:                                              ; preds = %276
  %285 = load ptr, ptr %8, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %285, i32 0, i32 0
  store i32 2, ptr %286, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %287

287:                                              ; preds = %284, %283, %258
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  %288 = load i32, ptr %17, align 4
  switch i32 %288, label %1012 [
    i32 0, label %289
    i32 6, label %1001
  ]

289:                                              ; preds = %287
  br label %290

290:                                              ; preds = %289, %225
  %291 = load ptr, ptr %8, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %291, i32 0, i32 55
  %293 = load i32, ptr %292, align 4
  %294 = lshr i32 %293, 6
  %295 = and i32 %294, 63
  %296 = shl i32 1, %295
  %297 = sub nsw i32 %296, 16
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %298, i32 0, i32 9
  store i32 %297, ptr %299, align 4, !tbaa !27
  %300 = load ptr, ptr %8, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %300, i32 0, i32 3
  %302 = load ptr, ptr %301, align 8, !tbaa !28
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %303, i32 0, i32 5
  %305 = load ptr, ptr %304, align 8, !tbaa !29
  %306 = call ptr %302(ptr noundef %305, i64 noundef 12336)
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %307, i32 0, i32 26
  store ptr %306, ptr %308, align 8, !tbaa !30
  %309 = load ptr, ptr %8, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %309, i32 0, i32 26
  %311 = load ptr, ptr %310, align 8, !tbaa !30
  %312 = icmp eq ptr %311, null
  br i1 %312, label %313, label %314

313:                                              ; preds = %290
  store i32 -30, ptr %14, align 4, !tbaa !9
  br label %1001

314:                                              ; preds = %290
  %315 = load ptr, ptr %8, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %315, i32 0, i32 26
  %317 = load ptr, ptr %316, align 8, !tbaa !30
  %318 = getelementptr inbounds %struct.HuffmanCode, ptr %317, i64 1896
  %319 = load ptr, ptr %8, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %319, i32 0, i32 27
  store ptr %318, ptr %320, align 8, !tbaa !31
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %321, i32 0, i32 0
  store i32 3, ptr %322, align 8, !tbaa !26
  br label %323

323:                                              ; preds = %314, %225
  %324 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BrotliDecoderStateMetablockBegin(ptr noundef %324)
  %325 = load ptr, ptr %8, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %325, i32 0, i32 0
  store i32 4, ptr %326, align 8, !tbaa !26
  br label %327

327:                                              ; preds = %323, %225
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = load ptr, ptr %15, align 8, !tbaa !5
  %330 = call i32 @DecodeMetaBlockLength(ptr noundef %328, ptr noundef %329)
  store i32 %330, ptr %14, align 4, !tbaa !9
  %331 = load i32, ptr %14, align 4, !tbaa !9
  %332 = icmp ne i32 %331, 1
  br i1 %332, label %333, label %334

333:                                              ; preds = %327
  br label %1001

334:                                              ; preds = %327
  %335 = load ptr, ptr %8, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %335, i32 0, i32 55
  %337 = load i32, ptr %336, align 4
  %338 = lshr i32 %337, 2
  %339 = and i32 %338, 1
  %340 = icmp ne i32 %339, 0
  br i1 %340, label %348, label %341

341:                                              ; preds = %334
  %342 = load ptr, ptr %8, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %342, i32 0, i32 55
  %344 = load i32, ptr %343, align 4
  %345 = lshr i32 %344, 1
  %346 = and i32 %345, 1
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %348, label %354

348:                                              ; preds = %341, %334
  %349 = load ptr, ptr %15, align 8, !tbaa !5
  %350 = call i32 @BrotliJumpToByteBoundary(ptr noundef %349)
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %353, label %352

352:                                              ; preds = %348
  store i32 -14, ptr %14, align 4, !tbaa !9
  br label %1001

353:                                              ; preds = %348
  br label %354

354:                                              ; preds = %353, %341
  %355 = load ptr, ptr %8, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %355, i32 0, i32 55
  %357 = load i32, ptr %356, align 4
  %358 = lshr i32 %357, 2
  %359 = and i32 %358, 1
  %360 = icmp ne i32 %359, 0
  br i1 %360, label %361, label %380

361:                                              ; preds = %354
  %362 = load ptr, ptr %8, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %362, i32 0, i32 0
  store i32 12, ptr %363, align 8, !tbaa !26
  %364 = load ptr, ptr %8, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %364, i32 0, i32 46
  %366 = load ptr, ptr %365, align 8, !tbaa !32
  %367 = icmp ne ptr %366, null
  br i1 %367, label %368, label %379

368:                                              ; preds = %361
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %369, i32 0, i32 46
  %371 = load ptr, ptr %370, align 8, !tbaa !32
  %372 = load ptr, ptr %8, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %372, i32 0, i32 48
  %374 = load ptr, ptr %373, align 8, !tbaa !33
  %375 = load ptr, ptr %8, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %375, i32 0, i32 16
  %377 = load i32, ptr %376, align 4, !tbaa !34
  %378 = sext i32 %377 to i64
  call void %371(ptr noundef %374, i64 noundef %378)
  br label %379

379:                                              ; preds = %368, %361
  br label %1001

380:                                              ; preds = %354
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %381, i32 0, i32 16
  %383 = load i32, ptr %382, align 4, !tbaa !34
  %384 = icmp eq i32 %383, 0
  br i1 %384, label %385, label %388

385:                                              ; preds = %380
  %386 = load ptr, ptr %8, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %386, i32 0, i32 0
  store i32 14, ptr %387, align 8, !tbaa !26
  br label %1001

388:                                              ; preds = %380
  %389 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BrotliCalculateRingBufferSize(ptr noundef %389)
  %390 = load ptr, ptr %8, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %390, i32 0, i32 55
  %392 = load i32, ptr %391, align 4
  %393 = lshr i32 %392, 1
  %394 = and i32 %393, 1
  %395 = icmp ne i32 %394, 0
  br i1 %395, label %396, label %399

396:                                              ; preds = %388
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %397, i32 0, i32 0
  store i32 11, ptr %398, align 8, !tbaa !26
  br label %1001

399:                                              ; preds = %388
  %400 = load ptr, ptr %8, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %400, i32 0, i32 0
  store i32 17, ptr %401, align 8, !tbaa !26
  br label %402

402:                                              ; preds = %399, %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %403 = load ptr, ptr %8, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %403, i32 0, i32 62
  store ptr %404, ptr %20, align 8, !tbaa !5
  %405 = load ptr, ptr %8, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %405, i32 0, i32 1
  store i32 0, ptr %406, align 4, !tbaa !35
  %407 = load ptr, ptr %20, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.BrotliMetablockHeaderArena, ptr %407, i32 0, i32 3
  store i64 0, ptr %408, align 8, !tbaa !36
  %409 = load ptr, ptr %20, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.BrotliMetablockHeaderArena, ptr %409, i32 0, i32 11
  %411 = getelementptr inbounds [720 x i16], ptr %410, i64 0, i64 16
  %412 = load ptr, ptr %20, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.BrotliMetablockHeaderArena, ptr %412, i32 0, i32 10
  store ptr %411, ptr %413, align 8, !tbaa !38
  %414 = load ptr, ptr %20, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.BrotliMetablockHeaderArena, ptr %414, i32 0, i32 2
  store i32 0, ptr %415, align 8, !tbaa !39
  %416 = load ptr, ptr %20, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.BrotliMetablockHeaderArena, ptr %416, i32 0, i32 0
  store i32 0, ptr %417, align 8, !tbaa !40
  %418 = load ptr, ptr %20, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.BrotliMetablockHeaderArena, ptr %418, i32 0, i32 1
  store i32 0, ptr %419, align 4, !tbaa !41
  %420 = load ptr, ptr %8, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %420, i32 0, i32 0
  store i32 18, ptr %421, align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %422

422:                                              ; preds = %402, %225
  %423 = load ptr, ptr %8, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %423, i32 0, i32 1
  %425 = load i32, ptr %424, align 4, !tbaa !35
  %426 = icmp sge i32 %425, 3
  br i1 %426, label %427, label %430

427:                                              ; preds = %422
  %428 = load ptr, ptr %8, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %428, i32 0, i32 0
  store i32 5, ptr %429, align 8, !tbaa !26
  br label %1001

430:                                              ; preds = %422
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = load ptr, ptr %15, align 8, !tbaa !5
  %433 = load ptr, ptr %8, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %433, i32 0, i32 32
  %435 = load ptr, ptr %8, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %435, i32 0, i32 1
  %437 = load i32, ptr %436, align 4, !tbaa !35
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds [3 x i64], ptr %434, i64 0, i64 %438
  %440 = call i32 @DecodeVarLenUint8(ptr noundef %431, ptr noundef %432, ptr noundef %439)
  store i32 %440, ptr %14, align 4, !tbaa !9
  %441 = load i32, ptr %14, align 4, !tbaa !9
  %442 = icmp ne i32 %441, 1
  br i1 %442, label %443, label %444

443:                                              ; preds = %430
  br label %1001

444:                                              ; preds = %430
  %445 = load ptr, ptr %8, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %445, i32 0, i32 32
  %447 = load ptr, ptr %8, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %447, i32 0, i32 1
  %449 = load i32, ptr %448, align 4, !tbaa !35
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds [3 x i64], ptr %446, i64 0, i64 %450
  %452 = load i64, ptr %451, align 8, !tbaa !11
  %453 = add i64 %452, 1
  store i64 %453, ptr %451, align 8, !tbaa !11
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %454, i32 0, i32 32
  %456 = load ptr, ptr %8, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %456, i32 0, i32 1
  %458 = load i32, ptr %457, align 4, !tbaa !35
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds [3 x i64], ptr %455, i64 0, i64 %459
  %461 = load i64, ptr %460, align 8, !tbaa !11
  %462 = icmp ult i64 %461, 2
  br i1 %462, label %463, label %468

463:                                              ; preds = %444
  %464 = load ptr, ptr %8, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %464, i32 0, i32 1
  %466 = load i32, ptr %465, align 4, !tbaa !35
  %467 = add nsw i32 %466, 1
  store i32 %467, ptr %465, align 4, !tbaa !35
  br label %1001

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

471:                                              ; preds = %468, %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %472 = load ptr, ptr %8, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %472, i32 0, i32 32
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %474, i32 0, i32 1
  %476 = load i32, ptr %475, align 4, !tbaa !35
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds [3 x i64], ptr %473, i64 0, i64 %477
  %479 = load i64, ptr %478, align 8, !tbaa !11
  %480 = add i64 %479, 2
  store i64 %480, ptr %21, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %481 = load ptr, ptr %8, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %481, i32 0, i32 1
  %483 = load i32, ptr %482, align 4, !tbaa !35
  %484 = mul nsw i32 %483, 632
  store i32 %484, ptr %22, align 4, !tbaa !9
  %485 = load i64, ptr %21, align 8, !tbaa !11
  %486 = load i64, ptr %21, align 8, !tbaa !11
  %487 = load ptr, ptr %8, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %487, i32 0, i32 26
  %489 = load ptr, ptr %488, align 8, !tbaa !30
  %490 = load i32, ptr %22, align 4, !tbaa !9
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds %struct.HuffmanCode, ptr %489, i64 %491
  %493 = load ptr, ptr %8, align 8, !tbaa !5
  %494 = call i32 @ReadHuffmanCode(i64 noundef %485, i64 noundef %486, ptr noundef %492, ptr noundef null, ptr noundef %493)
  store i32 %494, ptr %14, align 4, !tbaa !9
  %495 = load i32, ptr %14, align 4, !tbaa !9
  %496 = icmp ne i32 %495, 1
  br i1 %496, label %497, label %498

497:                                              ; preds = %471
  store i32 6, ptr %17, align 4
  br label %501

498:                                              ; preds = %471
  %499 = load ptr, ptr %8, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %499, i32 0, i32 0
  store i32 20, ptr %500, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %501

501:                                              ; preds = %498, %497
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  %502 = load i32, ptr %17, align 4
  switch i32 %502, label %1012 [
    i32 0, label %503
    i32 6, label %1001
  ]

503:                                              ; preds = %501
  br label %504

504:                                              ; preds = %503, %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  store i64 26, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %505 = load ptr, ptr %8, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %505, i32 0, i32 1
  %507 = load i32, ptr %506, align 4, !tbaa !35
  %508 = mul nsw i32 %507, 396
  store i32 %508, ptr %24, align 4, !tbaa !9
  %509 = load i64, ptr %23, align 8, !tbaa !11
  %510 = load i64, ptr %23, align 8, !tbaa !11
  %511 = load ptr, ptr %8, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %511, i32 0, i32 27
  %513 = load ptr, ptr %512, align 8, !tbaa !31
  %514 = load i32, ptr %24, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds %struct.HuffmanCode, ptr %513, i64 %515
  %517 = load ptr, ptr %8, align 8, !tbaa !5
  %518 = call i32 @ReadHuffmanCode(i64 noundef %509, i64 noundef %510, ptr noundef %516, ptr noundef null, ptr noundef %517)
  store i32 %518, ptr %14, align 4, !tbaa !9
  %519 = load i32, ptr %14, align 4, !tbaa !9
  %520 = icmp ne i32 %519, 1
  br i1 %520, label %521, label %522

521:                                              ; preds = %504
  store i32 6, ptr %17, align 4
  br label %525

522:                                              ; preds = %504
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %523, i32 0, i32 0
  store i32 21, ptr %524, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %525

525:                                              ; preds = %522, %521
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  %526 = load i32, ptr %17, align 4
  switch i32 %526, label %1012 [
    i32 0, label %527
    i32 6, label %1001
  ]

527:                                              ; preds = %525
  br label %528

528:                                              ; preds = %527, %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %529 = load ptr, ptr %8, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %529, i32 0, i32 1
  %531 = load i32, ptr %530, align 4, !tbaa !35
  %532 = mul nsw i32 %531, 396
  store i32 %532, ptr %25, align 4, !tbaa !9
  %533 = load ptr, ptr %8, align 8, !tbaa !5
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %534, i32 0, i32 30
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %536, i32 0, i32 1
  %538 = load i32, ptr %537, align 4, !tbaa !35
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds [3 x i64], ptr %535, i64 0, i64 %539
  %541 = load ptr, ptr %8, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %541, i32 0, i32 27
  %543 = load ptr, ptr %542, align 8, !tbaa !31
  %544 = load i32, ptr %25, align 4, !tbaa !9
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds %struct.HuffmanCode, ptr %543, i64 %545
  %547 = load ptr, ptr %15, align 8, !tbaa !5
  %548 = call i32 @SafeReadBlockLength(ptr noundef %533, ptr noundef %540, ptr noundef %546, ptr noundef %547)
  %549 = icmp ne i32 %548, 0
  br i1 %549, label %551, label %550

550:                                              ; preds = %528
  store i32 2, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %17, align 4
  br label %558

551:                                              ; preds = %528
  %552 = load ptr, ptr %8, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %552, i32 0, i32 1
  %554 = load i32, ptr %553, align 4, !tbaa !35
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %553, align 4, !tbaa !35
  %556 = load ptr, ptr %8, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %556, i32 0, i32 0
  store i32 18, ptr %557, align 8, !tbaa !26
  store i32 6, ptr %17, align 4
  br label %558

558:                                              ; preds = %551, %550
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %1001

559:                                              ; preds = %225
  %560 = load ptr, ptr %11, align 8, !tbaa !5
  %561 = load ptr, ptr %12, align 8, !tbaa !5
  %562 = load ptr, ptr %13, align 8, !tbaa !5
  %563 = load ptr, ptr %8, align 8, !tbaa !5
  %564 = call i32 @CopyUncompressedBlockToOutput(ptr noundef %560, ptr noundef %561, ptr noundef %562, ptr noundef %563)
  store i32 %564, ptr %14, align 4, !tbaa !9
  %565 = load i32, ptr %14, align 4, !tbaa !9
  %566 = icmp ne i32 %565, 1
  br i1 %566, label %567, label %568

567:                                              ; preds = %559
  br label %1001

568:                                              ; preds = %559
  %569 = load ptr, ptr %8, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %569, i32 0, i32 0
  store i32 14, ptr %570, align 8, !tbaa !26
  br label %1001

571:                                              ; preds = %225
  %572 = load ptr, ptr %8, align 8, !tbaa !5
  %573 = call i32 @SkipMetadataBlock(ptr noundef %572)
  store i32 %573, ptr %14, align 4, !tbaa !9
  %574 = load i32, ptr %14, align 4, !tbaa !9
  %575 = icmp ne i32 %574, 1
  br i1 %575, label %576, label %577

576:                                              ; preds = %571
  br label %1001

577:                                              ; preds = %571
  %578 = load ptr, ptr %8, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %578, i32 0, i32 0
  store i32 14, ptr %579, align 8, !tbaa !26
  br label %1001

580:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %581 = load ptr, ptr %15, align 8, !tbaa !5
  %582 = call i32 @BrotliSafeReadBits(ptr noundef %581, i64 noundef 6, ptr noundef %26)
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %585, label %584

584:                                              ; preds = %580
  store i32 2, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %17, align 4
  br label %623

585:                                              ; preds = %580
  %586 = load i64, ptr %26, align 8, !tbaa !11
  %587 = call i64 @BitMask(i64 noundef 2)
  %588 = and i64 %586, %587
  %589 = load ptr, ptr %8, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %589, i32 0, i32 34
  store i64 %588, ptr %590, align 8, !tbaa !42
  %591 = load i64, ptr %26, align 8, !tbaa !11
  %592 = lshr i64 %591, 2
  store i64 %592, ptr %26, align 8, !tbaa !11
  %593 = load i64, ptr %26, align 8, !tbaa !11
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %594, i32 0, i32 34
  %596 = load i64, ptr %595, align 8, !tbaa !42
  %597 = shl i64 %593, %596
  %598 = load ptr, ptr %8, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %598, i32 0, i32 35
  store i64 %597, ptr %599, align 8, !tbaa !43
  %600 = load ptr, ptr %8, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %600, i32 0, i32 3
  %602 = load ptr, ptr %601, align 8, !tbaa !28
  %603 = load ptr, ptr %8, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %603, i32 0, i32 5
  %605 = load ptr, ptr %604, align 8, !tbaa !29
  %606 = load ptr, ptr %8, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %606, i32 0, i32 32
  %608 = getelementptr inbounds [3 x i64], ptr %607, i64 0, i64 0
  %609 = load i64, ptr %608, align 8, !tbaa !11
  %610 = call ptr %602(ptr noundef %605, i64 noundef %609)
  %611 = load ptr, ptr %8, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %611, i32 0, i32 58
  store ptr %610, ptr %612, align 8, !tbaa !44
  %613 = load ptr, ptr %8, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %613, i32 0, i32 58
  %615 = load ptr, ptr %614, align 8, !tbaa !44
  %616 = icmp eq ptr %615, null
  br i1 %616, label %617, label %618

617:                                              ; preds = %585
  store i32 -21, ptr %14, align 4, !tbaa !9
  store i32 6, ptr %17, align 4
  br label %623

618:                                              ; preds = %585
  %619 = load ptr, ptr %8, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %619, i32 0, i32 1
  store i32 0, ptr %620, align 4, !tbaa !35
  %621 = load ptr, ptr %8, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %621, i32 0, i32 0
  store i32 6, ptr %622, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %623

623:                                              ; preds = %618, %617, %584
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %624 = load i32, ptr %17, align 4
  switch i32 %624, label %1012 [
    i32 0, label %625
    i32 6, label %1001
  ]

625:                                              ; preds = %623
  br label %626

626:                                              ; preds = %625, %225
  %627 = load ptr, ptr %8, align 8, !tbaa !5
  %628 = call i32 @ReadContextModes(ptr noundef %627)
  store i32 %628, ptr %14, align 4, !tbaa !9
  %629 = load i32, ptr %14, align 4, !tbaa !9
  %630 = icmp ne i32 %629, 1
  br i1 %630, label %631, label %632

631:                                              ; preds = %626
  br label %1001

632:                                              ; preds = %626
  %633 = load ptr, ptr %8, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %633, i32 0, i32 0
  store i32 22, ptr %634, align 8, !tbaa !26
  br label %635

635:                                              ; preds = %632, %225
  %636 = load ptr, ptr %8, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %636, i32 0, i32 32
  %638 = getelementptr inbounds [3 x i64], ptr %637, i64 0, i64 0
  %639 = load i64, ptr %638, align 8, !tbaa !11
  %640 = shl i64 %639, 6
  %641 = load ptr, ptr %8, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %641, i32 0, i32 56
  %643 = load ptr, ptr %8, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %643, i32 0, i32 57
  %645 = load ptr, ptr %8, align 8, !tbaa !5
  %646 = call i32 @DecodeContextMap(i64 noundef %640, ptr noundef %642, ptr noundef %644, ptr noundef %645)
  store i32 %646, ptr %14, align 4, !tbaa !9
  %647 = load i32, ptr %14, align 4, !tbaa !9
  %648 = icmp ne i32 %647, 1
  br i1 %648, label %649, label %650

649:                                              ; preds = %635
  br label %1001

650:                                              ; preds = %635
  %651 = load ptr, ptr %8, align 8, !tbaa !5
  call void @DetectTrivialLiteralBlockTypes(ptr noundef %651)
  %652 = load ptr, ptr %8, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %652, i32 0, i32 0
  store i32 23, ptr %653, align 8, !tbaa !26
  br label %654

654:                                              ; preds = %650, %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %655 = load ptr, ptr %8, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %655, i32 0, i32 34
  %657 = load i64, ptr %656, align 8, !tbaa !42
  store i64 %657, ptr %27, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %658 = load ptr, ptr %8, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %658, i32 0, i32 35
  %660 = load i64, ptr %659, align 8, !tbaa !43
  store i64 %660, ptr %28, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %661 = load i64, ptr %28, align 8, !tbaa !11
  %662 = add i64 16, %661
  %663 = load i64, ptr %27, align 8, !tbaa !11
  %664 = add i64 %663, 1
  %665 = trunc i64 %664 to i32
  %666 = shl i32 24, %665
  %667 = zext i32 %666 to i64
  %668 = add i64 %662, %667
  store i64 %668, ptr %29, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %669 = load i64, ptr %29, align 8, !tbaa !11
  store i64 %669, ptr %30, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 1, ptr %31, align 4, !tbaa !9
  %670 = load ptr, ptr %8, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %670, i32 0, i32 55
  %672 = load i32, ptr %671, align 4
  %673 = lshr i32 %672, 5
  %674 = and i32 %673, 1
  %675 = icmp ne i32 %674, 0
  br i1 %675, label %676, label %693

676:                                              ; preds = %654
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %677 = load i64, ptr %27, align 8, !tbaa !11
  %678 = trunc i64 %677 to i32
  %679 = load i64, ptr %28, align 8, !tbaa !11
  %680 = trunc i64 %679 to i32
  %681 = call i64 @BrotliCalculateDistanceCodeLimit(i32 noundef 2147483644, i32 noundef %678, i32 noundef %680)
  store i64 %681, ptr %32, align 4
  %682 = load i64, ptr %28, align 8, !tbaa !11
  %683 = add i64 16, %682
  %684 = load i64, ptr %27, align 8, !tbaa !11
  %685 = add i64 %684, 1
  %686 = trunc i64 %685 to i32
  %687 = shl i32 62, %686
  %688 = zext i32 %687 to i64
  %689 = add i64 %683, %688
  store i64 %689, ptr %29, align 8, !tbaa !11
  %690 = getelementptr inbounds %struct.BrotliDistanceCodeLimit, ptr %32, i32 0, i32 0
  %691 = load i32, ptr %690, align 4, !tbaa !45
  %692 = zext i32 %691 to i64
  store i64 %692, ptr %30, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %693

693:                                              ; preds = %676, %654
  %694 = load ptr, ptr %8, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %694, i32 0, i32 32
  %696 = getelementptr inbounds [3 x i64], ptr %695, i64 0, i64 2
  %697 = load i64, ptr %696, align 8, !tbaa !11
  %698 = shl i64 %697, 2
  %699 = load ptr, ptr %8, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %699, i32 0, i32 36
  %701 = load ptr, ptr %8, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %701, i32 0, i32 37
  %703 = load ptr, ptr %8, align 8, !tbaa !5
  %704 = call i32 @DecodeContextMap(i64 noundef %698, ptr noundef %700, ptr noundef %702, ptr noundef %703)
  store i32 %704, ptr %14, align 4, !tbaa !9
  %705 = load i32, ptr %14, align 4, !tbaa !9
  %706 = icmp ne i32 %705, 1
  br i1 %706, label %707, label %708

707:                                              ; preds = %693
  store i32 6, ptr %17, align 4
  br label %753

708:                                              ; preds = %693
  %709 = load ptr, ptr %8, align 8, !tbaa !5
  %710 = load ptr, ptr %8, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %710, i32 0, i32 23
  %712 = load ptr, ptr %8, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %712, i32 0, i32 56
  %714 = load i64, ptr %713, align 8, !tbaa !47
  %715 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef %709, ptr noundef %711, i64 noundef 256, i64 noundef 256, i64 noundef %714)
  %716 = load i32, ptr %31, align 4, !tbaa !9
  %717 = and i32 %716, %715
  store i32 %717, ptr %31, align 4, !tbaa !9
  %718 = load ptr, ptr %8, align 8, !tbaa !5
  %719 = load ptr, ptr %8, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %719, i32 0, i32 24
  %721 = load ptr, ptr %8, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %721, i32 0, i32 32
  %723 = getelementptr inbounds [3 x i64], ptr %722, i64 0, i64 1
  %724 = load i64, ptr %723, align 8, !tbaa !11
  %725 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef %718, ptr noundef %720, i64 noundef 704, i64 noundef 704, i64 noundef %724)
  %726 = load i32, ptr %31, align 4, !tbaa !9
  %727 = and i32 %726, %725
  store i32 %727, ptr %31, align 4, !tbaa !9
  %728 = load ptr, ptr %8, align 8, !tbaa !5
  %729 = load ptr, ptr %8, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %729, i32 0, i32 25
  %731 = load i64, ptr %29, align 8, !tbaa !11
  %732 = load i64, ptr %30, align 8, !tbaa !11
  %733 = load ptr, ptr %8, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %733, i32 0, i32 36
  %735 = load i64, ptr %734, align 8, !tbaa !48
  %736 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef %728, ptr noundef %730, i64 noundef %731, i64 noundef %732, i64 noundef %735)
  %737 = load i32, ptr %31, align 4, !tbaa !9
  %738 = and i32 %737, %736
  store i32 %738, ptr %31, align 4, !tbaa !9
  %739 = load i32, ptr %31, align 4, !tbaa !9
  %740 = icmp ne i32 %739, 0
  br i1 %740, label %748, label %741

741:                                              ; preds = %708
  %742 = load ptr, ptr %8, align 8, !tbaa !5
  %743 = load i64, ptr %16, align 8, !tbaa !11
  %744 = load ptr, ptr %9, align 8, !tbaa !5
  %745 = load i64, ptr %744, align 8, !tbaa !11
  %746 = sub i64 %743, %745
  %747 = call i32 @SaveErrorCode(ptr noundef %742, i32 noundef -22, i64 noundef %746)
  store i32 %747, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %753

748:                                              ; preds = %708
  %749 = load ptr, ptr %8, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %749, i32 0, i32 1
  store i32 0, ptr %750, align 4, !tbaa !35
  %751 = load ptr, ptr %8, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %751, i32 0, i32 0
  store i32 24, ptr %752, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %753

753:                                              ; preds = %748, %741, %707
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  %754 = load i32, ptr %17, align 4
  switch i32 %754, label %1010 [
    i32 0, label %755
    i32 6, label %1001
  ]

755:                                              ; preds = %753
  br label %756

756:                                              ; preds = %755, %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  store ptr null, ptr %33, align 8, !tbaa !5
  %757 = load ptr, ptr %8, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %757, i32 0, i32 1
  %759 = load i32, ptr %758, align 4, !tbaa !35
  switch i32 %759, label %769 [
    i32 0, label %760
    i32 1, label %763
    i32 2, label %766
  ]

760:                                              ; preds = %756
  %761 = load ptr, ptr %8, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %761, i32 0, i32 23
  store ptr %762, ptr %33, align 8, !tbaa !5
  br label %776

763:                                              ; preds = %756
  %764 = load ptr, ptr %8, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %764, i32 0, i32 24
  store ptr %765, ptr %33, align 8, !tbaa !5
  br label %776

766:                                              ; preds = %756
  %767 = load ptr, ptr %8, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %767, i32 0, i32 25
  store ptr %768, ptr %33, align 8, !tbaa !5
  br label %776

769:                                              ; preds = %756
  %770 = load ptr, ptr %8, align 8, !tbaa !5
  %771 = load i64, ptr %16, align 8, !tbaa !11
  %772 = load ptr, ptr %9, align 8, !tbaa !5
  %773 = load i64, ptr %772, align 8, !tbaa !11
  %774 = sub i64 %771, %773
  %775 = call i32 @SaveErrorCode(ptr noundef %770, i32 noundef -31, i64 noundef %774)
  store i32 %775, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %796

776:                                              ; preds = %766, %763, %760
  %777 = load ptr, ptr %33, align 8, !tbaa !5
  %778 = load ptr, ptr %8, align 8, !tbaa !5
  %779 = call i32 @HuffmanTreeGroupDecode(ptr noundef %777, ptr noundef %778)
  store i32 %779, ptr %14, align 4, !tbaa !9
  %780 = load i32, ptr %14, align 4, !tbaa !9
  %781 = icmp ne i32 %780, 1
  br i1 %781, label %782, label %783

782:                                              ; preds = %776
  store i32 6, ptr %17, align 4
  br label %796

783:                                              ; preds = %776
  %784 = load ptr, ptr %8, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %784, i32 0, i32 1
  %786 = load i32, ptr %785, align 4, !tbaa !35
  %787 = add nsw i32 %786, 1
  store i32 %787, ptr %785, align 4, !tbaa !35
  %788 = load ptr, ptr %8, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %788, i32 0, i32 1
  %790 = load i32, ptr %789, align 4, !tbaa !35
  %791 = icmp slt i32 %790, 3
  br i1 %791, label %792, label %793

792:                                              ; preds = %783
  store i32 6, ptr %17, align 4
  br label %796

793:                                              ; preds = %783
  %794 = load ptr, ptr %8, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %794, i32 0, i32 0
  store i32 25, ptr %795, align 8, !tbaa !26
  store i32 0, ptr %17, align 4
  br label %796

796:                                              ; preds = %793, %792, %782, %769
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  %797 = load i32, ptr %17, align 4
  switch i32 %797, label %1010 [
    i32 0, label %798
    i32 6, label %1001
  ]

798:                                              ; preds = %796
  br label %799

799:                                              ; preds = %798, %225
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  call void @PrepareLiteralDecoding(ptr noundef %800)
  %801 = load ptr, ptr %8, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %801, i32 0, i32 37
  %803 = load ptr, ptr %802, align 8, !tbaa !49
  %804 = load ptr, ptr %8, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %804, i32 0, i32 22
  store ptr %803, ptr %805, align 8, !tbaa !50
  %806 = load ptr, ptr %8, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %806, i32 0, i32 24
  %808 = getelementptr inbounds %struct.HuffmanTreeGroup, ptr %807, i32 0, i32 0
  %809 = load ptr, ptr %808, align 8, !tbaa !51
  %810 = getelementptr inbounds ptr, ptr %809, i64 0
  %811 = load ptr, ptr %810, align 8, !tbaa !5
  %812 = load ptr, ptr %8, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %812, i32 0, i32 19
  store ptr %811, ptr %813, align 8, !tbaa !52
  %814 = load ptr, ptr %8, align 8, !tbaa !5
  %815 = call i32 @BrotliEnsureRingBuffer(ptr noundef %814)
  %816 = icmp ne i32 %815, 0
  br i1 %816, label %818, label %817

817:                                              ; preds = %799
  store i32 -27, ptr %14, align 4, !tbaa !9
  br label %1001

818:                                              ; preds = %799
  %819 = load ptr, ptr %8, align 8, !tbaa !5
  call void @CalculateDistanceLut(ptr noundef %819)
  %820 = load ptr, ptr %8, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %820, i32 0, i32 0
  store i32 7, ptr %821, align 8, !tbaa !26
  br label %822

822:                                              ; preds = %818, %225, %225, %225, %225
  %823 = load ptr, ptr %8, align 8, !tbaa !5
  %824 = call i32 @ProcessCommands(ptr noundef %823)
  store i32 %824, ptr %14, align 4, !tbaa !9
  %825 = load i32, ptr %14, align 4, !tbaa !9
  %826 = icmp eq i32 %825, 2
  br i1 %826, label %827, label %830

827:                                              ; preds = %822
  %828 = load ptr, ptr %8, align 8, !tbaa !5
  %829 = call i32 @SafeProcessCommands(ptr noundef %828)
  store i32 %829, ptr %14, align 4, !tbaa !9
  br label %830

830:                                              ; preds = %827, %822
  br label %1001

831:                                              ; preds = %225, %225, %225
  %832 = load ptr, ptr %8, align 8, !tbaa !5
  %833 = load ptr, ptr %11, align 8, !tbaa !5
  %834 = load ptr, ptr %12, align 8, !tbaa !5
  %835 = load ptr, ptr %13, align 8, !tbaa !5
  %836 = call i32 @WriteRingBuffer(ptr noundef %832, ptr noundef %833, ptr noundef %834, ptr noundef %835, i32 noundef 0)
  store i32 %836, ptr %14, align 4, !tbaa !9
  %837 = load i32, ptr %14, align 4, !tbaa !9
  %838 = icmp ne i32 %837, 1
  br i1 %838, label %839, label %840

839:                                              ; preds = %831
  br label %1001

840:                                              ; preds = %831
  %841 = load ptr, ptr %8, align 8, !tbaa !5
  call void @WrapRingBuffer(ptr noundef %841)
  %842 = load ptr, ptr %8, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %842, i32 0, i32 11
  %844 = load i32, ptr %843, align 4, !tbaa !53
  %845 = load ptr, ptr %8, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %845, i32 0, i32 55
  %847 = load i32, ptr %846, align 4
  %848 = lshr i32 %847, 6
  %849 = and i32 %848, 63
  %850 = shl i32 1, %849
  %851 = icmp eq i32 %844, %850
  br i1 %851, label %852, label %858

852:                                              ; preds = %840
  %853 = load ptr, ptr %8, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %853, i32 0, i32 9
  %855 = load i32, ptr %854, align 4, !tbaa !27
  %856 = load ptr, ptr %8, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %856, i32 0, i32 10
  store i32 %855, ptr %857, align 8, !tbaa !54
  br label %858

858:                                              ; preds = %852, %840
  %859 = load ptr, ptr %8, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %859, i32 0, i32 0
  %861 = load i32, ptr %860, align 8, !tbaa !26
  %862 = icmp eq i32 %861, 15
  br i1 %862, label %863, label %910

863:                                              ; preds = %858
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %864 = load ptr, ptr %8, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %864, i32 0, i32 60
  %866 = load ptr, ptr %865, align 8, !tbaa !55
  store ptr %866, ptr %34, align 8, !tbaa !5
  %867 = load ptr, ptr %34, align 8, !tbaa !5
  %868 = icmp ne ptr %867, null
  br i1 %868, label %869, label %896

869:                                              ; preds = %863
  %870 = load ptr, ptr %34, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.BrotliDecoderCompoundDictionary, ptr %870, i32 0, i32 4
  %872 = load i32, ptr %871, align 8, !tbaa !56
  %873 = load ptr, ptr %34, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.BrotliDecoderCompoundDictionary, ptr %873, i32 0, i32 5
  %875 = load i32, ptr %874, align 4, !tbaa !58
  %876 = icmp ne i32 %872, %875
  br i1 %876, label %877, label %896

877:                                              ; preds = %869
  %878 = load ptr, ptr %8, align 8, !tbaa !5
  %879 = load ptr, ptr %8, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %879, i32 0, i32 8
  %881 = load i32, ptr %880, align 8, !tbaa !59
  %882 = call i32 @CopyFromCompoundDictionary(ptr noundef %878, i32 noundef %881)
  %883 = load ptr, ptr %8, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %883, i32 0, i32 8
  %885 = load i32, ptr %884, align 8, !tbaa !59
  %886 = add nsw i32 %885, %882
  store i32 %886, ptr %884, align 8, !tbaa !59
  %887 = load ptr, ptr %8, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %887, i32 0, i32 8
  %889 = load i32, ptr %888, align 8, !tbaa !59
  %890 = load ptr, ptr %8, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %890, i32 0, i32 11
  %892 = load i32, ptr %891, align 4, !tbaa !53
  %893 = icmp sge i32 %889, %892
  br i1 %893, label %894, label %895

894:                                              ; preds = %877
  store i32 3, ptr %17, align 4
  br label %908

895:                                              ; preds = %877
  br label %896

896:                                              ; preds = %895, %869, %863
  %897 = load ptr, ptr %8, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %897, i32 0, i32 16
  %899 = load i32, ptr %898, align 4, !tbaa !34
  %900 = icmp eq i32 %899, 0
  br i1 %900, label %901, label %904

901:                                              ; preds = %896
  %902 = load ptr, ptr %8, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %902, i32 0, i32 0
  store i32 14, ptr %903, align 8, !tbaa !26
  br label %907

904:                                              ; preds = %896
  %905 = load ptr, ptr %8, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %905, i32 0, i32 0
  store i32 7, ptr %906, align 8, !tbaa !26
  br label %907

907:                                              ; preds = %904, %901
  store i32 6, ptr %17, align 4
  br label %908

908:                                              ; preds = %907, %894
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  %909 = load i32, ptr %17, align 4
  switch i32 %909, label %1012 [
    i32 3, label %95
    i32 6, label %1001
  ]

910:                                              ; preds = %858
  %911 = load ptr, ptr %8, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %911, i32 0, i32 0
  %913 = load i32, ptr %912, align 8, !tbaa !26
  %914 = icmp eq i32 %913, 16
  br i1 %914, label %915, label %918

915:                                              ; preds = %910
  %916 = load ptr, ptr %8, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %916, i32 0, i32 0
  store i32 10, ptr %917, align 8, !tbaa !26
  br label %938

918:                                              ; preds = %910
  %919 = load ptr, ptr %8, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %919, i32 0, i32 1
  %921 = load i32, ptr %920, align 4, !tbaa !35
  %922 = icmp eq i32 %921, 0
  br i1 %922, label %923, label %935

923:                                              ; preds = %918
  %924 = load ptr, ptr %8, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %924, i32 0, i32 16
  %926 = load i32, ptr %925, align 4, !tbaa !34
  %927 = icmp eq i32 %926, 0
  br i1 %927, label %928, label %931

928:                                              ; preds = %923
  %929 = load ptr, ptr %8, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %929, i32 0, i32 0
  store i32 14, ptr %930, align 8, !tbaa !26
  br label %934

931:                                              ; preds = %923
  %932 = load ptr, ptr %8, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %932, i32 0, i32 0
  store i32 9, ptr %933, align 8, !tbaa !26
  br label %934

934:                                              ; preds = %931, %928
  br label %1001

935:                                              ; preds = %918
  %936 = load ptr, ptr %8, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %936, i32 0, i32 0
  store i32 8, ptr %937, align 8, !tbaa !26
  br label %938

938:                                              ; preds = %935, %915
  br label %939

939:                                              ; preds = %938
  br label %1001

940:                                              ; preds = %225
  %941 = load ptr, ptr %8, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %941, i32 0, i32 16
  %943 = load i32, ptr %942, align 4, !tbaa !34
  %944 = icmp slt i32 %943, 0
  br i1 %944, label %945, label %946

945:                                              ; preds = %940
  store i32 -10, ptr %14, align 4, !tbaa !9
  br label %1001

946:                                              ; preds = %940
  %947 = load ptr, ptr %8, align 8, !tbaa !5
  call void @BrotliDecoderStateCleanupAfterMetablock(ptr noundef %947)
  %948 = load ptr, ptr %8, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %948, i32 0, i32 55
  %950 = load i32, ptr %949, align 4
  %951 = and i32 %950, 1
  %952 = icmp ne i32 %951, 0
  br i1 %952, label %956, label %953

953:                                              ; preds = %946
  %954 = load ptr, ptr %8, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %954, i32 0, i32 0
  store i32 3, ptr %955, align 8, !tbaa !26
  br label %1001

956:                                              ; preds = %946
  %957 = load ptr, ptr %15, align 8, !tbaa !5
  %958 = call i32 @BrotliJumpToByteBoundary(ptr noundef %957)
  %959 = icmp ne i32 %958, 0
  br i1 %959, label %961, label %960

960:                                              ; preds = %956
  store i32 -15, ptr %14, align 4, !tbaa !9
  br label %1001

961:                                              ; preds = %956
  %962 = load ptr, ptr %8, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %962, i32 0, i32 7
  %964 = load i64, ptr %963, align 8, !tbaa !19
  %965 = icmp eq i64 %964, 0
  br i1 %965, label %966, label %975

966:                                              ; preds = %961
  %967 = load ptr, ptr %15, align 8, !tbaa !5
  call void @BrotliBitReaderUnload(ptr noundef %967)
  %968 = load ptr, ptr %15, align 8, !tbaa !5
  %969 = call i64 @BrotliBitReaderGetAvailIn(ptr noundef %968)
  %970 = load ptr, ptr %9, align 8, !tbaa !5
  store i64 %969, ptr %970, align 8, !tbaa !11
  %971 = load ptr, ptr %15, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.BrotliBitReader, ptr %971, i32 0, i32 2
  %973 = load ptr, ptr %972, align 8, !tbaa !21
  %974 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %973, ptr %974, align 8, !tbaa !5
  br label %975

975:                                              ; preds = %966, %961
  %976 = load ptr, ptr %8, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %976, i32 0, i32 0
  store i32 26, ptr %977, align 8, !tbaa !26
  br label %978

978:                                              ; preds = %975, %225
  %979 = load ptr, ptr %8, align 8, !tbaa !5
  %980 = getelementptr inbounds %struct.BrotliDecoderStateStruct, ptr %979, i32 0, i32 17
  %981 = load ptr, ptr %980, align 8, !tbaa !20
  %982 = icmp ne ptr %981, null
  br i1 %982, label %983, label %993

983:                                              ; preds = %978
  %984 = load ptr, ptr %8, align 8, !tbaa !5
  %985 = load ptr, ptr %11, align 8, !tbaa !5
  %986 = load ptr, ptr %12, align 8, !tbaa !5
  %987 = load ptr, ptr %13, align 8, !tbaa !5
  %988 = call i32 @WriteRingBuffer(ptr noundef %984, ptr noundef %985, ptr noundef %986, ptr noundef %987, i32 noundef 1)
  store i32 %988, ptr %14, align 4, !tbaa !9
  %989 = load i32, ptr %14, align 4, !tbaa !9
  %990 = icmp ne i32 %989, 1
  br i1 %990, label %991, label %992

991:                                              ; preds = %983
  br label %1001

992:                                              ; preds = %983
  br label %993

993:                                              ; preds = %992, %978
  %994 = load ptr, ptr %8, align 8, !tbaa !5
  %995 = load i32, ptr %14, align 4, !tbaa !9
  %996 = load i64, ptr %16, align 8, !tbaa !11
  %997 = load ptr, ptr %9, align 8, !tbaa !5
  %998 = load i64, ptr %997, align 8, !tbaa !11
  %999 = sub i64 %996, %998
  %1000 = call i32 @SaveErrorCode(ptr noundef %994, i32 noundef %995, i64 noundef %999)
  store i32 %1000, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %1010

1001:                                             ; preds = %991, %960, %953, %945, %939, %934, %908, %839, %830, %817, %796, %753, %649, %631, %623, %577, %576, %568, %567, %558, %525, %501, %463, %443, %427, %396, %385, %379, %352, %333, %313, %287, %251, %248, %240, %233, %225
  br label %95

1002:                                             ; preds = %224, %206, %173, %117
  %1003 = load ptr, ptr %8, align 8, !tbaa !5
  %1004 = load i32, ptr %14, align 4, !tbaa !9
  %1005 = load i64, ptr %16, align 8, !tbaa !11
  %1006 = load ptr, ptr %9, align 8, !tbaa !5
  %1007 = load i64, ptr %1006, align 8, !tbaa !11
  %1008 = sub i64 %1005, %1007
  %1009 = call i32 @SaveErrorCode(ptr noundef %1003, i32 noundef %1004, i64 noundef %1008)
  store i32 %1009, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %1010

1010:                                             ; preds = %1002, %993, %796, %753, %63, %51
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  %1011 = load i32, ptr %7, align 4
  ret i32 %1011

1012:                                             ; preds = %908, %623, %525, %501, %287, %117
  unreachable
}

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

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

; 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 i64 @BrotliBitReaderGetAvailIn(ptr noundef) #3

; 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, ptr noundef) #1

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

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 @DecodeVarLenUint8(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @ReadHuffmanCode(i64 noundef, i64 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: noinline nounwind uwtable
declare hidden i32 @CopyUncompressedBlockToOutput(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

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

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

declare hidden i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 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: nounwind uwtable
declare hidden void @CalculateDistanceLut(ptr noundef) #1

; 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

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

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, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !12, i64 432}
!14 = !{!"BrotliDecoderStateStruct", !10, i64 0, !10, i64 4, !15, i64 8, !6, i64 48, !6, i64 56, !6, i64 64, !7, i64 72, !12, i64 80, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !7, i64 112, !10, i64 128, !10, i64 132, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !16, i64 184, !16, i64 208, !16, i64 232, !6, i64 256, !6, i64 264, !10, i64 272, !10, i64 276, !7, i64 280, !12, i64 304, !7, i64 312, !7, i64 336, !12, i64 384, !12, i64 392, !12, i64 400, !6, i64 408, !6, i64 416, !12, i64 424, !12, i64 432, !12, i64 440, !7, i64 448, !10, i64 708, !10, i64 712, !7, i64 716, !6, i64 720, !6, i64 728, !6, i64 736, !12, i64 744, !10, i64 752, !10, i64 756, !10, i64 760, !10, i64 764, !10, i64 768, !10, i64 772, !10, i64 772, !10, i64 772, !10, i64 772, !10, i64 772, !10, i64 772, !10, i64 772, !10, i64 773, !12, i64 776, !6, i64 784, !6, i64 792, !6, i64 800, !6, i64 808, !7, i64 816, !7, i64 848}
!15 = !{!"", !12, i64 0, !12, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!16 = !{!"", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 18, !17, i64 20}
!17 = !{!"short", !7, i64 0}
!18 = !{!14, !10, i64 128}
!19 = !{!14, !12, i64 80}
!20 = !{!14, !6, i64 136}
!21 = !{!15, !6, i64 16}
!22 = !{!15, !6, i64 32}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!14, !10, i64 0}
!27 = !{!14, !10, i64 92}
!28 = !{!14, !6, i64 48}
!29 = !{!14, !6, i64 64}
!30 = !{!14, !6, i64 256}
!31 = !{!14, !6, i64 264}
!32 = !{!14, !6, i64 720}
!33 = !{!14, !6, i64 736}
!34 = !{!14, !10, i64 132}
!35 = !{!14, !10, i64 4}
!36 = !{!37, !12, i64 16}
!37 = !{!"BrotliMetablockHeaderArena", !10, i64 0, !10, i64 4, !10, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !7, i64 64, !6, i64 192, !7, i64 200, !7, i64 1640, !7, i64 1768, !7, i64 1786, !10, i64 1820, !6, i64 1824, !12, i64 1832, !12, i64 1840, !12, i64 1848, !7, i64 1856}
!38 = !{!37, !6, i64 192}
!39 = !{!37, !10, i64 8}
!40 = !{!37, !10, i64 0}
!41 = !{!37, !10, i64 4}
!42 = !{!14, !12, i64 384}
!43 = !{!14, !12, i64 392}
!44 = !{!14, !6, i64 792}
!45 = !{!46, !10, i64 0}
!46 = !{!"BrotliDistanceCodeLimit", !10, i64 0, !10, i64 4}
!47 = !{!14, !12, i64 776}
!48 = !{!14, !12, i64 400}
!49 = !{!14, !6, i64 408}
!50 = !{!14, !6, i64 176}
!51 = !{!14, !6, i64 208}
!52 = !{!14, !6, i64 152}
!53 = !{!14, !10, i64 100}
!54 = !{!14, !10, i64 96}
!55 = !{!14, !6, i64 808}
!56 = !{!57, !10, i64 16}
!57 = !{!"BrotliDecoderCompoundDictionary", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 152, !10, i64 216, !7, i64 220}
!58 = !{!57, !10, i64 20}
!59 = !{!14, !10, i64 88}


; 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 i64, align 8
  %8 = alloca i64, align 8
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %10 = load i64, ptr %1, align 8, !tbaa !5
  %.not = icmp eq ptr %5, null
  br i1 %.not, label %14, label %11

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

14:                                               ; preds = %11, %6
  %15 = getelementptr inbounds i8, ptr %0, i64 128
  %16 = load i32, ptr %15, align 8, !tbaa !16
  %17 = icmp slt i32 %16, 0
  br i1 %17, label %382, label %18

18:                                               ; preds = %14
  %19 = load i64, ptr %3, align 8, !tbaa !5
  %.not358 = icmp eq i64 %19, 0
  br i1 %.not358, label %27, label %20

20:                                               ; preds = %18
  %.not359 = icmp eq ptr %4, null
  br i1 %.not359, label %23, label %21

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

23:                                               ; preds = %21, %20
  %24 = load i64, ptr %1, align 8, !tbaa !5
  %25 = sub i64 %10, %24
  %26 = tail call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef -20, i64 noundef %25)
  br label %382

27:                                               ; preds = %21, %18
  %spec.select = phi ptr [ %4, %21 ], [ null, %18 ]
  %28 = getelementptr inbounds i8, ptr %0, i64 80
  %29 = load i64, ptr %28, align 8, !tbaa !18
  %30 = icmp eq i64 %29, 0
  br i1 %30, label %31, label %34

31:                                               ; preds = %27
  %32 = load ptr, ptr %2, align 8, !tbaa !17
  %33 = load i64, ptr %1, align 8, !tbaa !5
  tail call void @BrotliBitReaderSetInput(ptr noundef nonnull %9, ptr noundef %32, i64 noundef %33)
  br label %36

34:                                               ; preds = %27
  %35 = getelementptr inbounds i8, ptr %0, i64 72
  tail call void @BrotliBitReaderSetInput(ptr noundef nonnull %9, ptr noundef nonnull %35, i64 noundef %29)
  br label %36

36:                                               ; preds = %34, %31
  %.0310 = phi i32 [ 1, %31 ], [ 2, %34 ]
  %37 = getelementptr inbounds i8, ptr %0, i64 136
  %38 = getelementptr inbounds i8, ptr %0, i64 24
  %39 = getelementptr inbounds i8, ptr %0, i64 40
  %40 = getelementptr inbounds i8, ptr %0, i64 72
  %41 = getelementptr inbounds i8, ptr %0, i64 132
  %42 = getelementptr inbounds i8, ptr %0, i64 772
  %43 = getelementptr inbounds i8, ptr %0, i64 100
  %44 = getelementptr inbounds i8, ptr %0, i64 92
  %45 = getelementptr inbounds i8, ptr %0, i64 96
  %46 = getelementptr inbounds i8, ptr %0, i64 808
  %47 = getelementptr inbounds i8, ptr %0, i64 88
  %48 = getelementptr inbounds i8, ptr %0, i64 4
  %49 = getelementptr inbounds i8, ptr %0, i64 384
  %50 = getelementptr inbounds i8, ptr %0, i64 392
  %51 = getelementptr inbounds i8, ptr %0, i64 48
  %52 = getelementptr inbounds i8, ptr %0, i64 64
  %53 = getelementptr inbounds i8, ptr %0, i64 312
  %54 = getelementptr inbounds i8, ptr %0, i64 792
  %55 = getelementptr inbounds i8, ptr %0, i64 776
  %56 = getelementptr inbounds i8, ptr %0, i64 784
  %57 = getelementptr inbounds i8, ptr %0, i64 328
  %58 = getelementptr inbounds i8, ptr %0, i64 400
  %59 = getelementptr inbounds i8, ptr %0, i64 408
  %60 = getelementptr inbounds i8, ptr %0, i64 184
  %61 = getelementptr inbounds i8, ptr %0, i64 208
  %62 = getelementptr inbounds i8, ptr %0, i64 320
  %63 = getelementptr inbounds i8, ptr %0, i64 232
  %64 = getelementptr inbounds i8, ptr %0, i64 176
  %65 = getelementptr inbounds i8, ptr %0, i64 152
  %66 = getelementptr inbounds i8, ptr %0, i64 256
  %67 = getelementptr inbounds i8, ptr %0, i64 264
  %68 = getelementptr inbounds i8, ptr %0, i64 720
  %69 = getelementptr inbounds i8, ptr %0, i64 736
  %70 = getelementptr inbounds i8, ptr %0, i64 848
  %71 = getelementptr inbounds i8, ptr %0, i64 864
  %72 = getelementptr inbounds i8, ptr %0, i64 1080
  %73 = getelementptr inbounds i8, ptr %0, i64 1040
  %74 = getelementptr inbounds i8, ptr %0, i64 856
  %75 = getelementptr inbounds i8, ptr %0, i64 852
  %76 = getelementptr inbounds i8, ptr %0, i64 280
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %36
  %.1311 = phi i32 [ %.0310, %36 ], [ %.1311.be, %.backedge.backedge ]
  switch i32 %.1311, label %116 [
    i32 1, label %122
    i32 2, label %77
  ]

77:                                               ; preds = %.backedge
  %78 = load ptr, ptr %37, align 8, !tbaa !19
  %.not397 = icmp eq ptr %78, null
  br i1 %.not397, label %82, label %79

79:                                               ; preds = %77
  %80 = call i32 @WriteRingBuffer(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, i32 noundef 1)
  %81 = icmp slt i32 %80, 0
  br i1 %81, label %.loopexit, label %82

82:                                               ; preds = %79, %77
  %83 = load i64, ptr %28, align 8, !tbaa !18
  %.not398 = icmp eq i64 %83, 0
  %84 = load ptr, ptr %38, align 8, !tbaa !20
  br i1 %.not398, label %103, label %85

85:                                               ; preds = %82
  %86 = load ptr, ptr %39, align 8, !tbaa !21
  %87 = icmp eq ptr %84, %86
  br i1 %87, label %88, label %91

88:                                               ; preds = %85
  store i64 0, ptr %28, align 8, !tbaa !18
  %89 = load ptr, ptr %2, align 8, !tbaa !17
  %90 = load i64, ptr %1, align 8, !tbaa !5
  call void @BrotliBitReaderSetInput(ptr noundef nonnull %9, ptr noundef %89, i64 noundef %90)
  br label %.backedge.backedge

91:                                               ; preds = %85
  %92 = load i64, ptr %1, align 8, !tbaa !5
  %.not401 = icmp eq i64 %92, 0
  br i1 %.not401, label %.loopexit, label %93

93:                                               ; preds = %91
  %94 = load ptr, ptr %2, align 8, !tbaa !17
  %95 = load i8, ptr %94, align 1, !tbaa !22
  %96 = getelementptr inbounds [8 x i8], ptr %40, i64 0, i64 %83
  store i8 %95, ptr %96, align 1, !tbaa !22
  %97 = load i64, ptr %28, align 8, !tbaa !18
  %98 = add i64 %97, 1
  store i64 %98, ptr %28, align 8, !tbaa !18
  call void @BrotliBitReaderSetInput(ptr noundef nonnull %9, ptr noundef nonnull %40, i64 noundef %98)
  %99 = load ptr, ptr %2, align 8, !tbaa !17
  %100 = getelementptr inbounds i8, ptr %99, i64 1
  store ptr %100, ptr %2, align 8, !tbaa !17
  %101 = load i64, ptr %1, align 8, !tbaa !5
  %102 = add i64 %101, -1
  store i64 %102, ptr %1, align 8, !tbaa !5
  br label %.backedge.backedge

103:                                              ; preds = %82
  store ptr %84, ptr %2, align 8, !tbaa !17
  %104 = call i64 @BrotliBitReaderGetAvailIn(ptr noundef nonnull %9)
  store i64 %104, ptr %1, align 8, !tbaa !5
  %.not400452 = icmp eq i64 %104, 0
  br i1 %.not400452, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %103
  %.pre = load ptr, ptr %2, align 8, !tbaa !17
  br label %105

105:                                              ; preds = %.lr.ph, %105
  %106 = phi ptr [ %.pre, %.lr.ph ], [ %113, %105 ]
  %107 = load i8, ptr %106, align 1, !tbaa !22
  %108 = load i64, ptr %28, align 8, !tbaa !18
  %109 = getelementptr inbounds [8 x i8], ptr %40, i64 0, i64 %108
  store i8 %107, ptr %109, align 1, !tbaa !22
  %110 = load i64, ptr %28, align 8, !tbaa !18
  %111 = add i64 %110, 1
  store i64 %111, ptr %28, align 8, !tbaa !18
  %112 = load ptr, ptr %2, align 8, !tbaa !17
  %113 = getelementptr inbounds i8, ptr %112, i64 1
  store ptr %113, ptr %2, align 8, !tbaa !17
  %114 = load i64, ptr %1, align 8, !tbaa !5
  %115 = add i64 %114, -1
  store i64 %115, ptr %1, align 8, !tbaa !5
  %.not400 = icmp eq i64 %115, 0
  br i1 %.not400, label %.loopexit, label %105, !llvm.loop !23

116:                                              ; preds = %.backedge
  %117 = load i64, ptr %28, align 8, !tbaa !18
  %.not396 = icmp eq i64 %117, 0
  br i1 %.not396, label %119, label %118

118:                                              ; preds = %116
  store i64 0, ptr %28, align 8, !tbaa !18
  br label %.loopexit

119:                                              ; preds = %116
  call void @BrotliBitReaderUnload(ptr noundef nonnull %9)
  %120 = call i64 @BrotliBitReaderGetAvailIn(ptr noundef nonnull %9)
  store i64 %120, ptr %1, align 8, !tbaa !5
  %121 = load ptr, ptr %38, align 8, !tbaa !20
  store ptr %121, ptr %2, align 8, !tbaa !17
  br label %.loopexit

122:                                              ; preds = %.backedge
  %123 = load i32, ptr %0, align 8, !tbaa !25
  switch i32 %123, label %.backedge.backedge [
    i32 0, label %124
    i32 1, label %133
    i32 2, label %._crit_edge460
    i32 3, label %158
    i32 4, label %159
    i32 17, label %.thread470
    i32 18, label %183
    i32 19, label %._crit_edge466
    i32 20, label %210
    i32 21, label %217
    i32 11, label %229
    i32 12, label %232
    i32 5, label %235
    i32 6, label %250
    i32 22, label %253
    i32 23, label %258
    i32 24, label %293
    i32 25, label %306
    i32 7, label %312
    i32 8, label %312
    i32 9, label %312
    i32 10, label %312
    i32 13, label %317
    i32 15, label %317
    i32 16, label %317
    i32 14, label %355
    i32 26, label %371
  ]

.backedge.backedge:                               ; preds = %122, %131, %132, %178, %182, %185, %198, %231, %234, %361, %126, %159, %171, %169, %186, %229, %232, %250, %253, %315, %312, %317, %353, %352, %345, %354, %373, %124, %146, %164, %217, %226, %306, %355, %362, %.thread, %201, %210, %.thread423, %276, %.thread442, %299, %301, %88, %93, %337
  %.1311.be = phi i32 [ 1, %88 ], [ 1, %93 ], [ 1, %337 ], [ 1, %122 ], [ %374, %373 ], [ 1, %361 ], [ %318, %317 ], [ 1, %345 ], [ 1, %352 ], [ 1, %353 ], [ 1, %354 ], [ %316, %315 ], [ %313, %312 ], [ %256, %253 ], [ %251, %250 ], [ %233, %232 ], [ 1, %234 ], [ %230, %229 ], [ 1, %231 ], [ 1, %185 ], [ %190, %186 ], [ 1, %198 ], [ %160, %159 ], [ 1, %171 ], [ 1, %169 ], [ 1, %178 ], [ 1, %182 ], [ %127, %126 ], [ 1, %131 ], [ 1, %132 ], [ 2, %124 ], [ -30, %146 ], [ -14, %164 ], [ 1, %226 ], [ 2, %217 ], [ -27, %306 ], [ -10, %355 ], [ -15, %362 ], [ %.4314.ph, %.thread ], [ %209, %201 ], [ %216, %210 ], [ %.9.ph, %.thread423 ], [ %279, %276 ], [ 1, %.thread442 ], [ 1, %301 ], [ %300, %299 ]
  br label %.backedge

._crit_edge466:                                   ; preds = %122
  %.pre467 = load i32, ptr %48, align 4, !tbaa !26
  %.phi.trans.insert = sext i32 %.pre467 to i64
  %.phi.trans.insert468 = getelementptr inbounds [3 x i64], ptr %53, i64 0, i64 %.phi.trans.insert
  %.pre469 = load i64, ptr %.phi.trans.insert468, align 8, !tbaa !5
  br label %201

._crit_edge460:                                   ; preds = %122
  %.pre461 = load i32, ptr %42, align 4
  br label %146

124:                                              ; preds = %122
  %125 = call i32 @BrotliWarmupBitReader(ptr noundef nonnull %9) #5
  %.not393 = icmp eq i32 %125, 0
  br i1 %.not393, label %.backedge.backedge, label %126

126:                                              ; preds = %124
  %127 = call i32 @DecodeWindowBits(ptr noundef nonnull %0, ptr noundef nonnull %9)
  %.not394 = icmp eq i32 %127, 1
  br i1 %.not394, label %128, label %.backedge.backedge

128:                                              ; preds = %126
  %129 = load i32, ptr %42, align 4
  %130 = and i32 %129, 32
  %.not395 = icmp eq i32 %130, 0
  br i1 %.not395, label %132, label %131

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

132:                                              ; preds = %128
  store i32 2, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

133:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  %134 = call i32 @BrotliSafeReadBits(ptr noundef nonnull %9, i64 noundef 6, ptr noundef nonnull %7)
  %.not381 = icmp eq i32 %134, 0
  br i1 %.not381, label %.thread, label %135

135:                                              ; preds = %133
  %136 = load i64, ptr %7, align 8, !tbaa !5
  %137 = trunc i64 %136 to i32
  %138 = load i32, ptr %42, align 4
  %139 = shl i32 %137, 6
  %140 = and i32 %139, 4032
  %141 = and i32 %138, -4033
  %142 = or disjoint i32 %140, %141
  store i32 %142, ptr %42, align 4
  %143 = and i32 %137, 63
  %144 = add nsw i32 %143, -31
  %or.cond = icmp ult i32 %144, -21
  br i1 %or.cond, label %.thread, label %145

.thread:                                          ; preds = %133, %135
  %.4314.ph = phi i32 [ -13, %135 ], [ 2, %133 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  br label %.backedge.backedge

145:                                              ; preds = %135
  store i32 2, ptr %0, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  br label %146

146:                                              ; preds = %._crit_edge460, %145
  %147 = phi i32 [ %.pre461, %._crit_edge460 ], [ %142, %145 ]
  %148 = lshr i32 %147, 6
  %149 = and i32 %148, 63
  %150 = shl nuw i32 1, %149
  %151 = add nsw i32 %150, -16
  store i32 %151, ptr %44, align 4, !tbaa !27
  %152 = load ptr, ptr %51, align 8, !tbaa !28
  %153 = load ptr, ptr %52, align 8, !tbaa !29
  %154 = call ptr %152(ptr noundef %153, i64 noundef 12336) #5
  store ptr %154, ptr %66, align 8, !tbaa !30
  %155 = icmp eq ptr %154, null
  br i1 %155, label %.backedge.backedge, label %156

156:                                              ; preds = %146
  %157 = getelementptr inbounds i8, ptr %154, i64 7584
  store ptr %157, ptr %67, align 8, !tbaa !31
  store i32 3, ptr %0, align 8, !tbaa !25
  br label %158

158:                                              ; preds = %156, %122
  call void @BrotliDecoderStateMetablockBegin(ptr noundef nonnull %0) #5
  store i32 4, ptr %0, align 8, !tbaa !25
  br label %159

159:                                              ; preds = %158, %122
  %160 = call i32 @DecodeMetaBlockLength(ptr noundef nonnull %0, ptr noundef nonnull %9)
  %.not382 = icmp eq i32 %160, 1
  br i1 %.not382, label %161, label %.backedge.backedge

161:                                              ; preds = %159
  %162 = load i32, ptr %42, align 4
  %163 = and i32 %162, 6
  %or.cond403 = icmp eq i32 %163, 0
  br i1 %or.cond403, label %166, label %164

164:                                              ; preds = %161
  %165 = call i32 @BrotliJumpToByteBoundary(ptr noundef nonnull %9)
  %.not385 = icmp eq i32 %165, 0
  br i1 %.not385, label %.backedge.backedge, label %._crit_edge462

._crit_edge462:                                   ; preds = %164
  %.pre463 = load i32, ptr %42, align 4
  br label %166

166:                                              ; preds = %._crit_edge462, %161
  %167 = phi i32 [ %.pre463, %._crit_edge462 ], [ %162, %161 ]
  %168 = and i32 %167, 4
  %.not386 = icmp eq i32 %168, 0
  br i1 %.not386, label %175, label %169

169:                                              ; preds = %166
  store i32 12, ptr %0, align 8, !tbaa !25
  %170 = load ptr, ptr %68, align 8, !tbaa !32
  %.not392 = icmp eq ptr %170, null
  br i1 %.not392, label %.backedge.backedge, label %171

171:                                              ; preds = %169
  %172 = load ptr, ptr %69, align 8, !tbaa !33
  %173 = load i32, ptr %41, align 4, !tbaa !34
  %174 = sext i32 %173 to i64
  call void %170(ptr noundef %172, i64 noundef %174) #5
  br label %.backedge.backedge

175:                                              ; preds = %166
  %176 = load i32, ptr %41, align 4, !tbaa !34
  %177 = icmp eq i32 %176, 0
  br i1 %177, label %178, label %179

178:                                              ; preds = %175
  store i32 14, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

179:                                              ; preds = %175
  call void @BrotliCalculateRingBufferSize(ptr noundef nonnull %0)
  %180 = load i32, ptr %42, align 4
  %181 = and i32 %180, 2
  %.not387 = icmp eq i32 %181, 0
  br i1 %.not387, label %.thread470, label %182

182:                                              ; preds = %179
  store i32 11, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

.thread470:                                       ; preds = %179, %122
  store i32 0, ptr %48, align 4, !tbaa !26
  store i64 0, ptr %71, align 8, !tbaa !35
  store ptr %72, ptr %73, align 8, !tbaa !37
  store i32 0, ptr %74, align 8, !tbaa !38
  store i32 0, ptr %70, align 8, !tbaa !39
  store i32 0, ptr %75, align 4, !tbaa !40
  store i32 18, ptr %0, align 8, !tbaa !25
  br label %186

183:                                              ; preds = %122
  %.pre465 = load i32, ptr %48, align 4, !tbaa !26
  %184 = icmp sgt i32 %.pre465, 2
  br i1 %184, label %185, label %186

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

186:                                              ; preds = %.thread470, %183
  %187 = phi i32 [ 0, %.thread470 ], [ %.pre465, %183 ]
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [3 x i64], ptr %53, i64 0, i64 %188
  %190 = call i32 @DecodeVarLenUint8(ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull %189)
  %.not388 = icmp eq i32 %190, 1
  br i1 %.not388, label %191, label %.backedge.backedge

191:                                              ; preds = %186
  %192 = load i32, ptr %48, align 4, !tbaa !26
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds [3 x i64], ptr %53, i64 0, i64 %193
  %195 = load i64, ptr %194, align 8, !tbaa !5
  %196 = add i64 %195, 1
  store i64 %196, ptr %194, align 8, !tbaa !5
  %197 = icmp ult i64 %196, 2
  br i1 %197, label %198, label %200

198:                                              ; preds = %191
  %199 = add nsw i32 %192, 1
  store i32 %199, ptr %48, align 4, !tbaa !26
  br label %.backedge.backedge

200:                                              ; preds = %191
  store i32 19, ptr %0, align 8, !tbaa !25
  br label %201

201:                                              ; preds = %._crit_edge466, %200
  %202 = phi i64 [ %.pre469, %._crit_edge466 ], [ %196, %200 ]
  %203 = phi i32 [ %.pre467, %._crit_edge466 ], [ %192, %200 ]
  %204 = add i64 %202, 2
  %205 = mul nsw i32 %203, 632
  %206 = load ptr, ptr %66, align 8, !tbaa !30
  %207 = sext i32 %205 to i64
  %208 = getelementptr inbounds %struct.HuffmanCode, ptr %206, i64 %207
  %209 = call i32 @ReadHuffmanCode(i64 noundef %204, i64 noundef %204, ptr noundef %208, ptr noundef null, ptr noundef nonnull %0)
  %.not389 = icmp eq i32 %209, 1
  br i1 %.not389, label %.thread416, label %.backedge.backedge

.thread416:                                       ; preds = %201
  store i32 20, ptr %0, align 8, !tbaa !25
  br label %210

210:                                              ; preds = %.thread416, %122
  %211 = load i32, ptr %48, align 4, !tbaa !26
  %212 = mul nsw i32 %211, 396
  %213 = load ptr, ptr %67, align 8, !tbaa !31
  %214 = sext i32 %212 to i64
  %215 = getelementptr inbounds %struct.HuffmanCode, ptr %213, i64 %214
  %216 = call i32 @ReadHuffmanCode(i64 noundef 26, i64 noundef 26, ptr noundef %215, ptr noundef null, ptr noundef nonnull %0)
  %.not390 = icmp eq i32 %216, 1
  br i1 %.not390, label %.thread419, label %.backedge.backedge

.thread419:                                       ; preds = %210
  store i32 21, ptr %0, align 8, !tbaa !25
  br label %217

217:                                              ; preds = %.thread419, %122
  %218 = load i32, ptr %48, align 4, !tbaa !26
  %219 = mul nsw i32 %218, 396
  %220 = sext i32 %218 to i64
  %221 = getelementptr inbounds [3 x i64], ptr %76, i64 0, i64 %220
  %222 = load ptr, ptr %67, align 8, !tbaa !31
  %223 = sext i32 %219 to i64
  %224 = getelementptr inbounds %struct.HuffmanCode, ptr %222, i64 %223
  %225 = call i32 @SafeReadBlockLength(ptr noundef nonnull %0, ptr noundef nonnull %221, ptr noundef %224, ptr noundef nonnull %9)
  %.not391 = icmp eq i32 %225, 0
  br i1 %.not391, label %.backedge.backedge, label %226

226:                                              ; preds = %217
  %227 = load i32, ptr %48, align 4, !tbaa !26
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %48, align 4, !tbaa !26
  store i32 18, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

229:                                              ; preds = %122
  %230 = call i32 @CopyUncompressedBlockToOutput(ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, ptr noundef nonnull %0)
  %.not380 = icmp eq i32 %230, 1
  br i1 %.not380, label %231, label %.backedge.backedge

231:                                              ; preds = %229
  store i32 14, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

232:                                              ; preds = %122
  %233 = call i32 @SkipMetadataBlock(ptr noundef nonnull %0)
  %.not379 = icmp eq i32 %233, 1
  br i1 %.not379, label %234, label %.backedge.backedge

234:                                              ; preds = %232
  store i32 14, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

235:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %236 = call i32 @BrotliSafeReadBits(ptr noundef nonnull %9, i64 noundef 6, ptr noundef nonnull %8)
  %.not371 = icmp eq i32 %236, 0
  br i1 %.not371, label %.thread423, label %237

237:                                              ; preds = %235
  %238 = load i64, ptr %8, align 8, !tbaa !5
  %239 = call i64 @BitMask(i64 noundef 2)
  %240 = and i64 %239, %238
  store i64 %240, ptr %49, align 8, !tbaa !41
  %241 = load i64, ptr %8, align 8, !tbaa !5
  %242 = lshr i64 %241, 2
  store i64 %242, ptr %8, align 8, !tbaa !5
  %243 = shl i64 %242, %240
  store i64 %243, ptr %50, align 8, !tbaa !42
  %244 = load ptr, ptr %51, align 8, !tbaa !28
  %245 = load ptr, ptr %52, align 8, !tbaa !29
  %246 = load i64, ptr %53, align 8, !tbaa !5
  %247 = call ptr %244(ptr noundef %245, i64 noundef %246) #5
  store ptr %247, ptr %54, align 8, !tbaa !43
  %248 = icmp eq ptr %247, null
  br i1 %248, label %.thread423, label %249

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

249:                                              ; preds = %237
  store i32 0, ptr %48, align 4, !tbaa !26
  store i32 6, ptr %0, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  br label %250

250:                                              ; preds = %249, %122
  %251 = call i32 @ReadContextModes(ptr noundef nonnull %0)
  %.not372 = icmp eq i32 %251, 1
  br i1 %.not372, label %252, label %.backedge.backedge

252:                                              ; preds = %250
  store i32 22, ptr %0, align 8, !tbaa !25
  br label %253

253:                                              ; preds = %252, %122
  %254 = load i64, ptr %53, align 8, !tbaa !5
  %255 = shl i64 %254, 6
  %256 = call i32 @DecodeContextMap(i64 noundef %255, ptr noundef nonnull %55, ptr noundef nonnull %56, ptr noundef nonnull %0)
  %.not373 = icmp eq i32 %256, 1
  br i1 %.not373, label %257, label %.backedge.backedge

257:                                              ; preds = %253
  call void @DetectTrivialLiteralBlockTypes(ptr noundef nonnull %0)
  store i32 23, ptr %0, align 8, !tbaa !25
  br label %258

258:                                              ; preds = %257, %122
  %259 = load i64, ptr %49, align 8, !tbaa !41
  %260 = load i64, ptr %50, align 8, !tbaa !42
  %261 = add i64 %260, 16
  %262 = trunc i64 %259 to i32
  %263 = add i32 %262, 1
  %264 = shl i32 24, %263
  %265 = zext i32 %264 to i64
  %266 = add i64 %261, %265
  %267 = load i32, ptr %42, align 4
  %268 = and i32 %267, 32
  %.not374 = icmp eq i32 %268, 0
  br i1 %.not374, label %276, label %269

269:                                              ; preds = %258
  %270 = trunc i64 %260 to i32
  %271 = call i64 @BrotliCalculateDistanceCodeLimit(i32 noundef 2147483644, i32 noundef %262, i32 noundef %270)
  %272 = shl i32 62, %263
  %273 = zext i32 %272 to i64
  %274 = add i64 %261, %273
  %275 = and i64 %271, 4294967295
  br label %276

276:                                              ; preds = %269, %258
  %.0319 = phi i64 [ %274, %269 ], [ %266, %258 ]
  %.0318 = phi i64 [ %275, %269 ], [ %266, %258 ]
  %277 = load i64, ptr %57, align 8, !tbaa !5
  %278 = shl i64 %277, 2
  %279 = call i32 @DecodeContextMap(i64 noundef %278, ptr noundef nonnull %58, ptr noundef nonnull %59, ptr noundef nonnull %0)
  %.not375 = icmp eq i32 %279, 1
  br i1 %.not375, label %280, label %.backedge.backedge

280:                                              ; preds = %276
  %281 = load i64, ptr %55, align 8, !tbaa !44
  %282 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef nonnull %0, ptr noundef nonnull %60, i64 noundef 256, i64 noundef 256, i64 noundef %281) #5
  %283 = and i32 %282, 1
  %284 = load i64, ptr %62, align 8, !tbaa !5
  %285 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef nonnull %0, ptr noundef nonnull %61, i64 noundef 704, i64 noundef 704, i64 noundef %284) #5
  %286 = and i32 %283, %285
  %287 = load i64, ptr %58, align 8, !tbaa !45
  %288 = call i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef nonnull %0, ptr noundef nonnull %63, i64 noundef %.0319, i64 noundef %.0318, i64 noundef %287) #5
  %289 = and i32 %286, %288
  %.not376 = icmp eq i32 %289, 0
  br i1 %.not376, label %.thread427, label %.thread471

.thread427:                                       ; preds = %280
  %290 = load i64, ptr %1, align 8, !tbaa !5
  %291 = sub i64 %10, %290
  %292 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef -22, i64 noundef %291)
  br label %382

.thread471:                                       ; preds = %280
  store i32 0, ptr %48, align 4, !tbaa !26
  store i32 24, ptr %0, align 8, !tbaa !25
  br label %299

293:                                              ; preds = %122
  %.pre459 = load i32, ptr %48, align 4, !tbaa !26
  switch i32 %.pre459, label %.thread438 [
    i32 0, label %299
    i32 1, label %294
    i32 2, label %295
  ]

294:                                              ; preds = %293
  br label %299

295:                                              ; preds = %293
  br label %299

.thread438:                                       ; preds = %293
  %296 = load i64, ptr %1, align 8, !tbaa !5
  %297 = sub i64 %10, %296
  %298 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef -31, i64 noundef %297)
  br label %382

299:                                              ; preds = %.thread471, %293, %295, %294
  %.0308 = phi ptr [ %63, %295 ], [ %61, %294 ], [ %60, %293 ], [ %60, %.thread471 ]
  %300 = call i32 @HuffmanTreeGroupDecode(ptr noundef nonnull %.0308, ptr noundef nonnull %0)
  %.not377 = icmp eq i32 %300, 1
  br i1 %.not377, label %301, label %.backedge.backedge

301:                                              ; preds = %299
  %302 = load i32, ptr %48, align 4, !tbaa !26
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %48, align 4, !tbaa !26
  %304 = icmp slt i32 %302, 2
  br i1 %304, label %.backedge.backedge, label %305

305:                                              ; preds = %301
  store i32 25, ptr %0, align 8, !tbaa !25
  br label %306

306:                                              ; preds = %305, %122
  call void @PrepareLiteralDecoding(ptr noundef nonnull %0)
  %307 = load ptr, ptr %59, align 8, !tbaa !46
  store ptr %307, ptr %64, align 8, !tbaa !47
  %308 = load ptr, ptr %61, align 8, !tbaa !48
  %309 = load ptr, ptr %308, align 8, !tbaa !17
  store ptr %309, ptr %65, align 8, !tbaa !49
  %310 = call i32 @BrotliEnsureRingBuffer(ptr noundef nonnull %0)
  %.not378 = icmp eq i32 %310, 0
  br i1 %.not378, label %.backedge.backedge, label %311

311:                                              ; preds = %306
  call void @CalculateDistanceLut(ptr noundef nonnull %0)
  store i32 7, ptr %0, align 8, !tbaa !25
  br label %312

312:                                              ; preds = %311, %122, %122, %122, %122
  %313 = call i32 @ProcessCommands(ptr noundef nonnull %0)
  %314 = icmp eq i32 %313, 2
  br i1 %314, label %315, label %.backedge.backedge

315:                                              ; preds = %312
  %316 = call i32 @SafeProcessCommands(ptr noundef nonnull %0)
  br label %.backedge.backedge

317:                                              ; preds = %122, %122, %122
  %318 = call i32 @WriteRingBuffer(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, i32 noundef 0)
  %.not367 = icmp eq i32 %318, 1
  br i1 %.not367, label %319, label %.backedge.backedge

319:                                              ; preds = %317
  call void @WrapRingBuffer(ptr noundef nonnull %0)
  %320 = load i32, ptr %43, align 4, !tbaa !50
  %321 = load i32, ptr %42, align 4
  %322 = lshr i32 %321, 6
  %323 = and i32 %322, 63
  %324 = shl nuw i32 1, %323
  %325 = icmp eq i32 %320, %324
  br i1 %325, label %326, label %328

326:                                              ; preds = %319
  %327 = load i32, ptr %44, align 4, !tbaa !27
  store i32 %327, ptr %45, align 8, !tbaa !51
  br label %328

328:                                              ; preds = %326, %319
  %329 = load i32, ptr %0, align 8, !tbaa !25
  switch i32 %329, label %346 [
    i32 15, label %330
    i32 16, label %345
  ]

330:                                              ; preds = %328
  %331 = load ptr, ptr %46, align 8, !tbaa !52
  %.not368 = icmp eq ptr %331, null
  br i1 %.not368, label %.thread442, label %332

332:                                              ; preds = %330
  %333 = getelementptr inbounds i8, ptr %331, i64 16
  %334 = load i32, ptr %333, align 8, !tbaa !53
  %335 = getelementptr inbounds i8, ptr %331, i64 20
  %336 = load i32, ptr %335, align 4, !tbaa !55
  %.not369 = icmp eq i32 %334, %336
  br i1 %.not369, label %.thread442, label %337

337:                                              ; preds = %332
  %338 = load i32, ptr %47, align 8, !tbaa !56
  %339 = call i32 @CopyFromCompoundDictionary(ptr noundef nonnull %0, i32 noundef %338)
  %340 = load i32, ptr %47, align 8, !tbaa !56
  %341 = add nsw i32 %340, %339
  store i32 %341, ptr %47, align 8, !tbaa !56
  %342 = load i32, ptr %43, align 4, !tbaa !50
  %.not370 = icmp slt i32 %341, %342
  br i1 %.not370, label %.thread442, label %.backedge.backedge

.thread442:                                       ; preds = %330, %332, %337
  %343 = load i32, ptr %41, align 4, !tbaa !34
  %344 = icmp eq i32 %343, 0
  %.410 = select i1 %344, i32 14, i32 7
  store i32 %.410, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

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

346:                                              ; preds = %328
  %347 = load i32, ptr %48, align 4, !tbaa !26
  %348 = icmp eq i32 %347, 0
  br i1 %348, label %349, label %354

349:                                              ; preds = %346
  %350 = load i32, ptr %41, align 4, !tbaa !34
  %351 = icmp eq i32 %350, 0
  br i1 %351, label %352, label %353

352:                                              ; preds = %349
  store i32 14, ptr %0, align 8, !tbaa !25
  br label %.backedge.backedge

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

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

355:                                              ; preds = %122
  %356 = load i32, ptr %41, align 4, !tbaa !34
  %357 = icmp slt i32 %356, 0
  br i1 %357, label %.backedge.backedge, label %358

358:                                              ; preds = %355
  call void @BrotliDecoderStateCleanupAfterMetablock(ptr noundef nonnull %0) #5
  %359 = load i32, ptr %42, align 4
  %360 = and i32 %359, 1
  %.not363 = icmp eq i32 %360, 0
  br i1 %.not363, label %361, label %362

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

362:                                              ; preds = %358
  %363 = call i32 @BrotliJumpToByteBoundary(ptr noundef nonnull %9)
  %.not364 = icmp eq i32 %363, 0
  br i1 %.not364, label %.backedge.backedge, label %364

364:                                              ; preds = %362
  %365 = load i64, ptr %28, align 8, !tbaa !18
  %366 = icmp eq i64 %365, 0
  br i1 %366, label %367, label %370

367:                                              ; preds = %364
  call void @BrotliBitReaderUnload(ptr noundef nonnull %9)
  %368 = call i64 @BrotliBitReaderGetAvailIn(ptr noundef nonnull %9)
  store i64 %368, ptr %1, align 8, !tbaa !5
  %369 = load ptr, ptr %38, align 8, !tbaa !20
  store ptr %369, ptr %2, align 8, !tbaa !17
  br label %370

370:                                              ; preds = %367, %364
  store i32 26, ptr %0, align 8, !tbaa !25
  br label %371

371:                                              ; preds = %370, %122
  %372 = load ptr, ptr %37, align 8, !tbaa !19
  %.not365 = icmp eq ptr %372, null
  br i1 %.not365, label %375, label %373

373:                                              ; preds = %371
  %374 = call i32 @WriteRingBuffer(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef %spec.select, ptr noundef %5, i32 noundef 1)
  %.not366 = icmp eq i32 %374, 1
  br i1 %.not366, label %375, label %.backedge.backedge

375:                                              ; preds = %373, %371
  %376 = load i64, ptr %1, align 8, !tbaa !5
  %377 = sub i64 %10, %376
  %378 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef 1, i64 noundef %377)
  br label %382

.loopexit:                                        ; preds = %79, %91, %105, %103, %118, %119
  %.14 = phi i32 [ %.1311, %118 ], [ %.1311, %119 ], [ 2, %103 ], [ 2, %105 ], [ 2, %91 ], [ %80, %79 ]
  %379 = load i64, ptr %1, align 8, !tbaa !5
  %380 = sub i64 %10, %379
  %381 = call i32 @SaveErrorCode(ptr noundef nonnull %0, i32 noundef %.14, i64 noundef %380)
  br label %382

382:                                              ; preds = %.thread438, %.thread427, %14, %.loopexit, %375, %23
  %.7 = phi i32 [ %381, %.loopexit ], [ %378, %375 ], [ %26, %23 ], [ 0, %14 ], [ %292, %.thread427 ], [ %298, %.thread438 ]
  ret i32 %.7
}

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

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

; 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 i64 @BrotliBitReaderGetAvailIn(ptr noundef) local_unnamed_addr #3

; 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, ptr noundef) local_unnamed_addr #1

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

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 @DecodeVarLenUint8(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @ReadHuffmanCode(i64 noundef, i64 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: noinline nounwind uwtable
declare hidden i32 @CopyUncompressedBlockToOutput(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i64 @BitMask(i64 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(i64 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

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

declare hidden i32 @BrotliDecoderHuffmanTreeGroupInit(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 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: nounwind uwtable
declare hidden void @CalculateDistanceLut(ptr noundef) local_unnamed_addr #1

; 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

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

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, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 432}
!10 = !{!"BrotliDecoderStateStruct", !11, i64 0, !11, i64 4, !12, i64 8, !13, i64 48, !13, i64 56, !13, i64 64, !7, i64 72, !6, i64 80, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !7, i64 112, !11, i64 128, !11, i64 132, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176, !14, i64 184, !14, i64 208, !14, i64 232, !13, i64 256, !13, i64 264, !11, i64 272, !11, i64 276, !7, i64 280, !6, i64 304, !7, i64 312, !7, i64 336, !6, i64 384, !6, i64 392, !6, i64 400, !13, i64 408, !13, i64 416, !6, i64 424, !6, i64 432, !6, i64 440, !7, i64 448, !11, i64 708, !11, i64 712, !7, i64 716, !13, i64 720, !13, i64 728, !13, i64 736, !6, i64 744, !11, i64 752, !11, i64 756, !11, i64 760, !11, i64 764, !11, i64 768, !11, i64 772, !11, i64 772, !11, i64 772, !11, i64 772, !11, i64 772, !11, i64 772, !11, i64 772, !11, i64 773, !6, i64 776, !13, i64 784, !13, i64 792, !13, i64 800, !13, i64 808, !7, i64 816, !7, i64 848}
!11 = !{!"int", !7, i64 0}
!12 = !{!"", !6, i64 0, !6, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"", !13, i64 0, !13, i64 8, !15, i64 16, !15, i64 18, !15, i64 20}
!15 = !{!"short", !7, i64 0}
!16 = !{!10, !11, i64 128}
!17 = !{!13, !13, i64 0}
!18 = !{!10, !6, i64 80}
!19 = !{!10, !13, i64 136}
!20 = !{!12, !13, i64 16}
!21 = !{!12, !13, i64 32}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!10, !11, i64 0}
!26 = !{!10, !11, i64 4}
!27 = !{!10, !11, i64 92}
!28 = !{!10, !13, i64 48}
!29 = !{!10, !13, i64 64}
!30 = !{!10, !13, i64 256}
!31 = !{!10, !13, i64 264}
!32 = !{!10, !13, i64 720}
!33 = !{!10, !13, i64 736}
!34 = !{!10, !11, i64 132}
!35 = !{!36, !6, i64 16}
!36 = !{!"BrotliMetablockHeaderArena", !11, i64 0, !11, i64 4, !11, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !7, i64 64, !13, i64 192, !7, i64 200, !7, i64 1640, !7, i64 1768, !7, i64 1786, !11, i64 1820, !13, i64 1824, !6, i64 1832, !6, i64 1840, !6, i64 1848, !7, i64 1856}
!37 = !{!36, !13, i64 192}
!38 = !{!36, !11, i64 8}
!39 = !{!36, !11, i64 0}
!40 = !{!36, !11, i64 4}
!41 = !{!10, !6, i64 384}
!42 = !{!10, !6, i64 392}
!43 = !{!10, !13, i64 792}
!44 = !{!10, !6, i64 776}
!45 = !{!10, !6, i64 400}
!46 = !{!10, !13, i64 408}
!47 = !{!10, !13, i64 176}
!48 = !{!10, !13, i64 208}
!49 = !{!10, !13, i64 152}
!50 = !{!10, !11, i64 100}
!51 = !{!10, !11, i64 96}
!52 = !{!10, !13, i64 808}
!53 = !{!54, !11, i64 16}
!54 = !{!"BrotliDecoderCompoundDictionary", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !7, i64 152, !11, i64 216, !7, i64 220}
!55 = !{!54, !11, i64 20}
!56 = !{!10, !11, i64 88}


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