; LLVM IR from indygreg/python-zstandard :: zstd (zstd)

; 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.ZSTD_customMem = type { ptr, ptr, ptr }
%struct.ZSTD_inBuffer_s = type { ptr, i64, i64 }
%struct.ZSTD_outBuffer_s = type { ptr, i64, i64 }
%struct.ZSTD_DCtx_s = type { ptr, ptr, ptr, ptr, %struct.ZSTD_entropyDTables_t, [640 x i32], ptr, ptr, ptr, ptr, i64, %struct.ZSTD_frameHeader, i64, i64, i32, i32, i32, i32, %struct.XXH_NAMESPACEXXH64_state_s, i64, i32, i32, i32, ptr, %struct.ZSTD_customMem, i64, i64, i64, i32, i32, ptr, ptr, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i64, i64, i64, ptr, i64, i64, i64, i64, i32, i32, i32, %struct.ZSTD_outBuffer_s, ptr, ptr, i32, [65568 x i8], [18 x i8], i64 }
%struct.ZSTD_entropyDTables_t = type { [513 x %struct.ZSTD_seqSymbol], [257 x %struct.ZSTD_seqSymbol], [513 x %struct.ZSTD_seqSymbol], [4097 x i32], [3 x i32], [157 x i32] }
%struct.ZSTD_seqSymbol = type { i16, i8, i8, i32 }
%struct.ZSTD_frameHeader = type { i64, i64, i32, i32, i32, i32, i32, i32, i32 }
%struct.XXH_NAMESPACEXXH64_state_s = type { i64, [4 x i64], [4 x i64], i32, i32, i64 }

; Function Attrs: nounwind uwtable
declare hidden i32 @ERR_isError(i64 noundef) #0

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @ZSTD_customFree(ptr noundef, ptr noundef byval(%struct.ZSTD_customMem) align 8) #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @ZSTD_isError(i64 noundef) #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @ZSTD_customMalloc(i64 noundef, ptr noundef byval(%struct.ZSTD_customMem) align 8) #3

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_getFrameHeader_advanced(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_decompress_usingDDict(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @ZSTD_getDDict(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_nextSrcSizeToDecompress(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @ZSTD_nextInputType(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_nextSrcSizeToDecompressWithInputSize(ptr noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_decodeFrameHeader(ptr noundef, ptr noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_decompressBegin_usingDDict(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_decodingBufferSize_internal(i64 noundef, i64 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i64 @ZSTD_decompressStream(ptr noundef %0, ptr noundef %1, ptr noundef %2) #0 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %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 ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i32, align 4
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %42, i32 0, i32 0
  %44 = load ptr, ptr %43, align 8, !tbaa !9
  store ptr %44, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %45 = load ptr, ptr %7, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %45, i32 0, i32 2
  %47 = load i64, ptr %46, align 8, !tbaa !12
  %48 = icmp ne i64 %47, 0
  br i1 %48, label %49, label %55

49:                                               ; preds = %3
  %50 = load ptr, ptr %8, align 8, !tbaa !5
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %51, i32 0, i32 2
  %53 = load i64, ptr %52, align 8, !tbaa !12
  %54 = getelementptr inbounds i8, ptr %50, i64 %53
  br label %57

55:                                               ; preds = %3
  %56 = load ptr, ptr %8, align 8, !tbaa !5
  br label %57

57:                                               ; preds = %55, %49
  %58 = phi ptr [ %54, %49 ], [ %56, %55 ]
  store ptr %58, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %59, i32 0, i32 1
  %61 = load i64, ptr %60, align 8, !tbaa !13
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %63, label %69

63:                                               ; preds = %57
  %64 = load ptr, ptr %8, align 8, !tbaa !5
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %65, i32 0, i32 1
  %67 = load i64, ptr %66, align 8, !tbaa !13
  %68 = getelementptr inbounds i8, ptr %64, i64 %67
  br label %71

69:                                               ; preds = %57
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  br label %71

71:                                               ; preds = %69, %63
  %72 = phi ptr [ %68, %63 ], [ %70, %69 ]
  store ptr %72, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %73, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %74, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8, !tbaa !14
  store ptr %76, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %77, i32 0, i32 2
  %79 = load i64, ptr %78, align 8, !tbaa !16
  %80 = icmp ne i64 %79, 0
  br i1 %80, label %81, label %87

81:                                               ; preds = %71
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %83, i32 0, i32 2
  %85 = load i64, ptr %84, align 8, !tbaa !16
  %86 = getelementptr inbounds i8, ptr %82, i64 %85
  br label %89

87:                                               ; preds = %71
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  br label %89

89:                                               ; preds = %87, %81
  %90 = phi ptr [ %86, %81 ], [ %88, %87 ]
  store ptr %90, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %91, i32 0, i32 1
  %93 = load i64, ptr %92, align 8, !tbaa !17
  %94 = icmp ne i64 %93, 0
  br i1 %94, label %95, label %101

95:                                               ; preds = %89
  %96 = load ptr, ptr %12, align 8, !tbaa !5
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %97, i32 0, i32 1
  %99 = load i64, ptr %98, align 8, !tbaa !17
  %100 = getelementptr inbounds i8, ptr %96, i64 %99
  br label %103

101:                                              ; preds = %89
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  br label %103

103:                                              ; preds = %101, %95
  %104 = phi ptr [ %100, %95 ], [ %102, %101 ]
  store ptr %104, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %105 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %105, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  store i32 1, ptr %16, align 4, !tbaa !18
  br label %106

106:                                              ; preds = %103
  br label %107

107:                                              ; preds = %106
  br label %108

108:                                              ; preds = %107
  br label %109

109:                                              ; preds = %108
  %110 = load ptr, ptr %7, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %110, i32 0, i32 2
  %112 = load i64, ptr %111, align 8, !tbaa !12
  %113 = load ptr, ptr %7, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %113, i32 0, i32 1
  %115 = load i64, ptr %114, align 8, !tbaa !13
  %116 = icmp ugt i64 %112, %115
  br i1 %116, label %117, label %130

117:                                              ; preds = %109
  br label %118

118:                                              ; preds = %117
  br label %119

119:                                              ; preds = %118
  br label %120

120:                                              ; preds = %119
  br label %121

121:                                              ; preds = %120
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122
  br label %124

124:                                              ; preds = %123
  br label %125

125:                                              ; preds = %124
  br label %126

126:                                              ; preds = %125
  br label %127

127:                                              ; preds = %126
  br label %128

128:                                              ; preds = %127
  br label %129

129:                                              ; preds = %128
  store i64 -72, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

130:                                              ; preds = %109
  br label %131

131:                                              ; preds = %130
  br label %132

132:                                              ; preds = %131
  br label %133

133:                                              ; preds = %132
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %134, i32 0, i32 2
  %136 = load i64, ptr %135, align 8, !tbaa !16
  %137 = load ptr, ptr %6, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %137, i32 0, i32 1
  %139 = load i64, ptr %138, align 8, !tbaa !17
  %140 = icmp ugt i64 %136, %139
  br i1 %140, label %141, label %154

141:                                              ; preds = %133
  br label %142

142:                                              ; preds = %141
  br label %143

143:                                              ; preds = %142
  br label %144

144:                                              ; preds = %143
  br label %145

145:                                              ; preds = %144
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146
  br label %148

148:                                              ; preds = %147
  br label %149

149:                                              ; preds = %148
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151
  br label %153

153:                                              ; preds = %152
  store i64 -70, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

154:                                              ; preds = %133
  br label %155

155:                                              ; preds = %154
  br label %156

156:                                              ; preds = %155
  br label %157

157:                                              ; preds = %156
  br label %158

158:                                              ; preds = %157
  br label %159

159:                                              ; preds = %158
  br label %160

160:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %161 = load ptr, ptr %5, align 8, !tbaa !5
  %162 = load ptr, ptr %6, align 8, !tbaa !5
  %163 = call i64 @ZSTD_checkOutBuffer(ptr noundef %161, ptr noundef %162)
  store i64 %163, ptr %18, align 8, !tbaa !20
  %164 = load i64, ptr %18, align 8, !tbaa !20
  %165 = call i32 @ERR_isError(i64 noundef %164)
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %181

167:                                              ; preds = %160
  br label %168

168:                                              ; preds = %167
  br label %169

169:                                              ; preds = %168
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  br label %172

172:                                              ; preds = %171
  br label %173

173:                                              ; preds = %172
  br label %174

174:                                              ; preds = %173
  br label %175

175:                                              ; preds = %174
  br label %176

176:                                              ; preds = %175
  br label %177

177:                                              ; preds = %176
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178
  %180 = load i64, ptr %18, align 8, !tbaa !20
  store i64 %180, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %182

181:                                              ; preds = %160
  store i32 0, ptr %17, align 4
  br label %182

182:                                              ; preds = %181, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  %183 = load i32, ptr %17, align 4
  switch i32 %183, label %1267 [
    i32 0, label %184
  ]

184:                                              ; preds = %182
  br label %185

185:                                              ; preds = %184
  br label %186

186:                                              ; preds = %185
  br label %187

187:                                              ; preds = %1119, %186
  %188 = load i32, ptr %16, align 4, !tbaa !18
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %190, label %1120

190:                                              ; preds = %187
  %191 = load ptr, ptr %5, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %191, i32 0, i32 39
  %193 = load i32, ptr %192, align 4, !tbaa !21
  switch i32 %193, label %1103 [
    i32 0, label %194
    i32 1, label %213
    i32 2, label %828
    i32 3, label %899
    i32 4, label %1024
  ]

194:                                              ; preds = %190
  br label %195

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %198, i32 0, i32 39
  store i32 1, ptr %199, align 4, !tbaa !21
  %200 = load ptr, ptr %5, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %200, i32 0, i32 47
  store i64 0, ptr %201, align 8, !tbaa !28
  %202 = load ptr, ptr %5, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %202, i32 0, i32 46
  store i64 0, ptr %203, align 8, !tbaa !29
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %204, i32 0, i32 42
  store i64 0, ptr %205, align 8, !tbaa !30
  %206 = load ptr, ptr %5, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %206, i32 0, i32 48
  store i64 0, ptr %207, align 8, !tbaa !31
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %208, i32 0, i32 49
  store i32 0, ptr %209, align 8, !tbaa !32
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %210, i32 0, i32 52
  %212 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %211, ptr align 8 %212, i64 24, i1 false), !tbaa.struct !33
  br label %213

213:                                              ; preds = %197, %190
  br label %214

214:                                              ; preds = %213
  br label %215

215:                                              ; preds = %214
  br label %216

216:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  %217 = load ptr, ptr %5, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %217, i32 0, i32 11
  %219 = load ptr, ptr %5, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %219, i32 0, i32 57
  %221 = getelementptr inbounds [18 x i8], ptr %220, i64 0, i64 0
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %222, i32 0, i32 48
  %224 = load i64, ptr %223, align 8, !tbaa !31
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %225, i32 0, i32 20
  %227 = load i32, ptr %226, align 8, !tbaa !34
  %228 = call i64 @ZSTD_getFrameHeader_advanced(ptr noundef %218, ptr noundef %221, i64 noundef %224, i32 noundef %227)
  store i64 %228, ptr %19, align 8, !tbaa !20
  %229 = load ptr, ptr %5, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %229, i32 0, i32 36
  %231 = load i32, ptr %230, align 8, !tbaa !35
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %240

233:                                              ; preds = %216
  %234 = load ptr, ptr %5, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %234, i32 0, i32 35
  %236 = load ptr, ptr %235, align 8, !tbaa !36
  %237 = icmp ne ptr %236, null
  br i1 %237, label %238, label %240

238:                                              ; preds = %233
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  call void @ZSTD_DCtx_selectFrameDDict(ptr noundef %239)
  br label %240

240:                                              ; preds = %238, %233, %216
  %241 = load i64, ptr %19, align 8, !tbaa !20
  %242 = call i32 @ZSTD_isError(i64 noundef %241)
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %244, label %246

244:                                              ; preds = %240
  %245 = load i64, ptr %19, align 8, !tbaa !20
  store i64 %245, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %367

246:                                              ; preds = %240
  %247 = load i64, ptr %19, align 8, !tbaa !20
  %248 = icmp ne i64 %247, 0
  br i1 %248, label %249, label %366

249:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %250 = load i64, ptr %19, align 8, !tbaa !20
  %251 = load ptr, ptr %5, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %251, i32 0, i32 48
  %253 = load i64, ptr %252, align 8, !tbaa !31
  %254 = sub i64 %250, %253
  store i64 %254, ptr %20, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %255 = load ptr, ptr %10, align 8, !tbaa !5
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = ptrtoint ptr %255 to i64
  %258 = ptrtoint ptr %256 to i64
  %259 = sub i64 %257, %258
  store i64 %259, ptr %21, align 8, !tbaa !20
  %260 = load i64, ptr %20, align 8, !tbaa !20
  %261 = load i64, ptr %21, align 8, !tbaa !20
  %262 = icmp ugt i64 %260, %261
  br i1 %262, label %263, label %349

263:                                              ; preds = %249
  %264 = load i64, ptr %21, align 8, !tbaa !20
  %265 = icmp ugt i64 %264, 0
  br i1 %265, label %266, label %281

266:                                              ; preds = %263
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %267, i32 0, i32 57
  %269 = getelementptr inbounds [18 x i8], ptr %268, i64 0, i64 0
  %270 = load ptr, ptr %5, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %270, i32 0, i32 48
  %272 = load i64, ptr %271, align 8, !tbaa !31
  %273 = getelementptr inbounds i8, ptr %269, i64 %272
  %274 = load ptr, ptr %11, align 8, !tbaa !5
  %275 = load i64, ptr %21, align 8, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %273, ptr align 1 %274, i64 %275, i1 false)
  %276 = load i64, ptr %21, align 8, !tbaa !20
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %277, i32 0, i32 48
  %279 = load i64, ptr %278, align 8, !tbaa !31
  %280 = add i64 %279, %276
  store i64 %280, ptr %278, align 8, !tbaa !31
  br label %281

281:                                              ; preds = %266, %263
  %282 = load ptr, ptr %7, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %282, i32 0, i32 1
  %284 = load i64, ptr %283, align 8, !tbaa !13
  %285 = load ptr, ptr %7, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %285, i32 0, i32 2
  store i64 %284, ptr %286, align 8, !tbaa !12
  br label %287

287:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %288, i32 0, i32 11
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %290, i32 0, i32 57
  %292 = getelementptr inbounds [18 x i8], ptr %291, i64 0, i64 0
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %293, i32 0, i32 48
  %295 = load i64, ptr %294, align 8, !tbaa !31
  %296 = load ptr, ptr %5, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %296, i32 0, i32 20
  %298 = load i32, ptr %297, align 8, !tbaa !34
  %299 = call i64 @ZSTD_getFrameHeader_advanced(ptr noundef %289, ptr noundef %292, i64 noundef %295, i32 noundef %298)
  store i64 %299, ptr %22, align 8, !tbaa !20
  %300 = load i64, ptr %22, align 8, !tbaa !20
  %301 = call i32 @ERR_isError(i64 noundef %300)
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %317

303:                                              ; preds = %287
  br label %304

304:                                              ; preds = %303
  br label %305

305:                                              ; preds = %304
  br label %306

306:                                              ; preds = %305
  br label %307

307:                                              ; preds = %306
  br label %308

308:                                              ; preds = %307
  br label %309

309:                                              ; preds = %308
  br label %310

310:                                              ; preds = %309
  br label %311

311:                                              ; preds = %310
  br label %312

312:                                              ; preds = %311
  br label %313

313:                                              ; preds = %312
  br label %314

314:                                              ; preds = %313
  br label %315

315:                                              ; preds = %314
  %316 = load i64, ptr %22, align 8, !tbaa !20
  store i64 %316, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %318

317:                                              ; preds = %287
  store i32 0, ptr %17, align 4
  br label %318

318:                                              ; preds = %317, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  %319 = load i32, ptr %17, align 4
  switch i32 %319, label %365 [
    i32 0, label %320
  ]

320:                                              ; preds = %318
  br label %321

321:                                              ; preds = %320
  br label %322

322:                                              ; preds = %321
  %323 = load ptr, ptr %5, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %323, i32 0, i32 20
  %325 = load i32, ptr %324, align 8, !tbaa !34
  %326 = icmp eq i32 %325, 0
  %327 = zext i1 %326 to i64
  %328 = select i1 %326, i32 6, i32 2
  %329 = sext i32 %328 to i64
  %330 = load i64, ptr %19, align 8, !tbaa !20
  %331 = icmp ugt i64 %329, %330
  br i1 %331, label %332, label %340

332:                                              ; preds = %322
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %333, i32 0, i32 20
  %335 = load i32, ptr %334, align 8, !tbaa !34
  %336 = icmp eq i32 %335, 0
  %337 = zext i1 %336 to i64
  %338 = select i1 %336, i32 6, i32 2
  %339 = sext i32 %338 to i64
  br label %342

340:                                              ; preds = %322
  %341 = load i64, ptr %19, align 8, !tbaa !20
  br label %342

342:                                              ; preds = %340, %332
  %343 = phi i64 [ %339, %332 ], [ %341, %340 ]
  %344 = load ptr, ptr %5, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %344, i32 0, i32 48
  %346 = load i64, ptr %345, align 8, !tbaa !31
  %347 = sub i64 %343, %346
  %348 = add i64 %347, 3
  store i64 %348, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %365

349:                                              ; preds = %249
  %350 = load ptr, ptr %5, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %350, i32 0, i32 57
  %352 = getelementptr inbounds [18 x i8], ptr %351, i64 0, i64 0
  %353 = load ptr, ptr %5, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %353, i32 0, i32 48
  %355 = load i64, ptr %354, align 8, !tbaa !31
  %356 = getelementptr inbounds i8, ptr %352, i64 %355
  %357 = load ptr, ptr %11, align 8, !tbaa !5
  %358 = load i64, ptr %20, align 8, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %356, ptr align 1 %357, i64 %358, i1 false)
  %359 = load i64, ptr %19, align 8, !tbaa !20
  %360 = load ptr, ptr %5, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %360, i32 0, i32 48
  store i64 %359, ptr %361, align 8, !tbaa !31
  %362 = load i64, ptr %20, align 8, !tbaa !20
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = getelementptr inbounds i8, ptr %363, i64 %362
  store ptr %364, ptr %11, align 8, !tbaa !5
  store i32 38, ptr %17, align 4
  br label %365

365:                                              ; preds = %349, %342, %318
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  br label %367

366:                                              ; preds = %246
  store i32 0, ptr %17, align 4
  br label %367

367:                                              ; preds = %366, %365, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  %368 = load i32, ptr %17, align 4
  switch i32 %368, label %1267 [
    i32 0, label %369
    i32 38, label %1119
  ]

369:                                              ; preds = %367
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %370, i32 0, i32 11
  %372 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %371, i32 0, i32 0
  %373 = load i64, ptr %372, align 8, !tbaa !37
  %374 = icmp ne i64 %373, -1
  br i1 %374, label %375, label %454

375:                                              ; preds = %369
  %376 = load ptr, ptr %5, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %376, i32 0, i32 11
  %378 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %377, i32 0, i32 3
  %379 = load i32, ptr %378, align 4, !tbaa !38
  %380 = icmp ne i32 %379, 1
  br i1 %380, label %381, label %454

381:                                              ; preds = %375
  %382 = load ptr, ptr %14, align 8, !tbaa !5
  %383 = load ptr, ptr %15, align 8, !tbaa !5
  %384 = ptrtoint ptr %382 to i64
  %385 = ptrtoint ptr %383 to i64
  %386 = sub i64 %384, %385
  %387 = load ptr, ptr %5, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %387, i32 0, i32 11
  %389 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %388, i32 0, i32 0
  %390 = load i64, ptr %389, align 8, !tbaa !37
  %391 = icmp uge i64 %386, %390
  br i1 %391, label %392, label %454

392:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %393 = load ptr, ptr %9, align 8, !tbaa !5
  %394 = load ptr, ptr %10, align 8, !tbaa !5
  %395 = load ptr, ptr %9, align 8, !tbaa !5
  %396 = ptrtoint ptr %394 to i64
  %397 = ptrtoint ptr %395 to i64
  %398 = sub i64 %396, %397
  %399 = load ptr, ptr %5, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %399, i32 0, i32 20
  %401 = load i32, ptr %400, align 8, !tbaa !34
  %402 = call i64 @ZSTD_findFrameCompressedSize_advanced(ptr noundef %393, i64 noundef %398, i32 noundef %401)
  store i64 %402, ptr %23, align 8, !tbaa !20
  %403 = load i64, ptr %23, align 8, !tbaa !20
  %404 = load ptr, ptr %10, align 8, !tbaa !5
  %405 = load ptr, ptr %9, align 8, !tbaa !5
  %406 = ptrtoint ptr %404 to i64
  %407 = ptrtoint ptr %405 to i64
  %408 = sub i64 %406, %407
  %409 = icmp ule i64 %403, %408
  br i1 %409, label %410, label %450

410:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %411 = load ptr, ptr %5, align 8, !tbaa !5
  %412 = load ptr, ptr %15, align 8, !tbaa !5
  %413 = load ptr, ptr %14, align 8, !tbaa !5
  %414 = load ptr, ptr %15, align 8, !tbaa !5
  %415 = ptrtoint ptr %413 to i64
  %416 = ptrtoint ptr %414 to i64
  %417 = sub i64 %415, %416
  %418 = load ptr, ptr %9, align 8, !tbaa !5
  %419 = load i64, ptr %23, align 8, !tbaa !20
  %420 = load ptr, ptr %5, align 8, !tbaa !5
  %421 = call ptr @ZSTD_getDDict(ptr noundef %420)
  %422 = call i64 @ZSTD_decompress_usingDDict(ptr noundef %411, ptr noundef %412, i64 noundef %417, ptr noundef %418, i64 noundef %419, ptr noundef %421)
  store i64 %422, ptr %24, align 8, !tbaa !20
  %423 = load i64, ptr %24, align 8, !tbaa !20
  %424 = call i32 @ZSTD_isError(i64 noundef %423)
  %425 = icmp ne i32 %424, 0
  br i1 %425, label %426, label %428

426:                                              ; preds = %410
  %427 = load i64, ptr %24, align 8, !tbaa !20
  store i64 %427, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %449

428:                                              ; preds = %410
  br label %429

429:                                              ; preds = %428
  br label %430

430:                                              ; preds = %429
  br label %431

431:                                              ; preds = %430
  %432 = load ptr, ptr %9, align 8, !tbaa !5
  %433 = load i64, ptr %23, align 8, !tbaa !20
  %434 = getelementptr inbounds i8, ptr %432, i64 %433
  store ptr %434, ptr %11, align 8, !tbaa !5
  %435 = load ptr, ptr %15, align 8, !tbaa !5
  %436 = icmp ne ptr %435, null
  br i1 %436, label %437, label %441

437:                                              ; preds = %431
  %438 = load ptr, ptr %15, align 8, !tbaa !5
  %439 = load i64, ptr %24, align 8, !tbaa !20
  %440 = getelementptr inbounds i8, ptr %438, i64 %439
  br label %443

441:                                              ; preds = %431
  %442 = load ptr, ptr %15, align 8, !tbaa !5
  br label %443

443:                                              ; preds = %441, %437
  %444 = phi ptr [ %440, %437 ], [ %442, %441 ]
  store ptr %444, ptr %15, align 8, !tbaa !5
  %445 = load ptr, ptr %5, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %445, i32 0, i32 10
  store i64 0, ptr %446, align 8, !tbaa !39
  %447 = load ptr, ptr %5, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %447, i32 0, i32 39
  store i32 0, ptr %448, align 4, !tbaa !21
  store i32 0, ptr %16, align 4, !tbaa !18
  store i32 38, ptr %17, align 4
  br label %449

449:                                              ; preds = %443, %426
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  br label %451

450:                                              ; preds = %392
  store i32 0, ptr %17, align 4
  br label %451

451:                                              ; preds = %450, %449
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  %452 = load i32, ptr %17, align 4
  switch i32 %452, label %1267 [
    i32 0, label %453
    i32 38, label %1119
  ]

453:                                              ; preds = %451
  br label %454

454:                                              ; preds = %453, %381, %375, %369
  %455 = load ptr, ptr %5, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %455, i32 0, i32 51
  %457 = load i32, ptr %456, align 8, !tbaa !40
  %458 = icmp eq i32 %457, 1
  br i1 %458, label %459, label %498

459:                                              ; preds = %454
  %460 = load ptr, ptr %5, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %460, i32 0, i32 11
  %462 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %461, i32 0, i32 3
  %463 = load i32, ptr %462, align 4, !tbaa !38
  %464 = icmp ne i32 %463, 1
  br i1 %464, label %465, label %498

465:                                              ; preds = %459
  %466 = load ptr, ptr %5, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %466, i32 0, i32 11
  %468 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %467, i32 0, i32 0
  %469 = load i64, ptr %468, align 8, !tbaa !37
  %470 = icmp ne i64 %469, -1
  br i1 %470, label %471, label %498

471:                                              ; preds = %465
  %472 = load ptr, ptr %14, align 8, !tbaa !5
  %473 = load ptr, ptr %15, align 8, !tbaa !5
  %474 = ptrtoint ptr %472 to i64
  %475 = ptrtoint ptr %473 to i64
  %476 = sub i64 %474, %475
  %477 = load ptr, ptr %5, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %477, i32 0, i32 11
  %479 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %478, i32 0, i32 0
  %480 = load i64, ptr %479, align 8, !tbaa !37
  %481 = icmp ult i64 %476, %480
  br i1 %481, label %482, label %498

482:                                              ; preds = %471
  br label %483

483:                                              ; preds = %482
  br label %484

484:                                              ; preds = %483
  br label %485

485:                                              ; preds = %484
  br label %486

486:                                              ; preds = %485
  br label %487

487:                                              ; preds = %486
  br label %488

488:                                              ; preds = %487
  br label %489

489:                                              ; preds = %488
  br label %490

490:                                              ; preds = %489
  br label %491

491:                                              ; preds = %490
  br label %492

492:                                              ; preds = %491
  br label %493

493:                                              ; preds = %492
  br label %494

494:                                              ; preds = %493
  br label %495

495:                                              ; preds = %494
  store i64 -70, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

496:                                              ; No predecessors!
  br label %497

497:                                              ; preds = %496
  br label %498

498:                                              ; preds = %497, %471, %465, %459, %454
  br label %499

499:                                              ; preds = %498
  br label %500

500:                                              ; preds = %499
  br label %501

501:                                              ; preds = %500
  br label %502

502:                                              ; preds = %501
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %503 = load ptr, ptr %5, align 8, !tbaa !5
  %504 = load ptr, ptr %5, align 8, !tbaa !5
  %505 = call ptr @ZSTD_getDDict(ptr noundef %504)
  %506 = call i64 @ZSTD_decompressBegin_usingDDict(ptr noundef %503, ptr noundef %505)
  store i64 %506, ptr %25, align 8, !tbaa !20
  %507 = load i64, ptr %25, align 8, !tbaa !20
  %508 = call i32 @ERR_isError(i64 noundef %507)
  %509 = icmp ne i32 %508, 0
  br i1 %509, label %510, label %524

510:                                              ; preds = %502
  br label %511

511:                                              ; preds = %510
  br label %512

512:                                              ; preds = %511
  br label %513

513:                                              ; preds = %512
  br label %514

514:                                              ; preds = %513
  br label %515

515:                                              ; preds = %514
  br label %516

516:                                              ; preds = %515
  br label %517

517:                                              ; preds = %516
  br label %518

518:                                              ; preds = %517
  br label %519

519:                                              ; preds = %518
  br label %520

520:                                              ; preds = %519
  br label %521

521:                                              ; preds = %520
  br label %522

522:                                              ; preds = %521
  %523 = load i64, ptr %25, align 8, !tbaa !20
  store i64 %523, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %525

524:                                              ; preds = %502
  store i32 0, ptr %17, align 4
  br label %525

525:                                              ; preds = %524, %522
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  %526 = load i32, ptr %17, align 4
  switch i32 %526, label %1267 [
    i32 0, label %527
  ]

527:                                              ; preds = %525
  br label %528

528:                                              ; preds = %527
  br label %529

529:                                              ; preds = %528
  %530 = load ptr, ptr %5, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %530, i32 0, i32 20
  %532 = load i32, ptr %531, align 8, !tbaa !34
  %533 = icmp eq i32 %532, 0
  br i1 %533, label %534, label %552

534:                                              ; preds = %529
  %535 = load ptr, ptr %5, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %535, i32 0, i32 57
  %537 = getelementptr inbounds [18 x i8], ptr %536, i64 0, i64 0
  %538 = call i32 @MEM_readLE32(ptr noundef %537)
  %539 = and i32 %538, -16
  %540 = icmp eq i32 %539, 407710288
  br i1 %540, label %541, label %552

541:                                              ; preds = %534
  %542 = load ptr, ptr %5, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %542, i32 0, i32 57
  %544 = getelementptr inbounds [18 x i8], ptr %543, i64 0, i64 0
  %545 = getelementptr inbounds i8, ptr %544, i64 4
  %546 = call i32 @MEM_readLE32(ptr noundef %545)
  %547 = zext i32 %546 to i64
  %548 = load ptr, ptr %5, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %548, i32 0, i32 10
  store i64 %547, ptr %549, align 8, !tbaa !39
  %550 = load ptr, ptr %5, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %550, i32 0, i32 15
  store i32 7, ptr %551, align 4, !tbaa !41
  br label %589

552:                                              ; preds = %534, %529
  br label %553

553:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  %554 = load ptr, ptr %5, align 8, !tbaa !5
  %555 = load ptr, ptr %5, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %555, i32 0, i32 57
  %557 = getelementptr inbounds [18 x i8], ptr %556, i64 0, i64 0
  %558 = load ptr, ptr %5, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %558, i32 0, i32 48
  %560 = load i64, ptr %559, align 8, !tbaa !31
  %561 = call i64 @ZSTD_decodeFrameHeader(ptr noundef %554, ptr noundef %557, i64 noundef %560)
  store i64 %561, ptr %26, align 8, !tbaa !20
  %562 = load i64, ptr %26, align 8, !tbaa !20
  %563 = call i32 @ERR_isError(i64 noundef %562)
  %564 = icmp ne i32 %563, 0
  br i1 %564, label %565, label %579

565:                                              ; preds = %553
  br label %566

566:                                              ; preds = %565
  br label %567

567:                                              ; preds = %566
  br label %568

568:                                              ; preds = %567
  br label %569

569:                                              ; preds = %568
  br label %570

570:                                              ; preds = %569
  br label %571

571:                                              ; preds = %570
  br label %572

572:                                              ; preds = %571
  br label %573

573:                                              ; preds = %572
  br label %574

574:                                              ; preds = %573
  br label %575

575:                                              ; preds = %574
  br label %576

576:                                              ; preds = %575
  br label %577

577:                                              ; preds = %576
  %578 = load i64, ptr %26, align 8, !tbaa !20
  store i64 %578, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %580

579:                                              ; preds = %553
  store i32 0, ptr %17, align 4
  br label %580

580:                                              ; preds = %579, %577
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  %581 = load i32, ptr %17, align 4
  switch i32 %581, label %1267 [
    i32 0, label %582
  ]

582:                                              ; preds = %580
  br label %583

583:                                              ; preds = %582
  br label %584

584:                                              ; preds = %583
  %585 = load ptr, ptr %5, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %585, i32 0, i32 10
  store i64 3, ptr %586, align 8, !tbaa !39
  %587 = load ptr, ptr %5, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %587, i32 0, i32 15
  store i32 2, ptr %588, align 4, !tbaa !41
  br label %589

589:                                              ; preds = %584, %541
  br label %590

590:                                              ; preds = %589
  br label %591

591:                                              ; preds = %590
  br label %592

592:                                              ; preds = %591
  %593 = load ptr, ptr %5, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %593, i32 0, i32 11
  %595 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %594, i32 0, i32 1
  %596 = load i64, ptr %595, align 8, !tbaa !42
  %597 = icmp ugt i64 %596, 1024
  br i1 %597, label %598, label %603

598:                                              ; preds = %592
  %599 = load ptr, ptr %5, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %599, i32 0, i32 11
  %601 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %600, i32 0, i32 1
  %602 = load i64, ptr %601, align 8, !tbaa !42
  br label %604

603:                                              ; preds = %592
  br label %604

604:                                              ; preds = %603, %598
  %605 = phi i64 [ %602, %598 ], [ 1024, %603 ]
  %606 = load ptr, ptr %5, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %606, i32 0, i32 11
  %608 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %607, i32 0, i32 1
  store i64 %605, ptr %608, align 8, !tbaa !42
  br label %609

609:                                              ; preds = %604
  %610 = load ptr, ptr %5, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %610, i32 0, i32 11
  %612 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %611, i32 0, i32 1
  %613 = load i64, ptr %612, align 8, !tbaa !42
  %614 = load ptr, ptr %5, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %614, i32 0, i32 43
  %616 = load i64, ptr %615, align 8, !tbaa !43
  %617 = icmp ugt i64 %613, %616
  br i1 %617, label %618, label %631

618:                                              ; preds = %609
  br label %619

619:                                              ; preds = %618
  br label %620

620:                                              ; preds = %619
  br label %621

621:                                              ; preds = %620
  br label %622

622:                                              ; preds = %621
  br label %623

623:                                              ; preds = %622
  br label %624

624:                                              ; preds = %623
  br label %625

625:                                              ; preds = %624
  br label %626

626:                                              ; preds = %625
  br label %627

627:                                              ; preds = %626
  br label %628

628:                                              ; preds = %627
  br label %629

629:                                              ; preds = %628
  br label %630

630:                                              ; preds = %629
  store i64 -16, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

631:                                              ; preds = %609
  br label %632

632:                                              ; preds = %631
  br label %633

633:                                              ; preds = %632
  %634 = load ptr, ptr %5, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %634, i32 0, i32 38
  %636 = load i32, ptr %635, align 8, !tbaa !44
  %637 = icmp ne i32 %636, 0
  br i1 %637, label %638, label %661

638:                                              ; preds = %633
  %639 = load ptr, ptr %5, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %639, i32 0, i32 11
  %641 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %640, i32 0, i32 2
  %642 = load i32, ptr %641, align 8, !tbaa !45
  %643 = load ptr, ptr %5, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %643, i32 0, i32 38
  %645 = load i32, ptr %644, align 8, !tbaa !44
  %646 = icmp ult i32 %642, %645
  br i1 %646, label %647, label %652

647:                                              ; preds = %638
  %648 = load ptr, ptr %5, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %648, i32 0, i32 11
  %650 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %649, i32 0, i32 2
  %651 = load i32, ptr %650, align 8, !tbaa !45
  br label %656

652:                                              ; preds = %638
  %653 = load ptr, ptr %5, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %653, i32 0, i32 38
  %655 = load i32, ptr %654, align 8, !tbaa !44
  br label %656

656:                                              ; preds = %652, %647
  %657 = phi i32 [ %651, %647 ], [ %655, %652 ]
  %658 = load ptr, ptr %5, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %658, i32 0, i32 11
  %660 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %659, i32 0, i32 2
  store i32 %657, ptr %660, align 8, !tbaa !45
  br label %661

661:                                              ; preds = %656, %633
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  %662 = load ptr, ptr %5, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %662, i32 0, i32 11
  %664 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %663, i32 0, i32 2
  %665 = load i32, ptr %664, align 8, !tbaa !45
  %666 = icmp ugt i32 %665, 4
  br i1 %666, label %667, label %672

667:                                              ; preds = %661
  %668 = load ptr, ptr %5, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %668, i32 0, i32 11
  %670 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %669, i32 0, i32 2
  %671 = load i32, ptr %670, align 8, !tbaa !45
  br label %673

672:                                              ; preds = %661
  br label %673

673:                                              ; preds = %672, %667
  %674 = phi i32 [ %671, %667 ], [ 4, %672 ]
  %675 = zext i32 %674 to i64
  store i64 %675, ptr %27, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %676 = load ptr, ptr %5, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %676, i32 0, i32 51
  %678 = load i32, ptr %677, align 8, !tbaa !40
  %679 = icmp eq i32 %678, 0
  br i1 %679, label %680, label %695

680:                                              ; preds = %673
  %681 = load ptr, ptr %5, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %681, i32 0, i32 11
  %683 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %682, i32 0, i32 1
  %684 = load i64, ptr %683, align 8, !tbaa !42
  %685 = load ptr, ptr %5, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %685, i32 0, i32 11
  %687 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %686, i32 0, i32 0
  %688 = load i64, ptr %687, align 8, !tbaa !37
  %689 = load ptr, ptr %5, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %689, i32 0, i32 11
  %691 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %690, i32 0, i32 2
  %692 = load i32, ptr %691, align 8, !tbaa !45
  %693 = zext i32 %692 to i64
  %694 = call i64 @ZSTD_decodingBufferSize_internal(i64 noundef %684, i64 noundef %688, i64 noundef %693)
  br label %696

695:                                              ; preds = %673
  br label %696

696:                                              ; preds = %695, %680
  %697 = phi i64 [ %694, %680 ], [ 0, %695 ]
  store i64 %697, ptr %28, align 8, !tbaa !20
  %698 = load ptr, ptr %5, align 8, !tbaa !5
  %699 = load i64, ptr %27, align 8, !tbaa !20
  %700 = load i64, ptr %28, align 8, !tbaa !20
  call void @ZSTD_DCtx_updateOversizedDuration(ptr noundef %698, i64 noundef %699, i64 noundef %700)
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %701 = load ptr, ptr %5, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %701, i32 0, i32 41
  %703 = load i64, ptr %702, align 8, !tbaa !46
  %704 = load i64, ptr %27, align 8, !tbaa !20
  %705 = icmp ult i64 %703, %704
  br i1 %705, label %712, label %706

706:                                              ; preds = %696
  %707 = load ptr, ptr %5, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %707, i32 0, i32 45
  %709 = load i64, ptr %708, align 8, !tbaa !47
  %710 = load i64, ptr %28, align 8, !tbaa !20
  %711 = icmp ult i64 %709, %710
  br label %712

712:                                              ; preds = %706, %696
  %713 = phi i1 [ true, %696 ], [ %711, %706 ]
  %714 = zext i1 %713 to i32
  store i32 %714, ptr %29, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %715 = load ptr, ptr %5, align 8, !tbaa !5
  %716 = call i32 @ZSTD_DCtx_isOversizedTooLong(ptr noundef %715)
  store i32 %716, ptr %30, align 4, !tbaa !18
  %717 = load i32, ptr %29, align 4, !tbaa !18
  %718 = icmp ne i32 %717, 0
  br i1 %718, label %722, label %719

719:                                              ; preds = %712
  %720 = load i32, ptr %30, align 4, !tbaa !18
  %721 = icmp ne i32 %720, 0
  br i1 %721, label %722, label %819

722:                                              ; preds = %719, %712
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %723 = load i64, ptr %27, align 8, !tbaa !20
  %724 = load i64, ptr %28, align 8, !tbaa !20
  %725 = add i64 %723, %724
  store i64 %725, ptr %31, align 8, !tbaa !20
  br label %726

726:                                              ; preds = %722
  br label %727

727:                                              ; preds = %726
  br label %728

728:                                              ; preds = %727
  br label %729

729:                                              ; preds = %728
  br label %730

730:                                              ; preds = %729
  br label %731

731:                                              ; preds = %730
  %732 = load ptr, ptr %5, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %732, i32 0, i32 27
  %734 = load i64, ptr %733, align 8, !tbaa !48
  %735 = icmp ne i64 %734, 0
  br i1 %735, label %736, label %763

736:                                              ; preds = %731
  br label %737

737:                                              ; preds = %736
  br label %738

738:                                              ; preds = %737
  br label %739

739:                                              ; preds = %738
  br label %740

740:                                              ; preds = %739
  %741 = load i64, ptr %31, align 8, !tbaa !20
  %742 = load ptr, ptr %5, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %742, i32 0, i32 27
  %744 = load i64, ptr %743, align 8, !tbaa !48
  %745 = sub i64 %744, 95968
  %746 = icmp ugt i64 %741, %745
  br i1 %746, label %747, label %760

747:                                              ; preds = %740
  br label %748

748:                                              ; preds = %747
  br label %749

749:                                              ; preds = %748
  br label %750

750:                                              ; preds = %749
  br label %751

751:                                              ; preds = %750
  br label %752

752:                                              ; preds = %751
  br label %753

753:                                              ; preds = %752
  br label %754

754:                                              ; preds = %753
  br label %755

755:                                              ; preds = %754
  br label %756

756:                                              ; preds = %755
  br label %757

757:                                              ; preds = %756
  br label %758

758:                                              ; preds = %757
  br label %759

759:                                              ; preds = %758
  store i64 -64, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %816

760:                                              ; preds = %740
  br label %761

761:                                              ; preds = %760
  br label %762

762:                                              ; preds = %761
  br label %800

763:                                              ; preds = %731
  %764 = load ptr, ptr %5, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %764, i32 0, i32 40
  %766 = load ptr, ptr %765, align 8, !tbaa !49
  %767 = load ptr, ptr %5, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %767, i32 0, i32 24
  call void @ZSTD_customFree(ptr noundef %766, ptr noundef byval(%struct.ZSTD_customMem) align 8 %768)
  %769 = load ptr, ptr %5, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %769, i32 0, i32 41
  store i64 0, ptr %770, align 8, !tbaa !46
  %771 = load ptr, ptr %5, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %771, i32 0, i32 45
  store i64 0, ptr %772, align 8, !tbaa !47
  %773 = load i64, ptr %31, align 8, !tbaa !20
  %774 = load ptr, ptr %5, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %774, i32 0, i32 24
  %776 = call ptr @ZSTD_customMalloc(i64 noundef %773, ptr noundef byval(%struct.ZSTD_customMem) align 8 %775)
  %777 = load ptr, ptr %5, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %777, i32 0, i32 40
  store ptr %776, ptr %778, align 8, !tbaa !49
  br label %779

779:                                              ; preds = %763
  %780 = load ptr, ptr %5, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %780, i32 0, i32 40
  %782 = load ptr, ptr %781, align 8, !tbaa !49
  %783 = icmp eq ptr %782, null
  br i1 %783, label %784, label %797

784:                                              ; preds = %779
  br label %785

785:                                              ; preds = %784
  br label %786

786:                                              ; preds = %785
  br label %787

787:                                              ; preds = %786
  br label %788

788:                                              ; preds = %787
  br label %789

789:                                              ; preds = %788
  br label %790

790:                                              ; preds = %789
  br label %791

791:                                              ; preds = %790
  br label %792

792:                                              ; preds = %791
  br label %793

793:                                              ; preds = %792
  br label %794

794:                                              ; preds = %793
  br label %795

795:                                              ; preds = %794
  br label %796

796:                                              ; preds = %795
  store i64 -64, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %816

797:                                              ; preds = %779
  br label %798

798:                                              ; preds = %797
  br label %799

799:                                              ; preds = %798
  br label %800

800:                                              ; preds = %799, %762
  %801 = load i64, ptr %27, align 8, !tbaa !20
  %802 = load ptr, ptr %5, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %802, i32 0, i32 41
  store i64 %801, ptr %803, align 8, !tbaa !46
  %804 = load ptr, ptr %5, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %804, i32 0, i32 40
  %806 = load ptr, ptr %805, align 8, !tbaa !49
  %807 = load ptr, ptr %5, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %807, i32 0, i32 41
  %809 = load i64, ptr %808, align 8, !tbaa !46
  %810 = getelementptr inbounds i8, ptr %806, i64 %809
  %811 = load ptr, ptr %5, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %811, i32 0, i32 44
  store ptr %810, ptr %812, align 8, !tbaa !50
  %813 = load i64, ptr %28, align 8, !tbaa !20
  %814 = load ptr, ptr %5, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %814, i32 0, i32 45
  store i64 %813, ptr %815, align 8, !tbaa !47
  store i32 0, ptr %17, align 4
  br label %816

816:                                              ; preds = %800, %796, %759
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  %817 = load i32, ptr %17, align 4
  switch i32 %817, label %820 [
    i32 0, label %818
  ]

818:                                              ; preds = %816
  br label %819

819:                                              ; preds = %818, %719
  store i32 0, ptr %17, align 4
  br label %820

820:                                              ; preds = %819, %816
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  %821 = load i32, ptr %17, align 4
  switch i32 %821, label %823 [
    i32 0, label %822
  ]

822:                                              ; preds = %820
  store i32 0, ptr %17, align 4
  br label %823

823:                                              ; preds = %822, %820
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  %824 = load i32, ptr %17, align 4
  switch i32 %824, label %1267 [
    i32 0, label %825
  ]

825:                                              ; preds = %823
  %826 = load ptr, ptr %5, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %826, i32 0, i32 39
  store i32 2, ptr %827, align 4, !tbaa !21
  br label %828

828:                                              ; preds = %825, %190
  br label %829

829:                                              ; preds = %828
  br label %830

830:                                              ; preds = %829
  br label %831

831:                                              ; preds = %830
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %832 = load ptr, ptr %5, align 8, !tbaa !5
  %833 = load ptr, ptr %10, align 8, !tbaa !5
  %834 = load ptr, ptr %11, align 8, !tbaa !5
  %835 = ptrtoint ptr %833 to i64
  %836 = ptrtoint ptr %834 to i64
  %837 = sub i64 %835, %836
  %838 = call i64 @ZSTD_nextSrcSizeToDecompressWithInputSize(ptr noundef %832, i64 noundef %837)
  store i64 %838, ptr %32, align 8, !tbaa !20
  br label %839

839:                                              ; preds = %831
  br label %840

840:                                              ; preds = %839
  br label %841

841:                                              ; preds = %840
  %842 = load i64, ptr %32, align 8, !tbaa !20
  %843 = icmp eq i64 %842, 0
  br i1 %843, label %844, label %847

844:                                              ; preds = %841
  %845 = load ptr, ptr %5, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %845, i32 0, i32 39
  store i32 0, ptr %846, align 4, !tbaa !21
  store i32 0, ptr %16, align 4, !tbaa !18
  store i32 38, ptr %17, align 4
  br label %889

847:                                              ; preds = %841
  %848 = load ptr, ptr %10, align 8, !tbaa !5
  %849 = load ptr, ptr %11, align 8, !tbaa !5
  %850 = ptrtoint ptr %848 to i64
  %851 = ptrtoint ptr %849 to i64
  %852 = sub i64 %850, %851
  %853 = load i64, ptr %32, align 8, !tbaa !20
  %854 = icmp uge i64 %852, %853
  br i1 %854, label %855, label %888

855:                                              ; preds = %847
  br label %856

856:                                              ; preds = %855
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %857 = load ptr, ptr %5, align 8, !tbaa !5
  %858 = load ptr, ptr %14, align 8, !tbaa !5
  %859 = load ptr, ptr %11, align 8, !tbaa !5
  %860 = load i64, ptr %32, align 8, !tbaa !20
  %861 = call i64 @ZSTD_decompressContinueStream(ptr noundef %857, ptr noundef %15, ptr noundef %858, ptr noundef %859, i64 noundef %860)
  store i64 %861, ptr %33, align 8, !tbaa !20
  %862 = load i64, ptr %33, align 8, !tbaa !20
  %863 = call i32 @ERR_isError(i64 noundef %862)
  %864 = icmp ne i32 %863, 0
  br i1 %864, label %865, label %879

865:                                              ; preds = %856
  br label %866

866:                                              ; preds = %865
  br label %867

867:                                              ; preds = %866
  br label %868

868:                                              ; preds = %867
  br label %869

869:                                              ; preds = %868
  br label %870

870:                                              ; preds = %869
  br label %871

871:                                              ; preds = %870
  br label %872

872:                                              ; preds = %871
  br label %873

873:                                              ; preds = %872
  br label %874

874:                                              ; preds = %873
  br label %875

875:                                              ; preds = %874
  br label %876

876:                                              ; preds = %875
  br label %877

877:                                              ; preds = %876
  %878 = load i64, ptr %33, align 8, !tbaa !20
  store i64 %878, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %880

879:                                              ; preds = %856
  store i32 0, ptr %17, align 4
  br label %880

880:                                              ; preds = %879, %877
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  %881 = load i32, ptr %17, align 4
  switch i32 %881, label %889 [
    i32 0, label %882
  ]

882:                                              ; preds = %880
  br label %883

883:                                              ; preds = %882
  br label %884

884:                                              ; preds = %883
  %885 = load i64, ptr %32, align 8, !tbaa !20
  %886 = load ptr, ptr %11, align 8, !tbaa !5
  %887 = getelementptr inbounds i8, ptr %886, i64 %885
  store ptr %887, ptr %11, align 8, !tbaa !5
  store i32 38, ptr %17, align 4
  br label %889

888:                                              ; preds = %847
  store i32 0, ptr %17, align 4
  br label %889

889:                                              ; preds = %888, %884, %880, %844
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  %890 = load i32, ptr %17, align 4
  switch i32 %890, label %1267 [
    i32 0, label %891
    i32 38, label %1119
  ]

891:                                              ; preds = %889
  %892 = load ptr, ptr %11, align 8, !tbaa !5
  %893 = load ptr, ptr %10, align 8, !tbaa !5
  %894 = icmp eq ptr %892, %893
  br i1 %894, label %895, label %896

895:                                              ; preds = %891
  store i32 0, ptr %16, align 4, !tbaa !18
  br label %1119

896:                                              ; preds = %891
  %897 = load ptr, ptr %5, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %897, i32 0, i32 39
  store i32 3, ptr %898, align 4, !tbaa !21
  br label %899

899:                                              ; preds = %896, %190
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  %900 = load ptr, ptr %5, align 8, !tbaa !5
  %901 = call i64 @ZSTD_nextSrcSizeToDecompress(ptr noundef %900)
  store i64 %901, ptr %34, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  %902 = load i64, ptr %34, align 8, !tbaa !20
  %903 = load ptr, ptr %5, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %903, i32 0, i32 42
  %905 = load i64, ptr %904, align 8, !tbaa !30
  %906 = sub i64 %902, %905
  store i64 %906, ptr %35, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %907 = load ptr, ptr %5, align 8, !tbaa !5
  %908 = call i32 @ZSTD_isSkipFrame(ptr noundef %907)
  store i32 %908, ptr %36, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %909 = load i32, ptr %36, align 4, !tbaa !18
  %910 = icmp ne i32 %909, 0
  br i1 %910, label %911, label %929

911:                                              ; preds = %899
  %912 = load i64, ptr %35, align 8, !tbaa !20
  %913 = load ptr, ptr %10, align 8, !tbaa !5
  %914 = load ptr, ptr %11, align 8, !tbaa !5
  %915 = ptrtoint ptr %913 to i64
  %916 = ptrtoint ptr %914 to i64
  %917 = sub i64 %915, %916
  %918 = icmp ult i64 %912, %917
  br i1 %918, label %919, label %921

919:                                              ; preds = %911
  %920 = load i64, ptr %35, align 8, !tbaa !20
  br label %927

921:                                              ; preds = %911
  %922 = load ptr, ptr %10, align 8, !tbaa !5
  %923 = load ptr, ptr %11, align 8, !tbaa !5
  %924 = ptrtoint ptr %922 to i64
  %925 = ptrtoint ptr %923 to i64
  %926 = sub i64 %924, %925
  br label %927

927:                                              ; preds = %921, %919
  %928 = phi i64 [ %920, %919 ], [ %926, %921 ]
  store i64 %928, ptr %37, align 8, !tbaa !20
  br label %971

929:                                              ; preds = %899
  br label %930

930:                                              ; preds = %929
  %931 = load i64, ptr %35, align 8, !tbaa !20
  %932 = load ptr, ptr %5, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %932, i32 0, i32 41
  %934 = load i64, ptr %933, align 8, !tbaa !46
  %935 = load ptr, ptr %5, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %935, i32 0, i32 42
  %937 = load i64, ptr %936, align 8, !tbaa !30
  %938 = sub i64 %934, %937
  %939 = icmp ugt i64 %931, %938
  br i1 %939, label %940, label %953

940:                                              ; preds = %930
  br label %941

941:                                              ; preds = %940
  br label %942

942:                                              ; preds = %941
  br label %943

943:                                              ; preds = %942
  br label %944

944:                                              ; preds = %943
  br label %945

945:                                              ; preds = %944
  br label %946

946:                                              ; preds = %945
  br label %947

947:                                              ; preds = %946
  br label %948

948:                                              ; preds = %947
  br label %949

949:                                              ; preds = %948
  br label %950

950:                                              ; preds = %949
  br label %951

951:                                              ; preds = %950
  br label %952

952:                                              ; preds = %951
  store i64 -20, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1022

953:                                              ; preds = %930
  br label %954

954:                                              ; preds = %953
  br label %955

955:                                              ; preds = %954
  %956 = load ptr, ptr %5, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %956, i32 0, i32 40
  %958 = load ptr, ptr %957, align 8, !tbaa !49
  %959 = load ptr, ptr %5, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %959, i32 0, i32 42
  %961 = load i64, ptr %960, align 8, !tbaa !30
  %962 = getelementptr inbounds i8, ptr %958, i64 %961
  %963 = load i64, ptr %35, align 8, !tbaa !20
  %964 = load ptr, ptr %11, align 8, !tbaa !5
  %965 = load ptr, ptr %10, align 8, !tbaa !5
  %966 = load ptr, ptr %11, align 8, !tbaa !5
  %967 = ptrtoint ptr %965 to i64
  %968 = ptrtoint ptr %966 to i64
  %969 = sub i64 %967, %968
  %970 = call i64 @ZSTD_limitCopy(ptr noundef %962, i64 noundef %963, ptr noundef %964, i64 noundef %969)
  store i64 %970, ptr %37, align 8, !tbaa !20
  br label %971

971:                                              ; preds = %955, %927
  %972 = load i64, ptr %37, align 8, !tbaa !20
  %973 = icmp ne i64 %972, 0
  br i1 %973, label %974, label %983

974:                                              ; preds = %971
  %975 = load i64, ptr %37, align 8, !tbaa !20
  %976 = load ptr, ptr %11, align 8, !tbaa !5
  %977 = getelementptr inbounds i8, ptr %976, i64 %975
  store ptr %977, ptr %11, align 8, !tbaa !5
  %978 = load i64, ptr %37, align 8, !tbaa !20
  %979 = load ptr, ptr %5, align 8, !tbaa !5
  %980 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %979, i32 0, i32 42
  %981 = load i64, ptr %980, align 8, !tbaa !30
  %982 = add i64 %981, %978
  store i64 %982, ptr %980, align 8, !tbaa !30
  br label %983

983:                                              ; preds = %974, %971
  %984 = load i64, ptr %37, align 8, !tbaa !20
  %985 = load i64, ptr %35, align 8, !tbaa !20
  %986 = icmp ult i64 %984, %985
  br i1 %986, label %987, label %988

987:                                              ; preds = %983
  store i32 0, ptr %16, align 4, !tbaa !18
  store i32 38, ptr %17, align 4
  br label %1022

988:                                              ; preds = %983
  %989 = load ptr, ptr %5, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %989, i32 0, i32 42
  store i64 0, ptr %990, align 8, !tbaa !30
  br label %991

991:                                              ; preds = %988
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %992 = load ptr, ptr %5, align 8, !tbaa !5
  %993 = load ptr, ptr %14, align 8, !tbaa !5
  %994 = load ptr, ptr %5, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %994, i32 0, i32 40
  %996 = load ptr, ptr %995, align 8, !tbaa !49
  %997 = load i64, ptr %34, align 8, !tbaa !20
  %998 = call i64 @ZSTD_decompressContinueStream(ptr noundef %992, ptr noundef %15, ptr noundef %993, ptr noundef %996, i64 noundef %997)
  store i64 %998, ptr %38, align 8, !tbaa !20
  %999 = load i64, ptr %38, align 8, !tbaa !20
  %1000 = call i32 @ERR_isError(i64 noundef %999)
  %1001 = icmp ne i32 %1000, 0
  br i1 %1001, label %1002, label %1016

1002:                                             ; preds = %991
  br label %1003

1003:                                             ; preds = %1002
  br label %1004

1004:                                             ; preds = %1003
  br label %1005

1005:                                             ; preds = %1004
  br label %1006

1006:                                             ; preds = %1005
  br label %1007

1007:                                             ; preds = %1006
  br label %1008

1008:                                             ; preds = %1007
  br label %1009

1009:                                             ; preds = %1008
  br label %1010

1010:                                             ; preds = %1009
  br label %1011

1011:                                             ; preds = %1010
  br label %1012

1012:                                             ; preds = %1011
  br label %1013

1013:                                             ; preds = %1012
  br label %1014

1014:                                             ; preds = %1013
  %1015 = load i64, ptr %38, align 8, !tbaa !20
  store i64 %1015, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1017

1016:                                             ; preds = %991
  store i32 0, ptr %17, align 4
  br label %1017

1017:                                             ; preds = %1016, %1014
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  %1018 = load i32, ptr %17, align 4
  switch i32 %1018, label %1022 [
    i32 0, label %1019
  ]

1019:                                             ; preds = %1017
  br label %1020

1020:                                             ; preds = %1019
  br label %1021

1021:                                             ; preds = %1020
  store i32 38, ptr %17, align 4
  br label %1022

1022:                                             ; preds = %1021, %1017, %987, %952
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  %1023 = load i32, ptr %17, align 4
  switch i32 %1023, label %1267 [
    i32 38, label %1119
  ]

1024:                                             ; preds = %190
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  %1025 = load ptr, ptr %5, align 8, !tbaa !5
  %1026 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1025, i32 0, i32 47
  %1027 = load i64, ptr %1026, align 8, !tbaa !28
  %1028 = load ptr, ptr %5, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1028, i32 0, i32 46
  %1030 = load i64, ptr %1029, align 8, !tbaa !29
  %1031 = sub i64 %1027, %1030
  store i64 %1031, ptr %39, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  %1032 = load ptr, ptr %15, align 8, !tbaa !5
  %1033 = load ptr, ptr %14, align 8, !tbaa !5
  %1034 = load ptr, ptr %15, align 8, !tbaa !5
  %1035 = ptrtoint ptr %1033 to i64
  %1036 = ptrtoint ptr %1034 to i64
  %1037 = sub i64 %1035, %1036
  %1038 = load ptr, ptr %5, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1038, i32 0, i32 44
  %1040 = load ptr, ptr %1039, align 8, !tbaa !50
  %1041 = load ptr, ptr %5, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1041, i32 0, i32 46
  %1043 = load i64, ptr %1042, align 8, !tbaa !29
  %1044 = getelementptr inbounds i8, ptr %1040, i64 %1043
  %1045 = load i64, ptr %39, align 8, !tbaa !20
  %1046 = call i64 @ZSTD_limitCopy(ptr noundef %1032, i64 noundef %1037, ptr noundef %1044, i64 noundef %1045)
  store i64 %1046, ptr %40, align 8, !tbaa !20
  %1047 = load ptr, ptr %15, align 8, !tbaa !5
  %1048 = icmp ne ptr %1047, null
  br i1 %1048, label %1049, label %1053

1049:                                             ; preds = %1024
  %1050 = load ptr, ptr %15, align 8, !tbaa !5
  %1051 = load i64, ptr %40, align 8, !tbaa !20
  %1052 = getelementptr inbounds i8, ptr %1050, i64 %1051
  br label %1055

1053:                                             ; preds = %1024
  %1054 = load ptr, ptr %15, align 8, !tbaa !5
  br label %1055

1055:                                             ; preds = %1053, %1049
  %1056 = phi ptr [ %1052, %1049 ], [ %1054, %1053 ]
  store ptr %1056, ptr %15, align 8, !tbaa !5
  %1057 = load i64, ptr %40, align 8, !tbaa !20
  %1058 = load ptr, ptr %5, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1058, i32 0, i32 46
  %1060 = load i64, ptr %1059, align 8, !tbaa !29
  %1061 = add i64 %1060, %1057
  store i64 %1061, ptr %1059, align 8, !tbaa !29
  %1062 = load i64, ptr %40, align 8, !tbaa !20
  %1063 = load i64, ptr %39, align 8, !tbaa !20
  %1064 = icmp eq i64 %1062, %1063
  br i1 %1064, label %1065, label %1099

1065:                                             ; preds = %1055
  %1066 = load ptr, ptr %5, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1066, i32 0, i32 39
  store i32 2, ptr %1067, align 4, !tbaa !21
  %1068 = load ptr, ptr %5, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1068, i32 0, i32 45
  %1070 = load i64, ptr %1069, align 8, !tbaa !47
  %1071 = load ptr, ptr %5, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1071, i32 0, i32 11
  %1073 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %1072, i32 0, i32 0
  %1074 = load i64, ptr %1073, align 8, !tbaa !37
  %1075 = icmp ult i64 %1070, %1074
  br i1 %1075, label %1076, label %1098

1076:                                             ; preds = %1065
  %1077 = load ptr, ptr %5, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1077, i32 0, i32 46
  %1079 = load i64, ptr %1078, align 8, !tbaa !29
  %1080 = load ptr, ptr %5, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1080, i32 0, i32 11
  %1082 = getelementptr inbounds %struct.ZSTD_frameHeader, ptr %1081, i32 0, i32 2
  %1083 = load i32, ptr %1082, align 8, !tbaa !45
  %1084 = zext i32 %1083 to i64
  %1085 = add i64 %1079, %1084
  %1086 = load ptr, ptr %5, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1086, i32 0, i32 45
  %1088 = load i64, ptr %1087, align 8, !tbaa !47
  %1089 = icmp ugt i64 %1085, %1088
  br i1 %1089, label %1090, label %1098

1090:                                             ; preds = %1076
  br label %1091

1091:                                             ; preds = %1090
  br label %1092

1092:                                             ; preds = %1091
  br label %1093

1093:                                             ; preds = %1092
  %1094 = load ptr, ptr %5, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1094, i32 0, i32 47
  store i64 0, ptr %1095, align 8, !tbaa !28
  %1096 = load ptr, ptr %5, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1096, i32 0, i32 46
  store i64 0, ptr %1097, align 8, !tbaa !29
  br label %1098

1098:                                             ; preds = %1093, %1076, %1065
  store i32 38, ptr %17, align 4
  br label %1100

1099:                                             ; preds = %1055
  store i32 0, ptr %17, align 4
  br label %1100

1100:                                             ; preds = %1099, %1098
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  %1101 = load i32, ptr %17, align 4
  switch i32 %1101, label %1269 [
    i32 0, label %1102
    i32 38, label %1119
  ]

1102:                                             ; preds = %1100
  store i32 0, ptr %16, align 4, !tbaa !18
  br label %1119

1103:                                             ; preds = %190
  br label %1104

1104:                                             ; preds = %1103
  br label %1105

1105:                                             ; preds = %1104
  br label %1106

1106:                                             ; preds = %1105
  br label %1107

1107:                                             ; preds = %1106
  br label %1108

1108:                                             ; preds = %1107
  br label %1109

1109:                                             ; preds = %1108
  br label %1110

1110:                                             ; preds = %1109
  br label %1111

1111:                                             ; preds = %1110
  br label %1112

1112:                                             ; preds = %1111
  br label %1113

1113:                                             ; preds = %1112
  br label %1114

1114:                                             ; preds = %1113
  br label %1115

1115:                                             ; preds = %1114
  br label %1116

1116:                                             ; preds = %1115
  store i64 -1, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

1117:                                             ; No predecessors!
  br label %1118

1118:                                             ; preds = %1117
  br label %1119

1119:                                             ; preds = %1118, %1102, %1100, %1022, %895, %889, %451, %367
  br label %187, !llvm.loop !51

1120:                                             ; preds = %187
  %1121 = load ptr, ptr %11, align 8, !tbaa !5
  %1122 = load ptr, ptr %7, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %1122, i32 0, i32 0
  %1124 = load ptr, ptr %1123, align 8, !tbaa !9
  %1125 = ptrtoint ptr %1121 to i64
  %1126 = ptrtoint ptr %1124 to i64
  %1127 = sub i64 %1125, %1126
  %1128 = load ptr, ptr %7, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %1128, i32 0, i32 2
  store i64 %1127, ptr %1129, align 8, !tbaa !12
  %1130 = load ptr, ptr %15, align 8, !tbaa !5
  %1131 = load ptr, ptr %6, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %1131, i32 0, i32 0
  %1133 = load ptr, ptr %1132, align 8, !tbaa !14
  %1134 = ptrtoint ptr %1130 to i64
  %1135 = ptrtoint ptr %1133 to i64
  %1136 = sub i64 %1134, %1135
  %1137 = load ptr, ptr %6, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.ZSTD_outBuffer_s, ptr %1137, i32 0, i32 2
  store i64 %1136, ptr %1138, align 8, !tbaa !16
  %1139 = load ptr, ptr %5, align 8, !tbaa !5
  %1140 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1139, i32 0, i32 52
  %1141 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1140, ptr align 8 %1141, i64 24, i1 false), !tbaa.struct !33
  %1142 = load ptr, ptr %11, align 8, !tbaa !5
  %1143 = load ptr, ptr %9, align 8, !tbaa !5
  %1144 = icmp eq ptr %1142, %1143
  br i1 %1144, label %1145, label %1200

1145:                                             ; preds = %1120
  %1146 = load ptr, ptr %15, align 8, !tbaa !5
  %1147 = load ptr, ptr %13, align 8, !tbaa !5
  %1148 = icmp eq ptr %1146, %1147
  br i1 %1148, label %1149, label %1200

1149:                                             ; preds = %1145
  %1150 = load ptr, ptr %5, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1150, i32 0, i32 50
  %1152 = load i32, ptr %1151, align 4, !tbaa !53
  %1153 = add nsw i32 %1152, 1
  store i32 %1153, ptr %1151, align 4, !tbaa !53
  %1154 = load ptr, ptr %5, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1154, i32 0, i32 50
  %1156 = load i32, ptr %1155, align 4, !tbaa !53
  %1157 = icmp sge i32 %1156, 16
  br i1 %1157, label %1158, label %1199

1158:                                             ; preds = %1149
  br label %1159

1159:                                             ; preds = %1158
  %1160 = load ptr, ptr %15, align 8, !tbaa !5
  %1161 = load ptr, ptr %14, align 8, !tbaa !5
  %1162 = icmp eq ptr %1160, %1161
  br i1 %1162, label %1163, label %1176

1163:                                             ; preds = %1159
  br label %1164

1164:                                             ; preds = %1163
  br label %1165

1165:                                             ; preds = %1164
  br label %1166

1166:                                             ; preds = %1165
  br label %1167

1167:                                             ; preds = %1166
  br label %1168

1168:                                             ; preds = %1167
  br label %1169

1169:                                             ; preds = %1168
  br label %1170

1170:                                             ; preds = %1169
  br label %1171

1171:                                             ; preds = %1170
  br label %1172

1172:                                             ; preds = %1171
  br label %1173

1173:                                             ; preds = %1172
  br label %1174

1174:                                             ; preds = %1173
  br label %1175

1175:                                             ; preds = %1174
  store i64 -80, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

1176:                                             ; preds = %1159
  br label %1177

1177:                                             ; preds = %1176
  br label %1178

1178:                                             ; preds = %1177
  br label %1179

1179:                                             ; preds = %1178
  %1180 = load ptr, ptr %11, align 8, !tbaa !5
  %1181 = load ptr, ptr %10, align 8, !tbaa !5
  %1182 = icmp eq ptr %1180, %1181
  br i1 %1182, label %1183, label %1196

1183:                                             ; preds = %1179
  br label %1184

1184:                                             ; preds = %1183
  br label %1185

1185:                                             ; preds = %1184
  br label %1186

1186:                                             ; preds = %1185
  br label %1187

1187:                                             ; preds = %1186
  br label %1188

1188:                                             ; preds = %1187
  br label %1189

1189:                                             ; preds = %1188
  br label %1190

1190:                                             ; preds = %1189
  br label %1191

1191:                                             ; preds = %1190
  br label %1192

1192:                                             ; preds = %1191
  br label %1193

1193:                                             ; preds = %1192
  br label %1194

1194:                                             ; preds = %1193
  br label %1195

1195:                                             ; preds = %1194
  store i64 -82, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1267

1196:                                             ; preds = %1179
  br label %1197

1197:                                             ; preds = %1196
  br label %1198

1198:                                             ; preds = %1197
  br label %1199

1199:                                             ; preds = %1198, %1149
  br label %1203

1200:                                             ; preds = %1145, %1120
  %1201 = load ptr, ptr %5, align 8, !tbaa !5
  %1202 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1201, i32 0, i32 50
  store i32 0, ptr %1202, align 4, !tbaa !53
  br label %1203

1203:                                             ; preds = %1200, %1199
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %1204 = load ptr, ptr %5, align 8, !tbaa !5
  %1205 = call i64 @ZSTD_nextSrcSizeToDecompress(ptr noundef %1204)
  store i64 %1205, ptr %41, align 8, !tbaa !20
  %1206 = load i64, ptr %41, align 8, !tbaa !20
  %1207 = icmp ne i64 %1206, 0
  br i1 %1207, label %1251, label %1208

1208:                                             ; preds = %1203
  %1209 = load ptr, ptr %5, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1209, i32 0, i32 47
  %1211 = load i64, ptr %1210, align 8, !tbaa !28
  %1212 = load ptr, ptr %5, align 8, !tbaa !5
  %1213 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1212, i32 0, i32 46
  %1214 = load i64, ptr %1213, align 8, !tbaa !29
  %1215 = icmp eq i64 %1211, %1214
  br i1 %1215, label %1216, label %1238

1216:                                             ; preds = %1208
  %1217 = load ptr, ptr %5, align 8, !tbaa !5
  %1218 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1217, i32 0, i32 49
  %1219 = load i32, ptr %1218, align 8, !tbaa !32
  %1220 = icmp ne i32 %1219, 0
  br i1 %1220, label %1221, label %1237

1221:                                             ; preds = %1216
  %1222 = load ptr, ptr %7, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %1222, i32 0, i32 2
  %1224 = load i64, ptr %1223, align 8, !tbaa !12
  %1225 = load ptr, ptr %7, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %1225, i32 0, i32 1
  %1227 = load i64, ptr %1226, align 8, !tbaa !13
  %1228 = icmp uge i64 %1224, %1227
  br i1 %1228, label %1229, label %1232

1229:                                             ; preds = %1221
  %1230 = load ptr, ptr %5, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1230, i32 0, i32 39
  store i32 2, ptr %1231, align 4, !tbaa !21
  store i64 1, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1266

1232:                                             ; preds = %1221
  %1233 = load ptr, ptr %7, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %1233, i32 0, i32 2
  %1235 = load i64, ptr %1234, align 8, !tbaa !12
  %1236 = add i64 %1235, 1
  store i64 %1236, ptr %1234, align 8, !tbaa !12
  br label %1237

1237:                                             ; preds = %1232, %1216
  store i64 0, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1266

1238:                                             ; preds = %1208
  %1239 = load ptr, ptr %5, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1239, i32 0, i32 49
  %1241 = load i32, ptr %1240, align 8, !tbaa !32
  %1242 = icmp ne i32 %1241, 0
  br i1 %1242, label %1250, label %1243

1243:                                             ; preds = %1238
  %1244 = load ptr, ptr %7, align 8, !tbaa !5
  %1245 = getelementptr inbounds %struct.ZSTD_inBuffer_s, ptr %1244, i32 0, i32 2
  %1246 = load i64, ptr %1245, align 8, !tbaa !12
  %1247 = add i64 %1246, -1
  store i64 %1247, ptr %1245, align 8, !tbaa !12
  %1248 = load ptr, ptr %5, align 8, !tbaa !5
  %1249 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1248, i32 0, i32 49
  store i32 1, ptr %1249, align 8, !tbaa !32
  br label %1250

1250:                                             ; preds = %1243, %1238
  store i64 1, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1266

1251:                                             ; preds = %1203
  %1252 = load ptr, ptr %5, align 8, !tbaa !5
  %1253 = call i32 @ZSTD_nextInputType(ptr noundef %1252)
  %1254 = icmp eq i32 %1253, 2
  %1255 = zext i1 %1254 to i32
  %1256 = sext i32 %1255 to i64
  %1257 = mul i64 3, %1256
  %1258 = load i64, ptr %41, align 8, !tbaa !20
  %1259 = add i64 %1258, %1257
  store i64 %1259, ptr %41, align 8, !tbaa !20
  %1260 = load ptr, ptr %5, align 8, !tbaa !5
  %1261 = getelementptr inbounds %struct.ZSTD_DCtx_s, ptr %1260, i32 0, i32 42
  %1262 = load i64, ptr %1261, align 8, !tbaa !30
  %1263 = load i64, ptr %41, align 8, !tbaa !20
  %1264 = sub i64 %1263, %1262
  store i64 %1264, ptr %41, align 8, !tbaa !20
  %1265 = load i64, ptr %41, align 8, !tbaa !20
  store i64 %1265, ptr %4, align 8
  store i32 1, ptr %17, align 4
  br label %1266

1266:                                             ; preds = %1251, %1250, %1237, %1229
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  br label %1267

1267:                                             ; preds = %1266, %1195, %1175, %1116, %1022, %889, %823, %630, %580, %525, %495, %451, %367, %182, %153, %129
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  %1268 = load i64, ptr %4, align 8
  ret i64 %1268

1269:                                             ; preds = %1100
  unreachable
}

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_checkOutBuffer(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @ZSTD_DCtx_selectFrameDDict(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @ZSTD_DCtx_updateOversizedDuration(ptr noundef, i64 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @ZSTD_DCtx_isOversizedTooLong(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_decompressContinueStream(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @ZSTD_isSkipFrame(ptr noundef) #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @ZSTD_limitCopy(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #3

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

!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, !6, i64 0}
!10 = !{!"ZSTD_inBuffer_s", !6, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"long", !7, i64 0}
!12 = !{!10, !11, i64 16}
!13 = !{!10, !11, i64 8}
!14 = !{!15, !6, i64 0}
!15 = !{!"ZSTD_outBuffer_s", !6, i64 0, !11, i64 8, !11, i64 16}
!16 = !{!15, !11, i64 16}
!17 = !{!15, !11, i64 8}
!18 = !{!19, !19, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!11, !11, i64 0}
!21 = !{!22, !19, i64 30236}
!22 = !{!"ZSTD_DCtx_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !23, i64 32, !7, i64 27324, !6, i64 29888, !6, i64 29896, !6, i64 29904, !6, i64 29912, !11, i64 29920, !24, i64 29928, !11, i64 29976, !11, i64 29984, !19, i64 29992, !19, i64 29996, !19, i64 30000, !19, i64 30004, !26, i64 30008, !11, i64 30096, !19, i64 30104, !19, i64 30108, !19, i64 30112, !6, i64 30120, !27, i64 30128, !11, i64 30152, !11, i64 30160, !11, i64 30168, !19, i64 30176, !19, i64 30180, !6, i64 30184, !6, i64 30192, !19, i64 30200, !19, i64 30204, !19, i64 30208, !6, i64 30216, !19, i64 30224, !19, i64 30228, !19, i64 30232, !19, i64 30236, !6, i64 30240, !11, i64 30248, !11, i64 30256, !11, i64 30264, !6, i64 30272, !11, i64 30280, !11, i64 30288, !11, i64 30296, !11, i64 30304, !19, i64 30312, !19, i64 30316, !19, i64 30320, !15, i64 30328, !6, i64 30352, !6, i64 30360, !19, i64 30368, !7, i64 30372, !7, i64 95940, !11, i64 95960}
!23 = !{!"", !7, i64 0, !7, i64 4104, !7, i64 6160, !7, i64 10264, !7, i64 26652, !7, i64 26664}
!24 = !{!"", !25, i64 0, !25, i64 8, !19, i64 16, !19, i64 20, !19, i64 24, !19, i64 28, !19, i64 32, !19, i64 36, !19, i64 40}
!25 = !{!"long long", !7, i64 0}
!26 = !{!"XXH_NAMESPACEXXH64_state_s", !11, i64 0, !7, i64 8, !7, i64 40, !19, i64 72, !19, i64 76, !11, i64 80}
!27 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!22, !11, i64 30296}
!29 = !{!22, !11, i64 30288}
!30 = !{!22, !11, i64 30256}
!31 = !{!22, !11, i64 30304}
!32 = !{!22, !19, i64 30312}
!33 = !{i64 0, i64 8, !5, i64 8, i64 8, !20, i64 16, i64 8, !20}
!34 = !{!22, !19, i64 30104}
!35 = !{!22, !19, i64 30224}
!36 = !{!22, !6, i64 30216}
!37 = !{!22, !25, i64 29928}
!38 = !{!22, !19, i64 29948}
!39 = !{!22, !11, i64 29920}
!40 = !{!22, !19, i64 30320}
!41 = !{!22, !19, i64 29996}
!42 = !{!22, !25, i64 29936}
!43 = !{!22, !11, i64 30264}
!44 = !{!22, !19, i64 30232}
!45 = !{!22, !19, i64 29944}
!46 = !{!22, !11, i64 30248}
!47 = !{!22, !11, i64 30280}
!48 = !{!22, !11, i64 30168}
!49 = !{!22, !6, i64 30240}
!50 = !{!22, !6, i64 30272}
!51 = distinct !{!51, !52}
!52 = !{!"llvm.loop.mustprogress"}
!53 = !{!22, !19, i64 30316}


; 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.ZSTD_customMem = type { ptr, ptr, ptr }

; Function Attrs: nounwind uwtable
declare hidden i32 @ERR_isError(i64 noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @ZSTD_customFree(ptr noundef, ptr noundef byval(%struct.ZSTD_customMem) align 8) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @ZSTD_isError(i64 noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @ZSTD_customMalloc(i64 noundef, ptr noundef byval(%struct.ZSTD_customMem) align 8) local_unnamed_addr #3

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_getFrameHeader_advanced(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_findFrameCompressedSize_advanced(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_decompress_usingDDict(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @ZSTD_getDDict(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_nextSrcSizeToDecompress(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @ZSTD_nextInputType(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_nextSrcSizeToDecompressWithInputSize(ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_decodeFrameHeader(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ZSTD_decompressBegin_usingDDict(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_decodingBufferSize_internal(i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i64 @ZSTD_decompressStream(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2) local_unnamed_addr #0 {
  %4 = alloca ptr, align 8
  %5 = load ptr, ptr %2, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %2, i64 16
  %7 = load i64, ptr %6, align 8, !tbaa !11
  %8 = getelementptr inbounds i8, ptr %5, i64 %7
  %9 = getelementptr inbounds i8, ptr %2, i64 8
  %10 = load i64, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %5, i64 %10
  %12 = load ptr, ptr %1, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 16
  %14 = load i64, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %12, i64 %14
  %16 = getelementptr inbounds i8, ptr %1, i64 8
  %17 = load i64, ptr %16, align 8, !tbaa !16
  %18 = getelementptr inbounds i8, ptr %12, i64 %17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  store ptr %15, ptr %4, align 8, !tbaa !17
  %19 = icmp ugt i64 %7, %10
  br i1 %19, label %.thread, label %20

20:                                               ; preds = %3
  %21 = icmp ugt i64 %14, %17
  br i1 %21, label %.thread, label %22

22:                                               ; preds = %20
  %23 = tail call i64 @ZSTD_checkOutBuffer(ptr noundef %0, ptr noundef nonnull %1)
  %24 = tail call i32 @ERR_isError(i64 noundef %23)
  %.not364 = icmp eq i32 %24, 0
  br i1 %.not364, label %.preheader, label %.thread

.preheader:                                       ; preds = %22
  %25 = getelementptr inbounds i8, ptr %0, i64 30236
  %26 = getelementptr inbounds i8, ptr %0, i64 30296
  %27 = getelementptr inbounds i8, ptr %0, i64 30288
  %28 = ptrtoint ptr %18 to i64
  %29 = getelementptr inbounds i8, ptr %0, i64 30272
  %30 = getelementptr inbounds i8, ptr %0, i64 30280
  %31 = getelementptr inbounds i8, ptr %0, i64 29928
  %32 = getelementptr inbounds i8, ptr %0, i64 29944
  %33 = getelementptr inbounds i8, ptr %0, i64 30256
  %34 = getelementptr inbounds i8, ptr %0, i64 30304
  %35 = getelementptr inbounds i8, ptr %0, i64 30312
  %36 = getelementptr inbounds i8, ptr %0, i64 30328
  %37 = getelementptr inbounds i8, ptr %0, i64 95940
  %38 = getelementptr inbounds i8, ptr %0, i64 30104
  %39 = getelementptr inbounds i8, ptr %0, i64 30224
  %40 = getelementptr inbounds i8, ptr %0, i64 30216
  %41 = ptrtoint ptr %11 to i64
  %42 = getelementptr inbounds i8, ptr %0, i64 29948
  %gepdiff = sub nsw i64 %10, %7
  %43 = getelementptr inbounds i8, ptr %0, i64 29920
  %44 = getelementptr inbounds i8, ptr %0, i64 30320
  %45 = getelementptr inbounds i8, ptr %0, i64 29996
  %46 = getelementptr inbounds i8, ptr %0, i64 95944
  %47 = getelementptr inbounds i8, ptr %0, i64 29936
  %48 = getelementptr inbounds i8, ptr %0, i64 30264
  %49 = getelementptr inbounds i8, ptr %0, i64 30232
  %50 = getelementptr inbounds i8, ptr %0, i64 30248
  %51 = getelementptr inbounds i8, ptr %0, i64 30168
  %52 = getelementptr inbounds i8, ptr %0, i64 30240
  %53 = getelementptr inbounds i8, ptr %0, i64 30128
  br label %.thread430.outer

.thread430.outer:                                 ; preds = %.thread430.outer.backedge, %.preheader
  %.0304461.ph = phi ptr [ %8, %.preheader ], [ %.0304461.ph.be, %.thread430.outer.backedge ]
  br label %.thread430

.thread430:                                       ; preds = %.thread430.backedge, %.thread430.outer
  %54 = load i32, ptr %25, align 4, !tbaa !18
  switch i32 %54, label %.thread [
    i32 0, label %55
    i32 1, label %._crit_edge
    i32 2, label %.loopexit492
    i32 3, label %.loopexit493
    i32 4, label %227
  ]

._crit_edge:                                      ; preds = %.thread430
  %.pre = load i64, ptr %34, align 8, !tbaa !26
  br label %56

55:                                               ; preds = %.thread430
  store i32 1, ptr %25, align 4, !tbaa !18
  store i64 0, ptr %33, align 8, !tbaa !27
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(28) %27, i8 0, i64 28, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(24) %1, i64 24, i1 false), !tbaa.struct !28
  br label %56

56:                                               ; preds = %._crit_edge, %55
  %57 = phi i64 [ %.pre, %._crit_edge ], [ 0, %55 ]
  %58 = load i32, ptr %38, align 8, !tbaa !30
  %59 = call i64 @ZSTD_getFrameHeader_advanced(ptr noundef nonnull %31, ptr noundef nonnull %37, i64 noundef %57, i32 noundef %58)
  %60 = load i32, ptr %39, align 8, !tbaa !31
  %.not371 = icmp eq i32 %60, 0
  br i1 %.not371, label %64, label %61

61:                                               ; preds = %56
  %62 = load ptr, ptr %40, align 8, !tbaa !32
  %.not372 = icmp eq ptr %62, null
  br i1 %.not372, label %64, label %63

63:                                               ; preds = %61
  call void @ZSTD_DCtx_selectFrameDDict(ptr noundef nonnull %0)
  br label %64

64:                                               ; preds = %63, %61, %56
  %65 = call i32 @ZSTD_isError(i64 noundef %59)
  %.not373 = icmp eq i32 %65, 0
  br i1 %.not373, label %66, label %.thread

66:                                               ; preds = %64
  %.not374 = icmp eq i64 %59, 0
  br i1 %.not374, label %93, label %67

67:                                               ; preds = %66
  %68 = load i64, ptr %34, align 8, !tbaa !26
  %69 = sub i64 %59, %68
  %70 = ptrtoint ptr %.0304461.ph to i64
  %71 = sub i64 %41, %70
  %72 = icmp ugt i64 %69, %71
  br i1 %72, label %73, label %90

73:                                               ; preds = %67
  %.not375 = icmp eq ptr %11, %.0304461.ph
  br i1 %.not375, label %78, label %74

74:                                               ; preds = %73
  %75 = getelementptr inbounds i8, ptr %37, i64 %68
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %75, ptr align 1 %.0304461.ph, i64 %71, i1 false)
  %76 = load i64, ptr %34, align 8, !tbaa !26
  %77 = add i64 %76, %71
  store i64 %77, ptr %34, align 8, !tbaa !26
  br label %78

78:                                               ; preds = %74, %73
  %79 = phi i64 [ %77, %74 ], [ %68, %73 ]
  %80 = load i64, ptr %9, align 8, !tbaa !12
  store i64 %80, ptr %6, align 8, !tbaa !11
  %81 = load i32, ptr %38, align 8, !tbaa !30
  %82 = call i64 @ZSTD_getFrameHeader_advanced(ptr noundef nonnull %31, ptr noundef nonnull %37, i64 noundef %79, i32 noundef %81)
  %83 = call i32 @ERR_isError(i64 noundef %82)
  %.not376 = icmp eq i32 %83, 0
  br i1 %.not376, label %84, label %.thread

84:                                               ; preds = %78
  %85 = load i32, ptr %38, align 8, !tbaa !30
  %86 = icmp eq i32 %85, 0
  %87 = select i1 %86, i64 6, i64 2
  %. = call i64 @llvm.umax.i64(i64 %87, i64 %59)
  %88 = load i64, ptr %34, align 8, !tbaa !26
  %reass.sub = sub i64 %., %88
  %89 = add i64 %reass.sub, 3
  br label %.thread

90:                                               ; preds = %67
  %91 = getelementptr inbounds i8, ptr %37, i64 %68
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %91, ptr align 1 %.0304461.ph, i64 %69, i1 false)
  store i64 %59, ptr %34, align 8, !tbaa !26
  %92 = getelementptr inbounds i8, ptr %.0304461.ph, i64 %69
  br label %.thread430.outer.backedge

.thread430.outer.backedge:                        ; preds = %90, %190, %223
  %.0304461.ph.be = phi ptr [ %.9313, %223 ], [ %193, %190 ], [ %92, %90 ]
  br label %.thread430.outer, !llvm.loop !33

93:                                               ; preds = %66
  %94 = load i64, ptr %31, align 8, !tbaa !35
  %.not377 = icmp eq i64 %94, -1
  br i1 %.not377, label %.thread417, label %95

95:                                               ; preds = %93
  %96 = load i32, ptr %42, align 4, !tbaa !36
  %.not378 = icmp eq i32 %96, 1
  br i1 %.not378, label %.thread417, label %97

97:                                               ; preds = %95
  %98 = load ptr, ptr %4, align 8, !tbaa !17
  %99 = ptrtoint ptr %98 to i64
  %100 = sub i64 %28, %99
  %.not379 = icmp ult i64 %100, %94
  br i1 %.not379, label %.thread417, label %101

101:                                              ; preds = %97
  %102 = load i32, ptr %38, align 8, !tbaa !30
  %103 = call i64 @ZSTD_findFrameCompressedSize_advanced(ptr noundef %8, i64 noundef %gepdiff, i32 noundef %102)
  %.not380 = icmp ugt i64 %103, %gepdiff
  br i1 %.not380, label %.thread417, label %104

104:                                              ; preds = %101
  %105 = load ptr, ptr %4, align 8, !tbaa !17
  %106 = ptrtoint ptr %105 to i64
  %107 = sub i64 %28, %106
  %108 = call ptr @ZSTD_getDDict(ptr noundef nonnull %0)
  %109 = call i64 @ZSTD_decompress_usingDDict(ptr noundef nonnull %0, ptr noundef %105, i64 noundef %107, ptr noundef %8, i64 noundef %103, ptr noundef %108)
  %110 = call i32 @ZSTD_isError(i64 noundef %109)
  %.not381 = icmp eq i32 %110, 0
  br i1 %.not381, label %111, label %.thread

111:                                              ; preds = %104
  %112 = getelementptr inbounds i8, ptr %8, i64 %103
  %113 = load ptr, ptr %4, align 8
  %.not382 = icmp eq ptr %113, null
  %114 = getelementptr inbounds i8, ptr %113, i64 %109
  %115 = select i1 %.not382, ptr null, ptr %114
  store ptr %115, ptr %4, align 8, !tbaa !17
  store i64 0, ptr %43, align 8, !tbaa !37
  br label %.loopexit.sink.split

.thread417:                                       ; preds = %101, %97, %95, %93
  %116 = load i32, ptr %44, align 8, !tbaa !38
  %117 = icmp eq i32 %116, 1
  br i1 %117, label %118, label %127

118:                                              ; preds = %.thread417
  %119 = load i32, ptr %42, align 4, !tbaa !36
  %.not383 = icmp eq i32 %119, 1
  br i1 %.not383, label %127, label %120

120:                                              ; preds = %118
  %121 = load i64, ptr %31, align 8, !tbaa !35
  %.not384 = icmp eq i64 %121, -1
  br i1 %.not384, label %127, label %122

122:                                              ; preds = %120
  %123 = load ptr, ptr %4, align 8, !tbaa !17
  %124 = ptrtoint ptr %123 to i64
  %125 = sub i64 %28, %124
  %126 = icmp ult i64 %125, %121
  br i1 %126, label %.thread, label %127

127:                                              ; preds = %122, %120, %118, %.thread417
  %128 = call ptr @ZSTD_getDDict(ptr noundef nonnull %0)
  %129 = call i64 @ZSTD_decompressBegin_usingDDict(ptr noundef nonnull %0, ptr noundef %128)
  %130 = call i32 @ERR_isError(i64 noundef %129)
  %.not385 = icmp eq i32 %130, 0
  br i1 %.not385, label %131, label %.thread

131:                                              ; preds = %127
  %132 = load i32, ptr %38, align 8, !tbaa !30
  %133 = icmp eq i32 %132, 0
  br i1 %133, label %134, label %141

134:                                              ; preds = %131
  %135 = call i32 @MEM_readLE32(ptr noundef nonnull %37)
  %136 = and i32 %135, -16
  %137 = icmp eq i32 %136, 407710288
  br i1 %137, label %138, label %141

138:                                              ; preds = %134
  %139 = call i32 @MEM_readLE32(ptr noundef nonnull %46)
  %140 = zext i32 %139 to i64
  br label %145

141:                                              ; preds = %131, %134
  %142 = load i64, ptr %34, align 8, !tbaa !26
  %143 = call i64 @ZSTD_decodeFrameHeader(ptr noundef nonnull %0, ptr noundef nonnull %37, i64 noundef %142)
  %144 = call i32 @ERR_isError(i64 noundef %143)
  %.not386 = icmp eq i32 %144, 0
  br i1 %.not386, label %145, label %.thread

145:                                              ; preds = %141, %138
  %storemerge470 = phi i64 [ %140, %138 ], [ 3, %141 ]
  %storemerge = phi i32 [ 7, %138 ], [ 2, %141 ]
  store i64 %storemerge470, ptr %43, align 8, !tbaa !37
  store i32 %storemerge, ptr %45, align 4, !tbaa !39
  %146 = load i64, ptr %47, align 8, !tbaa !40
  %spec.select = call i64 @llvm.umax.i64(i64 %146, i64 1024)
  store i64 %spec.select, ptr %47, align 8, !tbaa !40
  %147 = load i64, ptr %48, align 8, !tbaa !41
  %148 = icmp ugt i64 %spec.select, %147
  br i1 %148, label %.thread, label %149

149:                                              ; preds = %145
  %150 = load i32, ptr %49, align 8, !tbaa !42
  %.not387 = icmp eq i32 %150, 0
  %.pre467 = load i32, ptr %32, align 8, !tbaa !43
  br i1 %.not387, label %152, label %151

151:                                              ; preds = %149
  %.394 = call i32 @llvm.umin.i32(i32 %.pre467, i32 %150)
  store i32 %.394, ptr %32, align 8, !tbaa !43
  br label %152

152:                                              ; preds = %151, %149
  %153 = phi i32 [ %.394, %151 ], [ %.pre467, %149 ]
  %spec.select395 = call i32 @llvm.umax.i32(i32 %153, i32 4)
  %154 = zext i32 %spec.select395 to i64
  %155 = load i32, ptr %44, align 8, !tbaa !38
  %156 = icmp eq i32 %155, 0
  br i1 %156, label %157, label %161

157:                                              ; preds = %152
  %158 = load i64, ptr %31, align 8, !tbaa !35
  %159 = zext i32 %153 to i64
  %160 = call i64 @ZSTD_decodingBufferSize_internal(i64 noundef %spec.select, i64 noundef %158, i64 noundef %159)
  br label %161

161:                                              ; preds = %152, %157
  %162 = phi i64 [ %160, %157 ], [ 0, %152 ]
  call void @ZSTD_DCtx_updateOversizedDuration(ptr noundef nonnull %0, i64 noundef %154, i64 noundef %162)
  %163 = load i64, ptr %50, align 8, !tbaa !44
  %164 = icmp ult i64 %163, %154
  br i1 %164, label %.thread422, label %166

.thread422:                                       ; preds = %161
  %165 = call i32 @ZSTD_DCtx_isOversizedTooLong(ptr noundef nonnull %0)
  br label %171

166:                                              ; preds = %161
  %167 = load i64, ptr %30, align 8, !tbaa !45
  %168 = icmp ult i64 %167, %162
  %169 = call i32 @ZSTD_DCtx_isOversizedTooLong(ptr noundef nonnull %0)
  %170 = icmp ne i32 %169, 0
  %or.cond = select i1 %168, i1 true, i1 %170
  br i1 %or.cond, label %171, label %184

171:                                              ; preds = %.thread422, %166
  %172 = add i64 %162, %154
  %173 = load i64, ptr %51, align 8, !tbaa !46
  %.not388 = icmp eq i64 %173, 0
  br i1 %.not388, label %177, label %174

174:                                              ; preds = %171
  %175 = add i64 %173, -95968
  %176 = icmp ugt i64 %172, %175
  br i1 %176, label %.thread, label %._crit_edge468

._crit_edge468:                                   ; preds = %174
  %.pre469 = load ptr, ptr %52, align 8, !tbaa !47
  br label %181

177:                                              ; preds = %171
  %178 = load ptr, ptr %52, align 8, !tbaa !47
  call void @ZSTD_customFree(ptr noundef %178, ptr noundef nonnull byval(%struct.ZSTD_customMem) align 8 %53)
  store i64 0, ptr %50, align 8, !tbaa !44
  store i64 0, ptr %30, align 8, !tbaa !45
  %179 = call ptr @ZSTD_customMalloc(i64 noundef %172, ptr noundef nonnull byval(%struct.ZSTD_customMem) align 8 %53)
  store ptr %179, ptr %52, align 8, !tbaa !47
  %180 = icmp eq ptr %179, null
  br i1 %180, label %.thread, label %181

181:                                              ; preds = %._crit_edge468, %177
  %182 = phi ptr [ %.pre469, %._crit_edge468 ], [ %179, %177 ]
  store i64 %154, ptr %50, align 8, !tbaa !44
  %183 = getelementptr inbounds i8, ptr %182, i64 %154
  store ptr %183, ptr %29, align 8, !tbaa !48
  store i64 %162, ptr %30, align 8, !tbaa !45
  br label %184

184:                                              ; preds = %166, %181
  store i32 2, ptr %25, align 4, !tbaa !18
  br label %.loopexit492

.loopexit492:                                     ; preds = %.thread430, %184
  %185 = ptrtoint ptr %.0304461.ph to i64
  %186 = sub i64 %41, %185
  %187 = call i64 @ZSTD_nextSrcSizeToDecompressWithInputSize(ptr noundef nonnull %0, i64 noundef %186)
  %188 = icmp eq i64 %187, 0
  br i1 %188, label %.loopexit.sink.split, label %189

189:                                              ; preds = %.loopexit492
  %.not389 = icmp ult i64 %186, %187
  br i1 %.not389, label %194, label %190

190:                                              ; preds = %189
  %191 = call i64 @ZSTD_decompressContinueStream(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %18, ptr noundef %.0304461.ph, i64 noundef %187)
  %192 = call i32 @ERR_isError(i64 noundef %191)
  %.not390 = icmp eq i32 %192, 0
  %193 = getelementptr inbounds i8, ptr %.0304461.ph, i64 %187
  br i1 %.not390, label %.thread430.outer.backedge, label %.thread

194:                                              ; preds = %189
  %195 = icmp eq ptr %.0304461.ph, %11
  br i1 %195, label %.loopexit, label %196

196:                                              ; preds = %194
  store i32 3, ptr %25, align 4, !tbaa !18
  br label %.loopexit493

.loopexit493:                                     ; preds = %.thread430, %196
  %197 = call i64 @ZSTD_nextSrcSizeToDecompress(ptr noundef nonnull %0)
  %198 = load i64, ptr %33, align 8, !tbaa !27
  %199 = sub i64 %197, %198
  %200 = call i32 @ZSTD_isSkipFrame(ptr noundef nonnull %0)
  %.not391 = icmp eq i32 %200, 0
  br i1 %.not391, label %205, label %201

201:                                              ; preds = %.loopexit493
  %202 = ptrtoint ptr %.0304461.ph to i64
  %203 = sub i64 %41, %202
  %204 = call i64 @llvm.umin.i64(i64 %199, i64 %203)
  br label %216

205:                                              ; preds = %.loopexit493
  %206 = load i64, ptr %50, align 8, !tbaa !44
  %207 = load i64, ptr %33, align 8, !tbaa !27
  %208 = sub i64 %206, %207
  %209 = icmp ugt i64 %199, %208
  br i1 %209, label %.thread, label %210

210:                                              ; preds = %205
  %211 = load ptr, ptr %52, align 8, !tbaa !47
  %212 = getelementptr inbounds i8, ptr %211, i64 %207
  %213 = ptrtoint ptr %.0304461.ph to i64
  %214 = sub i64 %41, %213
  %215 = call i64 @ZSTD_limitCopy(ptr noundef %212, i64 noundef %199, ptr noundef %.0304461.ph, i64 noundef %214)
  br label %216

216:                                              ; preds = %210, %201
  %.0325 = phi i64 [ %204, %201 ], [ %215, %210 ]
  %.not392 = icmp eq i64 %.0325, 0
  br i1 %.not392, label %221, label %217

217:                                              ; preds = %216
  %218 = getelementptr inbounds i8, ptr %.0304461.ph, i64 %.0325
  %219 = load i64, ptr %33, align 8, !tbaa !27
  %220 = add i64 %219, %.0325
  store i64 %220, ptr %33, align 8, !tbaa !27
  br label %221

221:                                              ; preds = %217, %216
  %.9313 = phi ptr [ %218, %217 ], [ %.0304461.ph, %216 ]
  %222 = icmp ult i64 %.0325, %199
  br i1 %222, label %.loopexit, label %223

223:                                              ; preds = %221
  store i64 0, ptr %33, align 8, !tbaa !27
  %224 = load ptr, ptr %52, align 8, !tbaa !47
  %225 = call i64 @ZSTD_decompressContinueStream(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef %18, ptr noundef %224, i64 noundef %197)
  %226 = call i32 @ERR_isError(i64 noundef %225)
  %.not393 = icmp eq i32 %226, 0
  br i1 %.not393, label %.thread430.outer.backedge, label %.thread

227:                                              ; preds = %.thread430
  %228 = load i64, ptr %26, align 8, !tbaa !49
  %229 = load i64, ptr %27, align 8, !tbaa !50
  %230 = sub i64 %228, %229
  %231 = load ptr, ptr %4, align 8, !tbaa !17
  %232 = ptrtoint ptr %231 to i64
  %233 = sub i64 %28, %232
  %234 = load ptr, ptr %29, align 8, !tbaa !48
  %235 = getelementptr inbounds i8, ptr %234, i64 %229
  %236 = call i64 @ZSTD_limitCopy(ptr noundef %231, i64 noundef %233, ptr noundef %235, i64 noundef %230)
  %237 = load ptr, ptr %4, align 8
  %.not370 = icmp eq ptr %237, null
  %238 = getelementptr inbounds i8, ptr %237, i64 %236
  %239 = select i1 %.not370, ptr null, ptr %238
  store ptr %239, ptr %4, align 8, !tbaa !17
  %240 = load i64, ptr %27, align 8, !tbaa !50
  %241 = add i64 %240, %236
  store i64 %241, ptr %27, align 8, !tbaa !50
  %242 = icmp eq i64 %236, %230
  br i1 %242, label %243, label %.loopexit

243:                                              ; preds = %227
  store i32 2, ptr %25, align 4, !tbaa !18
  %244 = load i64, ptr %30, align 8, !tbaa !45
  %245 = load i64, ptr %31, align 8, !tbaa !35
  %246 = icmp ult i64 %244, %245
  br i1 %246, label %247, label %.thread430.backedge

.thread430.backedge:                              ; preds = %243, %247, %252
  br label %.thread430, !llvm.loop !33

247:                                              ; preds = %243
  %248 = load i32, ptr %32, align 8, !tbaa !43
  %249 = zext i32 %248 to i64
  %250 = add i64 %241, %249
  %251 = icmp ugt i64 %250, %244
  br i1 %251, label %252, label %.thread430.backedge

252:                                              ; preds = %247
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %27, i8 0, i64 16, i1 false)
  br label %.thread430.backedge

.loopexit.sink.split:                             ; preds = %.loopexit492, %111
  %.11315.ph.ph = phi ptr [ %112, %111 ], [ %.0304461.ph, %.loopexit492 ]
  store i32 0, ptr %25, align 4, !tbaa !18
  br label %.loopexit

.loopexit:                                        ; preds = %227, %194, %221, %.loopexit.sink.split
  %.11315.ph = phi ptr [ %.11315.ph.ph, %.loopexit.sink.split ], [ %.0304461.ph, %227 ], [ %.9313, %221 ], [ %11, %194 ]
  %253 = load ptr, ptr %2, align 8, !tbaa !5
  %254 = ptrtoint ptr %.11315.ph to i64
  %255 = ptrtoint ptr %253 to i64
  %256 = sub i64 %254, %255
  store i64 %256, ptr %6, align 8, !tbaa !11
  %257 = load ptr, ptr %4, align 8
  %258 = load ptr, ptr %1, align 8, !tbaa !13
  %259 = ptrtoint ptr %257 to i64
  %260 = ptrtoint ptr %258 to i64
  %261 = sub i64 %259, %260
  store i64 %261, ptr %13, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(24) %1, i64 24, i1 false), !tbaa.struct !28
  %262 = icmp eq ptr %.11315.ph, %8
  %263 = icmp eq ptr %257, %15
  %or.cond399 = select i1 %262, i1 %263, i1 false
  %264 = getelementptr inbounds i8, ptr %0, i64 30316
  br i1 %or.cond399, label %265, label %273

265:                                              ; preds = %.loopexit
  %266 = load i32, ptr %264, align 4, !tbaa !51
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %264, align 4, !tbaa !51
  %268 = icmp sgt i32 %266, 14
  br i1 %268, label %269, label %274

269:                                              ; preds = %265
  %270 = icmp eq i64 %14, %17
  br i1 %270, label %.thread, label %271

271:                                              ; preds = %269
  %272 = icmp eq i64 %7, %10
  br i1 %272, label %.thread, label %274

273:                                              ; preds = %.loopexit
  store i32 0, ptr %264, align 4, !tbaa !51
  br label %274

274:                                              ; preds = %265, %271, %273
  %275 = call i64 @ZSTD_nextSrcSizeToDecompress(ptr noundef nonnull %0)
  %.not366 = icmp eq i64 %275, 0
  br i1 %.not366, label %276, label %292

276:                                              ; preds = %274
  %277 = load i64, ptr %26, align 8, !tbaa !49
  %278 = load i64, ptr %27, align 8, !tbaa !50
  %279 = icmp eq i64 %277, %278
  %280 = load i32, ptr %35, align 8, !tbaa !52
  %.not368 = icmp eq i32 %280, 0
  br i1 %279, label %281, label %288

281:                                              ; preds = %276
  br i1 %.not368, label %.thread, label %282

282:                                              ; preds = %281
  %283 = load i64, ptr %6, align 8, !tbaa !11
  %284 = load i64, ptr %9, align 8, !tbaa !12
  %.not369 = icmp ult i64 %283, %284
  br i1 %.not369, label %286, label %285

285:                                              ; preds = %282
  store i32 2, ptr %25, align 4, !tbaa !18
  br label %.thread

286:                                              ; preds = %282
  %287 = add nuw i64 %283, 1
  store i64 %287, ptr %6, align 8, !tbaa !11
  br label %.thread

288:                                              ; preds = %276
  br i1 %.not368, label %289, label %.thread

289:                                              ; preds = %288
  %290 = load i64, ptr %6, align 8, !tbaa !11
  %291 = add i64 %290, -1
  store i64 %291, ptr %6, align 8, !tbaa !11
  store i32 1, ptr %35, align 8, !tbaa !52
  br label %.thread

292:                                              ; preds = %274
  %293 = call i32 @ZSTD_nextInputType(ptr noundef nonnull %0)
  %294 = icmp eq i32 %293, 2
  %295 = select i1 %294, i64 3, i64 0
  %296 = load i64, ptr %33, align 8, !tbaa !27
  %297 = sub i64 %275, %296
  %298 = add i64 %297, %295
  br label %.thread

.thread:                                          ; preds = %.thread430, %190, %64, %205, %223, %177, %174, %145, %122, %141, %127, %104, %78, %84, %285, %292, %286, %281, %289, %288, %271, %269, %20, %3, %22
  %.22 = phi i64 [ %23, %22 ], [ -72, %3 ], [ -70, %20 ], [ -80, %269 ], [ -82, %271 ], [ %298, %292 ], [ 1, %285 ], [ 0, %286 ], [ 0, %281 ], [ 1, %289 ], [ 1, %288 ], [ %82, %78 ], [ %89, %84 ], [ %109, %104 ], [ -1, %.thread430 ], [ %143, %141 ], [ %129, %127 ], [ -70, %122 ], [ -16, %145 ], [ -64, %174 ], [ -64, %177 ], [ %225, %223 ], [ -20, %205 ], [ %59, %64 ], [ %191, %190 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  ret i64 %.22
}

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_checkOutBuffer(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @ZSTD_DCtx_selectFrameDDict(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @ZSTD_DCtx_updateOversizedDuration(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare hidden i64 @ZSTD_decompressContinueStream(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @ZSTD_limitCopy(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #4

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #4

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"ZSTD_inBuffer_s", !7, i64 0, !10, i64 8, !10, i64 16}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!6, !10, i64 16}
!12 = !{!6, !10, i64 8}
!13 = !{!14, !7, i64 0}
!14 = !{!"ZSTD_outBuffer_s", !7, i64 0, !10, i64 8, !10, i64 16}
!15 = !{!14, !10, i64 16}
!16 = !{!14, !10, i64 8}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !23, i64 30236}
!19 = !{!"ZSTD_DCtx_s", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !20, i64 32, !8, i64 27324, !7, i64 29888, !7, i64 29896, !7, i64 29904, !7, i64 29912, !10, i64 29920, !21, i64 29928, !10, i64 29976, !10, i64 29984, !23, i64 29992, !23, i64 29996, !23, i64 30000, !23, i64 30004, !24, i64 30008, !10, i64 30096, !23, i64 30104, !23, i64 30108, !23, i64 30112, !7, i64 30120, !25, i64 30128, !10, i64 30152, !10, i64 30160, !10, i64 30168, !23, i64 30176, !23, i64 30180, !7, i64 30184, !7, i64 30192, !23, i64 30200, !23, i64 30204, !23, i64 30208, !7, i64 30216, !23, i64 30224, !23, i64 30228, !23, i64 30232, !23, i64 30236, !7, i64 30240, !10, i64 30248, !10, i64 30256, !10, i64 30264, !7, i64 30272, !10, i64 30280, !10, i64 30288, !10, i64 30296, !10, i64 30304, !23, i64 30312, !23, i64 30316, !23, i64 30320, !14, i64 30328, !7, i64 30352, !7, i64 30360, !23, i64 30368, !8, i64 30372, !8, i64 95940, !10, i64 95960}
!20 = !{!"", !8, i64 0, !8, i64 4104, !8, i64 6160, !8, i64 10264, !8, i64 26652, !8, i64 26664}
!21 = !{!"", !22, i64 0, !22, i64 8, !23, i64 16, !23, i64 20, !23, i64 24, !23, i64 28, !23, i64 32, !23, i64 36, !23, i64 40}
!22 = !{!"long long", !8, i64 0}
!23 = !{!"int", !8, i64 0}
!24 = !{!"XXH_NAMESPACEXXH64_state_s", !10, i64 0, !8, i64 8, !8, i64 40, !23, i64 72, !23, i64 76, !10, i64 80}
!25 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16}
!26 = !{!19, !10, i64 30304}
!27 = !{!19, !10, i64 30256}
!28 = !{i64 0, i64 8, !17, i64 8, i64 8, !29, i64 16, i64 8, !29}
!29 = !{!10, !10, i64 0}
!30 = !{!19, !23, i64 30104}
!31 = !{!19, !23, i64 30224}
!32 = !{!19, !7, i64 30216}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!19, !22, i64 29928}
!36 = !{!19, !23, i64 29948}
!37 = !{!19, !10, i64 29920}
!38 = !{!19, !23, i64 30320}
!39 = !{!19, !23, i64 29996}
!40 = !{!19, !22, i64 29936}
!41 = !{!19, !10, i64 30264}
!42 = !{!19, !23, i64 30232}
!43 = !{!19, !23, i64 29944}
!44 = !{!19, !10, i64 30248}
!45 = !{!19, !10, i64 30280}
!46 = !{!19, !10, i64 30168}
!47 = !{!19, !7, i64 30240}
!48 = !{!19, !7, i64 30272}
!49 = !{!19, !10, i64 30296}
!50 = !{!19, !10, i64 30288}
!51 = !{!19, !23, i64 30316}
!52 = !{!19, !23, i64 30312}


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